1
0
mirror of https://github.com/unrealircd/unrealircd.git synced 2026-06-30 18:06:38 +02:00
This commit is contained in:
Bram Matthys
2004-04-24 23:16:03 +00:00
parent c7dcad793c
commit 00bd34adf4
51 changed files with 4717 additions and 652 deletions
+1 -1
View File
@@ -7,7 +7,7 @@
\___/|_| |_|_| \___|\__,_|_|\___/\_| \_| \____/\__,_|
Configuration Program
for Unreal3.2-RC2
for Unreal3.2
This program will help you to compile your IRC server, and ask you
questions regarding the compile-time settings of it during the process.
+32 -59
View File
@@ -1,77 +1,50 @@
Unreal3.2-RC2 Release Notes
============================
Unreal3.2 Release Notes
========================
==[ GENERAL INFORMATION ]==
* This is the second (and hopefully last) Release Candidate.
After this we intend to release 3.2 final.
* If you are upgrading, make sure you run ./Config and make clean before doing make
* If you are upgrading, make sure you run make clean and ./Config before doing make
* The official UnrealIRCd documentation is doc/unreal32docs.html
online version at: http://www.vulnscan.org/UnrealIrcd/unreal32docs.html
FAQ: http://www.vulnscan.org/UnrealIrcd/faq/
Read them before asking for help.
* Report bugs at http://bugs.unrealircd.org/
* This is a recommended release because various crashbugs have been fixed.
== [NEW FEATURES (see unreal32docs.html for more information) ]==
* Lots of spamfilter improvements.
* The new syntax is:
/spamfilter [what] [type] [action] [tkltime] [reason] [regex]
[tkltime] specifies the duration of any *lines placed by this rule.
[reason] specifies the *line, kill and/or block reason.. no spaces
allowed, but '_' will be translated to a space.
In both cases you can simply use '-' to skip and use the default.
Ex: /spamfilter add p block - - Come watch me on my webcam
/spamfilter add p gline 3h Please_go_to_www.viruscan.xx/[linewrap]
nicepage/virus=blah Come watch me on my webcam
* The spamfilter { } blocks also have a new 'reason' and 'ban-time' field.
* The user will now receive a notice if the msg/notice/dcc is blocked.
* There are 2 new spamfilter action types:
'dccblock' will mark the user so (s)he's unable to send any files by DCC.
'viruschan' will part the user from all channels and join
set::spamfilter::virus-help-channel (default: #help).
After this all commands for the user are disabled except: PONG, ADMIN
and NOTICE/PRIVMSG's to the virus-help-channel.
Also any ops (+oaq) in the virus help channel will receive a notice
explaining which filter the user matched (so they can help the user out).
* Added set::spamfilter::except which allows you to specify targets where
spamfilter should not take action. Useful for spam-report/help chans.
Ex: set { spamfilter { except "#spamreport,#help"; }; };
* there's now a 'spamfilter.conf' file with some effective spamfilter rules.
* Added '/tempshun' command (/tempshun nick reason, /tempshun -nick).
== [ NEW ]==
- Added german docs (doc/unreal32docs.de.html)
- In a spamfilter reason field '_' gets converted to a space (' '),
now also added '__' which gets converted to underscore itself ('_').
==[ MAJOR BUGS FIXED ]==
* The ircd was unable to boot on some OSs because unreal removed tmp/
* crash: if an invalid regex was entered (eg: in spamfilter) the ircd could crash
* crash: The TRE regex library could be crashed in case of some (advanced) regexes.
* crash: several remote includes problems (also non-crash)
* crash/security: an user-triggerable crash bug
* Fixed problem with 'tkl update' which could lead to server fights in some cases.
- '/spamfiltere remove' was often removing the wrong entry (RC2 bug)
- The TRE regex library was sometimes matching too much if [range].+
was used multiple times.
- Fixed a remote include issue and added timeouts in case a connection/transfer fails
==[ MINOR BUGS FIXED ]==
* allow::options::noident now actually works
* Fixed compile problem on Solaris
* Some OperOverride + ExtModes fixes (eg: globop w/can_override couldn't set +T)
* +qaohv'ing a network service was disallowed
* chanmode +f was often reset on synch when it was already the same at both sides
* Spamfilter single-target are now supported, eg:
spamfilter { regex "blah"; action kill; target private; };
previously the ircd didn't warn about this (but it didn't work).
- Sometimes hosts were not resolved on Windows due to a resolver bug
- spamfilter and sqline: memory leak on /rehash (a few kb)
- spamfilter: protect against insane long reason/regex fields in configfile
- set::modes-on-join now accepts extended channelmodes
- Opteron: various crashbugs fixed, should work ok now.
- Win32 GUI "rehash all" option did not reload motd/rules.
- Same for ./unreal rehash on *NIX
- Usermode 'r' (registered) was unset if you changed the case of your
nick (eg: 'blah'->'Blah'), this affected at least ircservices.
- vhost::swhois wasn't shown if you did a remote /whois.
- Made './curlinstall' work with new c-ares-1.0.0.
- Fixed compile problem on some machines related to TRE / libintl.
- /who +m was incorrectly hiding +H users even for opers.
- Fixed /rehash bug if an .so or remote include didn't load properly
==[ CHANGED ]==
* Updated /credits. Now includes everyone who has sent in donations,
thanks to everyone!
* Various help.conf/docs updates as usual
* New hooks for module coders and other module system improvements.
* Modulized A LOT of commands (34): this allows better "hot patching"
and leaving out commands (eg: loading all m_*.so mods except m_addline.so).
* Moved SQLINE system (and ban nick) to TKL and introduced "holds",
this might later be used by services for nick enforcement.
* Restricted class::pingfreq to 30-600.. anything higher and you might get
mysterious (mass) disconnect issues... Anything lower is dumb too.
* Added checking for insane listen port ranges (eg 6667-7000).
* Improved DCC blocking (like dcc to channels)
* Made some numerics more clear by including the channelname (+V/+O/+A)
- spamfilter.conf: fixed fyle sig, added sigs for: soex, Nkie, LOI, Gaggle,
changed a lot of sigs from block to gline.
- Windows: now using new Inno Setup which made the installer 300k smaller
- Docs, help.conf and other text updates.
==[ COMMING UP ]==
- You can expect module support on windows in a nearby release.
==[ ADDITIONAL INFO ]==
* See Changelog
+100
View File
@@ -3012,3 +3012,103 @@ seen. gmtime warning still there
- Fixed a bug regarding the new HOOKTYPE_PRE_LOCAL_JOIN reported by bla
- Fixed a compile problem on Solaris due to tar not supporting the z option
*** RC2fix release ***
- spamfilter.conf: fixed fyle sig (was bad!), some minor updates to the rest,
added mirc 6.12 exploit sig. Reported by PHANTOm.
- Added a check to try and prevent people from adding all-encompassing
regexp's in /spamfilter. Thanks to Ville Laurikari for coming up with the
method!
- Removed the old/unused src/win32/version.c (#0001630) reported by fez
- Updated docs to mention except tkl {} type qline/gqline
- spamfilter.conf: added soex trojan. Sig provided by Jay.
- Fixed a spamfilter memory leak
- Added '__' -> '_' decoding for spamfilter reason field.
- Made it so set::modes-on-join correctly works with extcmodes. Note: to
correctly work with modes created by modules, the module _must_ call CmodeAdd
from Mod_Test (#0001624) reported by thunderbirdjl
- Made some changes to the curlinstall script to make it work with c-ares-1.0.0
also updated INSTALL.REMOTEINC
- Fixed a typo in the /credits
- Made it so curlinstall doesn't use cp -f since it is nonportable
- Hide server IP in /stats z
- First Opteron crash bugfix. Thanks to Liverbugg for helping us trace this issue.
- More Opteron fixes... sizeof() fun, %B fun (always use a 'long'!), etc..
- Added __attribute__ stuff for ircsprintf() to catch more warnings.
- Fixed win32 compile problem. Reported by Troco (#0001644).
- Added a missing ',' to the version.c.SH script reported by docco (#0001643)
- Added conf check for too large spamfilter regex + reason field. Reported by
Z3l3zT (#0001648).
- Added spamfilters for the Nkie worm
- Fixed a little sqline recode memory leak
- Fixed /spamfilter removal problem... often the wrong entry was removed [!] or
nothing was removed at all. Reported by MiNdErAsR, RealCFC and others (#0001669).
- Fixed /spamfilter reason field bug.. things were double escaped sometimes,
especially in post-RC2-cvs this was noticable. Reported by Fury (#0001670).
- help.conf: updated snomasks section.
- Added a patch by baafie to fix a problem where environment variables could not
be specified in the Config script (#0001657)
- Imported TRE 0.6.6 on Win32 and Linux
- Made use of TRE's pkg-config support to solve a problem with libintl reported by
raistlinmajere (#0001592)
- Fixed a problem with /stats S and extended channel modes (#0001675) reported by
AngryWolf
- Fixed a resolver problem that could cause hosts to not be resolved on some Windows
systems
- Fixed a problem where the win32 GUI's "rehash all" option did not reload motd/rules
(#0001678) reported by w00t
- Made some changes to the win32 setup script to make it work with the latest version
of Inno Setup (4.2.0)
- Made the setup script use the new compression method 'lzma' which makes the setup.exe
~300Kb smaller. Now also requires Inno Setup 4.1.6 (tested with 4.2.0).
- Usermode 'r' (registered) was unset even in case of "case"-nickchanges (like:
'Syzop' -> 'syzop'). This affected f.e. ircservices. Reported by LoVeR (#0001679).
- spamfilter.conf: changed a lot of rules from 'block' to 'gline', left some
on 'block' however if there was some (very low) chance on false positives (even though
just like 0.01%).
- Fixed an SVSMODE #chan -qaohv bug that would cause the user to be able to readd the mode
(#0001690) reported by auspice
- spamfilter.conf: added signature for LOI trojan.
- Added german translation of unreal32docs (doc/unreal32docs.de.html), translated
by Stylus740 which will also maintain it.
- Patched TRE 0.6.6 to fix known crashbug (#0001684), testing is welcomed.
- Applied the above patch to the win32 TRE dll/lib files.
- Fixed a problem with vhost::swhois not being displayed remotely (#0001702) reported by
medice.
- Windows: Updated makefile/unrealinst.iss/zip.h to use zlib 1.2.1.
- Updated credits
- German doc updates (spelling+synch).
- Updated /credits a bit more
- Updated the /stats ? output to say Q is sqline and q is ban nick (#0001689) reported
by Alzirr
- Made a note in example.conf about not using link::options::autoconnect for services
(#0001674) suggested by fez
- Fixed a typo in /credits
- Fixed something if sptr->user->virthost was NULL (which is/should never be the case),
just to be sure... (#0001724).
- Updated server<->server code for MODE so operoverride bug #0001704 and other
feature requests can be fixed/added in the future (3.2.1).
- Fixed /who +m bug for opers, reported by Bugz (#0001715).
- Fixed halfop mode code to not check remote halfop modes (desynch danger).
- Force a TRE recompile if ./Config is re-run, due to timestamp fun if you were
upgrading to CVS every time TRE was not recompiled even if you did make clean.
- Made ./unreal rehash (= kill -1 <pid>) also reread motd/rules/etc just as a
normal /rehash does, reported by superh (#0001699).
- Various doc/text updates
- Added some release notes already.
- Fixed /rehash bug if an .so (or remote include?) failed to load properly,
reported by fez (#0001736).
- doc/unreal32docs.html and help.conf updates (#0001734 + other stuff).
- spamfilter.conf: added signatures for Gaggle worm.
- Changed version to pre1
- Fixed SJOIN bug: it sometimes was setting too many modes at once.
- Minor sajoin/sapart ERR_NEEDMOREPARAMS tweak.
** internal pre1 release **
- Docs/help.conf tweak on /connect syntax (#0001755).
- German doc updates (from April 18) + gzline docs tweak.
- Fixed some remote includes issues and added a connect/transfer timeout, server should
now no longer be frozen if the site is unreachable. Reported by Ron2K (#0001751).
- Changed version to 3.2 already
** internal pre2 release **
- Added temporary fix for include "http://www.blah.com/"; crashbug...although I doubt
many people would use it. Reported by Angrywolf (#0001757).
- Some doc/release notes updates on win module support.
*** 3.2 release ***
+8 -6
View File
@@ -16,6 +16,8 @@
# in the cache file is valid and therefore doesn't check it, so if you messed with
# default values thats your problem :P
# some bits edited by baafie on March 17 2004, every change marked.
RUN_CONFIGURE () {
ARG=""
@@ -195,7 +197,7 @@ read cc
if [ -z "$cc" ] ; then
DPATH=$TEST
else
DPATH=$cc
DPATH=`eval echo $cc` # modified
fi
TEST="$SPATH"
@@ -206,7 +208,7 @@ echo $n "[$TEST] -> $c"
if [ -z "$cc" ] ; then
SPATH=$TEST
else
SPATH=$cc
SPATH=`eval echo $cc` # modified
fi
TEST=""
@@ -247,7 +249,7 @@ echo $n "[$TEST] -> $c"
if [ -z "$cc" ] ; then
DOMAINNAME=$TEST
else
DOMAINNAME=$cc
DOMAINNAME=`eval echo $cc` # modified
fi
TEST=""
@@ -314,7 +316,7 @@ echo $n "[$TEST] -> $c"
if [ -z "$cc" ] ; then
SSLDIR=""
else
SSLDIR=$cc
SSLDIR=`eval echo $cc` # modified
fi
fi
@@ -386,7 +388,7 @@ echo $n "[$TEST] -> $c"
if [ -z "$cc" ] ; then
ZIPLINKSDIR=""
else
ZIPLINKSDIR=$cc
ZIPLINKSDIR=`eval echo $cc` # modified
fi
fi
@@ -432,7 +434,7 @@ if [ "$REMOTEINC" = "1" ] ; then
cc=$TEST
else
TEST=$cc
CURLDIR=$cc
CURLDIR=`eval echo $cc` # modified
fi
done
fi
+5 -7
View File
@@ -1,10 +1,8 @@
**** Remote Includes ****
Setting up UnrealIRCd to work with remote includes is not very difficult. The first step is to
download c-ares (also known as arescurl). At the time of this writing, only a pre-release
version of c-ares is available and can be downloaded at <http://curl.haxx.se/beta/> in the
future stable versions will be available at <http://curl.haxx.se/download.html> download
the latest version of c-ares and extract the .tar.gz somewhere.
download c-ares. C-ares can be downloaded from <http://daniel.haxx.se/projects/c-ares/>
download the latest version of c-ares and extract the .tar.gz somewhere.
Now, download the latest version of curl, available at <http://curl.haxx.se/download.html>
again, extract the tar.gz somewhere.
@@ -14,10 +12,10 @@ as follows:
./curlinstall ares_path curl_path
Paths should be complete pathnames. If you extracted ares to /home/username/arescurl-1.0-pre1
and curl to /home/username/curl-7.10.8 then you would run:
Paths should be complete pathnames. If you extracted c-ares to /home/username/c-ares-1.0.0
and curl to /home/username/curl-7.11.0 then you would run:
./curlinstall /home/username/arescurl-1.0-pre1 /home/username/curl-7.10.8
./curlinstall /home/username/c-ares-1.0.0 /home/username/curl-7.11.0
Lastly, run ./Config. When asked whether to enable remote includes say "yes" and when asked
for the path curl was installed to include the path that is printed out after ./curlinstall
+1 -1
View File
@@ -34,7 +34,7 @@ FROMDOS=/home/cmunk/bin/4dos
#
#XCFLAGS=-O -g -export-dynamic
IRCDLIBS=@IRCDLIBS@ -L../extras/regexp/lib -ltre
IRCDLIBS=@IRCDLIBS@ @TRELIBS@
CRYPTOLIB=@CRYPTOLIB@
OPENSSLINCLUDES=
-15
View File
@@ -1,15 +0,0 @@
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$ ]
+35 -32
View File
@@ -1,5 +1,5 @@
===============================================
= UnrealIRCd v3.2 (RC2) =
= UnrealIRCd v3.2 =
===============================================
Was brought to you by:
@@ -9,10 +9,10 @@
* codemastr <codemastr@unrealircd.com>
* Syzop <syzop@unrealircd.org>
* Luke <luke@unrealircd.com>
* McSkaf <mcskaf@unrealircd.org>
Contributors
============
* McSkaf <mcskaf@unrealircd.org>
* Zogg <zogg@unrealircd.org>
* NiQuiL <niquil@unrealircd.org>
* assyrian <assyrian@unrealircd.org>
@@ -28,40 +28,43 @@
Precenses on the Internet:
* http://www.unrealircd.com
CVS:
To get anonymous access: (read only)
"cvs -d :pserver:anonymous@cvs.ircsystems.net:/home/cmunk/ircsystems/cvsroot login"
CVS
====
To get anonymous access: (read only)
"cvs -d :pserver:anonymous@cvs.ircsystems.net:/home/cmunk/ircsystems/cvsroot login"
press enter when asked for password
press enter when asked for password
Then, choose the appropiate branch you want:
and to get latest stable:
"cvs -d :pserver:anonymous@cvs.ircsystems.net:/home/cmunk/ircsystems/cvsroot checkout -r stable -d Unreal-stable unreal"
latest 3.2 release ("stable"):
"cvs -d :pserver:anonymous@cvs.ircsystems.net:/home/cmunk/ircsystems/cvsroot checkout -r stable -d Unreal-stable unreal"
latest beta:
"cvs -d :pserver:anonymous@cvs.ircsystems.net:/home/cmunk/ircsystems/cvsroot checkout -r beta -d Unreal-beta unreal"
latest 3.2 fixes / development ("unreal3_2_fixes"):
"cvs -d :pserver:anonymous@cvs.ircsystems.net:/home/cmunk/ircsystems/cvsroot checkout -r unreal3_2_fixes -d Unreal-stable unreal"
latest devel:
"cvs -d :pserver:anonymous@cvs.ircsystems.net:/home/cmunk/ircsystems/cvsroot checkout -r devel -d Unreal-devel unreal"
To get support
================
Before asking others for help you MUST:
* read the docs (doc/unreal32docs.html or online: www.unrealircd.com/unreal32docs.html)
* check the FAQ (www.vulnscan.org/UnrealIrcd/faq/)
* To get support
================
* IRC: /server irc.ircsystems.net 6667 - /join #unreal-support
[Note: Please be patient after asking questions, we may do other stuff
or we're away. Don't repeat questions, we heard you first time,
READ THE TOPIC before you ask anything. We do this on a free
base so we are volunteeringly helping you, but we are humans
like you, and we got to have peace at times as well.]
* Mailing list: supporters@lists.unrealircd.org (for support)
* READ THE DOCS BEFORE ASKING QUESTIONS! doc/unreal32docs.html
or on the web http://www.unrealircd.com/unreal32docs.html
* READ http://support.unrealircd.org
* Want to discuss, chat, etc?
=============================
* IRC: /server irc.ircsystems.net 6667 - /join #UnrealIRCd
* UnrealIRCd Bugtracker (Where to report bugs or make suggestions)
==============================================
http://bugs.unrealircd.org
Means of support:
* IRC: /server irc.ircsystems.net 6667 - /join #unreal-support
[Note: Follow the bots instructions in order to get voice.
Please be patient after asking questions, we may do other stuff
or we're away. Don't repeat questions, we heard you first time,
READ THE TOPIC before you ask anything. We do this on a free
base so we are volunteeringly helping you, but we are humans
like you, and we got to have peace at times as well.]
* Forum: http://forums.unrealircd.com/
* Mailing list: unreal-users@lists.sourceforge.net
(http://lists.sourceforge.net/lists/listinfo/unreal-users also
has links to the archive).
UnrealIRCd Bugtracker (Where to report bugs or make suggestions)
==================================================================
http://bugs.unrealircd.org
Want to discuss, chat, etc?
=============================
* IRC: /server irc.ircsystems.net 6667 - /join #UnrealIRCd
+13 -2
View File
@@ -28,6 +28,8 @@ AC_PATH_PROG(INSTALL,install)
AC_CHECK_PROG(MAKER, gmake, gmake, make)
AC_PATH_PROG(GMAKE,gmake)
AC_PATH_PROG(GUNZIP, gunzip)
AC_PATH_PROG(PKGCONFIG, pkg-config)
dnl Checks for libraries.
AC_CHECK_LIB(descrypt, crypt, [AC_DEFINE(HAVE_CRYPT) IRCDLIBS="$IRCDLIBS-ldescrypt " MKPASSWDLIBS="-ldescrypt"],
AC_CHECK_LIB(crypt, crypt,[ AC_DEFINE(HAVE_CRYPT) IRCDLIBS="$IRCDLIBS-lcrypt " MKPASSWDLIBS="-lcrypt"]))
@@ -362,9 +364,13 @@ IRCDLIBS="$IRCDLIBS -lresolv "
;;
esac
dnl REMEMBER TO CHANGE WITH A NEW RELEASE!
tre_version="0.6.6"
AC_MSG_RESULT(extracting TRE regex library)
cur_dir=`pwd`
cd extras
dnl remove old tre directory to force a recompile...
rm -rf tre-$tre_version
if test "x$ac_cv_path_GUNZIP" = "x" ; then
tar xfz tre.tar.gz
else
@@ -373,9 +379,8 @@ else
cp tre.tar.gz.bak tre.tar.gz
tar xf tre.tar
fi
dnl REMEMBER TO CHANGE WITH A NEW RELEASE!
AC_MSG_RESULT(configuring TRE regex library)
cd tre-0.6.5
cd tre-$tre_version
./configure --disable-agrep --disable-shared --disable-system-abi --disable-wchar --disable-multibyte --prefix=$cur_dir/extras/regexp
AC_MSG_RESULT(compiling TRE regex library)
$ac_cv_prog_MAKER
@@ -383,6 +388,12 @@ AC_MSG_RESULT(installing TRE regex library)
$ac_cv_prog_MAKER install
TREINCDIR="$cur_dir/extras/regexp/include"
AC_SUBST(TREINCDIR)
if test "x$ac_cv_path_PKGCONFIG" = "x" ; then
TRELIBS="-L../extras/regexp/lib -ltre"
else
TRELIBS=`$ac_cv_path_PKGCONFIG --libs tre.pc`
fi
AC_SUBST(TRELIBS)
cd $cur_dir
AC_OUTPUT(Makefile src/modules/Makefile unreal ircdcron/ircdchk)
chmod 0700 unreal
Vendored
+51 -1
View File
@@ -2340,6 +2340,46 @@ else
echo "${ECHO_T}no" >&6
fi
# Extract the first word of "pkg-config", so it can be a program name with args.
set dummy pkg-config; ac_word=$2
echo "$as_me:$LINENO: checking for $ac_word" >&5
echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
if test "${ac_cv_path_PKGCONFIG+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
case $PKGCONFIG in
[\\/]* | ?:[\\/]*)
ac_cv_path_PKGCONFIG="$PKGCONFIG" # Let the user override the test with a path.
;;
*)
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_path_PKGCONFIG="$as_dir/$ac_word$ac_exec_ext"
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
;;
esac
fi
PKGCONFIG=$ac_cv_path_PKGCONFIG
if test -n "$PKGCONFIG"; then
echo "$as_me:$LINENO: result: $PKGCONFIG" >&5
echo "${ECHO_T}$PKGCONFIG" >&6
else
echo "$as_me:$LINENO: result: no" >&5
echo "${ECHO_T}no" >&6
fi
echo "$as_me:$LINENO: checking for crypt in -ldescrypt" >&5
echo $ECHO_N "checking for crypt in -ldescrypt... $ECHO_C" >&6
if test "${ac_cv_lib_descrypt_crypt+set}" = set; then
@@ -9986,10 +10026,12 @@ IRCDLIBS="$IRCDLIBS -lresolv "
;;
esac
tre_version="0.6.6"
echo "$as_me:$LINENO: result: extracting TRE regex library" >&5
echo "${ECHO_T}extracting TRE regex library" >&6
cur_dir=`pwd`
cd extras
rm -rf tre-$tre_version
if test "x$ac_cv_path_GUNZIP" = "x" ; then
tar xfz tre.tar.gz
else
@@ -10000,7 +10042,7 @@ else
fi
echo "$as_me:$LINENO: result: configuring TRE regex library" >&5
echo "${ECHO_T}configuring TRE regex library" >&6
cd tre-0.6.5
cd tre-$tre_version
./configure --disable-agrep --disable-shared --disable-system-abi --disable-wchar --disable-multibyte --prefix=$cur_dir/extras/regexp
echo "$as_me:$LINENO: result: compiling TRE regex library" >&5
echo "${ECHO_T}compiling TRE regex library" >&6
@@ -10010,6 +10052,12 @@ echo "${ECHO_T}installing TRE regex library" >&6
$ac_cv_prog_MAKER install
TREINCDIR="$cur_dir/extras/regexp/include"
if test "x$ac_cv_path_PKGCONFIG" = "x" ; then
TRELIBS="-L../extras/regexp/lib -ltre"
else
TRELIBS=`$ac_cv_path_PKGCONFIG --libs tre.pc`
fi
cd $cur_dir
ac_config_files="$ac_config_files Makefile src/modules/Makefile unreal ircdcron/ircdchk"
cat >confcache <<\_ACEOF
@@ -10583,6 +10631,7 @@ s,@INSTALL@,$INSTALL,;t t
s,@MAKER@,$MAKER,;t t
s,@GMAKE@,$GMAKE,;t t
s,@GUNZIP@,$GUNZIP,;t t
s,@PKGCONFIG@,$PKGCONFIG,;t t
s,@IRCDLIBS@,$IRCDLIBS,;t t
s,@MKPASSWDLIBS@,$MKPASSWDLIBS,;t t
s,@CPP@,$CPP,;t t
@@ -10595,6 +10644,7 @@ s,@IRCDDIR@,$IRCDDIR,;t t
s,@BINDIR@,$BINDIR,;t t
s,@FD_SETSIZE@,$FD_SETSIZE,;t t
s,@TREINCDIR@,$TREINCDIR,;t t
s,@TRELIBS@,$TRELIBS,;t t
CEOF
_ACEOF
+9
View File
@@ -37,6 +37,12 @@ while [ -z "$SSLFLAG" ] ; do
;;
esac
done
if [ -f $HOME/ares/lib/libcares.a ] ; then
if [ -f $HOME/ares/lib/libares.a ] ; then
rm -f $HOME/ares/lib/libares.a
fi
cp $HOME/ares/lib/libcares.a $HOME/ares/lib/libares.a
fi
echo "Installing libcurl"
cd $2
@@ -45,6 +51,9 @@ CPPFLAGS="-I$HOME/ares/include" ./configure --prefix=$HOME/curl --disable-shared
cp -R $HOME/ares/lib ares
make && make install
if [ -f $HOME/curl/lib/libares.a ] ; then
rm -f $HOME/curl/lib/libares.a
fi
cp $HOME/ares/lib/libares.a $HOME/curl/lib
cd $save_PWD
+3
View File
@@ -327,6 +327,9 @@ link hub.mynet.com
password-receive "LiNk";
class servers;
options {
/* Note: You should not use autoconnect when linking
* services
*/
autoconnect;
ssl;
zip;
File diff suppressed because it is too large Load Diff
+39 -31
View File
@@ -16,14 +16,18 @@
</style>
</head>
<!-- $Id$ -->
<body>
English | <a href="unreal32docs.de.html">German</a><br><br>
<div align="center"><b><font size="7">UnrealIRCd</font></b><br>
<font size="4"><a href="http://www.unrealircd.com">http://www.unrealircd.com</a></font><br>
<font size="4">Version: 3.2</font><br>
<b>Current Version:</b> 3.2 RC2<br>
<b>Last doc update:</b> 2004-03-07</div>
<b>Head Coders:</b> Stskeeps / codemastr / Syzop / Luke / McSkaf<br>
<b>Contributors:</b> Zogg / NiQuiL / assyrian / chasm / DrBin / llthangel / Griever / nighthawk<br>
<b>Current Version:</b> 3.2<br>
<b>Last doc update:</b> 2004-04-24</div>
<br>
<b>Head Coders:</b> Stskeeps / codemastr / Syzop / Luke<br>
<b>Contributors:</b> McSkaf / Zogg / NiQuiL / assyrian / chasm / DrBin / llthangel / Griever / nighthawk<br>
<b>Documentation:</b> CKnight^ / Syzop<br>
<p>Due to the increasing complexity of UnrealIRCd3.2 We have switched to an easier
to navigate, more inclusive documentation set. To view this documentation you
@@ -113,7 +117,7 @@
---8.9. <a href="#secsummary">Summary</a><br>
9. <a href="http://www.vulnscan.org/UnrealIrcd/faq/" target="_blank">Frequently Asked Questions (FAQ)</a><br>
</p>
<p><b><font size="+2">1.0 &#8211;Introduction & Notes <a name="IntroductionNotes"></a></font></b><br>
<p><b><font size="+2">1.0 &#8211; Introduction & Notes <a name="IntroductionNotes"></a></font></b><br>
</p><div class="desc">
<p>This document was written for exclusive use with UnrealIRCd. Use of this
document with another software package, or distribution of this document with
@@ -184,8 +188,8 @@ Windows:<br>
<p><b>Installation Instructions</b><br>
Linux:<br>
<ol>
<li>gunzip -d Unreal3.2-RC2.tar.gz
<li>tar xvf Unreal3.2-RC2.tar
<li>gunzip -d Unreal3.2.tar.gz
<li>tar xvf Unreal3.2.tar
<li>cd Unreal3.2
<li>./Config
<li>Answer these questions to the best of your knowledge. Generally if your not
@@ -219,12 +223,14 @@ Windows:<br>
have to keep them secret. _The cloak keys must be the same on all servers on the network_.</p>
</div>
<p><font size="+2"><b>3.2 - Modules</b></font><a name="feature_modules"></a></p><div class="desc">
<p>UnrealIRCd supports modules (except under windows) which is nice because:<br>
<p>UnrealIRCd supports modules which is nice because:<br>
- You can load/reload/unload them while the ircd is running (by /rehash). This allows some bugs to be fixed or new features to be added without requiring a restart.<br>
- Other people can create (3rd party) modules with new commands, usermodes and even channelmodes.<br>
UnrealIRCd only comes with a few modules, take a look at www.unrealircd.com -&gt; modules
or use google to find 3rd party modules.</p>
<p>Note that you need to load at least the commands module!</p></div>
or use google to find 3rd party modules.<br>
NOTE: currently modules are not supported on windows, you can however expect this is in a nearby release</p>
<p>You need to load at least the commands module or else the ircd won't load!</p>
</div>
<p><font size="+2"><b>3.3 - Snomasks</b></font><a name="feature_snomasks"></a></p><div class="desc">
<p>Snomasks are server notice masks, it's a special type of usermode that controls which
@@ -273,7 +279,7 @@ Windows:<br>
<p>This is controlled by the oper flags in the oper block, see the oper block for more information.</p></div>
<p><font size="+2"><b>3.7 - Oper commands</b></font><a name="feature_opercmds"></a></p><div class="desc">
<p>UnrealIRCd has a lot of powerful oper commands which are explained in section 6,
<p>UnrealIRCd has a lot of powerful oper commands which are explained in <a href="#useropercommands">User &amp; Oper Commands</a>,
you probably want to read those after installing :).</p></div>
<p><font size="+2"><b>3.8 - SSL</b></font><a name="feature_ssl"></a></p><div class="desc">
@@ -286,7 +292,7 @@ Windows:<br>
<p>Clients that support SSL: <A HREF="http://www.xchat.org/" TARGET="_blank">XChat</a>,
<A HREF="http://www.irssi.org/" TARGET="_blank">irssi</a>,
<A HREF="http://www.irssi.org/" TARGET="_blank">mIRC</a> (6.14 and up,
also requires some <a href="http://www.mirc.co.uk/ssl.html" target="_blank>additional steps</a>)</p>
also requires some <a href="http://www.mirc.co.uk/ssl.html" target="_blank">additional steps</a>)</p>
<p>For clients which do not support SSL you can use a tunnel like
<A HREF="http://www.stunnel.org/" TARGET="_blank">stunnel</A>, here's a stunnel.conf example (for stunnel 4.x):<br>
<pre>
@@ -466,7 +472,7 @@ Modules can also add other extended ban types.<br>
<tr valign="top"><td><b>[tkltime]</b></td><td> The duration of the *line added by the filter, use '-' to use the default or to skip
(eg: if action = 'block')</td></tr>
<tr valign="top"><td><b>[reason]</b></td><td> Block or *line reason.. you CANNOT use spaces in this, but underscores ('_') will be translated
into spaces at runtime. Again, use '-' to use the default.</td></tr>
into spaces at runtime. And double underscore ('__') gets an underscore ('_'). Again, use '-' to use the default reason.</td></tr>
<tr valign="top"><td><b>[regex]</b></td><td> this is the actual regex or 'bad word' where we should block on and perform the action at</td></tr>
</table>
<br>
@@ -1420,8 +1426,8 @@ except tkl {
still want specific users to be able to connect. The except::mask directive
specifies the user@host mask of the client who will be allowed to connect. The
except::type specifies which type of ban this should override. Valid types are
gline, gzline, and shun, which make an exception from Glines, Global Zlines, and
shuns.</p>
gline, gzline, qline, gqline, and shun, which make an exception from Glines,
Global Zlines, Qlines, Global Qlines, and shuns.</p>
<p>Example:<br>
<pre>
except tkl {
@@ -2713,35 +2719,37 @@ to get more information on a command.</p>
<td>IRCop</td>
</tr>
<tr>
<td height="39">kline +-&lt;hostmask&gt; &lt;time to ban&gt; &lt;reason&gt;</td>
<td>Bans the hostmask from the server it is issued on. It is not a global
ban. Time to ban is in seconds, or you can use 1d for 1 days. If the hostmask is prefixed with a -, the kline is removed</td>
<td height="39">kline [+|-]&lt;user@host | nick&gt; [&lt;time to ban&gt; &lt;reason&gt;]</td>
<td>Bans the hostmask from the server it is issued on. A kline is not a global ban.<br>
<b>time to ban</b> is either: a) a value in seconds, b) a time value, like '1d' is 1 day or c) '0' for permanent.
Time and reason are optional, if unspecified set::default-bantime (default: 0/permanent) and 'no reason' are used.<br>
To remove a kline use /kline -user@host</td>
<td>IRCop</td>
</tr>
<tr>
<td height="39">zline +-&lt;ip&gt; &lt;time to ban&gt; &lt;reason&gt;</td>
<td>Bans an IP Address from the local server it is issued on. Time to ban is in seconds, or you can use 1d for 1 days. If the ip is prefixed with a - then the zline is removed.<br></td>
<td height="39">zline [+|-]&lt;*@ip&gt; [&lt;time to ban&gt; &lt;reason&gt;]</td>
<td>Bans an IP Address from the local server it is issued on (not global). See kline for more syntax info.
Use /zline -*@ip to remove.<br></td>
<td>IRCop</td>
</tr>
<tr>
<td height="39">gline +-&lt;user@host&gt; &lt;time to ban&gt; :&lt;reason&gt;<br></td>
<td>Adds a global ban to anyone that matches. Time to ban is in seconds, or
you can use 1d for 1 days. To remove a gline, put a &#8211;user@host<br></td>
<td height="39">gline [+|-]&lt;user@host | nick&gt; [&lt;time to ban&gt; &lt;reason&gt;]<br></td>
<td>Adds a global ban to anyone that matches. See kline for more syntax info.
Use /gline -user@host to remove.<br></td>
<td>IRCop</td>
</tr>
<tr>
<td height="39">shun +-&lt;user@host&gt; &lt;time to shun&gt; :&lt;reason&gt;<br></td>
<td height="39">shun [+|-]&lt;user@host | nick&gt; [&lt;time to shun&gt; &lt;reason&gt;]<br></td>
<td>Prevents a user from executing ANY commands and prevents them from speaking.
Shuns are global (like glines). Time to shun is in seconds, or you can use 1d for 1 days.
To remove a shun, put a &#8211;user@host. Setting time to 0 makes it permanent.
Shuns are global (like glines). See kline for more syntax info.
Use /shun -user@host to remove a shun.
<br></td>
<td>IRCop</td>
</tr>
<tr>
<td height="39">gzline +-&lt;ip&gt; &lt;time to ban&gt; :&lt;reason&gt;<br></td>
<td>Adds a global zline. Time to ban is in seconds, or you can use 1d for 1
days. To remove a gzline, put a &#8211;user@host. Setting time to 0 makes
it permanent.<br></td>
<td height="39">gzline [+|-]&lt;ip&gt; &lt;time to ban&gt; :&lt;reason&gt;<br></td>
<td>Adds a global zline. See kline for more syntax info.
Use /gzline -*@ip to remove a gzline.<br></td>
<td>IRCop</td>
</tr>
<tr>
@@ -2808,7 +2816,7 @@ to get more information on a command.</p>
<td height="39">connect &lt;server&gt; &lt;port&gt; &lt;server&gt;</td>
<td>If only one server is given, it will attempt to connect the server you
are ON to the given server. If 2 servers are given, it will attempt to connect
the 2 servers together. Put the hub server as the first, and the leaf server
the 2 servers together. Put the leaf server as the first, and the hub server
as the second.<br></td>
<td>IRCop</td>
</tr>
BIN
View File
Binary file not shown.
+82 -65
View File
@@ -51,7 +51,7 @@ help Opercmds {
" OPER WALLOPS GLOBOPS CHATOPS LOCOPS DNS";
" ADCHAT NACHAT KILL KLINE ZLINE SPAMFILTER";
" GLINE SHUN GZLINE HTM TSCTL TEMPSHUN";
" AKILL RAKILL REHASH RESTART DIE";
" REHASH RESTART DIE";
" LAG SETHOST SETIDENT CHGHOST CHGIDENT";
" CHGNAME SQUIT CONNECT DCCDENY UNDCCDENY";
" SAJOIN SAPART SAMODE RPING TRACE";
@@ -112,24 +112,27 @@ help Umodes {
};
help Snomasks {
" This section lists all of the snomasks available.";
" A snomask is used with usermode +s. They are an additional parameter.";
" For example, to set snomask +f you'd do:";
" /MODE mynick +s +f";
" You can remove individual snomasks or set -s to remove them all";
" -";
" Snomask stands for 'Service NOtice MASK', it (mainly) controls which";
" server notices you will receive.";
" Usage: /MODE nick +s <snomask>";
" Ex: /MODE blah +s +cF-j";
" The parameter specifies which snomasks you want (or don't want)."
" You can also remove all snomasks by simply doing /MODE nick -s.";
"-";
" Below is a list of possible snomasks:";
" ==-------------------------oOo-----------------------==";
" c = See's all Connects/Disconnects on local server";
" e = Can listen to Server Messages sent to +e users (Eyes)";
" f = Listen to Flood Alerts from server";
" F = Lets you receive Far and Local connect notices (except from U-lines)";
" G = Lets you see TKL (G:line,Shun) noties";
" j = See's Misc. Messages generated by the server";
" k = See's all the /KILL's which were executed";
" n = Nick change notices";
" N = Far nick change notices";
" q = Lets you see notices when a user is rejected because of a Q:line";
" v = Lets you receive notice of /VHOST usages";
" c = View connects/disconnects on local server";
" e = View 'Eyes' server messages (OperOverride, /CHG* and /SET* usage, ..)";
" f = View flood alerts";
" F = View connects/disconnects on remote servers (except U-lines)";
" G = View TKL notices (Gline, GZline, Shun, etc)";
" j = View Junk notices (not recommended for normal use)";
" k = View KILL notices";
" n = View nick changes on local server";
" N = View nick changes on remote servers";
" q = View rejected nick changes due to Q:lines";
" S = View spamfilter matches";
" v = View usage of /VHOST command";
" ==-------------------------oOo------------------------==";
};
@@ -447,12 +450,6 @@ help Kick {
" Removes a user from a channel. Can only be used by Operators";
" or Half-Ops. If no reason is specified, your nickname becomes the reason.";
" -";
/*
** This doesn't seem to be working **
" Syntax: KICK <channel>[,<channel2>..] <user>[,<user2>..] <reason>";
" Example: KICK #Lobby foobar Lamer..";
" KICK #Lobby,#OperHelp Lamer23,Luser12 Lamers!";
*/
" Syntax: KICK <channel> <user> [reason]";
" Example: KICK #Lobby foobar Lamer..";
};
@@ -497,35 +494,53 @@ help List {
};
help Privmsg {
" /PRIVMSG @#channel <text> will send the text to Channel-ops on the";
" given channel only.";
" /PRIVMSG @+#channel <text> will send the text to both ops and voiced";
" users on the channel.";
" While some clients may support these as-is,";
" on others (such as ircII), it's necessary to use";
" /QUOTE PRIVMSG @#channel <text> instead.";
" You can also use % to signify HalfOps on the channel.";
" Send a message to a user, channel or server.";
" /PRIVMSG <nick> <text>";
" Send a private message.";
" Ex: /PRIVMSG Blah hi, how are you?";
" /PRIVMSG <#channel> <text>";
" Send a message to a channel.";
" Ex: /PRIVMSG #room Hi all";
" /PRIVMSG <prefix><#channel> <text>";
" Send a message to users with <prefix> in <#channel> only";
" Ex: /PRIVMSG @#room This goes to all ops";
" /PRIVMSG +%@#room This goes to all +v, +h and +o's.";
" /PRIVMSG $<mask> <text>";
" Send a message to all users on servers matching <mask> [Oper only]";
" This is shown in the status window by most clients.";
" Ex: /PRIVMSG $*.mynet.net We will be upgrading our net in the next hour";
" Note that in most cases services (/OS GLOBAL) is a better alternative.";
" -";
" Syntax: PRIVMSG <nick>,<nick2>,<nick3>,<nick4> :<text>";
" Example: PRIVMSG hAtbLaDe :Hello";
" PRIVMSG hAtbLaDe,Somefella,Lamer :Hello everyone!";
" PRIVMSG @#hottub There is a meeting on Saturday.";
" Multiple targets are also supported, like /PRIVMSG <nick1>,<nick2>,<nick3>.";
" -";
" NOTE: In case of some old clients (eg: ircII) you cannot use /msg";
" or /privmsg to use any of the 'advanced features', you'll then have to use:";
" '/QUOTE PRIVMSG @#channel blah' or something similar.";
};
help Notice {
" /NOTICE @#channel <text> will send the text to Channel-ops on the";
" given channel only.";
" /NOTICE @+#channel <text> will send the text to both ops and voiced";
" users on the channel.";
" While some clients may support these as-is,";
" on others (such as ircII), it's necessary to use";
" /QUOTE NOTICE @#channel <text> instead.";
" You can also use % to signify HalfOps on the channel.";
" Send a notice to a user, channel or server.";
" /NOTICE <nick> <text>";
" Send a notice to a user.";
" Ex: /NOTICE Blah hi, how are you?";
" /NOTICE <#channel> <text>";
" Send a notice to a channel.";
" Ex: /NOTICE #room Hi all, this is annoying";
" /NOTICE <prefix><#channel> <text>";
" Send a notice to users with <prefix> in <#channel> only";
" Ex: /NOTICE @#room This goes to all ops";
" /NOTICE +%@#room This goes to all +v, +h and +o's.";
" /NOTICE $<mask> <text>";
" Send a notice to all users on servers matching <mask> [Oper only]";
" This is shown in the status window by most clients.";
" Ex: /NOTICE $*.mynet.net We will be upgrading our net in the next hour";
" Note that in most cases services (/OS GLOBAL) is a better alternative.";
" -";
" Syntax: NOTICE <nick>,<nick2>,<nick3>,<nick4> :<text>";
" Example: NOTICE hAtbLaDe :Hello";
" NOTICE hAtbLaDe,Somefella,Lamer :Hello everyone!";
" NOTICE @#hottub Do not forget the meeting on Friday.";
" Multiple targets are also supported, like /NOTICE <nick1>,<nick2>,<nick3>.";
" -";
" NOTE: In case of some old clients (eg: ircII) you cannot use /notice";
" to use any of the 'advanced features', you'll then have to use:";
" '/QUOTE NOTICE @#channel blah' or something similar.";
};
help Knock {
@@ -664,10 +679,11 @@ help Kline {
" You may also specify the time in the format 1d10h15m30s.";
" IRC Operator only command.";
" -";
" Syntax: KLINE <hostmask> [time] <reason> (adds a Kline)";
" Syntax: KLINE <hostmask or nick> [time] <reason> (adds a Kline)";
" KLINE -<hostmask> (removes a Kline)";
" Example: KLINE *@*.aol.com Abuse (Adds a permanent K:line)";
" KLINE *@*.someisp.com 2d Abuse (Adds a K:line for 2 days)";
" KLINE Idiot 1d Please go away";
" KLINE -*@*.aol.com";
};
@@ -678,8 +694,8 @@ help Zline {
" You may also specify the time in the format 1d10h15m30s.";
" IRC Operator only command.";
" -";
" Syntax: ZLINE <ipmask> [time] <reason> (adds a Zline)";
" ZLINE -<ipmask> (removes a Zline)";
" Syntax: ZLINE <*@ipmask> [time] <reason> (adds a Zline)";
" ZLINE -<*@ipmask> (removes a Zline)";
" Example: ZLINE *@127.0.0.1 Abuse (Adds a permanent Z:line)";
" ZLINE *@127.0.0.1 2d Abuse (Adds a Z:line for 2 days)";
" ZLINE -*@127.0.0.1";
@@ -693,11 +709,12 @@ help Gline {
" You may also specify the time in the format 1d10h15m30s.";
" IRC Operator only command.";
" -";
" Syntax: GLINE <user@host mask> [time] :<reason>";
" Syntax: GLINE <user@host mask or nick> [time] <reason>";
" (Adds a G:line for user@host)";
" GLINE -<user@host mask> (Removes a G:line for user@host)";
" Example: GLINE *@*.idiot.net 900 :Spammers (Adds a 15 min G:line)";
" GLINE *@*.idiot.net 1d5h :Spammers (Adds a 29 hour G:line)";
" Example: GLINE *@*.idiot.net 900 Spammers (Adds a 15 min G:line)";
" GLINE *@*.idiot.net 1d5h Spammers (Adds a 29 hour G:line)";
" GLINE Idiot 1d Abuse";
" GLINE -*@*.idiot.net";
" NOTE: requires the can_gkline oper flag";
};
@@ -727,26 +744,26 @@ help Gzline {
" You may also specify the time in the format 1d10h15m30s.";
" IRC Operator only command.";
" -";
" Syntax: GZLINE <user@host mask> <seconds to be banned> :<reason>";
" (Adds a Global Z:line for user@host)";
" GZLINE -<user@host mask> (Removes a Global Z:line for user@host)";
" Example: GZLINE *@*.idiot.net 900 :Spammers (Adds a 15 min Global Z:line)";
" GZLINE *@*.idiot.net 1d5h :Spammers (Adds a 29 hour Global Z:line)";
" Syntax: GZLINE <*@ipmask> <seconds to be banned> :<reason>";
" (Adds a Global Z:line for *@ipmask)";
" GZLINE -<*@ipmask> (Removes a Global Z:line for *@ipmask)";
" Example: GZLINE *@4.16.200.* 900 Spammers (Adds a 15 min Global Z:line)";
" GZLINE *@4.16.200.* 1d5h Spammers (Adds a 29 hour Global Z:line)";
" NOTE: requires the can_gzline oper flag";
};
help Akill {
" Adds an Autokill for the specific host mask. This prevents";
" any user from that hostmask from connecting to the network.";
" Services Admin Command";
" THIS IS A DEPRICATED COMMAND AND ONLY ACCEPTED FROM SERVERS";
" -";
" Syntax: AKILL <user@host> :<Reason>";
" Example: AKILL foo@aol.com :Spammers!";
};
help Rakill {
" Removes an AKILL set by a Services Admin.";
" Services Admin Command";
" Removes an AKILL that was previously set.";
" THIS IS A DEPRICATED COMMAND AND ONLY ACCEPTED FROM SERVERS";
" -";
" Syntax: RAKILL <user@host>";
};
@@ -852,10 +869,10 @@ help Connect {
" Remote connections are also possible.";
" IRC Operator only command.";
" -";
" Syntax: CONNECT <server>";
" CONNECT <hub> <port> <leaf>";
" Syntax: CONNECT <server> [port]";
" CONNECT <leaf> <port> <hub>";
" Example: CONNECT leaf.*";
" CONNECT hub.* 6667 leaf.*";
" CONNECT leaf.* 6667 hub.*";
};
help Dccdeny {
+3 -1
View File
@@ -37,7 +37,6 @@
#include <io.h>
#endif
//#include "dynconf.h"
#include "ircsprintf.h"
#include "config.h"
#ifdef PARAMH
#include <sys/param.h>
@@ -47,6 +46,9 @@
#include "sys.h"
#endif
#include "ircsprintf.h"
#ifdef DEVELOP_CVS
#define ID_Copyright(x) static char id_copyright[] = x
#define ID_Notes(x) static char id_notes[] = x
+5 -1
View File
@@ -52,8 +52,12 @@ enum UHAllowed { UHALLOW_ALWAYS, UHALLOW_NOCHANS, UHALLOW_REJOIN, UHALLOW_NEVER
struct ChMode {
long mode;
#ifdef EXTCMODE
long extmodes;
char *extparams[EXTCMODETABLESZ];
#endif
#ifdef NEWCHFLOODPROT
ChanFloodProt floodprot;
ChanFloodProt floodprot;
#else
unsigned short msgs;
unsigned short per;
+3 -2
View File
@@ -272,7 +272,7 @@ extern void send_channel_modes_sjoin3(aClient *cptr, aChannel *chptr);
extern void sendto_locfailops(char *pattern, ...) __attribute__((format(printf,1,2)));
extern void sendto_connectnotice(char *nick, anUser *user, aClient *sptr, int disconnect, char *comment);
extern void sendto_serv_butone_nickcmd(aClient *one, aClient *sptr, char *nick, int hopcount,
int lastnick, char *username, char *realhost, char *server, long servicestamp, char *info, char *umodes,
long lastnick, char *username, char *realhost, char *server, long servicestamp, char *info, char *umodes,
char *virthost);
extern void sendto_message_one(aClient *to, aClient *from, char *sender,
char *cmd, char *nick, char *msg);
@@ -646,7 +646,7 @@ extern void extban_init(void);
extern char *trim_str(char *str, int len);
extern char *ban_realhost, *ban_virthost, *ban_ip;
extern void join_channel(aChannel *chptr, aClient *cptr, aClient *sptr, int flags);
extern char *unreal_checkregex(char *s, int fastsupport);
extern char *unreal_checkregex(char *s, int fastsupport, int check_broadness);
extern int banact_stringtoval(char *s);
extern char *banact_valtostring(int val);
extern int banact_chartoval(char c);
@@ -684,3 +684,4 @@ extern fdlist default_fdlist, busycli_fdlist, serv_fdlist, oper_fdlist;
extern void DCCdeny_add(char *filename, char *reason, int type);
extern void DCCdeny_del(ConfigItem_deny_dcc *deny);
extern void dcc_wipe_services(void);
extern void reread_motdsandrules();
+6 -1
View File
@@ -16,8 +16,13 @@
/* You do want it to work in debug mode yes ? --DrBin */
/* ugly hack GRR */
#if !defined(__GNUC__) && !defined(__common_include__)
#define __attribute__(x) /* nothing */
#endif
extern char *ircvsprintf(char *str, const char *format, va_list);
extern char *ircsprintf(char *str, const char *format, ...);
extern char *ircsprintf(char *str, const char *format, ...) __attribute__((format(printf,2,3)));
extern const char atoi_tab[4000];
+1 -1
View File
@@ -762,7 +762,7 @@ struct Server {
struct _spamfilter {
unsigned short action; /* see BAN_ACT* */
regex_t expr;
char *tkl_reason;
char *tkl_reason; /* spamfilter reason field [escaped by unreal_encodespace()!] */
TS tkl_duration;
};
+2 -2
View File
@@ -29,8 +29,8 @@
#define UnrealProtocol 2303
#define PATCH1 "3"
#define PATCH2 ".2"
#define PATCH3 "-RC2"
#define PATCH4 "fix"
#define PATCH3 ""
#define PATCH4 ""
#define PATCH5 ""
#define PATCH6 ""
#define PATCH7 ""
+3
View File
@@ -24,6 +24,9 @@
*/
#ifndef INCLUDED_s_zip_h
#define INCLUDED_s_zip_h
#ifdef _WIN32
#define ZLIB_WINAPI
#endif
#include <zlib.h> /* z_stream */
#endif
+1 -1
View File
@@ -80,7 +80,7 @@ LIBCURL_LIB=/LIBPATH:"$(LIBCURL_LIB_DIR)"
!IFDEF USE_ZIPLINKS
ZIPCFLAGS=/D ZIP_LINKS /D ZLIB_DLL
ZIPOBJ=SRC/ZIP.OBJ
ZIPLIB=zlib.lib
ZIPLIB=zlibwapi.lib
!IFDEF ZLIB_INC_DIR
ZLIB_INC=/I "$(ZLIB_INC_DIR)"
!ENDIF
+91 -15
View File
@@ -7,25 +7,38 @@
* $Id$
*/
/* Guidelines on the 'action' field:
* As a general rule we use 'action block' for any newly added
* spamfilters at first, later on (after knowing about false
* positives) we might change some to viruschan/kill/gline/etc..
*/
spamfilter {
regex ".* .* .* .* .* .* .* .* .* .* .* .* .* .*";
regex "(.+ ){20}";
target dcc;
reason "mIRC exploit attempt";
reason "mIRC 6.0-6.11 exploit attempt";
action kill;
};
spamfilter {
regex "Come watch me on my webcam and chat w/me";
regex ".{225}";
target dcc;
reason "mIRC 6.12 exploit attempt";
action block;
};
spamfilter {
regex "Come watch me on my webcam and chat /w me :-\) http://.+:\d+/me\.mpg";
target private;
reason "Infected by fyle trojan: see http://www.sophos.com/virusinfo/analyses/trojfylexa.html";
action block;
action gline;
};
spamfilter {
regex "Speed up your mIRC DCC Transfer by up to 75%.*www\.freewebs\.com/mircupdate/mircspeedup\.exe";
target private;
reason "Infected by mirseed trojan: see http://www.sophos.com/virusinfo/analyses/trojmirseeda.html";
action block;
action gline;
};
spamfilter {
@@ -39,62 +52,125 @@ spamfilter {
regex "^FREE PORN: http://free:porn@([0-9]{1,3}\.){3}[0-9]{1,3}:8180$";
target private;
reason "Infected by aplore worm: see http://www.f-secure.com/v-descs/aplore.shtml";
action block;
action gline;
};
spamfilter {
regex "^!login Wasszup!$";
target channel;
reason "Attempting to login to a GTBot";
action block;
action gline;
};
spamfilter {
regex "^!login grrrr yeah baby!$";
target channel;
reason "Attempting to login to a GTBot";
action block;
action gline;
};
spamfilter {
regex "^!packet ([0-9]{1,3}\.){3}[0-9]{1,3} [0-9]{1,15}";
target channel;
reason "Attempting to use a GTBot";
action block;
action gline;
};
spamfilter {
regex "^!icqpagebomb ([0-9]{1,15} ){2}.+";
target channel;
reason "Attempting to use a GTBot";
action block;
action gline;
};
spamfilter {
regex "^!pfast [0-9]{1,15} ([0-9]{1,3}\.){3}[0-9]{1,3} [0-9]{1,5}$";
target channel;
reason "Attempting to use a GTBot";
action block;
action gline;
};
spamfilter {
regex "^!portscan ([0-9]{1,3}\.){3}[0-9]{1,3} [0-9]{1,5} [0-9]{1,5}$";
target channel;
reason "Attempting to use a GTBot";
action block;
action gline;
};
spamfilter {
regex "^.u(dp)? ([0-9]{1,3}\.){3}[0-9]{1,3} [0-9]{1,15} [0-9]{1,15} [0-9]{1,15}( [0-9])*$";
target channel;
reason "Attempting to use an SDBot";
action block;
action gline;
};
spamfilter {
regex "^.syn ((([0-9]{1,3}\.){3}[0-9]{1,3})|([a-zA-Z0-9_-]+\.[a-zA-Z0-9_-]+\.[a-zA-Z0-9_.-]+)) [0-9]{1,5} [0-9]{1,15} [0-9]{1,15}";
target { channel; private; };
reason "Attempting to use a SpyBot";
action block;
action gline;
};
spamfilter {
regex "^porn! porno! http://.+\/sexo\.exe";
target private;
action gline;
reason "Infected by soex trojan: see http://www.trendmicro.com/vinfo/virusencyclo/default5.asp?VName=TROJ%5FSOEX.A";
};
spamfilter {
regex "(^wait a minute plz\. i am updating my site|.*my erotic video).*http://.+/erotic(a)?/myvideo\.exe$";
target private;
action gline;
reason "Infected by some trojan (erotica?)";
};
spamfilter {
regex "^STOP SPAM, USE THIS COMMAND: //write nospam \$decode\(.+\) \| \.load -rs nospam \| //mode \$me \+R$";
target private;
action gline;
reason "Infected by nkie worm: see http://www.trojaninfo.com/nkie/nkie.htm";
};
spamfilter {
regex "^FOR MATRIX 2 DOWNLOAD, USE THIS COMMAND: //write Matrix2 \$decode\(.+=,m\) \| \.load -rs Matrix2 \| //mode \$me \+R$";
target private;
action gline;
reason "Infected by nkie worm: see http://www.trojaninfo.com/nkie/nkie.htm";
};
spamfilter {
regex "^hey .* to get OPs use this hack in the chan but SHH! //\$decode\(.*,m\) \| \$decode\(.*,m\)$";
target private;
action gline;
reason "Infected by nkie worm: see http://www.trojaninfo.com/nkie/nkie.htm";
};
spamfilter {
regex ".*(http://jokes\.clubdepeche\.com|http://horny\.69sexy\.net|http://private\.a123sdsdssddddgfg\.com).*";
target private;
action block;
reason "Infected by LOI trojan"; /* Name is still unsure */
};
/* This is a 'general sig' which might have a tad more false positives, hence just 'block' is used */
spamfilter {
regex "C:\\WINNT\\system32\\[][0-9a-z_-{|}`]+\.zip";
target dcc;
action block;
reason "Infected by Gaggle worm?";
};
spamfilter {
regex "C:\\WINNT\\system32\\(notes|videos|xxx|ManualSeduccion|postal|hechizos|images|sex|avril)\.zip";
target dcc;
action dccblock;
reason "Infected by Gaggle worm";
};
spamfilter {
regex "http://.+\.lycos\..+/[iy]server[0-9]/[a-z]{4,11}\.(gif|jpg|avi|txt)";
target { private; quit; };
action block;
reason "Infected by Gaggle worm";
};
+9
View File
@@ -232,6 +232,15 @@ static inline char *int_to_base64(long val)
base64buf[i] = '\0';
/* Temporary debugging code.. remove before 2038 ;p */
if (val > 2147483646)
{
snprintf(trouble_info, sizeof(trouble_info),
"[BUG] int_to_base64() called for insane value %ld. Please report!", val);
ircd_log(LOG_ERROR, "%s", trouble_info);
val = 2147483647L; /* prevent buffer overflow */
}
do
{
base64buf[--i] = int6_to_base64_map[val & 63];
+33 -8
View File
@@ -1825,7 +1825,8 @@ int do_mode_char(aChannel *chptr, long modetype, char modechar, char *param,
{
/* Ugly halfop hack --sts
- this allows halfops to do +b +e +v and so on */
if (Halfop_mode(modetype) == FALSE)
/* (Syzop/20040413: Allow remote halfop modes */
if ((Halfop_mode(modetype) == FALSE) && MyClient(cptr))
{
int eaten = 0;
while (tab->mode != 0x0)
@@ -2012,7 +2013,7 @@ int do_mode_char(aChannel *chptr, long modetype, char modechar, char *param,
if (!is_halfop(cptr, chptr)) /* htrig will take care of halfop override notices */
opermode = 1;
}
else
else if (MyClient(cptr))
{
sendto_one(cptr, err_str(ERR_ONLYSERVERSCANCHANGE),
me.name, cptr->name, chptr->chname);
@@ -2028,7 +2029,7 @@ int do_mode_char(aChannel *chptr, long modetype, char modechar, char *param,
if (!is_halfop(cptr, chptr)) /* htrig will take care of halfop override notices */
opermode = 1;
}
else
else if (MyClient(cptr))
{
sendto_one(cptr,
":%s %s %s :*** Channel admins (+a) can only be set by the channel owner",
@@ -2111,8 +2112,10 @@ int do_mode_char(aChannel *chptr, long modetype, char modechar, char *param,
":%s %s %s :*** You cannot %s %s in %s, (s)he is the channel owner (+q).",
me.name, IsWebTV(cptr) ? "PRIVMSG" : "NOTICE", cptr->name, xxx,
member->cptr->name, chptr->chname);
}
break;
break;
} else
if (IsOper(cptr))
opermode = 1;
}
if (is_chanprot(member->cptr, chptr)
&& member->cptr != cptr
@@ -2125,8 +2128,10 @@ int do_mode_char(aChannel *chptr, long modetype, char modechar, char *param,
":%s %s %s :*** You cannot %s %s in %s, (s)he is a channel admin (+a).",
me.name, IsWebTV(cptr) ? "PRIVMSG" : "NOTICE", cptr->name, xxx,
member->cptr->name, chptr->chname);
}
break;
break;
} else
if (IsOper(cptr))
opermode = 1;
}
breaktherules:
tmp = member->flags;
@@ -3678,8 +3683,28 @@ void join_channel(aChannel *chptr, aClient *cptr, aClient *sptr, int flags)
sptr->name, chptr->chname, chptr->topic_nick,
chptr->topic_time);
}
if (chptr->users == 1 && MODES_ON_JOIN)
if (chptr->users == 1 && (MODES_ON_JOIN
#ifdef EXTCMODE
|| iConf.modes_on_join.extmodes)
#endif
)
{
#ifdef EXTCMODE
int i;
chptr->mode.extmode = iConf.modes_on_join.extmodes;
/* Param fun */
for (i = 0; i <= Channelmode_highest; i++)
{
if (!Channelmode_Table[i].flag || !Channelmode_Table[i].paracount)
continue;
if (chptr->mode.extmode & Channelmode_Table[i].mode)
{
CmodeParam *p;
p = Channelmode_Table[i].put_param(NULL, iConf.modes_on_join.extparams[i]);
AddListItem(p, chptr->mode.extmodeparam);
}
}
#endif
chptr->mode.mode = MODES_ON_JOIN;
#ifdef NEWCHFLOODPROT
if (iConf.modes_on_join.floodprot.per)
+16 -15
View File
@@ -1001,21 +1001,22 @@ int InitwIRCD(int argc, char *argv[])
portnum = portarg;
break;
case 's':
(void)printf("sizeof(aClient) == %u\n",
sizeof(aClient));
(void)printf("sizeof(aChannel) == %u\n",
sizeof(aChannel));
(void)printf("sizeof(aServer) == %u\n",
sizeof(aServer));
(void)printf("sizeof(Link) == %u\n", sizeof(Link));
(void)printf("sizeof(anUser) == %u\n",
sizeof(anUser));
(void)printf("sizeof(aTKline) == %u\n",
sizeof(aTKline));
(void)printf("sizeof(struct ircstatsx) == %u\n",
sizeof(struct ircstatsx));
(void)printf("aClient remote == %u\n",
CLIENT_REMOTE_SIZE);
(void)printf("sizeof(aClient) == %ld\n",
(long)sizeof(aClient));
(void)printf("sizeof(aChannel) == %ld\n",
(long)sizeof(aChannel));
(void)printf("sizeof(aServer) == %ld\n",
(long)sizeof(aServer));
(void)printf("sizeof(Link) == %ld\n",
(long)sizeof(Link));
(void)printf("sizeof(anUser) == %ld\n",
(long)sizeof(anUser));
(void)printf("sizeof(aTKline) == %ld\n",
(long)sizeof(aTKline));
(void)printf("sizeof(struct ircstatsx) == %ld\n",
(long)sizeof(struct ircstatsx));
(void)printf("aClient remote == %ld\n",
(long)CLIENT_REMOTE_SIZE);
exit(0);
break;
#ifndef _WIN32
+1 -1
View File
@@ -97,7 +97,7 @@ DLLFUNC CMD_FUNC(m_sajoin)
return 0;
}
if (parc != 3)
if (parc < 3)
{
sendto_one(sptr, err_str(ERR_NEEDMOREPARAMS), me.name, parv[0], "SAJOIN");
return 0;
+1 -1
View File
@@ -97,7 +97,7 @@ DLLFUNC CMD_FUNC(m_sapart)
return 0;
}
if (parc != 3)
if (parc < 3)
{
sendto_one(sptr, err_str(ERR_NEEDMOREPARAMS), me.name, parv[0], "SAPART");
return 0;
+1 -1
View File
@@ -807,7 +807,7 @@ int m_server_synch(aClient *cptr, long numeric, ConfigItem_link *aconf)
acptr->lastnick,
acptr->user->username,
acptr->user->realhost,
acptr->srvptr->serv->numeric,
(long)(acptr->srvptr->serv->numeric),
(unsigned long)acptr->user->servicestamp,
(!buf || *buf == '\0' ? "+" : buf),
((IsHidden(acptr) && (acptr->umodes & UMODE_SETHOST)) ? acptr->user->virthost : "*"),
+8 -22
View File
@@ -153,39 +153,25 @@ static int compare_floodprot_modes(ChanFloodProt *a, ChanFloodProt *b)
*/
/* Some ugly macros, but useful */
#define Addit(mode,param) if (strlen(parabuf) + strlen(param) + 11 < MODEBUFLEN) { \
#define Addit(mode,param) if ((strlen(parabuf) + strlen(param) + 11 < MODEBUFLEN) && (b <= MAXMODEPARAMS)) { \
if (*parabuf) \
strcat(parabuf, " ");\
strcat(parabuf, param);\
modebuf[b++] = mode;\
modebuf[b] = 0;\
}\
else if (*parabuf) {\
else {\
sendto_serv_butone_sjoin(cptr, ":%s MODE %s %s %s %lu", sptr->name, chptr->chname,\
modebuf, parabuf, chptr->creationtime); \
sendto_channel_butserv(chptr, sptr, ":%s MODE %s %s %s", sptr->name, chptr->chname,\
modebuf, parabuf);\
sendto_channel_butserv(chptr, sptr, ":%s MODE %s %s %s", sptr->name, chptr->chname,\
modebuf, parabuf);\
strcpy(parabuf,param);\
modebuf[0] = '+';\
modebuf[1] = mode;\
modebuf[2] = 0;\
sendto_serv_butone_sjoin(cptr, ":%s MODE %s %s %s %lu", sptr->name, chptr->chname,\
modebuf, parabuf, chptr->creationtime); \
sendto_channel_butserv(chptr, sptr, ":%s MODE %s %s %s", sptr->name, chptr->chname,\
modebuf, parabuf); \
modebuf[1] = 0;\
parabuf[0] = 0;\
b = 1;\
}\
else if (b == MAXMODEPARAMS) {\
sendto_serv_butone_sjoin(cptr, ":%s MODE %s %s %s %lu", sptr->name, chptr->chname,\
modebuf, parabuf, chptr->creationtime); \
sendto_channel_butserv(chptr, sptr, ":%s MODE %s %s %s", sptr->name, chptr->chname,\
modebuf, parabuf);\
parabuf[0] = 0;\
modebuf[1] = 0;\
b = 1;\
modebuf[2] = '\0';\
b = 2;\
}
#define Addsingle(x) modebuf[b] = x; b++
#define Addsingle(x) modebuf[b] = x; b++; modebuf[b] = '\0'
#define CheckStatus(x,y) if (modeflags & (y)) { Addit((x), nick); }
#define AddBan(x) strlcat(banbuf, x, sizeof banbuf); strlcat(banbuf, " ", sizeof banbuf);
#define AddEx(x) strlcat(exbuf, x, sizeof exbuf); strlcat(exbuf, " ", sizeof banbuf);
+31 -28
View File
@@ -292,9 +292,9 @@ inline void stats_help(aClient *sptr)
sendto_one(sptr, rpl_str(RPL_STATSHELP), me.name, sptr->name,
"P - port - Send information about ports");
sendto_one(sptr, rpl_str(RPL_STATSHELP), me.name, sptr->name,
"q - sqline - Send the SQLINE list");
"q - bannick - Send the ban nick block list");
sendto_one(sptr, rpl_str(RPL_STATSHELP), me.name, sptr->name,
"Q - bannick - Send the ban nick block list");
"Q - sqline - Send the global qline list");
sendto_one(sptr, rpl_str(RPL_STATSHELP), me.name, sptr->name,
"r - chanrestrict - Send the channel deny/allow block list");
#ifdef DEBUGMODE
@@ -901,15 +901,15 @@ int stats_mem(aClient *sptr, char *para)
sendto_one(sptr, ":%s %d %s :Client Local %d(%ld) Remote %d(%ld)",
me.name, RPL_STATSDEBUG, sptr->name, lc, lcm, rc, rcm);
sendto_one(sptr, ":%s %d %s :Users %d(%d) Invites %d(%d)",
me.name, RPL_STATSDEBUG, sptr->name, us, us * sizeof(anUser), usi,
usi * sizeof(Link));
sendto_one(sptr, ":%s %d %s :User channels %d(%d) Aways %d(%ld)",
me.name, RPL_STATSDEBUG, sptr->name, usc, usc * sizeof(Link), aw, awm);
sendto_one(sptr, ":%s %d %s :WATCH headers %d(%ld) entries %d(%d)",
me.name, RPL_STATSDEBUG, sptr->name, wlh, wlhm, wle, wle * sizeof(Link));
sendto_one(sptr, ":%s %d %s :Attached confs %d(%d)",
me.name, RPL_STATSDEBUG, sptr->name, lcc, lcc * sizeof(Link));
sendto_one(sptr, ":%s %d %s :Users %d(%ld) Invites %d(%ld)",
me.name, RPL_STATSDEBUG, sptr->name, us, (long)(us * sizeof(anUser)),
usi, (long)(usi * sizeof(Link)));
sendto_one(sptr, ":%s %d %s :User channels %d(%ld) Aways %d(%ld)",
me.name, RPL_STATSDEBUG, sptr->name, usc, (long)(usc * sizeof(Link)), aw, awm);
sendto_one(sptr, ":%s %d %s :WATCH headers %d(%ld) entries %d(%ld)",
me.name, RPL_STATSDEBUG, sptr->name, wlh, wlhm, wle, (long)(wle * sizeof(Link)));
sendto_one(sptr, ":%s %d %s :Attached confs %d(%ld)",
me.name, RPL_STATSDEBUG, sptr->name, lcc, (long)(lcc * sizeof(Link)));
totcl = lcm + rcm + us * sizeof(anUser) + usc * sizeof(Link) + awm;
totcl += lcc * sizeof(Link) + usi * sizeof(Link) + wlhm;
@@ -923,14 +923,15 @@ int stats_mem(aClient *sptr, char *para)
sendto_one(sptr, ":%s %d %s :Channels %d(%ld) Bans %d(%ld)",
me.name, RPL_STATSDEBUG, sptr->name, ch, chm, chb, chbm);
sendto_one(sptr, ":%s %d %s :Channel members %d(%d) invite %d(%d)",
me.name, RPL_STATSDEBUG, sptr->name, chu, chu * sizeof(Link),
chi, chi * sizeof(Link));
sendto_one(sptr, ":%s %d %s :Channel members %d(%ld) invite %d(%ld)",
me.name, RPL_STATSDEBUG, sptr->name, chu, (long)(chu * sizeof(Link)),
chi, (long)(chi * sizeof(Link)));
totch = chm + chbm + chu * sizeof(Link) + chi * sizeof(Link);
sendto_one(sptr, ":%s %d %s :Whowas users %d(%d) away %d(%ld)",
me.name, RPL_STATSDEBUG, sptr->name, wwu, wwu * sizeof(anUser),
sendto_one(sptr, ":%s %d %s :Whowas users %d(%ld) away %d(%ld)",
me.name, RPL_STATSDEBUG, sptr->name,
wwu, (long)(wwu * sizeof(anUser)),
wwa, wwam);
sendto_one(sptr, ":%s %d %s :Whowas array %d(%ld)",
me.name, RPL_STATSDEBUG, sptr->name, NICKNAMEHISTORYLENGTH, wwm);
@@ -938,10 +939,11 @@ int stats_mem(aClient *sptr, char *para)
totww = wwu * sizeof(anUser) + wwam + wwm;
sendto_one(sptr,
":%s %d %s :Hash: client %d(%d) chan %d(%d) watch %d(%d)", me.name,
RPL_STATSDEBUG, sptr->name, U_MAX, sizeof(aHashEntry) * U_MAX, CH_MAX,
sizeof(aHashEntry) * CH_MAX, WATCHHASHSIZE,
sizeof(aWatch *) * WATCHHASHSIZE);
":%s %d %s :Hash: client %d(%ld) chan %d(%ld) watch %d(%ld)", me.name,
RPL_STATSDEBUG, sptr->name, U_MAX,
(long)(sizeof(aHashEntry) * U_MAX), CH_MAX,
(long)(sizeof(aHashEntry) * CH_MAX), WATCHHASHSIZE,
(long)(sizeof(aWatch *) * WATCHHASHSIZE));
db = dbufblocks * sizeof(dbufbuf);
sendto_one(sptr, ":%s %d %s :Dbuf blocks %d(%ld)",
me.name, RPL_STATSDEBUG, sptr->name, dbufblocks, db);
@@ -950,9 +952,10 @@ int stats_mem(aClient *sptr, char *para)
while ((link = link->next))
fl++;
fl++;
sendto_one(sptr, ":%s %d %s :Link blocks free %d(%d) total %d(%d)",
me.name, RPL_STATSDEBUG, sptr->name, fl, fl * sizeof(Link),
flinks, flinks * sizeof(Link));
sendto_one(sptr, ":%s %d %s :Link blocks free %d(%ld) total %d(%ld)",
me.name, RPL_STATSDEBUG, sptr->name,
fl, (long)(fl * sizeof(Link)),
flinks, (long)(flinks * sizeof(Link)));
rm = cres_mem(sptr,sptr->name);
@@ -976,7 +979,7 @@ int stats_mem(aClient *sptr, char *para)
#endif
#else
sendto_one(sptr, ":%s %d %s :TOTAL: %d",
sendto_one(sptr, ":%s %d %s :TOTAL: %lu",
me.name, RPL_STATSDEBUG, sptr->name, tot);
#endif
return 0;
@@ -1415,7 +1418,8 @@ int stats_zip(aClient *sptr, char *para)
{
sendto_one(sptr,
":%s %i %s :Zipstats for link to %s (compresslevel %d): decompressed (in): %01lu=>%01lu (%3.1f%%), compressed (out): %01lu=>%01lu (%3.1f%%)",
me.name, RPL_TEXT, sptr->name, get_client_name(acptr, TRUE),
me.name, RPL_TEXT, sptr->name,
IsAnOper(sptr) ? get_client_name(acptr, TRUE) : acptr->name,
acptr->serv->conf->compression_level ?
acptr->serv->conf->compression_level : ZIP_DEFAULT_LEVEL,
acptr->zip->in->total_in, acptr->zip->in->total_out,
@@ -1502,9 +1506,8 @@ int stats_linkinfoint(aClient *sptr, char *para, int all)
continue;
#ifdef DEBUGMODE
ircsprintf(pbuf, "%d :%d", acptr->cputime,
(acptr->user && MyConnect(acptr)) ?
TStime() - acptr->last : 0);
ircsprintf(pbuf, "%ld :%ld", (long)acptr->cputime,
(long)(acptr->user && MyConnect(acptr)) ? TStime() - acptr->last : 0);
#endif
if (IsOper(sptr))
{
+25
View File
@@ -123,8 +123,13 @@ int channel_svsmode(aClient *cptr, aClient *sptr, int parc, char *parv[])
Member *cm;
for (cm = chptr->members; cm; cm = cm->next) {
if (cm->flags & CHFL_CHANOWNER) {
Membership *mb;
mb = find_membership_link(cm->cptr->user->channel,
chptr);
add_send_mode_param(chptr, sptr, '-', 'q', cm->cptr->name);
cm->flags &= ~CHFL_CHANOWNER;
if (mb)
mb->flags = cm->flags;
}
}
}
@@ -133,8 +138,13 @@ int channel_svsmode(aClient *cptr, aClient *sptr, int parc, char *parv[])
Member *cm;
for (cm = chptr->members; cm; cm = cm->next) {
if (cm->flags & CHFL_CHANPROT) {
Membership *mb;
mb = find_membership_link(cm->cptr->user->channel,
chptr);
add_send_mode_param(chptr, sptr, '-', 'a', cm->cptr->name);
cm->flags &= ~CHFL_CHANPROT;
if (mb)
mb->flags = cm->flags;
}
}
}
@@ -143,8 +153,13 @@ int channel_svsmode(aClient *cptr, aClient *sptr, int parc, char *parv[])
Member *cm;
for (cm = chptr->members; cm; cm = cm->next) {
if (cm->flags & CHFL_CHANOP) {
Membership *mb;
mb = find_membership_link(cm->cptr->user->channel,
chptr);
add_send_mode_param(chptr, sptr, '-', 'o', cm->cptr->name);
cm->flags &= ~CHFL_CHANOP;
if (mb)
mb->flags = cm->flags;
}
}
}
@@ -153,8 +168,13 @@ int channel_svsmode(aClient *cptr, aClient *sptr, int parc, char *parv[])
Member *cm;
for (cm = chptr->members; cm; cm = cm->next) {
if (cm->flags & CHFL_HALFOP) {
Membership *mb;
mb = find_membership_link(cm->cptr->user->channel,
chptr);
add_send_mode_param(chptr, sptr, '-', 'h', cm->cptr->name);
cm->flags &= ~CHFL_HALFOP;
if (mb)
mb->flags = cm->flags;
}
}
}
@@ -163,8 +183,13 @@ int channel_svsmode(aClient *cptr, aClient *sptr, int parc, char *parv[])
Member *cm;
for (cm = chptr->members; cm; cm = cm->next) {
if (cm->flags & CHFL_VOICE) {
Membership *mb;
mb = find_membership_link(cm->cptr->user->channel,
chptr);
add_send_mode_param(chptr, sptr, '-', 'v', cm->cptr->name);
cm->flags &= ~CHFL_VOICE;
if (mb)
mb->flags = cm->flags;
}
}
}
+7 -3
View File
@@ -505,6 +505,7 @@ char *tkllayer[11] = {
struct tm *t;
int targets = 0, action = 0;
char targetbuf[64], actionbuf[2];
char reason[512];
if (IsServer(sptr))
return 0;
@@ -563,7 +564,7 @@ char targetbuf[64], actionbuf[2];
actionbuf[1] = '\0';
/* now check the regex... */
p = unreal_checkregex(parv[6],0);
p = unreal_checkregex(parv[6],0,1);
if (p)
{
sendto_one(sptr, ":%s NOTICE %s :Error in regex '%s': %s",
@@ -583,10 +584,13 @@ char targetbuf[64], actionbuf[2];
}
else
tkllayer[8] = parv[4];
if (parv[5][0] == '-')
tkllayer[9] = SPAMFILTER_BAN_REASON;
strlcpy(reason, unreal_encodespace(SPAMFILTER_BAN_REASON), sizeof(reason));
else
tkllayer[9] = parv[5];
strlcpy(reason, parv[5], sizeof(reason));
tkllayer[9] = reason;
tkllayer[10] = parv[6];
if (whattodo == 0)
+1 -1
View File
@@ -188,7 +188,7 @@ int m_vhost(aClient *cptr, aClient *sptr, int parc, char *parv[])
MyFree(sptr->user->swhois);
sptr->user->swhois = MyMalloc(strlen(vhost->swhois) +1);
strcpy(sptr->user->swhois, vhost->swhois);
sendto_serv_butone_token(cptr, sptr->name,
sendto_serv_butone_token(cptr, me.name,
MSG_SWHOIS, TOK_SWHOIS, "%s :%s", sptr->name, vhost->swhois);
}
sendto_one(sptr,
+2 -2
View File
@@ -439,13 +439,13 @@ char has_common_chan = 0;
/* if they only want people with a certain umode */
if (wfl.umodes_want)
{
if (!(acptr->umodes & wfl.umodes_want) || (acptr->umodes & UMODE_HIDEOPER))
if (!(acptr->umodes & wfl.umodes_want) || (!IsAnOper(sptr) && (acptr->umodes & UMODE_HIDEOPER)))
return WHO_CANTSEE;
}
if (wfl.umodes_dontwant)
{
if ((acptr->umodes & wfl.umodes_dontwant) && !(acptr->umodes & UMODE_HIDEOPER))
if ((acptr->umodes & wfl.umodes_dontwant) && (!(acptr->umodes & UMODE_HIDEOPER) || IsAnOper(sptr)))
return WHO_CANTSEE;
}
+1 -1
View File
@@ -409,7 +409,7 @@ void get_res_from_reg_nt()
{
do {
n = 0;
while (*cp && *cp != ' ' && *cp != '\t')
while (*cp && *cp != ' ' && *cp != '\t' && *cp != ',')
++cp;
if (*cp)
{
+130 -29
View File
@@ -396,7 +396,7 @@ int config_verbose = 0;
void add_include(char *);
#ifdef USE_LIBCURL
void add_remote_include(char *, char *, int);
void add_remote_include(char *, char *, int, char *);
int remote_include(ConfigEntry *ce);
#endif
void unload_notloaded_includes(void);
@@ -614,9 +614,16 @@ long config_checkval(char *orig, unsigned short flags) {
void set_channelmodes(char *modes, struct ChMode *store, int warn)
{
aCtab *tab;
char *param = strchr(modes, ' ');
if (param)
param++;
char *params = strchr(modes, ' ');
char *parambuf = NULL;
char *param = NULL;
if (params)
{
params++;
parambuf = MyMalloc(strlen(params)+1);
strcpy(parambuf, params);
param = strtok(parambuf, " ");
}
for (; *modes && *modes != ' '; modes++)
{
@@ -636,13 +643,18 @@ void set_channelmodes(char *modes, struct ChMode *store, int warn)
case 'f':
{
#ifdef NEWCHFLOODPROT
char *myparam = param;
/* TODO */
ChanFloodProt newf;
memset(&newf, 0, sizeof(newf));
if (!param)
if (!myparam)
break;
if (param[0] != '[')
/* Go to next parameter */
param = strtok(NULL, " ");
if (myparam[0] != '[')
{
if (warn)
config_status("set::modes-on-join: please use the new +f format: '10:5' becomes '[10t]:5' "
@@ -655,7 +667,7 @@ void set_channelmodes(char *modes, struct ChMode *store, int warn)
unsigned char r;
/* '['<number><1 letter>[optional: '#'+1 letter],[next..]']'':'<number> */
strlcpy(xbuf, param, sizeof(xbuf));
strlcpy(xbuf, myparam, sizeof(xbuf));
p2 = strchr(xbuf+1, ']');
if (!p2)
break;
@@ -776,15 +788,19 @@ void set_channelmodes(char *modes, struct ChMode *store, int warn)
break;
}
#else
char *myparam = param;
char kmode = 0;
char *xp;
int msgs=0, per=0;
int hascolon = 0;
if (!param)
if (!myparam)
break;
if (*param == '*')
/* Go to next parameter */
param = strtok(NULL, " ");
if (*myparam == '*')
kmode = 1;
for (xp = param; *xp; xp++)
for (xp = myparam; *xp; xp++)
{
if (*xp == ':')
{
@@ -793,14 +809,14 @@ void set_channelmodes(char *modes, struct ChMode *store, int warn)
}
if (((*xp < '0') || (*xp > '9')) && *xp != '*')
break;
if (*xp == '*' && *param != '*')
if (*xp == '*' && *myparam != '*')
break;
}
if (hascolon != 1)
break;
xp = strchr(param, ':');
xp = strchr(myparam, ':');
*xp = 0;
msgs = atoi((*param == '*') ? (param+1) : param);
msgs = atoi((*myparam == '*') ? (myparam+1) : myparam);
xp++;
per = atoi(xp);
xp--;
@@ -818,15 +834,47 @@ void set_channelmodes(char *modes, struct ChMode *store, int warn)
for (tab = &cFlagTab[0]; tab->mode; tab++)
{
if (tab->flag == *modes)
{
store->mode |= tab->mode;
break;
}
}
#ifdef EXTCMODE
/* Try extcmodes */
if (!tab->mode)
{
int i;
for (i=0; i <= Channelmode_highest; i++)
{
if (!(Channelmode_Table[i].flag))
continue;
if (*modes == Channelmode_Table[i].flag)
{
if (Channelmode_Table[i].paracount)
{
if (!param)
break;
store->extparams[i] = strdup(Channelmode_Table[i].conv_param(param));
/* Get next parameter */
param = strtok(NULL, " ");
}
store->extmodes |= Channelmode_Table[i].mode;
break;
}
}
}
#endif
}
}
if (parambuf)
free(parambuf);
}
void chmode_str(struct ChMode modes, char *mbuf, char *pbuf)
{
aCtab *tab;
int i;
*pbuf = 0;
*mbuf++ = '+';
for (tab = &cFlagTab[0]; tab->mode; tab++)
{
@@ -836,17 +884,38 @@ void chmode_str(struct ChMode modes, char *mbuf, char *pbuf)
*mbuf++ = tab->flag;
}
}
#ifdef EXTCMODE
for (i=0; i <= Channelmode_highest; i++)
{
if (!(Channelmode_Table[i].flag))
continue;
if (modes.extmodes & Channelmode_Table[i].mode)
{
*mbuf++ = Channelmode_Table[i].flag;
if (Channelmode_Table[i].paracount)
{
strcat(pbuf, modes.extparams[i]);
strcat(pbuf, " ");
}
}
}
#endif
#ifdef NEWCHFLOODPROT
if (modes.floodprot.per)
{
*mbuf++ = 'f';
sprintf(pbuf, "%s", channel_modef_string(&modes.floodprot));
strcat(pbuf, channel_modef_string(&modes.floodprot));
}
#else
if (modes.per)
{
*mbuf++ = 'f';
sprintf(pbuf, "%s%d:%d", modes.kmode ? "*" : "", modes.msgs, modes.per);
if (modes.kmode)
strcat(pbuf, "*");
strcat(pbuf, my_itoa(modes.msgs));
strcat(pbuf, ":");
strcat(pbuf, my_itoa(modes.per));
}
#endif
*mbuf++=0;
@@ -1500,6 +1569,10 @@ int init_conf(char *rootconf, int rehash)
else
{
config_error("IRCd configuration failed to load");
#ifndef STATIC_LINKING
Unload_all_testing_modules();
#endif
unload_notloaded_includes();
config_free(conf);
conf = NULL;
free_iConf(&tempiConf);
@@ -1593,6 +1666,7 @@ void config_rehash()
ListStruct *next, *next2;
aTKline *tk, *tk_next;
SpamExcept *spamex_ptr;
int i;
USE_BAN_VERSION = 0;
/* clean out stuff that we don't use */
@@ -1906,6 +1980,13 @@ void config_rehash()
ircfree(of_ptr->topic);
MyFree(of_ptr);
}
#ifdef EXTCMODE
for (i = 0; i < EXTCMODETABLESZ; i++)
{
if (iConf.modes_on_join.extparams[i])
free(iConf.modes_on_join.extparams[i]);
}
#endif
conf_offchans = NULL;
}
@@ -4681,7 +4762,7 @@ int _test_badword(ConfigFile *conf, ConfigEntry *ce) {
}
else
{
char *errbuf = unreal_checkregex(word->ce_vardata,1);
char *errbuf = unreal_checkregex(word->ce_vardata,1,0);
if (errbuf)
{
config_error("%s:%i: badword::%s contains an invalid regex: %s",
@@ -4785,7 +4866,7 @@ int _conf_spamfilter(ConfigFile *conf, ConfigEntry *ce)
nl->spamf->action = action;
if ((cep = config_find_entry(ce->ce_entries, "reason")))
nl->spamf->tkl_reason = strdup(cep->ce_vardata);
nl->spamf->tkl_reason = strdup(unreal_encodespace(cep->ce_vardata));
else
nl->spamf->tkl_reason = strdup("<internally added by ircd>");
@@ -4803,6 +4884,7 @@ int _test_spamfilter(ConfigFile *conf, ConfigEntry *ce)
ConfigEntry *cep;
int errors = 0;
int got = 0;
char *regex = NULL, *reason = NULL;
for (cep = ce->ce_entries; cep; cep = cep->ce_next)
{
@@ -4820,6 +4902,8 @@ int _test_spamfilter(ConfigFile *conf, ConfigEntry *ce)
cep->ce_fileptr->cf_filename, cep->ce_varlinenum, cep->ce_varname);
errors++; continue;
}
if (!strcmp(cep->ce_varname, "reason"))
reason = cep->ce_vardata;
if (!strcmp(cep->ce_varname, "regex") || !strcmp(cep->ce_varname, "action") ||
!strcmp(cep->ce_varname, "reason") || !strcmp(cep->ce_varname, "ban-time"))
continue;
@@ -4836,7 +4920,8 @@ int _test_spamfilter(ConfigFile *conf, ConfigEntry *ce)
errors++;
} else if (cep->ce_vardata) {
/* Check if it's a valid one */
char *errbuf = unreal_checkregex(cep->ce_vardata,0);
char *errbuf = unreal_checkregex(cep->ce_vardata,0,0);
regex = cep->ce_vardata;
if (errbuf)
{
config_error("%s:%i: spamfilter::regex contains an invalid regex: %s",
@@ -4895,6 +4980,14 @@ int _test_spamfilter(ConfigFile *conf, ConfigEntry *ce)
}
}
if (regex && reason && (strlen(regex) + strlen(reason) > 505))
{
config_error("%s:%i: spamfilter block problem: regex + reason field are together over 505 bytes, "
"please choose a shorter regex or reason",
ce->ce_fileptr->cf_filename, ce->ce_varlinenum);
errors++;
}
return errors;
}
@@ -5310,6 +5403,7 @@ int _conf_ban(ConfigFile *conf, ConfigEntry *ce)
nl->reason = strdup(cep->ce_vardata);
strcpy(nl->usermask, "*");
AddListItem(nl, tklines[tkl_hash('q')]);
free(ca);
return 0;
}
else if (!strcmp(ce->ce_vardata, "ip"))
@@ -7292,12 +7386,12 @@ static void conf_download_complete(char *url, char *file, char *errorbuf, int ca
if (!stricmp(url, inc->url))
{
inc->flag.type &= ~INCLUDE_DLQUEUED;
if (!file && !cached)
inc->errorbuf = strdup(errorbuf);
break;
}
}
if (!inc->errorbuf)
if (!file && !cached)
add_remote_include(file, url, 0, errorbuf);
else
{
if (cached)
{
@@ -7305,11 +7399,11 @@ static void conf_download_complete(char *url, char *file, char *errorbuf, int ca
char *file = unreal_getfilename(urlfile);
char *tmp = unreal_mktemp("tmp", file);
unreal_copyfile(inc->file, tmp);
add_remote_include(tmp, url, 0);
add_remote_include(tmp, url, 0, NULL);
free(urlfile);
}
else
add_remote_include(file, url, 0);
add_remote_include(file, url, 0, NULL);
}
for (inc = conf_include; inc; inc = (ConfigItem_include *)inc->next)
{
@@ -7372,6 +7466,8 @@ int rehash_internal(aClient *cptr, aClient *sptr, int sig)
}
if (init_conf(configfile, 1) == 0)
run_configuration();
if (sig == 1)
reread_motdsandrules();
unload_all_unused_snomasks();
unload_all_unused_umodes();
loop.ircd_rehashing = 0;
@@ -7451,10 +7547,10 @@ char *find_loaded_remote_include(char *url)
int remote_include(ConfigEntry *ce)
{
char *errorbuf;
char *errorbuf = NULL;
char *file = find_remote_include(ce->ce_vardata, &errorbuf);
int ret;
if (!loop.ircd_rehashing || (loop.ircd_rehashing && !file))
if (!loop.ircd_rehashing || (loop.ircd_rehashing && !file && !errorbuf))
{
char *error;
if (config_verbose > 0)
@@ -7470,7 +7566,7 @@ int remote_include(ConfigEntry *ce)
else
{
if ((ret = load_conf(file)) >= 0)
add_remote_include(file, ce->ce_vardata, INCLUDE_USED);
add_remote_include(file, ce->ce_vardata, INCLUDE_USED, NULL);
free(file);
return ret;
}
@@ -7487,7 +7583,7 @@ int remote_include(ConfigEntry *ce)
if (config_verbose > 0)
config_status("Loading %s from download", ce->ce_vardata);
if ((ret = load_conf(file)) >= 0)
add_remote_include(file, ce->ce_vardata, INCLUDE_USED);
add_remote_include(file, ce->ce_vardata, INCLUDE_USED, NULL);
return ret;
}
return 0;
@@ -7504,6 +7600,8 @@ void add_include(char *file)
{
if (!(inc->flag.type & INCLUDE_NOTLOADED))
continue;
if (inc->flag.type & INCLUDE_REMOTE)
continue;
if (!stricmp(file, inc->file))
return;
}
@@ -7514,7 +7612,7 @@ void add_include(char *file)
}
#ifdef USE_LIBCURL
void add_remote_include(char *file, char *url, int flags)
void add_remote_include(char *file, char *url, int flags, char *errorbuf)
{
ConfigItem_include *inc;
@@ -7529,9 +7627,12 @@ void add_remote_include(char *file, char *url, int flags)
}
inc = MyMallocEx(sizeof(ConfigItem_include));
inc->file = strdup(file);
if (file)
inc->file = strdup(file);
inc->url = strdup(url);
inc->flag.type = (INCLUDE_NOTLOADED|INCLUDE_REMOTE|flags);
if (errorbuf)
inc->errorbuf = strdup(errorbuf);
AddListItem(inc, conf_include);
}
#endif
+24 -11
View File
@@ -112,6 +112,10 @@ void tkl_init(void)
* setby = whom set it
* expire_at = when to expire - 0 if not to expire
* set_at = was set at
* spamf_tkl_duration = duration of *line placed by spamfilter [1]
* spamf_tkl_reason = escaped reason field for *lines placed by spamfilter [1]
*
* [1]: only relevant for spamfilters, else ignored (eg 0, NULL).
*/
int tkl_add_line(int type, char *usermask, char *hostmask, char *reason, char *setby,
@@ -146,7 +150,7 @@ int tkl_add_line(int type, char *usermask, char *hostmask, char *reason, char *
nl->spamf->tkl_reason = strdup(unreal_encodespace(SPAMFILTER_BAN_REASON));
} else {
nl->spamf->tkl_duration = spamf_tkl_duration;
nl->spamf->tkl_reason = strdup(unreal_encodespace(spamf_tkl_reason));
nl->spamf->tkl_reason = strdup(spamf_tkl_reason); /* already encoded */
}
}
index = tkl_hash(tkl_typetochar(type));
@@ -169,6 +173,7 @@ aTKline *tkl_del_line(aTKline *tkl)
MyFree(p->setby);
if (p->spamf)
{
regfree(&p->spamf->expr);
if (p->spamf->tkl_reason)
MyFree(p->spamf->tkl_reason);
MyFree(p->spamf);
@@ -833,9 +838,12 @@ void tkl_synch(aClient *sptr)
* parv[ 6]: expire_at expire_at (0) expire_at (0) expire_at
* parv[ 7]: set_at set_at set_at set_at
* parv[ 8]: reason regex tkl duration reason
* parv[ 9]: tkl reason
* parv[ 9]: tkl reason [A]
* parv[10]: regex
*
* [A] tkl reason field must be escaped by caller [eg: use unreal_encodespace()
* if m_tkl is called internally].
*
*/
int m_tkl(aClient *cptr, aClient *sptr, int parc, char *parv[])
{
@@ -844,9 +852,9 @@ int m_tkl(aClient *cptr, aClient *sptr, int parc, char *parv[])
int found = 0;
char gmt[256], gmt2[256];
char txt[256];
TS expiry_1, setat_1, spamf_tklduration;
TS expiry_1, setat_1, spamf_tklduration = 0;
int index;
char *reason;
char *reason = NULL;
if (!IsServer(sptr) && !IsOper(sptr) && !IsMe(sptr))
return 0;
@@ -1170,13 +1178,18 @@ int m_tkl(aClient *cptr, aClient *sptr, int parc, char *parv[])
if (tk->type == type)
{
int match = 0;
if ((type & TKL_NICK) && !strcmp(tk->hostmask, parv[4]))
match = 1;
else if ((type & TKL_SPAMF) && !strcmp(tk->hostmask, parv[4])
&& !strcmp(tk->usermask, parv[3]) &&
!strcmp(tk->reason, parv[8]))
match = 1;
else if (!strcmp(tk->hostmask, parv[4]) && !strcmp(tk->usermask, parv[3]))
if (type & TKL_NICK)
{
if (!strcmp(tk->hostmask, parv[4]))
match = 1;
} else
if (type & TKL_SPAMF)
{
if (!strcmp(tk->hostmask, parv[4]) && !strcmp(tk->usermask, parv[3]) &&
!strcmp(tk->reason, reason))
match = 1;
} else /* all other types... */
if (!strcmp(tk->hostmask, parv[4]) && !strcmp(tk->usermask, parv[3]))
match = 1;
if (match)
+25 -3
View File
@@ -775,8 +775,10 @@ char *p;
/** Checks if the specified regex (or fast badwords) is valid.
* returns NULL in case of success [!],
* pointer to buffer with error message otherwise
* if check_broadness is 1, the function will attempt to determine
* if the given regex string is too broad (i.e. matches everything)
*/
char *unreal_checkregex(char *s, int fastsupport)
char *unreal_checkregex(char *s, int fastsupport, int check_broadness)
{
int errorcode, errorbufsize, regex=0;
char *errtmp, *tmp;
@@ -810,6 +812,12 @@ Ilovegotos:
regfree(&expr);
return errorbuf;
}
if (check_broadness && !regexec(&expr, "", 0, NULL, 0))
{
strncpyzt(errorbuf, "Regular expression is too broad", sizeof(errorbuf));
regfree(&expr);
return errorbuf;
}
regfree(&expr);
}
return NULL;
@@ -1011,7 +1019,14 @@ char *unreal_decodespace(char *s)
static char buf[512], *i, *o;
for (i = s, o = buf; (*i) && (o < buf+510); i++)
if (*i == '_')
*o++ = ' ';
{
if (i[1] != '_')
*o++ = ' ';
else {
*o++ = '_';
i++;
}
}
else
*o++ = *i;
*o = '\0';
@@ -1021,11 +1036,18 @@ static char buf[512], *i, *o;
char *unreal_encodespace(char *s)
{
static char buf[512], *i, *o;
for (i = s, o = buf; (*i) && (o < buf+510); i++)
for (i = s, o = buf; (*i) && (o < buf+509); i++)
{
if (*i == ' ')
*o++ = '_';
else if (*i == '_')
{
*o++ = '_';
*o++ = '_';
}
else
*o++ = *i;
}
*o = '\0';
return buf;
}
+3 -3
View File
@@ -225,11 +225,11 @@ void m_info_send(aClient *sptr)
me.name, RPL_INFO, sptr->name);
sendto_one(sptr, ":%s %d %s :| * Luke <luke@unrealircd.com>",
me.name, RPL_INFO, sptr->name);
sendto_one(sptr, ":%s %d %s :| * McSkaf <mcskaf@unrealircd.com>",
me.name, RPL_INFO, sptr->name);
sendto_one(sptr, ":%s %d %s :|", me.name, RPL_INFO, sptr->name);
sendto_one(sptr, ":%s %d %s :| Contributors:", me.name, RPL_INFO, sptr->name);
sendto_one(sptr, ":%s %d %s :|", me.name, RPL_INFO, sptr->name);
sendto_one(sptr, ":%s %d %s :| * McSkaf <mcskaf@unrealircd.com>",
me.name, RPL_INFO, sptr->name);
sendto_one(sptr, ":%s %d %s :| * Zogg <zogg@unrealircd.org>",
me.name, RPL_INFO, sptr->name);
sendto_one(sptr, ":%s %d %s :| * NiQuiL <niquil@unrealircd.org>",
@@ -816,7 +816,7 @@ ConfigItem_tld *tlds;
}
}
static void reread_motdsandrules()
void reread_motdsandrules()
{
motd = (aMotd *) read_file_ex(MPATH, &motd, &motd_tm);
rules = (aMotd *) read_file(RPATH, &rules);
+12 -11
View File
@@ -1185,7 +1185,7 @@ CMD_FUNC(m_nick)
Membership *mp;
time_t lastnick = (time_t) 0;
int differ = 1, update_watch = 1;
unsigned char newusr = 0;
unsigned char newusr = 0, removemoder = 1;
/*
* If the user didn't specify a nickname, complain
*/
@@ -1431,17 +1431,17 @@ CMD_FUNC(m_nick)
*/
if (acptr == sptr) {
if (strcmp(acptr->name, nick) != 0)
/*
** Allows change of case in his/her nick
*/
{
/* Allows change of case in his/her nick */
removemoder = 0; /* don't set the user -r */
goto nickkilldone; /* -- go and process change */
else
} else
/*
** This is just ':old NICK old' type thing.
** Just forget the whole thing here. There is
** no point forwarding it to anywhere,
** especially since servers prior to this
** version would treat it as nick collision.
** This is just ':old NICK old' type thing.
** Just forget the whole thing here. There is
** no point forwarding it to anywhere,
** especially since servers prior to this
** version would treat it as nick collision.
*/
return 0; /* NICK Message ignored */
}
@@ -1737,7 +1737,8 @@ CMD_FUNC(m_nick)
sendto_common_channels(sptr, ":%s NICK :%s", parv[0], nick);
sendto_serv_butone_token(cptr, parv[0], MSG_NICK, TOK_NICK,
"%s %ld", nick, sptr->lastnick);
sptr->umodes &= ~UMODE_REGNICK;
if (removemoder)
sptr->umodes &= ~UMODE_REGNICK;
}
else if (!sptr->name[0])
{
+4 -4
View File
@@ -1815,7 +1815,7 @@ void sendto_connectnotice(char *nick, anUser *user, aClient *sptr, int disconnec
*/
void sendto_serv_butone_nickcmd(aClient *one, aClient *sptr,
char *nick, int hopcount,
int lastnick, char *username, char *realhost, char *server,
long lastnick, char *username, char *realhost, char *server,
long servicestamp, char *info, char *umodes, char *virthost)
{
int i;
@@ -1847,9 +1847,9 @@ void sendto_serv_butone_nickcmd(aClient *one, aClient *sptr,
,
(IsToken(cptr) ? TOK_NICK : MSG_NICK), nick,
hopcount, lastnick, username, realhost,
sptr->srvptr->serv->numeric,
(long)(sptr->srvptr->serv->numeric),
servicestamp, umodes,
(SupportVHP(cptr) ? (IsHidden(sptr) ? sptr->user->virthost : realhost) : virthost),
(SupportVHP(cptr) ? (IsHidden(sptr) ? sptr->user->virthost : realhost) : (virthost ? virthost : "*")),
info);
else
sendto_one(cptr,
@@ -1858,7 +1858,7 @@ void sendto_serv_butone_nickcmd(aClient *one, aClient *sptr,
hopcount, lastnick, username, realhost,
SupportNS(cptr) && sptr->srvptr->serv->numeric ? base64enc(sptr->srvptr->serv->numeric) : server,
servicestamp, umodes,
(SupportVHP(cptr) ? (IsHidden(sptr) ? sptr->user->virthost : realhost) : virthost),
(SupportVHP(cptr) ? (IsHidden(sptr) ? sptr->user->virthost : realhost) : (virthost ? virthost : "*")),
info);
}
+12 -4
View File
@@ -62,7 +62,7 @@ int url_is_valid(char *string)
/*
* Returns the filename portion of the URL. The returned string
* is malloc()'ed and must be freed by the caller. If the specified
* URL does not contain a filename, NULL is returned.
* URL does not contain a filename, a '-' is allocated and returned.
*/
char *url_getfilename(char *url)
{
@@ -80,7 +80,7 @@ char *url_getfilename(char *url)
{
c++;
if (!*c || *c == '?')
return NULL;
return strdup("-");
start = c;
while (*c && *c != '?')
c++;
@@ -92,10 +92,10 @@ char *url_getfilename(char *url)
strlcpy(file, start, c-start+1);
return file;
}
return NULL;
return strdup("-");
}
return NULL;
return strdup("-");
}
#ifdef USE_SSL
@@ -144,6 +144,7 @@ char *download_file(char *url, char **error)
char *tmp = unreal_mktemp("tmp", filename ? filename : "download.conf");
FILE *fd;
if (!curl)
{
if (file)
@@ -167,6 +168,9 @@ char *download_file(char *url, char **error)
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, do_download);
curl_easy_setopt(curl, CURLOPT_FAILONERROR, 1);
curl_easy_setopt(curl, CURLOPT_FILETIME, 1);
curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1);
curl_easy_setopt(curl, CURLOPT_TIMEOUT, 45);
curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 15);
#ifdef USE_SSL
set_curl_ssl_options(curl);
@@ -265,6 +269,9 @@ void download_file_async(char *url, time_t cachetime, vFP callback)
curl_easy_setopt(curl, CURLOPT_TIMECONDITION, CURL_TIMECOND_IFMODSINCE);
curl_easy_setopt(curl, CURLOPT_TIMEVALUE, cachetime);
}
curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1);
curl_easy_setopt(curl, CURLOPT_TIMEOUT, 45);
curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 15);
curl_multi_add_handle(multihandle, curl);
}
@@ -301,6 +308,7 @@ void url_do_transfers_async(void)
switch(rc) {
case -1:
case 0:
cont = 0;
break;
default:
while(CURLM_CALL_MULTI_PERFORM ==
+10 -4
View File
@@ -78,9 +78,9 @@ char *unrealcredits[] =
"=-=-=-=-=-=-=-=-=-=-=-=-=-=[Donations]=-=-=-=-=-=-=-=-=-=-=-=-=-=",
"BlueFlame^, [Real] - ChatFIRST.com, Jameno123 - ByteHosting ",
"Internet Services, Interlink Access Corp, Jan Knutar, ThePlayer,",
"Headband, noriko, powerstorm.net, RedMaxima, IronHelix,",
"Headband, noriko, powerstorm.net, RedMaxima, IronHelix, xnet.org,",
"Pierce - irc.AAcNet.org, Franky75 - Betas-Online.com, irc.vco.se,",
"Bedlock - irc.coldfront.net, Kusau - chat.tochat.org, Japsclan,",
"Beldock - irc.coldfront.net, Kusau - chat.tochat.org, Japsclan,",
"WolfLord - UplinkCorp, Isaiah - irc.frogstar.us, Kedrin Milborn,",
"Dionisios Koutsikos, Tank - irc.scifi-fans.net, irc.P2Pchat.net",
"Leo Zhadanovsky - irc.leozh.net, Lyote - ZodiaCIrC/DecayOnline,",
@@ -94,14 +94,20 @@ char *unrealcredits[] =
"Matridom - www.WinDrivers.com, anaconda - irc.lightmoon.org,",
"mnslinky - http://www.secure-computing.net, Justin Furnas,",
"Andy Hansis - irc.technerd.net, Crimson - www.n00bstories.com",
"Devin Reams, Cleggo - irc.ugcentral.net, xnet.org",
"Devin Reams, Cleggo - irc.ugcentral.net, Tillo - irc.OSirc.net,",
"Matthew Burdine - irc.owns.us, Philip Veale - flame.tiefighter.org,",
"Windfyre IRC Network - irc.windfyre.net",
"=-=-=-=-=-=-=-=-=-=-=-=-=-=-[Hosting]=-=-=-=-=-=-=-=-=-=-=-=-=-=-=",
"Phil Veale - email@phillipveale.com - http://www.tiefighter.org",
"- Donating webhosting for the project amongst other things",
"Alcatraz Media - http://www.alcatrazmedia.com",
"- Donating more webhosting for the project",
"cknight^",
"- Donating a FreeBSD box to the Unreal project to host some stuff",
"KIREnet.com - http://www.kirenet.com",
"- Donating hosting for the above box on their line :)",
"Digital Intensity Webhosting - http://www.digital-intensity.net"
"- Donating hosting for the Unreal forums",
" ",
"Thanks go to all current mirror & DNS hosters. We really value",
"your donations.",
@@ -116,7 +122,7 @@ char *unrealcredits[] =
"list of all the coders' credits. ",
"=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-",
"This IRCd is dedicated to those who have kept us rocking and",
"in good mood all through the years we've struggled with this"
"in good mood all through the years we've struggled with this",
"project. Unreal3.0 and up is dedicated to Morrigan.",
0
};
+1 -2
View File
@@ -924,8 +924,7 @@ static HMENU hRehash, hAbout, hConfig, hTray, hLogs;
MessageBox(NULL, "Rehashing all files", "Rehashing", MB_OK);
sendto_realops("Rehashing all files via the console");
rehash(&me,&me,0);
opermotd = (aMotd *) read_file(OPATH, &opermotd);
botmotd = (aMotd *) read_file(BPATH, &botmotd);
reread_motdsandrules();
break;
case IDM_RHCONF:
MessageBox(NULL, "Rehashing the Config file", "Rehashing", MB_OK);
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
+32 -23
View File
@@ -1,5 +1,5 @@
; UnrealIRCd Win32 Installation Script for My Inno Setup Extensions
; Requires ISX 3.0.4 to work
; Requires Inno Setup 4.1.6 and ISX 3.0.4 to work
; #define USE_SSL
; Uncomment the above line to package an SSL build
@@ -11,7 +11,7 @@
[Setup]
AppName=UnrealIRCd
AppVerName=UnrealIRCd3.2-RC2
AppVerName=UnrealIRCd3.2
AppPublisher=UnrealIRCd Team
AppPublisherURL=http://www.unrealircd.com
AppSupportURL=http://www.unrealircd.com
@@ -25,7 +25,7 @@ LicenseFile=.\gpl.rtf
#else
LicenseFile=.\gplplusssl.rtf
#endif
Compression=bzip/9
Compression=lzma
MinVersion=4.0.1111,4.0.1381
OutputDir=../../
@@ -72,7 +72,7 @@ Source: ".\encpem.bat"; DestDir: "{app}"; Flags: ignoreversion
Source: "..\ssl.cnf"; DestDir: "{app}"; Flags: ignoreversion
#endif
#ifdef USE_ZIP
Source: "c:\dev\zlib\dll32\zlib.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "c:\dev\zlib\dll32\zlibwapi.dll"; DestDir: "{app}"; Flags: ignoreversion
#endif
#ifdef USE_CURL
Source: "c:\dev\curl\lib\libcurl.dll"; DestDir: "{app}"; Flags: ignoreversion
@@ -91,28 +91,35 @@ external 'isxdl_Download@files:isxdl.dll stdcall';
function isxdl_SetOption(Option, Value: PChar): Integer;
external 'isxdl_SetOption@files:isxdl.dll stdcall';
const url = 'http://www.unrealircd.com/downloads/DbgHelp.Dll';
var didDl: Boolean;
function NextButtonClick(CurPage: Integer): Boolean;
var
dbghelp,tmp,output: String;
m: String;
hWnd,answer: Integer;
begin
dbghelp := ExpandConstant('{sys}\DbgHelp.Dll');
output := ExpandConstant('{app}\DbgHelp.Dll');
GetVersionNumbersString(dbghelp,m);
if ((CurPage = wpReady) AND NOT FileExists(output)) then begin
if (NOT FileExists(dbghelp)) then
m := StringOfChar('0',1);
if (StrToInt(m[1]) < 5) then begin
answer := MsgBox('DbgHelp.dll version 5.0 or higher is required to install Unreal, do you wish to install it now?', mbConfirmation, MB_YESNO);
if answer = IDYES then begin
tmp := ExpandConstant('{tmp}\dbghelp.dll');
isxdl_SetOption('title', 'Downloading DbgHelp.dll');
hWnd := StrToInt(ExpandConstant('{wizardhwnd}'));
if isxdl_Download(hWnd, url, tmp) = 0 then
MsgBox('Download and installation of DbgHelp.Dll failed, the file must be manually installed. The file can be downloaded at http://www.unrealircd.com/downloads/DbgHelp.Dll', mbInformation, MB_OK);
end else
MsgBox('In order for Unreal to properly function you must manually install this dll. The dll can be downloaded from http://www.unrealircd.com/downloads/DbgHelp.Dll', mbInformation, MB_OK);
if ((CurPage = wpReady)) then begin
dbghelp := ExpandConstant('{sys}\DbgHelp.Dll');
output := ExpandConstant('{app}\DbgHelp.Dll');
GetVersionNumbersString(dbghelp,m);
if (NOT FileExists(output)) then begin
if (NOT FileExists(dbghelp)) then
m := StringOfChar('0',1);
if (StrToInt(m[1]) < 5) then begin
answer := MsgBox('DbgHelp.dll version 5.0 or higher is required to install Unreal, do you wish to install it now?', mbConfirmation, MB_YESNO);
if answer = IDYES then begin
tmp := ExpandConstant('{tmp}\dbghelp.dll');
isxdl_SetOption('title', 'Downloading DbgHelp.dll');
hWnd := StrToInt(ExpandConstant('{wizardhwnd}'));
if isxdl_Download(hWnd, url, tmp) = 0 then begin
MsgBox('Download and installation of DbgHelp.Dll failed, the file must be manually installed. The file can be downloaded at http://www.unrealircd.com/downloads/DbgHelp.Dll', mbInformation, MB_OK);
end else
didDl := true;
end else
MsgBox('In order for Unreal to properly function you must manually install this dll. The dll can be downloaded from http://www.unrealircd.com/downloads/DbgHelp.Dll', mbInformation, MB_OK);
end;
end;
end;
Result := true;
@@ -122,9 +129,11 @@ procedure DeInitializeSetup();
var
input,output: String;
begin
input := ExpandConstant('{tmp}\dbghelp.dll');
output := ExpandConstant('{app}\dbghelp.dll');
FileCopy(input, output, true);
if (didDl) then begin
input := ExpandConstant('{tmp}\dbghelp.dll');
output := ExpandConstant('{app}\dbghelp.dll');
FileCopy(input, output, true);
end;
end;
[Icons]
-231
View File
@@ -1,231 +0,0 @@
/*
* IRC - Internet Relay Chat, ircd/version.c
* Copyright (C) 1990 Chelsea Ashley Dyerman
*
* 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.
*
* : version.c.SH,v 1.8 2000/02/27 11:53:16 stskeeps Exp $
*/
/*
* This file is generated by version.c.SH. Any changes made will go away.
*/
#include "struct.h"
#include "version.h"
#include "license.h"
char *generation = "1";
#ifdef _WIN32
char *creation = __TIMESTAMP__;
#else
char *creation = "Sun Feb 27 2000 at 11:55:29 GMT";
#endif
#define IRCDTOTALVERSION BASE_VERSION PATCH1 PATCH2 PATCH3 PATCH4 PATCH5 PATCH6 PATCH7 PATCH8 PATCH9
char *version = IRCDTOTALVERSION;
/* moved to s_serv.c */
char *infotext[] =
{ 0 };
char *unrealcredits[] =
{
"-=-=-=-=-=-=-=-=-=-= [ " IRCDTOTALVERSION " Credits ] -=-=-=-=-",
"\0030,1The\0031,0 \0032people \0033on \0034,14\2\37this\2\37 \0035,0list \0036are \0037people \2\0038who\2 \0039have \00310helped \00311up \00312through",
"\00313the \00314development \00315of \0031UnrealIRCd. The Unreal Team would like to thank",
"those people by listing them here:",
"-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=",
" \2\37The UnrealIRCd Team would like to thank:\2\37",
"\26Nutcais\26 (Phil Hawkins)",
"- the original shell for Unreal development, useful comments,",
" being a real IRCbrother for me (Stskeeps) :), learning me a lot",
" about IRC stuff, getting me more and more into IRCd business",
" thanks for the *.tspre.org domain as well :)",
"",
"\37Local Irelands (http://www.local.ie)\37",
"- Thanks for sponsoring UnrealIRCd, test facilities,",
" supporting UnrealIRCd, many new ideas, thanks for making",
" Unreal what it is today:)",
"Mick and Sp^",
"- Amiga port of Unreal (UnrealIRCd/Amiga), continually strange",
" comments on #UnrealIRCd, being great supporters of Unreal",
" and following Unreal development all the way",
"DrBin (Dave) drbin@tspre.org",
"- Recoded & made the new UnrealIRCd/32 code, support,"
" finding bugs, and tonnes of other stuff:)",
"{X} (Laurie) x@tspre.org",
"- Making the main code/design of UnrealIRCd/32 gui",
" bugfounds, etc",
"SourceForge.net",
"- Good hosting, CVS hosting, FTP etc etc:) - thanks for",
" supporting opensource projects",
"",
" \37Donations to Unreal:\37",
"BlueFlame^",
" - the first UnrealIRCd donation :)",
" (yes your name can be here too;)",
"",
" \37These people have helped alpha/betatesting\37",
"zshack, Headbang, Mick, Sp^, WonderWal, bomb, BullFrog, JacobD,",
"SirDeath, l33, EiniD, uo, RevPsych and the subgenius.net network,",
"^RavenX^, Mich[a]el, {X}, Fish, Shmad, Killer, BrainSCAN, RevNull,",
"GoNiS (irc.coreplex.org), Mikey, DrBin, and others",
"",
"",
" \2\37Stskeeps would like to thank:\2\37",
"Morrigan Julie Frederiksen",
" - Being a friend, thinking I was cute, uhm laying on a recycle",
" thing.. 'Its the wrong recycle box Julie!', 'you got too cold",
" hands *freezing*', etc ;)",
"DJBoxy *unknown* *unknown*",
" - For getting me up from #wIRCd bringing me to Mp3fansNet and",
" after we linked to Global-IRC.net - and made people choose me",
" as netadmin/ircd coder - Thanx!",
"TC Tabita Clausen (reallife)",
" - Making me smile of my life, talking with me, being a friend",
" always got a pen sharpener when needed=/, accepting some",
" wierdnesses from my side, going to the cinema with me",
" and many other stuff. You'll always be in my heart,",
" sorry for all the things I did or maybe didn't",
" love you :(",
"KUFO John MacKenzie",
" - Support, helping me always with getting through my life",
" shells, etc etc ;)",
"Sporty_McFly Cedric",
" - Comments, helping me when I got problems with my life and so on",
" *toh* to him - Thanks!",
"Del_Monte K. Hawkes k.hawkes@zombies.force9.net",
" - Is just trying to put the lamer side of things across :cP",
" No. I saw 2 moos. - Well having to input in seconds",
" is fine if you're real quick at maths - but if not - it's a PAIN",
" - Comments, bugfixes, moral support etc.;)",
"Skywalker Chris Morley skywalker@irc.ru.ac.za",
" - Helping me start up ROXnet at first (which brought me",
" into IRCd business.. + Numerous kicks /Kills akills and alike;)",
"zero9000 Kevin Alford",
" - UnrealIRCd logo, graphics, null desu ;), ideas etc.",
" \2\37codemastr would like to thank:\2\37",
"",
" \2\37Also thanks to:\2\37",
"Enforcer, Andy Church, Mick, Sp^, ShadowMastr, Almaris",
"}{, Erik/Dr|zzt, Hedge, Kyle, MissKel, jfc, Fish, kore, Syndicate, Bagge,",
"#Coder-Com@Undernet, ^NeVeR^, flygirl^, DannyM, JuliuZ, wah-wah^, Lisa,",
"Melisa, NonMortal, Andryan, TomaHawk, Lushes, Skywalker, Merlin, Sporty_McFly,",
"zero9000, #wIRCd@DALnet, comstud, dog3, Dianora, Isomer, and others who arent listed here:)",
"",
"------------------------------------------------------",
"Unreal 3.0 and up is dedicated to Morrigan - Julie Frederiksen",
"- a girl who have helped me through anything in my life, hugging",
"me at the right times, a definate dedication. Thanks for the kisses",
"long phonetalks, waste of my mobilephone ;), crying together",
"and making life go on for us both. I will never forget you",
"never leave you, love ya forever",
"------------------------------------------------------",
"This IRCd is dedicated to the love that has always been",
"and will always be there - Thanks to the girls & friends that kept me up",
"when I was down",
0
};
char *unrealcreditsold[] =
{
"------------------------------------------------------",
"Unreal 3.0 and up is dedicated to Morrigan - Julie Frederiksen",
"- a girl who have helped me through anything in my life, hugging",
"me at the right times, a definate dedication. Thanks for the kisses",
"long phonetalks, waste of my mobilephone ;), crying together",
"and making life go on for us both. I will never forget you",
"never leave you, love ya forever",
"------------------------------------------------------",
"This IRCd is dedicated to the love that has always been",
"and will always be there - Thanks to the girls & friends that kept me up",
"when I was down",
0
};
char *dalinfotext[] =
{
"IRC --",
"Based on the original code written by Jarkko Oikarinen",
"Copyright 1988, 1989, 1990, 1991 University of Oulu, Computing Center",
"",
"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.",
"- Any name/comment should never be changed except by the one who made it -",
"",
"UnrealIRCd contains code developed by:",
"Potvin Chris Wolkowski potvin@acestar.org",
"RogerY Roger Y. rogery@austnet.org",
"GZ gz@starchat.net",
"binary",
"",
"",
"The following people have helped in making the DALnet ircd",
"that is based on irc2.8.21.mu3.2 :",
"",
"Russell Russell Miller russell@dal.net",
"Donwulff Jukka Santala donwulff@dal.net",
"Aetobatus Michael Sawyer aetobatus@dal.net",
"Dalvenjah Sven Nielsen dalvenjah@dal.net",
"Skandranon Michael Graff explorer@flame.org",
"Barubary - barubary@dal.net",
"white_dragon Chip Norkus wd@dal.net",
"DuffJ Dafydd James duffj@dal.net",
"taz David Kopstain taz@dal.net",
"NikB Nik Bougalis nikb@dal.net",
"Rakarra - rakarra@dal.net",
"DarkRot Lucas Madar darkrot@dal.net",
"Studded - studded@dal.net",
"JoelKatz David Schwartz joelkatz@dal.net",
"",
"This product includes software developed by Colin Plumb.",
"",
"The following persons have made many changes and enhancements to the",
"code and still know how IRC really works if you have questions about it:",
"",
"Run Carlo Kid carlo@runaway.xs4all.nl",
"Avalon Darren Reed avalon@coombs.anu.edu.au",
"msa Markku Savela Markku.Savela@vtt.fi",
"Wumpus Greg Lindahl gl8f@virginia.edu",
"WiZ Jarkko Oikarinen jto@tolsun.oulu.fi",
"Argv Armin Gruner Armin.Gruner@Informatik.TU-Muenchen.de",
"",
"Thanks to the following people for help with preparing 2.8",
"",
"phone Matthew Green phone@coombs.anu.edu.au",
"Sodapop Chuck Kane ckane@ece.uiuc.edu",
"Skygod Matt Lyle matt@oc.com",
"Vesa Vesa Ruokonen ruokonen@lut.fi",
"Nap Nicolas PIOCH pioch@poly.polytechnique.fr",
"",
"Those who helped in prior versions and continue to be helpful:",
"",
"Stellan Klebom Dan Goodwin Mike Bolotski",
"Ian Frechette Markku Jarvinen Kimmo Suominen",
"Jeff Trim Vijay Subramaniam Karl Kleinpaste",
"Bill Wisner Tom Davis Hugo Calendar",
"Tom Hopkins Stephen van den Berg",
"Bo Adler Michael Sandrof Jon Solomon",
"Jan Peterson Helen Rose Paul Graham",
"",
"Thanks also goes to those persons not mentioned here who have added",
"their advice, opinions, and code to IRC.",
"Thanks also to those who provide the kind sys admins who let me and",
"others continue to develop IRC.",
"",
0
};