1
0
mirror of https://github.com/unrealircd/unrealircd.git synced 2026-06-16 18:54:47 +02:00

27 Commits

Author SHA1 Message Date
Bram Matthys e2c54d4b1e 3.2.8.1 2009-04-13 11:04:37 +00:00
Bram Matthys 7949ef2550 3.2.8 2009-03-01 18:37:59 +00:00
Bram Matthys c625c3574c 3.2.6 2006-12-22 21:10:34 +00:00
Bram Matthys 648d0c6465 3.2.5 2006-06-16 18:29:17 +00:00
Bram Matthys 9d9c699b71 fixed 3.2.4 release :( 2006-02-05 18:03:18 +00:00
Bram Matthys 05f74f405f 3.2.4 2006-02-03 13:57:22 +00:00
Bram Matthys 58c2a0ec5a 3.2.3 2005-03-13 21:03:24 +00:00
Bram Matthys 5c4a58b2aa 3.2.2b 2005-01-15 01:03:37 +00:00
Bram Matthys 0d6cd21fde Unreal3.2.2 2004-10-27 18:45:56 +00:00
Bram Matthys 7c1de2fbc8 Unreal3.2.1 2004-07-03 19:04:48 +00:00
Bram Matthys 40ecbe946d 3.2, now for real! 2004-04-24 23:54:09 +00:00
Bram Matthys 013da5b350 3.2 2004-04-24 23:19:57 +00:00
stskeeps f7514a3124 3.1.6 2003-06-15 17:33:25 +00:00
stskeeps 39b67b0258 3.1.6 2003-06-15 17:28:10 +00:00
stskeeps d13c52ea67 3.1.5.1 2003-01-16 16:32:11 +00:00
stskeeps 23919ffb6e 3.1.5.1 2003-01-16 15:49:56 +00:00
stskeeps 8833b59594 3.1.5 2002-12-09 21:36:29 +00:00
stskeeps c4de0d3718 3.1.5 2002-10-13 17:11:54 +00:00
stskeeps c274501c9f 3.1.4 2002-08-07 22:26:45 +00:00
stskeeps a808ef8104 3.1.4 2002-08-07 21:18:57 +00:00
stskeeps 283dfcfe0f Unreal3.1.3-Komara 2002-03-24 17:52:16 +00:00
stskeeps 41eb4cea2f stable merge with beta (unreal3.1.1-darkshades-stable) 2000-12-10 21:25:20 +00:00
stskeeps 12593314da . 2000-08-20 12:01:56 +00:00
stskeeps 23366dfb8b Import of beta tag, Unreal3.1-Silverheart+ 2000-08-20 11:44:00 +00:00
cmunk 2e969a14c7 Merge of 3.1-final (Mon Aug 7 18:39:12 BST 2000) 2000-08-07 17:39:33 +00:00
cmunk e5191d37e4 Unreal3.0 to Unreal3.1 2000-07-16 20:40:12 +00:00
cmunk 2144a83c89 .. 2000-05-28 08:48:50 +00:00
163 changed files with 49496 additions and 18523 deletions
+1 -1
View File
@@ -7,7 +7,7 @@
\___/|_| |_|_| \___|\__,_|_|\___/\_| \_| \____/\__,_|
Configuration Program
for Unreal3.2.3
for Unreal3.2.8.1
This program will help you to compile your IRC server, and ask you
questions regarding the compile-time settings of it during the process.
+75 -96
View File
@@ -1,116 +1,95 @@
Unreal3.2.8.1 Release Notes
============================
Unreal3.2.3 Release Notes
==========================
==[ ABOUT 3.2.8.1 RELEASE ]==
This Unreal3.2.8.1 release fixes a (serious) security issue regarding
allow::options::noident. The original release notes for 3.2.8 are below.
==[ GENERAL INFORMATION ]==
- If you are upgrading on *NIX, make sure you run 'make clean' and './Config'
first before doing 'make'
first, 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/
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/
- When upgrading a network, we assume you are upgrading from the previous
version (3.2.2). If you got a net running with servers that are several
versions behind (eg: 3.2.1) then you might experience (desynch) problems.
Also, if you try to use the new features, some might not work properly
until all your servers are upgraded. It is therefore recommended to
upgrade all servers in a 'short' time span (x day[s], not weeks).
version (3.2.7). Upgrading from 3.2.6 or 3.2.5 should also be no problem.
However, if you have a network running with servers that are several versions behind
(eg: 3.2.1) then you might experience small (desynch) problems.
Please also minimize the time you have multiple versions running, a few days or
one week is generally not a problem, but having mixed versions on a network for several
weeks or months is not recommended.
- The purpose of the sections below (NEW, CHANGED, MINOR, etc) is to be a SUMMARY of
the changes in this release. There have been 70+ changes, and trying to mention them
all would be useless, see the Changelog for the full list of changes.
==[ NEW ]==
- Channel mode +I (invex, invite exceptions). Users on this list can join +i channels
without needing an /invite.
- Channel mode +j (jointhrottle). If you set +j X:Y you limit each user (individually)
to X joins per Y seconds to the channel.
- Nick Character System: this allows you to choose which additional characters to
allow in nicknames by language (and codepage). Currently available are:
catalan, dutch, french, german, swiss-german, icelandic, italian, spanish,
swedish, hungarian, polish, romanian, slovak, czech, greek, turkish, russian,
hebrew and chinese. There are also several 'groups' available, for more info see:
http://www.vulnscan.org/UnrealIrcd/unreal32docs.html#feature_nickchars
- *NIX: ./Config -advanced, allows you to choose more options
- tld::botmotd and tld::opermotd
- Using /INVITE with no parameters will a list of channels you are invited to
but have not yet joined.
- set::gline-address, works just like set::kline-address but then for glines.
- Added a basic regex tutorial in unreal32docs.html
- /SAJOIN now supports multiple channels (and '0') again.
- Spamfilter topic support ('t' in spamfilter, 'topic' in conf).
- Added a feature to +b/+e ~c: ~c:[prefix]<#channel>. This can be used if you for
example trust all ops of #leet: mode #x +e ~c:@#leet.
- Various translated documents in doc/: unreal32docs.gr.html (Greek), help.fr.conf
and example.fr.conf (French), help.de.conf & example.de.conf (German), and
example.hu.conf (Hungarian).
- set::level-on-join: this defines which privileges a user receives when creating a
channel, default is 'chanop', the only other available setting is 'none' (opless).
- Away notification through WATCH: This allows clients to receive a notification
when someone goes away or comes back, along with a reason, a bit like IM's.
There's probably no current client supporting this but it would be a nice feature
in notify lists. Client developers: see Changes file for full protocol details.
This feature can be disabled by setting set::watch-away-notification to 'no'.
- Spamfilter: Slow spamfilter detection: For each spamfilter, Unreal will check,
each time it executes, how long it takes to execute. When a certain threshold is
reached the IRCd will warn or even remove the spamfilter. This could prevent a
spamfilter from completely stalling the IRCd. Warning is configured through
set::spamfilter::slowdetect-warn (default: 250ms) and automatic deletion is
configured by set::spamfilter::slowdetect-fatal (default: 500ms).
You can set both settings to 0 (zero) to disable slow spamfilter detection.
This feature is currently not available on Windows.
- SSL: set::ssl::server-cipher-list can be used to limit the allowed ciphers
- SSL: To specify when an SSL session key should be renegotiated you can use
set::ssl::renegotiate-bytes <bytes> and set::ssl::renegotiate-timeout <seconds>.
- UHNAMES support: This sends the full nick!ident@host in NAMES which can be
used by clients for their IAL. mIRC, Klient, etc support this.
- There have also been some behavior changes, which can be considered NEW, see
next section (CHANGED).
==[ CHANGED ]==
- Updated auspice.conf
- The usual doc updates, help.conf, spamfilter.conf, dccallow.conf, etc.
- The config parser got (mostly) recoded. This makes it rehash much faster,
additionally "duplicate item" checking is now available.
- Added a 'B' flag to /who output for bots. Also normal users can now /who +m B.
- Support in configfiles for \\ (= a \)
- set::dns::bind::ip, hardly useful for anyone
- If a user is +b on a channel, and set::allow-userhost-change force-rejoin is
in use, then a part/join is not sent in order to prevent flooding.
- OperOverride INVITE notices are now sent out globally to all +s +e users.
- User mode 'g' is now operonly, it hardly did anything for non-opers.
- Made CIDR no longer accept bitmasks with less than 16bits for /*line commands.
- Modulized a lot of commands (~5000 lines of code).
- Made channel modes +c/+S deal with RGB color codes.
- If no log { } block is present, then a warning will be printed and we will log
by default to ircd.log (errors only).
- If an invalid character is found in a nick then the whole nick is rejected now.
- Changed numeric&text of 'is a Secure Connection' to 'is using a Secure Connection',
client coders are encouraged to add support for this new numeric 671. Until then,
in-window-/whois's will probably be broken.
- A locops with can_override/can_gkline/can_gzline is now automatically converted
to a globop, just like we do with can_globalroute/can_gkline. These privileges
are GLOBAL and therefore are not meant to be granted to locops.
- A warning is now sent to an oper if (s)he tries to use /(G)ZLINE on a host.
(G)ZLINES should be placed on *@ipmasks because they are processed before any
ident and host lookups.
- Made (fast) badwords work better with word boundaries, in practice this means
blocking of words with accents/umlauts/es-zett/etc now works properly.
- Made it so halfops can now -h themselves and chanadmins can -a themselves.
- Made spamfilter 'u' also check nickchanges.
- IPv6: On IPv6 servers you no longer have to use ::ffff:1.2.3.4 IP's for IPv4 in the
config file, you can use the simple 1.2.3.4 form, as they are converted automatically.
- When someone is banned and /PARTs, the part reason (comment) is no longer shown
- ChanMode +S/+c: now strips/blocks 'reverse' as well
- Smart banning is now disabled by default because it was too annoying, this means that
f.e. if there's a ban on *!*@*.com then you can still add a ban on *!*@*.aol.com
- except ban { } now also protects against ZLINEs and ban ip { }
- Modules: user modes and channel modes without parameters (eg: +X) no longer have
to be PERManent, this means they can be upgraded/reloaded/unloaded on-the-fly.
==[ MAJOR BUGS FIXED ]==
- Serious crashbug [this is the same fix that was fixed by the hotfix/3.2.2b]
- TRE mem corruption- & crash-bugs (eg: in backreferences).
- Zip links issue (Overflowed unzipbuf)
- Crash issue with 3rd party modules that introduce new channel modes w/parameters
- Mac OS X: Various issues which prevented the IRCd from booting up
- Remote includes (constant) crash with new curl/c-ares versions
- A few rare crash issues, including a crash when linking to another server
- In case of clock adjustments, the IRCd will no longer freeze when the time is
adjusted backwards, nor will it incorrectly throttle clients when adjusted forward.
However, because clock adjustments (time shifts) of more than xx seconds are
so dangerous (and will still cause a number of issues), big warnings are now
printed when they happen.
Morale: synchronize your system clock, or use the built-in timesync feature.
==[ MINOR BUGS FIXED ]==
- Made kline/shun/zline/gzline without parameters report the correct stats(flag).
- Made a few more errors send out to all opers, such as link::bind-ip problems.
- A few missing operflags in /STATS O (and SVSO)
- DCC Spamfilter was not always working correctly
- OperOverriding to, for example, a +zi channel did not print the special join notice.
- Servers behind ulines were not properly ulined, one effect that had was causing
an odd view in /MAP if you had flat-map + hide ulines + a juped server in services.
- Made SVSMODE -b/-e remove bans/excepts placed on IPs
- The set::htm::incoming-rate config item was not working correctly
- If a user was +R then remote server notices were accidently also filtered.
- A locop setting MODE #CHAN +O caused a desynch
- Resolver sometimes incorrectly aliased names, causing incorect TTLs etc.
- Fixed SVSNOOP not removing ALL oper status properly.
- 'shun' target was not working for spamfilter and ban version { }
- Removing of shuns placed on IP's did not take effect immediately (had to reconnect).
- Fixed a bug in mode skipping (eg: '+qk a b' if not +q) and error msgs.
- Chanmode +f #t (per-user text limit) now no longer affects halfops.
- Opers w/can_override can now +qa/-qa if they are not netadmins, also affected +L/+u.
Be sure you upgrade all servers to 3.2.3 if using these new abilities, or else you
will get desynch issues.
- Fixed several /SAMODE bugs as well, regarding non-netadmins, being halfop'ed, etc.
- /GZLINE [nick] was placing a *line on *@host instead of *@IP, fixed.
- alias::format in combination with ::type 'command' caused a crash
- zlib upgraded to 1.2.2, curl upgraded to 7.13.1, both fix various issues.
- Win32 installer now also installs doc\technical\*.*
- Desynch issues regarding +s/+p and +c/+S
- /SAMODE causing a 'fishy timestamp' if a cmode with a digit parameter was used.
- CGI:IRC: Several IPv6 issues, both on IPv6 IRCd's and CGI:IRC gateways
- IP masks in oper::from::userhost sometimes didn't match when they should
- (G)ZLINE's on IPv6 users were sometimes rejected
- CHROOTDIR works again
- OperOverride fixes
- Throttling is now more accurate
- And more... see Changelog
==[ REMOVED ]==
- NAZIISH_CHBAN_HANDLING (did not work at all)
- The 'oldcloak' cloaking module is now removed, since this old algorithm got broken
8 months ago, nobody should be using it anymore.
==[ KNOWN ISSUES ]==
- Regexes: Be careful with backreferences (\1, etc), certain regexes can slow the IRCd
down considerably and even bring it to a near-halt. In the spamfilter user target it's
usually safe though. Slow spamfilter detection can help prevent the slowdown/freeze,
but might not work in worst-case scenario's.
- Regexes: Possessive quantifiers such as, for example, "++" (not to be confused with "+")
are not safe to use, they can easily freeze the IRCd.
- Suse 10.3 in 64 bit mode (amd64, x64) is known to crash UnrealIRCd on-boot, this is
likely to be a Suse 10.3 bug as over 3 people reported it with that exact OS / arch.
==[ ADDITIONAL INFO ]==
* See Changelog for more details
+908
View File
@@ -859,3 +859,911 @@
This feature has been suggested for several years (and refused), but the final
suggestion (with implementation specific hints) came from Gilou in bug #0002207.
- Fixed win32 makefile, now compiles fine.
- Fixed (important?) reference count bug regarding sptr->serv->conf. I don't know what
effects this caused (memory corruption?), but it didn't look good ;).
- Fixed an invalid badword block in the conf causing a crash, reported by Monk (#2639).
- [Internal] Code cleanup for spamfilter target/bantype routines
- Added 'warn' target which is basically the same as 'block' except it does not block ;).
It also sends a numeric to the user saying the command has been processed, but a copy
has been sent to ircops. I feel this is a good idea for privacy reasons (anti-spy),
though I don't know how users will react to this. If you are using this on your network
and get users bothering you about it (or before that ;p), it's probably a good idea
to explain it somewhere on your site or FAQ :).
Example usage:
/spamfilter add p warn - Testing_mirc_decode_filter \$decode\(.*\)
[WARNING] The numeric text is likely to change in the next few weeks (early-cvs-commit).
- If a class block was removed and any other blocks would be referencing the class block
(such as: allow::class, oper::class, link::class), then this would cause a crash.
Reported by Mike_ (#0002646).
- Changed the way we build most of the .so's: the .o files of individual modules that were
generated (for linkage by commands.so), are now used to generate the .so files of the
individual modules as well (eg: m_setname.o -link-> m_setname.so). This reduces compile
time ('make') on my machine by 33%, so it's quite noticable ;).
- Added doc/technical/serverprotocol.html created by aquanight (updates will follow soon).
- Documented set::channel-command-prefix a bit more, and also changed the default from
"`" to "`!." which seems much more reasonable / widespread :).
- Some m_restart cleanups, suggested by w00t (#2652).
- Removed all old resolver code and switched over to c-ares (+our caching routines).
This should get rid of some annoying untracable (and usually rare) crashbugs in the
old resolver. Besides that, it makes things look more clean and understandable.
This should be the fix for the following bugids (all the same issue): #2499, #2551, #2558,
#2559, #2603, #2642, #2502, #2501, #2618, #2616.
Feedback and testing is very much welcomed (syzop@unrealircd.com).
- Fixed SSL + new resolver problem, would cause an "interesting flood" of messages / 100% CPU.
Reported by Trocotronic (#0002659).
- Fixed a problem with entries in the hosts file (such as, usually, localhost), this would
cause an unresolved host and a 30s delay for the user, even though resolving succeeded.
- When OPEROVERRIDE_VERIFY is enabled, we now allow opers to still join any channels listed
in set::auto-join or set::oper-auto-join, even if they are +s/+p. Suggested by ultrotter
(#0002644).
- Added 4 UNREAL_VERSION_* macro's that can be useful for 3rd party modules to find out the
unreal version that the user is using. I presume this can be helpful (although nobody ever
suggested it ;p). The macros (#define's) are:
UNREAL_VERSION_GENERATION The generation version number eg: 3 for 3.2.4
UNREAL_VERSION_MAJOR The major version number eg: 2 for 3.2.4
UNREAL_VERSION_MINOR The minor version number eg: 4 for 3.2.4
This can be negative for unstable,
alpha and beta versions.
UNREAL_VERSION_TIME Year + week of the day (starting eg: 200541
on Monday), this is updated on
the CVS server every week.
The first 3 are for nicely identifiying the version, the 4th can be useful in case
you want to support CVS and/or want some more control.
- Fixed crash bug (due to new resolver) if not using 1 general *@* / *@* allow block,
reported by Daniel.
- Fixed issue that could cause an alias to be added that would override a command.
- Fixed OpenBSD crash on /REHASH. Thanks to Peter Laur (OpenBSD.se) for providing us
a shell account to trace this issue down.
- Couple of source code cleanups (svsnick, a *line msg, kill, and some useless l_commands
code), suggested by Nazzy and Requi3m.
- Fixed extbans no longer working properly in CVS, fix provided by Nazzy (#0002681).
- Made it so you no longer can change your nick to a banned one in a channel, suggested
by vonitsanet (#0002388), partial patch provided by Nazzy.
This option can be turned off by setting set::check-target-nick-bans to 'no'.
- Removed useless (unused) WATCH code that was still present in the core.
- Made it so coadmins can use /ADCHAT (makes sense, since they already *received*
adchats). Reported by RandomNumber (#0002557).
- Fixed serious flood of notices to opers if link::options::dnscache was present.
Reported by firstof9.
- Added proper "not enough parameters" message for /SETNAME and cleaned up some whitespace
in the function, reported by Robby22 (#0002696).
- Fixed set::static-part set to 'no' not working properly. Reported by Robby22 (#0002698).
- Fixed crash in new resolver, reported by firstof9.
- [CVS Only] Refixed name<->ip mapping check in new resolver, reported by Darko.
- Reverting "Changed the way we build most of the .so's" feature, this caused m_*.so
to be build incorrectly. So now back at normal compile speed :p.
- Added option to apply spamfilters to aliases as well (such as /MS, etc). To do so,
you have to put 'spamfilter yes;' in every alias block you want to get filtered.
This is so you can have for example /MS filtered (due to heavy spam), while keeping
/NS and /CS unfiltered. Reported by Homer (#0002496).
- The memoserv aliases (/MS and /MEMOSERV) now have spamfiltering enabled by default.
- Made the "strict aliasing"-warning-disabler use $CC instead of gcc.
- Made ./Config better react to errors (no longer print a "everything is a big success"
kind of message when in fact everything went wrong).
- Made ./Config (configure) exit on openssl or zlib not found errors, instead of
silently continueing and then causing trouble later on. Also now printing _a bit_
more helpful error message.
- Made the link::options::quarantine actually do something... People that get global
oper privileges on quarantined servers will be instantly killed. Bit ugly perhaps, but
then it actually does what it should (prevent opers on quarantine from getting GLOBAL
oper privileges). This "fixes" #2510, #2163 and #1968.
- Fixes for an amd64 crash problem, reported by Peter Laur (OpenBSD.se).
- Redid some net synching code to make it more efficient (#2716).
- Fixed spamfilter crash problem: the action 'viruschan' is now no longer incompatible
with target 'user'. Reported by Monk (#0002570).
- Fixed invalid servername in quarantine kill, reported by pinstrate (#0002743).
- Fixed bug in chinese-* charset implementation that would cause crashes, reported
and patch supplied by Xuefer (#0002744).
- Added new charsys languages: belarussian-w1251 and ukrainian-w1251. Patch provided
by Bock (#0002724).
- Fixed memory leak in new resolver.
- Made the charsys mismatch during linking a warning instead of an error (temp. fix,
until a good solution is implemented without false positives).
- Crashbug fix for above
- Fixed some more memleaks, thanks to valgrind.
- Updated the list of donators.
- Fixed (well, workaround) win32 /RESTART bug that caused it to popup a window instead
of actually restarting the server properly (#0002734).
- If you now use /(G)ZLINE usermask@something instead of /(G)ZLINE *@something you get
an error, since specifying usermask should not be done and is useless, since a (G)ZLINE
takes place BEFORE ident lookups.
- Did the same for /(G)ZLINE *@hostmask (should be *@ipmask), this already was a warning
in 3.2.3, and is an error now in 3.2.4.
- Little /STATS v tweak: should display 'v' in output, not 'V'. Reported by Robby22 (#2700).
- Fixed complex command aliases not working properly, patch from Nazzy (#2722).
- Made it so banned users cannot change the topic, suggested by aquanight and Stealth (#2233).
- Made the "max bans per channel" setting dynamic. This can be changed by setting
set::maxbans in the configfile, note that you probably also want to enlarge set::maxbanlength
as well (see docs) or else you will hit that limit first.
- Changed the default maxbanlength from 1K to 2K, which means people can set more bans because
in pracitce the 60 (maxbans) limit was never met because the maxbanlimit was set so low.
- Empty (but existing) include files no longer cause an error. Reported by w00t (#0002460).
- Nick Character System: Silently not advertising danish if using latin1, circumventing link
problems if using latin1.
- Removed small comment from docs, which no longer applies (sorry translators ;p).
- Updated /CREDITS (forums/mainsite hosting and update of current active supporters).
- Updated makefile.win32: apparently libcurl.dll is now libcurl_imp.dll (import library)
- Updated unrealinst.iss: made it easier for me to have 2 curl versions, this is so we can
ship the SSL version of unreal with a curl that supports SSL (https, etc).
- Preperations for pre-1 (version change, etc)
- Updated wircd.def (for developers).
- Added doc/help.ru.conf, translated by Slyder.
** internal 3.2.4-pre1 release **
- set::maxbans / set::maxbanlength were reported as duplicates when they were not, reported
by Jason and trystanscott (#0002753).
- Made it so bans on normal users will prevent them from speaking with +mu, reported by Nazzy.
- Made set::maxbanlength also count the "to be set" ban in, otherwise you could exceed the
limit by (max) NICKLEN+USERNAME+HOSTNAME+2, reported by Trocotronic (#0002762).
- Switched over to an older match() routine based on hybrid, this one is a bit less optimized
but is actually understandable and has less bugs. This fixes +b ~c:#c\*t not properly
matching #c*t, reported by Jason (#0002752). Initial results look good, but this needs
some good testing ;).
- Removed some old config.h stuff + clarified some text, reported by Jason (#2765, #2766).
** internal 3.2.4-pre2 release **
- Made it so a set::maxbanlength and/or set::maxbans of 0 denies all bans properly, and
fixes the first-ban-can-be-as-long-as-you-want bug, both reported by Trocotronic (#2762).
- Fixed SVS2SNO not always notifying the user of the snomask change, reported by decoder
(#0002767).
- Curl users using https/ftps/etc: UnrealIRCd now ships with a 'curl-ca-bundle.crt' which
contains the (root) certificates of most major Certificate Authorities. It is basically
the default curl ca-bundle.crt plus cacert's certificates.
The 'curl-ca-bundle.crt' will be copied to the installation dir if needed.
It will from now on be used by Unreal for all remote includes (curl) related certificates.
If you want to use https but don't want to buy a certificate, we suggest you to apply for
a free certificate at CACert (www.CACert.org). Or, alternatively, add your own certificate
(PEM encoded) to curl-ca-bundle.crt, see 'SSLCERTS' in the curl package for more info.
** public 3.2.4-rc1 release **
- Fixed(?) bug due to match() rewrite: we now use our old rules with escaping again, due to
the switchover we were accidently using different ones which caused funny kill messages
like "You were killed by a.b.c (a!a.b.c (SOMENICK[N\A](?) <- d.e.f))." This also broke
some bans in pre2/rc1. Bug reported by HERZ (#0002772).
- Fixed localhost crash (if no dns record for 127.0.0.1), reported by Trocotronic (#2773).
** public 3.2.4-rc2 release **
- Sometimes if an oper was connected trough SSL and had the junk snomask (+s +j) set it
would cause a crash. Reported by chasingsol (#0002777).
- Updated help.ru.conf (corrections by CS-Help / Bock)
- Updated example.bg.conf (by Peace)
- Added Dutch unreal32docs.nl.html, translated/maintained by Mark.
- Redid glob matching. Escaping is now ripped out for normal bans (as it should be), this
means no longer weird issues with +b *\* etc not banning nicks with \ in it.
ExtBan ~c/~r get special treatment and will use our match_esc [match with escaping]
routine, that way you can ban channels such as "#f*ck" via "+b ~c:#f\*ck".
Fix triggered by bugreport of vonitsanet (#0002782).
** public 3.2.4-rc3 release **
- No changes (except version number)
** 3.2.4 release **
- Fixed amd64 problem regarding /*LINE always saying 'The time you specified is out of range',
reported and test shell provided by Tauop.
- Updated example.bg.conf, the one shipped with 3.2.4 had several errors.
- The '?' wildcard was completely broken in 3.2.4, reported by tabrisnet (#0002797).
- Added unreal32docs.ru.html, translated by Bock.
- Version number NOT changed.
** Fixed 3.2.4 release **
- Updated autoconf/configure.in to make newer autoconf's work (developers only), reported
and patch provided by Xuefer (#0002798). Also rebuilt ./configure from configure.in with
autoconf 2.59 from my own machine.
- Updated autoconf/configure.in again (does not produce different ./configure output)
- When set::options-show-connect-notice was enabled the "*** Looking up your hostname..."
message was not being shown (all others were). Reported by fbi (#0002820).
- Updated win32 compiling instructions; mention the free MS stuff that can be used to compile
UnrealIRCd (untested though).
- Added CGI:IRC host spoofing support. This means you can mark specific CGI:IRC gateways as
"trusted" and the IRCd will show the users' _real_ host/ip everywhere on IRC, instead of the
host/ip of the CGI:IRC-gateway.
To do so you must set 'realhost_as_password' to 1 in your cgiirc.conf. And add the
CGI:IRC gateway(s) you fully trust to set::cgiirc::hosts.
- Fixed win32 compile problem due to CGI:IRC support, reported by therock247uk (#0002821).
- Redid whole CGI:IRC support. Configuration is now moved to cgiirc { } blocks.
We now support the webirc ('webirc_password' in CGI:IRC) method, which is kinda superior
to the older method ('realhost_as_password').
See the Unreal documentation (section '4.36 - Cgiirc Block') for details on how to configure.
- Changed quoting color in unreal32docs.. looks better now IMO (only English docs updated).
- Fixed *BSD compile problem caused by changes of above, reported by 3rror (#0002823).
- Added error message if c-ares failed to initialize, might help in case something is buggy
(either with Unreal or the OS/environment).
- Fixed (serious) bug in CGI:IRC code, IP's were often not right, reported by 3rror (#2824).
- Fixed bug in currently unused code, reported by DeadNotBuried (#0002835).
- Modulized NAMES command (can now be upgraded on the fly, if ever needed).
- Added NAMESX support, seeing both mIRC (6.17) and XChat support this. What this does is
send all rights of all users on the channel in the NAMES reply (eg: @+Syzop if the user is +ov)
instead of only the highest one (@Syzop in previous example). We only do so if the client
explicitly requested this via a NAMESX in a PROTOCTL message (eg: 'PROTOCTL NAMESX').
Note that there is a glitch: since most clients only send the PROTOCTL NAMESX after they
see NAMESX listed in the 005 announce message this has the effect that if there are
set::auto-join channels present (where users are automatically joined to by the server) the
extended NAMES reply will not be sent for those channels, because from the IRC server' point
of view the join happened before the PROTOCTL and hence it does not know the client wanted
NAMESX at that point (the result is not catastrophic: the old-style NAMES is sent for those
channels). Anyway, for all non-autojoin channels this works great. So still worth adding IMO.
Originally suggested in #0000606.
Side note: this does not mean we dropped the idea of (also) having a challenge-response
system for good ;).
- Updated win32 makefile due to m_names modulization, reported by Trocotronic (#0002838).
- Actually committed src/modules/m_names.c... This tends to help with the compiling process.
- Fixed possible netsplit problem (#0002790).
- Partially redid m_message, moved some stuff to a subroutine, etc to avoid duplicate code
- Rephrased/editted part of example.conf and unreal32docs to make it a littttttle bit easier
for beginners / try to mention the FAQ a bit more explicitly.
- CGI:IRC: gzlines, zlines, throttling, and unknown connect floods are now all checked for
clients connecting trough a CGI:IRC gateway that is in cgiirc { }. This might also fix a bug
where (g)zlines were not applied to CGI:IRC clients, reported by devil (#0002850).
- Changed default PREFIX_AQ behavior to ON instead of OFF. Since basically all major IRC
clients support it now (mIRC, xchat, epic, eggdrop, Klient, PJIRC, irssi, CGI:IRC, etc).
It has always been weird that win32 had it ON by default and *NIX OFF, anyway.
Naturally this change will be mentioned clearly in next release notes.
- Fixed (unimportant) DNS resolver problem if using some LAN domains with digits at end,
reported by Bock (#0002843).
- Added minidump support for crashes to aid debugging a bit.
- Added chained SSL certificates support, patch provided by justdave (#0002848).
- Local opers may now use /TRACE (local only), suggested by GSF19 (#0002365).
- Removed some odd code causing a 'my port is' message to appear in (f.e.) syslog, reported
by rsc (#0002853).
- Fixed CHROOTDIR compilation problem, reported by toshio (#0002854).
- Improved CHROOTDIR documentation in include/config.h
- Added error if CHROOTDIR is defined but IRC_UID isn't (in include/config.h).
- Hide stats request if requested by an U-lined client. Suggested by vonitsanet (#0002865).
- Made it so if the channel is +m but -t, you need at least voice (+v) to change the topic.
Reported by aquanight (#0002233).
- Made the windows installer better compress things (SolidCompression=true), suggested
by Trocotronic (#0002877).
- Added support for URL redirections in curl (if version >=7.15.1), suggested by Trocotronic
(#0002879).
- Made doc/compiling_win32.txt a bit more ugly (mention that only vstudio 7.x actually works
at this moment).
- c-ares (currently, a forked off version) enhancements:
- '/quote dns i' now shows the nameserver settings (which is taken from /etc/resolv.conf
on *NIX, and from the registry on Windows)
- We no longer depend on a C++ compiler (was useless c-ares dependency caused by libtool)
- '/REHASH -dns' now rereads the resolver data from resolv.conf/registry, no IRCd restart
needed anymore. It's currently kinda experimental however, but I *think* it will work ok.
Unfortunately the above features required some ugly hacks if curl was enabled, so if you
use curl (Remote includes), feel free to test on your OS (Linux, but especially FreeBSD
and the other *NIXes) to see if things still compile (make clean; ./Config && make).
- Made the IRCd calculate the cloaked host only once upon connect, and store (cache) it.
- When checking if a user is banned, we always check the cloakhost too. Previously we could
not do this if the user had a /VHOST (=a minority of the cases, but still...). In short,
this is some extra protection to combat ban evasion.
- Performance of is_banned() *slightly* improved (just 1-2 usec, but 7 usec if no bans).
- [Module coders] For extban routines, we now offer a routine extban_is_banned_helper(buf)
which can be used instead of the ban_realhost/etc static chars stuff, see
extban_modeq_is_banned for a (real-life) example of how this is used.
- [Services coders!] Added PROTOCTL CLK (requires NICKv2) which adds an extra field in the
NICK command (when a user connects) right before the infofield (gecos).
The added field contains the cloaked host, that is: the masked host if +x would have been
set. This field is ALWAYS sent, regardless of whether the user is actually +x or not.
Services can then store this field in memory, to know the host of the user if the user
is set +x (+x-t). This is a (better) alternative to PROTOCTL VHP, with no race conditions,
and avoids some other VHP problems.
VHP will stay supported though... so it's not mandatory to switch over.
- Fixed set::maxdccallow setting to <=0 still allowing one entry to be set, reported by
RSCruiser (#0002883).
- Fixed Microsoft Visual Studio 2005 (8.x) unable to compile, and, after fixing that, causing
a lot of crashes. Both are now fixed. Reported by Zell, Yamake, and others (#2875, #2704).
Fix provided by Xuefer. This also gets rid of some annoying and useless compile warnings
as well. Also thanks to Zell for his help.
- Fixed null pointer config parser crash, reported by alkalinex (#0002894).
- Added compiler version checking to "module binary incompatability"-check. This should fix
some more odd problems from people (eg: people switching from GCC 3.x to 4.x and wondering
why they are crashing or getting other errors).
- Module coders: For cloaking, added a new callback type CALLBACKTYPE_CLOAK_EX (which is an
enhanced version of CALLBACKTYPE_CLOAK). This passes 'aClient *sptr, char *host' instead
of only 'char *host' to the cloaking module, which can be useful if you need to cloak on
something other than IP/host. Suggested by fez (#0002275).
Module may still provide only CALLBACKTYPE_CLOAK though, in fact this is what the official
cloaking module does. So no updating of cloaking modules needed.
If you do write a module with the new *_EX callback, you only need the *_EX one and not
the CALLBACKTYPE_CLOAK as well (though it's currently np if both are present).
A side-effect of this "extra cloaking" callback is that we needed to change make_virthost()
which now has an extra parameter in front, and another side-effect is that calling the
CALLBACKTYPE_CLOAK may not work since only *_EX might be available. To my knowledge there
are very few modules (only 1 I know) that will have a problem due to this, so sounds like
an affordable tradeoff.
- Updated sendnotice() so it sends a proper notice if the user is in pre-connect stage.
- Fixed bug with chinese-* charsets not getting detected properly by config parser.
Reported and patch provided by Xuefer (#0002891).
- Made it so me::numeric can be changed (when not linked to any servers) so no server restart
is needed anymore (#0002896).
- set::ssl::egd does not require a parameter per-se (bug caused few days ago), reported
by Trocotronic (#0002899).
- (multiple?) IPv6 listen blocks could cause a crash in config parser. Reported by Robby22
(#0002868).
- Added error checking to (main) setuid/setgid calls.
- Fixed implicit declaration compiler warning if compiling for ipv6.
- Fixed some small memory leak on rehash.
- Removed spamfilter-oversized-checking when trying to REMOVE one.. duh.. reported by satmd
(#00029160).
- Allow *lining of literalident@* such as clones@* (but not *clones@*), this is also as
far as we want to go with regards to relaxing "too broad" checking... Just continue to use
services AKILL for (other) "too broad cases", as many people (correctly) do. Change
suggested by salama (#0002911).
- Made empty command aliases work (no more "no text to send" error) if the alias finds it ok,
which basically means if it allows .*. If you want to require a parameter, use .+ (or
anything other in regex that requires at least one character). Suggested and patch provided
by Nazzy (#0002722).
- Fixed oper count bug which happened on /mode, this was our fault (can't blame services in
this case ;p). Reported by KnAseN and many others (#0002581).
There might still be other operator count bugs, but these are triggered by a different bug
and may or may not be caused by services.
- Added MINIMAL time synchronization support. This is enabled by default and will try to
synchronize the IRCd clock (TSOffset) with a few good time servers. It currently only does
this on-boot, but it will hopefully help a lot of people with most of their time differences.
I still keep recommending anyone who can to run proper time-synchronization software such as
ntpd/ntpdate on their servers.
To disable time synchronization (eg: because you are already running ntp), you can simply
set set::timesynch::enabled to no.
The boot timeout for the timeserver response (=causes boot delay) can be configured via
set::timesynch::timeout and is set to 3 seconds by default (range is 1s-5s), there should
be no reason to change this.
The time server can be configured by setting set::timesynch::server, the default is to
use 3 time servers on 3 continents (US, EU, AU) which should be sufficient for anyone but
if you got a good one near you you can use that one instead.
The time protocol we use is (S)NTP v4.
- Fixed some compile warnings for Windows
- Updated windows compile instructions again.
- Updated release notes
- Added 'real' aliases, this are aliases that map to real commands, so you can for example
map the command '/GLINEBOT <x>' to 'GLINE <x> 2d Bots are not allowed on this server, blabla'.
See the documentation on the alias block for more information. doc/example.conf contains an
example as well (search for "glinebot").
- Modulized: badwords system (src/badwords.c is now gone) and StripColors/StripControlCodes
to m_message, multiple netsynch routines to m_server, send_list to m_list, a certain mode
routine to m_svsmode, all /MSG IRC.. webtv stuff to src/modules/webtv.c which is compiled
with m_message.
This means another ~1500 lines of code are now in modules (and thus can be upgraded on
the fly), which brings the total of modulized lines at 32K.
- Fixed compilation error on FreeBSD and others caused by timesynch, reported by tigra
(#0002921).
- Fixed win32 compile problem cause by timesynch.
- Updated release notes: more modulization and real command alias support.
- Fixed crash in /STATS Z (possibly rare), reported by yasinbey (#0002929).
- Win32 makefile/installer updates for new curl/ssl
- Updated versions everywhere, bumped protocol to 2308
** 3.2.5-rc1 release **
- Added doc/example.ru.conf, translated by Bock.
- Deal with unsupported regexes added by remote servers (possible crash otherwise)
- Fixed crash problem on win32 if TKL times were <0. Obviously it's hard to protect from such
invalid server traffic, but figured in this case it might be a good idea since *NIX does
not crash.
- Made a note about possessive quantifiers, they are scary :P.
- Made the "voice needed when channel is +m but -t" actually work, reported by Trystan and
Ron2K (#0002940).
- #undef STRIPBADWORDS did not work, reported by penna (#0002944).
- Made the resolver no longer check /etc/hosts, since that's how it used to be and should be.
Saves some useless file reads.
- Fixed compile (well, configure) problem on FreeBSD if compiling with remote includes
enabled. Reported by psadi (#0002941).
- Added translated Turkish docs (doc/unreal32docs.tk.html), translated by tt` and Timaeus.
- Fixed problem with IRCd using old link block settings if using a low connfreq, this made it
for example near-impossible to remove autoconnect for such a server. Reported by mixx941
(#0002836).
- Fixed problem if c-ares library is already installed system-wide, reported by Trystan.
- Updated release notes a bit (will be updated more later): backrefs (\1) in regexes are
kinda scary, or at least at the moment.
- Removed PATCH5 from module version incompatibility system, so it can be used if we ever
need to update stuff and not enforce modules to recompile.. Might be useful one day ;p
- Updated list of donators
** 3.2.5-rc2 release **
- Updated release notes, bleh.. I forgot :P
- Got rid of qline notice that could happen if using services holds (semi-race condition),
reported and bugfix provided by tabrisnet (#0002950).
- Made opers with can_override able to change the topic again if not chanop and banned/+m-t,
reported by vonitsanet (#0002952).
- Disable /RESTART if running chrooted since that won't work anyway, reported by kayelem
(#0002956).
- On certain (newer?) FreeBSD's you get "make: Permission denied" after ./Config, but when
you do 'cd ..' and then 'cd -' again, make works just fine. This is going to be the most
stupid workaround in history... Reported by vonitsanet and others (#0002926).
** 3.2.5-rc3 release **
- Updated doc/technical/005.txt
- Mass version change (no code changes)
** 3.2.5 release **
- c-ares resolver: upgrade from 1.3.0 to 1.3.1. This mainly fixes compile problems,
including one reported by frigola on an old Sun Cobalt RAQ3.
It will probably also fix an issue with the just released curl 7.15.4, if compiling
with remote includes.
TODO: Update win32 (not urgent)
- Added HOOKTYPE_SILENCED: this is called whenever a message did not get delivered to a user
because the user was on the silence list.
- Added OpenBSD 3.9 to the supported OS list.
- Made it so undefining SHOW_SECRET (not the default) properly hides +s channels from ircops
(except netadmins), as it should. Reported and patch supplied by Jason (#0002965).
- Fixed tld::options:: not working properly, reported by DelGurth (#0003003).
- Fixed problem with oper as chanadmin kicking himself causing an operoverride notice,
reported by Bock (as part of #2889).
- Fixed desynch problem with +Q, reported by tabrisnet (#0002992).
- Updated doc/coding-guidelines
- Added bugs.* url to /info, was still showing some email address.
- Fixed forgotten operoverride logmessage (kick if chan +Q), reported in #2889.
- Fixed operoverride message if oper is +h and -h's himself, reported by Bock (#2889).
- Fixed SVSMODE -b [user] not always removing all bans (specificly, bans on the cloaked
host when you have a vhost), a code cleanup was also done. Based on patch from tabrisnet.
Reported by Rob (#0002981).
- MARK: 3.3* was forked off from here
- Removed server numeric output from /MAP for normal users (still visible to ircops).
- Renamed unreal32docs.tk.html to unreal32docs.tr.html
- Module coders: Added HOOKTYPE_POST_SERVER_CONNECT (1 param: cptr) which is called when
a server connects, just like HOOTYPE_SERVER_CONNECT but this is actually called *after*
all clients and channels are synched. Obviously needed for some modules which must synch
data that refers to clients/channels that would otherwise not exist yet on the other side.
- The server SSL certificate and private key can now be reloaded without requiring a server
restart, simply use: /REHASH -ssl
- Small compile fix for above
- Fixed /SAJOIN able to join insecure users to +z channels, reported by phedny (#0002601).
- Fixed SSL crash problem due to previous SSL change.
- Fixed some bugs in webtv code that could have caused trouble in the future (off by one),
reported by Ilja van Sprundel.
- Module coders: Fixed CALLBACKTYPE_CLOAK_EX, it was not working properly at all.
- Fixed bug in MODE #channel showing extended channel mode parameters when not in #channel.
- Made 'MODE #channel b' and friends show bans to ircops even when not in channel.
- Fix for channel mode +f: It incorrectly didn't eat a paramter on unset (ouch!), even
though it always acted like it did in the MODE line sent to the channel. This bug caused
desynchs in some cases. Bug reported by Korfio (#0003048).
- Fixes to SVSNICK: case-change no longer causes a collision, don't return the value from
exit_client (which would be FLUSH_BUFFER), fix QUIT not being sent back on collision.
- Fix for above so it doesn't -r the client.
- Fixed small memory leak in resolver (~40 bytes when connecting to a server)
- Made Unreal use the original name in case of a CNAME, instead of the forwarded name,
reported by jerrcsnet (#0003054).
- The "looking up your hostname" message was always sent, regardless of show-connect-info.
- Kick non-SSL users when the channel turns out to be +z during netmerge, reported by
Ron2K (#0002942).
- Windows 2003: Fixed UnrealIRCd unable to boot if no DNS server is configured, we now
fallback to set::dns::nameserver in such a case. Thanks to Romeo (reporter, #0002802)
and Bock for tracing this down.
- Fixed cloak cutoff problem with long hosts.
- Added doc/help.tr.conf (Turkish), translated by Diablo.
- Added doc/example.tr.conf (Turkish), translated by ironic.
- Fixed zlib version check: 1.x is compatible with all 1.*, etc. (#0002966).
- Fixed a couple of add_Command/del_Command lines in m_chgname and m_helpop trying to
add the same token twice. Didn't cause any trouble, normally, though...
- Updated ukrainian-w1251 and belarussian-w1251 charsets: some characters were previously
included that shouldn't. Reported by avb (#0003102), patch supplied by Bock.
- Made it so that when 'java' is enabled for a listen block, then the 2nd parameter to
NICK is not seen as a password on this port. Patch from afolentes (#0003097).
- Fixed some unitialized pointer things for win32 w/ssl on keyprompt, no idea if it
helps, though. Would appreciate it if another code looks into this. -- Syzop
- Fixed SVSO - not removing coadmin (+C). Reported by Muisje (#0003077).
- Fixed deny link {} blocks being ignored by autoconnect. Reported by a couple people,
also see #0003084.
- Fixed m_names.so not being build (a problem for people not using commands.so),
reported by aegis (#0003085).
- Using SVSMODE (or SVS2MODE) to set -x will now actually remove the vhost from memory,
instead of letting it magically reappear whenever +x is set. This means services can
now properly "unvhost" a user by sending a "SVSMODE User -x+x" (then any existing vhost
will be removed and user will have a cloaked host). Reported by avenger and others
(#0002933).
- [internal] Made a spamfilter_build_user_string function that will build the spamfilter
user target string (nick!user@host:info), insteaf of doing it at like 5 places.
- Spamfilter target 'u' (user): the host field (nick!user@HOST:realname) is now escaped
with brackets if it's an IPv6 address, eg: blah!blah@[1:2:3:4:5:6:7:8]:hello, reported
by aquanight and others (#0003010).
- Win32: SSL private key prompt should now no longer crash. Patch provided by Alexey
Markevich (#0002866).
- Win32: we now no longer crash if no access to write to service.log, suggested and
patch by Xuefer (#0002886).
- Services timestamps are now always treated as an unsigned long (0..2^32-1), instead
of accidently as signed long during netsynchs. This bug caused issues with values
larger than 2147483647. Reported by avenger (#0002980).
- If the 'crypt' algorithm is used, then passwords were/are truncated to 8 characters.
We now print a warning when this happens (both on the IRC command and command-line).
Suggested by JasonTik (#0002953).
- Win32: Fixed a few compiler warnings, suggested by Zell (#0002890).
- Moved a couple isatty() calls to DEBUGMODE (#0002945).
- Made win32 compile again, reported by Bock (#0003106).
- Moved failed oper snotices to snomask +o, and are sent out to all servers. Also now
shows the uid attempted (like [FAILEDAUTH] does) for incorrect host or maxlogin.
- Fixed set::allowed-nickchars causing a segfault for some unknown charsets, reported
by avb (#0003069).
- Cutoff webtv whois at MAXTARGETS (#0003004).
- loadmodule now reports proper errors when the actual file can't be found, instead of
blaming it on the temp file, reported in #3015.
- Fixed 'SVSMOTD !' not deleting the services motd in memory, reported by avb (#0003110).
- Snomask N: Don't show nickchanges for U-lines, reported by seneces (#0002636).
- Fixed set::dns::bind-ip directive seen as duplicate, reported by aegis (#0003074).
- set::dns::* block is now no longer mandatory. All info has always been read from
/etc/resolv.conf (*NIX) or the registry (Win32), and the set::dns block is ignored
(except for set::dns::bind-ip, but that's a special case). Suggested by many including
djGrrr to make things slightly more logical (#0003019).
- As a consequence of the above, set::dns blocks were removed from doc/example*conf.
- Added two more characters to Catalan charset, reported by rmh (#0002995).
- Added set::pingpong-warning [yes|no] which decides whether to send the "** If you are
having problems connecting due to ping timeouts, please type /quote pong .." message
to each client when NOSPOOF is enabled (usually on Win32). The default is NO.
Previously this message was always sent if NOSPOOF was on, which often caused
confusion among users. The message was intended for non-confirming clients, but these
should be fixed by now, and those that were not fixed (self-made bots/etc) did often
not understand the message anyway. Anyway, you can still turn it on ;). (#2680).
- /INVITE's from people on the silence list are now (silently) ignored, suggested by
White_Magic (#0002478).
- Fixed a couple of typos and other one-line-text fixes at various places: reported by
aegis (#3081), DanPMK (#2818), tabrisnet (#2974, #2970, #2467), penna (#2721),
Brad (#2488), vonitsanet (#2467).
- Made OpenSSL version dynamic, reported by buildsmart (#0002975).
- Rejecting fake +z modes in conf, reported by rve (#0002532).
- Changed some minor Makefile stuff
- Fixed belarussian-w1251 charset.. accidently copied a "'" which caused an internal
error, reported by Bock (#0003114).
- Added information about extbans to help.conf (/HELPOP ?EXTBANS). Patch from Bock
(#0003113).
- Made SAPART work for mulitple channels, just like SAJOIN. Reported by Snake and
SeigHart, patch provided by Bock (#0003064). This also fixes SAPART now being
announced to all opers globally, just like SAJOIN.
- Finally fixed /RESTART issue on windows for good, should now always restart correctly.
Patch provided by BuHHunyx and Bock (#0002734).
- Fixed charsys config error message sometimes saying stuff about set::accept-language,
which should be set::allowed-nickchars (the former does not exist). Reported and
patch provided by avb (#0003122).
- Fixed compile bug on Solaris due to missing INADDR_NONE, fix provided by Schak
(#0003125).
- Fixed bug where omitting class::connfreq would result in a huge connection attempt
flood when autoconnect was enabled. We now set class::connfreq to 60 if it's not
specified. Reported by Milliways (#0003018).
- Improved description of link::hub/leaf/leafdepth in unreal32docs.html reported by Bugz
(#2623), also fixed typo (leafdepth, not leaf-depth), reported by monas (#3083).
- c-ares resolver: upgrade to 1.3.2.
- upgraded windows c-ares (areslib.lib) as well.
- fix for above
- Added release notes for 3.2.6
- Fixed help.conf typo
** 3.2.6-rc1 release **
- Get rid of some old stuff in release notes
- Added donators since 3.2.5
- Setting set::pingpong-warning didn't work, reported by vonitsanet, patch supplied by
avb (#0003131).
- Don't show silence list to others
- Improved detection of bad set::modes-on-oper and oper::modes, now rejecting things like
'o', 'z', and more.
- Fix from above fixes an /OPER announce problem reported by Bock (#0003135).
- Fixed SSL bug where an outgoing connect (either autoconnect, or /connect), would not
show any error message when it failed. Error information has also been slightly
improved. Reported by vonitsanet (#0003138).
- Updated SVSNLINE syntax in help.conf (the remove-syntax).
- Post-3.2.5 CVS-only bug: Fixed spamfilter on user target not working properly when
changing nicks (was still trying to match on the old nick), reported by vonitsanet
(#0003143).
** 3.2.6-rc2 release **
- Fixed possible crash with using quarantine, reported by Sephiroth (#0003151).
- Showing even more SSL server errors now, hopefully all of them, also changed the
error notice a bit so it's much more like non-SSL server link errors. Reported by
vonitsanet (#0003150).
** 3.2.6-rc3 release **
- Updated release notes, mass-change of version number, no code changes.
** 3.2.6 release **
- Fixed bug where SVSO was unable to give various operflags such as q, d, X, reported
by prodigy2k7 (#0003203).
- /WHOIS now shows the ident of local users - if ident enabled and they had an ident -
instead of always "*" in the 'is connecting from' line. Suggested and patch provided
by djGrrr (#0002888).
- Added ability to enable "no fake lag" for a user through through services via the
new commands SVSNOLAG/SVS2NOLAG (syntax: SVSNOLAG [+|-] NickName). Obviously, care
should be taken when giving such access to a user since he/she will be able to flood
at full speed and could possibly take down the entire IRCd (well, everyone on it).
Suggested by avb, coded by djGrrr.
- Fixed SDESC not messaging +s +s clients on local server when it is used, reported by
dre, patch provided by djGrrr.
- Fixed SAPART causing a flood of notices from all servers, fun. Reported and patch
provided by djGrrr.
- Changed password length from 32 to 48, is allocated dynamically anyway.
- Fixed file descriptor leakage on rehash. This resulted in [number of modules loaded]
file descriptors being leaked upon every /REHASH.
So if you, for example, had 3 modules loaded and rehashed 30 times, it would cause
the ircd to consume 90 useless file descriptors (which often means 90 less file
descriptors being available to clients).
- Fixed #0003171 reported by danieldg (typo) doc/technical
- #0003146 reported by vonitsanet, regarding Modes O,S (etc) not rejected for modes-on-connect
fixed by djGrrr
- #0002932 reported by therock247uk, patched by WolfSage, regarding Local
opers can /chghost /chgident /chgname on someone thats on another server on
the network.
- #0003212 patched by Grunt, regarding /userip <someone_else> seemingly
shows your own (cloaked) IP.
- #0002846 reported by alex323, patched by WolfSage, regarding local ircop cannot issue CLOSE command
- #3272 patched by w00t, regarding remove restrictions on NOTICE/PRIVMSG $* for opers.
- Fixed SVSKILL sending an illegal (wrong direction) QUIT right after, #0003307
- xx reported and fixed by WolfSage (addmotd, addomotd in help.conf)
- #0003159 reported by aegis and Bock, regarding typos in documentation
- #0002560 reported and patched by w00t, regarding a typo in /SAMODE
- #0002844 reported by RandomNumber: make spamfilter actions case insensitive
- help.conf updates... #0002420 reported by KnuX fixed by WolfSage
- #0003264 reported by Robby22 regarding help.conf typo
- Updated c-ares to version 1.4.0
- Updated tre to version 0.7.5
- help.conf updates. Missing some ;'s.
- #0003027 reported by Trocotronic, regarding doing -l <para> on SJOIN,
and not -l as supposed. This may have caused desyncs
- #0003368 patched by Stealth giving users access to do /module on remote
servers
- #0002533 reported by Dodge_Ram, patched by WolfSage, regarding notices
not being sent when /*line and /shun are used to request stats
- Now using #0003028, with more intelligent accept() handling. The IRCd
will now attempt to accept() up to LISTEN_SIZE (possibly saving CPU
through this under load, and speeding up connection).
- IRCd now also sets the &me fd as being non blocking (wasn't before, that
was odd..)
- #0003139 reported by vonitsanet, improving error messages on /connect
when trying to /connect to a server with wildcards (* and ?) in the link
block. We also raise an error if link::options::autoconnect is used
together with wildcards in hostname.
- #0002040 reported by aquanight, removing dependancy on +l for +L. This
will be backwards compatible as well, SJOIN doesn't care (TM) and mode
doesn't either in case of a server sending it. So this will be just a
client protocol modification.
- Fixed SVSKILL sending an illegal QUIT
- #0003216 patched by djGrrr, regarding when you run ./Config for a second
time after settings are saved in config.settings, the SSLDIR and ZIPLINKSDIR
defaults are basically completely ignored.
- #0002420 reported by KnuX fixed by WolfSage
- #0003147 reported by vonitsanet, fixed by djGrrr regarding making
spamfilters work in case of /setname
- Added oper CIDR
- #0001317 reported by thilo regarding removal of (username) being
appended to topics set by U:Lined servers, patched by WolfSage
- #0003382 reported by stealth regarding nested C-style comments messing
up example.conf parsing
- #0003092 reported by tabrisnet, patched by WolfSage, regarding
documentation says
link::bind-ip is optional, but not specifying it produces an error
- #0003232 reported by vonitsanet patched by djGrr, regarding /map is not
shown u:lined servers to local opers and /links does
- #0003363 patched by adrianp, changing IRC_UID and IRC_GID into
defines IRC_USER, IRC_GROUP which is a string specifiying what user name/
group name that should be changed into, instead of a hardcoded gid/uid.
This should make it easier for packaged binary releases to work (even
though this probably means Debian will take us in, ick .. Can't we pull
a new fight with debian-legal again?)
- #0003244 reported by CuLpA about grammar errors in webtv outputs
- Entering 3.2.7 RC1 phase
- Applied patch to fix some win32 problems reported by Bock, fixed by fez
- #0003405 repoted by Stealth regarding wildcards and autoconnect being an
||
- Fixed irc_uid|gid being defined on win32
- Win32 library updates from Bock
- #0003429 reported by Bock about appearing to accept multiple auth blocks.
- Fixed fixed #003244 fix.
- Applied #0003422 help.conf patches by Bock
- Applied #0002999 patch by Bock, fixing a fd leak.
- Applied #0003144 patch by Bock, fixing win32 install and such
- Applied #0003392 patch by Bock, adding some stuff to help.conf
- Entering 3.2.7 RC2 phase
- Fix, fix #0003421 patch
- Fixed wolfsage eff-up in c-ares.tar.gz, not running make distclean
- Updated /info
- Updated release notes
*** 3.2.7 release ***
- Fix aquanight's email
- #0003351 reported by Mareo regarding m_addmotd.so and m_svslusers.so
not being created
- Fixed bug in SJOIN, possibly causing things like odd bans showing up in
some circumstances. Reported by Hurga, patch provided by fbi.
- Now allowing '1.2.3.4' ips again in IPv6 mode as well (instead of enforcing
'::ffff:1.2.3.4' ips in the conf, they are now auto-converted to that).
Based on patch from tabrisnet.
- Fixed issue where the cgiirc block did not work with IPv6, reported by
djGrrr, fixed by previous change.
- Fixed CHROOTDIR, which was broken in 3.2.7: IRC_USER/IRC_GROUP did not work
properly when CHROOTDIR was in use (#0003454).
- Fixed oper block bug where ip masks in oper::from::userhost did not always
work succesfully (ex: 192.168.* worked, but 192.168.*.* didn't). Issue was
introduced in 3.2.7, reported by tabrisnet (#0003494).
- CGI:IRC + IPv6: Fixed cgiirc block hostname never matching ipv4 cgiirc
gateway properly (..again..), this was previously reported by pv2b.
- CGI:IRC + IPv6: Fixed issue where all cgiirc ipv4 clients were rejected with
the message 'Invalid IP address', reported by stskeeps (#0003311), nate
(#0003533) and others.
- Document CHROOTDIR in unreal32docs, reported by Beastie (#0002446).
- Fixed Mac OS X issue where "access denied" errors were encountered when
trying to read unrealircd.conf. All due to strange chmod() behavior. We now no
longer try to set permissions on Mac OS X. Patch provided by Tibby (#3489).
- Hopefully fixed 'Overflowed unzipbuf increase UNZIP_BUFFER_SIZE' issue,
reported by Monk (#0003453). It should be large enough now. Also changed the
way we deal with this when it happens (if it ever happens again..): we now
close the server connection, instead of trying to continue, because continueing
is too dangerous.
- Remove part reason when user is banned, suggested by vonitsanet (#0003354).
- Fixed set::modes-on-join: could crash or disfunction with certain
parameter mode combinations.
- Minor source cleanup in src/modules/m_map.c, suggested by fez (#0003540).
- Usermode modules now no longer have to be permanent (#3174), this was
simply a bug that was introduced when adding remote includes support years
ago.
- Channelmode modules without parameters (like: +X, but not: +X 1) no longer
have to be permanent. Channelmodes with parameters still have to be PERM
however, and there are currently no plans to change it.
- Fixed bug (in all Unreal versions) with parameter channelmodes, any 3rd
party module which adds an extra parameter chanmode could cause crashes.
- Added set::level-on-join: which level should the user get when (s)he's is
the first to enter a channel. Currently only 'none' and 'op' are supported.
- unreal32docs.html: doubt it will help much but at least this makes it a
little bit more clear (#3548), chatops vs globops.
- ChanMode +S/+c: reverse is now stripped/blocked as well, because it's
similar to color, and is just as annoying (..if not worse).
- So called 'smart' banning is now disabled by default, this means you can
now set a ban on *!*@*h.com and then later add one on *!*@*blah.com without
any trouble. Previously the second one was rejected due to the former
already matching it. To change it back edit the include/config.h setting
SOCALLEDSMARTBANNING.
- Fixed (G)ZLINE check.. it was incorrectly rejecting many IPv6 bans.
Reported by guigui (#0003572).
- Backport from 3.3 away notification from Oct 2006, this is v0, a further
patch will follow soon and the numerics will be changed.
- Ok, finished away notification in WATCH. It now shows the away reasons too.
This new feature (away notify) is announced in 005 (ISUPPORT) as: WATCHOPTS=A
Format is: WATCH A +UserOne +UserTwo
New numerics to cope with away notification in WATCH are:
RPL_NOWISAWAY: to indicate the user is away _when adding_ it to WATCH list
RPL_GONEAWAY: user was not away, but is now
RPL_NOTAWAY: user was away, but is no longer away
RPL_NOWISAWAY: user was away, and still is, but the reason changed
Example:
WATCH A +Target
Request to add user 'Target' to the watch list with away notification
:maintest.test.net 609 MySelf Target ~blih test.testnet 1204309588 :not here atm
Reply to watch add: user is online and away, reason is provided
:maintest.test.net 599 MySelf Target ~blih test.testnet 1204309588 :is no longer away
User is back (no longer away)
:maintest.test.net 598 MySelf Target ~blih test.testnet 1204309722 :lunch
State change: user is now away, reason is provided
:maintest.test.net 597 MySelf Target ~blih test.testnet 1204309738 :shopping, bbl
User is still away, but reason changed.
The syntax for each numeric is:
<nickname> <username> <hostname> <awaysince> :<away reason>
In case of 599 (RPL_NOTAWAY) it is:
<nickname> <username> <hostname> <awaysince> :is no longer away
For the record, this is all based on a draft from codemastr from 2004, which was
implemented in Unreal3.3 (devel branch) in 2006. Today, in 2008 it was updated
with away reason support and backported to Unreal3.2. Because away notification
hasn't been used until now (due to it only being in Unreal3.3) we felt it was
safe to break some numerics.
- Upgraded c-ares to 1.5.1, thanks to aegis for the partial patch (#0003671).
This also fixed a curl compile/run issue, reported by static-x (#0003545).
- Added slow spamfilter detection. For each spamfilter, Unreal will check,
each time it executes, how LONG it takes to execute. When a certain threshold
is reached the IRCd will warn or even remove the spamfilter. This will prevent
a spamfilter (regex) from slowing down the IRCd too much, though it's still not
a guarantee that it will never go to a halt (eg: in case it takes several
minutes to execute a regex or loops forever).
Warning can be configured via set::spamfilter::slowdetect-warn (default:
250 milliseconds) and automatic deletion of spamfilters if it takes too
long is set through set::spamfilter::slowdetect-fatal (default: 500 ms).
NOTE: slow spamfilter detection is currently not available on Windows.
NOTE 2: to disable slow detection you can set the warn and fatal settings
to 0 (zero). OR to really disable all code, remove SPAMFILTER_DETECTSLOW
from include/config.h and recompile.
- Added another Mac OS X hack, such as one that should help against
'error setting max fd's to 9223372036854775807' which prevents the ircd
from booting up. Reported by btcentral and Bock. This hack might not be
totally correct though ;).
- Limit watch status requests to one per time, more will often flood you off
and is stupid/useless. Reported by ash11.
- The OS version output is now taken from uname() at runtime instead of
'uname -a' at compile time. This fixes bug #1438 and #3320 reported by
Mouse and Monk, where because of previous behavior the IRCd sometimes would
not compile in certain environments.
- configure script is now generated by autoconf 2.61 (was: 2.59), hopefully
that won't cause any issues, perhaps it even helps to fix some bugs...
- #0001740 reported by Trocotronic, making the IRCd send ERROR : to all
links with possible reason for RESTART; like /die does it. [Backport, sts]
- Added set::ssl::server-cipher-list, #002368 requested by Beastie
[Backport, sts]
- Added set::ssl::renegotiate-bytes, set::ssl:renegotiate-timeout, #0002971
suggested by tabrisnet. Gets activated when >0. Please set sane values.
[Backport, sts]
- #0002475 reported by aquanight on detecting \'s in module filenames on
win32 and not do ./module for it [Backport]
- #0002172 reported by Stealth, patched by WolfSage, fixing if you have an
admin block, and forget a semicolon on a line, Unreal will proceed to use
the block with no error, but the information will be incorrect/incomplete.
[Backport, WolfSage]
- #0002833 reported and patched by tabrisnet, implementing UHNAMES
[Backport, only slightly modified for speed]
- #0001924 - requested by syzop: Added ./unreal gencloak, which generates
random keys 10 ~ 20 characters in length (*NIX only). [Backport, aquanight]
- #0003313 reported by Stealth, regarding not erroring/warning when me::name
is bigger than HOSTLEN, from now it will error on config read. [Backport, sts]
- /REHASH -all not case sensitive
- Win32 makefile: removed /MAPINFO:LINES, since visual studio 2005 and up
don't support this and will fail to compile UnrealIRCd. This fixes #3680,
reported by therock247uk.
- Upgraded c-ares to 1.6.0 (also now using pkg-config).
If you get a "undefined reference to `clock_gettime'" error, then you
might consider installing 'pkg-config' on your system, and then simply re-run
./Config and make, should fix things.
TODO: testing! testing! i'd like to be sure this c-ares is stable!
- Win32 compile fixes.
- Upgraded c-ares on windows to 1.6.0 as well.
- Win32: build w/manifest. Looks like Unreal@Win32 now actually works again :).
- except ban { } is now also effective against Z:lines. It already protected
when the user was connected, but not once he/she tried to reconnect, this
is now fixed. Reported several times, last by Stealth in #0003377.
- Fix crash if settime/expirytime is out of range in TKL, set by another server.
Should never happen except when using faulty services or when something else
got horrible wrong (like a date which is 40 years ahead). Reported by
Darth Android (#0003738).
- Fix NAMES with UHNAMES support, screwed it up at 'Win32 compile fixes' a
few lines up...
- Fix OOB read caused by UHNAMES support.
- Added some countermeasures against crash-on-boot, #0003725 and #0003653,
reported by Ablom2008 and mist26.
- Win32: rebuild TRE for Vstudio 2008 (and ditch C++ / MSVCP... dependency).
- Added release notes (not finished yet).
- Added set::watch-away-notification which can be set to 'no' to disable
WATCH away notification. The default is 'yes' (=enabled).
- Fixed crash which could happen when rehashing while linking to a server,
this could be #0003689 reported by Monk.
- New HOOKTYPE_LOCAL_NICKPASS: the 2 parameters are: sptr (client) and nsptr
(NickServ client, NULL if not present). You can return 1 (HOOK_DENY) to
make the IRCd not send IDENTIFY to NickServ. Suggested by tabrisnet
(#0003739).
- A notice is now sent when listing spamfilters through /SPAMFILTER just
like /stats f. Bug #0003752 reported by Strawberry_Kittens, similar to
#0002533.
** 3.2.8-rc1 release **
- Added documentation for set::spamfilter::slowdetect-warn,
set::spamfilter::slowdetect-fatal, set::ssl::server-cipher-list,
set::ssl::renegotiate-bytes, set::ssl::renegotiate-timeout,
set::watch-away-notification and ./unreal gencloak. Reported by Bock
(#0003764).
- set::ssl::renegotiate-bytes: fix when specifying a value such as 10m.
- './unreal gencloak' now actually works
- Fix typo in user mode q notice, reported by Strawberry_Kittens and others
(#0003761). Patch provided by Stealth.
- Fix for Mac OS X compile problem (in setpgrp), reported by Bock / Jckf
(#0003767).
- Possible fix for MAC OS X compile problem
- Bump docdate..
- Fixed OperOverride bug: if you are halfop you couldn't -q/-a, reported
by Strawberry_Kittens (#0003758).
- Added note to release notes regarding Suse 10.3 on amd64 causing a crash
on-boot. #0003725, #0003653, #0003791.
- Updated regex documentation in unreal32docs, it had some incorrect
statements regarding wildcards. Reported by james2vegas (#0003800).
- Added some big warnings regarding big timeshifts.
In the IRCd world correct time is very important. This means that time
should be correct when the IRCd is booted, either by running ntpd/ntpdate
on the system or some other synchronization software, or by using the
built-in timesync feature.
Whenever the clock is adjusted for more than a few seconds AFTER the IRCd
has booted, it can lead to dangerous effects ranging from unfair timestamps
for nicks and channels (and hence the possibility to takeover channels),
to even completely stalling the IRCd (negative timeshift) or making it so
nobody can connect anymore due to throttling (positive timeshift).
We now try to 'fix' the worst effects such as the IRCd freeze and
throttling. This does not fix the whole problem, so I've added some big
warnings when the clock is adjusted, including an annoying one every 5
minutes if the clock was set backwards, until the time is OK again
(catches up with the original time).
This fixes #0003230 reported by Stealth, and #0002521 reported by durrie.
- Throttling time is now more accurate, especially with larger time values
such as 3 connections per 60 seconds. Previously that -could- result in
3 per 90 seconds due to timer inaccuracy (which was max <time>*1.5), now
it would be max 65 seconds (max 5s inaccuracy, lower with lower times).
- Smallll fix for time shift protection
** 3.2.8-rc2 release **
- Some text fixes regarding time shift feature
- Fix for compile problem on FreeBSD (and possibly other OS's):
- When pkg-config is present but does not recognize --static, use
default c-ares library options.
- Set default c-ares library options to -lcares on FreeBSD and others.
Set to -lcares -lrt on Linux (previously was -lcares -lrt for all).
Thanks to goldenwolf for the bugreport (#0003803) and providing a test-
shell to trace this issue down.
** 3.2.8-rc2 *NIX downloads replaced **
- 'link xx with SSL option enabled on non-SSL compile' was incorrectly
printed out as a warning, when in fact it's an error (and was treated as
such). Same for ZIP on non-zip compile. Reported by Stealth (#0003833).
- Fixed harmless (but silly) message which happened on every IRCd boot
(time jump message).
- Updated credits (donations)
** 3.2.8 release **
- Fixed (serious) security issue regarding allow::options::noident,
reported by meepmeep (#0003852).
** 3.2.8.1 release **
+12 -8
View File
@@ -84,7 +84,8 @@ ARG="$ARG--enable-dynamic-linking "
ARG="$ARG $EXTRAPARA "
CONF="./configure $ARG"
echo $CONF
$CONF
$CONF || exit 1
cd "$UNREALCWD"
if [ "$CRYPTOIRCD" = "1" ] ; then
if [ ! -f server.req.pem ]; then
export OPENSSLPATH
@@ -277,6 +278,7 @@ done
}
c=""
n=""
UNREALCWD="`pwd`"
NOSPOOF=""
DPATH="`pwd`"
SPATH="`pwd`/src/ircd"
@@ -295,7 +297,7 @@ MAXCONNECTIONS="1024"
INET6=""
REMOTEINC=""
CURLDIR=""
PREFIXAQ=""
PREFIXAQ="1"
SHOWLISTMODES="1"
TOPICNICKISNUH=""
SHUNNOTICES=""
@@ -336,6 +338,7 @@ while [ $# -ge 1 ] ; do
. ./config.settings
fi
RUN_CONFIGURE
cd "$UNREALCWD"
exit 0
elif [ $1 = "-clean" -o $1 = "-C" ] ; then
CLEAN="1"
@@ -527,14 +530,14 @@ while [ -z "$TEST" ] ; do
done
if [ "$CRYPTOIRCD" = "1" ] ; then
TEST=""
TEST="$SSLDIR"
echo ""
echo "If you know the path to OpenSSL on your system, enter it here. If not"
echo "leave this blank"
echo $n "[$TEST] -> $c"
read cc
if [ -z "$cc" ] ; then
SSLDIR=""
SSLDIR="$TEST"
else
SSLDIR=`eval echo $cc` # modified
fi
@@ -599,14 +602,14 @@ while [ -z "$TEST" ] ; do
done
if [ "$ZIPLINKS" = "1" ] ; then
TEST=""
TEST="$ZIPLINKSDIR"
echo ""
echo "If you know the path to zlib on your system, enter it here. If not"
echo "leave this blank"
echo $n "[$TEST] -> $c"
read cc
if [ -z "$cc" ] ; then
ZIPLINKSDIR=""
ZIPLINKSDIR="$TEST"
else
ZIPLINKSDIR=`eval echo $cc` # modified
fi
@@ -670,8 +673,8 @@ while [ -z "$TEST" ] ; do
echo ""
echo "Do you want to enable prefixes for chanadmin and chanowner?"
echo "This will give +a the & prefix and ~ for +q (just like +o is @)"
echo "Supported by the major clients (mIRC, xchat, epic, eggdrop, Klient, PJIRC, etc.)"
echo "with the notable exceptions of irssi, KVIrc and CGI:IRC."
echo "Supported by the major clients (mIRC, xchat, epic, eggdrop, Klient,"
echo "PJIRC, irssi, CGI:IRC, etc.)"
echo "This feature should be enabled/disabled network-wide."
echo $n "[$TEST] -> $c"
read cc
@@ -853,6 +856,7 @@ EXTRAPARA="$EXTRAPARA"
ADVANCED="$ADVANCED"
__EOF__
RUN_CONFIGURE
cd "$UNREALCWD"
cat << __EOF__
_______________________________________________________________________
+6 -2
View File
@@ -38,7 +38,7 @@ IRCDLIBS=@IRCDLIBS@ @TRELIBS@ @CARESLIBS@
CRYPTOLIB=@CRYPTOLIB@
OPENSSLINCLUDES=
XCFLAGS=-I@TREINCDIR@ -I@CARESINCDIR@ @CFLAGS@
XCFLAGS=-I@TREINCDIR@ -I@CARESINCDIR@ @CARESLIBDIR@ @CFLAGS@
#
# use the following on MIPS:
#CFLAGS= -systype bsd43 -DSYSTYPE_BSD43 -I$(INCLUDEDIR)
@@ -131,7 +131,8 @@ MAKEARGS = 'CFLAGS=${CFLAGS}' 'CC=${CC}' 'IRCDLIBS=${IRCDLIBS}' \
'RM=${RM}' 'CP=${CP}' 'TOUCH=${TOUCH}' \
'SHELL=${SHELL}' 'STRTOUL=${STRTOUL}' \
'CRYPTOLIB=${CRYPTOLIB}' \
'CRYPTOINCLUDES=${CRYPTOINCLUDES}' 'URL=${URL}'
'CRYPTOINCLUDES=${CRYPTOINCLUDES}' \
'URL=${URL}'
custommodule:
cd src; ${MAKE} ${MAKEARGS} MODULEFILE=${MODULEFILE} 'EXLIBS=${EXLIBS}' custommodule
@@ -218,6 +219,9 @@ install: all
$(INSTALL) -m 0700 unreal $(IRCDDIR)
$(INSTALL) -m 0700 -d $(IRCDDIR)/modules
$(INSTALL) -m 0700 src/modules/*.so $(IRCDDIR)/modules
-@if [ ! -f "$(IRCDDIR)/curl-ca-bundle.crt" ] ; then \
$(INSTALL) -m 0700 curl-ca-bundle.crt $(IRCDDIR) ; \
fi
pem: src/ssl.cnf
@echo "Generating certificate request .. "
+28 -30
View File
@@ -1,29 +1,30 @@
===============================================
= UnrealIRCd v3.2.3 =
= UnrealIRCd v3.2.8.1 =
===============================================
Was brought to you by:
This release was brought to you by:
The core team:
==============
* Stskeeps <stskeeps@tspre.org>
* codemastr <codemastr@unrealircd.com>
* Syzop <syzop@unrealircd.org>
* Luke <luke@unrealircd.com>
Coders:
=======
* Syzop
Contributors
============
* McSkaf <mcskaf@unrealircd.org>
* Zogg <zogg@unrealircd.org>
* NiQuiL <niquil@unrealircd.org>
* assyrian <assyrian@unrealircd.org>
* nighthawk <nighthawk@unrealircd.com>
* DrBin <drbin@unrealircd.com>
* llthangel <llthangel@unrealircd.org>
* Griever <griever@unrealircd.com>
Documentation:
==============
* CKnight^ <cknight@unrealircd.com>
Contributors:
=============
* aquanight
* WolfSage
* Stealth
* tabrisnet
* Bock
* fbi
RC Testers:
===========
* Bock, Apocalypse, StrawberryKittens, wax, Elemental, and many more
Previous coders:
================
* Stskeeps
* codemastr
* Many more..
Precenses on the Internet:
* http://www.unrealircd.com
@@ -31,16 +32,16 @@
CVS
====
To get anonymous access: (read only)
"cvs -d :pserver:anonymous@cvs.ircsystems.net:/home/cmunk/ircsystems/cvsroot login"
"cvs -d :pserver:anonymous@cvs.unrealircd.com:/cvs login"
press enter when asked for password
Then, choose the appropiate branch you want:
latest 3.2 release ("stable"):
"cvs -d :pserver:anonymous@cvs.ircsystems.net:/home/cmunk/ircsystems/cvsroot checkout -r stable -d Unreal-stable unreal"
"cvs -z3 -d :pserver:anonymous@cvs.unrealircd.com:/cvs checkout -r stable -d Unreal-stable 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"
"cvs -z3 -d :pserver:anonymous@cvs.unrealircd.com:/cvs checkout -r unreal3_2_fixes -d Unreal-stable unreal"
To get support
================
@@ -49,7 +50,7 @@
* check the FAQ (www.vulnscan.org/UnrealIrcd/faq/)
Means of support:
* IRC: /server irc.ircsystems.net 6667 - /join #unreal-support
* IRC: /server irc.unrealircd.com 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,
@@ -57,9 +58,6 @@
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)
==================================================================
@@ -67,4 +65,4 @@
Want to discuss, chat, etc?
=============================
* IRC: /server irc.ircsystems.net 6667 - /join #UnrealIRCd
* IRC: /server irc.unrealircd.com 6667 - /join #UnrealIRCd
+2 -2
View File
@@ -4,8 +4,8 @@ alias nickserv { type services; };
alias ns { target nickserv; type services; };
alias chanserv { type services; };
alias cs { target chanserv; type services; };
alias memoserv { type services; };
alias ms { target memoserv; type services; };
alias memoserv { type services; spamfilter yes; };
alias ms { target memoserv; type services; spamfilter yes; };
alias operserv { type services; };
alias os { target operserv; type services; };
alias helpserv { type services; };
+2 -2
View File
@@ -21,8 +21,8 @@ alias helpserv { type services; };
alias hs { target helpserv; type services; };
alias hostserv { type services; };
alias ho { target hostserv; type services; };
alias memoserv { type services; };
alias ms { target memoserv; type services; };
alias memoserv { type services; spamfilter yes; };
alias ms { target memoserv; type services; spamfilter yes; };
alias nickserv { type services; };
alias ns { target nickserv; type services; };
alias operserv { type services; };
+2 -2
View File
@@ -4,8 +4,8 @@ alias nickserv { type services; };
alias ns { target nickserv; type services; };
alias chanserv { type services; };
alias cs { target chanserv; type services; };
alias memoserv { type services; };
alias ms { target memoserv; type services; };
alias memoserv { type services; spamfilter yes; };
alias ms { target memoserv; type services; spamfilter yes; };
alias rootserv { type services; };
alias rs { target rootserv; type services; };
+2 -2
View File
@@ -4,8 +4,8 @@ alias nickserv { type services; };
alias ns { target nickserv; type services; };
alias chanserv { type services; };
alias cs { target chanserv; type services; };
alias memoserv { type services; };
alias ms { target memoserv; type services; };
alias memoserv { type services; spamfilter yes; };
alias ms { target memoserv; type services; spamfilter yes; };
alias operserv { type services; };
alias os { target operserv; type services; };
alias helpserv { type services; };
+2 -2
View File
@@ -4,8 +4,8 @@ alias nickserv { type services; };
alias ns { target nickserv; type services; };
alias chanserv { type services; };
alias cs { target chanserv; type services; };
alias memoserv { type services; };
alias ms { target memoserv; type services; };
alias memoserv { type services; spamfilter yes; };
alias ms { target memoserv; type services; spamfilter yes; };
alias operserv { type services; };
alias os { target operserv; type services; };
alias helpserv { type services; };
+2 -2
View File
@@ -4,8 +4,8 @@ alias nickserv { type services; };
alias ns { target nickserv; type services; };
alias chanserv { type services; };
alias cs { target chanserv; type services; };
alias memoserv { type services; };
alias ms { target memoserv; type services; };
alias memoserv { type services; spamfilter yes; };
alias ms { target memoserv; type services; spamfilter yes; };
alias operserv { type services; };
alias os { target operserv; type services; };
alias helpserv { type services; };
+39 -6
View File
@@ -52,14 +52,29 @@ AC_DEFUN(CHECK_LIBCURL,
[AC_HELP_STRING([--enable-libcurl=DIR],[enable libcurl (remote include) support])],
[
CURLCFLAG=`$enableval/bin/curl-config --cflags`
CFLAGS="$CFLAGS $CURLCFLAG -DUSE_LIBCURL"
CURLLIBS=`$enableval/bin/curl-config --libs`
dnl curl-7.11.0 and up will include the ares info, older versions do not
if test "x`echo $CURLLIBS |grep .*ares.*`" = x ; then
CURLLIBS="$CURLLIBS -lares"
dnl Ok this is ugly, basically we need to strip the version of c-ares that curl uses
dnl because we want to use our own version (which is hopefully fully binary
dnl compatible with the curl one as well).
dnl Therefore we need to strip the cares libs in a weird way...
dnl If anyone can come up with something better and still portable (no awk!?)
dnl then let us know.
if test "x`echo $CURLLIBS |grep ares`" != x ; then
dnl Attempt one: Linux sed
XCURLLIBS="`echo "$CURLLIBS"|sed -r 's/(@<:@^ @:>@+ @<:@^ @:>@+ )(@<:@^ @:>@+ @<:@^ @:>@+ )(.+)/\1\3/g' 2>/dev/null`"
if test x"$XCURLLIBS" = x; then
dnl Attempt two: FreeBSD (and others?) sed
XCURLLIBS="`echo "$CURLLIBS"|sed -E 's/(@<:@^ @:>@+ @<:@^ @:>@+ )(@<:@^ @:>@+ @<:@^ @:>@+ )(.+)/\1\3/g' 2>/dev/null`"
if test x"$XCURLLIBS" = x; then
AC_MSG_ERROR([sed appears to be broken. It is needed for a remote includes compile hack.])
fi
fi
CURLLIBS="$XCURLLIBS"
fi
IRCDLIBS="$IRCDLIBS $CURLLIBS"
CFLAGS="$CFLAGS $CURLCFLAG -DUSE_LIBCURL"
URL="url.o"
AC_SUBST(URL)
])
@@ -94,7 +109,16 @@ AC_MSG_CHECKING(for openssl)
done
if test x_$found_ssl != x_yes; then
AC_MSG_RESULT(not found)
AC_WARN(disabling ssl support)
echo ""
echo "Apparently you do not have both the openssl binary and openssl development libraries installed."
echo "You have two options:"
echo "a) Install the needed binaries and libraries"
echo " and run ./Config"
echo "OR"
echo "b) If you don't need SSL..."
echo " Run ./Config and say 'no' when asked about SSL"
echo ""
exit 1
else
CRYPTOLIB="-lssl -lcrypto";
if test ! "$ssldir" = "/usr" ; then
@@ -127,7 +151,16 @@ AC_MSG_CHECKING(for zlib)
done
if test x_$found_zlib != x_yes; then
AC_MSG_RESULT(not found)
AC_WARN(disabling ziplink support)
echo ""
echo "Apparently you do not have the zlib development library installed."
echo "You have two options:"
echo "a) Install the zlib development library"
echo " and run ./Config"
echo "OR"
echo "b) If you don't need compressed links..."
echo " Run ./Config and say 'no' when asked about ziplinks support"
echo ""
exit 1
else
IRCDLIBS="$IRCDLIBS -lz";
if test "$zlibdir" != "/usr" ; then
+35 -12
View File
@@ -23,14 +23,14 @@ fi
dnl (the gcc flag detection trick is taken from xemacs/Vin Shelton)
dnl UnrealIRCd might not be strict-aliasing safe at this time
case "`gcc -v --help 2>&1`" in
case "`$CC -v --help 2>&1`" in
*-fstrict-aliasing* ) CFLAGS="$CFLAGS -fno-strict-aliasing" ;;
esac
dnl Pointer signedness warnings are really a pain and 99.9% of the time
dnl they are of absolutely no use whatsoever. IMO the person who decided
dnl to enable this without -Wall should be shot on sight.
case "`gcc -v --help 2>&1`" in
case "`$CC -v --help 2>&1`" in
*-Wpointer-sign* ) CFLAGS="$CFLAGS -Wno-pointer-sign" ;;
esac
@@ -54,13 +54,13 @@ AC_SUBST(IRCDLIBS)
AC_SUBST(MKPASSWDLIBS)
dnl module checking based on Hyb7's module checking code
AC_DEFUN(AC_ENABLE_DYN,
AC_DEFUN([AC_ENABLE_DYN],
[
AC_CHECK_FUNC(dlopen,, AC_CHECK_LIB(dl, dlopen,IRCDLIBS="$IRCDLIBS -ldl",
AC_CHECK_FUNC(dlopen,, [AC_CHECK_LIB(dl, dlopen,IRCDLIBS="$IRCDLIBS -ldl",
[
AC_MSG_WARN(Dynamic linking is not enabled because dlopen was not found)
AC_DEFINE(STATIC_LINKING)
]))
])])
hold_cflags=$CFLAGS
CFLAGS="$CFLAGS -export-dynamic"
@@ -110,7 +110,7 @@ fi
MODULEFLAGS=$ac_cv_pic
AC_DEFINE(DYNAMIC_LINKING)
])
AC_DEFUN(AC_ENABLE_INET6,[
AC_DEFUN([AC_ENABLE_INET6],[
AC_CACHE_CHECK(if your system has IPv6 support, ac_cv_ip6, [
save_libs="$LIBS"
LIBS="$LIBS $SOCKLIB"
@@ -368,7 +368,6 @@ AC_DEFINE_UNQUOTED(MAXSENDQLENGTH,$withval),AC_DEFINE(MAXSENDQLENGTH,3000000))
AC_ARG_WITH(bufferpool, [AC_HELP_STRING([--with-bufferpool=size],[Specify the size of the buffer pool])],
AC_DEFINE_UNQUOTED(BUFFERPOOL,[($withval * MAXSENDQLENGTH)]),AC_DEFINE(BUFFERPOOL,[(18 * MAXSENDQLENGTH)]))
AC_ARG_WITH(hostname, [AC_HELP_STRING([--with-hostname=host],[Specify the local hostname of the server])], AC_DEFINE_UNQUOTED(DOMAINNAME,"$withval"),AC_DEFINE_UNQUOTED(DOMAINNAME,"`hostname`"))
AC_DEFINE_UNQUOTED(MYOSNAME,"`uname -a`")
AC_ARG_WITH(permissions, [AC_HELP_STRING([--with-permissions=permissions],[Specify the default permissions for
configuration files])], AC_DEFINE_UNQUOTED(DEFAULT_PERMISSIONS,$withval), AC_DEFINE(DEFAULT_PERMISSIONS, 0600))
AC_ARG_WITH(dpath, [AC_HELP_STRING([--with-dpath=path],[Specify the path where configuration files are stored])],
@@ -396,8 +395,8 @@ AC_ARG_WITH(operoverride-verify, [AC_HELP_STRING([--with-operoverride-verify], [
CHECK_SSL
CHECK_ZLIB
CHECK_LIBCURL
AC_ARG_ENABLE(dynamic-linking, [AC_HELP_STRING([--enable-dynamic-linking],[Make the IRCd dynamically link shared objects rather than statically])], AC_ENABLE_DYN, AC_DEFINE(STATIC_LINKING))
AC_ARG_ENABLE(inet6, [AC_HELP_STRING([--enable-inet6],[Make the IRCd support IPv6])], AC_ENABLE_INET6)
AC_ARG_ENABLE(dynamic-linking, [AC_HELP_STRING([--enable-dynamic-linking],[Make the IRCd dynamically link shared objects rather than statically])], [AC_ENABLE_DYN], [AC_DEFINE(STATIC_LINKING)])
AC_ARG_ENABLE(inet6, [AC_HELP_STRING([--enable-inet6],[Make the IRCd support IPv6])], [AC_ENABLE_INET6])
AC_SUBST(IRCDDIR)
AC_SUBST(BINDIR)
AC_MSG_CHECKING(if FD_SETSIZE is large enough to allow $ac_fd file descriptors)
@@ -426,7 +425,7 @@ IRCDLIBS="$IRCDLIBS -lresolv "
esac
dnl REMEMBER TO CHANGE WITH A NEW TRE RELEASE!
tre_version="0.7.2"
tre_version="0.7.5"
AC_MSG_RESULT(extracting TRE regex library)
cur_dir=`pwd`
cd extras
@@ -459,7 +458,7 @@ cd $cur_dir
dnl REMEMBER TO CHANGE WITH A NEW C-ARES RELEASE!
cares_version="1.3.0"
cares_version="1.6.0"
AC_MSG_RESULT(extracting c-ares resolver library)
cur_dir=`pwd`
cd extras
@@ -482,7 +481,31 @@ AC_MSG_RESULT(installing c-ares resolver library)
$ac_cv_prog_MAKER install || exit 1
CARESINCDIR="$cur_dir/extras/c-ares/include"
AC_SUBST(CARESINCDIR)
CARESLIBS="-L../extras/c-ares/lib -lcares"
CARESLIBDIR="-L../extras/c-ares/lib"
AC_SUBST(CARESLIBDIR)
dnl Set default library parameters for when pkg-config is not available
CARESLIBSALT="-lcares"
case `uname -s` in
*FreeBSD*)
CARESLIBSALT="-lcares"
;;
*Linux*)
CARESLIBSALT="-lcares -lrt"
;;
esac
dnl Use pkg-config for c-ares libraries, and if not available use defaults
dnl from above. Also, if pkg-config returns an empty result (ex: on fbsd
dnl or older versions it might be missing --static) then also use defaults.
if test "x$ac_cv_path_PKGCONFIG" = "x" ; then
CARESLIBS="$CARESLIBSALT"
else
CARESLIBS="`$ac_cv_path_PKGCONFIG --static --libs libcares.pc`"
if test "x$CARESLIBS" = "x" ; then
CARESLIBS="$CARESLIBSALT"
fi
fi
AC_SUBST(CARESLIBS)
cd $cur_dir
Vendored
+8905 -6512
View File
File diff suppressed because it is too large Load Diff
+4453
View File
File diff suppressed because it is too large Load Diff
+45
View File
@@ -39,3 +39,48 @@ Some minor rules about patches & modifications to UnrealIRCd
8. We do NOT rip people off. If we use other people's code, it MUST be
properly credited.
9. We generally use tabsize 4 and 8. In any case, use tabs and NOT spaces.
Some code is old and horrible and has a mix of tabs and spaces used for
spacing, that's something we do not want to have ;)
10. Be careful about overflows. As you know a line from a user can never be longer
than 511 (510?) characters, sometimes you can use this knowledge to your
advantage. Whenever it's not safe or when you don't know what input size you
can expect, use strlcpy instead of strcpy. Do not ever use strncpy, this is
older, slower, and does not add proper zero termination.
For the same reason, use snprintf if really needed. Note though, that using
ircsprintf with a bigger buffer (eg: 1024 bytes) is MUCH faster, so preferably
use that instead of snprintf. The same can be true for strcpy vs strlcpy in
some circumstances as well.
11. Speed. When optimizing or writing code, keep in mind that readability and
stability comes first, and after that comes speed. So we'd rather prefer some
readable code (even if difficult) over some odd highly optimized routine which
nobody understands, is difficult to extend, and might have several bugs.
As mentioned earlier: use ircsprintf, not sprintf (this is because ircsprintf
is optimized for simple strings like the ones we use).
Prefer ircsprintf with a bigger buffer over the use of snprintf, since
ircsprintf is much faster.
12. Initialize your structs and use the proper memory calls.
In UnrealIRCd we use MyMalloc, MyMallocEx and MyFree (so not malloc/free).
MyMalloc usually maps to malloc, and MyMallocEx is a malloc plus filling
the memory area (eg: the struct) with zero's (a la calloc).
Use of MyMallocEx is suggested. In general you should not be using MyMalloc.
"But MyMalloc is faster!" you might say. This is true, but using MyMallocEx
has very little speed impact and enourmous benefits: people tend to forget
to set certain fields in the struct to NULL, or much more common: when
someone later on (eg: 1 year later) adds a field to a struct, there could
be several places he/she needs to update to make sure x->something is NULL
after allocating a new struct. Bad idea.
Little speed impact, huge stability benefits, easy decision ;).
13. Comment your code! This should speak for itself...
Put comments wherever you think they are needed, to aid any further coders
with reading your code.. and, in fact, it will aid yourself as well if you
would look back at your code 2 years later.
If there's some obscure pitfall, do mention it! Don't just "hope" a next
author will see it like you did.
14. Use enums whenever possible, rather than #define constants. Besides making
things more clean, it also aids debugging.
+53 -97
View File
@@ -2,30 +2,43 @@
Disabling NOSPOOF at windows (w9x, nt, w2k, xp) is NOT recommended since this
WILL allow users to use "spoofed hosts" (like the IP of someone you trust).
If you got problems with NOSPOOF fix your client (bot?) instead (you should
PONG back to the initial PING at connect).
If you have problems with NOSPOOF, fix your client (bot?) instead (you should PONG
back to the initial PING at connect).
==[ GENERAL GUIDELINES ]==
First of all you need Microsoft Visual C++, compiling with cygwin
is not supported.
First of all you need Microsoft Visual C++ (see below), compiling with
cygwin is not supported (nor is there any good reason to do so).
VC++ 7.x (.NET) is highly recommended. VC 6 might work but it requires
the Platform SDK (PSDK), it also has quite some bugs (there are 5 servicepacks!).
Basically VC7 is just much easier and known to work, therefore we'll assume
in this text that you are using it.
Compatible compilers:
cygwin NOT supported. Will not work. Should be no reason to use this anyway.
msvc 6.x Microsoft Visual Studio 6 does not work, this compiler is too old.
msvc 7.x Microsoft Visual Studio 7.x (.NET) will work just fine
msvc 8.x Microsoft Visual Studio 8.x (.NET 2005), including the free kit,
should work fine (since Unreal3.2.5).
If you don't have the paid version of Microsoft Visual Studio 7.x, then you can
use the FREE development kit and PSDK as explained below:
1. Download the MS Visual Studio Development kit at:
http://msdn.microsoft.com/visualc/vctoolkit2003/
2. Install the Platform Software Development Kit (PSDK) from:
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/
3. NOTE: Whenever you need to compile something we say 'Start the Visual Studio
.NET Command Prompt' below, but you - a person using the free version - will
actually have to start the Platform SDK Prompt instead (check out the
Start Menu).
== Simple compile (no SSL/ZIP/Remote includes) ==
1. Start the Visual Studio .NET Command Prompt
2. Go to your UnrealIrcd dir (like: cd \dev\unreal3.2) and then compile with:
2. Go to your UnrealIRCd dir (like: cd \dev\unreal3.2) and then compile with:
nmake -f makefile.win32
This will generate a wircd.exe and unreal.exe
3. Copy the src\win32\tre.dll to your UnrealIrcd main dir.
3. Copy the src\win32\tre.dll to your UnrealIRCd main dir.
4. Done!
== Compiling modules ==
1. Put your module (the .c file) in src\modules (eg: c:\dev\unreal3.2\src\modules).
2. Start the Visual Studio .NET Command Prompt
3. Go to your UnrealIrcd dir (like: cd \dev\unreal3.2).
3. Go to your UnrealIRCd dir (like: cd \dev\unreal3.2).
4. Compile the module with:
nmake -f makefile.win32 custommodule MODULEFILE=<name>
<name> is the name of the module WITHOUT the .c suffix, so if your
@@ -38,12 +51,14 @@ but for example 3.2.1 source) then the module should work on all these
versions (binary compatible) and you could for example put them on
your website so users can download them.
Such a module will work on both SSL and non-SSL, there should be no need
for separate versions... unless, of course, you use SSL-specific code in your mod.
for separate versions... unless, of course, you use SSL-specific code in your
mod.
DO NOT download a CVS version & compile your mod and then start
distributing the .dll for use at another (non-CVS) version!!
Every time we change a struct (and in some other cases) it makes the
binary/module binary incompatible which practically means your module
will CRASH or cause memory corruption and other subtle errors.
binary/module binary incompatible which practically means that your module
might seem to work fine at first (or not..) but will CRASH or cause memory
corruption and other subtle errors.
== COMPILING WITH ZIP LINKS / SSL / REMOTE INCLUDES SUPPORT ==
First of all, DO NOT use any precompiled libs from the official
@@ -67,87 +82,28 @@ nmake -f makefile.win32 USE_ZIPLINKS=1 ZLIB_INC_DIR="c:\dev\zlib" ZLIB_LIB_DIR="
USE_SSL=1 OPENSSL_INC_DIR="c:\dev\openssl\include" OPENSSL_LIB_DIR="c:\dev\openssl\lib" USE_REMOTEINC=1
LIBCURL_INC_DIR="c:\dev\curl\include" LIBCURL_LIB_DIR="c:\dev\curl\lib"
== SYMBOL FILES ==
If you get something like this:
Creating library L_COMMANDS.lib and object L_COMMANDS.exp
M_OPER.obj : error LNK2019: unresolved external symbol _sendto_snomask_global re
ferenced in function _m_oper
(note: the exact name of the symbol will vary)
Then you will have to rebuild the wircd.def symbol file. You do this by
downloading http://www.vulnscan.org/tmp/dlltool.exe and putting the file somewhere
in your path (eg: c:\winnt\system32).
Then, to compile you do this:
nmake -f makefile.win32 [your other options here]
nmake -f makefile.win32 SYMBOLFILE
nmake -f makefile.win32 [your other options here]
So basically you just run 'nmake -f makefile.win32 SYMBOLFILE' and then restart
compiling again.
== COMPILING ZLIB/SSL/CURL YOURSELF ==
This is quite some work.. With the precomiled method shown above it
just takes like 5-10 minutes to have a zlib+ssl+curl Unreal version.
But if you want to compile each of these libs manually then it will
probably take an hour or so.
** THE INFORMATION BELOW IS OUTDATED, WE GOT RID OF MDd, USE MD INSTEAD
AND DONT COMPILE OPENSSL W/DEBUG ***
== ZIP LINKS (zlib) ==
[NOTE: precompiled dlls should NOT be used because they will cause a crash
(this is due to different compile parameters / api call systems]
To compile with ziplinks support you need to do the following:
Download the SOURCE from http://www.winimage.com/zLibDll/
(at the time of writing, http://www.winimage.com/zLibDll/zlib121.zip)
and extract it to somewhere, for example c:\dev\zlib-1.2.1
Then, edit win32\makefile.msc:
- Change -MD to -MDd
- Add -D ZLIB_WINAPI to CFLAGS
- so the result will be like:
CFLAGS = -nologo -MDd -O2 $(LOC) -D ZLIB_WINAPI
- Then compile: nmake -f win32\Makefile.msc
- Assuming the above step went fine, your zlib is now ready.
- Now, to compile UnrealIRCd with ziplinks you do something like this:
nmake -f makefile.win32 USE_ZIPLINKS=1 ZLIB_INC_DIR="c:\dev\zlib-1.2.1" ZLIB_LIB_DIR="c:\dev\zlib-1.2.1"
Obviously, change the paths if needed [1st = *.h files, 2nd=*.dll/*.lib]
== SSL (OpenSSL) ==
[note: openssl requires perl to configure/compile!]
- Download latest openssl (eg: openssl-0.9.7d.tar.gz) and extract it somewhere
(we'll use c:\dev\openssl-0.9.7d in this example)
- Open util\do_masm.bat, add 'debug' to the lines with 'mk1mf.pl' BUT be careful
since it should NOT be the last word, so add it somewhere before that.
For example: perl util\mk1mf.pl dll debug VC-W31-32 >ms\w31dll.mak
- Start the
- Now we go build openssl, run:
ms\do_masm
nmake -f ms\ntdll.mak
- Assuming the above step went fine, your OpenSSL is now ready.
- Now, to compile UnrealIRCd with ziplinks you do something like this:
nmake -f makefile.win32 USE_SSL=1 OPENSSL_INC_DIR="c:\openssl\inc32\openssl" OPENSSL_LIB_DIR="C:\Dev\openssl\out32dll.dbg"
Obviously, change the paths if needed [1st=*.h files, 2nd=*.dll/*.lib]
== REMOTE INCLUDES (curl, c-ares) ==
- Download latest c-ares source from http://daniel.haxx.se/projects/c-ares/
Download latest curl source from http://curl.haxx.se/download.html
Extract both somewhere (eg: c:\dev\c-ares-1.2.0 and c:\dev\curl-7.12.0)
- Open vc\vc.dsw from your ares directory. Assuming you have VC7 it will ask
whether it should convert the project, choose 'Yes to all'.
- (solution explorer) areslib -> properties
C/C++ -> code generation -> runtime library: Change to
'Multi-threaded Debug DLL (/MDd)'
- at the time of writing 'ares_free_errmem.c' should be removed from the
project file (solution explorer -> source files -> find the file + press
delete). Also 'ares_version.c' and 'ares_cancel.c' should be added
(solution explorer -> source files -> rightclick -> add -> add existing ->
go down a few directories if needed and choose the file).
- right click at 'areslib' in the solution explorer and select 'Build'.
Assuming it compiled fine, we are done with c-ares.
- Now go to the curl directory and open lib\curllib.dsw. Choose 'Yes to all'
again when asked about converting.
- Open config-win32.h (@header files in solution explorer) and add:
#define USE_ARES 1
- Open include\curl\multi.h and change the line with:
#include <winsock2.h>
to:
#include <winsock.h>
- (solution explorer) curllib -> properties
- C/C++ -> code generation -> runtime library: Change to
'Multi-threaded Debug DLL (/MDd)'
- C/C++ -> general -> additional include directories:
add the path to your <c-ares-directory> (eg: C:\Dev\c-ares-1.2.0).
- linker -> general -> additional library directories:
add the path to your <c-ares-directory>\vc\areslib\Debug,
for example C:\Dev\c-ares-1.2.0\vc\areslib\Debug.
- linker -> input -> additional dependencies:
add: areslib.lib
- linker -> input -> Module defenition file:
set to: libcurl.def
Done with editting properties.
- Now: Build -> rebuild solution, everything should compile fine.
- Now, to compile UnrealIRCd with remote includes you do something like this:
nmake -f makefile.win32 USE_REMOTEINC=1 LIBCURL_INC_DIR="C:\Dev\curl-7.12.0\include" LIBCURL_LIB_DIR="C:\Dev\curl-7.12.0\lib\Debug"
This is off-topic and not explained here.
Again, use the stuff from the win32 development pack unless you have a good
reason to do otherwise (in which case we might not support your self-compiled version
because we work with specific versions / compile options).
-764
View File
@@ -1,764 +0,0 @@
/*
* example.conf by Alexander Ganchev AKA Peace (unrealirc@gmail.com).
* $Id$
*
* Prednaznachen e za Unreal3.2 i versii sled nego
* Dobre priqteli. Tova e noviqt example.conf.Izglejda kato nqkoi fail C++ (shega).
* Kakto i da e..vreme e da go configurirame. Trudnichko e kato za purvi put, no
* sus malko praktikuvane i chetene shte mu sviknete.
*
* Kopiraite tozi fail vuv vashata glavna direktoriq i go prekrustete na 'unrealircd.conf'.
* VAJNO: Vsichki linii (tova sa zavurshvashtite na vseki red),
* {trqbwa da zavurshvat sus ; a kraq na samata liniqta slagate i } - demek nakraq stava };
* MOLQ PROCHETETE doc/unreal32docs.html!Online versiqta shte namerite tuk -
* www.vulnscan.org/UnrealIrcd/unreal32docs.html
* Sudurja dosta informaciq za config faila: dava vi informaciq za vseki blok,stoinost, i taka natatuka..
*/
/* Tipove Komentari */
#Comment type 1 (Shell type)
// Comment type 2(C++ style)
/* Comment type 3 (C Style) */
#tezi linii shte budat ignorirani ot ircd-to.
/*
* UnrealIRCd poddurja modulite,clock.dll & commands.dll
* zavisimost ot vashata operacionna sistema izberete za Windows ili za *NIX shte izpolzvate
* Nezavisimo ot Operacionnata vi sistema trqbva da mahnete //- predi loadmodule i na 2-ta reda.
*/
/* FOR *NIX, uncomment the following 2lines: */
//loadmodule "src/modules/commands.so";
//loadmodule "src/modules/cloak.so";
/* FOR Windows, uncomment the following 2 lines: */
loadmodule "modules/commands.dll";
loadmodule "modules/cloak.dll";
/*
* Sushto taka moje da vkliuchite i drugi configuracionni failove.
* help.conf vi se qvqva komadata /helpop text. The badwords.*.conf
* falovete sudurjat vsichki "badword kato slojite mod +G v kanal
* spamfilter.conf sudurja nqkoi dobri pravila za zabrani za puskane na troianski kone.
* Ako iskate mojete da gi vkliuchite tqh :
*/
include "help.conf";
include "badwords.channel.conf";
include "badwords.message.conf";
include "badwords.quit.conf";
include "spamfilter.conf";
/* NEW: me {}
* OLD: M:Line
* me {} opredelq imeto,opisanie i cifrata na vashiqt unrealircd server.
* Sintaksisut e kakto sledva :
* me {
* name "server.name";
* info "Server Description";
* numeric (server numeric*);
* };
* Ako linkvate Servera si,Cifrata moje bi nqma da bude izpolzvaema ot drugite serveri vuv mrejata
*/
me
{
name "Imeto Na Servera vi";
info "Opisanie Na Servera";
numeric Cifra po izbor(po malka e po dobre);
};
/*
* NEW: admin {}
* OLD: A:Line
* Admin dava informaciq za server admin-a na mrejata.
* Mojete da slojite mnogo linii pod grafata 'admin {' ako iskate.
* Sintaksisa kakto sledva:
* admin {
* "Purva liniq";
* "Vtora liniq";
* [drugi]
* };
*/
admin {
"TUk Slojete informaciq za admina";
"Tuk mojete da slojite i ime ili email";
};
/*
* NEW: class {}
* OLD: Y:line (old was confusing)
* Class e grupa nastroiki za vashata vruzka.Primer,Server connect-vane,max clienti i drugi.
* delqt se na 2 Class-a. Class Cliends & Servers.
* {
* pingfreq ((kolko chesto da pignesh user/server v sekundi);
* maxclients (vuzmojnite connekcii za opredelen 'Class');
* sendq (maksimuma ot hora v edna opashka);
* recvq (maximum receive queue from a connection [flood control]);
* };
*/
class clients
{
pingfreq 90;
maxclients 500;
sendq 100000;
recvq 8000;
};
class servers
{
pingfreq 90;
maxclients 10; /* Maksimum serveri koito moje da se link-nat */
sendq 1000000;
connfreq 100; /* Sekundite mejdu vseki opit za connect-vane */
};
/*
* NEW: allow {}
* OLD: I:Line
* Tazi Opciq opredelq koi shte ima pravo da vliza na servera vi...
* Mojete da kontrolirate vashite klienti,da im slagate paroli i drugi.
* control and/or set a password.
* Syntax is as follows:
* allow {
* ip (razresheno ip za izpolzvane);
* hostname (host mask);
* class (class to send them to [see class {}]);
* password "(parola)"; (po izbor)
* maxperip (pozvoleni vruzki ot edno ip); (optional)
* };
*/
allow {
ip *@*;
hostname *@*;
class clients;
maxperip 5;
};
/* Passworded allow line */
allow {
ip *@255.255.255.255;
hostname *@*.passworded.ugly.people;
class clients;
password "Test";
maxperip 1;
};
/*
* NEW: allow channel {}
* OLD: chrestrict
* Razreshenie na userite da vlizat v opredelen kanal...
* Syntax:
* allow channel {
* channel "imeto na kanala";
* };
*/
allow channel {
channel "#Free";
};
/*
* NEW: oper {}
* OLD: O:Line
* Opredelete koi da bude IRC Operator na servera vi
* IRC operators tova sa tochno tezi hora koito da se grijat za servera,
* da go poddurjat i da se connect-vat redovno.
* Sinktaksisut e kakto sledva :
* oper (login) {
* class (class to put them in, if different from I, moves them to new
* class);
* from {
* userhost (ident@host);
* userhost (ident@host);
* };
* flags
* {
* (tuk shte slagate flagovete*);
* };
* OR
* flags "old type flags, like OAaRD"; (sushto moje da slagate i samo bukvite)
* };
*/
/* Za lista s oper flagovete, poglednete doc/unreal32docs.html#operblock
*[Zaduljitelno da se prochete]
*/
oper admin {
class clients;
from {
userhost *@*;
};
password "Test";
flags
{
netadmin;
can_zline;
can_gzline;
can_gkline;
global;
coadmin;
can_globalkill;
can_ungline;
can_gline;
can_kline;
can_unkline;
can_rehash;
can_globops;
can_localroute;
can_wallops;
can_localkill;
can_localnotice;
can_globalroute;
can_globalnotice;
can_dccdeny;
can_setq;
services-admin;
};
};
/*
* NEW: listen {}
* OLD: P:Line
* Tuk shte opredelite porta na vasheto ircd prez koito
* da vlizat useri/serveri.
* Siktaksisut e kakto sledva :
* listen (ip):(nomera na porta)
* {
* options {
* (options here);
* };
* };
* or for a plain
* listen: listen (ip):(port);
*
* NOTICE: for ipv6 ips (3ffe:b80:2:51d::2 etc), use listen [ip]:port;
*
* That works also.
*/
/* Options for listen:
OLD | NEW
S serversonly
C clientsonly
J java
s ssl
* standard
*/
/* BELEJKI ZA SSL PORTOVE : SSL portovete sa dosta nestandartni,
* osven nomera na 'high-SSL portovete', nqkoi hora kazvat che mojej da gi startirash
* na 994 port, zashtoto tova e oficialniqt SSL port..no tova izskva root!Osven tova port 194
* e oficialniqt irc port i mojete nqkoi put da probvate da vidite dali ircd-to e startirano
* na tozi port.
* Nashiqt suvet e da izpolzvate port 6697 za SSL, toi se izpolzva vuv nqkoi mreji i
* mojete da otvorite mnogo SSL portove ako iskate, no izpolzvaite i 6697 po standart.
listen *:6697
{
options
{
ssl;
clientsonly;
};
};
listen *:8067;
listen *:6667;
/*
* NEW: link {}
* OLD: C/N:Lines
* Tezi opcii sa za link-vane na serveri
* BELEJKA: Dva servera se nujdaqt ot LINK {} za da budat linknati bez problemi!
* Sintaksisut e kakto sledva:
* link (server name)
* {
* username (username, moshete da slojite sushto i * );
* hostname (ip nomer/hostmask);
* bind-ip (kum koe ip da bude svurzano sled kato se connect-ne, ili slojete * );
* port (port za svurzvane (moje da slojite vseki);
* hub (ako servera vi e hub,slojete * , ili servermask-a);
* [ili leaf *;]
* password-connect "(parola za svurzvane)";
* password-receive "(povtorete parolata)";
* class (class);
* options {
* (options here*);
* };
* /* Ako izpolzvate SSL,vie mojete da izberete shifur za da izpolzvate SSL mode
* * Lista shte namerite vuv "openssl ciphers",samostoqtelen shifur sus :'s
* */
* ciphers "DES-CBC3-MD5";
*
* };
*/
/*
options:
OLD | NEW
S ssl
Z zip
N/A autoconnect
N/A quarantine
N/A nodnscache
*/
link services.Test.com
{
username *;
hostname 1.2.3.4;
bind-ip *;
port 7029;
hub *;
password-connect "LiNk";
password-receive "LiNk";
class servers;
options {
/* Belejka: vie ne mojete da izpolzvate autoconnect kogato linkvate serveri
autoconnect;
ssl;
zip;
};
};
/*
*
* NEW: ulines {}
* OLD: U:Line
* U-liniite davat poveche komandi na serverut vi,Uliniite se slagat samo za services/stats
* serveri i NIKOGA za normalnite UnrealIRCd serveri!
* Sintaksisut e kakto sledva:
* ulines {
* (server to uline);
* (server to uline);
* [etc]
* };
*/
ulines {
services.Test.org;
stats.Test.org;
};
/*
* NEW: drpass {}
* OLD: X:Line
* Tuk shte slagate parolite za /die i /restart na servera.
* Sintaksusut e kakto sledva:
* drpass {
* restart "(parola za restart na servera)";
* die "(parola za die na servera)";
* };
*/
drpass {
restart "restart";
die "die";
};
/*
* NEW: log {} OLD: nishto ne se kazva otnosno tova kude i kakvo da logva.Mojete
* gi slagate ako iskate
*
* FLAGS: errors, kills, tkl, connects, server-connects, kline, oper
*
* Syntax:
* log "log file"
* {
* flags
* {
* flag;
* flag;
* etc..
* };
* };
*/
log "ircd.log" {
/* Iztriite log faila i napravete nov koito da stiga do 2MB.
*/
maxsize 2097152;
flags {
oper;
kline;
connects;
server-connects;
kills;
errors;
sadmin-commands;
chg-commands;
oper-override;
spamfilter;
};
};
/*
* NEW: alias {}
* OLD: N/A
* Chrez tezi nastroiki moje da napravite prehod ot /nickserv,/chanserv i drugi kum drugi nickove.
* FLAGS: services,stats,normal
*
** Syntax:
* alias "Ime" {
* target "points to";
* type aliastype;
* };
* [BELEJKA: Mojete da vkliuchite i opredeleniq,za celta poglednete doc/unreal32docs.html section 2.9]
*/
// Tova posochva komandata /nickserv-a na user-a NickServ koito e svurzan s set::services-server server
/*alias NickServ {
target "NickServ";
type services;
};*/
// Ako iskate komandite da sa na drug nick mojete da promenite nick-a
//alias ChanServ {type services; };
// Posochva /StatServ na user-a StatServ koqto svurzva set::stats-server server
//alias StatServ {type stats; };
// Posochva /superbot na user-a SuperBot
//alias SuperBot {type normal; };
/* Standart Aliases */
alias NickServ { type services; };
alias ChanServ { type services; };
alias OperServ { type services; };
alias HelpServ { type services; };
alias StatServ { type stats; };
/*
* NEW: alias {}
* OLD: N/A
* Tezi moje da posochite zamestiteli na /identify,/services, i drugi...
* Syntax:
* alias "Ime" {
* format "format string" {
* target "points to";
* type aliastype;
* parameters "parameters to send";
* };
* type command;
* };
*/
/* Tova se pokazva otdelno, zashtoto vypreki che ima syshtoto ime kato predishnata direktiva
*e dosta razlichno po otnoshenie na sintaksis, vypreki che osigurqva prosta funkciq i raz4ita na standartni alias-i za da raboti.
*/
/*
alias "identify" {
format "^#" {
target "chanserv";
type services;
parameters "IDENTIFY %1-";
};
format "^[^#]" {
target "nickserv";
type services;
parameters "IDENTIFY %1-";
};
type command;
};
*/
/* alias::format ditektivata e obichaen izraz.Pyrviq format se svyrzva s
* komandata /identify kogato pyrviq simvol e "#". Sled tova se izprashta do chanserv
* alias-a s parametri identify. %1-. Togava vtoriq ormat se svyrzva s komandata /identify
* kogato pyrviq simvol ne e "#".
* Togava se izprashta do nickserv alias-a s parametri identify %1-.
/* Standard aliases */
alias "services" {
format "^#" {
target "chanserv";
type services;
parameters "%1-";
};
format "^[^#]" {
target "nickserv";
type services;
parameters "%1-";
};
type command;
};
alias "identify" {
format "^#" {
target "chanserv";
type services;
parameters "IDENTIFY %1-";
};
format "^[^#]" {
target "nickserv";
type services;
parameters "IDENTIFY %1-";
};
type command;
};
/*
* NEW: tld {}
* OLD: T:Line
* Tezi nastroki sa za razlichni 'motd' i 'rules' failove
* v zavisimost ot klientskata hostmask-a.
* Sintaksisut e kakto sledva:
* tld {
* * mask (ident@host);
* motd "(motd file)";
* rules "(rules file)";
* };
*/
tld {
mask *@*;
motd "ircd.motd";
rules "ircd.rules";
};
/* BELEJKA: vzemete nqkoi fail primer - vzemete tao.of.irc.doc..sled tova go kopiraite v
* glavnata direktoriq na Unrealircd-to vi.Prekrustete go na irc.motd..Napravete po sushtiq
* nachin i ircd.rules (FAILOVETE SA ZADULJITELNI)
*/
/*
* NEW: ban nick {}
* OLD: Q:Line
* Ako slojite ban na nickname to veche tozi nick stava neizpolzvaem.
* Sintaksisut e kakto sledva :
* ban nick {
* mask "(nick koito jelaete da zabranite)";
* reason "(prichina)";
* };
*/
ban nick {
mask "Test";
reason "Test Nickname";
};
/*
* NEW: ban ip {}
* OLD: Z:Line
* Ban na ip.
* Sintaksis:
* ban ip { mask (ip nomer/hostmask); reason "(prichina)"; };
*/
ban ip {
mask 100.100.200.300;
reason "Wrong Ip";
};
/*
* NEW: ban server {}
* OLD: Server Q:Line
* Slagane na ban na server.Ako servera e link-nat kum otdalecheniq server
* (toest tozi) localniqt server shte se diskonect-ne avtormatichno.
* Syntax is as follows:
* ban server {
* mask "(Imeto na servera)";
* reason "(Prichina)";
* };
*/
ban server {
mask irc.microsoft.com;
reason "Get out of here";
};
/*
* NEW: ban user {}
* OLD: K:Line
* Tazi opciq pozvolqva da zabranite dostupa na user do vashiqt server
* Sintaksis:
* ban user { mask (hostmask/ip nomer); reason "(Prichina)"; };
*/
ban user {
mask *tirc@*.microsoft.com;
reason "Idiot";
};
/*
* NEW: ban realname {}
* OLD: n:Line
* Tazi opciq vi dava pravo da zabranite dostupa na user ot opredeleno 'realname'.
* Sintaksis:
* ban realname {
* mask "(real name)";
* reason "(prichina)";
* };
*/
ban realname {
mask "test";
reason "mIRKFORCE";
};
ban realname {
mask "sub7";
reason "virus";
};
/*
* BELEJKA ZA VSICHKI BANOVE, mojete da povtarqte procedurata sus razlichni nickove!
*
* NEW: except ban {}
* OLD: E:Line
* Nick koito ne moje da bude bannat.
* Sintaksis:
* except ban { mask (ident@host); }
*/
except ban {
/* don't ban stskeeps */
mask *stskeeps@212.*;
};
/*
* NEW: deny dcc {}
* OLD: dccdeny.conf
* Izpolzvaite go za da zabranite dcc.Predpazva vi ot virusi
* Syntax:
* deny dcc
* {
* filename "Fail koito shte blokirate (ie, *exe)";
* reason "prichina";
* };
*/
deny dcc {
filename "Sub7";
reason "Possible Sub7 Virus";
};
/*
* NEW: deny channel {}
* OLD: N/A (NEW)
* Zabranqva kanali po vash izbor.
* Syntax:
* deny channel {
* channel "(kanal)";
* reason "prichina";
* };
*/
deny channel {
channel "hackers";
reason "Warez is illegal";
};
/*
* NEW: vhost {}
* OLD: Vhost.conf file
* Tazi nastroika vi slaga Falshivo ip.Slaga se za hora koito ne sa operatori
* ili puk za operatori (za po murzelivite /sethost :P
* Sintaksis:
* vhost {
* vhost (vhost.com);
* from {
* userhost (ident@host to allow to use it);
* };
* login (login name);
* password (password);
* };
* then to use this vhost, do /vhost (login) (password) in IRC
*/
vhost {
vhost i.hate.microsefrs.com;
from {
userhost *@*;
};
login stskeeps;
password moocowsrulemyworld;
};
/* Mojete da vkliuchite i drugi konfiguracionni failove */
/* vkliuchete "klines.conf"; */
/* Network configuration */
set {
network-name "Imeto na Mrejata vi";
default-server "Imeto na Servera";
services-server "Services.servera";
stats-server "Stats.Servera";
help-channel "#Kanal za pomosht";
hiddenhost-prefix "skrithost";
/* prefix-quit "quit na userite"; */
/* Cloak Keys se slagat na vsichki serveri ot mrejata.
* Te se izpolzvat za po golqma sigurnost.Trqbva da budat izbrani 3 reda
* ot 5-100 simvola i da sudurjat SMESENI golemi,malki bukvi i cifri...
* V primera e posocheno edin takuv 'Cloak Key'..napishete oshte 2
*/
cloak-keys {
"aoAr1HnR6gl3sJ7hVz4Zb7x4YwpW";
"Slojete Tuk Vashi Razburkani";
"Slojete Tuk Vashi Razburkani";
};
/* on-oper host */
hosts {
local "Host za localen operator";
global "Host za globalen operator";
coadmin "Host za coadmin";
admin "Host za admin";
servicesadmin "Host za services-admin";
netadmin "Host za netadmin";
host-on-oper-up "yes\no";
};
};
/* Server specific configuration */
set {
kline-address "slojete adres za kline";
auto-join "#kanal za auto-join";
modes-on-connect "+iw";
modes-on-oper "+wgs";
oper-auto-join "#Kanal za auto-join na operatorite";
dns {
nameserver 127.0.0.1;
timeout 2s;
retries 2;
};
options {
hide-ulines;
/* Ako jelaete da proverqva identa mahnete */
/* identd-check; */
show-connect-info;
};
maxchannelsperuser 10;
/* Tova e minimalnoto vreme v koeto user moje da se svurje sled kato izleze ot servera.
* Tova shte pomogne da se spre spam-a */
anti-spam-quit-message-time 10s;
/* Napravete statichen quit koito da zamestva drugite quit-ove na userite.
custom quits are allowed on local server */
/* static-quit "Client quit"; */
/* Mojete da blokirate 'Part-reason-ite' kato slojite nqkakuv text po vash izbor */
/* static-part yes; */
/* Mojete da slagate 'stats' ili inache kazano nqkoi flagove da budat razresheni i
* izpolzvaemi samo ot operite. Primer za tova sa - klines,glines i shuns
*/
oper-only-stats "okfGsMRUEelLCXzdD";
/* Throttling: Dolniqt primer pokazva che mojete da slojite limit 3 svurzvaniq
za 60 sec (na host). */
throttle {
connections 3;
period 60s;
};
/* Anti flood protection */
anti-flood {
nick-flood 3:60; /* 3 smenqniq na nicka za 60 seconds (po default) */
};
/* Spam filter */
spamfilter {
ban-time 1d; /* vremetraeneto e po default *line ban set by spamfilter */
ban-reason "Spam/Advertising"; /* default prichina */
virus-help-channel "#help"; /* Kanal za skanirane na virusi */
/* s izkliuchenie "#help"; drugite kanali se osvobojdavat ot filtrirane */
};
};
/*
* Ako imate problem ili nujda ot pomosht?
* 1) www.vulnscan.org/UnrealIrcd/unreal32docs.html
* 2) www.vulnscan.org/UnrealIrcd/faq/ <- sudurja 80% ot vuprosite vi!
* 3) Ako imate problem moje da se oburnete i kum irc.ircsystems.net #unreal-support,
* no purvo PROCHETETE HELP FAILA i 'FAQ'.
*/
+23 -12
View File
@@ -14,9 +14,11 @@
* closing } line. The IRCd will ignore commented lines.
*
* PLEASE READ doc/unreal32docs.html! The online version is also available at:
* www.vulnscan.org/UnrealIrcd/unreal32docs.html
* www.vulnscan.org/UnrealIRCd/unreal32docs.html
* It contains a lot information about the configfile: gives information about
* every block, variable, etc..
* If you try to edit this file without reading the documentation properly
* then you are pretty much guaranteed to fail!
*/
/* Type of comments */
@@ -288,9 +290,9 @@ listen *:6667;
* options {
* (options here*);
* };
* /* If we use SSL, we can choose what cipher to use in SSL mode
* * Retrieve a list by "openssl ciphers", seperate ciphers with :'s
* */
* // If we use SSL, we can choose what cipher to use in SSL mode
* // Retrieve a list by "openssl ciphers", separate ciphers with :'s
*
* ciphers "DES-CBC3-MD5";
*
* };
@@ -505,6 +507,18 @@ alias "identify" {
type command;
};
/* This is an example of a real command alias */
/* This maps /GLINEBOT to /GLINE <parameter> 2d etc... */
alias "glinebot" {
format ".+" {
command "gline";
type real;
parameters "%1 2d Bots are not allowed on this server, please read the faq at http://www.example.com/faq/123";
};
type command;
};
/*
* NEW: tld {}
@@ -698,6 +712,8 @@ set {
* The keys should be 3 random strings of 5-100 characters
* (10-20 chars is just fine) and must consist of lowcase (a-z),
* upcase (A-Z) and digits (0-9) [see first key example].
* HINT: On *NIX, you can run './unreal gencloak' in your shell to let
* Unreal generate 3 random strings for you.
*/
cloak-keys {
"aoAr1HnR6gl3sJ7hVz4Zb7x4YwpW";
@@ -723,11 +739,6 @@ set {
modes-on-connect "+ixw";
modes-on-oper "+xwgs";
oper-auto-join "#opers";
dns {
nameserver 127.0.0.1;
timeout 2s;
retries 2;
};
options {
hide-ulines;
/* You can enable ident checking here if you want */
@@ -754,7 +765,7 @@ set {
*/
oper-only-stats "okfGsMRUEelLCXzdD";
/* Throttling: this example sets a limit of 3 connections per 60s (per host). */
/* Throttling: this example sets a limit of 3 connection attempts per 60s (per host). */
throttle {
connections 3;
period 60s;
@@ -776,8 +787,8 @@ set {
/*
* Problems or need more help?
* 1) www.vulnscan.org/UnrealIrcd/unreal32docs.html
* 2) www.vulnscan.org/UnrealIrcd/faq/ <- contains 80% of your questions!
* 1) www.vulnscan.org/UnrealIRCd/unreal32docs.html
* 2) www.vulnscan.org/UnrealIRCd/faq/ <- contains 80% of your questions!
* 3) If you still have problems you can go irc.ircsystems.net #unreal-support,
* note that we require you to READ THE DOCUMENTATION and FAQ first!
*/
+13 -15
View File
@@ -19,7 +19,8 @@
* BITTE LESE die doc/unreal32docs.html! Sie ist auch online erhältlich bei:
* www.vulnscan.org/UnrealIrcd/unreal32docs.html
* Diese Datei enthält zahlreiche ergänzende Informationen über jeden Block, Variablen usw.
* Übersetzung durch stylus740@smart-irc.de (bei irc.smart-irc.net)/
* Übersetzung durch stylus740@smart-irc.de (bei irc.smart-irc.net)
*/
/* Kommentar Typen */
#Kommentar Typ 1 (Shell Typ)
@@ -94,8 +95,8 @@ admin {
/*
* NEU: class {}
* ALT: Y:line (alte Form war verwirrend)
* Hiermit werden Klassen und ihre Einstellungen festgelegt. Eine Klasse ist eine Gruppen
* Einstellung für Verbindungen. So kann man beispielsweise Server Verbindungen in einer
* Hiermit werden Klassen und ihre Einstellungen festgelegt. Eine Klasse ist eine Gruppen-
* einstellung für Verbindungen. So kann man beispielsweise Server Verbindungen in einer
* eigenen Klasse behandeln, statt zusammen mit Clients.
* Syntax ist wie folgt:
* class (class name)
@@ -293,11 +294,11 @@ listen *:6667;
* options {
* (options hier*);
* };
* /* Wird SSL benutzt, kann bestimmt werden, welche Verschlüsselung im SSL
* * Modus zu benutzen ist
* * Bei mehreren "openssl ciphers" sind die einzelnen Verschlüsselungen
* * durch ':' zu trennen
* */
* // Wird SSL benutzt, kann bestimmt werden, welche Verschlüsselung im SSL
* // Modus zu benutzen ist
* // Bei mehreren "openssl ciphers" sind die einzelnen Verschlüsselungen
* // durch ':' zu trennen
*
* ciphers "DES-CBC3-MD5";
*
* };
@@ -632,7 +633,7 @@ except ban {
/*
* NEU: deny dcc {}
* ALT: dccdeny.conf
* Mit diesem Block können dcc send's geblockt werden... Gut, um Virten aufzuhalten.
* Mit diesem Block können dcc send's geblockt werden... Gut, um Viren aufzuhalten.
* Syntax:
* deny dcc
* {
@@ -702,6 +703,8 @@ set {
* Die Keys sollten 3 zufällige Strings von 5-100 Zeichen Länge sein (10-20 Zeichen
* (sind ganz ok) und müssen aus Kleinbuchstaben(a-z), Großbuchstaben (A-Z) und
* Ziffern (0-9) bestehen [wie im ersten Key Beispiel].
* TIPP: Auf *NIX, kann man in der Shell './unreal gencloak' aufrufen und durch
* Unreal 3 Zufalls Stings erzeugen und anzeigen lassen.
*/
cloak-keys {
"aoAr1HnR6gl3sJ7hVz4Zb7x4YwpW";
@@ -727,11 +730,6 @@ set {
modes-on-connect "+ixw";
modes-on-oper "+xwgs";
oper-auto-join "#opers";
dns {
nameserver 127.0.0.1;
timeout 2s;
retries 2;
};
options {
hide-ulines;
/* Man kann hier ident checking aktivieren, wenn man will */
@@ -741,7 +739,7 @@ set {
maxchannelsperuser 10;
/* Die Mindestzeit, die ein User verbunden sein muss, bevor er eine QUIT Meldung
* senden darf (Das wird offentlich helfen, Spam zu verhindern */
* senden darf (Das wird offentlich helfen, Spam zu verhindern) */
anti-spam-quit-message-time 10s;
/* Macht die Meldung statisch, die in allen Quit Meldungen angezeigt wird.
Somit sind keine individuellen Quts auf dem lokalen Server mehr erlaubt */
+20 -12
View File
@@ -16,9 +16,11 @@
* L'IRCd ignorera les lignes commentées.
*
* LISEZ S'IL VOUS PLAIT doc/unreal32docs.fr.html! La version en ligne est aussi disponible à :
* www.vulnscan.org/UnrealIrcd/unreal32docs.fr.html
* www.vulnscan.org/UnrealIRCd/unreal32docs.fr.html
* Elle contient beaucoup d'informations à propos du fichier de configuration : fournis des informations
* à propos de chaque blocs, variable, etc..
* Si vous essayez de modifier ce fichier sans avoir bien lu la documentation,
* vous êtes presque sûr de vous tromper.
*/
/* Type de commentaires */
@@ -291,9 +293,9 @@ listen *:6667;
* options {
* (options ici*);
* };
* /* Si vous utilisez le SSL, vous pouvez choisir quel cryptage (cipher) utiliser dans le mode SSL
* * Retrouvez une liste "crytages openssl", séparez les cryptages par des :
* */
* // Si vous utilisez le SSL, vous pouvez choisir quel cryptage (cipher) utiliser dans le mode SSL
* // Retrouvez une liste "crytages openssl", séparez les cryptages par des :
*
* ciphers "DES-CBC3-MD5";
*
* };
@@ -513,6 +515,17 @@ alias "identify" {
type command;
};
/* Ceci est un exemple de véritable alias de commande*/
/* Ceci renvoye /GLINEBOT à /GLINE <parameter> 2d etc... */
alias "glinebot" {
format ".+" {
command "gline";
type real;
parameters "%1 2d Les bots ne sont pas permis sur ce serveur, lisez s'il-vous-plait la faq sur http://www.example.com/faq/123";
};
type command;
};
/*
* ACTUEL : tld {}
@@ -731,11 +744,6 @@ set {
modes-on-connect "+ixw";
modes-on-oper "+xwgs";
oper-auto-join "#opers";
dns {
nameserver 127.0.0.1;
timeout 2s;
retries 2;
};
options {
hide-ulines;
/* Vous pouvez enclencher la vérification des idents si vous voulez */
@@ -764,7 +772,7 @@ set {
*/
oper-only-stats "okfGsMRUEelLCXzdD";
/* Throttling: cet exemple applique une limite de 3 connexions en 60s (par host). */
/* Throttling: cet exemple applique une limite de 3 tentatives de connection en 60s (par host). */
throttle {
connections 3;
period 60s;
@@ -786,8 +794,8 @@ set {
/*
* Problèmes ou besoin de plus d'aide ?
* 1) www.vulnscan.org/UnrealIrcd/unreal32docs.fr.html
* 2) www.vulnscan.org/UnrealIrcd/faq/ <- contient 80% de vos questions !
* 1) www.vulnscan.org/UnrealIRCd/unreal32docs.fr.html
* 2) www.vulnscan.org/UnrealIRCd/faq/ <- contient 80% de vos questions !
* 3) Si vous avez encore des problèmes vous pouvez aller sur irc.ircsystems.net #unreal-support,
* notez que vous devez avoir LU LA DOCUMENTATION ET LA FAQ d'abord !
*/
+27 -15
View File
@@ -16,9 +16,11 @@
* a záró } sort is. Az IRCd figyelmen kívül hagyja a megjegyzéssorokat.
*
* KÉRLEK, OLVASD EL A doc/unreal32docs.html-T! Az online verzió is elérhető
* a www.vulnscan.org/UnrealIrcd/unreal32docs.html címen.
* a www.vulnscan.org/UnrealIRCd/unreal32docs.html címen.
* Rengeteg információt tartalmaz a konfigurációs fájlról: tájékoztatást ad
* minden blokkról, változóról stb.
* Ha megpróbálod szerkeszteni ezt a fájlt anélkül, hogy megfelelően elolvastad
* volna a dokumentációt, jó eséllyel kanyarodsz a biztos kudarc felé!
*/
/* Megjegyzések típusai */
@@ -293,10 +295,10 @@ listen *:6667;
* options {
* (opciók ide*);
* };
* /* Ha SSL-t használunk, kiválaszthatjuk, milyen rejtjelező algoritmusok
* * legyenek használatban SSL módban. Listát kapunk az "openssl ciphers"
* * paranccsal. Az egyes rejtjeleket :-tal válasszuk el.
* */
* // Ha SSL-t használunk, kiválaszthatjuk, milyen rejtjelező algoritmusok
* // legyenek használatban SSL módban. Listát kapunk az "openssl ciphers"
* // paranccsal. Az egyes algoritmusokat :-tal válasszuk el.
*
* ciphers "DES-CBC3-MD5";
*
* };
@@ -520,6 +522,18 @@ alias "identify" {
type command;
};
/* Példa egy valódi álparancsra */
/* A /GLINEBOT parancsot leképezi arra, hogy /GLINE <paraméter> 2d stb... */
alias "glinebot" {
format ".+" {
command "gline";
type real;
parameters "%1 2d Botok tilosak ezen a szerveren, kérlek, olvasd el a faq-ot a http://www.example.com/faq/123 címen";
};
type command;
};
/*
* ÚJ: tld {}
@@ -710,11 +724,14 @@ set {
hiddenhost-prefix "rox";
/* prefix-quit "no"; */
/* Az álcázó kulcsoknak a hálózat minden szerverén azonosnak kell
* lenniük. Álcázott gazdanevek előállításában van szerepük, ezért
* lenniük. Az álcázott gazdanevek előállításában van szerepük, ezért
* legyenek titokban tartva! Mind 3 kulcs legyen egy-egy véletlenszerű
* sztring 5-100 karakterből (10-20 karakter kitűnő), valamint
* tartalmazniuk kell kisbetűket (a-z), nagybetűket (A-Z) és számokat
* (0-9) [ahogy az első kulcsos példában látható].
* TIPP: *NIX alatt az './unreal gencloak' parancsot futtatva
* a parancsértelmezőnkben, az Unreal 3 véletlen sztringet
* generál nekünk.
*/
cloak-keys {
"aoAr1HnR6gl3sJ7hVz4Zb7x4YwpW";
@@ -740,11 +757,6 @@ set {
modes-on-connect "+ixw";
modes-on-oper "+xwgs";
oper-auto-join "#operek";
dns {
nameserver 127.0.0.1;
timeout 2s;
retries 2;
};
options {
hide-ulines;
/* Itt engedélyezhetjük az ident ellenőrzést, ha szeretnénk */
@@ -778,8 +790,8 @@ set {
*/
oper-only-stats "okfGsMRUEelLCXzdD";
/* Elfojtás: ez a példa 60 másodpercenként (gazdánként) legfeljebb
* 3 kapcsolatot engedélyező korlátozást állít be. */
/* Elfojtás: ez a példa 60 másodpercenként legfeljebb 3 kapcsolódási
* kísérletet engedélyező korlátozást állít be (gazdánként). */
throttle {
connections 3;
period 60s;
@@ -804,8 +816,8 @@ set {
/*
* Problémák akadtak, vagy szükség van további segítségre?
* 1) www.vulnscan.org/UnrealIrcd/unreal32docs.html
* 2) www.vulnscan.org/UnrealIrcd/faq/ <- a kérdéseid 80%-át tartalmazza!
* 1) www.vulnscan.org/UnrealIRCd/unreal32docs.html
* 2) www.vulnscan.org/UnrealIRCd/faq/ <- a kérdéseid 80%-át tartalmazza!
* 3) Ha még mindig gondod van, felmehetsz az irc.ircsystems.net #unreal-support
* csatornájára. Fontos: kérjük, hogy előbb OLVASD EL A DOKUMENTÁCIÓT és
* a GYIK-ot!
+816
View File
@@ -0,0 +1,816 @@
/*
* example.conf door Daniel Hawton AKA Osiris (osiris@unrealircd.org).
* $Id$
* Vertaald door Mark
*
* Werkt voor Unreal3.2 en hoger
*
* Dit is de nieuwe example.conf. Het lijkt veel op C++.
* Het begin is wellicht moeilijk, maar met wat ervaring en lezen
* zul je het wel begrijpen.
*
* Kopieer dit bestand naar je hoofd UnrealIRCd dir en noem het 'unrealircd.conf'.
*
* OPMERKING: Alle regels, behalve de openings { regel, eindingen met een ;, dus
* ook de sluitende } regel. Commentaar regels worden door de IRCd niet verwerkt.
*
* LEES doc/unreal32docs.html! De online versie is tevens te bereiken op:
* www.vulnscan.org/UnrealIRCd/unreal32docs.html
* Er staat heel veel informatie in over het configbestand: informatie over
* elk block, variabele, etc..
* Wanneer je dit bestand aanpast zonder de documentatie grondig te lezen,
* zul je gegarandeerd falen!
*/
/* Type van commentaar */
#Commentaar type 1 (Shell type)
// Commentaar type 2(C++ style)
/* Commentaar type 3 (C Style) */
#Deze regels worden niet verwerkt door de IRCd.
/*
* UnrealIRCd ondersteunt modules, het laden van sommige is benodigd.
* Je hebt tenminste een commands module en een cloacking module nodig.
*/
/* VOOR *NIX, haal de commentaartekens weg bij de volgende 2 regels: */
//loadmodule "src/modules/commands.so";
//loadmodule "src/modules/cloak.so";
/* VOOR Windows, haal de commentaartekens weg bij de volgende 2 regels: */
//loadmodule "modules/commands.dll";
//loadmodule "modules/cloak.dll";
/*
* Je kan tevens andere configuratiebestanden toevoegen.
* help.conf bevat alle /helpop tekst. De badwords.*.conf
* bestanden bevatten alle badword instellingen voor mode +G..
* spamfilter.conf bevat enkele goede regels voor huidige trojans.
* Je wilt deze waarschijnlijk laden:
*/
include "help.conf";
include "badwords.channel.conf";
include "badwords.message.conf";
include "badwords.quit.conf";
include "spamfilter.conf";
/*
* NIEUW: me {}
* OUD: M:Line
* me {} definieert de naam, beschrijving en unreal numeriek voor deze server.
* De syntax is als volgt:
* me {
* name "server.naam";
* info "Server Beschrijving";
* numeric (server numeric*);
* };
* Waneer je servers linkt, mag de numeric niet door een andere server in gebruik zijn.
*/
me
{
name "irc.foonet.com";
info "FooNet Server";
numeric 1;
};
/*
* NIEUW: admin {}
* OUD: A:Line
* Admin geeft informatie over de server admin. Je mag hier
* zo veel regels opgeven als je wilt.
* De syntax is als volgt:
* admin {
* "eerste regel";
* "tweede regel";
* [etc]
* };
*/
admin {
"Bob Smith";
"bob";
"widely@used.name";
};
/*
* NIEUW: class {}
* OUD: Y:line (de oude was verwarrend)
* Hiermee stel je de classes in. Een class is een groepsinstelling voor
* connections. Server connecties stuur je naar een andere class dan
* gebruikers.
* De syntax is als volgt:
* class (class naam)
* {
* pingfreq (hoe vaak er gepingt moet worden naar een gebruiker/server in seconden);
* maxclients (hoeveel connecties er maximaal in deze class mogen zijn);
* sendq (maximale send queue voor 1 connectie);
* recvq (maximale receive queue voor 1 connectie [flood control]);
* };
*/
class clients
{
pingfreq 90;
maxclients 500;
sendq 100000;
recvq 8000;
};
class servers
{
pingfreq 90;
maxclients 10; /* Hoeveel servers we maximaal tegelijk gelinkt kunnen hebben */
sendq 1000000;
connfreq 100; /* Hoeveel seconden tussen een poging to verbinden */
};
/*
* NIEUW: allow {}
* OUD: I:Line
* Hiermee stel je het toestaan van connecties in.
* Gebruikers kunnen verbinden, en jij hebt wat controle en kan eventueel
* een wachtwoord instellen.
* De syntax is als volgt:
* allow {
* ip (ip mask dat toegestaan moet worden);
* hostname (host mask);
* class (class waarnaar ze gestuurd moeten worden [see class {}]);
* password "(wachtwoord)"; (optioneel)
* maxperip (hoeveel connecties per IP); (optioneel)
* };
*/
allow {
ip *@*;
hostname *@*;
class clients;
maxperip 5;
};
/* Allow met wachtwoord */
allow {
ip *@255.255.255.255;
hostname *@*.passworded.ugly.people;
class clients;
password "f00Ness";
maxperip 1;
};
/*
* NIEUW: allow channel {}
* OUD: chrestrict
* Geeft de mogelijkheid een kanaal te joinen,
* als uitzondering voor een deny channel {}
* De syntax is als volgt:
* allow channel {
* channel "kanaal naam";
* };
*/
allow channel {
channel "#WarezSucks";
};
/*
* NIEUW: oper {}
* OUD: O:Line
* Stelt een IRC Operator in
* IRC Operators zorgen voor orde op de server en zorgen er
* tevens voor dat de server verbonden blijft met het netwerk.
* De syntax is als volgt:
* oper (login) {
* class (class waarin ze geplaatst moeten worden.);
* from {
* userhost (ident@host);
* userhost (ident@host);
* };
* flags
* {
* (flags hier*);
* };
* OF
* flags "oud type flags, zoals OAaRD";
* };
*/
/* Voor een lange lijst van oper flags, zie doc/unreal32docs.html#operblock
* [wordt ten zeerste aangeraden te lezen!]
*/
oper bobsmith {
class clients;
from {
userhost bob@smithco.com;
};
password "f00";
flags
{
netadmin;
can_zline;
can_gzline;
can_gkline;
global;
};
};
/*
* NIEUW: listen {}
* OUD: P:Line
* Hiermee stel je een poort in voor de IRCd, zodat
* gebruikers/servers kunnen verbinden met je server.
* De syntax is als volgt:
* listen (ip nummer):(port nummer)
* {
* options {
* (opties hier);
* };
* };
* of een gewone:
* listen: listen (ip):(port);
*
* OPMERKING: voor IPv6 IPs (3ffe:b80:2:51d::2 etc), gebruik listen [ip]:port;
*
* Dat werkt ook.
*/
/* Opties voor listen:
OUD | NIEUW
S serversonly
C clientsonly
J java
s ssl
* standard
*/
/* Opmerking voor SSL poorten: SSL poorten zijn niet echt
* standaard. Mensen zeggen dat je SSL op poort 994 moet laten
* lopen, omdat dit de standaard SSL poort is.. Maar meestal worden
* hogere poorten gebruikt. Om poort 994 te gebruiken, moet je root
* zijn! Tevens is poort 194 de officiele IRC poort. Maar heb je daar
* ooit een IRCd op zien lopen?
* Wij raden je aan om poort 6697 voor SSL te gebruiken. Dit wordt op
* vrijwel alle netwerken gebruikt en wordt herkend door bijvoorbeeld
* StunTour. Je mag zoveel SSL poorten openen als je wil, maar als je
* (tevens) 6697 gebruikt, help je mee de wereld meer uniform te maken ;).
*/
listen *:6697
{
options
{
ssl;
clientsonly;
};
};
listen *:8067;
listen *:6667;
/* Opmerking: Als je een IRCd shell gebruikt met meerdere IPs, krijg
* je wellicht een "Address already in use" error in je log
* en de IRCd zal niet starten. Dit betekent dat je MOET binden
* naar een specifiek IP in plaats van '*', bijvoorbeeld:
* listen 1.2.3.4:6667l
* Natuurlijk moet je het IP vervangen door het IP dat je toewezen is.
*/
/*
* NIEUW: link {}
* OUD: C/N:Lines
* Geeft een server toegang om te verbinden.
* OPMERKING: Beiden servers hebben een link { } nodig om goed te kunnen verbinden!
* De syntax is als volgt:
* link (server naam)
* {
* username (username, * werkt ook);
* hostname (ip number/hostmask);
* bind-ip (welk IP te binden wanneer je connect, of *);
* port (poort om naar te verbinden);
* hub (Als dit een hub is, werkt '*');
* [of leaf *;]
* password-connect "(wachtwoord te zenden)";
* password-receive "(wachtwoord te ontvangen)";
* class (class waarin de server geplaatst moet worden);
* options {
* (opties hier*);
* };
* // Als we SSL gebruiken, kunnen we kiezen welke cipher we willen gebruiken in SSL mode
* // Verkrijg een lijst door "openssl ciphers", onderscheid ciphers met :'s
* ciphers "DES-CBC3-MD5";
*
* };
*/
/*
opties:
OUD | NIEUW
S ssl
Z zip
N/A autoconnect
N/A quarantine
N/A nodnscache
*/
link hub.mynet.com
{
username *;
hostname 1.2.3.4;
bind-ip *;
port 7029;
hub *;
password-connect "LiNk";
password-receive "LiNk";
class servers;
options {
/* Opmerking: Gebruik geen autoconnect naar Services */
autoconnect;
ssl;
zip;
};
};
/*
*
* NIEUW: ulines {}
* OUD: U:Line
* U:Lines geven servers meer macht/commando's. Gebruik het alleen voor
* services en stats, en NOOIT voor normale UnrealIRCd servers!
* De syntax is als volgt:
* ulines {
* (server to uline);
* (server to uline);
* [etc]
* };
*/
ulines {
services.roxnet.org;
stats.roxnet.org;
};
/*
* NIEUW: drpass {}
* OUD: X:Line
* Stelt de wachtwoorden voor /die en /restart in.
* De syntax is als volgt:
* drpass {
* restart "(wachtwoord voor herstart)";
* die "(wachtwoord voor beeindigen)";
* };
*/
drpass {
restart "I-love-to-restart";
die "die-you-stupid";
};
/*
* NIEUW: log {}
* OUD: N/A
* Laat de IRCd weten wat en waar te loggen. Je kan er
* zoveel instellen als je wilt.
*
* FLAGS: errors, kills, tkl, connects, server-connects, kline, oper
*
* De syntax is als volgt:
*
* log "log file"
* {
* flags
* {
* flag;
* flag;
* etc..
* };
* };
*/
log "ircd.log" {
/* Verwijder het logbestand en begint een nieuwe wanneer de oude 2MB groot is. Laat dit leeg om altijd
hetzelfde bestand te gebruiken */
maxsize 2097152;
flags {
oper;
kline;
connects;
server-connects;
kills;
errors;
sadmin-commands;
chg-commands;
oper-override;
spamfilter;
};
};
/*
* NIEUW: alias {}
* OUD: N/A
* Hiermee stel je commando's zoals /nickserv, /chanserv etc in.
* FLAGS: services, stats, normal
*
* De syntax is als volgt:
* alias "naam" {
* target "wijst naar";
* type aliastype;
* };
*
* [Opmerking: Je kan ook een standaard alias bestand gebruiken, zie doc/unreal32docs.nl.html sectie 2.9]
*/
// Dit wijst het commando /nickserv naar de gebruiker NickServ welke verbonden is met set::services-server
/*alias NickServ {
target "NickServ";
type services;
};*/
// Als je het commando naar dezelfde nick als het commando wil sturen, kun je "target" weglaten.
//alias ChanServ { type services; };
// Wijst het /statserv commando naar de gebruiker Statserv verbonden met set::stats-server
//alias StatServ { type stats; };
// Wijst het /superbot commando naar de gebruiker SuperBot
//alias SuperBot { type normal; };
/* Standaard aliases */
alias NickServ { type services; };
alias ChanServ { type services; };
alias OperServ { type services; };
alias HelpServ { type services; };
alias StatServ { type stats; };
/*
* NIEUW: alias {}
* OUD: N/A
* Hiermee stel je commando's zoals /identify, /services in.
*
* De syntax is als volgt:
* alias "naam" {
* format "format string" {
* target "wijst naar";
* type aliastype;
* parameters "parameters te verzenden";
* };
* type command;
* };
*/
/* Hier wordt apart notitie van gemaakt, hoewel het dezelfde naam heeft als het vorige block. Het verschilt veel
* in syntax, maar het maakt gebruik van dezelfde functies.
*/
/*
alias "identify" {
format "^#" {
target "chanserv";
type services;
parameters "IDENTIFY %1-";
};
format "^[^#]" {
target "nickserv";
type services;
parameters "IDENTIFY %1-";
};
type command;
};
*/
/* De alias::format is een reguliere expressie. Het eerste formaat matcht het /identify commando wanneer
* het eerste teken een # is. Daarna wordt het doorgezonden naar de chanserv alias met de parameters
* IDENTIFY %1-. Het tweede formaat matcht het /identify commando wanneer het eerste teken geen # is. Daarna
* wordt het commando doorgestuurd naar de nickserv alias met de parameters IDENTIFY %1-.
*/
/* Het alias::format::parameters is gelijk aan script-talen. %N (N is een nummer) staat voor de parameter die
* gezonden is naar het commando (in dit geval /identify). Wanneer je %N- opgeeft, betekent dat alle parameters
* vanaf N tot de laatste paramater in de string. Je kan ook %n gebruiken, waar %n vervangen wordt door de nick.
*/
/* Standaard aliases */
alias "services" {
format "^#" {
target "chanserv";
type services;
parameters "%1-";
};
format "^[^#]" {
target "nickserv";
type services;
parameters "%1-";
};
type command;
};
alias "identify" {
format "^#" {
target "chanserv";
type services;
parameters "IDENTIFY %1-";
};
format "^[^#]" {
target "nickserv";
type services;
parameters "IDENTIFY %1-";
};
type command;
};
/* Dit is een voorbeeld van een echt commando alias */
/* Dit verwijst /GLINEBOT naar /GLINE <parameter> 2d etc... */
alias "glinebot" {
format ".+" {
command "gline";
type real;
parameters "%1 2d Bots are not allowed on this server, please read the faq at http://www.example.com/faq/123";
};
type command;
};
/*
* NIEUW: tld {}
* OUD: T:Line
* Hiermee stel je verschillende MOTD en RULES bestanden in,
* afhangend van de gebruikers hostmask.
* De syntax is als volgt:
* tld {
* mask (ident@host);
* motd "(motd bestand)";
* rules "(rules bestand)";
* };
*/
tld {
mask *@*.fr;
motd "ircd.motd.fr";
rules "ircd.rules.fr";
};
/* Opmerking: je kan het bovenstaande voorbeeld verwijderen.
* In dat geval worden de standaard motd/rules bestanden (ircd.motd, ircd.rules).
* gebruikt voor iedereen.
*/
/*
* NIEUW: ban nick {}
* OUD: Q:Line
* Bant een nickname zodat deze niet gebruikt kan worden.
* De syntax is als volgt:
* ban nick {
* mask "(nick om te bannen)";
* reason "(reden)";
* };
*/
ban nick {
mask "*C*h*a*n*S*e*r*v*";
reason "Reserved for Services";
};
/*
* NIEUW: ban ip {}
* OUD: Z:Line
* Bant een IP van de server
* De syntax is als volgt:
* ban ip {
* mask (ip number/hostmask);
* reason "(reden)";
* };
*/
ban ip {
mask 195.86.232.81;
reason "Delinked server";
};
/*
* NIEUW: ban server {}
* OUD: Server Q:Line
* Zorgt ervoor dat een server niet kan verbinden met het netwerk.
* Als de server naar een andere server linkt, zal de lokale server
* de verbinding met het netwerk verbreken.
* De syntax is als volgt:
* ban server {
* mask "(server naam)";
* reason "(reden)";
* };
*/
ban server {
mask eris.berkeley.edu;
reason "Get out of here.";
};
/*
* NIEUW: ban user {}
* OUD: K:Line
* Zorgt ervoor dat een gebruiker met een bepaalde mask niet
* kan verbinden met je server.
* De syntax is als volgt:
* ban user {
* mask (hostmask/ip number);
* reason "(reden)";
* };
*/
ban user {
mask *tirc@*.saturn.bbn.com;
reason "Idiot";
};
/*
* NIEUW: ban realname {}
* OUD: n:Line
* Belet het gebruik van een bepaalde realname.
* De syntax is als volgt:
* ban realname {
* mask "(real name)";
* reason "(reden)";
* };
*/
ban realname {
mask "Swat Team";
reason "mIRKFORCE";
};
ban realname {
mask "sub7server";
reason "sub7";
};
/*
* OPMERKING VOOR ALLE BANS: Ze mogen herhaald worden voor extra toevoegingen!
*
* NIEUW: except ban {}
* OUD: E:Line
* Zorgt ervoor dat jij niet gebanned kan worden.
* De syntax is als volgt:
* except ban { mask (ident@host); };
* Herhaal de except ban {} zo vaak als je wilt
* voor andere hosts.
*/
except ban {
/* don't ban stskeeps */
mask *stskeeps@212.*;
};
/*
* NIEUW: deny dcc {}
* OUD: dccdeny.conf
* Wordt gebruikt om DCC sends te blokkeren..
* Stopt virii beter.
* De syntax is als volgt:
* deny dcc
* {
* filename "bestand te blokkeren (bv, *exe)";
* reason "reden";
* };
*/
deny dcc {
filename "*sub7*";
reason "Possible Sub7 Virus";
};
/*
* NIEUW: deny channel {}
* OUD: N/A (NIEUW)
* Belet het gebruik van een kanaal.
* De syntax is als volgt:
* deny channel {
* channel "(kanaal)";
* reason "reden";
* };
*/
deny channel {
channel "*warez*";
reason "Warez is illegal";
};
/*
* NIEUW: vhost {}
* OUD: Vhost.conf file
* Dit zet een nep ip voor niet-opers, of voor opers
* die te lui zijn /sethost te gebruiken ;)
* De syntax is als volgt:
* vhost {
* vhost (vhost.com);
* from {
* userhost (ident@host toegestaan de vhost te gebruiken);
* };
* login (login name);
* password (password);
* };
* Om je vhost te gebruiken, typ /vhost (login) (password) op IRC
*/
vhost {
vhost i.hate.microsefrs.com;
from {
userhost *@*.image.dk;
};
login stskeeps;
password moocowsrulemyworld;
};
/* Je kan ook andere configuratiebestanden laden */
/* include "klines.conf"; */
/* Netwerk configuratie */
set {
network-name "ROXnet";
default-server "irc.roxnet.org";
services-server "services.roxnet.org";
stats-server "stats.roxnet.org";
help-channel "#ROXnet";
hiddenhost-prefix "rox";
/* prefix-quit "no"; */
/* Cloak keys moeten op alle servers in het netwerk hetzelfde zijn.
* Ze worden gebruikt voor het maken van gemaskte hosts en moeten geheim blijven.
* De keys moeten 3 willekeurige strings zijn, bestaande uit 5-100 tekens
* (10-20 tekens is genoeg) en moeten bestaan uit kleine letters (a-z),
* hoofdletters (A-Z) en getallen (0-9) [zie de eerste key als voorbeeld].
* Tip: Wanneer je met een *NIX systeem werkt, kun je './unreal gencloak' gebruiken in
* je shell. Dit genereert 3 willekeurige strings die je kunt gebruiken.
*/
cloak-keys {
"aoAr1HnR6gl3sJ7hVz4Zb7x4YwpW";
"en nog eentje";
"en nog eentje";
};
/* on-oper host */
hosts {
local "locop.roxnet.org";
global "ircop.roxnet.org";
coadmin "coadmin.roxnet.org";
admin "admin.roxnet.org";
servicesadmin "csops.roxnet.org";
netadmin "netadmin.roxnet.org";
host-on-oper-up "no";
};
};
/* Server gerelateerde configuratie */
set {
kline-address "stel.dit.adres.in";
modes-on-connect "+ixw";
modes-on-oper "+xwgs";
oper-auto-join "#opers";
options {
hide-ulines;
/* Je kan hier ident checking aanzetten als je wilt */
/* identd-check; */
show-connect-info;
};
maxchannelsperuser 10;
/* Hoelang een gebruiker minimaal verbonden moet zijn voordat hij toegestaan wordt het
* QUIT bericht te gebruiken. Dit stopt spam hopelijk. */
anti-spam-quit-message-time 10s;
/* Stelt een tekst in die standaard wordt gebruikt voor een quit.
* Houdt in dat er geen eigen quits gebruikt mogen worden op deze server. */
/* static-quit "Client quit"; */
/* Je kan ook alle part-redenen blokkeren door hieronder het commentaar weg te halen
* en er 'yes' neer te zetten. Je kan ook een standaard tekst gebruiken (bijvoorbeeld
* "Bye bye!") om deze tekst altijd te gebruiken..
*/
/* static-part yes; */
/* Stelt in dat stats alleen door opers gebruikt mogen worden. Gebruik * voor alle stats,
* en laat het weg zodat gebruikers alle stats kunnen zien. Typ '/stats' voor een lijst
* van alle stats.
* Sommige admins willen 'kGs' wellicht verwijderen zodat gewone gebruikers een lijst van
* klines, glines en shunts kunnen zien.
*/
oper-only-stats "okfGsMRUEelLCXzdD";
/* Throttle: dit voorbeeld zet een limie van 3 conneties per 60s (per host). */
throttle {
connections 3;
period 60s;
};
/* Anti flood protectie */
anti-flood {
nick-flood 3:60; /* 3 naamsveranderingen per 60 seconden (standaard) */
};
/* Spam filter */
spamfilter {
ban-time 1d; /* standaard duur van een *line gezet door spamfilter */
ban-reason "Spam/Advertising"; /* standaard reden */
virus-help-channel "#help"; /* kanaal te gebruiken voor 'viruschan' actie */
/* except "#help"; kanaal waar niet gefilterd wordt */
};
};
/*
* Problemen of meer hulp nodig?
* 1) www.vulnscan.org/UnrealIRCd/unreal32docs.html
* 2) www.vulnscan.org/UnrealIRCd/faq/ <- hier staat 80% van je vragen!
* 3) Als je nog steeds problemen hebt, kun je naar irc.ircsystems.net #unreal-support,
maar je moet wel eerst de documentatie en FAQ gelezen hebben!
*/
+792
View File
@@ -0,0 +1,792 @@
/*
* example.conf by Daniel Hawton AKA Osiris (osiris@unrealircd.org).
* example.ru.conf by Samets Anton aka Bock (bock@bynets.org).
* $Id$
*
* (Encoding): Windows-1251
*
* Работает для Unreal3.2 и выше
*
* Итак, это русскоязычный пример example.conf. По синтаксису похож на C++.
* По началу будет тяжело понять, что тут написано, однако во время практики и чтения
* вы научитесь это делать.
*
* Просто скопируйте этот файл в главную директорию unrealircd и переименуйте в 'unrealircd.conf'.
*
* Замечание: Все линии, кроме тех, которые начинаются с {, заканчиваются ; включая и закрывающую }.
* IRCd проигнорирует закомментированные линии.
*
* ПРОЧТИТЕ doc/unreal32docs.ru.html! Версия в интернете доступна по адресу:
* www.vulnscan.org/UnrealIRCd/unreal32docs.ru.html
* Она содержит большинство информации о конфигурировании, даёт представление о каждом блоке,
* переменной и так далее...
* Если вы пытаетесь редактировать этот файл без прочтения документации, вы гарантированно
* потерпите неудачу!
*/
/* Типы комментариев */
# Первый тип (Shell type)
// Второй тип (C++ style)
/* Третий тип (C Style) */
# данные линии игнорируются ircd.
/*
* UnrealIRCd поддерживает модули, загрузка некоторых необходима для запуска.
* Вам необходимо загрузить как минимум модули команд и скрытия хоста.
*/
/* Для *NIX систем раскомментируйте следующие 2 линии: */
//loadmodule "src/modules/commands.so";
//loadmodule "src/modules/cloak.so";
/* Для Windows систем раскомментируйте следующие 2 линии: */
//loadmodule "modules/commands.dll";
//loadmodule "modules/cloak.dll";
/*
* Вам необходимо подключить и другие конфигурационные файлы.
* help.ru.conf содержит весь текст команды /helpop. Файлы badwords.*.conf
* содержат все включения матных слов для режима +G...
* spamfilter.conf содержит правила для защиты от троянских коней.
* Вы вероятно захотите подключить эти файлы:
*/
include "help.ru.conf";
include "badwords.channel.conf";
include "badwords.message.conf";
include "badwords.quit.conf";
include "spamfilter.conf";
/*
* НОВОЕ: me {}
* СТАРОЕ: M:Line
* me {} определяет имя, описание и нумерик сервера unreal для данного сервера.
* Синтаксис:
* me {
* name "Имя.сервера";
* info "Описание сервера";
* numeric (нумерик сервера*);
* };
* При соединении с другими серверами, нумерик должен быть уникальным в сети. Имя сервера - англоязычное.
*/
me
{
name "irc.foonet.com";
info "Сервер FooNet";
numeric 1;
};
/*
* НОВОЕ: admin {}
* СТАРОЕ: A:Line
* Данный блок предоставляет информацию об администраторе сервера.
* Вы можете поместить сколько угодно линий после admin {.
* Синтаксис:
* admin {
* "первая линия";
* "вторая линия";
* [так далее]
* };
*/
admin {
"Вася Пупкин!";
"vasya_pupkin";
"haker@lamer.ru";
"ICQ: 987654321";
};
/*
* НОВОЕ: class {}
* СТАРОЕ: Y:line (был слишком запутан)
* Определяет настройки для классов. Класс определяет групповые настройки для подключений.
* Например, подключение сервера, вместо включения его в класс пользователей, вы направляете в
* класс серверов. Используется следующий синтаксис:
* class (имя класса)
* {
* pingfreq (как часто пиновать пользователя/сервер в секундах);
* maxclients (сколько максимально соединений разрешено данному классу);
* sendq (максимальная очередь для отправки от подключения);
* recvq (максимальная очередь для получения от подключения [контроль за флудом]);
* };
*/
class clients
{
pingfreq 90;
maxclients 500;
sendq 100000;
recvq 8000;
};
class servers
{
pingfreq 90;
maxclients 10; /* Какое максимальное количество серверов может быть прилинковано к этому серверу */
sendq 1000000;
connfreq 100; /* Через сколько секунд проводить следующую попытку подключения */
};
/*
* НОВОЕ: allow {}
* СТАРОЕ: I:Line
* Определяет, кому разрешено подключаться к серверу...
* В основном используется для клиентов, это разрешает им подключаться к серверу, а вы можете их контролировать
* и/или устанавивать пароль.
* Синтаксис:
* allow {
* ip (разрешённая маска ip);
* hostname (маска хоста);
* class (класс, в который определить[смотри class {}]);
* password "(пароль)"; (необязательно)
* maxperip (сколько подключений с одного ip); (необязательно)
* };
*/
allow {
ip *@*;
hostname *@*;
class clients;
maxperip 5;
};
/* Разрешение подключения с паролем */
allow {
ip *@255.255.255.255;
hostname *@*.passworded.ugly.people;
class clients;
password "аццкип0р0ль";
maxperip 1;
};
/*
* НОВОЕ: allow channel {}
* СТАРОЕ: chrestrict
* Позволяет пользователю зайти на канал...
* служит как исключение из запрещённых каналов.
* Синтаксис:
* allow channel {
* channel "имя канала";
* };
*/
allow channel {
channel "#WarezSucks";
};
/*
* НОВОЕ: oper {}
* СТАРОЕ: O:Line
* Определяет IRC оператора
* IRC операторы следят за сервером, занимаются его поддержкой и подключением к сети.
* Синтаксис:
* oper (логин) {
* class (класс, в который определять их, если отличен от блока I, в какой класс переместить);
* from {
* userhost (идент@хост);
* userhost (идент@хост);
* };
* flags
* {
* (тут флаги*);
* };
* ИЛИ
* flags "флаги старого типа, вида OAaRD";
* };
*/
/* Для списка флагов оператора прочитайте doc/unreal32docs.ru.html#operblock
* [ОЧЕНЬ НАСТОЯТЕЛЬНО рекомендуется к прочтения]
*/
oper vasyapupkin {
class clients;
from {
userhost vasya@somewhere.by;
};
password "p0r0l'";
flags
{
netadmin;
can_zline;
can_gzline;
can_gkline;
global;
};
};
/*
* НОВОЕ: listen {}
* СТАРОЕ: P:Line
* Определяет, на каких портах будет работать ircd,
* позволяя пользователям/серверам подключаться к серверу.
* Синтаксис:
* listen (ip):(номер порта)
* {
* options {
* (тут опции);
* };
* };
* или просто
* listen: listen (ip):(порт);
*
* ЗАМЕЧАНИЕ: для протокола ip v6 (3ffe:b80:2:51d::2), используйте [ip]:порт;
*
* Это так же будет работать.
*/
/* Опции для listen:
СТАРЫЕ | НОВЫЕ
S serversonly
C clientsonly
J java
s ssl
* standard
*/
/* ЗАМЕЧАНИЕ ДЛЯ ПОРТОВ SSL: SSL порты стандартизированы,
* за исключением многочисленных "высоких" портов SSL, некоторые люди могут сказать вам,
* чтобы вы запустили на порту 994, потому что он официальный порт SSL... Но это же
* требует привилегий пользователя root! К слову, порт 194 - официальный порт irc,
* но вы видели когда-нибудь ircd, запущенный на нём?
* Итак, наше предложение - использовать порт 6697 для SSL, он используется уже рядом сетей
* и используется в примере StunTour.
* Вы можете открыть сколько угодно портов SSL, но используя так же и 6697, вы поможете
* стандартизировать его;).
*/
listen *:6697
{
options
{
ssl;
clientsonly;
};
};
listen *:8067;
listen *:6667;
/* ЗАМЕЧАНИЕ: Если вы используете шелл IRCd, где несколько IP адресов, вы можете получить сообщение типа
* 'Address already in use', ошибки в вашем лог-файле и ircd не запустится.
* Это значит, что вам необходимо указать определённый адрес IP вместо '*', к примеру:
* listen 1.2.3.4:6667;
* Конечно же, измените IP адрес на тот, который назначен вам.
*/
/*
* НОВОЕ: link {}
* СТАРОЕ: C/N:Lines
* Определяет блок для подключения серверов.
* ЗАМЕЧАНИЕ: ЧТОБЫ ПОДКЛЮЧИТЬСЯ БЕЗ ВОПРОСОВ, НА ОБОИХ СЕРВЕРАХ НЕОБХОДИМЫ ПРАВИЛЬНЫЕ НАСТРОЙКИ LINK {}!
* Синтаксис:
* link (имя сервера)
* {
* username (имя пользователя, * работает тоже);
* hostname (адрес ip/маска хоста);
* bind-ip (На каком адресе IP слушать или *);
* port (порт для соединения);
* hub (если это хаб, * так же работает, или макси сервера, которые могут быть под ним);
* [или leaf *;]
* password-connect "(пароль для отправки)";
* password-receive "(пароль, что мы должны получить)";
* class (класс, в который определить сервер);
* options {
* (тут указываются опции*);
* };
* // Если мы используем SSL, мы можем указать, какой шифр использовать в режиме SSL
* // Получить список можно "openssl ciphers", шифры разделяются двоеточиями (:)
*
* ciphers "DES-CBC3-MD5";
*
* };
*/
/*
опции:
СТАРЫЕ | НОВЫЕ
S ssl
Z zip
N/A autoconnect
N/A quarantine
N/A nodnscache
*/
link hub.ru.by
{
username *;
hostname 1.2.3.4;
bind-ip *;
port 7029;
hub *;
password-connect "LiNk";
password-receive "LiNk";
class servers;
options {
/* Замечание: Вы не должны использовать автоподключение (autoconnect) при подключении сервисов */
autoconnect;
ssl;
zip;
};
};
/*
*
* НОВОЕ: ulines {}
* СТАРОЕ: U:Line
* U-lines обладают большей силой/властью, чем другие сервера. Это нужно устанавливать только на
* сервисы/сервера сбора статистики и НИКОГДА на обычные сервера UnrealIRCd!
* Синтаксис:
* ulines {
* (сервер в uline);
* (сервер в uline);
* [и т.д.]
* };
*/
ulines {
services.roxnet.org;
stats.roxnet.org;
};
/*
* НОВОЕ: drpass {}
* СТАРОЕ: X:Line
* Определяет пароли для использования команд /die и /restart.
* Синтаксис:
* drpass {
* restart "(пароль для перезапуска)";
* die "(пароль для отключения)";
* };
*/
drpass {
restart "Я-люблю-перезапускать-сервер";
die "умри-тупое!:)";
};
/*
* НОВОЕ: log {}
* СТАРОЕ: N/A
* Указыает ircd куда и что протоколировать (вести лог). Вы можете указать столько, сколько пожелаете.
*
* ФЛАГИ: errors, kills, tkl, connects, server-connects, kline, oper
*
* Синтаксис:
* log "путь_к_лог_файлу"
* {
* flags
* {
* flag;
* flag;
* etc..
* };
* };
*/
log "ircd.log" {
/* Удалять логфайл и старовать новый, если размер превышает 2MB, оставьте это как есть, чтобы использовать
тот же самый файл */
maxsize 2097152;
flags {
oper;
kline;
connects;
server-connects;
kills;
errors;
sadmin-commands;
chg-commands;
oper-override;
spamfilter;
};
};
/*
* НОВОЕ: alias {}
* СТАРОЕ: N/A
* Позволяет установить вам псевдонимы на команды, такие как /nickserv, /chanserv и т.д.
* ФЛАГИ: services, stats, normal
*
* Синтаксис:
* alias "имя" {
* target "куда направить";
* type aliastype;
* };
*
* [ЗАМЕЧАНИЕ: Вы так же можете подключить уже определённый файл с псевдонимами,подробнее doc/unreal32docs.ru.html в секции 2.9]
*/
// Данный псевдноним /nickserv направляет команды пользователю NickServ, который подключён к серверу set::services-server
/*alias NickServ {
target "NickServ";
type services;
};*/
// Если вы хотите, чтобы команды направлялись на тот же ник, что и команда, вы можете не указывать target
//alias ChanServ { type services; };
// Указывает, что команда /statserv будет отправлена пользователю StatServ, подключённого к серверу set::stats-server
//alias StatServ { type stats; };
// Указывает, что команда /superbot будет отправлена пользователю SuperBot
//alias SuperBot { type normal; };
/* Стандартные псевдонимы */
alias NickServ { type services; };
alias ChanServ { type services; };
alias OperServ { type services; };
alias HelpServ { type services; };
alias StatServ { type stats; };
/*
* НОВОЕ: alias {}
* СТАРОЕ: N/A
* Позволяет установить такие псевдонимы на команды как /identify, /services и т.д.
*
* Синтаксис:
* alias "имя" {
* format "строка формата" {
* target "кому";
* type aliastype;
* parameters "список параметров";
* };
* type command;
* };
*/
/* Вынесено отдельно, так как имеются отличия по сравнению с предыдущим типом псевдонимов и имеются очень большие отличия в
* синтаксисе, так же используется для других целей, чем стандартные псевдонимы.
*/
/*
alias "identify" {
format "^#" {
target "chanserv";
type services;
parameters "IDENTIFY %1-";
};
format "^[^#]" {
target "nickserv";
type services;
parameters "IDENTIFY %1-";
};
type command;
};
*/
/* Директива alias::format является регулярным выражением. Под первый формат подпадает команда /identify,
* если первым символом является #. Она посылает команду chanserv с параметрами IDENTIFY %1-.
* Второй формат срабатывает, если в команде, посланной посредством /identify первый символ не #. Тогда ircd
* передаёт эту команду nickserv с параметрами IDENTIFY %1-.
*/
/* alias::format::parameters сходно со скриптовыми языками. %N (где N число) представляет собой параметр, посланный командой
* (в случае /identify). Если вы указали %N-, так вы определили все параметры, начиная от N до последнего в этой строке.
* Вы можете так же указать %n, что будет означать ник пользователя.
*/
/* Стандартные псевдонимы */
alias "services" {
format "^#" {
target "chanserv";
type services;
parameters "%1-";
};
format "^[^#]" {
target "nickserv";
type services;
parameters "%1-";
};
type command;
};
alias "identify" {
format "^#" {
target "chanserv";
type services;
parameters "IDENTIFY %1-";
};
format "^[^#]" {
target "nickserv";
type services;
parameters "IDENTIFY %1-";
};
type command;
};
/* Тут идёт пример использования "действительно псевдонима" (real command alias) */
/* Данный пример - использование /GLINEBOT как /GLINE <параметры> 2d и т.д... */
alias "glinebot" {
format ".+" {
command "gline";
type real;
parameters "%1 2d Боты запрещены на этом сервере, прочитайте ЧаВО на http://www.example.com/faq/123";
};
type command;
};
/*
* НОВОЕ: tld {}
* СТАРОЕ: T:Line
* Устанавливает различные different motd и rules файлы
* в зависимости от маски хостов клиентов.
* Синтаксис:
* tld {
* mask (идент@хост);
* motd "(файл motd)";
* rules "(файл rules)";
* };
*/
tld {
mask *@*.ru;
motd "ircd.motd.ru";
rules "ircd.rules.ru";
};
/* замечание: вы можете просто удалить блок выше, указанный для примера в случае, если есть в наличии
* файлы motd/rules, используемые по умолчанию (ircd.motd, ircd.rules), которые будут использоваться всеми
*/
/*
* НОВОЕ: ban nick {}
* СТАРОЕ: Q:Line
* Банит ник, он не может быть использован.
* Синтаксис:
* ban nick {
* mask "(ник для бана)";
* reason "(причина)";
* };
*/
ban nick {
mask "*C*h*a*n*S*e*r*v*";
reason "Зарезервирован для сервисов";
};
/*
* НОВОЕ: ban ip {}
* СТАРОЕ: Z:Line
* Банит адрес ip при подключении в сеть.
* Синтаксис:
* ban ip { mask (адрес ip/маска хоста); reason "(причина)"; };
*/
ban ip {
mask 195.86.232.81;
reason "Отключённый сервер";
};
/*
* НОВОЕ: ban server {}
* СТАРОЕ: Серверный Q:Line
* Отключает сервер от попыток подключиться в сеть.
* Если сервер подключается к удалённому серверу в сети, локальный сервер
* будет отключён он сети.
* Синтаксис:
* ban server {
* mask "(имя сервера)";
* reason "(причина)";
* };
*/
ban server {
mask eris.berkeley.edu;
reason "Ламерский сервер :).";
};
/*
* НОВОЕ: ban user {}
* СТАРОЕ: K:Line
* Пользователь с указанной маской не может подключиться к вашему серверу.
* Синтаксис:
* ban user { mask (маска хоста/адрес ip); reason "(причина)"; };
*/
ban user {
mask *newiceman@*.irc.by;
reason "Идиот!";
};
/*
* НОВОЕ: ban realname {}
* СТАРОЕ: n:Line
* Банит по указанному пользователем реальному имени.
* Синтаксис:
* ban realname {
* mask "(Реальное имя)";
* reason "(причина)";
* };
*/
ban realname {
mask "Swat Team";
reason "mIRKFORCE";
};
ban realname {
mask "sub7server";
reason "sub7";
};
/*
* ЗАМЕЧАНИЕ ДЛЯ ВСЕХ БАНОВ: они могут повторятся в случае необходимости уточнений!
*
* НОВОЕ: except ban {}
* СТАРОЕ: E:Line
* Предотвращает бан.
* Синтаксис:
* except ban { mask (идент@хост); };
* Повторите except ban {} столько раз, сколько хотите использовать различные хосты.
*/
except ban {
/* не банить wax */
mask *wax@195.222.*;
};
/*
* НОВОЕ: deny dcc {}
* СТАРОЕ: dccdeny.conf
* Используется чтобы запретить отправку dcc... служит для защиты от вирусов
* Синтаксис:
* deny dcc
* {
* filename "имя файла для блокироваки (т.е. *exe)";
* reason "причина";
* };
*/
deny dcc {
filename "*sub7*";
reason "Вероятность вируса Sub7";
};
/*
* НОВОЕ: deny channel {}
* СТАРОЕ: N/A (НОВОЕ)
* Запрещает вход на указанные каналы.
* Синтаксис:
* deny channel {
* channel "(канал)";
* reason "причина";
* };
*/
deny channel {
channel "*warez*";
reason "Warez нелегален";
};
/*
* НОВОЕ: vhost {}
* СТАРОЕ: файл Vhost.conf
* Устанавливает фейковый ip для не-операторов или операторы слишком
* ленивые, чтобы сделать /sethost :P
* Синтаксис:
* vhost {
* vhost (vhost.com);
* from {
* userhost (идент@хост, кому разрешено использовать);
* };
* login (логин);
* password (пароль);
* };
* чтобы использовать vhost, наберите /vhost (логин) (пароль) в IRC
*/
vhost {
vhost i.hate.microsefrs.com;
from {
userhost *@*.image.dk;
};
login stskeeps;
password moocowsrulemyworld;
};
/* Вы так же можете подключить и другие конфигурационные файлы */
/* include "klines.conf"; */
/* Конфигурация Сети */
set {
network-name "ROXnet";
default-server "irc.roxnet.org";
services-server "services.roxnet.org";
stats-server "stats.roxnet.org";
help-channel "#ROXnet";
hiddenhost-prefix "rox";
/* prefix-quit "no"; */
/* Ключи скрытия хостов должны быть одинаковы на всех серверах в сети.
* Они использутся для генерации замаскированных хостов и должны держаться в секрете.
* Ключи должен быть 3-мя случайными срочками с 5-100 символами в каждой
* (10-20 символов должно быть достаточно) и должны содержать прописные (a-z),
* заглавные (A-Z) буквы и цифрты (0-9) [смотрите пример первого ключа].
* Подсказка: В *NIX системах вы можете запустить './unreal gencloak' в вашем шелле, чтобы получить
* 3 строки, сгенерированные случайным образом.
*/
cloak-keys {
"aoAr1HnR6gl3sJ7hVz4Zb7x4YwpW";
"и ещё одна;
"и ещё одна";
};
/* хост on-oper */
hosts {
local "locop.roxnet.org";
global "ircop.roxnet.org";
coadmin "coadmin.roxnet.org";
admin "admin.roxnet.org";
servicesadmin "csops.roxnet.org";
netadmin "netadmin.roxnet.org";
host-on-oper-up "no";
};
};
/* Специфическая конфигурация сервера */
set {
kline-address "set.this.email";
modes-on-connect "+ixw";
modes-on-oper "+xwgs";
oper-auto-join "#opers";
options {
hide-ulines;
/* Если желаете, вы можете включить проверку ident */
/* identd-check; */
show-connect-info;
};
maxchannelsperuser 10;
/* Указывает минимальное время, сколько был подключен пользователь,
* прежде чем разрешать ему использовать сообщение QUIT.
* Должно помочь в борьбе со спамом */
anti-spam-quit-message-time 10s;
/* Устанавливает постоянное сообщение о выходе - значит, что локальный сервер не разрешит
различные сообщения о выходе */
/* static-quit "Клиент вышел"; */
/* Вы так же можете блокировать все сообщения о выходе из канала просто раскомментировав это и указать'yes'
* или указать какой-нибудь другой текст (например: "Пока пока!"), который всегда будет использован как причина. */
/* static-part yes; */
/* Позволяет сделать важные сообщения stats были использованы только операторами, используйте * для всех сообщений stats,
* или закомментируйте, что позволит пользователям видеть все сообщения stats. Чтобы получить весь список, введите '/stats'.
* Некоторые администраторы могут убрать 'kGs' для того, чтобы разрешить обычным пользователям видеть список
* klines, glines и shuns.
*/
oper-only-stats "okfGsMRUEelLCXzdD";
/* Тротлинг: данный пример устанавливает предел в 3 попытки подключения в 60 секунд (для одного хоста). */
throttle {
connections 3;
period 60s;
};
/* Защита от флуда */
anti-flood {
nick-flood 3:60; /* 3 изменения ника в 60 секунд (по умолчанию) */
};
/* Фильтр спама */
spamfilter {
ban-time 1d; /* длительность по умолчанию бана *line, установленного spamfilter */
ban-reason "Спам/Реклама"; /* причина по умолчанию */
virus-help-channel "#help"; /* канал при использовании действия 'viruschan' */
/* except "#help"; канал для исключения действия фильтра */
};
};
/*
* Проблемы или нуждаетесь в более подробной информации?
* 1) www.vulnscan.org/UnrealIRCd/unreal32docs.ru.html
* 2) www.vulnscan.org/UnrealIRCd/faq/ <- содержит 80% ваших вопросов!
* 3) Если у вас до сих пор остались проблемы, зайдите на irc.ircsystems.net #unreal-support,
* но мы требуем, чтобы вы ПРЕЖДЕ ПРОЧИТАЛИ ДОКУМЕНТАЦИЮ и ЧаВО!
*/
+787
View File
@@ -0,0 +1,787 @@
/*
* example.conf by Daniel Hawton AKA Osiris (osiris@unrealircd.org).
* $Id$
* Türkçe çeviri: Mustafa "Ironic" Cakmak (ironic@unrealircd.org)
*
* Unreal3.2 ve üstü sürümler için kullanılmaktadır
*
* Peki beyler. Bu example.conf dosyasının yenisi. C++ türüne çok benziyor.
* Neyse şimdi bunun üstesinden gelme zamanı. Başlangıçta zor gelebilir, fakat
* okuyarak ve biraz pratikle anlayacaksınız.
*
* Yapmanız gereken bu dosyayı ana dizine atıp, 'unrealircd.conf' olarak adlandırmak.
*
* NOTE: Bütün satırlar, açılış { satırı dışında, kapama } satırı dahil, sonunda ; taşır.
* IRCd açıklama satırlarını göz ardı edecektir.
*
* Lütfen doc/unreal32docs.tk.html dosyasını okuyunuz! Çevrimiçi sürümüne ulaşabileceğiniz adres:
* www.vulnscan.org/UnrealIRCd/unreal32docs.tk.html
* Yapılandırma dosyası hakkında bir çok bilgi içerir: Her blok,
* değişken vs.. hakkında bilgi verir.
* Eğer dökümantasyon dosyasını tam olarak okumadan bu dosyayı düzenlemeye kalkarsanız
* başarısız olacağınız oldukça yüksek bir oranda garanti edilir!
*/
/* Açıklama satırı çeşitleri */
#Açıklama satırı 1 (Shell tipi)
// Açıklama satırı 2 (C++ tipi)
/* Açıklama satırı satırı 3 (C tipi) */
#Bu satırlar ircd tarafından göz ardı edilecektir.
/*
* UnrealIRCd modülleri destekler, Bunların bazılarının yüklenmesi gereklidir.
* En azından komutlar modülü(commands) ve gizleme modülü(cloaking)'ne ihtiyacınız vardır.
*/
/* *NIX için, sonraki 2 satırın açıklama satıracını(//) kaldırın: */
//loadmodule "src/modules/commands.so";
//loadmodule "src/modules/cloak.so";
/* Windows için, sonraki 2 satırın açıklama satıracını(//) kaldırın: */
//loadmodule "modules/commands.dll";
//loadmodule "modules/cloak.dll";
/*
* Diğer yapılandırma dosyalarınıda dahil edebilirsiniz.
* help.conf bütün /helpop metinlerini içerir. +G kipi için badwords.*.conf
* dosyaları bütün kötü kelime girdilerini içerir...
* spamfilter.conf güncel trojanlar için uygun kuralları içerir.
* Muhtemelen bunları eklemek isteyeceksiniz:
*/
include "help.conf";
include "badwords.channel.conf";
include "badwords.message.conf";
include "badwords.quit.conf";
include "spamfilter.conf";
/*
* YENI: me {}
* ESKI: M:Line
* me {} bu sunucu için isim, tanımlama ve unreal sunucu sayısalını(numeric) belirler.
* Sözdizimi aşağıdaki gibidir:
* me {
* name "sunucu.ismi";
* info "Sunucu tanımlaması";
* numeric (sunucu sayısalı*);
* };
* Eğer link varsa, bu sayısal ağ üzerinde varolan herhangi bir server tarafından kullanılmamalıdır.
*/
me
{
name "irc.foonet.com";
info "FooNet Server";
numeric 1;
};
/*
* YENI: admin {}
* ESKI: A:Line
* Admin sunucu yöneticisine dair bilgi verir. Dilediğiniz kadar
* satırı admin { altına yerleştirebilirsiniz.
* Sözdizimi aşağıdaki gibidir:
* admin {
* "ilk satır";
* "ikinci satır";
* [vs]
* };
*/
admin {
"Bob Smith";
"bob";
"widely@used.name";
};
/*
* YENI: class {}
* ESKI: Y:line (eskisi karışıktı)
* Bu sınıflar için ayarları belirtir. Bir sınıf bağlantılar için bir grup
* ayarıdır. Örneğin, sunucu bağlantılarını, bir istemci sınıfı
* yerine, sunucu sınıfına yönlendirirsiniz. Sözdizimi aşağıdaki gibidir:
* class (class name)
* {
* pingfreq (ne sıklıkta saniye içerisinde kullanıcı veya sunucunun ping edileceği);
* maxclients (bu sınıf için kaç bağlantı);
* sendq (bir bağlantıdan gönderilecek en yüksek dizi);
* recvq (bir bağlantıdan alınacak en yüksek dizi [flood kontrolü]);
* };
*/
class clients
{
pingfreq 90;
maxclients 500;
sendq 100000;
recvq 8000;
};
class servers
{
pingfreq 90;
maxclients 10; /* Link edebileceğimiz en yüksek sunucu sayısı */
sendq 1000000;
connfreq 100; /* Her bağlantı girişimi arasında ne kadar saniye olacağı */
};
/*
* YENI: allow {}
* ESKI: I:Line
* Bağlantı izinlerini belirtir..
* Temel olarak istemcilerin sunucuya bağlanabilmesi için herhangi bir kontrol
* ve/veya bir şifre belirtmenize olanak sağlar.
* Sözdizimi aşağıdaki gibidir:
* allow {
* ip (izin verilecek ip maskesi);
* hostname (host maskesi);
* class (gönderilecek sınıf [class {} bloğuna göz atınız]);
* password "(şifre)"; (isteğe bağlı)
* maxperip (ip başına kabul edilecek bağlantı sayısı); (isteğe bağlı)
* };
*/
allow {
ip *@*;
hostname *@*;
class clients;
maxperip 5;
};
/* Şifrelendirilmiş allow bloğu */
allow {
ip *@255.255.255.255;
hostname *@*.passworded.ugly.people;
class clients;
password "f00Ness";
maxperip 1;
};
/*
* YENI: allow channel {}
* ESKI: chrestrict
* Bir kullanıcının bir kanala girmesine olanak sağlar...
* yasak kanal bloğundaki hariçlik gibi.
* Sözdizimi:
* allow channel {
* channel "kanal ismi";
* };
*/
allow channel {
channel "#WarezSucks";
};
/*
* YENI: oper {}
* ESKI: O:Line
* Bir IRC Operatörü tanımlamanızı sağlar.
* IRC Operatörleri sunucuya uygun bir biçimde bağlanılmasını ve
* makullüğü sağlarlar.
* Sözdizimi aşağıdaki gibidir:
* oper (login) {
* class (sınıf ismini ekleyin, eğer istemciden farklıysa, yeni sınıfı ekleyin);
* from {
* userhost (ident@host);
* userhost (ident@host);
* };
* flags
* {
* (flaglar buraya*);
* };
* VEYA
* flags "OAaRD gibi eski tip flaglar";
* };
*/
/* Oper flaglarının listesine doc/unreal32docs.html#operblock dan göz atabilirsiniz.
* [Okumanız şiddetle önerilir]
*/
oper bobsmith {
class clients;
from {
userhost bob@smithco.com;
};
password "f00";
flags
{
netadmin;
can_zline;
can_gzline;
can_gkline;
global;
};
};
/*
* YENI: listen {}
* ESKI: P:Line
* İstemci ve sunucuların sunucuya bağlanmasını sağlamak için ircd tarafından
* kullanılacak bir port tanımlamanızı sağlar .
* Sözdizimi aşağıdaki gibidir:
* listen (ip adresi):(port numarası)
* {
* options {
* (tercihler buraya);
* };
* };
* veya sade bir biçimde
* listen: listen (ip):(port);
*
* UYARI: ipv6 ipleri için (3ffe:b80:2:51d::2 vb), [ip]:port; kullanınız
*
* Böylede çalışır.
*/
/* listen için tercihler:
ESKI | YENI
S serversonly
C clientsonly
J java
s ssl
* standard
*/
/* SSL PORTLARI İÇİN NOT: SSL portları oldukça standart dışıdır,
* ayrıca pek çok yüksek-SSL portları için bazı insanlar 994 te çalıştırın
* der çünkü bu resmi SSL portudur..Fakat bu root erişimi gerektirir.Yanı sıra,
* 194 resmi irc portu olarak bunun üzerinde çalışan ircd
* hiç gördünüz mü?
* Böyle olunca bizim önerimiz 6697 portunu SSL için kullanmanız, bu hayli
* sunucuda kullanılıyor ve örnek için StunTour tarafından kabul görmüş durumda.
* İstediğiniz kadar SSL port açmakta özgürsünüz, fakat 6697 yi kullanmanız
* dünya standartı haline gelmesine biraz daha yardım edecektir. ;).
*/
listen *:6697
{
options
{
ssl;
clientsonly;
};
};
listen *:8067;
listen *:6667;
/* NOT: Eğer bir çok IP barındıran bir IRCd Shell kullanıyorsanız logunuzda olası
* 'Address already in use' alırsınız ve ircd başlamaz.Bunun anlamı '*' yerine
* belirli bir IP adresi kullanmanız gerektiğidir.Yani örneğin:
* listen 1.2.3.4:6667;
* Açıkça, IP yi önceden koyduğunuz IP ile değiştirin.
*/
/*
* YENI: link {}
* ESKI: C/N:Lines
* Bir sunucu bağlantısı için bir onay tanımlamanızı sağlar.
* NOT: HER IKI SUNUCUDA BAĞLANTI IÇIN TAM OLARAK DÜZGÜN BİR LINK {} GEREĞİ DUYAR!
* Sözdizimi aşağıdaki gibidir:
* link (sunucu ismi)
* {
* username (username, * da uygundur);
* hostname (ip adresi/hostmask);
* bind-ip (Bağlanırken hangi IP ile bağlanacağı, veya *);
* port (bağlantı portu, eğer herhangi biriyse);
* hub (Bu bir hub ise, * çalışır, veya sunucu maskeleri bunu sağlar);
* [veya leaf *;]
* password-connect "(gönderilecek şifre)";
* password-receive "(almamız gereken şifre)";
* class (sunucuların yönetileceği sınıf);
* options {
* (tercihler buraya*);
* };
* /* Eğer SSL kullanıyorsak, SSL modunda ne tür bir anahtar kullanacağımızı seçebiliriz
* * "openssl ciphers" ile bir liste alınır, anahtarlar birbirinden : ile ayrılırak belirtilebilirler.
* */
* ciphers "DES-CBC3-MD5";
*
* };
*/
/*
tercihler:
YENI | ESKI
S ssl
Z zip
N/A autoconnect
N/A quarantine
N/A nodnscache
*/
link hub.mynet.com
{
username *;
hostname 1.2.3.4;
bind-ip *;
port 7029;
hub *;
password-connect "LiNk";
password-receive "LiNk";
class servers;
options {
/* Note: Servisler link edilirken autoconnect kullanmamalısınız.*/
autoconnect;
ssl;
zip;
};
};
/*
*
* YENI: ulines {}
* ESKI: U:Line
* U-lines satırları sunuculara daha güç/komut kazandırır.Bu servis/istatistik
* sunucuları içindir ve ASLA normal UnrealIRCd sunucuları için değildir.
* Sözdizimi aşağıdaki gibidir:
* ulines {
* (uline olacak sunucu);
* (uline olacak sunucu);
* [vb]
* };
*/
ulines {
services.roxnet.org;
stats.roxnet.org;
};
/*
* YENI: drpass {}
* ESKI: X:Line
* Bu blok /die ve /restart için şifre tanımlamanızı sağlar.
* Sözdizimi aşağıdaki gibidir:
* drpass {
* restart "(yeniden başlatmak için şfire)";
* die "(sona erdirmek için şifre)";
* };
*/
drpass {
restart "I-love-to-restart";
die "die-you-stupid";
};
/*
* YENI: log {} ESKI: N/A Ircd e logun ne ve nerede olacağını bildirir. Dilediğiniz
* kadara sahip olabilirsiniz.
*
* FLAGS: errors, kills, tkl, connects, server-connects, kline, oper
*
* Syntax:
* log "log file"
* {
* flags
* {
* flag;
* flag;
* etc..
* };
* };
*/
log "ircd.log" {
/* Eğer 2 MB yi geçerse log dosyasını sil ve yenisini aç, eğer her zaman aynı log
dosyasını kullanmak istiyorsanız karışmayın */
maxsize 2097152;
flags {
oper;
kline;
connects;
server-connects;
kills;
errors;
sadmin-commands;
chg-commands;
oper-override;
spamfilter;
};
};
/*
* YENI: alias {}
* ESKI: N/A
* /nickserv, /chanserv gibi komutlar hazırlamanızı sağlar.
* FLAGS: services, stats, normal
*
* Sözdizimi:
* alias "isim" {
* target "gidecek nokta";
* type aliastype;
* };
*
* [NOT: Aynı zamanda önceden tanımlanmış alias dosyası dahil edebilirsiniz, doc/unreal32docs.html bölüm 2.9]
*/
// Bu nokta /NickServ komutu ile set::services-server server üzerinden bağlanmış olan NickServ e döner.
/*alias NickServ {
target "NickServ";
type services;
};*/
// Eğer komutla noktanın aynı olmasını istiyorsanız nick girişini gözardı edebilirsiniz
//alias ChanServ { type services; };
// Bu nokta /statserv komutu ile set::stats-server server üzerinden bağlanmış olan StatServ e döner.
//alias StatServ { type stats; };
// Bu nokta /superbot komutu ile kullanıcı SuperBot a döner
//alias SuperBot { type normal; };
/* Standart aliases */
alias NickServ { type services; };
alias ChanServ { type services; };
alias OperServ { type services; };
alias HelpServ { type services; };
alias StatServ { type stats; };
/*
* ESKI: alias {}
* YENI: N/A
* Bu /identify, /services gibi komutlar hazırlamanızı sağlar.
*
* Sözdizimi:
* alias "isim" {
* format "format satırı" {
* target "gidecek nokta";
* type aliastype;
* parameters "gönderilecek parametreler";
* };
* type command;
* };
*/
/* Bu ayrı bir şekilde gösterilir.Çünkü bir önceki direktif ile aynı isme sahip olsa bile benzer bir
* fonksiyon sağlaması ve standart aliaseslerin çalışmasına dayanması ile birlikte çok farklı sözdizimine sahip olması.
*/
/*
alias "identify" {
format "^#" {
target "chanserv";
type services;
parameters "IDENTIFY %1-";
};
format "^[^#]" {
target "nickserv";
type services;
parameters "IDENTIFY %1-";
};
type command;
};
*/
/* alias::format direktifi bir düzenli ifadedir. İlk biçim /identify komutundan sonraki ilk karakter bir # ise eşleşir.
* Ardından IDENTIFY %1- ile chanserv aliases e döner.
* İkinci biçim ise /identify komutundan sonraki ilk karakterin bir # işareti ile eşleşmeme durumunu belirtir.Ardından
* IDENTIFY %1- ile nickserv aliases e döner.
*/
/* alias::format::parameters betik diline benzerdir. %N (N bir numaradır) komuta gönderilecek
* parametreyi temsil eder.(bu durumda /identify). Eğer bir %N- belirtirseniz bu N den sonraki
* bütün parametleri içerir. Ayrıca kullanıcı nickname inin yerine %n kullanabilirsiniz.
*/
/* Standart aliases */
alias "services" {
format "^#" {
target "chanserv";
type services;
parameters "%1-";
};
format "^[^#]" {
target "nickserv";
type services;
parameters "%1-";
};
type command;
};
alias "identify" {
format "^#" {
target "chanserv";
type services;
parameters "IDENTIFY %1-";
};
format "^[^#]" {
target "nickserv";
type services;
parameters "IDENTIFY %1-";
};
type command;
};
/* Bu gerçek komut aliası için bir örnektir */
/* Bu eşlem /GLINEBOT ile /GLINE <parametre> 2d vb... şeklindedir */
alias "glinebot" {
format ".+" {
command "gline";
type real;
parameters "%1 2d Bu sunucuda botlara izin verilmemektedir, lütfen http://www.example.com/faq/123 sayfasından sss ı okuyunuz.";
};
type command;
};
/*
* ESKI: tld {}
* YENI: T:Line
* Bu istemcilerin hostmaskesine bağlı olarak farklı
* motd ve rules dosyaları belirler.
* Sözdizimi aşağıdaki gibidir:
* tld {
* mask (ident@host);
* motd "(motd dosyası)";
* rules "(rules dosyası)";
* };
*/
tld {
mask *@*.fr;
motd "ircd.motd.fr";
rules "ircd.rules.fr";
};
/* not: Bütün istemciler için aynı motd/rules (ircd.motd, ircd.rules) dosyaları
* görüntületmek istiyorsanız sadece yukarıdaki örnek bloğu silebilirsiniz.
*/
/*
* YENI: ban nick {}
* ESKI: Q:Line
* Nir nickname yasaklar, bundan doalyı kullanılamaz.
* Sözdizimi aşağıdaki gibidir:
* ban nick {
* mask "(yasaklanak nick)";
* reason "(neden)";
* };
*/
ban nick {
mask "*C*h*a*n*S*e*r*v*";
reason "Servisler için ayrılmıştır";
};
/*
* YENI: ban ip {}
* ESKI: Z:Line
* Ağa bağlanan bir ip yi yasaklar.
* Sözdizimi:
* ban ip { mask (ip adresi/hostmask); reason "(neden)"; };
*/
ban ip {
mask 195.86.232.81;
reason "Bağlı olmayan sunucu";
};
/*
* YENI: ban server {}
* ESKI: Server Q:Line
* Ağa bir sunucunun bağlanmasını devredışı kılar.
* eğer sunucu uzak bir sunucuya bağlanmışsa, yerel sunucunun
* ağdan bağlantısı kesilir.
* Sözdizimi aşağıdaki gibidir:
* ban server {
* mask "(sunucu ismi)";
* reason "(neden)";
* };
*/
ban server {
mask eris.berkeley.edu;
reason "Defol buradan.";
};
/*
* YENI: ban user {}
* ESKI: K:Line
* Kullanıcının belirtilen kesin bir mask ile sunucuya bağlanmasını engeller.
* Sözdizimi:
* ban user { mask (hostmask/ip adresi); reason "(neden)"; };
*/
ban user {
mask *tirc@*.saturn.bbn.com;
reason "Idiot";
};
/*
* YENI: ban realname {}
* ESKI: n:Line
* Kullanılan kesin bir realname i yasaklar.
* Sözdizimi:
* ban realname {
* mask "(real name)";
* reason "(neden)";
* };
*/
ban realname {
mask "Swat Team";
reason "mIRKFORCE";
};
ban realname {
mask "sub7server";
reason "sub7";
};
/*
* BUTUN BANLAR İÇİN NOT, ilave girdiler için tekrarlanabilir!
*
* YENI: except ban {}
* ESKI: E:Line
* Bu yasaklanmamanızı sağlar.
* Sözdizimi:
* except ban { mask (ident@host); };
* Farklı hostlar için istediğiniz kadar except ban {}
* bloğunu tekrarlayın.
*/
except ban {
/* stskeeps i yasaklama*/
mask *stskeeps@212.*;
};
/*
* YENI: deny dcc {}
* ESKI: dccdeny.conf
* Dcc gönderimlerini bloklamak için kullanılır..Virüsler
* dursa iyi olur.
* Sözdizimi:
* deny dcc
* {
* filename "bloklanacak dosya (örnek, *exe)";
* reason "neden";
* };
*/
deny dcc {
filename "*sub7*";
reason "Muhtemek Sub7 Virüsü";
};
/*
* ESKI: deny channel {}
* YENI: N/A (NEW)
* Girilen kanalları bloklar.
* Sözdizimi:
* deny channel {
* channel "(kanal)";
* reason "neden";
* };
*/
deny channel {
channel "*warez*";
reason "Warez yasaktır";
};
/*
* YENI: vhost {}
* ESKI: Vhost.conf file
* Oper olmayan kullanıcılar için sahte ip hazırlar, veya
* tembellik yaparak /sethost kullanmayan operler içindir :P
* Sözdizimi:
* vhost {
* vhost (vhost.com);
* from {
* userhost (kullanılacak ident@host);
* };
* login (login ismi);
* password (şifre);
* };
* ardından bu vhostu kullanmak için, IRC de /vhost (login) (şifre) yapın
*/
vhost {
vhost i.hate.microsefrs.com;
from {
userhost *@*.image.dk;
};
login stskeeps;
password moocowsrulemyworld;
};
/* Diğer yapılandırma dosyalarını dahil edebilirsiniz */
/* include "klines.conf"; */
/* Ağ yapılandırması */
set {
network-name "ROXnet";
default-server "irc.roxnet.org";
services-server "services.roxnet.org";
stats-server "stats.roxnet.org";
help-channel "#ROXnet";
hiddenhost-prefix "rox";
/* prefix-quit "no"; */
/* Gizleme anahtarları ağ üzerindeki bütün sunucularda aynı olmalı.
* Bu anahtarlar maskeli hostlar yaratmak ve bunları saklamak için kullanılır.
* Anahtarlar 5-100 karakterlik (10-20 karakter yeterli) 3 rastgele diziden oluşmalı ve
* küçük harf (a-z), büyük harf (A-Z) ve rakamlardan (0-9) meydana gelmelidirler.. [ilk örneğe bakınız].
*/
cloak-keys {
"aoAr1HnR6gl3sJ7hVz4Zb7x4YwpW";
"and another one";
"and another one";
};
/* on-oper host */
hosts {
local "locop.roxnet.org";
global "ircop.roxnet.org";
coadmin "coadmin.roxnet.org";
admin "admin.roxnet.org";
servicesadmin "csops.roxnet.org";
netadmin "netadmin.roxnet.org";
host-on-oper-up "no";
};
};
/* Sunucunun kendine özgü yapılandırması */
set {
kline-address "bunu.email.olarak.ayarlayın";
modes-on-connect "+ixw";
modes-on-oper "+xwgs";
oper-auto-join "#opers";
options {
hide-ulines;
/* Eğer isterseniz identd kontrolünü buradan aktif edebilirsiniz */
/* identd-check; */
show-connect-info;
};
maxchannelsperuser 10;
/* /quit mesajının görüntülenebilmesi için, bir kullanıcının sunucuya bağlı kalması gereken süre
* Umarız spamleri durdurmak için yardım eder */
anti-spam-quit-message-time 10s;
/* Bütün çıkışlarda değişmeyen bir çıkış mesajı yaratır - anlamı yerel sunucuda
ısmarlama çıkışlara izin verilmemesidir */
/* static-quit "Client quit"; */
/* Ayrıca bu seçeneğin açıklama satırlarını kaldırıp 'yes' diyerek bütün kanaldan ayrılma mesajlarını,
* bloklamış veya belirli bir diğer metini bunun için kullanabilirsiniz. (örnek: "Bye bye!") Her zaman kanaldan
* ayrılma mesajı olarak kullanılır */
/* static-part yes; */
/* Operlerin sadece belirli istatistikleri görüntüleyebilmesini sağlar, bütün istatistikler için * kullanın,
* bütün istatistikleri görebilmeleri için gözardı edin. Full liste için '/stats' yapınız.
* Bazı yöneticiler normal kullanıcıların 'kGs' istatistiklerine ulaşmasını istemeyebilir.
*/
oper-only-stats "okfGsMRUEelLCXzdD";
/* Throttling: Bu örnek bir hosta 60 saniye içerisine yanlızca 3 bağlantı imkanı sağlar. */
throttle {
connections 3;
period 60s;
};
/* Anti flood koruması */
anti-flood {
nick-flood 3:60; /* Her 60 saniyede 3 nick değişikliği (varsayılan) */
};
/* Spam filtresi */
spamfilter {
ban-time 1d; /* spamfilter ile bir *line yasağının varsayılan devaö süresi */
ban-reason "Spam/Advertising"; /* varsayılan neden */
virus-help-channel "#help"; /* 'viruschan' eylemi için kullanılacak kanal */
/* except "#help"; spam filtreden muaf tutulacak kanal */
};
};
/*
* Sorununuz veya daha fazla yardımamı ihtiyacınız var?
* 1) www.vulnscan.org/UnrealIRCd/unreal32docs.tr.html
* 2) www.vulnscan.org/UnrealIRCd/faq/ <- sorularınızın %80 ini kapsamakta!
* 3) Eğer probleminiz hala devam ediyorsa irc.ircsystems.net sunucusu #unreal-support kanalına girebilirsiniz
* DÖKÜMANTASYON ve FAQ kısmını okumanızı gerekli gördüğümüzü belirtiyoruz!
*/
+90 -22
View File
@@ -15,7 +15,7 @@ help {
" zum Begriff 'who' wissen, ist einzugeben:";
" /HELPOP WHO";
" (Als HelpOp muss man /HELPOP ?WHO eingeben, also vor";
" den Begriff noch ein ? setzen);"
" den Begriff noch ein ? setzen)";
" In diesem Hilfesystem sind alle Server Befehle und";
" Optionen aufgeführt, die benutzt werden können.";
" Wird darüberhinaus noch Hilfe benötigt, kann diese";
@@ -60,7 +60,9 @@ help Opercmds {
" einen bestimmten Befehl zu erhalten.";
" -";
" ==-------------------------oOo-------------------------==";
" ADCHAT GLOBOPS OPERMOTD SPAMFILTER";
" ADCHAT DNS NACHAT SETIDENT";
" ADDMOTD GLINE OPER SHUN";
" ADDOMOTD GLOBOPS OPERMOTD SPAMFILTER";
" CHATOPS GZLINE REHASH SQUIT";
" CHGHOST HTM RESTART TEMPSHUN";
" CHGIDENT KILL RPING TRACE";
@@ -69,8 +71,6 @@ help Opercmds {
" CONNECT LOCOPS SAPART WALLOPS";
" DCCDENY MKPASSWD SDESC ZLINE";
" DIE MODULE SETHOST";
" DNS NACHAT SETIDENT";
" GLINE OPER SHUN";
" ==-------------------------oOo-------------------------==";
};
@@ -82,11 +82,11 @@ help Svscmds {
" einen bestimmten Befehl zu erhalten.";
" -";
" ==-------------------------oOo-------------------------==";
" SQLINE SVSKILL SVSNLINE SVSSNO";
" SVS2MODE SVSLUSERS SVSNOOP SVSWATCH";
" SVS2SNO SVSMODE SVSO SWHOIS";
" SVSFLINE SVSMOTD SVSPART UNSQLINE";
" SVSJOIN SVSNICK SVSSILENCE";
" SQLINE SVSKILL SVSNLINE SVSSILENCE";
" SVS2MODE SVSLUSERS SVSNOLAG SVSSNO";
" SVS2SNO SVSMODE SVSNOOP SVSWATCH";
" SVSFLINE SVSMOTD SVSO SWHOIS";
" SVSJOIN SVSNICK SVSPART UNSQLINE";
" ==-------------------------oOo-------------------------==";
};
@@ -126,12 +126,17 @@ help Umodes {
};
help Snomasks {
" Snomask seht für 'Service NOtice MASK'. Hiermit wird (hauptsächlich)";
" gesteuert, welche Server Notices empfangen werden.";
" Anwendung: /MODE nick +s <snomask>";
" Beispiel: /MODE blah +s +cF-j";
" Der Parameter legt fest, welche snomasks gewollt sind (oder nicht).";
" Man kann einzelne SNoMasks entfernen oder durch -s alle entfernen.";
" -";
" Hier eine Liste aller verfügbaren SNoMasks";
" SNoMasks werden mit dem UMode +s gesetzt, Sie sind ein zusätzlicher Parameter.";
" Als Beispiel, um SNoMask +f zu setzen tippt man:";
" /MODE <Dein Nick> +s +f";
" Man kann einzelne SNoMasks entfernen oder durch -s alle entfernen.";
" -";
" ==-------------------------oOo-----------------------==";
" c = Sieht alle lokalen Connects/Disconnects";
" e = Bekommt alle Server Meldungen für +e User (Eyes)";
@@ -160,8 +165,9 @@ help Chmodes {
" a <nickname> = Gibt einem User Channel-Admin Status";
" q <nickname> = Gibt einem User Owner-Status";
" -";
" b <nick!ident@host> = Bannt alle User, auf die die nick!ident@host-Maske passt [h]";
" c = Blockt alle Nachrichten in denen mIRC FarbCodes enthalten sind [o]";
" b <nick!ident@host> = Bannt alle User, auf die die nick!ident@host-Maske passt";
" Erweiterte Bann Typen werden unter /HELPOP EXTBANS beschrieben [h]";
" c = Blockt alle Nachrichten in denen mIRC FarbCodes enthalten sind [o]";
" e <nick!ident@host> = Nimmt passende User von einem Bann aus [h]";
" f <Floodparameter> = Schutz vor Flood (für weitere Informationen siehe /HELPOP CHMODEF) [o]";
" I nick!ident@host> = Nimmt passende User von +i aus [h]";
@@ -196,6 +202,37 @@ help Chmodes {
" ==------------------------------oOo----------------------------==";
};
help ExtBans {
" Erweiterte Banntypen: ";
" -";
" ==-Typ---------Name---------------------------Beschreibung----------------------==";
" | | User, auf die dieser Bann gesetzt wird, können joinen, ";
" ~q | Quiet | a´ber nichts schreiben, solange sich nicht +v oder ";
" | | höher haben. ";
" | | Beispiel: ";
" | | +bb ~q:*!*@blah.blah.com ~q:nick*!*@* ";
"-----------------------------------------------------------------------------------";
" | | User, auf die dieser Bann gesetzt ist, können ihren ";
" ~n | nickchange | Nick nicht ändern, solange sie nicht +v oder höher sind.";
" | | Beispiel: ";
" | | +bb ~n:*!*@*.aol.com ~n:nick*!*@* ";
"-----------------------------------------------------------------------------------";
" | | Wenn der User in diesem Channel ist, kann er/sie nicht ";
" | [prefix] | joinen. Es kann ein Prefix (+/%/@/&/~) angegeben werden.";
" ~c | channel | Dadurch gilt der Bann nur, wenn der User diese Rechte ";
" | | oder höher im angegebenen Channel hat. ";
" | | Beispiel: +b ~c:#lamers, +e ~c:@#trusted ";
"-----------------------------------------------------------------------------------";
" | | Wenn der Bann auf den gegebenen Realnamen gesetzt ist, ";
" | | kann dieser User nicht joinen. ";
" ~r | realname | Beispiel: +b ~r:*Stupid_bot_script* ";
" | | ACHTUNG: Ein Unterstrich ('_') steht für Beides: ein ";
" | | Leerzeichen und auch ein Unterstrich ('_') ";
" | | Dieser Bann würde auch auf 'Stupid bot script v1.4'. ";
" | | passen. ";
" ==------------------------------------------------------------------------------==";
};
help Chmodef {
" Der +f Channel Mode ermöglicht eienn umfangreichen Flood Schutz für einen";
" Channel. Durch diesen Modus ist es möglich, Floods durch join, nick change,";
@@ -210,7 +247,7 @@ help Chmodef {
" ==-----Type-----Name--------Default Action---Other Actions-----==";
" c CTCP +C m, M";
" j Join +i R";
" k Knock +k";
" k Knock +K";
" m Messages +m M";
" n Nickchange +N";
" t Text kick b";
@@ -430,7 +467,7 @@ help Lusers {
};
help Map {
" Zeigt eine pseude-grafische Netzwerks Karte an, aus der die;"
" Zeigt eine pseude-grafische Netzwerks Karte an, aus der die";
" Struktur des IRC Netzwerkes hervorgeht. Das wird hauptsächlich";
" zu Routing Zwecken benötigt.";
" -";
@@ -711,7 +748,7 @@ help Wallops {
};
help Globops {
" Sendet eine globale \"Nachricht\" an alle IRCops. Die Nachricht;"
" Sendet eine globale \"Nachricht\" an alle IRCops. Die Nachricht";
" kann nur von IRCops gelesen werden (anders, als WALLOPS, die";
" auch von normalen Usern gelesen werden können).";
" -";
@@ -749,12 +786,12 @@ help Nachat {
};
help Kill {
" Dieser Befehl entfernt einen User vom Server (anders als KICK";
" Dieser Befehl entfernt User vom Server (anders als KICK";
" wo der User nur vom Channel entfernt wird). Der User kann direkt";
" neu zum Server verbinden.";
" Befehl nur für IrcOps.";
" -";
" Syntax: KILL <user> <reason>";
" Syntax: KILL <user1>, <user2>, <user3>,... <reason>";
" Beispiel: KILL Jack16 Werbung für Dialer hier nicht erlaubt";
};
@@ -1153,7 +1190,7 @@ help Svskill {
help Svsnoop {
" Dieser Befehl aktiviert oder deaktiviert die Möglichkeit";
" globaler IrcOp Funktonen auf dem angegebenen Server.";
" IrcOp Funktonen auf dem angegebenen Server.";
" Muss durch einen U:Lined Server gesendet werden.";
" -";
" Syntax: SVSNOOP <server> <+/->";
@@ -1247,7 +1284,9 @@ help Svsnline {
" sind Leerzeichen durch '_' zu ersetzen, Unreal";
" übersetzt diese zu Leerzeichen.";
" -";
" Syntax: SVSNLINE <grund_für_den_bann> :<realname>";
" Syntax: SVSNLINE <grund_für_den_bann> :<realname> (um einen Bann zu setzen)";
" SVSNLINE - (um einen Bann zu löschen)";
" SVSNLINE * (um alle Banns zu löschen)";
" Beispiel: SVSNLINE sub7_drone :*sub7*";
};
@@ -1294,6 +1333,22 @@ help Svs2sno {
" Beispiel: SVS2SNO joe +Gc";
};
help Svsnolag {
" Aktiviert ein 'kein fake lag' für einen User.";
" Muss durch einen U:Lined Server gesendet werden.";
" -";
" Syntax: SVSNOLAG [+|-] <nickname>";
" Example: SVSNOLAG + joe";
};
help Svs2nolag {
" Aktiviert ein 'kein fake lag' für einen User.";
" Muss durch einen U:Lined Server gesendet werden.";
" -";
" Syntax: SVS2NOLAG [+|-] <nickname>";
" Example: SVS2NOLAG + joe";
};
help Spamfilter {
" Diese Befehle setzten oder löschen globale Spam Filter.";
" Spamfilter helfen, mit Spam, störenden Bots, Werbung etc. fertig zu werden.";
@@ -1308,7 +1363,7 @@ help Spamfilter {
" 'kill', 'tempshun' (Shun nur für aktuelle Session), 'shun',";
" 'kline', 'gline', 'zline', 'gzline', 'block' (blockiert Nachricht),";
" 'dccblock' (kann keine DCC mehr senden), 'viruschan' (verlässt alle Channels";
" und joint zwangsweise im Virus Help Channel).";
" und joint zwangsweise im Virus Help Channel), warn (Warnung für IrcOps).";
" [regex] hier handelt es sich um den Ausdruck in der Nachricht, auf den hin Reaktionen";
" erfolgen sollen.";
" [tkltime] die Zeitdauer, wie lange *LINEs, die durch [action] gesetzt wurden, gelten sollen";
@@ -1336,7 +1391,7 @@ help Tempshun {
" gilt der Shun nicht mehr.";
" -";
" Syntax: TEMPSHUN [+|-]<nickname> [reason]";
" Example: TEMPSHUN evilguy suspected infection";
" Example: TEMPSHUN evilguy vermutlich Infektion";
" TEMPSHUN -niceguy";
};
@@ -1347,3 +1402,16 @@ help DccAllow {
*/
};
help Addmotd {
" Fügt eine Zeile ans Ende der MOTD an.";
" -";
" Syntax: ADDMOTD <text>";
" Beispiel: ADDMOTD Spielt fair!";
};
help Addomotd {
" Fügt eine Zeile ans Ende der OPERMOTD an. ";
" -";
" Syntax: ADDOMOTD <text>";
" Beispiel: ADDOMOTD Abuse it and lose it!";
};
+87 -22
View File
@@ -59,6 +59,8 @@ help Opercmds {
" -";
" ==-------------------------oOo-------------------------==";
" ADCHAT GLOBOPS OPERMOTD SPAMFILTER";
" ADDMOTD GLINE OPER SHUN";
" ADDOMOTD GLOBOPS OPERMOTD SPAMFILTER";
" CHATOPS GZLINE REHASH SQUIT";
" CHGHOST HTM RESTART TEMPSHUN";
" CHGIDENT KILL RPING TRACE";
@@ -67,8 +69,6 @@ help Opercmds {
" CONNECT LOCOPS SAPART WALLOPS";
" DCCDENY MKPASSWD SDESC ZLINE";
" DIE MODULE SETHOST";
" DNS NACHAT SETIDENT";
" GLINE OPER SHUN";
" ==-------------------------oOo-------------------------==";
};
@@ -81,11 +81,11 @@ help Svscmds {
" sur une commande spécifique.";
" -";
" ==-------------------------oOo-------------------------==";
" SQLINE SVSKILL SVSNLINE SVSSNO";
" SVS2MODE SVSLUSERS SVSNOOP SVSWATCH";
" SVS2SNO SVSMODE SVSO SWHOIS";
" SVSFLINE SVSMOTD SVSPART UNSQLINE";
" SVSJOIN SVSNICK SVSSILENCE";
" SQLINE SVSKILL SVSNLINE SVSSILENCE";
" SVS2MODE SVSLUSERS SVSNOLAG SVSSNO";
" SVS2SNO SVSMODE SVSNOOP SVSWATCH";
" SVSFLINE SVSMOTD SVSO SWHOIS";
" SVSJOIN SVSNICK SVSPART UNSQLINE";
" ==-------------------------oOo-------------------------==";
};
@@ -129,7 +129,7 @@ help Snomasks {
" notices de serveurs vous recevrez.";
" Usage: /MODE nick +s <snomask>";
" Ex: /MODE blah +s +cF-j";
" Le paramètre spécifie quels snomasks vous voullez (ou ne voullez pas)."
" Le paramètre spécifie quels snomasks vous voullez (ou ne voullez pas).";
" Vous pouvez également retirer tous les snomasks en tapant simplement /MODE nick -s.";
"-";
" Ci-dessous, une liste des snomasks disponibles :";
@@ -151,6 +151,38 @@ help Snomasks {
" ==-------------------------oOo------------------------==";
};
help ExtBans {
" Types de bans étendus: ";
" -";
" ==-Type--------Nom----------------------------Explication-----------------------==";
" | | Les personnes correspondants à ces bans peuvent joindre ";
" ~q | Quiet | mais ne sont pas capables de parler, à moins qu'ils ne ";
" | | soient +v ou supérieur. ";
" | | Exemple: ";
" | | +bb ~q:*!*@blah.blah.com ~q:nick*!*@* ";
"-----------------------------------------------------------------------------------";
" | | Les personnes correspondants à ces bans ne peuvent pas ";
" ~n | nickchange | changer de pseudos , à moins qu'ils ne soient +v ou ";
" | | supérieur. ";
" | | Exemple: ";
" | | +bb ~n:*!*@*.aol.com ~n:nick*!*@* ";
"-----------------------------------------------------------------------------------";
" | | Si l'utilisateur est sur ce salon alors il/elle ne peut ";
" | [prefix] | joindre. Un préfixe peut également être specifié ";
" ~c | channel | (+/%/@/&/~) qui signifie qu'il va seulement correspondre";
" | | à l'utilisateurt qui a ces droits ou plus sur le salon ";
" | | spécifié ";
" | | Exemple: +b ~c:#lamers, +e ~c:@#trusted ";
"-----------------------------------------------------------------------------------";
" | | Si le realname de l'utilisateur correspond à celui-ci ";
" | | alors il/est incapable de joindre. ";
" ~r | realname | Example: +b ~r:*Stupid_bot_script* ";
" | | NOTE: un underscore ('_') correspond à un espace (' ') ";
" | | et à un underscore ('_'), donc ca ban correspondra à ";
" | | 'Stupid bot script v1.4'. ";
" ==------------------------------------------------------------------------------==";
};
help Chmodes {
" Cette section liste tous les modes de salons possibles pouvant être utilisés avec /MODE";
" -";
@@ -161,7 +193,8 @@ help Chmodes {
" a <pseudo> = Donne le status de Channel Admin à l'utilisateur";
" q <pseudo> = Donne le status d'Owner à l'utilisateur";
" -";
" b <nick!ident@host> = Banni le nick!ident@host pour le salon [h]";
" b <nick!ident@host> = Banni le nick!ident@host pour le salon";
" Types de bans étendus (pour plus d'info voir /HELPOP EXTBANS)[h]";
" c = Bloque les messages contenant des codes couleurs mIRC [o]";
" e <nick!ident@host> = Overrides un ban pour les utilisateurs correspondants [h]";
" f <paramsflood> = Protection contre le Flood (pour plus d'informations voir /HELPOP CHMODEF) [o]";
@@ -209,7 +242,7 @@ help Chmodef {
" ==-----Type-----Nom--------Action par Défaut---Autres Actions-----==";
" c CTCP +C m, M";
" j Join +i R";
" k Knock +k";
" k Knock +K";
" m Messages +m M";
" n Nickchange +N";
" t Text kick b";
@@ -316,7 +349,7 @@ help Who {
" Exemple: WHO +m o";
" -";
" Les flags de status:";
" La commande who montre diff"rents flags dans le résultat retourné pour indiquer";
" La commande who montre différents flags dans le résultat retourné pour indiquer";
" différentes informations sur l'utilisateur. Ces flags sont expliqué ci-dessous:";
" G - L'utilisateur est /away (parti)";
" H - L'utilisateur est n'est pas /away (présent)";
@@ -556,7 +589,7 @@ help Watch {
" -";
" Syntaxe: WATCH +nick1 +nick2 +nick3 (Ajoute des pseudos)";
" WATCH -nick (Enlève un pseudo)";
" WATCH (Affiche la watchlist)";
" WATCH (Voir quels utilisateurs sont en ligne)";
};
help List {
@@ -752,10 +785,10 @@ help Nachat {
};
help Kill {
" Force un utilisateur à se déconnecter d'un Serveur IRC Serveur.";
" Force les utilisateurs à se déconnecter d'un Serveur IRC Serveur.";
" Commande réservée aux IRC Operateurs.";
" -";
" Syntaxe: KILL <utilisateur> <raison>";
" Syntaxe: KILL <utilisateur1>,<utilisateur2>,<utilisateur3>,... <raison>";
" Exemple: KILL Jack16 Clones interdits";
};
@@ -1137,7 +1170,7 @@ help Svskill {
};
help Svsnoop {
" Active ou désactive la présence des fonctions Global IRCop";
" Active ou désactive la présence des fonctions IRCop";
" sur le serveur en question.";
" Doit être envoyé à travers un serveur avec U:Line.";
" -";
@@ -1231,9 +1264,11 @@ help Svsnline {
" Doit être envoyé à travers un serveur avec U:Line.";
" La raison doit être un seul paramètre c'est pour quoi";
" les espaces sont indiqués par des _, Unreal les traduira";
" en interne par des espaces.";
" en interne par des espaces";
" -";
" Syntaxe: SVSNLINE +/- <raison_du_ban> :<realname>";
" Syntaxe: SVSNLINE + <raison_du_ban> :<realname> (pour ajouter un ban)";
" Syntaxe: SVSNLINE - :<realname> (pour retirer un ban)";
" Syntaxe: SVSNLINE * (pour effacer tous les bans)";
" Exemple: SVSNLINE + sub7_drone :*sub7*";
};
@@ -1260,7 +1295,7 @@ help Svssilence {
" Au contraire de la commande SILENCE, vous pouvez ajouter/enlever";
" de multiple entrées sur une seule ligne.";
" Syntaxe: SVSSILENCE <pseudo> :<paramètres silence>";
" Exemple: SILENCE Blah :+*!*@*.com +*!*@*.bla.co.uk";
" Exemple: SVSSILENCE Blah :+*!*@*.com +*!*@*.bla.co.uk";
};
help Svssno {
@@ -1276,10 +1311,25 @@ help Svs2sno {
" du changement.";
" Doit être envoyé à travers un serveur avec U:Line.";
" -";
" Syntaxe: SVS2SNO <pseudo> <snomasks>";
" Exemple: SVSSNO joe +Gc";
" Syntaxe: SVS2SNO <pseudo> <snomasks>";
" Exemple: SVS2SNO joe +Gc";
};
help Svsnolag {
" Active 'pas de lag simulé' pour un utilisateur.";
" Doit être envoyé à travers un serveur U:Line.";
" -";
" Syntaxe: SVSNOLAG [+|-] <pseudonyme>";
" Exemple: SVSNOLAG + joe";
};
help Svs2nolag {
" Active 'pas de lag simulé' pour un utilisateur.";
" Doit être envoyé à travers un serveur U:Line.";
" -";
" Syntaxe: SVS2NOLAG [+|-] <pseudonyme>";
" Exemple: SVS2NOLAG + joe";
};
help Spamfilter {
" Cette commande ajoute/retire des filtres anti-spam globaux.";
@@ -1295,7 +1345,7 @@ help Spamfilter {
" 'kill', 'tempshun' (shun pour la session courrante uniquement), 'shun',";
" 'kline', 'gline', 'zline', 'gzline', 'block' (bloque les msg),";
" 'dccblock' (incapable d'envoyer des dccs), 'viruschan' (part de tous les salons";
" et rejoint le salon d'aide sur les virus).";
" et rejoint le salon d'aide sur les virus), 'warn' (avertissement pour les IRC opérateurs).";
" [regex] ceci est le véritable regex ou nous devons bloquer.";
" [tkltime] la durée des *LINEs placées par [action] (utilisez '-' pour appliquer la valeur par défaut";
" set::spamfilter::ban-time, cette valeur est ignorée pour block/tempshun');";
@@ -1320,7 +1370,7 @@ help Tempshun {
" pour _la session courrane uniquement_, cela signifie que si un utilisateur se reconnecte";
" le shun ne sera plus effectif.";
" -";
" Syntaxe: TEMPSHUN [+|-]<pseudo> [raison]";
" Syntaxe: TEMPSHUN [+|-]<pseudo> [raison]";
" Exemple: TEMPSHUN evilguy suspected infection";
" TEMPSHUN -niceguy";
};
@@ -1331,3 +1381,18 @@ help DccAllow {
* stuff quickly gets out-of-synch.
*/
};
help Addmotd {
" Ajoute une ligne à la fin du MOTD ";
" -";
" Syntaxe: ADDMOTD <texte>";
" Exemple: ADDMOTD Amusez vous bien !";
};
help Addomotd {
" Ajoute une ligne à la fin du OPERMOTD ";
" -";
" Syntaxe: ADDOMOTD <texte>";
" Exemple: ADDOMOTD Abusez-en et vous la perdrez !";
};
+1485
View File
File diff suppressed because it is too large Load Diff
+1376
View File
File diff suppressed because it is too large Load Diff
+33 -13
View File
@@ -1,5 +1,6 @@
Numeric 005 Documentation (c) 2002-2005 codemastr (Dominick Meglio) [codemastr@unrealircd.com]
(As of Unreal3.2.3)
Numeric 005 Documentation
(c) 2002-2005 codemastr (Dominick Meglio) [codemastr@unrealircd.com]
(c) 2005-2009 syzop (Bram Matthys) [syzop@vulnscan.org]
Numeric 005 allows the server to inform the client of any protocol specific features in the
IRCd. The numeric is sent at connection time immediately after numeric 004. Additionally
@@ -23,9 +24,9 @@ impractical and technically impossible to correctly implement due to existing li
in the standard. Therefore, this token is not currently supported.
Unreal does additionally provide a few tokens which are not specified in the standard, these
include: HCN, AWAYLEN, WATCH, SILENCE, EXTBAN, ELIST, and CMDS. Unreal also maintains a few
legacy tokens such as MAXCHANNELS and WALLCHOPS to ensure compatibility until the ISupport
standard is more widely accepted by clients.
include: HCN, AWAYLEN, WATCH, SILENCE, EXTBAN, ELIST, CMDS, NAMESX, UHNAMES, and WATCHOPTS.
Unreal also maintains a few legacy tokens such as MAXCHANNELS and WALLCHOPS to ensure
compatibility until the ISupport standard is more widely accepted by clients.
Token Value Default Value Description
------------------------------------------------------------------------------------------------
@@ -107,7 +108,7 @@ CASEMAPPING string ascii Specifies what defini
characters are upper/lowercase
of eachother.
EXTBAN prefix,types ~,cqr Specifies what extbans are
EXTBAN prefix,types ~,cqnr Specifies what extbans are
supported by the server. The prefix
defines which character indicates
an extban and the types defines
@@ -124,7 +125,7 @@ ELIST flags MNUCT Specifies the set of
flag allows topic set time
searching.
CMDS commands MAP,KNOCK,DCCALLOW,USERIP Specifies a series of commands that
CMDS commands MAP,KNOCK,DCCALLOW,USERIP Specifies a series of commands that
can be useful for the client to know
exist as they may provide a more
efficient means for the client to
@@ -132,29 +133,48 @@ CMDS commands MAP,KNOCK,DCCALLOW,USERIP Specifies a series of
token replaces the MAP and KNOCK
tokens.
STATUSMSG flags ~&@%+ Specifies the mode flags that may
STATUSMSG flags ~&@%+ Specifies the mode flags that may
prefix a channel name in a PRIVMSG
or NOTICE to limit who receives the
message to only those with a certain
level of access. This token will
replace the WALLCHOPS token.
EXCEPTS none none Indicates that channel ban exceptions
EXCEPTS none none Indicates that channel ban exceptions
(+e) are supported by the server.
INVEX none none Indicates that channel invite
INVEX none none Indicates that channel invite
exceptions (+I) are supported by
the server.
MAXLIST mode:num,... b:60,e:60,I:60 Specifies the maximum number of
MAXLIST mode:num,... b:60,e:60,I:60 Specifies the maximum number of
entries that may be added to a
particular mode list (type A modes).
This token replaces MAXBANS.
CHANLIMIT pfx:num,... #:10 Specifies the maximum number of
CHANLIMIT pfx:num,... #:10 Specifies the maximum number of
channels with the specified prefix
that a user may join at one time.
This token will replace MAXCHANNELS.
CHANNELLEN number 32 Provides the maximum length of a
CHANNELLEN number 32 Provides the maximum length of a
channel name that a user can create.
NAMESX none none Indicates that extended /NAMES info
is available on this server. If the
client sends "PROTOCTL NAMESX" then
the server will, from then on, send
all channel rights in a NAMES reply
instead of only the highest right
(eg: @+Person instead of @Person).
UHNAMES none none Indicates that (other) extended
/NAMES info is available on the
server. If the client sends
"PROTOCTL UHNAMES" then the server
will, from then on, send user@host
information in a NAMES reply
(eg: @nick!ident@hostname).
WATCHOPTS flags A WATCH options supported. 'A' means
Away Notification is available.
+465
View File
@@ -0,0 +1,465 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!-- $Id$ -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
<title>Unreal 3.2 Protocol Documentation</title>
</head>
<body>
<h1 style="text-align: center;">Unreal 3.2 Protocol Documentation</h1>
<h3 style="text-align: center;">Last update: 29 November 2006</h3>
<h1>Table of Contents</h1>
<p><a href="#S1">1 Introduction</a></p>
<p><a href="#S2">2 Server Negotiation</a></p>
<blockquote><p><a href="#S2_1">2.1 PASS - Connection Password</a></p></blockquote>
<blockquote><p><a href="#S2_2">2.2 PROTOCTL - Server Protocol Negotiation</a></p></blockquote>
<blockquote><p><a href="#S2_3">2.3 SERVER - Server Negotiation</a></p></blockquote>
<blockquote><p><a href="#S2_4">2.4 EOS - End Of Synch</a></p></blockquote>
<blockquote><p><a href="#S2_5">2.5 NETINFO - Network Information</a></p></blockquote>
<p><a href="#S3">3 User Operations</a></p>
<blockquote><p><a href="#S3_1">3.1 NICK - User Introduction and Nick Change</a></p></blockquote>
<blockquote><blockquote><p><a href="#S3_1_1">3.1.1 Nick Collisions</a></p></blockquote></blockquote>
<blockquote><p><a href="#S3_2">3.2 MODE, UMODE2 - User Mode Change</a></p></blockquote>
<blockquote><p><a href="#S3_3">3.3 QUIT - User Disconnect</a></p></blockquote>
<blockquote><p><a href="#S3_4">3.4 KILL - Force Disconnect</a></p></blockquote>
<blockquote><p><a href="#S3_5">3.5 SETHOST/CHGHOST - Change virtual host</a></p></blockquote>
<blockquote><p><a href="#S3_6">3.6 SETIDENT/CHGIDENT - Change a user's username</a></p></blockquote>
<blockquote><p><a href="#S3_7">3.7 SETNAME/CHGNAME - Change a user's realname</a></p></blockquote>
<blockquote><p><a href="#S3_8">3.8 WHOIS - User Information</a></p></blockquote>
<p><a href="#S1">4 Server Operations</a></p>
<blockquote><p><a href="#S4_1">4.1 SERVER - Server Introduction</a></p></blockquote>
<blockquote><p><a href="#S4_2">4.2 SQUIT - Server Removal</a></p></blockquote>
<blockquote><p><a href="#S4_3">4.3 SDESC - Server Description</a></p></blockquote>
<blockquote><p><a href="#S4_4">4.4 PING - Live Connection Query</a></p></blockquote>
<blockquote><p><a href="#S4_5">4.5 PONG - Live Connection Reply</a></p></blockquote>
<blockquote><p><a href="#S4_6">4.6 STATS - Server Stats</a></p></blockquote>
<p><a href="#S5">5 Channel Operations</a></p>
<blockquote><p><a href="#S5_1">5.1 SJOIN - Channel Burst</a></p></blockquote>
<blockquote><p><a href="#S5_2">5.2 JOIN - Channel Join</a></p></blockquote>
<blockquote><p><a href="#S5_3">5.3 PART - Channel Part</a></p></blockquote>
<blockquote><p><a href="#S5_4">5.4 KICK - Channel Kick</a></p></blockquote>
<blockquote><p><a href="#S5_5">5.5 MODE - Channel Mode</a></p></blockquote>
<blockquote><p><a href="#S5_6">5.6 INVITE - Invite a user to a channel</a></p></blockquote>
<blockquote><p><a href="#S5_7">5.7 SAJOIN - Channel Force Join</a></p></blockquote>
<blockquote><p><a href="#S5_8">5.8 SAPART - Channel Force Part</a></p></blockquote>
<blockquote><p><a href="#S5_9">5.9 SAMODE - Channel Force Mode</a></p></blockquote>
<blockquote><p><a href="#S5_10">5.10 TOPIC - Chanel Topic</a></p></blockquote>
<p><a href="#S6">6 Services Commands</a></p>
<blockquote><p><a href="#S6_1">6.1 SVSKILL - Force Disconnect by Service</a></p></blockquote>
<blockquote><p><a href="#S6_2">6.2 SVSMODE, SVS2MODE - Force User Mode Change</a></p></blockquote>
<blockquote><p><a href="#S6_3">6.3 SVSSNO, SVS2SNO - Forced SNomask Change</a></p></blockquote>
<blockquote><p><a href="#S6_4">6.4 SVSNICK - Forced Nick Change</a></p></blockquote>
<blockquote><p><a href="#S6_5">6.5 SVSJOIN - Forced Join</a></p></blockquote>
<blockquote><p><a href="#S6_6">6.6 SVSPART - Forced Part</a></p></blockquote>
<blockquote><p><a href="#S6_7">6.7 SVSO - Oper Permissions</a></p></blockquote>
<blockquote><p><a href="#S6_8">6.8 SVSNOOP - Oper Lockdown</a></p></blockquote>
<blockquote><p><a href="#S6_9">6.9 SVSNLINE - RealName Ban</a></p></blockquote>
<blockquote><p><a href="#S6_10">6.10 SVSFLINE - File Ban</a></p></blockquote>
<p><a href="#S7">7 Messaging</a></p>
<blockquote><p><a href="#S7_1">7.1 PRIVMSG, NOTICE - Simple Message Transmission</a></p></blockquote>
<blockquote><p><a href="#S7_2">7.2 SENDUMODE, SMO - Usermode-based Delivery</a></p></blockquote>
<blockquote><p><a href="#S7_3">7.3 SENDSNO - SNomask-based Delivery</a></p></blockquote>
<blockquote><p><a href="#S7_4">7.4 CHATOPS - IRCop Chat</a></p></blockquote>
<blockquote><p><a href="#S7_5">7.5 WALLOPS - Wallop Chat</a></p></blockquote>
<blockquote><p><a href="#S7_6">7.6 GLOBOPS - FailOp Chat</a></p></blockquote>
<blockquote><p><a href="#S7_7">7.7 ADCHAT - Admin Chat</a></p></blockquote>
<blockquote><p><a href="#S7_8">7.8 NACHAT - NetAdmin Chat</a></p></blockquote>
<p><a href="#S8">8 Ban Control</a></p>
<blockquote><p><a href="#S8_1">8.1 TKL - Master Ban Control</a></p></blockquote>
<blockquote><blockquote><p><a href="#S8_1_1">8.1.1 GLINE - Network-wide user@host ban</a></p></blockquote></blockquote>
<blockquote><blockquote><p><a href="#S8_1_2">8.1.2 GZLINE - Network-wide IP ban</a></p></blockquote></blockquote>
<blockquote><blockquote><p><a href="#S8_1_3">8.1.3 SQLINE, UNSQLINE - Network-wide Nickname ban</a></p></blockquote></blockquote>
<blockquote><blockquote><p><a href="#S8_1_4">8.1.4 SPAMFILTER - Message Spam Filtration System</a></p></blockquote></blockquote>
<p><a href="#S9">9 Base64 Tables</a></p>
<blockquote><p><a href="#S9_1">9.1 Table for SJB64 (NICK and SJOIN).</a></p></blockquote>
<blockquote><p><a href="#S9_2">9.2 Table for NICKIP.</a></p></blockquote>
<hr/>
<h1><a name="S1"></a>1 Introduction</h1>
<p>This document describes the UnrealIRCd server-to-server protocol as of protocol 2307 (Unreal 3.2.4).</p>
<h2>A word about clocks.</h2>
<p>Unreal is very time-dependant. Users and channels, for example, are timestamped, and if server clocks are not synchronized properly, things can go very wrong very fast. See <a href="http://vulnscan.org/UnrealIrcd/faq/#67">http://vulnscan.org/UnrealIrcd/faq/#67</a> for more information on this. Note that there is a slight difference between server time and what is actually reported by the UNIX date command or by the C time() function. Unreal can apply an offset to the real time to create the server time, allowing servers to be virtually synchronized when synchronizing the real clocks is not possible (such as on shell servers).
I should make it quite clear that GMT time is used for everything. To be specific, timestamps in unreal are 32-bit integer values (actually, however many bits the time_t type is, which is 32 on 32-bit systems such as x86). This integer value is the number of seconds that have elapsed since Midnight January 1, 1970 GMT (can be referred to as Epoch time in the UNIX world). This means that timezones are no problem, nor is daylight savings time (or whatever your country of choice calls it).</p>
<hr/>
<h1><a name="S2"></a>2 Server Negotiation</h1>
<p>The first step to establish a server-to-server communication is to negotiate the connection as a server. Negotiation is done using standard IRC commands - no PROTOCTL options are in force until the link is established. The first step is to open a TCP/IP connection to the target server. The target port must be one described by a listen {} block in the remote server's configuration, and that listen block must not have the clientsonly option. After the connection is open, you will be treated as any other connection and be greeted with the "Looking up your hostname..." and "Checking identd..." notices as you would for a client. As these are NOTICE messages and your session as a server isn't established, they should simply be ignored. Use the commands below to introduce a server connection.</p>
<h2><a name="S2_1"></a>2.1 PASS - Connection Password</h2>
<p><b>Syntax:</b> <tt>PASS :<i>link password</i></tt></p>
<p>The PASS command is used to transmit the password required for a server link. It must match the password specified in the remote server's link::password-receive (which can be crypted), otherwise the link will be rejected. This should be the first message sent.</p>
<h2><a name="S2_2"></a>2.2 PROTOCTL - Server Protocol Negotiation</h2>
<p><b>Syntax:</b> <tt>PROTOCTL <i>protocol options</i></tt></p>
<p>The PROTOCTL command sets several protocol options. The tokens supported are listed below.</p>
<ul>
<li>NOQUIT : When a netsplit occurs, only send a SQUIT message for each server lost. This server will assume that clients on these servers were also lost and will send the appropriate QUIT messages to local clients and to any non-NOQUIT servers.</li>
<li>TOKEN : Use tokenized commands. Tokens are case-sensitive, shortened versions of command names. Tokens will be usually one or two characters.</li>
<li>NICKv2 : Use extended NICK message for introducing users. See the NICK command for information about this.</li>
<li>VHP : When introducing a user, send his cloaked host as if it were a vhost. Usually used for services to avoid having duplicate code.</li>
<li>SJOIN : Supports SJOIN version 1 which is no longer in use. Use with SJ3.</li>
<li>SJOIN2 : Supports SJOIN version 2 which is no longer in use. Use with SJ3.</li>
<li>UMODE2 : Supports the UMODE2 command, which is a shortened version of MODE for usermode changes.</li>
<li>VL : Supports V:Line information. Extends the SERVER message to include version information used in deny version{} blocks. Note that this is assumed - unreal will always send its own version information.</li>
<li>SJ3 : Supports SJOIN version 3.</li>
<li>NS : Supports server numerics which provides a shorthand for server names. In any circumstance where a :server.name is permitted (the server is the message's real source), @servernumeric may be used instead. In addition, the server.name parameter in the NICK message may be simply the server's numeric. Requires VL support.</li>
<li>SJB64 : Timestamps in NICK and SJOIN are expressed in base64 rather than base10.</li>
<li>TKLEXT : Supports exntended TKL messages for spamfilter support.</li>
<li>NICKIP : Adds an IP parameter to the NICK message, which is the base64 encoding of the user's ip address (in network byte order). Requires NICKv2.</li>
<li>NICKCHARS : Indicates the set of enabled nickchar options (see the regular documention for info about this).</li>
<li>CHANMODES : (Not required to be sent) This is the same as the CHANMODES value in the 005 for client connections. Useful for autodetecting things like what modes are valid for ChanServ MLOCK, for example.</li>
<li>CLK : Supports an extra field in NICK for sending the cloaked host (not vhost).</li>
</ul>
<p>The syntax examples here follow the conventions for TOKEN and also NS in cases of server-only messages.</p>
<h2><a name="S2_3"></a>2.3 SERVER - Server Negotiation</h2>
<p><b>Note:</b> This message is also used for introducing additional servers, the format of this message in those cases is described later.</p>
<p><b>Syntax (normal):</b> <tt>SERVER <i>server.name</i> 1 :<i>server description</i></tt></p>
<p><b>Syntax (with VL):</b> <tt>SERVER <i>server.name</i> 1 :U<i>protocolversion</i>-<i>protocolflags</i> <i>server description</i></tt></p>
<p><b>Syntax (with VL and NS):</b> <tt>SERVER <i>server.name</i> 1 :U<i>protocolversion</i>-<i>protocolflags</i>-<i>servernumeric</i> <i>server description</i></tt></p>
<p>The literal 1 in the parameter list is the hopcount parameter. Since you are a direct link, your own hopcount will be 1.</p>
<p>The server.name is the same as that in the remote server's link:: block. When received from unreal servers, this will be the value of that server's me::name. The protocol version is the numeric protocol version (2306 for example), and the protocol flags are the server's compilation flags (described below). These two fields are checked against the deny version {} blocks in the remote server's configuration. A value of 0 for either field prevents deny version{} checking for that field. The server description can be anything. When received from unreal servers, it'll be the value of me::description.</p>
<p>The following version numbers have been used previously:</p>
<ul>
<li>2309 - Unreal 3.2.6, 3.2.7, 3.2.8</li>
<li>2308 - Unreal 3.2.5</li>
<li>2307 - Unreal 3.2.4</li>
<li>2306 - Unreal 3.2.3</li>
<li>2305 - Unreal 3.2.2</li>
<li>2304 - Unreal 3.2.1</li>
<li>2303 - Unreal 3.2beta* through 3.2 Release</li>
<li>2302 - Unreal 3.1.1 through 3.1.4</li>
<li>2301 - Unreal 3.1 Release</li>
<li>2300 - Unreal 3.0 Release</li>
</ul>
<p>The compile flags as specified in protocol flags are:</p>
<ul>
<li>c : Server is chrooted (#define CHROOTDIR).</li>
<li>C : Server has command line config (-f option) enabled (#define CMDLINE_CONFIG).</li>
<li>D : Server is in debugmode (#define DEBUGMODE).</li>
<li>F : Using filedescriptor lists.</li>
<li>h : Server is compiled with hub support (#define HUB or answer "Hub" to relevant ./Config prompt).</li>
<li>i : Server shows invisible users in /TRACE.</li>
<li>n : NOSPOOF (pingcookies) is enabled (#define NOSPOOF or answer "Yes" to relevant ./Config prompt).</li>
<li>V : Server is using valloc().</li>
<li>W : Windows IRCd.</li>
<li>Y : Syslog logging enabled.</li>
<li>6 : Server has IPv6 support (#define INET6 or answer "yes" to relevant ./Config prompt).</li>
<li>X : Server has badword stripping (user and channel modes +G) (#define STRIPBADWORDS).</li>
<li>P : Server is using poll().</li>
<li>e : Server has SSL Support (#define USE_SSL or answer "yes" (and have ssl libraries installed) to relevant ./Config prompt).</li>
<li>O : Server has OperOverride enabled (#undef NO_OPEROVERRIDE or answer "no" to relevant ./Config prompt).</li>
<li>o : Server has disabled Oper verify (#undef OPEROVERRIDE_VERIFY or answer "no" to relevant ./Config prompt).</li>
<li>Z : Server has ziplink support (#define ZIP_LINKS or answer "yes" to relevant ./Config prompt AND have the zlib dev libraries).</li>
<li>E : Server has extended channel mode support.</li>
<li>3 : 3rd party modules are loaded or some system libraries are wonky.</li>
<li>m : Private message handling is 'tainted' (one or modules registered a USERMSG hook).</li>
<li>M : Channel message handling is 'tainted' (one or modules registered a CHANMSG hook).</li>
<li>Additional Version flags can be added by 3rd-party modules.</li>
</ul>
<h2><a name="S2_4"></a>2.4 EOS - End Of Synch (TOKEN: ES)</h2>
<p><b>Syntax:</b> ES</p>
<p>Marks the end of the synching process. This is really optional, but it might be a good idea to send it anyway when you really are done synching. Once you send this, unreal will announce &quot;Client connecting&quot; or &quot;Client exiting&quot; notices (to those with snomask +F) for users (unless your server is U:Lined), and joins will be counted toward channel flood controls (chanmode +f).</p>
<p>Sending EOS only marks your server as synched, but does not do so for servers behind you. EOS would need to be sent on those servers' behalf as well.</p>
<h2><a name="S2_5"></a>2.5 NETINFO - Network Information (TOKEN: AO)</h2>
<p><b>Syntax:</b> AO <i>maxglobal</i> <i>currenttime</i> <i>protocolversion</i> <i>cloakhash</i> 0 0 0 :<i>networkname</i></p>
<p>This tells the other server your current network configuration. The max global is the highest number of concurrent users network-wide that this server has seen. The current time is a timestamp value. Protocolversion is the same as that in the SERVER command. Cloakhash is a hash representing the configured cloak keys. It may be a * if you are implementing services. The network name is that specified in set::network-name. The cloak-prefix is currently not sent here (and thus unreal won't generate warning for mismatching cloak prefixes, but they should be the same anyway).</p>
<p>It is NETINFO, not EOS, that triggers the &quot;Link bla bla bla is now synched&quot; notices, but NETINFO does not imply synching is actually complete (see EOS).</p>
<hr/>
<h1><a name="S3"></a>3 User Operations</h1>
<p>One important function of servers is it must notify all other servers about all of the users behind it. These commands represent the operations that can result in the change of a user's global state.</p>
<h2><a name="S3_1"></a>3.1 NICK - User Introduction and Nick Change (TOKEN: &amp;)</h2>
<p><b>Syntax (nick change):</b> <tt>:<i>oldnick</i> &amp; <i>newnick</i> :<i>timestamp</i></tt></p>
<p>This format of the NICK message indicates an existing user is changing his or her nickname. If a collision occurs, see the section on Nick Collisions below. The timestamp is the new nickname's timestamp.</p>
<p><b>Syntax (normal):</b> <tt>&amp; <i>nick</i> <i>hopcount</i> <i>timestamp</i> <i>username</i> <i>hostname</i> <i>server</i> <i>servicestamp</i> :<i>realname</i></tt></p>
<p><b>Syntax (NICKv2):</b> <tt>&amp; <i>nick</i> <i>hopcount</i> <i>timestamp</i> <i>username</i> <i>hostname</i> <i>server</i> <i>servicestamp</i> <i>+usermodes</i> <i>virtualhost</i> :<i>realname</i></tt></p>
<p><b>Syntax (NICKv2+CLK):</b> <tt>&amp; <i>nick</i> <i>hopcount</i> <i>timestamp</i> <i>username</i> <i>hostname</i> <i>server</i> <i>servicestamp</i> <i>+usermodes</i> <i>virtualhost</i> <i>cloakhost</i> :<i>realname</i></tt>
<p><b>Syntax (NICKv2+NICKIP):</b> <tt>&amp; <i>nick</i> <i>hopcount</i> <i>timestamp</i> <i>username</i> <i>hostname</i> <i>server</i> <i>servicestamp</i> <i>+usermodes</i> <i>virtualhost</i> <i>nickipaddr</i> :<i>realname</i></tt></p>
<p><b>Syntax (NICKv2+NICKIP+CLK):</b> <tt>&amp; <i>nick</i> <i>hopcount</i> <i>timestamp</i> <i>username</i> <i>hostname</i> <i>server</i> <i>servicestamp</i> <i>+usermodes</i> <i>virtualhost</i> <i>cloakhost</i> <i>nickipaddr</i> :<i>realname</i></tt>
<p><b>Note:</b> Because each server normally does its own cloak generation, Unreal does not expect to receive NICK messages with the CLK info, so do not send it. It will send this info to a server it has received a PROTOCTL CLK from however.</p>
<p>This format of the NICK message introduces a new user to the network. If PROTOCTL VHP is enabled, the user's cloaked host is put in the virtualhost field, otherwise it'll be * unless the user is +t. With the addition of CLK, VHP is no longer necessary for determining the cloak host.</p>
<h3><a name="S3_1_1"></a>3.1.1 Nick Collisions</h3>
<p>A nick collision occurs when a server receives a NICK message (or &amp; token) introducing a user that the server already sees on the network. When a collision occurs, one or both of the colliding clients must be disconnected. The timestamp is examined to determine which client loses. The client with the earlier timestamp remains. If both clients have equal timestamps, both are removed. Currently, Unreal handles NICK collisions both passively and agressively:</p>
<ul>
<li><b>Aggressive Handling:</b> The server actively sends a KILL message back across the link to terminate that end's client.</li>
<li><b>Passive Handling:</b> Upon receipt of a NICK message that should "win", the server simply silently exits it's own client.</li>
</ul>
<h2><a name="S3_2"></a>3.2 MODE, UMODE2 - User Mode Change (TOKEN: G or |)</h2>
<p><b>Syntax (MODE):</b> <tt>:<i>user</i> G <i>user</i> <i>modechange</i></tt></p>
<p><b>Syntax (UMODE2):</b> <tt>:<i>user</i> | <i>modechange</i></tt></p>
<p>This indicates a usermode change. The modechange can consist of zero or more strings of characters, each prefixed with either a + or -; the only delimiter between them being said + or -. If no + or - is at the beginning of the mode string, a + should be implied.</p>
<p>Some user modes are never sent between servers. Specifically, usermode +s and +O are not sent between servers. Modules can define additional usermodes that also might not be sent between servers. The UMODE2 saves bandwidth by not including the redundant target field for usermode changes, so use it when possible.</p>
<h2><a name="S3_3"></a>3.3 QUIT - User Disconnect (TOKEN: ,)</h2>
<p><b>Syntax:</b> <tt>:<i>user</i> , :<i>reason</i></tt></p>
<p>This command indicates that a user has disconnected. The reason field is filled in with the reason the user disconnected, which will be any of: quit message provided by the user in a /quit command, kill message for local operator kills, "Client exited" if the user does a brutal quit (clean (by TCP's definition) disconnect without sending a QUIT message), or a socket error message if present.</p>
<p>The QUIT message must NOT be prefixed when passing on to other servers. Only local user quit messages are affected by set::prefix-quit.</p>
<h2><a name="S3_4"></a>3.4 KILL - Force Disconnect (TOKEN: .)</h2>
<p><b>Syntax:</b> <tt>:<i>source</i> . <i>target</i> :<i>killpath</i>!<i>source</i> (<i>reason</i>)</tt></p>
<p>Used to indicate that an operator has used KILL on a user not on the same server. Anything beyond the last ! in the kill path is used as the reason. The source (reason) part is simply a standard used by Unreal. As each server passes on a KILL message, it usually prepends the bottommost part (up to the first .) of it's name followed by a ! character. When unreal receives a KILL from a directly connected irc operator, it will usually add that oper's vhost (or realhost if -x) as the first hop in the kill path, then follow with it's own name as mentioned before if it is passing to another server.</p>
<p>A server can also send KILLs on it's own. This is done in cases involving nickname collisions, fake senders, bad direction, and other cases of protocol errors. Usually, in these cases, the server puts it's own name as the source, and also prefixes with <i>bottompart</i>! like for any other ircop on that server. For example: @3 . someone :irc!irc.example.com (Nick collision)</p>
<h2><a name="S3_5"></a>3.5 SETHOST/CHGHOST - Change virtual host (TOKEN: AA or AL)</h2>
<p><b>Syntax (SETHOST):</b> <tt>:<i>source</i> AA <i>newvhost</i></tt></p>
<p><b>Syntax (CHGHOST):</b> <tt>:<i>source</i> AL <i>target</i> <i>newvhost</i></tt></p>
<p>Indicates the change of a user's virtual host. Currently, servers are expected to assume UMODE2 +xt on the target user in both commands. (In the case of SETHOST, the target is the sender.) Servers using PROTOCTL VHP will receive the cloaked host in a SETHOST message when a user activates his cloaked host. A server can also send CHGHOST (from one of it's opered clients) to change a user's hostname. This is generally used by HostServ implementations. To disable a cloaked host, use CHGHOST to set the user's virtual host equal to his real host, or use SVSMODE -xt, but the latter requires services.</p>
<h2><a name="S3_6"></a>3.6 SETIDENT/CHGIDENT - Change a user's username (TOKEN: AD or AZ)</h2>
<p><b>Syntax (SETIDENT):</b> <tt>:<i>source</i> AD <i>newusername</i></tt></p>
<p><b>Syntax (CHGIDENT):</b> <tt>:<i>source</i> AZ <i>target</i> <i>newusername</i></tt></p>
<p>Indicates the change of a user's username. No usermode change is associated with this. Unreal does not use a distinguished virtual username, so servers should only keep the original username (from the NICK message) if they intend to allow the user to reset the original username. Servers can use CHGIDENT to change a user's username.</p>
<h2><a name="S3_7"></a>3.7 SETNAME/CHGNAME - Change a user's realname (TOKEN: AE or BK)</h2>
<p><b>Syntax (SETNAME):</b> <tt>:<i>source</i> AE :<i>newrealname</i></tt></p>
<p><b>Syntax (CHGNAME):</b> <tt>:<i>source</i> BK <i>target</i> :<i>newrealname</i></tt></p>
<p>Indicates the change of a user's realname. No usermode change is associated with this. Unreal does not use a distinguished virtual realname, so servers should only keep the original realname (from the NICK message) if they intend to allow the user to reset the original realname. Servers can use CHGNAME to change a user's username. Note that servers must NOT check that the sender be an IRCop in SETNAME - normal users are permitted to use SETNAME.</p>
<h2><a name="#S3_8"></a>3.8 WHOIS - User Information (TOKEN: #)</h2>
<p><b>Syntax:</b> <tt>:<i>source</i> # [<i>from-server</i> ]<i>nick</i></tt></p>
<p>Requests the information on a user. This works exactly like the user /whois command - in fact, the source parameter must be a user, or the command will do nothing. <i>from-server</i> is the server to request the information from; if a server recives a WHOIS message without this parameter, it should return its own information on the user, otherwise it should pass the message to the given server. Note that <i>from-server</i> may name a user instead of a server (such as when a user uses /whois nick nick), in which case the the nick should be interpreted as naming the server that user is on. <i>nick</i> may be several users seperated by commas, but may not contain wildcards.</p>
<p>The reply to a WHOIS message uses the same numeric replies as the user command.</p>
<hr/>
<h1><a name="S4"></a>4 Server Operations</h1>
<p>This is different from server negotiation. Negotiation is when you are first connecting. Server introduction is used for introducing additional servers behind an existing server (aka hubbing). Hubbing is limited as specified by the hub, leaf, and leafdepth parameters in the link block and attempted violation of a hub restriction results in termination of the link. If no hub or leaf directive is given your server is a leaf by default, so any introduction of any server behind you would be an automatic drop. U:Lines don't matter here; services must be configured as a hub in the link block. The reason is U:Line is a permission rule, but hub privilege is a network structure rule.</p>
<h2><a name="S4_1"></a>4.1 SERVER - Server Introduction (TOKEN: ')</h2>
<p><b>Note: This command is also used for negotiation. Be warned that the token for this command is NOT VALID at that time! See section 2.3 for the syntax for negotiation.</b></p>
<p><b>Syntax (without PROTOCTL NS):</b> <tt>:<i>source</i> SERVER <i>new.server</i> <i>hopcount</i> :<i>description</i></tt></p>
<p><b>Syntax (with PROTOCTL NS):</b> <tt>@<i>sourcenumeric</i> SERVER <i>new.server</i> <i>hopcount</i> <i>numeric</i> :<i>description</i></tt></p>
<p>The command indicates that the server named new.server is being introduced by the source (the source is the server which new.server is directly linked to). The hopcount will be the number of links the receiving server would have to cross to reach new.server. In other words, new.server introduced itself with a hopcount of 1, and as the SERVER message is passed along, hopcount is incremented.</p>
<p>As an example, a services server faking a SERVER message for JUPE functionality would use a hopcount of 2.</p>
<h2><a name="S4_2"></a>4.2 SQUIT - Server Removal (TOKEN: -)</h2>
<p><b>Syntax:</b> <tt>:<i>source</i> SQUIT <i>server.name</i> <i>:reason</i></tt></p>
<p>From an IRCop or when server.name is not behind the source, this command requests the removal of the specified server.name. The command in this case is treated very much like KILL in the respect that the message is broadcasted to all servers, except server.name and any servers behind it. When the SQUIT reaches server.name's uplink, that server closes the link to server.name (which would then generate it's own SQUIT on behalf of it's uplink for the servers behind it).</p>
<p>A server can also use SQUIT in the same manner as QUIT to note the removal of a server behind it, or that it itself is quitting. In the former case, server.name is behind source, and the message is forward on to all other servers. In the latter case, source and server.name are equal, the receiving server closes the link and forwards the SQUIT message.</p>
<p>Unreal closes a direct link by simply sending an ERROR message and then closing the TCP connection. This typically causes the other end to generate an SQUIT bearing the message "Client exited" or similar, however, the ERROR will usually cause the server to send a message to all IRCops.</p>
<h2><a name="S4_3"></a>4.3 SDESC - Server Description (TOKEN: AG)</h2>
<p><b>Syntax:</b> <tt>:<i>source</i> AG :<i>newdesc</i></tt></p>
<p>The server to which source is connected to should have it's description updated to newdesc. This does NOT include the VL inforamtion.</p>
<h2><a name="S4_4">4.4 PING - Live Connection Query (TOKEN: 8)</a></h2>
<p><b>Syntax:</b> <tt>8 <i>source</i>[ :<i>destination</i>]</tt></p>
<p>Used to check if a connection is still live if it has been &quot;quiet&quot; for a certain amount of time. Typically, unreal will send PING requests at intervals determined by the class::pingfreq setting. PINGs originating from the direct uplink will use the token, but it seems PINGs originating from a distant server will not.</p>
<p>The response to a PING is sent with the <a href="#S4_5">PONG</a> command.</p>
<p>When receiving a two-parameter PING, the second parameter is the target. If the target isn't you, you can either reply on behalf of that target (using its name instead of yours), or if there is a real connection representing the target, forward the PING to the target.</p>
<h2><a name="S4_5">4.5 PONG - Live Connection Reply (TOKEN: 9)</a></h2>
<p><b>Syntax:</b> <tt>9 <i>source</i>[ :<i>destination</i>]</tt></p>
<p>Used to respond to a <a href="#S4_4">PING</a> query.</p>
<p><b>Responding to a ping:</b> Once a PING is received, you usually have an amount of time to respond equal to your class::pingfreq. The correct response will always have two parameters. If you received one parameter, then the received parameter becomes the second parameter of your response, and the first parameter is your server name. If you received two parameters, the response returns both parameters in reverse order.</p>
<p>For example, the response to <tt>8 uplink.server</tt> is <tt>9 my.name uplink.server</tt>, while the response to <tt>PING distant.server your.server</tt> is <tt>9 your.server distant.server</tt>. Unreal typically includes a : prior to the last parameter. This isn't required if that parameter contains no spaces, but it is especially important to not include the colon when reversing the parameters, or else Unreal mistake it for a single-parameter PONG.
<p>If a two-parameter PONG is received, the second parameter names the target. If the target is not you, and a real connection represents that target, you should forward the PONG message via that connection.</p>
<h2><a name="#S4_6"></a>4.6 STATS - Server Stats (TOKEN: 2)</h2>
<p><b>Syntax:</b> <tt>:<i>source</i> 2 [<i>type</i> [<i>server</i>] [<i>extended-params</i>]]</tt></p>
<p>Requests statistics or configuration information from a server. This command is used to transport cross-server STATS requests from users (eg: /stats o other.server), and should only be sent from a user (not a server). With no parameters, this will cause unreal to simply dump its help output. <i>type</i> is the type of stats to request, <i>server</i> names a server (or a user on that server) to request stats from, and <i>extended-params</i> is used to filter output from STATS G, etc. When received, it is up to the receiver to determine what stats to support and how to reply, but generally numeric replies are used. For the list of unreal's stats types, type /stats in a client for the helptext dump.</p>
<p><b>Note:</b> Stats set as oper-only (see set::oper-only-stats) will be refused from a server. In this case, it will be necessary to send the stats request from a psuedo-oper (such as a services agent, etc) for services/stats/etc.</p>
<hr/>
<h1><a name="S5"></a>5 Channel Operations</h1>
<p>These commands deal with the state of channels across the network. Unreal only supports Network Channels, where the first character is a # character.</p>
<h2><a name="S5_1"></a>5.1 SJOIN - Channel Burst (TOKEN: ~)</h2>
<p><b>Syntax:</b> <tt>@<i>servernumeric</i> ~ <i>timestamp</i> <i>channel</i> +<i>modes</i>[ <i>modeparams</i>] :<i>memberlist</i> <i>&amp;ban</i> <i>"exempt</i> <i>'invex</i></tt></p>
<p>Timestamp is the channel timestamp and can be !b64 as defined by PROTOCTL SJB64. Modes should only include those in the last three mode sets listed in CHANMODES. Modeparams is one parameter for each mode character that requires one. Memberlist is a series of users (all of which must at least be behind the server sending the SJOIN), each user is prefixed with one or more characters indicating their status. Owners (+q) are prefixed with *, admins (+a) ~, ops (+o) @, halfops (+h) %, voices (+v) +. Normal users are not prefixed with anything. Ban, ban exception, and invite exception masks are also included, with bans prefixed with &amp;, ban exceptions prefixed with ", and invite exceptions with '. Note that when a &amp;, " or ' is encountered as the first character, further processing of ~, *, @, %, or + characters must not continue because ban, exempt, and invite masks can contain any of those characters. (Plus it's just not right for a ban mask to be marked as a channel admin...)</p>
<p>If the channel didn't already exist it is created with the information given in the SJOIN. Otherwise the timestamp is used to determine how the SJOIN information is handled. As a given, all members are joined into the channel, regardless. The mode information (modes, modeparams, memberlist prefixes, bans, exempts, and invites) is subject to the timestamp rules:</p>
<ul>
<li>If the channel's current timestamp is equal to the timestamp in SJOIN, then the mode information is merged.</li>
<li>If the channel's current timestamp is less than the SJOIN timestamp, then the mode information is ignored.</li>
<li>If the channel's current timestamp is greater than the SJOIN timestamp, then the channel's existing mode information is cleared (for example, deop, etc all local clients), and the SJOIN mode information is added.</li>
</ul>
<p>When merging modes, conflicting modes (including +p vs +s, differing +l limits or +k keys, etc) are handled as follows:</p>
<ul>
<li><b>Private (+p) vs. Secret (+s):</b> Secret (+s) is preferred. Private (+p) is removed. (Note: there is a <a href="http://bugs.unrealircd.org/view.php?id=2391">bug</a> in Unreal versions prior to 3.2.3 in which a desynch will occur in which one side is +p and the other is +s. Update to Unreal 3.2.4 if you have problems with this.)</li>
<li><b>Strip Color (+S) vs. Block Color (+c):</b> Block (+c) is preferred. Strip (+S) is removed. (Note: Bug for +p vs. +s in prior unreal versions apply here as well.)</li>
<li><b>Channel Limit:</b> Numericly larger limit is preferred (for example, +l 30 versus +l 15 : +l 30 wins).</li>
<li><b>Channel Key:</b> &quot;Larger&quot; key (as defined by strcmp) is preferred (for example, +k moo versus +k meow : +k moo wins).</li>
<li><b>Channel Link:</b> &quot;Larger&quot; link name (as defined by stricmp - not case sensitive) is preferred (for example, +L #moo versus +L #meow : +L #moo wins, but +L #Meow versus +L #meow : values are equal).</li>
<li><b>Flood String:</b> Not really sure on this. I think larger value in each component wins.</li>
<li><b>Join-Throttle:</b> Highest of time period wins, if equal, highest of join amount wins (so +j 3:40 beats +j 5:20 but +j 5:20 beats +j 3:20).</li>
<li>Parameterized modes in third party modules will define their own conflict resolution formula.</li>
</ul>
<h2><a name="S5_2"></a>5.2 JOIN - Channel Join (TOKEN: C)</h2>
<p><b>Syntax:</b> <tt>:<i>source</i> C <i>#channel</i></tt></p>
<p>Indicates a user has joined a channel. Only one channel is sent this way, and the key is not sent even if the user gave one one joining. If the channel parameter is the special "0" case, the server must interpret the message as a PART for all channels the user is on.</p>
<h2><a name="S5_3"></a>5.3 PART - Channel Part (TOKEN: D)</h2>
<p><b>Syntax:</b> <tt>:<i>source</i> D <i>#channel</i>[ :<i>reason</i></tt>]</p>
<p>Indicates a user has left a channel. Only one channel is sent this way. The reason parameter may be left out if no reason was given.</p>
<h2><a name="S5_4"></a>5.4 KICK - Channel Kick (TOKEN: H)</h2>
<p><b>Syntax:</b> <tt>:<i>source</i> H <i>#channel</i> <i>user</i> :<i>reason</i></tt></p>
<p>Orders the forced removal of user from #channel with the given reason. When updating state for this command, it should be the same as if :user PART #channel had been received - the user is removed from #channel's memberlist.</p>
<h2><a name="S5_5"></a>5.5 MODE - Channel Mode (TOKEN: G)</h2>
<p><b>Note:</b> This is the same command as that used for usermode changes.</p>
<p><b>Syntax:</b> <tt>:<i>source</i> G <i>#channel</i> <i>modechange</i> <i>modeparams</i>[ <i>timestamp</i>]</tt></p>
<p>Changes the specified modes on the given channel. If the source is a server and the last parameter is numeric, it is interpreted as timestamp (although it can also be consumed as a parameter for modes. For example: :server.name MODE #channel +l 4 &lt;-- 4 will be a timestamp and the +l parameter). When a mode change is timestamped in this way, the mode is treated as it is with SJOIN: the MODE message is ignored if the timestamp is greater than the channel timestamp. (If the timestamp is equal, the mode is simply added replacing any conflicting modes already in place.)</p>
<p>A services implementation can easily clear all entries in a list mode such as bans with SVSMODE (see below).</p>
<h2><a name="S5_6"></a>5.6 INVITE - Invite a user to a channel (TOKEN: *)</h2>
<p><b>Syntax:</b> <tt>:<i>source</i> * <i>target</i> <i>#channel</i></tt></p>
<p>Sends to target an invitation to join #channel. If the source is a channel operator on #channel, or a U:Lined server, the invitation grants the user the temporary ability to join the channel regardless of any bans or some restricting channel modes (not +O or +A).</p>
<h2><a name="S5_7"></a>5.7 SAJOIN - Channel Force Join (TOKEN: AX)</h2>
<p><b>Syntax:</b> <tt>:<i>source</i> AX <i>targetuser</i> <i>#channel</i></tt></p>
<p>This requests the forced join of targetuser to #channel. This type of forced join overrides bans, and most modes. The server to which targetuser is connected to must actually acknowledge the join for it to occur. Service implementations may ignore this command, as they would only ever receive it if an SAJOIN was targeted at a service client, in which case it should be ignored...</p>
<h2><a name="S5_8"></a>5.8 SAPART - Channel Force Part (TOKEN: AY)</h2>
<p><b>Syntax:</b> <tt>:<i>source</i> AY <i>targetuser</i> <i>#channel</i>[ :<i>reason</i>]</tt></p>
<p>This requests the forced part of targetuser from #channel. This is slightly different from a KICK in that the user's removal is announced with PART. The server to which targetuser is connected to must actually acknowledge the part for it to occur. Service implementations may ignore this command, as they would only ever receive it if an SAPART was targeted at a service client, in which case it should be ignored...</p>
<p>The reason field is optional. If provided the acknowledging PART message should prefix the message with &quot;SAPart:&quot;.</p>
<h2><a name="S5_9"></a>5.9 SAMODE - Channel Force Mode (TOKEN: o)</h2>
<p><b>Syntax:</b> <tt>:<i>source</i> o <i>#channel</i> <i>modechange</i> <i>modeparams</i></tt></p>
<p>This has the same parameters as for MODE. The only difference is that servers probably will never receive this (but is best to document just in case), and that absolutely NO permission checking is done on anything.</p>
<h2><a name="S5_10"></a>5.10 TOPIC - Channel Topic (TOKEN: ) )</h2>
<p><b>Syntax:</b> <tt>:<i>source</i> ) <i>#channel</i> <i>nick</i> <i>timestamp</i> :<i>topic</i></tt></p>
<p>Changes the channel topic information. This format is used when synching, as well as when a topic is changed normally. Nick is the user who changed the topic (depending on compile options, it can be just nick or a full nick!user@host), timestamp is when the change occured, and topic is the new topic text. Normally, only a newer timestamp will actually change the topic, but a U:Lined server can use an older timestamp as well (such as for TOPICLOCK).
<hr/>
<h1><a name="S6"></a>6 Services Commands</h1>
<p>These are commands typically employed by a service implementation, in addition to some of the normal commands. All of the commands listed here require the sender to be correctly U:Lined. This means that the services server name must appear within a ulines {} block in the unrealircd.conf configuration for ALL servers in the network. All servers and clients behind a U:Lined server are themselves U:Lined.</p>
<h2><a name="S6_1"></a>6.1 SVSKILL - Force Disconnect by Service (TOKEN: h)</h2>
<p><b>Syntax:</b> <tt>:<i>source</i> h <i>target</i> :<i>reason</i></tt></p>
<p>This command is similar to KILL but differs in several ways. First of all: there is no mutilation of the reason value. The reason given is the exact reason used to generate QUIT messages sent to users. Second, it is silent; no server notice is generated in response to this command. Third, it can only be used by a U:Lined server or client (such as services).</p>
<p>Because this command can be dangerous in the hands of an abusive person, service implementations should avoid granting humans control over the reason parameter. In cases of commands where a person has control over such parameter, either use a regular KILL instead, or otherwise modify the reason so that operators can be held accountable if necessary.</p>
<h2><a name="S6_2"></a>6.2 SVSMODE, SVS2MODE - Force User Mode Change (TOKEN: n or v)</h2>
<p><b>Syntax (SVSMODE):</b> <tt>:<i>source</i> n <i>target</i> +<i>usermodes</i></tt></p>
<p><b>Syntax (SVS2MODE):</b> <tt>:<i>source</i> v <i>target</i> +<i>usermodes</i></tt></p>
<p>Judging by these commands alone, you'd think they are identical. Both commands force a usermode change to occur. This is typically used by services to set +r on a user who has successfully identified. They differ in that SVS2MODE also sends the mode change to the user, while SVSMODE does not (hidden mode change).</p>
<p>SVSMODE and SVS2MODE also give special treatment to usermode +d. Rather than setting the deaf mode like you might expect, SVS(2)MODE +d allows services to change a user's services stamp (which is given in the NICK message). This could allow services to set the service stamp to an easily identifiable value that could then be used to say "hey, this person identified already". The syntax of this is: +d <i>newservicestamp</i> and can be combined with setting other usermodes as well. The deaf mode <b>can</b> be set by using +d without the service stamp parameter; however, in this case you <b>cannot</b> set the service stamp in the same SVS(2)MODE message.</p>
<p><b>Note:</b> Do <b>NOT</b> use SVSMODE to remove IRCop status from a user. Use the SVSO command for that instead.</p>
<p>Alternatively, target can name a channel. In this case, the mode change parameter can consist of a - character, followed by any or all of: b, e, I, q, a, o, h, or v. These characters cause the corresponding lists to be cleared of all entries. For example: SVSMODE #channel -b removes ALL bans from #channel, and SVSMODE #channel -qaohv turns ALL users on #channel into normal users (removes all owner, admin, op, halfop, and voice status). In this case, the uplink will acknowledge with a MODE listing the bans, etc that were removed.</p>
<p>To completely clear a channel of all modes: MODE #channel -cfijklmnprstzACGMKLNOQRSTVu (plus any added by third-party module) followed by SVSMODE #channel -beIqaohv.</p>
<h2><a name="S6_3"></a>6.3 SVSSNO, SVS2SNO - Forced SNomask Change (TOKEN: BV or BW)</h2>
<p><b>Syntax (SVSSNO):</b> <tt>:<i>source</i> BV <i>target</i> +<i>snomasks</i></tt></p>
<p><b>Syntax (SVS2SNO):</b> <tt>:<i>source</i> BW <i>target</i> +<i>snomask</i></tt></p>
<p>Changes a user's snomasks. The difference between SVSSNO and SVS2SNO is the same as with SVSMODE versus SVS2MODE. If the user is not +s, you must add it via SVSMODE +s. For example:</p>
<pre>:OperServ v someuser +s
:OperServ BW someuser +ks</pre>
<h2><a name="S6_4"></a>6.4 SVSNICK - Forced Nick Change (TOKEN: e)</h2>
<p><b>Syntax:</b> <tt>:<i>source</i> e <i>target</i> <i>newnick</i> :<i>newtimestamp</i></tt></p>
<p>Forces the specified user to change his nick to newnick and also sets the nick timestamp to newtimestamp (so, for example, services could protect identified users from a nick collision by simply setting the nick timestamp to something way less than "now" - though currently this requires actually changing the nick too). SVSNICK requires the server to which the target is connected to acknowledge the nick change. If the user specified by newnick already exists, then target will be disconnected (even if it's something like a case-change).</p>
<h2><a name="S6_5"></a>6.5 SVSJOIN - Forced Join (TOKEN: BX)</h2>
<p><b>Syntax:</b> <tt>:<i>source</i> BX <i>target</i> <i>#channel</i></tt></p>
<p>This is identical to SAJOIN with a few exceptions: 1) It is U:Line-only. 2) No opernotice on use. 3) Bans and restricting modes are respected, a prior INVITE message must be sent to cause bans to be ignored.</p>
<h2><a name="S6_6"></a>6.6 SVSPART - Forced Part (TOKEN: BT)</h2>
<p><b>Syntax:</b> <tt>:<i>source</i> BT <i>target</i> <i>#channel</i> :<i>reason</i></tt></p>
<p>Also identical to SAPART with a few exceptions: no static prefix on the optional part reason, and no global notice, and requires a U:Line. Usage recommendation of SVSPART versus KICK is the same as for SVSKILL versus KILL.</p>
<h2><a name="S6_7"></a>6.7 SVSO - Oper Permissions (TOKEN: BB)</h2>
<p><b>Syntax:</b> <tt>:<i>source</i> BB <i>target</i> <i>flagchanges</i></tt></p>
<p>This allows a service to add or remove IRCop permission flags for a user. Flagchanges is formatted similar to that of MODE with the exception that operflags are used instead of usermodes. If the change string consists only of -, then all oper permissions, usermodes, and snomasks are removed (as if the user had himself typed MODE nick -Oo).</p>
<p>If you are granting IRCop permissions to a user who is not currently an IRCop, you should follow up with an SVSMODE +o or SVSMODE +O as appropriate. For example:</p>
<pre>:OperServ BB somenick +o
:OperServ BW somenick +cefknoqsSv
:OperServ AL somenick local.oper.somethinghere.net
:OperServ v somenick +Ohs </pre>
<h2><a name="S6_8"></a>6.8 SVSNOOP - Oper Lockdown (TOKEN: f)</h2>
<p><b>Syntax:</b> <tt>:<i>source</i> f <i>(op)</i><i>server.name</i></tt></p>
<p>The (op) parameter is either a + or - indicating if NOOP mode should be activated (+) or deactivated (-). When NOOP mode is activated, all IRCops on the server are deopered (including local operators) and the /oper command is disabled. IRCop privileges can still be granted through use of SVSO. On UnrealIRCd, it is not necessary to masskill all IRCops on the nooped server, as they are deopered automatically.</p>
<h2><a name="S6_9"></a>6.9 SVSNLINE - RealName Ban (TOKEN: BR)</h2>
<p><b>Syntax:</b> <tt>:<i>source</i> BR <i>op</i> <i>reason</i> :<i>realname mask</i></tt></p>
<p>Op is either + (add) or - (remove). In the case of +, reason is a space-escaped string (all space chars are encoded as _). If -, reason is ignored.</p>
<h2><a name="S6_10"></a>6.10 SVSFLINE - File Ban (TOKEN: BC)</h2>
<p><b>Syntax (add):</b> <tt>:<i>source</i> BC + <i>filemask</i> :<i>reason</i></tt></p>
<p><b>Syntax (remove):</b> <tt>:<i>source</i> BC - <i>filemask</i></tt></p>
<p><b>Syntax (clear):</b> <tt>:<i>source</i> BC *</tt></p>
<p>Adds or removes a DCCDENY item for the specified filemask on all servers. These DCCDENYs are hard dccdenies - the /dccallow command cannot override it. The last form removes all dccdenies added via SVSFLINE.</p>
<hr/>
<h1><a name="S7"></a>7 Messaging</h1>
<p>What good is Internet Relay <b>CHAT</b> if users cannot <b>CHAT</b>? This section addresses the commands through which arbitrary user messages are sent.</p>
<h2><a name="S7_1"></a>7.1 PRIVMSG, NOTICE - Simple Message Transmission (Token: ! or B)</h2>
<p><b>PRIVMSG Syntax:</b> <tt>:<i>source</i> ! <i>target</i> :<i>message</i></tt></p>
<p><b>NOTICE Syntax:</b> <tt>:<i>source</i> B <i>target</i> :<i>message</i></tt></p>
<p>Sends a messages to the given target. The target either names a single client, or identifies a list of clients in which the message is to be sent to. The available targets include:</p>
<ul>
<li><i>nickname</i>: Names a single user to whom the message is delivered.</li>
<li><i>nickname</i>@<i>servermask</i>: Also names a single user, but the message will only be delivered if the user is connected to a server matching the specified servermask. This is typically used for sending messages to services. The target must not be changed at any point along the path it must travel for delivery, even up to the final receipt of the message by the target. This allows the target to know it has been sent a message in this way.</li>
<li>#<i>channelname</i>: Sends a message to all users on the specified channel (except when channel is a moderated auditorium (+mu), in which case the wierd +mu sending behavior goes off).</li>
<li><i>modeprefix</i>#<i>channelname</i>: Sends a message to all users on the given channel having the given status or higher. For example: + means all voices, halfops, etc.</li>
<li>$<i>servermask</i>: Sends a message to ALL users on all servers matching the specified servermask (known as a server broadcast message). The RFC requirements of having a TLD with no wildcards is not applied to U:Lined clients.</li>
</ul>
<p>Unreal does not support the #hostmask format.</p>
<h2><a name="S7_2"></a>7.2 SENDUMODE, SMO - Usermode-based Delivery (TOKEN: AP or AU)</h2>
<p><b>Syntax:</b> <tt>@<i>servernumeric</i> AU <i>umode</i> :<i>message</i></tt></p>
<p>Sends the specified message to all users with the given mode. Only one usermode may be given. This is a server-only command if you can't tell from the sender prefix :) .</p>
<p>The message will be displayed as coming from the receiving client's own server. It may be appropriate to add a &quot;*** Notice (or other leader here) -- from blah:&quot; if you wish to clarify where the message is from.</p>
<h2><a name="S7_3"></a>7.3 SENDSNO - SNomask-based Delivery (TOKEN: Ss)</h2>
<p><b>Syntax:</b> <tt>@<i>servernumeric</i> Ss <i>snomask</i> :<i>message</i></tt></p>
<p>Sends the specified message to all users with the given snomask. Only one snomask may be given. This is a server-only command if you can't tell from the sender prefix :) .</p>
<p>The message will be displayed as coming from the receiving client's own server. It may be appropriate to add a &quot;*** Notice (or other leader here) -- from blah:&quot; if you wish to clarify where the message is from.</p>
<h2><a name="S7_4"></a>7.4 CHATOPS - IRCop Chat (TOKEN: p)</h2>
<p><b>Syntax:</b> <tt>:<i>source</i> p :<i>message</i></tt></p>
<p>Sends the message to all IRCops on all servers.</p>
<h2><a name="S7_5"></a>7.5 WALLOPS - Wallop Chat (TOKEN: =)</h2>
<p><b>Syntax:</b> <tt>:<i>source</i> = :<i>message</i></tt></p>
<p>Sends the message to all users with usermode +w, whether they are ircops or not.</p>
<h2><a name="S7_6"></a>7.6 GLOBOPS - FailOp Chat (TOKEN: ])</h2>
<p><b>Syntax:</b> <tt>:<i>source</i> ] :<i>message</i></tt></p>
<p>Send the message to all IRCops with usermode +g.</p>
<h2><a name="S7_7"></a>7.7 ADCHAT - Admin Chat (TOKEN: x)</h2>
<p><b>Syntax:</b> <tt>:<i>source</i> x :<i>message</i></tt></p>
<p>Send the message to all Server and Network Admins (usermode +A).</p>
<h2><a name="S7_8"></a>7.8 NACHAT - NetAdmin Chat (TOKEN: AC)</h2>
<p><b>Syntax:</b> <tt>:<i>source</i> AC :<i>message</i></tt></p>
<p>Send the message to all Network Admins (usermode +N).</p>
<hr/>
<h1><a name="S8"></a>8 Ban Control</h1>
<p>Sometimes, you have the misfortune of encountering a user who has no purpose but to serve as an annoyance to your server or network. These commands transmit network-wide ban information amongst each other.</p>
<h2><a name="S8_1"></a>8.1 TKL - Master Ban Control (TOKEN: BD)</h2>
<p>The TKL command seems to have one oddity about it: the real ban source is included in the TKL command rather than in the sender prefix. Most likely this is done for synching reasons (so that the *line ban can be credited to the proper person even if he/she is offline). For this reason, the command syntax is given without any sender prefix at all. It is still permissible to use one, however.</p>
<h3><a name="S8_1_1"></a>8.1.1 GLINE - Network-wide user@host ban</h3>
<p><b>Add Syntax (TKL):</b> <tt>BD + G <i>userpart</i> <i>hostpart</i> <i>source</i> <i>expiretimestamp</i> <i>settimestamp</i> :<i>reason</i></tt></p>
<p><b>Remove Syntax (TKL):</b> <tt>BD - G <i>userpart</i> <i>hostpart</i> <i>source</i></tt></p>
<p>Adds and Removes Network-wide user@host bans, known as G:Lines. The GLINE command itself must not be used. The userpart and hostpart are the user portion and hostname portion of the ban mask. The expiretimestamp is 0 if the G:Line should not expire, otherwise it will expire at the given time. It is an absolute time, not relative, thus it's imperitive to have reasonably synchrnoized clocks or bans may be removed too early or even immediately!</p>
<h3><a name="S8_1_2"></a>8.1.2 GZLINE - Network-wide IP ban</h3>
<p><b>Add Syntax (TKL):</b> <tt>BD + Z * <i>ipmask</i> <i>source</i> <i>expiretimestamp</i> <i>settimestamp</i> :<i>reason</i></tt></p>
<p><b>Remove Syntax (TKL):</b> <tt>BD - Z * <i>ipmask</i> <i>source</i></tt></p>
<p>Adds and Removes Network-wide IP bans, known as Global Z:Lines. The GZLINE command itself must not be used. Ipmask permits CIDR notation as well as wildcard masks.</p>
<h3><a name="S8_1_3"></a>8.1.3 SQLINE, UNSQLINE - Network-wide Nickname ban (TOKEN: c or d)</h3>
<p><b>Add Syntax (TKL):</b> <tt>BD + Q <i>hold</i> <i>nickmask</i> <i>source</i> <i>expiretimestamp</i> <i>settimestamp</i> :<i>reason</i></tt></p>
<p><b>Add Syntax (SQLINE):</b> <tt>:<i>source</i> c <i>nickmask</i> :<i>reason</i></tt></p>
<p><b>Remove Syntax (TKL):</b> <tt>BD - Q <i>hold</i> <i>nickmask</i> <i>source</i></tt></p>
<p><b>Remove Syntax (UNSQLINE):</b> <tt>:<i>source</i> d <i>nickmask</i></tt></p>
<p>In the TKL syntax, the hold parameter is either a * to mark the qline as a nick ban, or an H to mark it as a services hold. A services hold does not trigger qline rejection notice, and is typically used by NickServ to reserve registered nicks until they are released by the owner. The (UN)SQLINE syntax can only be used by a server, but any user can be used as the source for the TKL syntax. Unlike G and GZ lines, Q:Lines do not cause existing matching users to be disconnected or otherwise affected.</p>
<p>The TKL syntax is preferred, since it is more flexible, but (UN)SQLINE is permitted for compatibility.</p>
<h3><a name="S8_1_4"></a>8.1.4 SPAMFILTER - Message Spam Filtration System</h3>
<p>Proper use of spamfilter in TKL commands requires use of PROTOCTL TKLEXT, which increases the number of parameters allowed in TKL.</p>
<p><b>Add Syntax (TKL):</b> <tt>BD + F <i>target(s)</i> <i>action</i> <i>source</i> 0 <i>settimestamp</i> <i>tklduration</i> <i>tklreason</i> :<i>regex</i></tt></p>
<p><b>Remove Syntax (TKL):</b> <tt>BD - F <i>target(s)</i> <i>action</i> <i>source</i> 0 <i>settimestap</i> :<i>regex</i></tt></p>
<p>Adds and Removes network-wide spamfilters. The SPAMFILTER command itself must not be used. See <a href="http://vulnscan.org/UnrealIrcd/unreal32docs.html#feature_spamfilter">http://vulnscan.org/UnrealIrcd/unreal32docs.html#feature_spamfilter</a> for a list of valid targets. For actions, a single character is used to identify the action to be taken:</p>
<ul>
<li>K (kill) - The user is simply disconnected, with the reason given.</li>
<li>S (tempshun) - A temporary shun is placed on the user. This shun is applied only to that user, and disappears if the user reconnects.</li>
<li>s (shun) - A regular shun on the user's IP address is added. This causes all users with the same hostname to be shunned, but they will also stay shunned if they reconnect.</li>
<li>k (kline) - A K:Line is added on the user's IP address.</li>
<li>z (zline) - A Z:Line is added on the user's IP address.</li>
<li>g (gline) - A G:Line is added on the user's IP address.</li>
<li>Z (gzline) - A Global Z:Line is added on the user's IP address.</li>
<li>b (block) - Messages (or users!) matching the filter are simply blocked.</li>
<li>d (dccblock) - The user is prevented from sending files using DCC for the remainder of his session (in other words, until he quits).</li>
<li>v (viruschan) - User is removed from all channels, joined to the viruschan as defined in conf, and cannot message anything but that channel.</li>
<li>w (warn) - No action on the user is taken. Only the Spamfilter notice is sent to opers with snomask +S.</li>
</ul>
<h1><a name="S9">9 Base64 Tables</a></h1>
<p>Unreal uses base64 encoding to allow saving bandwidth by encoding numbers in a more compact format. Unreal uses two different variations of base64, one used for the SJB64 PROTOCTL option (in NICK and SJOIN), and one used for NICKIP.</p>
<h2><a name="S9_1">9.1 Table for SJB64 (NICK and SJOIN).</a></h2>
<p>In NICK and SJOIN, remember that the timestamp will be prefixed with ! to signal a base64 timestamp.</p>
<p>Just like in base10, the least significant &quot;digit&quot; is last.</p>
<pre> 0 0 17 H 34 Y 51 p
1 1 18 I 35 Z 52 q
2 2 19 J 36 a 53 r
3 3 20 K 37 b 54 s
4 4 21 L 38 c 55 t
5 5 22 M 39 d 56 u
6 6 23 N 40 e 57 v
7 7 24 O 41 f 58 w
8 8 25 P 42 g 59 x
9 9 26 Q 43 h 60 y
10 A 27 R 44 i 61 z
11 B 28 S 45 j 62 {
12 C 29 T 46 k 63 }
13 D 30 U 47 l
14 E 31 V 48 m
15 F 32 W 49 n
16 G 33 X 50 o</pre>
<h2><a name="S9_2">9.2 Table for NICKIP.</a></h2>
<p>In this table, the IP is encoded in network byte order. In terms of IPs, this means the first byte of the address really is first. Each &quot;digit&quot; in the base64 encoded IP corresponds to 6 bits of the IP address.</p>
<p>An IPv4 address is 32 bits, so 6 base64 &quot;digits&quot; are needed. Since base64 requires values to come in multiples of 4 &quot;digits&quot;, padding characters (=) need to be added if a value comes up short. In the case of IPv4 addresses, two are needed.</p>
<p>IPv6 addresses are 128-bit. They therefore need 22 base64 &quot;digits&quot; plus 2 pad characters.</p>
<pre> 0 A 17 R 34 i 51 z
1 B 18 S 35 j 52 0
2 C 19 T 36 k 53 1
3 D 20 U 37 l 54 2
4 E 21 V 38 m 55 3
5 F 22 W 39 n 56 4
6 G 23 X 40 o 57 5
7 H 24 Y 41 p 58 6
8 I 25 Z 42 q 59 7
9 J 26 a 43 r 60 8
10 K 27 b 44 s 61 9
11 L 28 c 45 t 62 +
12 M 29 d 46 u 63 /
13 N 30 e 47 v
14 O 31 f 48 w (pad) =
15 P 32 g 49 x
16 Q 33 h 50 y</pre>
</body>
</html>
+1 -2
View File
@@ -1,9 +1,8 @@
Token List (c) 2002-2004 codemastr (Dominick Meglio) [codemastr@unrealircd.com]
(As of Unreal3.2.3)
Command Token
------------------------------------------------------------------------------------------------
PRIVATE !
PRIVMSG !
WHOIS #
NICK &
SERVER '
+3 -1
View File
@@ -1,8 +1,10 @@
VL Information (c) 2002 codemastr (Dominick Meglio) [codemastr@unrealircd.com]
(As of Unreal3.2-beta11)
Protocol Version
------------------------------------------------------------------------------------------------
2309 3.2.6, 3.2.7, 3.2.8
2308 3.2.5
2307 3.2.4
2306 3.2.3
2305 3.2.2
2304 3.2.1
+350 -122
View File
@@ -12,7 +12,7 @@
.block_old { font-size: 14; }
.set { font-weight: bold; }
.desc { margin-left: 15px; }
pre { font: "times new roman"; font-style: normal;}
pre { font: "times new roman"; font-style: normal; background-color: #eeeeee;}
</style>
</head>
@@ -21,23 +21,25 @@
<a href="unreal32docs.es.html">Spanish</a> |
<a href="unreal32docs.hu.html">Hungarian</a> |
<a href="unreal32docs.fr.html">French</a> |
<a href="unreal32docs.gr.html">Greek</a>
<a href="unreal32docs.gr.html">Greek</a> |
<a href="unreal32docs.nl.html">Dutch</a> |
<a href="unreal32docs.ru.html">Russian</a> |
<a href="unreal32docs.tr.html">Turkish</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.3 </font><br>
<b>Letztes Dokumentation Update:</b> 2005-03-13</div>
<b>Head Coders:</b> Stskeeps / codemastr / Syzop / Luke<br>
<font size="4">Version: 3.2.8</font><br>
<b>Letztes Update dieses Handbuchs:</b> 2009-01-03</div>
<b>Head Coders:</b> Stskeeps / codemastr / Syzop / Luke<font face="Helvetica,Arial" size="-1">/
aquanight / WolfSage</font><br>
<b>Contributors:</b> McSkaf / Zogg / NiQuiL / assyrian / chasm / DrBin / llthangel / Griever / nighthawk<br>
<b>Dokumentation</b><b>:</b> CKnight^ / Syzop<br>
<b>Deutsche Übersetzung:</b> Stylus740 (irc.smart-irc.net)<br>
<p>Aufgrund des wachsenden Umfangs der Dokumentation von UnrealIRCd3.2 wurde das
Dokument auf HTML umgestellt, um leichter navigieren und besser
Querverweisen folgen zu können. Um diese Dokumentation zu lesen, wird einer der
nachfolgenden Browser benötigt. Aktuelle Dokumentationen sind erhältlich&nbsp; @ <a href="http://www.vulnscan.org/UnrealIrcd/unreal32docs.html">http://www.vulnscan.org/UnrealIrcd/unreal32docs.html</a>
und&nbsp; eine FAQ @
<a href="http://www.vulnscan.org/UnrealIrcd/faq/.">http://www.vulnscan.org/UnrealIrcd/faq</a>/.</p>
<b>Deutsche Übersetzung:</b> Stylus740 (irc.insiderZ.de)<br>
<p>Um diese Dokumentation zu lesen, ist einer der unten aufgeführten
kompatiblen Browser erforderlich. Aktuelle Dokumentationen sind erhältlich&nbsp; @
<a href="http://www.vulnscan.org/UnrealIRCd/unreal32docs.html">http://www.vulnscan.org/UnrealIRCd/unreal32docs.html</a>
und&nbsp; eine FAQ @ <a href="http://www.vulnscan.org/UnrealIRCd/faq/.">http://www.vulnscan.org/UnrealIRCd/faq</a>/.</p>
<p><b>Kompatible Browser: </b><br>
<ul>
<li>Opera 6.02
@@ -68,9 +70,11 @@ und&nbsp; eine FAQ @
-- 3.14. <a href="#feature_spamfilter"> Spamfilter</a><br>
-- 3.15. <a href="#feature_cidr">CIDR<br>
</a>
-- 3.16. <a href="#feature_nickchars">Nick Zeichensätze</a><a href="#feature_cidr"><br>
-- 3.16. <a href="#feature_nickchars">Nick Zeichensätze<br>
</a>-- 3.17 <a href="#feature_cgiirc">CGI:IRC Unterstützung<br>
</a>-- 3.18 <a href="#feature_timesync">Zeitsynchronisation</a><a href="#feature_cidr"><br>
</a>
-- 3.17. <a href="#feature_other">Andere Features</a> <a href="#feature_other"><br>
-- 3.19. <a href="#feature_other">Andere Features</a> <a href="#feature_other"><br>
</a>
4. <a href="#configuringyourunrealircdconf">Konfiguration der unrealircd.conf
Datei</a><br>
@@ -109,8 +113,9 @@ Konfigurationsdatei</a><br>
---4.32. <a href="#aliasblock">Alias Block</a><br>
---4.33. <a href="#helpblock">Help Block<br>
</a>---4.34. <a href="#officialchannels"> Official Channels Block</a><br>
---4.35. <a href="#spamfilter"> Spamfilter Block</a><br>
---4.36. <a href="#setblock">Set Block -=- (networks/unrealircd.conf)</a><br>
---4.35. <a href="#spamfilter"> Spamfilter Block<br>
</a>---4.36. <a href="#cgiirc">Cgiirc Block</a><br>
---4.37. <a href="#setblock">Set Block -=- (networks/unrealircd.conf)</a><br>
5. <a href="#addtlfiles">Additional Files</a><br>
6. <a href="#userchannelmodes">User & Channel Modi</a><br>
7. <a href="#useropercommands">User & Oper Befehlsliste<br>
@@ -148,15 +153,15 @@ Verwendung des Textes mit anderer Software oder das Anbieten zusammen mit
anderer Software ohne schriftliche Genehmigung des UnrealIRCd Entwicklungsteams
ist streng verboten. Solange es der Benutzung von UnrealIRCd dient, darf dieses
Dokument beliebig kopiert/gedruckt/veröffentlicht, jedoch nicht verändert
werden. &#8211; Copyright UnrealIRCd Development Team 2002-2005</p>
werden. &#8211; Copyright UnrealIRCd Development Team 2002-2006</p>
<p>Bitte lesen Sie diese Anleitung, bevor Sie um Hilfe bitten und schauen Sie
WIRKLICH erst ein mal in die <a href="#faq">FAQ</a>, da rund 80% der Fragen dort
WIRKLICH erst einmal in die <a href="#faq">FAQ</a>, da rund 80% der Fragen dort
beantwortet sind. Hilft
dies alles nicht, kann bzgl. Support bei irc.ircsystems.net
(Port 6667) Channel #unreal-support
nach Unterstützung gefragt werden (Wir erwarten UNBEDINGT, dass zuvor Dokumentation
und
FAQ gelesen wurden und wir helfen nur zu UnrealIRCd, nicht zu Services!). Im Falle eines echten Bugs (z.B. einem Crash) bitte Nachricht an
und <a href="#faq">
FAQ</a> gelesen wurden und wir helfen nur zu UnrealIRCd, nicht zu Services!). Im Falle eines echten Bugs (z.B. einem Crash) bitte Nachricht an
<a href="http://bugs.unrealircd.org" TARGET="_blank">http://bugs.unrealircd.org</a>.</p></div>
<p><font size="+2"><b><a name="notesonolder">1.1 &#8211; Anmerkungen zu Upgrade/Mixing 3.1.x -&gt; 3.2</a>&nbsp; </b></font><br>
@@ -179,7 +184,7 @@ Upgrade von 3.2 Versionen</a></b></font><br>
<p>Der empfohlene Weg für ein Upgrade ist:<br>
Linux:<br>
<ul>
<li>Altes UnrealIRCd Verzeichnis umbenennen (oder es wird im nächsten Schritt
<li>Altes UnrealIRCd Verzeichnis umbenennen (ansonsten wird es im nächsten Schritt
überschrieben)
<li>Neue UnrealIRCd Version entpacken und &quot;./Config&quot; und &quot;make&quot;
laufen lassen (*NIX).
@@ -204,7 +209,9 @@ Bug gemeldet wird!</p></div>
<li><b>*NIX Versionen:</b>
<ul>
<li>Linux (2.2.*, 2.4.*, 2.6.*)
<li>FreeBSD (4.*, 5.*)
<li>FreeBSD (4.*, 5.*, 6.*)
<li>NetBSD (2.*)
<li>OpenBSD (3.7, 3.8, 3.9)
<li>Solaris (9,10)
</ul>
<li><b>Windows Versionen:</b>
@@ -223,12 +230,12 @@ Bug gemeldet wird!</p></div>
</ul>
<br>
Im Falle, dass Unreal3.2 korrekt unter anderen Betriebssystemen läuft, bitte
Details an <a href="mailto:coders@lists.unrealircd.com">coders@lists.unrealircd.com
Details an <a href="mailto:coders@lists.unrealircd.org">coders@lists.unrealircd.org
</a> senden. <p><b>Installationsanleitungen</b><br>
Linux:<br>
<ol>
<li>gunzip -d Unreal3.2.2.tar.gz
<li>tar xvf Unreal3.2.2.tar
<li>gunzip -d Unreal3.2.X.tar.gz
<li>tar xvf Unreal3.2.X.tar
<li>cd Unreal3.2
<li>./Config
<li>Die hierbei angezeigten Fragen nach bestem Wissen beantworten. Allgemein ist
@@ -252,7 +259,8 @@ erl
die .conf Datei bezogen wird (die Neuanfängern momentan noch unbekannt sein
dürfte).</p>
<p>Dieser Abschnitt kann auch übersprungen werden, obwohl es sinnvoll ist ihn
vor oder nach der Installation zu lesen.</p></div>
vor oder nach der Installation zu lesen, weil man ansonsten Konzepte wie
cloaking, snowmask etc. nicht verstehen wird..</p></div>
<p><font size="+2"><b><a name="feature_cloaking">3.1 - Cloaking</a></b></font></p><div class="desc">
<p>Das Cloaking ist eine Möglichkeit, den echten Hostnamen vor Usern zu verbergen.
@@ -269,7 +277,7 @@ einstellen k
Modul mitgeliefert:<br>
<b>cloak:</b><br>
Hierbei handelt es sich um das neue offizielle Cloaking Modul, welches viel
sicherer, als der alte Algorithmis ist. Es verwendet intern md5 und erfordert, dass 3
sicherer, als der alte Algorithmus ist. Es verwendet intern md5 und erfordert, dass 3
<b>set::cloak-keys::</b>
gesetzt sind, die gemischt Kleinbuchstaben (a-z), Großbuchstaben (A-Z) und
Ziffern (0-9) enthalten [z.B. "AopAS6WQH2Os6hfosh4SFJHs"] . Siehe auch
@@ -278,18 +286,22 @@ example.conf f
GEHEIM gehalten werden. Wenn jemand
diese drei Keys kennt, kann er den geschützten Host erkennen und den realen
Host ermitteln (was dem Usermodus +x sinnlos macht).</p>
<p>Tipp: Wenn man auf *NIX Systemen arbeitet und Cloak Keys neu erstellt werden
müssen, kann man in der Shell eingeben: '<font face="Courier New">./unreal
gencloak</font>' und erhält als Ausgabe 3 zufällig erzeugte Strings, die man
verwenden kann.</p>
</div>
<p><font size="+2"><b><a name="feature_modules">3.2 - Module</a></b></font></p><div class="desc">
<p>UnrealIRCd unterstützt Module, was sehr nützlich
ist, weil:<br>
- Module können bei laufendem ircd geladen/ersetzt/gelöscht werden (durch /rehash). Dadurch können verschiedene Bugs gefixt
oder neue Module hinzugefügt werden, ohne dass ein Neustart erforderlich ist!<br>
oder neue Module hinzugefügt werden, ohne dass ein Neustart erforderlich ist.<br>
- Andere Entwickler können weitere Module mit neuen Befehlen oder anderen
Usermodi erstellen.<br>
UnrealIRCd selbst enthält nur wenige Module. Durch eine Suche auf <a href="http://www.unrealircd.com"> www.unrealircd.com</a>
(modules) oder per Google können weitere 3rd party Module gefunden werden.</p>
<p>Achtung: Minimal müssen zwei Module geladen sein, oder der ircd wird nicht
starten!<br>
starten:<br>
- das commands Modul: commands.so (oder commands.dll bei Windows)<br>
- das cloaking Modul: üblicherweise cloak.so (oder cloak.dll bei Windows)</p>
</div>
@@ -338,7 +350,7 @@ die beispielsweise den Befehl <font face="Courier New" size="2">/register</font>
an Chanserv weiterleitet, wenn der erste Parameter mit einem # beginnt oder an
Nickserv, wenn der erste Parameter nicht mit einem # beginnt. (Im ersten Fall
soll ein Channel registriert werden, im zweiten Fall ein Nickname)</p>
<p>Aliases werden in alias Blocks in der Konfigurationsdatei definiert oder in
<p>Aliases werden in <a href="#aliasblock"> alias Blocks</a> in der Konfigurationsdatei definiert oder in
einer Include Datei mit den häufigsten Default Aliassen.&nbsp;</p></div>
<p><font size="+2"><b><a name="feature_helpop">3.5 - Helpop</a></b></font></p><div class="desc">
@@ -983,6 +995,24 @@ die *lines/shuns (Default: 'Spam/advertising'). Mehrere Worte sind durch Undersc
Channels, in den bei der Action 'viruschan' gejoined wird (Default: #help)<br>
<b>set::spamfilter::virus-help-channel-deny</b> ermöglicht es, normale Joins in
den virus-help-channel zu blockieren (Default: no)
<p>
<font size="+1"><b><a name="feature_spamfilter_slow">Erkennung langsamer
Spamfilter</a></b></font><br>
Ein Spamfilter Ausdruck (regex) kann einen IRCd beträchtlich verlangsamen. Das
hängt davon ab, welcher Ausdruck verwendet wird (und wie dieser Ausdruck
ausgewertet wird). Einige Spamfilter Ausdrücke sind sehr schnell und UnrealIRCd
kann Tausende von ihnen pro Sekunde verarbeiten. Andere können extrem langsam
sein und mehrere Sekunden für die Ausführung benötigen und dadurch den IRCd
regelrecht einfrieren..<br>
Zur Unterstützung gegen dieses Problem stellt Unreal eine Erkennung langsamer
Spamfilter ('Slow Spamfilter Detection' bereit: Für jeden Spamfilter wird bei jeder Ausführung die hierzu benötigte
Zeit überprüft. Wird ein
bestimmter Grenzwert erreicht, warnt der IRCd oder entfernt einfach diesen Spamfilter.<br>
Warnungen werden durch <b>set::spamfilter::slowdetect-warn</b> konfiguriert (Default:
250ms) und die automatische Löschung durch <b>set::spamfilter::slowdetect-fatal</b>
(Default: 500ms). Man kann beide Werte auf 0 setzen um die Erkennung langsamer
Spamfilter zu deaktivieren.<br>
Dieses Feature steht unter Windows derzeit noch nicht zur Verfügung.
</div>
<p><font size="+2"><b><a name="feature_cidr">3.15 - CIDR</a></b></font></p><div class="desc">
@@ -991,7 +1021,7 @@ erm
unter Verwendung von CIDR vergeben. Daher ist es möglich unter Verwendung eines
CIDR basierten Banns auf einfache Weise ganze ISPs zu sperren. Unreal
unterstützt CIDR sowohl für IPv4 als auch für IPv6. CIDR Masken können
benutzt werden bei: allow::ip, ban user::mask, ban ip::mask, except ban::mask, except
benutzt werden bei: allow::ip, oper::from::userhost, ban user::mask, ban ip::mask, except ban::mask, except
throttle::mask, und except tkl::mask (für gzline, gline, and shun). Zusätzlich
kann&nbsp; CIDR bei /kline, /gline, /zline, /gzline, und /shun benutzt werden. Unreal
verwendet die Standard Syntax von IP/bits, z.B. 127.0.0.0/8 (passt auf 127.0.0.0 - 127.255.255.255),
@@ -1002,45 +1032,51 @@ und fe80:0:0:123::/64 (passt auf fe80:0:0:123:0:0:0:0 - fe80:0:0:123:ffff:ffff:f
Zeichensätze/Sprachen in Nicknamen gestattet sein sollen. Dies wird festgelegt
in <b> set::allowed-nickchars</b>.<br>
Hier eine Liste der möglichen Einstellungen:<br>
<table border="1" width="868">
<tr><td width="98"><b>Name:</b></td> <td width="494"><b>Beschreibung:</b></td> <td width="254"><b>Character set/encoding:</b></td></tr>
<tr><td width="98">catalan</td> <td width="494">Katalanische Zeichen</td> <td width="254">iso8859-1 (latin1)</td></tr>
<tr><td width="98">danish</td> <td width="494"> Dänische Zeichen</td> <td width="254"> iso8859-1
<table border="1" width="868" height="902">
<tr><td width="98" height="19"><b>Name:</b></td> <td width="494" height="19"><b>Beschreibung:</b></td> <td width="254" height="19"><b>Character set/encoding:</b></td></tr>
<tr><td width="98" height="19">catalan</td> <td width="494" height="19">Katalanische Zeichen</td> <td width="254" height="19">iso8859-1 (latin1)</td></tr>
<tr><td width="98" height="19">danish</td> <td width="494" height="19"> Dänische Zeichen</td> <td width="254" height="19"> iso8859-1
(latin1)</td></tr>
<tr><td width="98">dutch</td> <td width="494"> Niederländische Zeichen</td> <td width="254"> iso8859-1 (latin1)</td></tr>
<tr><td width="98">french</td> <td width="494"> Französische Zeichen</td> <td width="254"> iso8859-1 (latin1)</td></tr>
<tr><td width="98">german</td> <td width="494"> Deutsche Zeichen </td> <td width="254">iso8859-1 (latin1)</td></tr>
<tr><td width="98">swiss-german</td> <td width="494"> Schweiz-Deutsche Zeichen
(kein 'ß')</td> <td width="254"> iso8859-1 (latin1)</td></tr>
<tr><td width="98">icelandic </td> <td width="494">Isländische Zeichen</td> <td width="254"> iso8859-1 (latin1)</td></tr>
<tr><td width="98">italian</td> <td width="494"> Italienische Zeichen</td> <td width="254"> iso8859-1 (latin1)</td></tr>
<tr><td width="98">spanish</td> <td width="494"> Spanische Zeichen</td> <td width="254"> iso8859-1 (latin1)</td></tr>
<tr><td width="98">swedish</td> <td width="494"> Schwedische Zeichen</td> <td width="254"> iso8859-1 (latin1)</td></tr>
<tr><td width="98"><b>latin1</b></td> <td width="494"> katalanisch, dänisch, niederländisch, französisch, deutsch, schweizer deutsch, spanisch,
isländisch, italienisch, schwedisch</td> <td width="254"> iso8859-1 (latin1)
<tr><td width="98">hungarian</td> <td width="494"> Ungarische Zeichen </td> <td width="254"> iso8859-2 (latin2), windows-1250</td></tr>
<tr><td width="98">polish</td> <td width="494"> Polnische Zeichen&nbsp; <td width="254"> iso8859-2 (latin2)</td></tr>
<tr><td width="98">romanian</td> <td width="494"> Rumänische Zeichen <td width="254"> iso8859-2 (latin2), windows-1250, iso8859-16</td></tr>
<tr><td width="98"><b>latin2</b></td> <td width="494"> ungarisch, polnisch,
rumänisch <td width="254"> iso8859-2 (latin2)</td></tr>
<tr><td width="98">polish-w1250</td> <td width="494"> Polnische Zeichen,
Windows Variante (leider mehr allgemein, als iso)<td width="254"> windows-1250</td></tr>
<tr><td width="98">slovak-w1250</td> <td width="494"> Slowakische Zeichen,
Windows Variante<td width="254"> windows-1250</td></tr>
<tr><td width="98">czech-w1250</td> <td width="494"> Tschechische Zeichen,
Windows Variante <td width="254">windows-1250</td></tr>
<tr><td width="98"><b>windows-1250</b></td> <td width="494"> polnisch-w1250,
slowakisch-w1250, tschechisch-w1250, ungarisch, rumänisch <td width="254">windows-1250</td></tr>
<tr><td width="98">greek</td> <td width="494"> Griechische Zeichen <td width="254">iso8859-7</td></tr>
<tr><td width="98">turkish</td> <td width="494"> Türkische Zeichen <td width="254">iso8859-9</td></tr>
<tr><td width="98">russian-w1251</td> <td width="494"> Russische Zeichen <td width="254">windows-1251</td></tr>
<tr><td width="98">hebrew</td> <td width="494"> Hebräische Zeichen <td width="254">iso8859-8-I/windows-1255</td></tr>
<tr><td width="98">chinese-simp</td> <td width="494"> Einfaches Chinesisch <td width="254">Multibyte: GBK/GB2312</td></tr>
<tr><td width="98">chinese-trad</td> <td width="494"> Traditionelles
Chinesisch <td width="254">Multibyte: GBK</td></tr>
<tr><td width="98">chinese-ja</td> <td width="494"> Japanisch Hiragana/Pinyin <td width="254">Multibyte: GBK</td></tr>
<tr><td width="98"><b>chinese</b></td> <td width="494"> chinese-* <td width="254">Multibyte: GBK</td></tr>
<tr><td width="98"><b>gbk</b></td> <td width="494"> chinese-* <td width="254">Multibyte: GBK</td></tr>
<tr><td width="98" height="19">dutch</td> <td width="494" height="19"> Niederländische Zeichen</td> <td width="254" height="19"> iso8859-1 (latin1)</td></tr>
<tr><td width="98" height="19">french</td> <td width="494" height="19"> Französische Zeichen</td> <td width="254" height="19"> iso8859-1 (latin1)</td></tr>
<tr><td width="98" height="19">german</td> <td width="494" height="19"> Deutsche Zeichen </td> <td width="254" height="19">iso8859-1 (latin1)</td></tr>
<tr><td width="98" height="19">swiss-german</td> <td width="494" height="19"> Schweiz-Deutsche Zeichen
(kein 'ß')</td> <td width="254" height="19"> iso8859-1 (latin1)</td></tr>
<tr><td width="98" height="19">icelandic </td> <td width="494" height="19">Isländische Zeichen</td> <td width="254" height="19"> iso8859-1 (latin1)</td></tr>
<tr><td width="98" height="19">italian</td> <td width="494" height="19"> Italienische Zeichen</td> <td width="254" height="19"> iso8859-1 (latin1)</td></tr>
<tr><td width="98" height="19">spanish</td> <td width="494" height="19"> Spanische Zeichen</td> <td width="254" height="19"> iso8859-1 (latin1)</td></tr>
<tr><td width="98" height="19">swedish</td> <td width="494" height="19"> Schwedische Zeichen</td> <td width="254" height="19"> iso8859-1 (latin1)</td></tr>
<tr><td width="98" height="57"><b>latin1</b></td> <td width="494" height="57"> katalanisch, dänisch, niederländisch, französisch, deutsch, schweizer deutsch, spanisch,
isländisch, italienisch, schwedisch</td> <td width="254" height="57"> iso8859-1 (latin1)
<tr><td width="98" height="19">hungarian</td> <td width="494" height="19"> Ungarische Zeichen </td> <td width="254" height="19"> iso8859-2 (latin2), windows-1250</td></tr>
<tr><td width="98" height="19">polish</td> <td width="494" height="19"> Polnische Zeichen&nbsp; <td width="254" height="19"> iso8859-2 (latin2)</td></tr>
<tr><td width="98" height="38">romanian</td> <td width="494" height="38"> Rumänische Zeichen <td width="254" height="38"> iso8859-2 (latin2), windows-1250, iso8859-16</td></tr>
<tr><td width="98" height="19"><b>latin2</b></td> <td width="494" height="19"> ungarisch, polnisch,
rumänisch <td width="254" height="19"> iso8859-2 (latin2)</td></tr>
<tr><td width="98" height="38">polish-w1250</td> <td width="494" height="38"> Polnische Zeichen,
Windows Variante (leider mehr allgemein, als iso)<td width="254" height="38"> windows-1250</td></tr>
<tr><td width="98" height="19">slovak-w1250</td> <td width="494" height="19"> Slowakische Zeichen,
Windows Variante<td width="254" height="19"> windows-1250</td></tr>
<tr><td width="98" height="19">czech-w1250</td> <td width="494" height="19"> Tschechische Zeichen,
Windows Variante <td width="254" height="19">windows-1250</td></tr>
<tr><td width="98" height="38"><b>windows-1250</b></td> <td width="494" height="38"> polnisch-w1250,
slowakisch-w1250, tschechisch-w1250, ungarisch, rumänisch <td width="254" height="38">windows-1250</td></tr>
<tr><td width="98" height="19">greek</td> <td width="494" height="19"> Griechische Zeichen <td width="254" height="19">iso8859-7</td></tr>
<tr><td width="98" height="19">turkish</td> <td width="494" height="19"> Türkische Zeichen <td width="254" height="19">iso8859-9</td></tr>
<tr><td width="98" height="19">russian-w1251</td> <td width="494" height="19"> Russische Zeichen <td width="254" height="19">windows-1251</td></tr>
<tr><td width="98" height="19">belarussian-w1251</td> <td width="494" height="19"> Belarussische
Zeichen <td width="254" height="19">windows-1251</td></tr>
<tr><td width="98" height="19">ukrainian-w1251</td> <td width="494" height="19"> Ukrainische
Zeichen <td width="254" height="19">windows-1251</td></tr>
<tr><td width="98" height="1"><b>windows-1251</b></td> <td width="494" height="26"> russisch-w1251,
belarussisch-w1251, ukrainisch-w1251 <td width="254" height="26">windows-1251</td></tr>
<tr><td width="98" height="19">hebrew</td> <td width="494" height="19"> Hebräische Zeichen <td width="254" height="19">iso8859-8-I/windows-1255</td></tr>
<tr><td width="98" height="19">chinese-simp</td> <td width="494" height="19"> Einfaches Chinesisch <td width="254" height="19">Multibyte: GBK/GB2312</td></tr>
<tr><td width="98" height="19">chinese-trad</td> <td width="494" height="19"> Traditionelles
Chinesisch <td width="254" height="19">Multibyte: GBK</td></tr>
<tr><td width="98" height="19">chinese-ja</td> <td width="494" height="19"> Japanisch Hiragana/Pinyin <td width="254" height="19">Multibyte: GBK</td></tr>
<tr><td width="98" height="19"><b>chinese</b></td> <td width="494" height="19"> chinese-* <td width="254" height="19">Multibyte: GBK</td></tr>
<tr><td width="98" height="19"><b>gbk</b></td> <td width="494" height="19"> chinese-* <td width="254" height="19">Multibyte: GBK</td></tr>
</table>
&nbsp;
<p>Anmerkung 1: Zu beachten ist, dass einige Kombinationen Probleme verursachen können.
@@ -1054,9 +1090,9 @@ Anmerkung 2: Die
welchem Kleinbuchstaben gehört, erfolgt nach dem US-ASCII, was bedeutet, dass
ö und Ö nicht als 'gleiches Zeichen' erkannt werden und deswegen jemand
beispielsweise den Nick Bär haben kann, während jemand anderes gleichzeitig
den Nick BÄr hat. Das ist eine Einschränkung durch das aktuelle SDystem und IRCd
den Nick BÄr hat. Das ist eine Einschränkung durch das aktuelle System und IRCd
Standards, die nicht binnen kurzer Zeit gelöst werden können. Den Usern sollte
diese Enschränkung klar sein. Zu beachten dabei ist, dass es diese
diese Einschränkung klar sein. Zu beachten dabei ist, dass es diese
Einschränkung schon immer bei den Channelnamen gegeben hat, in denen ja fast
alle Zeichen erlaubt sind und schon immer die US-ASCII Regeln der
Zeichenübereinstimmung gegolten haben.<br>
@@ -1064,6 +1100,7 @@ Zeichen
Anmerkung 3: Die Basis Nick Zeichen (a-z A-Z 0-9 [ \ ] ^ _ - { | }) sind immer
erlaubt/aktiviert.<br>
<br>
<br>
Beispiel 1, für West-Europäer:<br>
<br>
<font face="Courier">
@@ -1076,7 +1113,41 @@ Schriftzeichen gestatten will:<br>
<font face="Courier">
set { allowed-nickchars { chinese-simp; chinese-trad; }; };</font></div>
<p><font size="+2"><b><a name="feature_other">3.17 - Andere Features</a></b></font></p><div class="desc">
<p><font size="+2"><b><a name="feature_cgiirc">3.17 - CGI:IRC Unterstützung</a></b></font></p><div class="desc">
UnrealIRCD unterstützt eine CGI:IRC Host Manipulation. Das bedeutet: Man kann
bestimmte CGI:IRC Gateways als &quot;trusted&quot; (&quot;vertraut&quot;)
festlegen, wodurch der IRCd veranlasst wird, statt Host/IP des CGI:IRC Gatewäys
überall im IRC die reale Host/IP des Users anzuzeigen.
<p>Nähere Informationen, wie dies konfiguriert wird, stehen im <a href="#cgiirc">cgiirc
Block</a>&nbsp;</div>
<p><font size="+2"><b><a name="feature_timesync">3.18 - Zeitsynchronisation</a></b></font></p>
<div class="desc">
<p>Es ist für die IRC Server sehr wichtig, immer die korrekte Zeit
eingestellt zu haben. Ohne korrekte - insbesondere unterschiedliche Zeit
zwischen Servern - können Channel desynchronisieren (auf verschiedenen
Servern wird etwas anderes im gleichen Channel angezeigt), ahnungslose User
grundlos gekillt werden, Channels gar nicht oder falsch in der /List Anzeige
eingetragen sein. Kurzum: es entstehen sehr große Probleme.´</p>
<p>UnrealIRCd hat eine eine Unterstützung zur Zeitsybchronisation integriert.
Obwohl sie nicht optimal ist (die Zeiten können weiterhin um wenige Sekunden
differieren), sollten damit die meisten Zeitunterschiede beseitigt werden.
Soweit möglich ist es weiterhin empfehlenswert, eine Zeitsynchronisations
Software wie 'ntpd' auf&nbsp; *NIX Systemen oder den Zeit Synchonisations
Service von Windosws laufen zu haben. In diesem Fall kann man die Unreal Zeitsynchronisation
abschalten. (mehr dazu später)</p>
<p>Per Default versucht UnrealIRCd beim Start einen Versuch der
Zeitsynchronisation. Es werden hierzu einige Anforderungen an Zeitserver
gesendet und sobald die erste (schnellste) Antwort empfangen wird die interne
IRCD Uhr (NICHT die Systemuhr) danach eingestellt. Wenn aus irgendwelchen
Gründen nicht binnen 3 Sekunden eine Zeitabfrage beantwortet wird, startet
der IRCD ohne Zeitsynchronisation (sollte nur selten passieren).</p>
<p>Zeitsynchronisation wird im <b>set::timesynch</b> Block konfiguriert (oder
abgeschaltet). Siehe in der <a href="#setblock">Set-Block Beschreibung</a>
für weitere Informationen.</p>
</div>
<p><font size="+2"><b><a name="feature_other">3.18 - Andere Features</a></b></font></p><div class="desc">
<p>UnrealIRCd hat eine Reihe weiterer Features, die hier nicht alle einzeln
aufgeführt sind. Man wird sie während der Konfiguration selbst herausfinden ;)</p></div>
@@ -1085,11 +1156,11 @@ aufgef
der unrealircd.conf</a></b></font>
<a name="configuringyourunrealircdconf">&nbsp;</a></p><div class="desc">
<p>Beim ersten Mal wird das Erstellen einer guten unrealircd.conf Datei eine
gewisse Zeit in Anspruch nehmen - je nach Vorerfahrung etwa 10 - 60 Minuten. Man
kann versuchen, so rasch wie möglich den ircd zu starten und später zu
verfeinern oder man kann die Haupt Abschnitte Schritt für Schritt erlernen (was
der empfohlene Weg ist ;P). Im Falle auftretender Probleme zuerst die Syntax
überprüfen, diese Anleitung und auch die FAQ bevor man nach Hilfe fragt oder
gewisse Zeit in Anspruch nehmen - je nach Vorerfahrung etwa 15 - 60 Minuten.
Eine <u>gute</u> unrealircd.conf zu erstellen, wird bedeutend länger dauern.
Man sollte nicht hetzen, um den IRCd rasch gestartet zu bekommen, sondern lieber
Schritt für Schritt vorangehen.&nbsp; Im Falle auftretender Probleme zuerst die Syntax
überprüfen, diese Anleitung und auch die <a href="#faq"> FAQ</a> bevor man nach Hilfe fragt oder
einen Bug meldet.</p></div>
<p><b><font size="+2"><a name="configurationfileexplained">4.1 Erklärung der
Konfigurationsdatei<br>
@@ -1122,7 +1193,7 @@ werden oder in mehreren Zeilen. Normalerweise wird das oben angegebene Format
benutzt, welches leicht zu lesen ist und auch in der mitgelieferten
unrealircd.conf benutzt wird. </p>
<p>Achtung: Die Konfigurationsdatei ist derzeit &quot;case sensitive&quot;,
daher ist &quot;BLOCK-NAME&quot; nicht dasselbe wie &quot;block-name&quot;. Es
daher ist &quot;<i>BLOCK-NAME</i>&quot; nicht dasselbe wie &quot;<i>block-name</i>&quot;. Es
gibt eine spezielle Notation wie Einträge in der Konfigurationsdatei als
Beschreibung angegeben werden. Spricht man z.B. über &quot;&lt;directive-name&gt;&quot;
im obigen Beispiel, so wird angegeben &quot;&lt;block-name&gt;::&lt;block-directive&gt;&quot;
@@ -1140,10 +1211,10 @@ einem Unterblock sein, der keinen Namen hat.</p>
&nbsp;&nbsp;&nbsp; über mehrere<br>
&nbsp;&nbsp;&nbsp;&nbsp;Zeilen */<br>
</p>
<p>Es sollte nun klar sein, wie das Block Format der .conf funktioniert und nun
kann begonnen werden, eine eigene unrealircd.conf zu erstellen. Hierzu kann man
auch dei Beispielsdatei oder Teile der Dokumentation verwenden und sich die
entsprechenden Blöcke in die eigene Datei kopieren und editieren. Es ist
<p>Nachdem nun klar ist, wie das funktioniert, sollte man die <i>doc/example.conf</i>
in das UnrealIRCd Verzeichnis kopieren (z.B.: /home/user/Unreal3.2) und in <i>unrealircd.conf</i>
umbenennen. (Oder man erstellt eine unrealircd.conf und kopiert sich die
entsprechenden Blöcke und editieret sie). Es ist
empfehlenswert, sich Schritt für Schritt durch alle Blöcke und diese Anleitung
als Referenz durchzuarbeiten.</p>
<p></p></div>
@@ -1977,7 +2048,7 @@ bekannt als T:Line)</font><div class="desc">
channel &lt;channel-name&gt;;
options {
ssl;
}
};
};</pre>
<p>Mit dem TLD Block kann man eine motd (Messageoftheday), rules und channels für
User basierend auf deren Host festlegen. Das ist nützlich, falls man
@@ -2058,7 +2129,7 @@ bekannt als Z:Line)</font><div class="desc">
};</pre>
<p>Der Ban IP Block verhindert das Verbinden von bestimmten IP Adressen her zum
Server. Das gilt sowohl für Verbindungsversuche von Usern als auch von Servern.<br>
<b>ban::mask</b> ist eine IP, die Wildcards enthalten kann<br>
<b>ban::mask</b> ist eine IP, die Wildcards enthalten kann.<br>
<b>ban::reason</b> ist der Grund, warum der Bann eingetragen wurde.<br>
Da dieser Bann auch Server betreffen kann, sollte man beim Eintrag von IP
Adressen sehr vorsichtig sein.</p>
@@ -2131,7 +2202,7 @@ Maske kann Wildcards enthalten.<br>
<b>ban::reason</b> legt den Grund fest, der dem User angezeigt wird.<br>
<b>ban::action</b> kann ebenfalls festgelegt werden. Dabei ist der Default auf
&quot;kill&quot;. <i>tempshun</i> setzt ein shun auf die Verbindung des Users
und arbeitet effektiv gegen zombies und/oder Bots mit dynamischer IP, weil sie
und arbeitet effektiv gegen Zombies und/oder Bots mit dynamischer IP, weil sie
unschuldige User nicht beeinträchtigen. <i>shun/kline/zline/gzline</i> setzen
einen Bann auf die IP (*@IPADDR). Die Dauer dieser Banns kann mit 'set::ban-version-tkl-time'
konfiguriert werden und beträgt per Default 1 Tag.</p>
@@ -2188,6 +2259,9 @@ angegeben, welcher Bann Typ ausgenommen werden soll. G
gline, gzline, qline, gqline und shun, für Ausnahmen von Glines, Global Zlines,
Qlines, Global Qlines und Shuns. Wenn das {} Format benutzt wird, können
unterschiedliche Typen angegeben werden.</p>
<p>Anm. des Übersetzers: Die Ausnahmen funktionieren wirklich nur bei gebanntem
<b>breiteren </b>Host (123.123.* oder *@url). Man kann damit z.B. nicht einen
versehentlichen Bann auf Localhost verhindern.</p>
<p>Beispiel:
<pre>except tkl {
mask myident@my.isp.com;
@@ -2273,7 +2347,7 @@ angegebenen abgelehnt.<br>
haben oder nicht haben darf. Die Flags müssen direkt nacheinander ohne
Zwischenräume angegeben sein. Wird einem Zeichen ein &quot;!&quot;
vorangestellt, darf der Server dieses Flag nicht haben, steht kein &quot;!&quot;
davor, so muss der Server dieses Flag haben, um vom Linken ausgeschlossen zu
davor, muss der Server dieses Flag haben, um vom Linken ausgeschlossen zu
sein.</p>
</div>
<p><font class="block_section"><a name="denylinkblock">4.24 - </a> </font><a name="denylinkblock"><font class="block_name">Deny Link Block</font>
@@ -2290,7 +2364,7 @@ bekannt als D/d:Line)</font><div class="desc">
Linken ausschliessen kann.<br>
<b>deny::mask</b> definiert eine Wildcard Maske auf den Servernamen, für den
die Regel gelten soll.<br>
<b>deny::rule</b> ist ein sehr komplexer Ausdruck. Ein crule Ausdruck erlaubt
<b>deny::rule</b> ist ein sehr komplexer Ausdruck. Ein rule Ausdruck erlaubt
es, den Link sehr detailliert zu steuern und ist aufgebaut wie eine Programm
Anweisung. Vier Operatoren werden unterstützt:<br>
&nbsp;&nbsp;&nbsp; connected(&lt;servermask&gt;) ergibt 'wahr', wenn ein Server
@@ -2439,7 +2513,7 @@ im Oper Block bei &quot;oper::svhost&quot;.</p>
</a>
<font class="block_optional">OPTIONAL</font> <font class="block_old">(Früher
bekannt als badwords.*.conf)</font>
</p><div class="desc">
</p><div class="desc" style="width: 1195; height: 374">
<p>Syntax:
<pre>badword &lt;type&gt; {
word &lt;text-to-match&gt;;
@@ -2447,14 +2521,15 @@ bekannt als badwords.*.conf)</font>
action &lt;replace|block&gt;;
};</pre>
<p>Mit dem Badword Block kann die Liste für User- und Channelmodus +G
bearbeitet werden, um bestimmte &quot;badwords&quot; zu beahandeln. <b>badword::</b>
legt den Typ fest, wobei gültige Werte hier sind: channel, message und quit. channel
gilt für Channel Modus +G list, message gilt für User Modus +G list, und quit
bearbeitet werden, um bestimmte &quot;badwords&quot; zu behandeln. <b>badword::</b>
legt den Typ fest, wobei hier gültige Werte sind: 'channel', 'message' und 'quit'.
'channel'
gilt für Channel Modus +G Liste, 'message' gilt für User Modus +G Liste, und 'quit'
gilt für die quit Meldung. <b> badword::word</b> kann ein einfaches Wort sein
oder ein Ausdruck, nach dem gesucht werden soll. <b>badword::replace</b> ist ein
Ersetzungstext, der anstelle des gefundenen Badwords angezeigt wird. Wird hier
nichts eingetragen, so wird ein gefundenes Badword durch&nbsp; &lt;censored&gt;
erstezt. Bei <b> badword::action</b> wird angegeben, was im Falle eines
ersezt. Bei <b> badword::action</b> wird angegeben, was im Falle eines
gefundenen Badwords geschehen soll. Wird hier das Wort &quot;replace&quot;
eingetragen, dann wird das Badword ersetzt. Falls hier &quot;block&quot;
angegeben wird, wird die gesamte Nachricht gar nicht erst angezeigt. Falls
@@ -2556,19 +2631,23 @@ wie bei &quot;password-connect&quot;.
</p>
<p><b>hub oder leaf</b><br>
Zu einem hub sind mehrere Server verbunden, ein leaf hat immer nur eine
Verbindung. Ein Server ist entweder ein hub oder ein leaf - die beiden Optionen
können nicht kombiniert werden.
Verbindung. Ein Server ist solange ein leaf, wie es keine hub Anweisung gibt.
Ebenso ist er ein leaf, wenn in der Anweisung lediglich * definiert ist oder die
leaf Tiefe (Anzahl der hops) 1 ist.
</p>
<p><b>hub</b> (optional)<br>
Der Wert ist eine Maske, auf welche Server dieser hub connecten darf (z.B.: *.my.net).
</p>
<p><b>leaf</b> (optional)<br>
Der Wert ist eine Maske, dass dieser Server wie ein leaf in Richtung zum eigenen
Server fungiert.
Dieser Wert gibt an, zu welchen Servern dieser Hub <b>nicht</b> verbindet. Hier
einen * anzugeben ist das selbe, wie keine hub Anweisung zu haben.
</p>
<p><b>leaf-depth</b> (optional)<br>
Falls dies angegeben ist, sollte auch &quot;leaf&quot; angegeben sein. Angegeben
wird die Tiefe (Anzahl der hops) die dieser Server darunter haben darf.
Dieser Wert gibt die&nbsp; Tiefe (Anzahl der hops)an, die dieser Server darunter haben darf.
Beispielsweise bedeutet 1, dass der Server keine Links hat (ist ein leaf), 2
bedeutet, es kann zu Servern gelinkt werden, aber diese können zu keinem
anderen linken (dieser Hub kann also nur zu leafs linken). Ein Wert von 0
bedeutet, dass es kein Limit gibt und das ist auch Default.
</p>
<p><b>class</b><br>
Die Klasse, in die der Server kommt, oft ist eine eigene Klasse für Server
@@ -2598,7 +2677,8 @@ nicht ben
cache speichern, wird bei oft wechselndem Host benutzt (wie dyndns.org)</td></tr>
<tr><td><b>nohostcheck</b></td><td> den entfernten Host nicht überprüfen (link::hostname),
wird bei oft wechselndem Host benutzt (wie dyndns.org)</td></tr>
<tr><td><b>quarantine</b></td><td> Opers auf diesem Server behalten locop Status bei</td></tr>
<tr><td><b>quarantine</b></td><td> Opers auf diesem Server können keine GLOBAL
Oper Privilegien erhalten (sie werden gekilled), dient zu Test Links etc.</td></tr>
</table>
<p>Beispiel:</p>
<pre>link hub.mynet.com {
@@ -2626,6 +2706,7 @@ nicht vorhanden)</font>
<pre>alias &lt;name&gt; {
target &lt;nick-to-forward-to&gt;;
type &lt;type-of-alias&gt;;
spamfilter &lt;yes|no|&gt;
};</pre>
<p>(Hinweis: siehe auch <a href="#includedirective">hier</a> , welche Standard
Alias Dateien bei UnrealIRCd mitgeliefert werden.)</p>
@@ -2637,20 +2718,32 @@ der Nickname, an den weitergeleitet wird. Wenn &quot;alias::&quot; identisch mit
dem Nick ist, an den weitergeleitet wird, kann &quot;alias::target&quot;
weggelassen werden. <b> alias::type</b> gibt den Typ des Alias an, gültige
Typen sind hier &quot;services&quot; (der User ist auf dem Services Server),
&quot;stats&quot; (der User ist auf dem Stats Server), und &quot;normal&quot; (der
User ist normaler User auf irgendeinem Server). Der &quot;alias block&quot; hat
auch einen weiteren Zweck, der nachfolgend erklärt ist.</p>
&quot;stats&quot; (der User ist auf dem Stats Server) &quot;normal&quot; (der
User ist normaler User auf irgendeinem Server) und &quot;channel&quot; (das Ziel
ist ein Channel Name). Wenn <b>alias::spampfilter</b> (optional) auf 'yes'
eingestellt ist, werden auch Spamfilter geprüft (Default ist 'no'). Der &quot;alias block&quot; hat
auch einen weiteren nachfolgend erklärten Zweck.</p>
<p>Syntax [Befehl alias]:
<pre>alias &lt;name&gt; {
</pre>
<pre> /* Für Aliase, die an User/Channels gesendet werden */
format &lt;regex-expression&gt; {
target &lt;nick-to-forward-to&gt;;
type &lt;type-of-alias&gt;;
parameters &lt;parameter-string&gt;;
};
/* For 'echte Aliase' */
format &lt;regex-expression&gt; {
command &lt;command&gt;;
type real;
parameters &lt;parameter-string&gt;;
};
/* Etc... You can have as many format blocks as you wish.. */</pre>
<pre> format &lt;regex-expression&gt; {
...
};
type command;
spamfilter &lt;yes|no&gt;
};</pre>
<p>Wird der &quot;alias Block&quot; in diesem Format benutzt, ermöglicht er
eine breitere Anwendungsweise. Beispielsweise kann man einen Alias wie /identify
@@ -2660,15 +2753,19 @@ einen regul
Befehl gesandt wurde. Es können mehrere &quot;alias::format&quot; angegeben
werden, um unterschiedliche Dinge in Abhängigkeit vom gesandten Text
durchführen zu lassen. <b>alias::format::target</b> ist das Ziel (der Name), an den der
Alias weitergeleitet wird. <b> alias::format::type</b> definiert den Typ des
Alias, zu dem die Nachricht geleitet wird. <b> alias::format::parameters</b>
Alias weitergeleitet wird, bei &quot;realen Aliasen&quot; wird allerdings <b>alias::format::command</b>
benutzt. <b> alias::format::type</b> definiert den Typ des
Alias, zu dem die Nachricht geleitet wird. Neben den zuvor erwähnten Typen in
der Syntax bein Standard Alias, kann hier auch der Typ &quot;Real&quot; für
reale Aliase angegeben werden. <b>alias::format::parameters</b>
ist, was als Parameter an den Alias geschickt wird. Um Parameter für einen
Befehl an den Alias anzugeben, wird ein &quot;%&quot; gefolgt von einer Nummer
angegeben. So ist z.B. %1 der erste Parameter, %2 der zweite Parameter usw.&nbsp;
Man kann auch festlegen, dass ab einem Parameter alle bis zum Ende gelten
sollen, dann gibt man z.B. an:&nbsp; %1- (das Minuszeichen bedeutet: &quot;alle
weiteren&quot;) Zusätzlich kann man %n angeben, was durch den Nicknamen des
Users ersetzt wird, der den befehl ausgeführt hat. Um Beispiele zum Alias Block
Users ersetzt wird, der den Befehl ausgeführt hat.&nbsp;</p>
<p> Um Beispiele zum Alias Block
zu sehen, schaue man in doc/example.conf.</p>
<p>&nbsp;</p>
</div>
@@ -2758,7 +2855,66 @@ spamfilter {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; reason &quot;Kein Spam erlaubt&quot;<br>
};<br>
</font></div>
<p><font class="block_section"><a name="setblock">4.36 - </a> </font><a name="setblock"><font class="block_name">Set Block</font>
<p><font class="block_section"><a name="cgiirc">4.36 - </a></font><a name="cgiirc"><font class="block_name">Cgiirc
Block</font></a> <font class="block_optional">OPTIONAL</font></p>
<div class="desc">
<p>Im Cgiirc Block können Host Manipulationen für vertraute CGI:IRC Gateways
konfiguriert werden (<a href="#feature_cgiirc">weitere Informationen</a>).</p>
<p>Syntax:<br>
</p>
<pre>cgiirc {
type &lt;webirc|old&gt;;
username &lt;mask&gt;; /* optional */
hostname &lt;mask&gt;;
password &lt;password&gt;; /* only for type webirc */
};</pre>
<p>&nbsp;</p>
<p><b>type</b> ist entweder 'webirc' oder 'old'.<br>
<b>username</b> wird auf die Ident geprüft (wenn angegeben). Falls nicht
definiert, wird '*' angenommen.<br>
<b>hostname</b> ist die Hostmaske, auf die geprüft wird.<br>
<b>password</b> ist das webirc Passwort, wird nur beim Typ 'webirc' benutzt.<br>
</p>
<p><b>Konfiguration mit der 'webirc' Methode (empfohlene Methode)</b><br>
In der CGI:IRC Konfigurationsdatei (cgiirc.conf) wird für &quot;webirc_password&quot;
ein gutes Passwort festgelegt.<br>
Danach wird in der unrealircd.conf ein cgiirc block eingetragen, um diesen
Host mit diesem Passwort zu erlauben.<br>
Dann wird für '<b>set cgiirc::type'</b>&nbsp; &quot;webirc&quot; eingetragen.<br>
<br>
Beispiel:<br>
In die CGI:IRC Konfigurationsdatei (cgiirc.conf) wird eingetragen:</p>
<pre>webirc_password = LpT4xqPI5</pre>
Danach wird die unrealircd.conf um einen Cgiirc Block erweitert:
<pre>cgiirc {
type webirc;
hostname &quot;1.2.3.4&quot;;
password &quot;LpT4xqPI5&quot;;
};</pre>
<p>&nbsp;</p>
<p><b>Konfiguration mit Methode 'old'</b><br>
ACHTUNG: Dies ist nicht die empfohlene Methode, da sie zwei Nachteile hat:
Diese Methode sendet den IP/Host, der zu verändern ist, als ein Server
Passwort, was bedeutet,&nbsp; als&nbsp; CGI:IRC User kein Server Passwort
angeben kann. Außerdem ist die Zugriffskontrolle nur IP-basiert und erfordert
kein Extra Passwort, wie die 'webirc' Methode. Kurz gesagt sollten Sie nicht
diese Methode nur verwenden, wenn es einen triftigen Grund dazu gibt.<br>
<br>
In der CGI:IRC Konfigurationsdatei (cgiirc.conf) wird 'realhost_as_password'
auf 1 gesetzt.<br>
Danach wird die unrealircd.conf um einen Cgiirc Block erweitert, um diesen
Host zu erlauben.<br>
<br>
Beispiel:<br>
In die CGI:IRC Konfigurationsdatei (cgiirc.conf) wird eingetragen:</p>
<pre>realhost_as_password = 1</pre>
Danach wird die unrealircd.conf um einen Cgiirc Block erweitert:
<pre>cgiirc {
type old;
hostname &quot;1.2.3.4&quot;;
};</pre>
</div>
<p><font class="block_section"><a name="setblock">4.37 - </a> </font><a name="setblock"><font class="block_name">Set Block</font>
</a> <font class="block_required">ERFORDERLICH</font> <font class="block_old">(Früher
bekannt als unrealircd.conf/networks file)</font>
</p><div class="desc">
@@ -2835,6 +2991,10 @@ eingeschr
Beispielsweise kann man&nbsp; +G in 'modes-on-connect' setzen und G in 'restrict-usermodes',
wodurch erreicht wird, dass sämtliche User&nbsp; +G erhalten, aber kein -G
anwenden können.</p>
<p><font class="set">set::level-on-join &lt;op|none&gt;</font><br>
Die Modus, der einem User beim ersten joinen eines Channels gegeben wird. Das
ist entweder 'op' (Channel Operator, Default) oder 'none', wenn kein Level
gegeben werden soll.</p>
<p><font class="set">set::restrict-channelmodes &lt;modes&gt;</font><br>
Die Channel-Modi, die User wählen können werden auf die hier angegebenen Modi
eingeschränkt. (kein + oder - angeben!).<br>
@@ -2883,6 +3043,17 @@ bel
angezeigt werden sollen. Ohne Eintrag hier gibt es kein Limit.</p>
<p><font class="set">set::silence-limit &lt;limit&gt;;<br>
</font>Stellt den Maximalwert der anzeigbaren SILENCE Einträge ein. Ohne Eintrag ist hier ein Limit von 15 voreingestellt.</p>
<b><font face="Helvetica,Arial" size="-1">set::maxbans &lt;limit&gt;;<br>
</font></b>Stellt den Maximalwert der je Channel erlaubten Banns (+b) ein. Der
Defaultwert beträgt 60. Wenn dieser Wert geändert wird, sollte man sich
versichern, dass auch der Wert für 'maxbanlength' (siehe nächster Punkt)
sinnvoll eingestellt ist.
<p><b>set::maxbanlength &lt;limit&gt;;</b><br>
Ähnliche Funktion wie im Punkt zuvor, aber legt den Maximalwert der Zeichen
für alle Banns zusammen fest. Dadurch wird festgelegt, wie viel Speicherplatz
für alle Banns in einem Channel zusammen benutzt wird. Der Default beträgt
2048 (Bytes). Bei einem Default von 'set::maxbans 60' gestattet dies 2048:60=34
Zeichen je Bann im Durchschnitt.</p>
<p><font class="set">set::oper-only-stats &lt;stats-list&gt;;</font><br>
Definiert eine Liste von Stats-Flags, die nur von Opers benutzt werden können.
Die Flags sind ohne Trennungen (keine Kommata, keine Leerzeichen) anzugeben.
@@ -2890,7 +3061,7 @@ Wird hier nichts angegeben, k
Angabe von '*' keines. Es dürfen nur <b> kurze Operflags</b> angegeben werden.</p>
<p><b>set::oper-only-stats {&lt;stats-flag>; &lt;stats-flag&gt;;};</b><br>
Definiert eine Liste von Stats Flags, die nur von Opers benutzt werden können.
In dieser Syntax dürfen nur <b>lange Operflags</b> angegeben wwerden.</p>
In dieser Syntax dürfen nur <b>lange Operflags</b> angegeben werden.</p>
<p><font class="set">set::maxchannelsperuser &lt;amount-of-channels&gt;;</font><br>
Einstellung, in wie vielen Channels ein User gleichzeitig sein darf.</p>
<p><b>set::maxdccallow &lt;amount-of-entries&gt;;</b><br>
@@ -2901,7 +3072,7 @@ Zeichens
<p><font class="set">set::channel-command-prefix &lt;command-prefixes&gt;;<br>
</font>Stellt das Vorzeichen für Services in &quot;channel Befehlen&quot; ein.
Nachrichten, die mit einem dieser Zeichen beginnen, werden auch noch gesendet,
wenn der Client +d ist. Die Voreinstellung lautet "`".</p>
wenn der Client +d ist. Die Voreinstellung lautet &quot;`!.&quot;.</p>
<p><font class="set">set::allow-userhost-change [never|always|not-on-channels|force-rejoin]</font><br>
Einstellung, was passiert, wenn sich der user@host ändert (+x/-x/chghost/chgident/setident/vhost/etc).<br>
<i>never</i> schaltet sämtliche Befehle ab, <i>always</i> gestattet so
@@ -2949,12 +3120,13 @@ Oper Zugriff geloggt wurde.</p>
Ein Wert, der angibt, innerhalb welcher Zeit ein DNS Server zu antworten hat, bevor
&quot;timeout&quot; gemeldet wird. Der Zeitwert ist ein numerischer String, in
dem 'd' Tage bedeutet, 'h' Sunden, 'm' Minuten und 's' Sekunden. Beispiel: '1d2h3m'
bedeutet 1 Tag, 2 Stunden, 3 Minuten.</p>
bedeutet 1 Tag, 2 Stunden, 3 Minuten. (NICHT IMPLEMENTIERT)</p>
<p><font class="set">set::dns::retries &lt;number-of-retries&gt;;</font><br>
Ein Zahlenwert, durch den festgelegt wird, wie oft versucht werden soll, die DNS
aufzulösen, bevor ein Fehler gemeldet wird.</p>
aufzulösen, bevor ein Fehler gemeldet wird. (NICHT IMPLEMENTIERT)</p>
<p><font class="set">set::dns::nameserver &lt;name-of-dns-server&gt;;</font><br>
Gibt den Hostnamen des Servers an, der zur DNS Namensauflösungen dient.</p>
Gibt den Hostnamen des Servers an, der zur DNS Namensauflösungen dient. (NICHT
IMPLEMENTIERT)</p>
<p><font class="set">set::network-name &lt;name-of-network&gt;;</font><br>
Gibt den Namen des Netzwerks an, in dem der Server läuft (also den Namen des
irc Netzes!) Dieser Eintrag sollte auf allen Servern im Netzwerk absolut
@@ -3019,6 +3191,17 @@ Gibt den Dateinamen an, wo das SSL Zertifikat des Servers liegt.</p>
Gibt den Dateinamen an, wo der private SSL Key des Servers liegt.</p>
<p><font class="set">set::ssl::trusted-ca-file &lt;filename&gt;;</font><br>
Gibt den Dateinamen der Zertifikate der vertrauten CAs an.</p>
<p><font class="set">set::ssl::server-cipher-list &lt;cipherlist&gt;;</font><br>
Legt fest, welche Verschlüsselungen erlaubt sind, was per Default für OpenSSL
eingestellt ist. Siehe <a href="http://www.openssl.org/docs/apps/ciphers.html#CIPHER_LIST_FORMAT">http://www.openssl.org/docs/apps/ciphers.html</a>
wie eine Liste von Verschlüsselungen&nbsp; erstellt wird (englische Seite,
nicht übersetzt!).</p>
<p><font class="set">set::ssl::renegotiate-bytes &lt;value&gt;;</font><br>
Legt fest, wieviele Bytes bei einer SSL Session neu ausgehandelt werden sollen (z.B.:
20m für 20 Megabyte).</p>
<p><font class="set">set::ssl::renegotiate-timeout &lt;timevalue&gt;;</font><br>
Legt fest, nach welcher Zeit eine SSL Session neu ausgehandelt werden soll (z.B.:
1h für 1 Stunde).</p>
<p><font class="set">set::ssl::options::fail-if-no-clientcert;</font><br>
Stellt ein, dass Clients ohne Zertifikat nicht connecten können.</p>
<p><font class="set">set::ssl::options::no-self-signed;</font><br>
@@ -3081,7 +3264,46 @@ joinen.</p>
<b>set::spamfilter::except &lt;target(s)&gt;</b><br>
Diese Ziele werden vom Spamfilter ausgenommen (es wird also keine Aktion
durchgeführt). Es sind einzelne Ziele oder eine durch Kommata getrennte Liste
möglich. Beispiel: except "#help,#spamreport"</p> </div>
möglich. Beispiel: except &quot;#help,#spamreport&quot;</p>
<p><font class="set">set::spamfilter::slowdetect-warn &lt;value&gt;</font><br>
Wenn ein Spamfilter zur Ausführung länger als der hier festgelegte Wert dauert
(in Millisekunden,&nbsp; 1000ms = 1 Sekunde), wird eine Warnung per Notice an
alle Opers versandt. (Default: 250). Siehe auch <a href="#feature_spamfilter_slow">Erkennung
langsamer Spamfilter</a>.</p>
<p><font class="set">set::spamfilter::slowdetect-fatal &lt;value&gt;</font><br>
Wenn ein Spamfilter zur Ausführung länger als der hier festgelegte Wert dauert
(in Millisekunden,&nbsp; 1000ms = 1 Sekunde), wird er gelöscht50o). Siehe auch <a href="#feature_spamfilter_slow">Erkennung
langsamer Spamfilter</a>.</p>
<p><b>set::check-target-nick-bans &lt;yes|no&gt;</b><br>
Wann immer ein User seinen Nick ändert, wird überprüft, ob der NEUE Nick zu
bannen wäre. Ist das der Fall, wird der Nickwechsel nicht erlaubt. Default ist
'yes'.</p>
<p><b>set::timesynch::enabled&lt;yes|no&gt;</b><br>
Aktiviert oder deaktiviert die Zeitsynchronisation beim Start des IRCd. Default
ist 'yes'.</p>
<p><font class="set">set::timesynch::server &lt;IP&gt;</font><br>
Server mit dem die Zeit synchronisiert werden soll. Hier können bis zu 4 IP's
angegeben werden, die durch Komma zu trennen sind. Die Server müssen das NTP Protokoll
Version 4 unterstützen. Default ist die Benutzung von 3 Zeitservern (US, EU,
AU). Die Anforderungen an diese Server erfolgen zeitgleich, die schnellste
Antwort gewinnt.</p>
<p><font class="set">set::timesynch::timeout &lt;time&gt;</font><br>
Maximale Zeit, die auf eine Zeitserverantwort gewartet wird. Möglich ist ein
Wert von 1 bis 5, mehr ist nicht möglich, weil das Ergebnis sonst zu ungenau
wäre. Default Einstellung ist hier 3 und normalerweise sollte es keinen Grund
geben, dies zu ändern.
<p><font class="set">set::pingpong-warning&lt;yes|no&gt;</font><br>
Die Versuche von Name-Servern einen falschen Hostnamen zurückzuliefern, werden
Spoofing (Reinlegen) genannt. Um sich davor zu schützen, kann der Resolver so
konfiguriert werden, daß er überprüft, ob die gegebene IP-Adresse auch
tatsächlich zum erhaltenen Hostnamen gehört. Wenn dies nicht der Fall ist,
wird der Name verworfen und ein Fehler zurückgeliefert. Dieses Verhalten wird
mit nospoof on eingestellt. Wenn NOSPOOF aktiviert ist (üblicherweise in
Windows), wird aene Warnung an jeden User geschickt, &nbsp;'/quote pong ..' zu
benutzen, wenn es beim Verbinden Probleme gibt.&nbsp; Voreingestellt ist 'no'.</p>
<p><font class="set">set::watch-away-notification &lt;yes|no&gt;</font><br>
Ermöglicht eine AWAY Meldung in WATCH. Der Default is yes.</p>
</div>
<p><b><font size="+2"><a name="addtlfiles">5 &#8211; Additional Files</a></font></b></p><div class="desc">
Zusätzlich zu den Konfigurationsdateien hat Unreal einige weitere Dateien,
wie MOTD, OperMOTD, BotMOTD, und Rules. In der nachfolgenden Liste stehen die
@@ -3299,7 +3521,8 @@ m
</tr>
<tr>
<td height="19"><div align="center">d</div></td>
<td height="19">User kann keine Channel PRIVMSGs empfangen</td>
<td height="19">User kann keine Channel PRIVMSGs empfangen (mit der Ausnahme
von Text, dem bestimmte Zeichen vorangestellt sind. Siehe hierzu: 'set::channel-command-prefix'.</td>
</tr>
<tr>
<td height="19"><div align="center">G</div></td>
@@ -3672,13 +3895,13 @@ Befehlsliste</a></b></font></p><div class="desc">
</tr>
<tr>
<td height="33" width="267">globops &lt;message&gt;</td>
<td width="486" height="33">Schickt eine Nachricht an alle IRCops</td>
<td width="486" height="33">Schickt eine Nachricht an alle globalen IRCops</td>
<td width="93" height="33">IRCop</td>
</tr>
<tr>
<td height="33" width="267">chatops &lt;message&gt;</td>
<td width="486" height="33">Schickt eine Nachricht an alle IRCops mit dem
Usermode +c</td>
<td width="486" height="33">Schickt eine Nachricht an alle IRCops (lokal und
global)</td>
<td width="93" height="33">IRCop</td>
</tr>
<tr>
@@ -4177,9 +4400,16 @@ Datei</a></b></font></p>
erhöht den Aufwand für einen Angriff oder hack.</div>
<p><font size="+2"><b><a name="secantiexpolit">8.8 Schutz gegen Expolits</a></b></font></p>
<div class="desc">Es gibt Kernel Patches, die es Stack- oder Heap-basierenden
Expolits erschweren, zu arbeiten. Allerdings sollte man nicht nur primär
Expolits erschweren, zu arbeiten. Das ist schön, allerdings sollte man nicht nur primär
hierauf achten, es gibt weit größere Risiken mit Expolits, die andere
Punkte, als den Kernel angreifen.... aus verschiedenen Gründen.<br>
Eine andere Option ist es chrooting zu aktivieren (gibt es nur in *nix
Systemen), was bedeutet, dass bei einem erfolgreichen expolit der User auf auf
das UnrealIRCd Verzeichnis begrenzt ist und keinen Zugriff auf andere Dateien
hat. Dies erfordert root Rechte und Änderungen in der include/config.h (suche
nach CHROOTDIR und setze sowohl IRC_USER als auch IRC_GROUP und compiliere
neu.)
<p>
<br>
Eines allerdings sollte man tun: IMMER DIE NEUESTE VERSION BENUTZEN. Wenn man
sich in die <a href="http://mail1.sourceforge.net/mailman/listinfo/unreal-notify"> Unreal-notify mailinglist</a> einträgt, erhält man die Ankündigung
@@ -4256,16 +4486,14 @@ Datei</a></b></font></p>
Übereinstimmung mit 0 oder 1 der vorhergehenden Zeichen. Dieses
&quot;vorhergehende Zeichen&quot; ist auch der Punkt, worin sich das '?' in
einer regex von einer Wildcard unterscheidet. In Wildcards bedeutet die Angabe
von "a?c" eine Übereinstimmung mit einem "a", gefolgt von irgend einem (oder
keinem) anderen Zeichen, gefolgt von einem "c." In Regex hat dies eine andere
von "a?c" eine Übereinstimmung mit einem "a", gefolgt von irgend einem anderen Zeichen, gefolgt von einem "c." In Regex hat dies eine andere
Bedeutung. Es wird auf Übereinstimmung geprüft mit 0 oder einem
&quot;a&quot;, gefolgt von dem Buchstaben &quot;c&quot;.&nbsp; Damit
kann&nbsp; durch das ? angegeben werden, wie viele &quot;a&quot; vorhanden
sein dürfen. Soll das ? in einer Wildcard emuliert werden, wird der Punkt
Operator verwendet. Der Ausdruck "a.?c" ist gleichbedeutend mit der zuvor
Operator verwendet. Der Ausdruck &quot;a.c&quot; ist gleichbedeutend mit der zuvor
beschrieben Wildcard. Geprüft wird auf Übereinstimmung mit einem
&quot;a&quot;, gefolgt von irgend einem oder keinen anderen Zeichen (das ?
modifiziert den .), gefolgt von einem "c."</p><p>Der nächste
&quot;a&quot;, gefolgt von irgend einem anderen Zeichen, gefolgt von einem "c."</p><p>Der nächste
Wiederholungsoperator ist der *. Auch dieser ist wieder ähnlich zum Wildcard
Zeichen. Geprüft wird die Übereinstimmung mit 0 oder mehr der voranstehenden
Zeichen. Zu beachten ist, dass dieses &quot;vornstehende Zeichen&quot; das
+3300 -3168
View File
File diff suppressed because it is too large Load Diff
+395 -247
View File
File diff suppressed because it is too large Load Diff
+4416 -3793
View File
File diff suppressed because it is too large Load Diff
+242 -68
View File
@@ -12,32 +12,34 @@
.block_old { font-size: 14; }
.set { font-weight: bold; }
.desc { margin-left: 15px; }
pre { font: "times new roman"; font-style: normal;}
pre { font: "times new roman"; font-style: normal; background-color: #eeeeee;}
</style>
</head>
<!-- $Id$ -->
<body>
English | <a href="unreal32docs.de.html">German</a> |
English |
<a href="unreal32docs.de.html">German</a> |
<a href="unreal32docs.es.html">Spanish</a> |
<a href="unreal32docs.hu.html">Hungarian</a> |
<a href="unreal32docs.fr.html">French</a> |
<a href="unreal32docs.gr.html">Greek</a>
<a href="unreal32docs.gr.html">Greek</a> |
<a href="unreal32docs.nl.html">Dutch</a> |
<a href="unreal32docs.ru.html">Russian</a> |
<a href="unreal32docs.tr.html">Turkish</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.3</font><br>
<b>Last doc update:</b> 2005-03-13</div>
<font size="4">Version: 3.2.8</font><br>
<b>Last doc update:</b> 2009-01-03</div>
<br>
<b>Head Coders:</b> Stskeeps / codemastr / Syzop / Luke<br>
<b>Coders:</b> Stskeeps / codemastr / Syzop / Luke / aquanight / WolfSage <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
must have a compatible browser, which are listed below. Up to date docs are
available at <a href="http://www.vulnscan.org/UnrealIrcd/unreal32docs.html">http://www.vulnscan.org/UnrealIrcd/unreal32docs.html</a>
and a FAQ at <a href="http://www.vulnscan.org/UnrealIrcd/faq/" TARGET="_blank">http://www.vulnscan.org/UnrealIrcd/faq/</a>.
<p>To view this documentation you must have a compatible browser, which are listed below. Up to date docs are
available at <a href="http://www.vulnscan.org/UnrealIRCd/unreal32docs.html">http://www.vulnscan.org/UnrealIRCd/unreal32docs.html</a>
and a FAQ at <a href="http://www.vulnscan.org/UnrealIRCd/faq/" TARGET="_blank">http://www.vulnscan.org/UnrealIRCd/faq/</a>.
</p>
<p><b>Compatible Browsers: </b><br>
<ul>
@@ -70,7 +72,9 @@ English | <a href="unreal32docs.de.html">German</a> |
-- 3.14. <a href="#feature_spamfilter">Spamfilter</a><br>
-- 3.15. <a href="#feature_cidr">CIDR</a><br>
-- 3.16. <a href="#feature_nickchars">Nick Character Sets</a><br>
-- 3.17. <a href="#feature_other">Other features</a><br>
-- 3.17. <a href="#feature_cgiirc">CGI:IRC Support</a><br>
-- 3.18. <a href="#feature_timesync">Time Synchronization</a><br>
-- 3.19. <a href="#feature_other">Other features</a><br>
4. <a href="#configuringyourunrealircdconf">Configuring your unrealircd.conf
file</a><br>
---4.1. <a href="#configurationfileexplained">Configuration file explained</a><br>
@@ -108,7 +112,8 @@ English | <a href="unreal32docs.de.html">German</a> |
---4.33. <a href="#helpblock">Help Block</a><br>
---4.34. <a href="#officialchannels">Official Channels Block</a><br>
---4.35. <a href="#spamfilter">Spamfilter Block</a><br>
---4.36. <a href="#setblock">Set Block -=- (networks/unrealircd.conf)</a><br>
---4.36. <a href="#cgiirc">Cgiirc Block</a><br>
---4.37. <a href="#setblock">Set Block -=- (networks/unrealircd.conf)</a><br>
5. <a href="#addtlfiles">Additional Files</a><br>
6. <a href="#userchannelmodes">User & Channel Modes</a><br>
7. <a href="#useropercommands">User & Oper Commands</a><br>
@@ -122,7 +127,7 @@ English | <a href="unreal32docs.de.html">German</a> |
---8.7. <a href="#secinformation">Information disclosure</a><br>
---8.8. <a href="#secantiexploit">Protecting against exploits</a><br>
---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>
9. <a href="http://www.vulnscan.org/UnrealIRCd/faq/" target="_blank">Frequently Asked Questions (FAQ)</a><br>
A. <a href="#regex">Regular Expressions</a><br>
---A.1. <a href="#regexlit">Literals</a><br>
---A.2. <a href="#regexdot">Dot Operator</a><br>
@@ -141,9 +146,9 @@ English | <a href="unreal32docs.de.html">German</a> |
another software package is strictly prohibited without the written permission
of the UnrealIRCd Development Team. This document may be copied/printed/reproduced/published
as many times as you like, provided it is for use with UnrealIRCd and it is not
modified in anyway. &#8211; Copyright UnrealIRCd Development Team 2002-2004</p>
modified in anyway. &#8211; Copyright UnrealIRCd Development Team 2002-2006</p>
<p>Please read this manual before asking for help, you also REALLY want to take a look at the
<a href="http://www.vulnscan.org/UnrealIrcd/faq/" target="_blank">FAQ</a> since over 80% of your questions/problems are answered in it. If you still
<a href="http://www.vulnscan.org/UnrealIRCd/faq/" target="_blank">FAQ</a> since over 80% of your questions/problems are answered in it. If you still
need help you can ask for support at irc.ircsystems.net (port 6667) channel #unreal-support (note
that we REQUIRE you to read the docs and faq and we only help with UnrealIRCd, not with services!).
If you have a real bug (like a crash) then report it at
@@ -182,7 +187,9 @@ Windows:<br>
<li><b>*NIX versions:</b>
<ul>
<li>Linux (2.2.*, 2.4.*, 2.6.*)
<li>FreeBSD (4.*, 5.*)
<li>FreeBSD (4.*, 5.*, 6.*)
<li>NetBSD (2.*)
<li>OpenBSD (3.7, 3.8, 3.9)
<li>Solaris (9, 10)
</ul>
<li><b>Windows version:</b>
@@ -201,13 +208,13 @@ Windows:<br>
</ul>
<br>
If you have Unreal3.2 working correctly under other operating systems, please
send the details to <a href="mailto:coders@lists.unrealircd.com">coders@lists.unrealircd.com<br>
send the details to <a href="mailto:coders@lists.unrealircd.org">coders@lists.unrealircd.org<br>
</a> </p>
<p><b>Installation Instructions</b><br>
Linux:<br>
<ol>
<li>gunzip -d Unreal3.2.2.tar.gz
<li>tar xvf Unreal3.2.2.tar
<li>gunzip -d Unreal3.2.X.tar.gz
<li>tar xvf Unreal3.2.X.tar
<li>cd Unreal3.2
<li>./Config
<li>Answer these questions to the best of your knowledge. Generally if your not
@@ -227,7 +234,8 @@ Windows:<br>
<a name="features"></a></p><div class="desc">
<p>Some major/nice features are explained in this section. It provides a general overview,
and sometimes refers to the config file (something which you might know nothing about yet).</p>
<p>You can skip this section, however it's suggested to read it before/after installing.</p></div>
<p>You can skip this section, however it's very much suggested to read it before/after installing
because otherwise you will not understand concepts such as 'cloaking', 'snomasks', etc.</p></div>
<p><font size="+2"><b>3.1 - Cloaking</b></font><a name="feature_cloaking"></a></p><div class="desc">
<p>Cloaking is a way to hide the real hostname of users, for example if your real host is <i>d5142341.cable.wanadoo.nl</i>,
@@ -241,6 +249,8 @@ Windows:<br>
uppercase (A-Z) and digit (0-9) charachters [eg: "AopAS6WQH2Os6hfosh4SFJHs"]. See example.conf for an example.<br>
<p>Cloak keys MUST be the same on ALL SERVERS in a network. Also cloak keys should be kept SECRET
because it's possible to decode the original host if you know the keys (which makes umode +x useless).</p>
<p>Hint: If you are on *NIX and have to create new cloak keys, you can run './unreal gencloak'
in your shell, which will output 3 random strings that you can use.</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 which is nice because:<br>
@@ -285,7 +295,7 @@ Windows:<br>
You can for example let "/ns identify blah" be forwarded to nickserv (it will be
translated to: privmsg nickserv identify blah). You can even make more complex aliases such as /register can forward to
ChanServ if the first parameter begins with a # and forwarded to NickServ if it doesn't.</p>
<p>Aliases are configured by alias blocks in the configuration file, and you can also include
<p>Aliases are configured by <a href="#aliasblock">alias blocks</a> in the configuration file, and you can also include
a file with default aliases for most commonly used services.</p></div>
<p><font size="+2"><b>3.5 - Helpop</b></font><a name="feature_helpop"></a></p><div class="desc">
@@ -554,17 +564,33 @@ into spaces at runtime. And double underscore ('__') gets an underscore ('_'). A
<b>set::spamfilter::ban-reason</b> allows you to specify a default reason (default: 'Spam/advertising')<br>
<b>set::spamfilter::virus-help-channel</b> allows you to specify the channel to join for action 'viruschan' (default: #help)<br>
<b>set::spamfilter::virus-help-channel-deny</b> allows you to block any normal joins to virus-help-channel (default: no)<br>
</p></div>
</p>
<p>
<font size="+1"><B>Slow Spamfilter Detection</B></font><a name="feature_spamfilter_slow"></a><br>
A spamfilter regex can slow down the IRCd considerably. This really depends
on the regex you use (and how the regex engine handles it), some are very
fast and UnrealIRCd can execute thousands of them per second. Others can be
extremely slow, take several seconds to execute, and could freeze the IRCd.<br>
To help against this, Unreal comes with Slow Spamfilter Detection: For each
spamfilter, Unreal checks, each time it executes, how long it takes to
execute. Once a certain threshold is reached the IRCd will warn or even remove
the spamfilter.<br>
Warning is configured through <b>set::spamfilter::slowdetect-warn</b> (default: 250ms)
and automatic deletion is configured by <b>set::spamfilter::slowdetect-fatal</b> (default: 500ms).
You can set both settings to 0 (zero) to disable slow spamfilter detection.<br>
This feature is currently not available on Windows.<br>
</p>
</div>
<p><font size="+2"><b>3.15 - CIDR</b></font><a name="feature_cidr"></a></p><div class="desc">
<p>UnrealIRCd now has support for CIDR (Classless Interdomain Routing). CIDR allows you to ban
IP ranges. IPs are allocated to ISPs using CIDR, therefore, being able to set a CIDR based ban
allows you to easily ban an ISP. Unreal supports CIDR for both IPv4 and IPv6. CIDR masks may be
used in the allow::ip, ban user::mask, ban ip::mask, except ban::mask, except throttle::mask,
and except tkl::mask (for gzline, gline, and shun). Additionally, CIDR can be used in /kline,
/gline, /zline, /gzline, and /shun. Unreal uses the standard syntax of IP/bits, e.g.,
127.0.0.0/8 (matches 127.0.0.0 - 127.255.255.255), and fe80:0:0:123::/64 (matches
fe80:0:0:123:0:0:0:0 - fe80:0:0:123:ffff:ffff:ffff:ffff).</p></div>
used in the allow::ip, oper::from::userhost, ban user::mask, ban ip::mask, except ban::mask,
except throttle::mask, and except tkl::mask (for gzline, gline, and shun). Additionally, CIDR
can be used in /kline, /gline, /zline, /gzline, and /shun. Unreal uses the standard syntax of
IP/bits, e.g., 127.0.0.0/8 (matches 127.0.0.0 - 127.255.255.255), and fe80:0:0:123::/64
(matches fe80:0:0:123:0:0:0:0 - fe80:0:0:123:ffff:ffff:ffff:ffff).</p></div>
<p><font size="+2"><b>3.16 - Nick Character Sets</b></font><a name="feature_nickchars"></a></p><div class="desc">
<p>UnrealIRCd now has the ability to specify which charsets/languages should be allowed
@@ -594,6 +620,9 @@ A table of all possible choices:<br>
<tr><td>greek</td><td>Greek characters</td><td>iso8859-7</td></tr>
<tr><td>turkish</td><td>Turkish characters</td><td>iso8859-9</td></tr>
<tr><td>russian-w1251</td><td>Russian characters</td><td>windows-1251</td></tr>
<tr><td>belarussian-w1251</td><td>Belarussian characters</td><td>windows-1251</td></tr>
<tr><td>ukrainian-w1251</td><td>Ukrainian characters</td><td>windows-1251</td></tr>
<tr><td><b>windows-1251</b></td><td>russian-w1251, belarussian-w1251, ukrainian-w1251</td><td>windows-1251</td></tr>
<tr><td>hebrew</td><td>Hebrew characters</td><td>iso8859-8-I/windows-1255</td></tr>
<tr><td>chinese-simp</td><td>Simplified Chinese</td><td>Multibyte: GBK/GB2312</td></tr>
<tr><td>chinese-trad</td><td>Tradditional Chinese</td><td>Multibyte: GBK</td></tr>
@@ -620,17 +649,39 @@ Example 2, if you have mainly chinese users and want to allow "normal" chinese c
<pre>set { allowed-nickchars { chinese-simp; chinese-trad; }; };</pre>
</p></div>
<p><font size="+2"><b>3.17 - Other features</b></font><a name="feature_other"></a></p><div class="desc">
<p><font size="+2"><b>3.17 - CGI:IRC Support</b></font><a name="feature_cgiirc"></a></p><div class="desc">
<p>UnrealIRCd has support for CGI:IRC host spoofing, which means you can mark specific CGI:IRC
gateways as "trusted" which will cause the IRCd to show the users' real host/ip everywhere on
IRC, instead of the host/ip of the CGI:IRC-gateway.</p>
<p>See the <a href="#cgiirc">cgiirc block</a> for information on how to configure this.</p>
</div>
<p><font size="+2"><b>3.18 - Time Synchronization</b></font><a name="feature_timesync"></a></p><div class="desc">
<p>Having correct time is extremely important for IRC servers. Without correct time, channels can desynch, innocent
users can be killed, channels might not show up properly in /LIST, in short: huge trouble will arrise.</p>
<p>UnrealIRCd has some build-in time synchronization support.
Although not optimal (time can still be off a few seconds), it should get rid of most time differences.
If you can, you are still recommended to run time synchronization software such as ntpd on *NIX or
the time synchronization service on Windows (in that case, you can turn off Unreal's time synchronization, more on that later).</p>
<p>What UnrealIRCd does (by default) is do a one-shot timesync attempt when booting. It sends (by default) a request
to multiple time servers and when it gets the first (fastest) reply, it will adjust the internal ircd clock
(NOT the system clock). If, for some reason, Unreal does not get a reply from the timeserver within 3 seconds,
the IRCd will continue to boot regardlessly (should rarely happen).</p>
<p>Time synchronization is configured (and can be turned off) through the <b>set::timesynch</b> block, see
the <a href="#setblock">set documentation</a> for more information.</p>
</div>
<p><font size="+2"><b>3.19 - Other features</b></font><a name="feature_other"></a></p><div class="desc">
<p>UnrealIRCd has a lot of features so not everything is covered here... You'll find that out by yourself.</p></div>
<p> </p>
<p><font size="+2"><b>4.0 - Configuring your unrealircd.conf</b></font>
<a name="configuringyourunrealircdconf"></a></p><div class="desc">
<p>First of all, creating a good unrealircd.conf will take some time, probably
something like 10 - 60m. You can try to get it booted up as quickly as you can and
tweak later, or you can learn the major sections directly step-by-step which is
the recommended method ;P. If you have any problems, check your syntax, check the manual
and check the FAQ before asking for help/reporting a bug.</p></div>
<p>First of all, creating your first unrealircd.conf will take time (say, 15-60
minutes). Creating a <u>good</u> unrealircd.conf will take even more time.
You should not rush to get the IRCd booted, but rather go through things
step-by-step. If you have any problems, check your syntax, check this manual
and check the <a href="http://www.vulnscan.org/UnrealIRCd/faq/">FAQ</a> before asking for help/reporting a bug.</p></div>
<p><b><font size="+2">4.1 Configuration File Explained</font></b><a name="configurationfileexplained"></a><br><div class="desc">
</p>
<p>The new system uses a block-based format. Each entry, or block, in the new
@@ -654,8 +705,8 @@ Example 2, if you have mainly chinese users and want to allow "normal" chinese c
Also note that there is no set format, meaning the whole block can appear on
one line or over multiple lines. The format above is what is normally used (and
what will be used in this file) because it is easy to read. </p>
<p>Note: the configuration file is currently case sensitive so BLOCK-NAME is not
the same as block-name. There is a special notation used to talk about entries
<p>Note: the configuration file is currently case sensitive so <i>BLOCK-NAME</i> is not
the same as <i>block-name</i>. There is a special notation used to talk about entries
in the config file. For example, to talk about &lt;directive-name&gt; in the
example above, you'd say &lt;block-name&gt;::&lt;block-directive&gt;, and if
that directive has a sub block you want to reverence, you would add another
@@ -669,9 +720,11 @@ Example 2, if you have mainly chinese users and want to allow "normal" chinese c
/* Multi line<br>
&nbsp;&nbsp;&nbsp;&nbsp;comment */<br>
</p>
<p>Now that you know how it works, create your unrealircd.conf from scratch or
copy doc/example.conf and start editing. It's recommended to walk step by step
through all block types and use this manual as a reference.</p>
<p>Now that you know how it works, copy <i>doc/example.conf</i> to your UnrealIRCd
directory (eg: /home/user/Unreal3.2) and rename it to <i>unrealircd.conf</i>
(OR create your <i>unrealircd.conf</i> from scratch).
It's recommended to walk step by step through all block types and
settings in your conf and use this manual as a reference.</p>
<p></p></div>
<p><font class="block_section">4.2 - </font><font class="block_name">Me Block</font>
<font class="block_required">REQUIRED</font> <font class="block_old">(Previously known as the M:Line)</font><a name="meblock"></a><div class="desc">
@@ -755,7 +808,7 @@ class clients {
recvq 8000;
};
class servers{
class servers {
pingfreq 90;
maxclients 10; /* Max servers we can have linked at a time */
sendq 1000000;
@@ -1379,7 +1432,7 @@ tld {
channel &lt;channel-name&gt;;
options {
ssl;
}
};
};</pre></p>
<p>The tld block allows you to specify a motd, rules, and channel for a user based
on their host. This is useful if you want different motds for different languages.
@@ -1909,17 +1962,16 @@ link &lt;server-name&gt; {
</p>
<p><b>hub vs leaf</b><br>
A hub has multiple servers linked to it, a leaf has only one link... to you.
A server is either a hub or a leaf, you cannot combine these options.
A server is a leaf unless it has a hub directive. It is also a leaf if the leaf directive is *, or leafdepth is 1.
</p>
<p><b>hub</b> (optional)<br>
The value is a mask of what servers this hub may connect (ex: *.my.net).
</p>
<p><b>leaf</b> (optional)<br>
The value is a mask that this server will act like a leaf towards.
The value is a mask of what servers this hub may <b>not</b> connect. Saying * here would be the same as not having a hub directive.
</p>
<p><b>leaf-depth</b> (optional)<br>
If specified then leaf should be specified too. The value specifies the depth
(number of hops) this server may have beneath it.
<p><b>leafdepth</b> (optional)<br>
The value specifies the depth (number of hops) this server may have beneath it. For example, 1 means the server can't have any links under it (a leaf), 2 means it can link servers but those servers can't link anything under them (that is, this hub can only link leaves). A value of 0 means no limit, and is the default.
</p>
<p><b>class</b><br>
The class this server is put into, often a separate server class is used for this.
@@ -1942,7 +1994,8 @@ link &lt;server-name&gt; {
changing host (like dyndns.org)</td></tr>
<tr><td><b>nohostcheck</b></td><td> don't validate the remote host (link::hostname), use this if it's an often
changing host (like dyndns.org)</td></tr>
<tr><td><b>quarantine</b></td><td> opers on this server will maintain locop status</td></tr>
<tr><td><b>quarantine</b></td><td> opers on this server cannot get GLOBAL oper privileges
(they will get killed), used for test links and such</td></tr>
</table>
</p>
<p>Example:</p>
@@ -1971,6 +2024,7 @@ link hub.mynet.com {
alias &lt;name&gt; {
target &lt;nick-to-forward-to&gt;;
type &lt;type-of-alias&gt;;
spamfilter &lt;yes|no&gt;;
};</pre></p>
<p>(Note: also see <a href="#includedirective">here</a> about the standard alias files UnrealIRCd has)</p>
<p>The alias block [standard alias] allows you to forward a command to a user,
@@ -1980,37 +2034,50 @@ alias &lt;name&gt; {
forward to, alias::target can be left out. The alias::type specifies the type
of alias, valid types are services (the user is on the services server), stats
(the user is on the stats server), normal (the user is a normal user on
any server), and channel (the target is a channel name). The alias block also has another
purpose which is explained below.</p>
any server), and channel (the target is a channel name). If alias::spamfilter (optional)
is set to 'yes', then the spamfilters will be checked (default is 'no').<br>
The alias block also has another purpose which is explained below.</p>
<p>Syntax [command alias]:<br>
<pre>
alias &lt;name&gt; {
/* For aliases to be sent to users/channels */
format &lt;regex-expression&gt; {
target &lt;nick-to-forward-to&gt;;
type &lt;type-of-alias&gt;;
parameters &lt;parameter-string&gt;;
};
/* For 'real aliases' */
format &lt;regex-expression&gt; {
command &lt;command&gt;;
type real;
parameters &lt;parameter-string&gt;;
};
/* Etc... You can have as many format blocks as you wish.. */
format &lt;regex-expression&gt; {
...
};
type command;
spamfilter &lt;yes|no&gt;;
};</pre></p>
<p>When the alias block is used in this format, it allows you a much broader range
of usage. For example you can create aliases such as /identify. The alias::
is the same as above, the name of the alias command. The alias::format specifies
is the same as above, the name of the alias command. The <b>alias::format</b> specifies
a regular expression that compares against the text sent to the alias command,
when matched the sub-entries of that alias::format will be used, you may have
multiple alias::format's to make the command do different things depending on
the text sent to it. The alias::format::target is the target to forward this
alias to. The alias::format::type specifies the type of the alias that the
message should be forwarded to. The alias::format::parameters is what will
the text sent to it. The <b>alias::format::target</b> is the target to forward this
alias to, however in case of a "real alias" <b>alias::format::command</b> is used instead.
The <b>alias::format::type</b> specifies the type of the alias that the
message should be forwarded to, besides the types mentioned previously in
"Syntax [standard alias]", we also allow the type "real" here, for "real
aliases". The <b>alias::format::parameters</b> is what will
be sent as the parameters to this alias. To specify one of the parameters given
to the command alias specify % followed by a number, for example, %1 is the
first parameter. To specify all parameters from a given parameter to the end
do % followed by the number and a -, for example %2- returns all parameters
from the second till the last. Additionally, you may specify %n which will be replaced
by the nickname of the user who executed the command. For examples of using the alias
block in the command format, consult doc/example.conf.</p>
by the nickname of the user who executed the command.<br><br>
For examples of using the alias block in the command format, consult doc/example.conf.</p>
<p></p></div>
<p><font class="block_section">4.33 - </font><font class="block_name">Help Block</font>
<font class="block_optional">OPTIONAL</font><a name="helpblock"></a>
@@ -2094,7 +2161,63 @@ spamfilter {
</pre></p>
</div>
<p><font class="block_section">4.36 - </font><font class="block_name">Set Block</font>
<p><font class="block_section">4.36 - </font><font class="block_name">Cgiirc Block</font>
<font class="block_optional">OPTIONAL</font><a name="cgiirc"></a>
</p><div class="desc">
<p>
The cgiirc block allows you to configure host spoofing for CGI:IRC gateways you trust
(<a href="#feature_cgiirc">more info</a>).</p>
<p>Syntax:<br>
<pre>
cgiirc {
type &lt;webirc|old&gt;;
username &lt;mask&gt;; /* optional */
hostname &lt;mask&gt;;
password &lt;password&gt;; /* only for type webirc */
};</pre></p>
<p><b>type</b> is either 'webirc' or 'old'.<br>
<b>username</b> is matched against the ident (if present). If not specified, "*" is assumed.<br>
<b>hostname</b> is the hostmask to match against.<br>
<b>password</b> is the webirc password, only used for type 'webirc'.<br>
</p>
<p><b>How to configure with method 'webirc' (recommended method)</b><br>
In your CGI:IRC configuration file (cgiirc.conf) you set webirc_password to a good password.<br>
Then, in your unrealircd.conf you add a cgiirc block to allow this host and password and you set
cgiirc::type to "webirc".<br>
<br>
Example:<br>
In your CGI:IRC configuration file (cgiirc.conf) you add:
<pre>webirc_password = LpT4xqPI5</pre>
Then, in your unrealircd.conf you add a cgiirc block:
<pre>cgiirc {
type webirc;
hostname "1.2.3.4";
password "LpT4xqPI5";
};</pre></p>
<p><b>How to configure with method 'old'</b><br>
NOTE: This is not the recommended method since it has two disadvantages:
this method will send the IP/host to spoof as a server password, meaning you cannot
specify a server password as a CGI:IRC user. Additionally, access control is only
IP-based and does not require an extra password like the 'webirc' method. In short,
you probably should not be using this method unless you have a good reason to do so.<br>
<br>
In your CGI:IRC configuration file (cgiirc.conf) you set realhost_as_password to 1.<br>
Then, in your unrealircd.conf you add a cgiirc block to allow this host.<br>
<br>
Example:<br>
In your CGI:IRC configuration file (cgiirc.conf) you add:
<pre>realhost_as_password = 1</pre>
Then, in your unrealircd.conf you add a cgiirc block:
<pre>cgiirc {
type old;
hostname "1.2.3.4";
};</pre></p>
</div>
<p><font class="block_section">4.37 - </font><font class="block_name">Set Block</font>
<font class="block_required">REQUIRED</font> <font class="block_old">(Previously known as unrealircd.conf/networks file)</font><a name="setblock"></a>
</p><div class="desc">
<p>The set file is what use to be our networks/unrealircd.conf and our networks
@@ -2155,6 +2278,9 @@ set {
The snomask that will be set on a user when they /oper.</p>
<p><font class="set">set::modes-on-join &lt;+modes&gt;;</font><br>
The modes that will be set on a channel when it is first created. Not all modes can be set using this command. +qaohvbeOAzlLk can NOT be set using this command.</p>
<p><font class="set">set::level-on-join &lt;op|none&gt;;</font><br>
The mode that a user will get when he's the first to join a channel. This
is either 'op' (channel operator, the default) or 'none'.</p>
<p><font class="set">set::restrict-usermodes &lt;modes&gt;</font><br>
Restrict users to set/unset the modes listed here (don't use + or -).<br>
For example you can set +G in modes-on-connect and G in restrict-usermodes,
@@ -2198,6 +2324,14 @@ set {
<p><font class="set">set::silence-limit &lt;limit&gt;;</font><br>
Sets the limit on the maximum SILENCE list entries. If this directive is not specified,
a limit of 15 is set.</p>
<p><font class="set">set::maxbans &lt;limit&gt;;</font><br>
Sets the limit on the maximum amount of bans (+b) allowed per channel. The default is 60.
If you change this, be sure to also take a look at maxbanlength (see next)!</p>
<p><font class="set">set::maxbanlength &lt;limit&gt;;</font><br>
Similar to above, but sets the maximum amount of characters for all bans added up
together, so basically this puts up a limit on the (semi-)maximum amount of memory
all channel bans on a channel can take. The default is 2048 (bytes). With the default
set::maxbans of 60 this allows 2048:60=34 characters per ban on average.</p>
<p><font class="set">set::oper-only-stats &lt;stats-list&gt;;</font><br>
Specifies a list of stats flags with no separators that defines stats flags
only opers can use. Leave this value out to allow users to use all flags, or
@@ -2213,7 +2347,7 @@ set {
<p><font class="set">set::channel-command-prefix &lt;command-prefixes&gt;;</font><br>
Specifies the prefix characters for services "in channel commands". Messages starting with
any of the specified characters will still be sent even if the client is +d. The default
value is "`".</p>
value is "`!.".</p>
<p><font class="set">set::allowed-nickchars { &lt;list&gt; };</font><br>
Character sets / languages to allow in nicks, see <a href="#feature_nickchars">Nick Character Sets</a>.</p>
<p><font class="set">set::allow-userhost-change [never|always|not-on-channels|force-rejoin]</font><br>
@@ -2252,12 +2386,12 @@ set {
A time value specifying the length of time a DNS server has to respond before
a timeout. A time value is a numeric string with d meaning days, h meaning hours,
m meaning minutes, and s meaning seconds, for example 1d2h3m means 1 day, 2
hours, 3 minutes.</p>
hours, 3 minutes. (NOT IMPLEMENTED)</p>
<p><font class="set">set::dns::retries &lt;number-of-retries&gt;;</font><br>
A numeric value specifying the number of times the DNS lookup will be retried
if failure occurs.</p>
if failure occurs. (NOT IMPLEMENTED)</p>
<p><font class="set">set::dns::nameserver &lt;name-of-dns-server&gt;;</font><br>
Specifies the hostname of the server that will be used for DNS lookups.</p>
Specifies the hostname of the server that will be used for DNS lookups. (NOT IMPLEMENTED)</p>
<p><font class="set">set::dns::bind-ip &lt;ip&gt;;</font><br>
Specifies the IP to bind to for the resolver, rarely ever needed.</p>
<p><font class="set">set::network-name &lt;name-of-network&gt;;</font><br>
@@ -2319,6 +2453,14 @@ set {
Specifies the filename where the server's SSL private key is located.</p>
<p><font class="set">set::ssl::trusted-ca-file &lt;filename&gt;;</font><br>
Specifies the filename where the certificates of the trusted CAs are located.</p>
<p><font class="set">set::ssl::server-cipher-list &lt;cipherlist&gt;;</font><br>
Specifies which ciphers to be allowed, by default we leave this up to OpenSSL.
See <a href="http://www.openssl.org/docs/apps/ciphers.html#CIPHER_LIST_FORMAT">http://www.openssl.org/docs/apps/ciphers.html</a>
on how to specify the list of ciphers.</p>
<p><font class="set">set::ssl::renegotiate-bytes &lt;value&gt;;</font><br>
Specifies after how many bytes an SSL session should be renegotiated (eg: 20m for 20 megabytes).</p>
<p><font class="set">set::ssl::renegotiate-timeout &lt;timevalue&gt;;</font><br>
Specifies after how much time an SSL session should be renegotiated (eg: 1h for 1 hour).</p>
<p><font class="set">set::ssl::options::fail-if-no-clientcert;</font><br>
Forces clients that do not have a certificate to be denied.</p>
<p><font class="set">set::ssl::options::no-self-signed;</font><br>
@@ -2371,6 +2513,32 @@ set {
<p><font class="set">set::spamfilter::except &lt;target(s)&gt;</font><br>
These targets are exempt from spam filtering (no action will be taken),
can be single target or comma seperated list.. Ex: except "#help,#spamreport"</p>
<p><font class="set">set::spamfilter::slowdetect-warn &lt;value&gt;</font><br>
If a spamfilter takes longer than this amount of milliseconds to execute
(1000ms = 1 second), then a warning notice will be sent to all opers (default: 250).
See also <a href="#feature_spamfilter_slow">Slow Spamfilter Detection</a>.</p>
<p><font class="set">set::spamfilter::slowdetect-fatal &lt;value&gt;</font><br>
If a spamfilter takes longer than this amount of milliseconds to execute
(1000ms = 1 second), then the spamfilter will be removed (default: 500).
See also <a href="#feature_spamfilter_slow">Slow Spamfilter Detection</a>.</p>
<p><font class="set">set::check-target-nick-bans &lt;yes|no&gt;</font><br>
Whenever the user changes his/her nick, check if the NEW nick would be
banned. If so, do not allow the nickchange. Default is yes.</p>
<p><font class="set">set::timesynch::enabled &lt;yes|no&gt;</font><br>
Enable or disable time synchronization on-boot. Default is yes.</p>
<p><font class="set">set::timesynch::server &lt;IP&gt;</font><br>
Server to synchronize time with. This can be up to 4 IP's seperated by comma's.
The servers must support NTP protocol version 4. The default is to use 3 time servers (US, EU,
AU). Requests to these servers are sent in parallel, fastest reply wins.</p>
<p><font class="set">set::timesynch::timeout &lt;time&gt;</font><br>
Maximum time to wait for a time server reply. This is a value between 1 and 5, more is not possible
because it causes too much inaccuracy. This setting is 3 by default and there's probably
no good reason to change it.</p>
<p><font class="set">set::pingpong-warning &lt;yes|no&gt;</font><br>
When NOSPOOF is enabled (usually on Windows), send a warning to each user to use
'/quote pong ..' if they are having problems connecting? The default is no.</p>
<p><font class="set">set::watch-away-notification &lt;yes|no&gt;</font><br>
Allows you to enable/disable AWAY notification in WATCH. The default is yes.</p>
<p></p> </div>
<p><b><font size="+2">5 &#8211; Additional Files<a name="addtlfiles"></a>
</font></b></p><div class="desc">
@@ -2576,7 +2744,8 @@ set {
</tr>
<tr>
<td><div align="center">d</div></td>
<td>Makes it so you can not receive channel PRIVMSGs</td>
<td>Makes it so you can not receive channel PRIVMSGs (with the exception
of text prefixed with certain characters, see set::channel-command-prefix)</td>
</tr>
<tr>
<td><div align="center">G</div></td>
@@ -2919,12 +3088,12 @@ to get more information on a command.</p>
</tr>
<tr>
<td height="39">globops &lt;message&gt;</td>
<td>Sends a message to all IRCops</td>
<td>Sends a message to all global IRCops</td>
<td>IRCop</td>
</tr>
<tr>
<td height="39">chatops &lt;message&gt;</td>
<td>Send a message to all IRCops with umode +c</td>
<td>Sends a message to all IRCops (local and global)</td>
<td>IRCop</td>
</tr>
<tr>
@@ -3350,10 +3519,15 @@ It will however make it more difficult / increase the effort needed to attack/ha
<p><b><font size="+2">8.8 Protecting against exploits</font></b><a name="secantiexploit"></a><br><div class="desc">
There are kernel patches that make it more difficult for stack- and heap-based exploits to
work. This should however not be your main focus point, you have a far more bigger risk
work. This is nice, but should not be your main focus point, you have a far more bigger risk
of getting exploited through the other points than this... for various reasons.<br>
Another option is enabling chrooting (*NIX only), which means upon a succesfull exploit,
the user is confined to the UnrealIRCd directory and cannot touch any other
files. This requires root privileges, modifying of include/config.h
(search for CHROOTDIR, and also set IRC_USER and IRC_GROUP), and a
recompile.<br>
<br>
There's one thing you should do however, which is to ALWAYS USE THE LATEST VERSION,
There's one thing you should definately do, which is to ALWAYS USE THE LATEST VERSION,
subscribe to the <a href="http://mail1.sourceforge.net/mailman/listinfo/unreal-notify" target="_blank">unreal-notify mailinglist</a>
right now so you receive the release announcements (unreal-notify is for release announcements only,
so only 1 mail per X months). Usually it's explicitly mentioned in the release announcement if the
@@ -3370,7 +3544,7 @@ security until they got hacked, try to avoid that :).
<p><font size="+2"><b>9 &#8211; Frequently Asked Questions (FAQ)<a name="faq"></a></b></font></p>
<div class="desc"><p>The FAQ is available online <a href="http://www.vulnscan.org/UnrealIrcd/faq/" TARGET="_blank">here</a></p></div>
<div class="desc"><p>The FAQ is available online <a href="http://www.vulnscan.org/UnrealIRCd/faq/" TARGET="_blank">here</a></p></div>
<p></p>
<p><font size="+2"><b>A Regular Expressions<a name="regex"></a></b></font></p>
@@ -3385,9 +3559,9 @@ security until they got hacked, try to avoid that :).
<p><font size="+2"><b>A.3 Repetition Operators<a name="regexrep"></a></b></font></p>
<div class="desc"><p>One of the common mistakes people make with regex is assuming that they work just like wildcards. That is, the * and ? characters will match just like in a wildcard. While these characters do have similar meaning in a regex, they are not exactly the same. Additionaly, regular expressions also support other, more advanced methods of repetition.
<p>
The most basic repetition operator is the ? operator. This operator matches 0 or 1 of the previous character. This, "of the previous character," is where the ? in regex differs from a wildcard. In a wildcard, the expression, "a?c" matches an "a" followed by any character (or no character), followed by a "c." In regex it has a different meaning. It matches 0 or 1 of the letter "a" followed by the letter "c." Basically, the ? is modifying the a by specifying how many a's may be present. To emulate the ? in a wildcard, the . operator is used. The regex "a.?c" is equivilent to the previously mentioned wildcard. It matches the letter "a" followed by 0 or 1 of any character (the ? is modifying the .), followed by a "c."
The most basic repetition operator is the ? operator. This operator matches 0 or 1 of the previous character. This, "of the previous character," is where the ? in regex differs from a wildcard. In a wildcard, the expression, "a?c" matches an "a" followed by any character, followed by a "c". In regex it has a different meaning. It matches 0 or 1 of the letter "a" followed by the letter "c". Basically, the ? is modifying the a by specifying how many a's may be present. To emulate the ? in a wildcard, the . operator is used. The regex "a.c" is equivilent to the previously mentioned wildcard. It matches the letter "a" followed by any character, followed by a "c".
<p>
The next repetition operator is the *. Again, this operator is similar to a wildcard. It matches 0 or more of the previous character. Note that this "of the previous character" is something that is characteristic of all repetition operators. The regex "a*c" matches 0 or more a's followed by a "c." For example, "aaaaaac" matches. Once again, to make this work like a wildcard, you would use "a.*c" which will cause the * to modify the . (any character) rather than the "a."
The next repetition operator is the *. Again, this operator is similar to a wildcard. It matches 0 or more of the previous character. Note that this "of the previous character" is something that is characteristic of all repetition operators. The regex "a*c" matches 0 or more a's followed by a "c". For example, "aaaaaac" matches. Once again, to make this work like a wildcard, you would use "a.*c" which will cause the * to modify the . (any character) rather than the "a."
<p>
The + operator is very similar to the *. However, instead of matching 0 or more, it matches 1 or more. Basically, "a*c" will match "c" (0 a's followed by a c), where as "a+c" would not. The "a+" states that there must be "at least" 1 a. So "c" does not match but "ac" and "aaaaaaaaac" do.
<p>
+293 -122
View File
@@ -12,10 +12,10 @@
.block_old { font-size: 14; }
.set { font-weight: bold; }
.desc { margin-left: 15px; }
pre { font: "times new roman"; font-style: normal;}
pre { font: "times new roman"; font-style: normal; background-color: #eeeeee;}
</style>
</head>
<!-- $Id$ -->
<body>
@@ -24,22 +24,23 @@
<a href="unreal32docs.es.html">Spanish</a> |
Hungarian |
<a href="unreal32docs.fr.html">French</a> |
<a href="unreal32docs.gr.html">Greek</a>
<a href="unreal32docs.gr.html">Greek</a> |
<a href="unreal32docs.nl.html">Dutch</a> |
<a href="unreal32docs.ru.html">Russian</a> |
<a href="unreal32docs.tr.html">Turkish</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">Verzió: 3.2.3</font><br>
 <b>Utolsó dokumentáció módosítás:</b> 2005-03-13</div>
<font size="4">Verzió: 3.2.8</font><br>
<b>Utolsó dokumentáció frissítés:</b> 2009-01-03</div>
<br>
<b>Fő fejlesztők:</b> Stskeeps / codemastr / Syzop / Luke<br>
<b>Fejlesztők:</b> Stskeeps / codemastr / Syzop / Luke / aquanight / WolfSage <br>
<b>Munkatársak:</b> McSkaf / Zogg / NiQuiL / assyrian / chasm / DrBin / llthangel / Griever / nighthawk<br>
<b>Dokumentáció:</b> CKnight^ / Syzop<br>
<b>Magyar fordítás:</b> <a href="mailto:angrywolf@flashmail.com">AngryWolf</a><br>
<p>Az UnrealIRCd 3.2 egyre nagyobb összetettsége miatt átváltottunk egy könnyebben
kezelhető, teljesebb körű dokumentációkészletre. Ezen leírás megtekintéséhez
a lent felsorolt kompatibilis böngészők egyikére van szükséged. Friss dokumentációkat
találsz a <a href="http://www.vulnscan.org/UnrealIrcd/unreal32docs.html">http://www.vulnscan.org/UnrealIrcd/unreal32docs.html</a>
címen, és egy GYIK-et a <a href="http://www.vulnscan.org/UnrealIrcd/faq/" target="_blank">http://www.vulnscan.org/UnrealIrcd/faq/</a> oldalon.
<p>E dokumentáció megtekintéséhez az alábbiakban felsorolt kompatibilis böngészők egyikére van szükséged. Friss dokumentációkat
találsz a <a href="http://www.vulnscan.org/UnrealIRCd/unreal32docs.html">http://www.vulnscan.org/UnrealIRCd/unreal32docs.html</a>
címen, és egy GYIK-et a <a href="http://www.vulnscan.org/UnrealIRCd/faq/" TARGET="_blank">http://www.vulnscan.org/UnrealIRCd/faq/</a> oldalon.
</p>
<p><b>Kompatibilis böngészők: </b><br>
<ul>
@@ -55,7 +56,7 @@ Hungarian |
---1.1. <a href="#notesonolder">Megjegyzések a 3.1.x-ről 3.2-re frissítésről és a verziók keveréséről</a><br>
---1.2. <a href="#notesonupgrade">Megjegyzések a 3.2-es verziók közötti frissítésről</a><br>
2. <a href="#installation">Telepítés</a><br>
3. <a href="#features">Featúrák</a><br>
3. <a href="#features">Jellegzetességek</a><br>
-- 3.1. <a href="#feature_cloaking">Álcázás</a><br>
-- 3.2. <a href="#feature_modules">Modulok</a><br>
-- 3.3. <a href="#feature_snomasks">Snomaszkok</a><br>
@@ -67,12 +68,14 @@ Hungarian |
-- 3.9. <a href="#feature_ipv6">IPv6</a><br>
-- 3.10. <a href="#feature_ziplinks">Zip linkek</a><br>
-- 3.11. <a href="#feature_dyndns">Dinamikus DNS-sel/IP-vel linkelések támogatása</a><br>
-- 3.12. <a href="#feature_antiflood">Árasztásvédelmi featúrák</a><br>
-- 3.12. <a href="#feature_antiflood">Árasztásvédelmi lehetőségek</a><br>
-- 3.13. <a href="#feature_bantypes">Ban típusok</a><br>
-- 3.14. <a href="#feature_spamfilter">A spamszűrő</a><br>
-- 3.15. <a href="#feature_cidr">CIDR</a><br>
-- 3.16. <a href="#feature_nickchars">Karakterkészletek nicknevekhez</a><br>
-- 3.17. <a href="#feature_other">További featúrák</a><br>
-- 3.17. <a href="#feature_cgiirc">CGI:IRC támogatás</a><br>
-- 3.18. <a href="#feature_timesync">Időszinkronizáció</a><br>
-- 3.19. <a href="#feature_other">További jellegzetességek</a><br>
4. <a href="#configuringyourunrealircdconf">Az unrealircd.conf fájlod
beállítása</a><br>
---4.1. <a href="#configurationfileexplained">A konfigurációs formátumról</a><br>
@@ -110,7 +113,8 @@ Hungarian |
 ---4.33. <a href="#helpblock">Help blokk</a><br>
 ---4.34. <a href="#officialchannels">Official channels blokk</a><br>
 ---4.35. <a href="#spamfilter">Spamfilter blokk</a><br>
 ---4.36. <a href="#setblock">Set blokk -=- (networks/unrealircd.conf)</a><br>
---4.36. <a href="#cgiirc">Cgiirc blokk</a><br>
---4.37. <a href="#setblock">Set blokk -=- (networks/unrealircd.conf)</a><br>
5. <a href="#addtlfiles">További fájlok</a><br>
6. <a href="#userchannelmodes">Felhasználói és csatornamódok</a><br>
7. <a href="#useropercommands">Felhasználói és operátori parancsok</a><br>
@@ -124,7 +128,7 @@ Hungarian |
---8.7. <a href="#secinformation">Információközlés</a><br>
---8.8. <a href="#secantiexploit">Sebezhetőségek elleni védelem</a><br>
---8.9. <a href="#secsummary">Összegzés</a><br>
9. <a href="http://www.vulnscan.org/UnrealIrcd/faq/" target="_blank">Gyakran Ismételt Kérdések (FAQ)</a><br>
9. <a href="http://www.vulnscan.org/UnrealIRCd/faq/" target="_blank">Gyakran Ismételt Kérdések (FAQ)</a><br>
A. <a href="#regex">Reguláris kifejezések</a><br>
---A.1. <a href="#regexlit">Konstansok</a><br>
---A.2. <a href="#regexdot">A pont operátor</a><br>
@@ -143,9 +147,9 @@ Hungarian |
terjesztése szigorúan tilos az UnrealIRCd Fejlesztői Csapat írásos engedélye nélkül.
Ez a dokumentum másolható, nyomtatható, sokszorosítható és közzétehető
tetszés szerinti alkalommal, feltéve, hogy azt az UnrealIRCD-hez használod, és
nem módosítod. &#8211; Copyright UnrealIRCd Fejlesztői Csapat 2002-2005</p>
nem módosítod. &#8211; Copyright UnrealIRCd Fejlesztői Csapat 2002-2006</p>
<p>Kérlek, olvasd el ezt a kézikönyvet, mielőtt segítséget kérsz, és BIZTOSAN bele akarsz nézni a
<a href="http://www.vulnscan.org/UnrealIrcd/faq/" target="_blank">GYIK</a>-ba is, mivel a kérdéseid/problémáid 80%-a meg van válaszolva benne. Ha az nem
<a href="http://www.vulnscan.org/UnrealIRCd/faq/" target="_blank">GYIK</a>-ba is, mivel a kérdéseid/problémáid 80%-a meg van válaszolva benne. Ha az nem
oldotta meg a problémádat, segítséget kérhetsz az irc.ircsystems.net-en (6667-es port) az #unreal-support csatornán. (Megjegyzendő,
hogy MEGKÖVETELJÜK a dokumentáció és a GYIK elolvasását, és csak az UnrealIRCd-vel kapcsolatban segítünk, nem a Servicessel!).
Ha találsz egy valódi hibát (például egy ütközést), jelentsd a
@@ -156,7 +160,7 @@ Hungarian |
<div class="desc">
<p>Abban az esetben, ha az Unreal3.1.x-ről Unreal3.2-re frissítesz, észre fogod venni, hogy az egész konfigurációs
fájl megváltozott, és talán nehéznek látod először, de ha egyszer átváltottál, sokkal jobbnak fogod találni!</p>
<p>Ezenkívül ne felejtsd el elolvasni a featúrákról szóló 3. részt, mert bár néhányukról tudsz, amelyek az Unreal3.1.x-ben is megtalálhatóak, de van számos új featúra is!</p>
<p>Ezenkívül ne felejtsd el elolvasni a jellegzetességekről szóló 3. részt, mert bár néhányukról tudsz, amelyek az Unreal3.1.x-ben is megtalálhatóak, de van számos újdonság is!</p>
<p>A legjobb, ha nem keversz/linkelsz 3.1.x-et 3.2-vel, de ha nagyon akarod, legaláb egy 3.1.4-es vagy 3.1.5.1-ös erősen ajánlott.</p></div>
<p><font size="+2"><b>1.2 &#8211; Megjegyzések a 3.2-es verziók közötti frissítésről</b></font><a name="notesonupgrade"></a><br>
@@ -184,7 +188,9 @@ Windows:<br>
<li><b>*NIX verziók:</b>
<ul>
<li>Linux (2.2.*, 2.4.*, 2.6.*)
<li>FreeBSD (4.*, 5.*)
<li>FreeBSD (4.*, 5.*, 6.*)
<li>NetBSD (2.*)
<li>OpenBSD (3.7, 3.8, 3.9)
<li>Solaris (9, 10)
</ul>
<li><b>Windows verzió:</b>
@@ -203,13 +209,13 @@ Windows:<br>
</ul>
<br>
Ha van egy működő Unreal3.2-d más operációs rendszereken, kérlek, küldd
a részleteket a <a href="mailto:coders@lists.unrealircd.com">coders@lists.unrealircd.com</a> címre.<br>
a részleteket a <a href="mailto:coders@lists.unrealircd.org">coders@lists.unrealircd.org</a> címre.<br>
</p>
<p><b>Telepítési útmutatások</b><br>
Linux:<br>
<ol>
<li>gunzip -d Unreal3.2.2.tar.gz
<li>tar xvf Unreal3.2.2.tar
<li>gunzip -d Unreal3.2.X.tar.gz
<li>tar xvf Unreal3.2.X.tar
<li>cd Unreal3.2
<li>./Config
<li>Válaszolj ezekre a kérdésekre a legjobb tudásod szerint. Általában, ha nem vagy biztos
@@ -225,16 +231,17 @@ Windows:<br>
</ol>
</p>
<p> </p></div>
<p><font size="+2"><b>3.0 - Featúrák</b></font>
<p><font size="+2"><b>3.0 - Jellegzetességek</b></font>
<a name="features"></a></p><div class="desc">
<p>Néhány főbb és hasznosabb featúráról adunk magyarázatot ebben a részben. Általános áttekintést nyújt,
<p>Néhány főbb és hasznosabb jellegzetességről adunk magyarázatot ebben a részben. Általános áttekintést nyújt,
és néha utal a konfigurációs fájlra is (olyasmire, amiről talán még semmit sem tudsz).</p>
<p>Ezt a részt kihagyhatod, azonban ajánlott elolvasni a telepítés előtt vagy után.</p></div>
<p>Ezt a részt kihagyhatod, azonban erősen ajánlott elolvasni a telepítés előtt vagy után,
mert máskülönben nem fogsz megérteni olyan fogalmakat, mint az "álcázás", "snomaszkok" stb.</p></div>
<p><font size="+2"><b>3.1 - Álcázás</b></font><a name="feature_cloaking"></a></p><div class="desc">
<p>Az álcázás (cloaking) egy módszer a felhasználók valós gazdaneveinek elrejtésére. Például, ha a valódi gazdaneved <i>d5142341.cable.wanadoo.nl</i>,
(a join, part, whois stb. üzenetekben) <i>rox-2DCA3201.cable.wanadoo.nl</i>-ként lesz megjelenítve.
Ez a featúra hasznos annak a megelőzésére, hogy a felhasználók egymást árasszák (floodolják), mivel így nem látják a valódi gazdanevet ill. IP címet.</p>
Ez a funkció hasznos annak a megelőzésére, hogy a felhasználók egymást árasszák (floodolják), mivel így nem látják a valódi gazdanevet ill. IP címet.</p>
<p>Ez a +x felhasználói móddal vezérelhető (például: /mode nickneved +x), az adminok erőltethetik a +x alapértelemzésbeli
engedélyezését is, vagy beállíthatják, hogy a mód soha ne legyen eltávolítható.</p>
<p>Az álcázott gazdanevet egy álcázó modul állítja elő (egyet szükséges betöltened), az Unreal jelenleg 1 ilyen hivatalos modult tartalmaz:<br>
@@ -243,6 +250,8 @@ Windows:<br>
nagybetű (A-Z) valamint szám (0-9) karakterekből áll [pl.: "AopAS6WQH2Os6hfosh4SFJHs"]. Az example.conf-ban találsz példát.<br>
<p>Az álcázási kulcsoknak egy hálózat MINDEN SZERVERÉN azonosnak KELL lenniük. Továbbá a kulcsokat tartsd TITOKBAN,
mert ha valaki ismeri a kulcsokat, visszafejtheti az eredeti gazdanevet (ami a +x felhasználói módot hasznavehetetlenné teszi).</p>
<p>Tipp: Ha *NIX alatt vagy, és új álcázási kulcsokat kell készítened, futtathatod az './unreal gencloak' parancsot is
a parancsértelmeződben, ami 3 véletlenszerű sztringet írat ki erre a célra.</p>
</div>
<p><font size="+2"><b>3.2 - Modulok</b></font><a name="feature_modules"></a></p><div class="desc">
<p>Az UnrealIRCd támogatja a modulokat, ami hasznos, mert:<br>
@@ -283,12 +292,12 @@ Windows:<br>
<p>Alapértelmezésben, ha a felhasználó egyszerűen csak a +s módot állítja be, bizonyos snomaszkok lesznek beállítva. Közönséges felhasználóknak a +ks, operátoroknak a +kscfvGqo snomaszkok.</p></div>
<p><font size="+2"><b>3.4 - Álnevek</b></font><a name="feature_aliases"></a></p><div class="desc">
<p>Az álnevek (alias) szolgálnak szerverszintű álparancsok beállítására.
Például az "/ns identify blah" parancsot továbbíthatod a nickservnek (úgy lesz
lefordítva, hogy "privmsg nickserv identify blah"). Ennél összetettebb álneveket is készíthetsz, mint a /register,
<p>Az álnevek (alias) szerverszintű álparancsok beállítására szolgálnak.
Például az "/ns identify blah" parancsot továbbíthatjuk a nickservnek (úgy lesz
lefordítva, hogy "privmsg nickserv identify blah"). Ennél összetettebb álneveket is készíthetünk, mint pl. a /register,
amely a ChanServhez továbbítódik, ha az első paraméter #-tel kezdődik, és a NickServ-hez, ha nem.</p>
<p>Az álnevek az alias blokkban állíthatóak be a konfigurációs fájlban, és egy külön fájlt is betölthetsz, amely
alapértelmezett álneveket tartalmaz a leggyakrabban használt szolgáltatásokhoz.</p></div>
<p>Álnevek az <a href="#aliasblock">alias blokkban</a> állíthatóak be a konfigurációs fájlban, és külön betölthetünk egy olyan fájlt is, amiben
alapértelmezett álnevek vannak a leggyakrabban használt szolgáltatásokhoz.</p></div>
<p><font size="+2"><b>3.5 - Helpop</b></font><a name="feature_helpop"></a></p><div class="desc">
<p>Az UnrealIRCd rendelkezik egy beépített súgórendszerrel, ami elérhető a /helpop-pal. A /helpop parancs teljes mértékben
@@ -346,11 +355,11 @@ Windows:<br>
link::options::zip opciót (mindkét oldalon).</p></div>
<p><font size="+2"><b>3.11 - Dinamikus DNS-sel/IP-vel linkelések támogatása</b></font><a name="feature_dyndns"></a></p><div class="desc">
<p>Az UnrealIRCd néhány (új) hasznos featúrával segíti azokat a felhasználókat, akiknek dinamikus IP-jük van, és dinamikus DNS-t használnak
<p>Az UnrealIRCd néhány (új) hasznos funkcióval segíti azokat a felhasználókat, akiknek dinamikus IP-jük van, és dinamikus DNS-t használnak
(mint a valami.dyndns.org). Ha két dinamikus DNS-sel rendelkező gépet linkelsz, állítsd be a link::options::nodnscache és a link::options::nohostcheck opciókat.
</p></div>
<p><font size="+2"><b>3.12 - Árasztásvédelmi featúrák</b></font><a name="feature_antiflood"></a></p><div class="desc">
<p><font size="+2"><b>3.12 - Árasztásvédelmi lehetőségek</b></font><a name="feature_antiflood"></a></p><div class="desc">
<p>
<b>Elfojtás</b><br>
Az elfojtás (throttling) egy módszer annak korlátozására, hogy egy felhasználó milyen gyorsan bonthatja a kapcsolatot
@@ -411,7 +420,7 @@ Bizonyos
Ez a csatornát +R-re állítja, ha a belépési határt elérték (&gt;20 belépés 15 másodperc alatt),
és +M-re, ha a megengedett üzenetek számát elérték (&gt;50 üzenet 15 másodperc alatt).<br>
<br>
Van egy &quot;töröld a módot X perc után&quot; featúra is: a <i>+f [20j#R5]:15</i> +R-re állítja a csatornát, ha
Van egy &quot;töröld a módot X perc után&quot; funkció is: a <i>+f [20j#R5]:15</i> +R-re állítja a csatornát, ha
elérték a határt, és -R-et állít be 5 perc után.<br>
A szervernek lehet alapértelmezett módtörlési ideje (set::modef-default-unsettime), vagyis ha azt írod be, hogy <i>+f [20j]:15</i>,
átváltozhat <i>+f [20j#i10]:15</i>-re. Ez csak egy alapértelmezés, továbbra is beállíthatsz [20j#i2]:15-öt vagy bármi ehhez hasonlót,
@@ -419,7 +428,7 @@ A szervernek lehet alap
<br>
A régi +f mód (felhasználónkénti üzenetáradat) szintén elérhető a 't' tevékenységként, a +f 10:6-ot most már úgy hívjuk, hogy +f [10t]:6, és
a +f *20:10 most már +f [20t#b]:10. Jelenleg az ircd automatikusan átalakítja a régi +f módtípusokat az újakra.
Megjegyzendő, hogy nincs alapértelmezett törlési idő featúra a 't' banokra (a [20t#b30]:15 nem fog működni).<br>
Megjegyzendő, hogy nincs alapértelmezett törlési idő funkció a 't' banokra (a [20t#b30]:15 nem fog működni).<br>
<br>
Az, hogy mi a legjobb +f mód, nagymértékben függ a csatornától... Hány felhasználója van? Van-e rajta olyan játék, ami a felhasználókat
sok üzenet küldésére készteti (pl.: trivia), vagy használnak-e gyakran popupokat? Ez egy valamiféle főcsatorna-e, vagy benne van-e az auto-join-ban? Stb.<br>
@@ -556,16 +565,32 @@ lesznek alak
A <b>set::spamfilter::ban-reason</b>-nel meghatározhatsz egy alapértelmezett indokot (alapértelmezés: 'Spam/advertising')<br>
A <b>set::spamfilter::virus-help-channel</b>-lel meghatározhatod, hogy milyen csatornára történjen a belépés a 'viruschan' tevékenység esetén (alapértelmezés: #help)<br>
A <b>set::spamfilter::virus-help-channel-deny</b> segítségével pedig letilthatod a normál belépéseket a "virus-help-channel"-ben (alapértelmezés: no)<br>
</p></div>
</p>
<p>
<font size="+1"><B>Lassú spamszűrők érzékelése</B></font><a name="feature_spamfilter_slow"></a><br>
A spamszűrő regexek jelentősen lelassíthatják az IRCd-t. Ez attól függ,
milyen regexet használsz (és a regex motor hogyan kezeli). Némelyek elég
gyorsak, és az UnrealIRCd ezret is lefuttat belőlük másodpercenként. Mások
túlságosan lassúak lehetnek, több másodperc futtatási időt is igényelhetnek, és lefagyaszthatják az IRCd-t.<br>
Ennek megóvása érdekében az Unreal-nak van lassú spamszűrő érzékelője (Slow Spamfilter Detection):
valahányszor egy spamszűrő lefut, az UnrealIRCd ellenőrzi, mennyi idő kell neki, hogy
lefusson. Ha átlép egy bizonyos küszöbszintet, az IRCd figyelmeztetést küld, esetleg le is törli
a spamszűrőt.<br>
A figyelmeztetést a <b>set::spamfilter::slowdetect-warn</b> direktívával állíthatjuk be (alapértelmezés: 250ms),
az automatikus törlést pedig a <b>set::spamfilter::slowdetect-fatal</b> direktívával (alapértelmezés: 500ms).
Mindkét direktíva beállítható 0-ra (nullára), ami letiltja a lassú spamszűrők érzékelését.<br>
Jelenleg ez a funkció nem elérhető Windows alatt.<br>
</p>
</div>
<p><font size="+2"><b>3.15 - CIDR</b></font><a name="feature_cidr"></a></p><div class="desc">
<p>Az UnrealIRCd-nek most már van támogatása CIDR-re (Classless Interdomain Routing; osztály nélküli, tartományon belüli útvonalválasztás). A CIDR alkalmas
IP tartományok kitiltására. Az IP-ket CIDR használatával osztják ki ISP-k (Internet Service Provider, Internetszolgáltató) között, ezért a CIDR alapú kitiltások
beállításának képességével egyszerűen kitiltható egy ISP. Az Unreal mind IPv4-re és IPv6-ra is támogatja a CIDR-t. A CIDR maszkok
használhatóak az allow::ip, a ban user::mask, a ban ip::mask, az except ban::mask, az except throttle::mask
és az except tkl::mask direktívákban (ez utóbbinál gzline-ra, gline-ra és shun-ra). Azonfelül a CIDR használható még a /kline,
/gline, /zline, /gzline, and /shun parancsokban. Az Unreal a szabványos IP/bitek szintaktikát használja, pl.
127.0.0.0/8 (illeszkedési tartománya 127.0.0.0 - 127.255.255.255) és fe80:0:0:123::/64 (illeszkedési tartománya
<p>Az UnrealIRCd most már támogatja a CIDR-t is (Classless Interdomain Routing - osztálynélküli körzetek közti forgalomirányítás). A CIDR alkalmas
IP tartományok kitiltására. Az egyes ISP-knek (Internet Service Provider - internet-szolgáltató) CIDR használatával osztanak ki IP-ket, ezért azzal, hogy CIDR alapú kitiltásokat lehet beállítani,
egyszerűen kitilthatunk egy ISP-t. Az Unreal IPv4-re és IPv6-ra is támogatja a CIDR-t. CIDR maszkokat
a következő direktívákban használhatunk: allow::ip, oper::from::userhost, ban user::mask, ban ip::mask, except ban::mask,
except throttle::mask és except tkl::mask (ez utóbbinál gzline-ra, gline-ra és shun-ra). Ezenkívül a CIDR használható még
a /kline, a /gline, a /zline, a /gzline és a /shun parancsokban. Az Unreal a szabványos, IP/bitek alakú szintaktikát használja,
pl. 127.0.0.0/8 (illeszkedési tartománya 127.0.0.0 - 127.255.255.255) és fe80:0:0:123::/64 (illeszkedési tartománya
fe80:0:0:123:0:0:0:0 - fe80:0:0:123:ffff:ffff:ffff:ffff).</p></div>
<p><font size="+2"><b>3.16 - Karakterkészletek nicknevekhez</b></font><a name="feature_nickchars"></a></p><div class="desc">
@@ -596,6 +621,9 @@ Egy t
<tr><td>greek</td><td>Görög karakterek</td><td>iso8859-7</td></tr>
<tr><td>turkish</td><td>Török karakterek</td><td>iso8859-9</td></tr>
<tr><td>russian-w1251</td><td>Orosz karakterek</td><td>windows-1251</td></tr>
<tr><td>belarussian-w1251</td><td>Fehérorosz karakterek</td><td>windows-1251</td></tr>
<tr><td>ukrainian-w1251</td><td>Ukrán karakterek</td><td>windows-1251</td></tr>
<tr><td><b>windows-1251</b></td><td>russian-w1251, belarussian-w1251, ukrainian-w1251</td><td>windows-1251</td></tr>
<tr><td>hebrew</td><td>Héber karakterek</td><td>iso8859-8-I/windows-1255</td></tr>
<tr><td>chinese-simp</td><td>Egyszerűsített kínai</td><td>Több-bájtos: GBK/GB2312</td></tr>
<tr><td>chinese-trad</td><td>Hagyományos kínai</td><td>Több-bájtos: GBK</td></tr>
@@ -622,17 +650,39 @@ enged
<pre>set { allowed-nickchars { chinese-simp; chinese-trad; }; };</pre>
</p></div>
<p><font size="+2"><b>3.17 - További featúrák</b></font><a name="feature_other"></a></p><div class="desc">
<p>Az UnrealIRCd-nek rengeteg featúrája van, ezért itt nincs minden megemlítve... Rájössz majd magadtól is.</p></div>
<p><font size="+2"><b>3.17 - CGI:IRC támogatás</b></font><a name="feature_cgiirc"></a></p><div class="desc">
<p>Az UnrealIRCd támogatja a CGI:IRC gazdanév hamisítást, ami azt jelenti, hogy megjelölhetünk bizonyos CGI:IRC
átjárókat "megbízhatóként", ezáltal az IRCd a felhasználók valódi gazdanevét/IP címét jeleníti meg mindenhol
az IRC-n, és nem a CGI:IRC átjáróét.</p>
<p>Lásd a <a href="#cgiirc">cgiirc blokkot</a> a beállításának hogyanjáról.</p>
</div>
<p><font size="+2"><b>3.18 - Időszinkronizáció</b></font><a name="feature_timesync"></a></p><div class="desc">
<p>A pontos idő nagyon fontos az IRC szervereken. Pontos idő nélkül a csatornákon desynch problémák léphetnek fel, ártatlan
felhasználók kaphatnak kilövést, helytelenül jelenhetnek meg csatornák a /LIST-ben, egyszóval: óriási baj származhat belőle.</p>
<p>Az UnrealIRCd-nek van egy kis beépített időszinkronizáció támogatása.
Bár nem optimális (az idő még mindig eltérhet néhány másodpercet), a legtöbb esetben megszabadít az időkülönbségtől.
Lehetőség szerint még mindig javasolt valamilyen időszinkronizáló szoftver futtatása, pl. *NIX alatt az ntpd vagy
a Windows időszinkronizáló szolgáltatása (ebben az esetben kikapcsolhatjuk az Unreal időszinkronizálását, erről bővebben később).</p>
<p>Az UnrealIRCd (alapból) azt csinálja, hogy indításkor végrehajt egy egyszeri időszinkronizálást. Elküld (alapértelmezésben) egy lekérdezést
több időszervernek, és amikor megkapja a legelső (leggyorsabb) választ, hozzáigazítja a belső ircd órát
(NEM a rendszerórát). Ha valamilyen okból az időszervertől nem kap választ 3 másodpercen belül,
az IRCd ennek ellenére folytatja az indulást (ilyennek ritkán kellene történnie).</p>
<p>Az időszinkronizáció beállítható (és kikapcsolható) a <b>set::timesynch</b> blokkban, lásd
a <a href="#setblock">set leírását</a> további információkért.</p>
</div>
<p><font size="+2"><b>3.19 - További jellegzetességek</b></font><a name="feature_other"></a></p><div class="desc">
<p>Az UnrealIRCd-nek rengeteg funkciója van, ezért itt nincs minden megemlítve... Rájössz majd magadtól is.</p></div>
<p> </p>
<p><font size="+2"><b>4.0 - Az unrealircd.conf fájlod beállítása</b></font>
<a name="configuringyourunrealircdconf"></a></p><div class="desc">
<p>Először is, egy jó unrealircd.conf készítése komoly időt vesz igénybe, talán
körülbelül 10 - 60 percet. Megpróbálhatod a lehető leggyorsabban üzemkésszé tenni és
trükközgetni vele később, vagy rögtön, lépésről lépésre megtanulhatod a legfőbb részeket,
ami a javasolt módszer ;P. Ha problémáid vannak, ellenőrizd a szintaktikát, nézd át a kézikönyvet,
és nézz bele a FAQ-ba is, mielőtt segítségért fordulsz/hibát jelentesz.</p></div>
<p>Először is, az első unrealircd.conf-unk elkészítése komoly időt vesz igénybe (mondjuk, 15-60
percet). Egy <u></u> unrealircd.conf még ennél is többet.
Nem érdemes kapkodnunk, hogy az IRCd-nk minél hamarabb elinduljon, inkább menjünk végig a dolgokon
lépésről lépésre. Ha problémánk van, ellenőrizzük a szintaktikát, nézzük át ezt a kézikönyvet,
és nézzünk bele a <a href="http://www.vulnscan.org/UnrealIRCd/faq/">GYIK</a>-ba is, mielőtt segítségért fordulnánk vagy hibát jelentenénk.</p></div>
<p><b><font size="+2">4.1 A konfigurációs formátumról</font></b><a name="configurationfileexplained"></a><br><div class="desc">
</p>
<p>Az új rendszer egy blokk alapú formátumot használ. Az új formátumban minden bejegyzésnek vagy blokknak
@@ -648,21 +698,21 @@ enged
<p>A &lt;blokk-direktíva&gt; egy egyszerű változó, amelyet a blokk határoz meg, és
a &lt;direktívaérték&gt; a hozzátartozó érték. Ha a &lt;directívaérték&gt;
szóközöket tartalmaz vagy olyan karaktereket, amelyek megjegyzéseket fejeznek ki, idézőjelek közé
kell tenni. Ha az idézett szövegen belül egy idézőjel karaktert szeretnél használni,
használj \"-t, és idézőjelként lesz értelmezve.</p>
kell tenni. Ha az idézett szövegen belül egy idézőjel karaktert szeretnénk írni,
használjunk \"-t, és idézőjelként lesz értelmezve.</p>
<p>Egy &lt;blokk-direktíva&gt; is tartalmazhat direktívákat saját magán belül, ilyen esetben
lesz egy saját pár kapcsoszárójele maga körül. Néhány blokknak nincs direktívája,
és csak &lt;blokkérték&gt; formában határozzuk meg, mint az "include"-t.
Az is megjegyzendő, hogy nincs kötött forma, tehát az egész blokk megjelenhet egy sorban vagy akár
több sorban is. A fenti formát használják általában (és ebben a fájlban is ezt alkalmazzuk),
mert könnyen olvasható. </p>
<p>Megjegyzés: a konfigurációs fájl jelenleg kis- és nagybetűérzékeny, eképpen a "BLOKKNÉV" nem
ugyanaz, mint a "blokknév". Van egy általános jelölési rendszer, amit arra használunk, hogy
<p>Megjegyzés: a konfigurációs fájl jelenleg kis- és nagybetűérzékeny, eképpen a <i>BLOKKNÉV</i> nem
ugyanaz, mint a <i>blokknév</i>. Van egy általános jelölési rendszer, amit arra használunk, hogy
a konfigurációs fájl bejegyzéseiről beszéljünk. Például, hogy a fenti példabeli &lt;direktívanév&gt;-ről
beszéljünk, azt mondjuk, hogy &lt;blokknév&gt;::&lt;blokk-direktíva&gt;, és ha a direktívának van egy
alblokkja, amire utalni szeretnél, tegyél hozzá egy másik dupla kettőspontot (::)
alblokkja, amire utalni szeretnénk, tegyünk hozzá egy másik dupla kettőspontot (::)
és az aldirektíva nevét. </p>
<p>Ha egy névtelen direktíváról szeretnél beszléni, mondd azt, hogy &lt;blokknév&gt;::, ami
<p>Ha egy névtelen direktíváról szeretnénk beszléni, írjuk azt, hogy &lt;blokknév&gt;::, ami
ebben az esetben &lt;blokkérték&gt;-et jelent, vagy lehet egy alblokk
névtelen bejegyzése is.</p>
<p>Háromféle megjegyzéstípus támogatott:</p>
@@ -671,9 +721,11 @@ enged
/* Többsoros<br>
&nbsp;&nbsp;&nbsp;&nbsp;megjegyzés */<br>
</p>
<p>Most, hogy tudod, hogyan működik, készítsd el a saját unrealircd.conf-odat teljesen a semmiből, vagy
másold le a doc/example.conf-ot, és kezdd el szerkeszteni. Javasolt, hogy lépésről lépésre haladj
át az egyes blokktípusokon, és használd ezt a kézikönyvet segédletnek.</p>
<p>Most, hogy tudjuk, hogyan működik, másoljuk a <i>doc/example.conf</i>-ot az UnrealIRCd
könyvtárba (pl.: /home/felhasznalo/Unreal3.2) és nevezzük át <i>unrealircd.conf</i>-ra
(VAGY készítsünk egy saját <i>unrealircd.conf</i>-ot a semmiből).
Javasolt, hogy menjünk végig lépésről lépésre az egyes blokktípusokon és
a konfigurációs fájlunk beállításain, valamint használjuk ezt a kézikönyvet segédletként.</p>
<p></p></div>
<p><font class="block_section">4.2 - </font><font class="block_name">Me blokk</font>
<font class="block_required">KÖTELEZŐ</font> <font class="block_old">(Előzőleg M:Line néven ismert)</font><a name="meblock"></a></p><div class="desc">
@@ -1381,7 +1433,7 @@ tld {
channel &lt;csatornanév&gt;;
options {
ssl;
}
};
};</pre></p>
<p>A tld blokkal motd-ket, szabályokat és egy csatornát rendelhetsz felhasználókhoz
a hostjaik alapján. Ez hasznos, ha különböző motd-t szeretnél különböző nyelvekhez.
@@ -1549,7 +1601,7 @@ except ban {
mask &lt;hostmaszk&gt;;
};</pre></p>
<p>Az except ban blokkal határozhatod meg, mely user@host-ok bírálhatnak felül egy szélesebb maszkra
beállított kitiltást. Hasznos, ha egy Internet szolgáltató ki van tiltva, de
beállított kitiltást. Hasznos, ha egy internet-szolgáltató ki van tiltva, de
onnan bizonyos felhasználókat még mindig szeretnél kapcsolódni engedni. Az except::mask direktíva
a kapcsolódásra engedélyezett kliens user@host maszkját határozza meg.</p>
<p>Példa:<br>
@@ -1573,7 +1625,7 @@ except tkl {
};
};</pre></p>
<p>Az except tkl blokkal meghatározhatod, mely user@host-ok bírálhatnak felül egy szélesebb
maszkra beállított tkl kitiltást. Hasznos, ha egy Internet szolgáltató ki van tiltva,
maszkra beállított tkl kitiltást. Hasznos, ha egy internet-szolgáltató ki van tiltva,
de még mindig szeretnéd, hogy onnan kapcsolódhassanak bizonyos felhasználók.
Az except::mask direktíva a kapcsolódásra engedélyezett felhasználó user@host maszkja.
Az except::type meghatározza, hogy milyen letiltást bírálhat felül a kliens. Érvényes típusok:
@@ -1876,10 +1928,10 @@ link &lt;szervern
...
};
};</pre></p>
<p>Erre a blokkra van szükséged szerverek linkeléséhez. Kérlek, szakíts egy kis időt ennek az egésznek az
elolvasására, mert ez egyike azon legnehezebb dolgoknak, amelyeket a felhasználók gyakran elhibáznak ;P</p>
<p>Szerverek linkeléséhez erre a blokkra van szükséged. Kérlek, szakíts egy kis időt ennek az egésznek az
elolvasására, mert ez az egyik legnehezebb dolog, amit a felhasználók gyakran elhibáznak ;P</p>
<p>Először is, a <b>szervernév</b> a távoli szervered neve, az a név, amely a távoli szerver
me { } blokkjában van beállítva, mint a hub.blah.com (nem az IP cím, és a gazdanévtől is eltérő lehet).</p>
me { } blokkjában van beállítva, mint a hub.valami.com (nem az IP cím, és a gazdanévtől is eltérő lehet).</p>
<p><b>username</b><br>
Megadhatod ezt, ha identet használsz a felhasználónevek hitelesítésre, közönséges esetben állítsd "*"-ra.
</p>
@@ -1895,39 +1947,37 @@ link &lt;szervern
</table>
</p>
<p><b>bind-ip</b> (szabadon választható)<br>
Arra használható, hogy a szerver egy megadott IP-re bindeljen (pl. 192.168.0.1-re), ahonnan kellene
kapcsolódnia, szinte soha nincs szükség rá.
Ezzel megadhatjuk, hogy a helyi szerver milyen IP címről kapcsolódjon (pl. 192.168.0.1-ről), szinte soha nincs szükség rá.
</p>
<p><b>port</b><br>
Azon port száma, ahová kapcsolódjon a szerver (amelyen a távoli szerver figyeli a kapcsolódásokat).
</p>
<p><b>password-connect</b><br>
A távoli szerverre kapcsolódáskor használt jelszó, egyszerű szövegnek kell lennie.
A távoli szerverre kapcsolódáskor használt jelszó; egyszerű szövegnek kell lennie.
</p>
<p><b>password-receive</b><br>
A beérkező linkek érvényesítéséhez használt jelszó, lehet titkosított (érvényes kódolási típusok
A beérkező linkek érvényesítéséhez használt jelszó; lehet titkosított (érvényes kódolási típusok
a crypt, md5, sha1 és ripemd-160). A kódolás-típusa paramétert kihagyhatod, hogy csak egyszerű szöveget
használj. Gyakran megegyezik ez a jelszó a password-connect-tel.
</p>
<p><b>hub vs leaf</b><br>
A hub linkelhet egyszerre több szervert is, amíg a leafnek csak egy linkje lehet... hozzád.
Egy szerver vagy hub, vagy leaf, ezek együtt nem használhatóak.
A hub egyszerre több szervert is linkelhet, míg a leafnek csak egy linkje lehet... hozzád.
Egy szerver leaf, ha nincs hub direktívája. Akkor is leaf, ha a leaf direktíva értéke *, vagy a leafdepth értéke 1.
</p>
<p><b>hub</b> (szabadon választható)<br>
Az értéke egy maszk azokra a szerverekre, amelyekre ez a hub kapcsolódhat (pl: *.sajat.net).
Értéke egy maszk olyan szerverekre, amelyekre ez a hub kapcsolódhat (pl: *.sajat.net).
</p>
<p><b>leaf</b> (szabadon választható)<br>
Az értéke egy maszk azokra a szerverekre, amelyek felé ez a szerver leafként viselkedik.
Értéke egy maszk olyan szerverekre, amelyekre ez a hub <b>nem</b> kapcsolódhat. A *-nak ugyanolyan hatása van, mintha nem lenne hub direktíva.
</p>
<p><b>leaf-mélység</b> (szabadon választható)<br>
Ha ezt megadod, a leaf opciót is célszerű megadnod. Ez az érték azt a mélységet
(ugrások számát) határozza meg, amely alá ez a szerver nem léphet.
<p><b>leafdepth</b> (szabadon választható)<br>
Ez a direktíva meghatározza, hogy mekkora mélység lehet ezen szerver alatt (csomópontok száma). Például az 1 azt jelenti, hogy a szervernek nem lehet egy linkje sem (vagyis egy leaf), a 2 azt jelenti, hogy ő még linkelhet szervereket, de a hozzá kapcsolódók már nem (vagyis csak leaf szervereket linkelhet). A 0 érték azt jelenti, nincs korlátozás, és ez az alapértelmezés is.
</p>
<p><b>class</b><br>
Azon kapcsolati osztály, ahová helyezzük a szervert. Ehhez gyakran egy külön szerver osztályt szokás használni.
Megadja, melyik kapcsolati osztályba helyezzük a linkelt szervert. Ehhez gyakran egy külön szerver osztályt szokás használni.
</p>
<p><b>compression-level</b> (szabadon választható)<br>
Megadja ezen link tömörítési szintjét (1-9). Csak akkor szokás használni, ha a link::options::zip be van állítva.
Megadja a kapcsolat tömörítési szintjét (1-9). Csak akkor szokás használni, ha a link::options::zip be van állítva.
</p>
<p><b>ciphers</b> (szabadon választható)<br>
Meghatározza, milyen SSL kódoló/visszafejtő algoritmusok (cipherek) legyenek használatban ehhez a linkhez. A rendelkezésre álló
@@ -1937,14 +1987,15 @@ link &lt;szervern
Egy vagy több opció használatának beállítására szolgál. Néha nincs szükség rá.<br>
<table border="0">
<tr><td><b>ssl</b></td><td> ha SSL portra kapcsolódsz.</td></tr>
<tr><td><b>autoconnect</b></td><td> a szerver próbálkozni fog az automatikus kapcsolódással, a class::connfreq-ben
<tr><td><b>autoconnect</b></td><td> a szerver automatikusan fog próbálkozni a kapcsolódással a class::connfreq-ben
beállított időközönként (a legjobb, ha ezt csak egy oldalról engedélyezed, mint a leaf-&gt;hub linkeléseknél)</td></tr>
<tr><td><b>zip</b></td><td> ha tömörített (zip) linkeket akarsz; ehhez szükség van a szerverbe belefordítt zip link támogatásra + ezen opció beállítására mindkét oldalon</td></tr>
<tr><td><b>zip</b></td><td> ha tömörített (zip) linkeket szeretnél; ehhez szükség van a szerverbe belefordítt zip link támogatásra + ezen opció beállítására mindkét oldalon</td></tr>
<tr><td><b>nodnscache</b></td><td> ne használjon gyorsítótárat a kimenő szerverkapcsolat IP címére; használd ezt gyakran változó
gazdanevek (például dyndns.org) esetén.</td></tr>
<tr><td><b>nohostcheck</b></td><td> ne érvényesítse a távoli gazdanevet (link::hostname); használd ezt gyakran változó
gazdanevek (például dyndns.org) esetén.</td></tr>
<tr><td><b>quarantine</b></td><td> az operátorok ezen a szerveren helyi operátorokként funkcionálnak</td></tr>
<tr><td><b>quarantine</b></td><td> a szerver operátorai nem kaphatnak GLOBÁLIS jogosultságokat
(ki lesznek lőve), teszt linkekre meg hasonlókra szokás használni</td></tr>
</table>
</p>
<p>Példa:</p>
@@ -1973,46 +2024,60 @@ link hub.sajatnet.com {
alias &lt;név&gt; {
target &lt;ahová-továbbítsa&gt;;
type &lt;álparancs-típusa&gt;;
spamfilter &lt;yes|no&gt;;
};</pre></p>
<p>(Megjegyzés: lásd még az <a href="#includedirective">include</a> direktívát az UnrealIRCd szabványos álparancsokat tartalmazó fájljairól.)</p>
<p>Az alias blokk [szabványos álparancsokra] lehetővé teszi, hogy parancsokat továbbíts egy
<p>Az alias blokk [szabványos álparancsokra] lehetővé teszi, hogy parancsokat továbbítsunk egy
felhasználóhoz, például hogy a /chanserv üzenetet küldjön a chanserv felhasználónak.
Az alias:: meghatározza azt a parancsnevet, ami lesz az álnév (pl.: chanserv).
Az alias:: megadja azt a parancsnevet, ami lesz az álnév (pl.: chanserv).
Az alias::target egy nick- vagy csatornanév, ahová a parancs továbbítva lesz. Ha az alias:: ugyanaz,
mint a továbbítási célpont, az alias::target elhagyható. Az alias::type meghatározza
az álparancs típusát; érvényes típusok: services (a felhasználó egy szolgáltatás szerveren van), stats
(a felhasználó egy statisztikai szerveren van), normal (a felhasználó egy közönséges felhasználó
bármilyen szerveren), és channel (a célpont egy csatornanév). Az alias blokknak van más célja is,
amit az alábbiakban magyarázunk el.</p>
bármilyen szerveren), és channel (a célpont egy csatornanév). Az alias::spamfilter (nem kötelező)
"yes"-re állításával bekapcsolható a spamszűrés erre az álparancsra (az alapértelmezés "no").<br>
Az alias blokknak van egy másik célja is, amit az alábbiakban magyarázunk el.</p>
<p>Szintaktika [formázott álparancsokra]:<br>
<pre>
alias &lt;név&gt; {
/* Felhasználóknak/csatornára küldendő álparancsokra */
format &lt;reguláris-kifejezés&gt; {
target &lt;ahová-továbbítsa&gt;;
type &lt;álparancs-típusa&gt;;
parameters &lt;paraméter-sztring&gt;;
};
/* "Valódi" álparancsokra */
format &lt;reguláris-kifejezés&gt; {
command &lt;parancs&gt;;
type real;
parameters &lt;paraméter-sztring&gt;;
};
/* Stb... Annyi format blokkunk lehet, ahányat szeretnénk.. */
format &lt;reguláris-kifejezés&gt; {
...
};
type command;
spamfilter &lt;yes|no&gt;;
};</pre></p>
<p>Amikor az alias blokkot ebben a formában használod, lehetőséget ad egy sokkal szélesebb körű
alkalmazásra. Például készíthetsz olyan álparancsokat is, mint az /identify. Az alias::
ugyanaz, mint fent, az álparancs neve. Az alias::format blokkok értékei reguláris kifejezések,
<p>Amikor az alias blokkot ebben a formában használjuk, lehetőséget ad egy sokkal szélesebb körű
alkalmazására. Például készíthetünk olyan álparancsokat is, mint az /identify. Az alias::
ugyanaz, mint fent, az álparancs neve. Az <b>alias::format</b> blokkok értékei reguláris kifejezések,
amelyek az álparancshoz küldött szöveggel lesznek összehasonlítva, és ha az egyik illik rá,
annak az alias::format-nak az albejegyzései lesznek használatban. Lehet egyszerre több
alias::format-od is, hogy a parancs különböző dolgokat tegyen a neki küldött szövegtől
függően. Az alias::format::target az álparancs továbbításának célpontja.
Az alias::format::type meghatározza az előbbi nicknevű felhasználó típusát.
Az alias::format::parameters az, ami megmondja, milyen paraméterek legyenek elküldve
a felhasználóhoz. Hogy hivatkozz az álparancshoz küldött paraméterek egyikére,
írj egy % jelet egy azt követő számmal, például %1 az első paraméter. Lehetőséged van arra is,
hogy hivatkozz egy adott paramétertől kezdődően az üzenet végéig tartó összes paraméterre,
ehhez írj be egy % jelet, majd egy számot és egy - jelet, például a %2- visszaadja az összes
alias::format-unk is, így a parancs különböző dolgokat tehet a neki küldött szövegtől
függően. Az <b>alias::format::target</b> az álparancs továbbításának célpontja,
de "valódi" álparancsok esetében az <b>alias::format::command</b> használandó.
Az <b>alias::format::type</b> megadja, hogy az üzenet milyen típusú célponthoz
legyen elküldve; a "Szintaktika [szabványos álparancsokra]" részben korábban említett
típusok mellett itt megengedett még a "real" is, "valódi" álparancsokra.
Az <b>alias::format::parameters</b> mondja meg, milyen paraméterek legyenek elküldve
a felhasználóhoz. Ahhoz, hogy az álparancshoz küldött paraméterek egyikére hivatkozzunk,
írjunk egy % jelet egy azt követő számmal, például %1 az első paraméter. Lehetőség van arra is,
hogy hivatkozzunk egy adott paramétertől kezdődően az üzenet végéig tartó összes paraméterre,
ehhez írjunk be egy % jelet, majd egy számot és egy - jelet, például a %2- visszaadja az összes
paramétert a másodiktól kezdődően az utolsóig. Hasonló különleges célt szolgál még a %n is,
amit helyettesíteni fog annak a felhasználónak a neve, aki kiadta a parancsot. A formázott
álparancsokra vonatkozóan példákat találhatsz a doc/example.conf-ban.</p>
ami helyettesíti annak a felhasználónak a nevét, aki kiadta a parancsot.<br><br>
A formázott álparancsokra vonatkozóan példákat találunk a doc/example.conf-ban.</p>
<p></p></div>
<p><font class="block_section">4.33 - </font><font class="block_name">Help blokk</font>
<font class="block_optional">SZABADON VÁLASZTHATÓ</font><a name="helpblock"></a>
@@ -2024,7 +2089,7 @@ help &lt;n
&lt;szövegsor&gt;;
...
};</pre></p>
<p>(Megjegyzés: szokás csak betölteni a help.conf-ot)</p>
<p>(Megjegyzés: általában elég csak betölteni a help.conf-ot)</p>
<p>A help blokkal készíthetsz bejegyzéseket a /helpop parancshoz. A help:: az az érték,
amit a /helpop-nak kell átadni paraméterként; ha a help:: ki van hagyva, a blokk akkor
lesz használatban, amikor a /helpop-nak semmilyen paraméter nincs átadva. A help blokk
@@ -2058,7 +2123,7 @@ official-channels {
</p><div class="desc">
<p>
A spamfilter blokkal vehetsz fel helyi spamszűrőket (nem hálózati szintűeket).<br>
Lásd a <a href="#feature_spamfilter">Featúrák - A spamszűrő</a> szekciót további információért.<br>
Lásd a <a href="#feature_spamfilter">Jellegzetességek - A spamszűrő</a> szekciót további információért.<br>
</p>
<p>Szintaktika:<br>
<pre>
@@ -2096,7 +2161,63 @@ spamfilter {
</pre></p>
</div>
<p><font class="block_section">4.36 - </font><font class="block_name">Set blokk</font>
<p><font class="block_section">4.36 - </font><font class="block_name">Cgiirc blokk</font>
<font class="block_optional">SZABADON VÁLASZTHATÓ</font><a name="cgiirc"></a>
</p><div class="desc">
<p>
A cgiirc blokkal gazdanév-hamisítást állíthatunk be megbízható CGI:IRC átjárókra
(<a href="#feature_cgiirc">további információ</a>).</p>
<p>Szintaktika:<br>
<pre>
cgiirc {
type &lt;webirc|old&gt;;
username &lt;maszk&gt;; /* nem kötelező */
hostname &lt;maszk&gt;;
password &lt;jelszó&gt;; /* csak a webirc típusra */
};</pre></p>
<p>A <b>type</b> lehet akár "webirc" vagy "old" (azaz "régi").<br>
A <b>username</b> egyeztetésre kerül az azonosítónévvel (ha van ilyen). Ha nincs megadva, "*" lesz feltételezve.<br>
A <b>hostname</b> a gazdanévre illeszkedő maszk.<br>
A <b>password</b> a webirc jelszó, csak a "webirc" típus esetén használjuk.<br>
</p>
<p><b>Hogyan állítsuk be a 'webirc' módot? (javasolt mód)</b><br>
A CGI:IRC konfigurációs fájlunkban (cgiirc.conf) beállítjuk a webirc_password-öt egy alkalmas jelszóra.<br>
Ezután az unrealircd.conf-ba teszünk egy cgiirc blokkot, mellyel engedélyezzük ezt a gazdanevet és jelszót, valamint beállítjuk
a cgiirc::type-ot "webirc"-re.<br>
<br>
Példa:<br>
A CGI:IRC konfigurációs fájlba (cgiirc.conf) írjuk a következőt:
<pre>webirc_password = LpT4xqPI5</pre>
Majd az unrealircd.conf-ba tegyünk egy cgiirc blokkot:
<pre>cgiirc {
type webirc;
hostname "1.2.3.4";
password "LpT4xqPI5";
};</pre></p>
<p><b>Hogyan állítsuk be az "old" (régi) módot?</b><br>
MEGJEGYZÉS: Ez nem javasolt mód, mivel két hátránya van:
ez a mód szerverjelszóként küldi el a hamisítandó IP-t/gazdanevet, emiatt nem
adhatunk meg szerverjelszót CGI:IRC felhasználóként. Továbbá a hozzáférés-szabályozás csak
IP alapú, és nem igényel külön jelszót, mint a 'webirc' mód. Röviden,
nem kellene ezt használnunk, hacsak nincs nyomós indokunk rá.<br>
<br>
A CGI:IRC beállításfájlban (cgiirc.conf) beállítjuk a realhost_as_password-öt 1-re.<br>
Ezután az unrealircd.conf-ba teszünk egy cgiirc blokkot, hogy engedélyezzük ezt a gazdanevet.<br>
<br>
Példa:<br>
A CGI:IRC konfigurációs fájlba (cgiirc.conf) írjuk a következőt:
<pre>realhost_as_password = 1</pre>
Majd az unrealircd.conf-ba tegyünk egy cgiirc blokkot:
<pre>cgiirc {
type old;
hostname "1.2.3.4";
};</pre></p>
</div>
<p><font class="block_section">4.37 - </font><font class="block_name">Set blokk</font>
<font class="block_required">KÖTELEZŐ</font> <font class="block_old">(Előzőleg unrealircd.conf-ként/hálózati fájlként ismert)</font><a name="setblock"></a>
</p><div class="desc">
<p>A set fájl az, ami régebben a networks/unrealircd.conf-unk és a hálózati
@@ -2167,7 +2288,10 @@ set {
ily módon minden (új) csatornára ráeröltetheted a +G módot úgy, hogy ne tudják törölni.<br>
MEGJEGYZÉS: lehet, hogy ezek a csatornamódok még mindig használhatóak IRC szolgáltatásokon keresztül
az MLOCK alkalmazásával. Sajnos mi nem tudunk sokat tenni ezügyben, a szolgáltatás fejlesztőket
kellene megkérned, hogy megvalósítsanak egy restrict-channelmodes featúrát is.</p>
kellene megkérned, hogy megvalósítsanak egy restrict-channelmodes funkciót is.</p>
<p><font class="set">set::level-on-join &lt;op|none&gt;;</font><br>
Milyen módot kapjon az a felhasználó, aki elsőként lép be egy csatornára.
Lehet 'op' (csatorna operátor, az alapértelmezés) vagy 'none' (nincs mód).</p>
<p><font class="set">set::restrict-extendedbans &lt;típusok|*&gt;</font><br>
Nem ad engedélyt a felhasználóknak egyetlen kiterjesztett ban típus használatára sem ("*"), vagy csak bizonyos típusokat utasít vissza (pl.: "qc").</p>
<p><font class="set">set::auto-join &lt;csatornák&gt;;</font><br>
@@ -2200,6 +2324,14 @@ set {
<p><font class="set">set::silence-limit &lt;határ&gt;;</font><br>
Beállítja a SILENCE lista bejegyzéseinek legnagyobb megengedett számát. Ha ez a direktíva nincs jelen,
15 lesz beállítva.</p>
<p><font class="set">set::maxbans &lt;határ&gt;;</font><br>
Beállítja, hogy csatornánként legfeljebb hány kitiltás (+b) megengedett. Az alapértelmezés 60.
Ha ezen változtatsz, ne felejts ránézni a maxbanlength direktívára is (lásd alább)!</p>
<p><font class="set">set::maxbanlength &lt;határ&gt;;</font><br>
Hasonló a fentihez, de ez a kitiltások karaktereinek számára összesen határoz meg felső határt,
vagyis tulajdonképpen korlátozást tesz arra, kb. mekkora lehet az a legnagyobb mennyiségű memória,
amit a kitiltások csatornánként lefoglalhatnak. Az alapértelmezés 2048 (bájt). A set::maxbans
60-as alapértékével ez átlagosan 2048:60=34 karaktert enged kitiltásonként.</p>
<p><font class="set">set::oper-only-stats &lt;flaglista&gt;;</font><br>
Megad egy elválasztójelek nélküli, stats flagekből álló felsorolást, amely meghatározza, mely stats flageket
használhatnak csak operátorok. Hagyd ki ezt az értéket, hogy engedélyezd a felhasználóknak az összes
@@ -2215,7 +2347,7 @@ set {
<p><font class="set">set::channel-command-prefix &lt;parancs-előtagok&gt;;</font><br>
Meghatározza a csatornabeli services parancsok előtag karaktereit. Azok az üzenetek, amelyek az
itt megadott karakterek bármelyikével kezdődnek, még olyan kliensekhez is el lesznek küldve, amelyek
a +d móddal rendelkeznek. Az alapérték "`".</p>
a +d móddal rendelkeznek. Az alapérték "`!.".</p>
<p><font class="set">set::allowed-nickchars { &lt;felsorolás&gt; };</font><br>
Nicknevekben engedélyezendő karakterkészletek / nyelvek, lásd: <a href="#feature_nickchars">Karakterkészletek nicknevekben</a>.</p>
<p><font class="set">set::allow-userhost-change [never|always|not-on-channels|force-rejoin]</font><br>
@@ -2254,12 +2386,12 @@ set {
Egy időérték azon időhossz meghatározására, ami alatt a DNS szervernek válaszolni kell,
mielőtt időkifutás történik. Az időérték egy numerikus sztring a napot jelentő "d",
az órát jelentő "h", a percet jelentő "m" és a másodpercet jelentő "s" karakterekkel.
Például az 1d2h3m jelentése 1 nap, 2 óra és 3 perc.</p>
Például az 1d2h3m jelentése 1 nap, 2 óra és 3 perc. (NINCS IMPLEMENTÁLVA)</p>
<p><font class="set">set::dns::retries &lt;próbálkozások-száma&gt;;</font><br>
Egy számérték, amely meghatározza, hányszor történjen újrapróbálkozás a DNS lekérdezésben,
ha hiba fordul elő.</p>
ha hiba fordul elő. (NINCS IMPLEMENTÁLVA)</p>
<p><font class="set">set::dns::nameserver &lt;dns-szerver-neve&gt;;</font><br>
Meghatározza a DNS lekérdezésekhez használt szerver gazdanevét.</p>
Meghatározza a DNS lekérdezésekhez használt szerver gazdanevét. (NINCS IMPLEMENTÁLVA)</p>
<p><font class="set">set::dns::bind-ip &lt;ip&gt;;</font><br>
Meghatározza azt az IP címet, amelyre bindeljen a szerver a lekérdezésekhez; a lehető legritkábban van szükség rá.</p>
<p><font class="set">set::network-name &lt;hálózat-neve&gt;;</font><br>
@@ -2321,6 +2453,14 @@ set {
Meghatározza azt a fájlnevet, ahol a szerver privát SSL kulcsa tartozkodik.</p>
<p><font class="set">set::ssl::trusted-ca-file &lt;fájlnév&gt;;</font><br>
Meghatározza azt a fájlnevet, ahol a megbízható CA-k tanúsítványai tartózkodnak.</p>
<p><font class="set">set::ssl::server-cipher-list &lt;kódoló-algoritmusok&gt;;</font><br>
Meghatározza, milyen kódoló algoritmusok legyenek engedélyezve, alapértelmezésben az OpenSSL dönti el.
Lásd a <a href="http://www.openssl.org/docs/apps/ciphers.html#CIPHER_LIST_FORMAT">http://www.openssl.org/docs/apps/ciphers.html</a>
oldalt a kódoló algoritmusok meghatározásának hogyanjáról.</p>
<p><font class="set">set::ssl::renegotiate-bytes &lt;érték&gt;;</font><br>
Meghatározza, hogy hány bájt után kelljen az SSL viszonynak új kézfogás (pl.: 20m a 20 megabájthoz).</p>
<p><font class="set">set::ssl::renegotiate-timeout &lt;időérték&gt;;</font><br>
Meghatározza, hogy mennyi idő múlva kelljen az SSL viszonynak új kézfogás (pl.: 1h az 1 órához).</p>
<p><font class="set">set::ssl::options::fail-if-no-clientcert;</font><br>
Letiltja a tanúsítvány nélküli kliensek kapcsolódását.</p>
<p><font class="set">set::ssl::options::no-self-signed;</font><br>
@@ -2373,6 +2513,32 @@ set {
<p><font class="set">set::spamfilter::except &lt;célpont(ok)&gt;</font><br>
Ezek a célpontok kivételek a spamszűrések alól (nem lesz tevékenység végrehajtva),
lehet egyetlen célpont vagy egy vesszővel elválaszott felsorolás. Pl.: except "#help,#spamreport"</p>
<p><font class="set">set::spamfilter::slowdetect-warn &lt;érték&gt;</font><br>
Ha egy spamszűrő lefutása több ideig tart, mint a megadott ezredmásodpercek száma,
(1000ms = 1 másodperc), akkor minden operátor kap egy figyelmeztető üzenetet (alapérték: 250).
Lásd még: <a href="#feature_spamfilter_slow">Lassú spamszűrők érzékelése</a>.</p>
<p><font class="set">set::spamfilter::slowdetect-fatal &lt;érték&gt;</font><br>
Ha egy spamszűrő lefutása több ideig tart, mint a megadott ezredmásodpercek száma,
(1000ms = 1 másodperc), akkor a spamszűrő le lesz törölve (alapérték: 500).
Lásd még: <a href="#feature_spamfilter_slow">Lassú spamszűrők érzékelése</a>.</p>
<p><font class="set">set::check-target-nick-bans &lt;yes|no&gt;</font><br>
Valahányszor a felhasználó nicknevet változtat, ellenőrzi, hogy az ÚJ név le van-e
tiltva. Ha igen, nem engedélyezi a nickváltást. Az alapértelmezés "yes".</p>
<p><font class="set">set::timesynch::enabled &lt;yes|no&gt;</font><br>
Engedélyezi vagy letiltja az ircd indításkori időszinkronizálását. Az alapértelmezés "yes".</p>
<p><font class="set">set::timesynch::server &lt;IP&gt;</font><br>
Ezzel a szerverrel szinkronizálja az időt. Legfeljebb négy IP lehet, vesszőkkel elválasztva.
A szervereknek támogatniuk kell az NTP protokoll 4-es verzióját. Az alapértelmezés 3 időszervert használ (US, EU,
AU). A lekérdezések párhuzamosan kerülnek elküldésre, a leggyorsabb válasz nyer.</p>
<p><font class="set">set::timesynch::timeout &lt;időtartam&gt;</font><br>
Legfeljebb ennyi ideig vár az időszerverek válaszára. Ez egy érték 1 és 5 között; több nem lehet,
mert túl nagy pontatlanságot okozna. Ez az érték alapértelmezésben 3, és nem valószínű, hogy
érdemes megváltoztatni.</p>
<p><font class="set">set::pingpong-warning &lt;yes|no&gt;</font><br>
Ha a NOSPOOF engedélyezett (általában Windowson), küldjön egy figyelmeztetést minden felhasználónak, hogy
használják a "/quote pong .." parancsot, ha kapcsolódási problémájuk van. Az alapértelmezés "no".</p>
<p><font class="set">set::watch-away-notification &lt;yes|no&gt;</font><br>
Engedélyezi vagy letiltja az AWAY értesítéseket a WATCH-ban. Az alapértelmezés "yes".</p>
<p></p> </div>
<p><b><font size="+2">5 &#8211; További fájlok<a name="addtlfiles"></a>
</font></b></p><div class="desc">
@@ -2578,7 +2744,8 @@ set {
</tr>
<tr>
<td><div align="center">d</div></td>
<td>Nem fogadsz csatornabeli PRIVMSG-ket</td>
<td>Nem fogadsz csatornabeli PRIVMSG-ket (kivéve az olyan szövegűeket,
amelyek bizonyos karakterrel kezdődnek, lásd: set::channel-command-prefix)</td>
</tr>
<tr>
<td><div align="center">G</div></td>
@@ -2921,12 +3088,12 @@ tov
</tr>
<tr>
<td height="39">globops &lt;üzenet&gt;</td>
<td>Üzenetet küld minden IRCopnak.</td>
<td>Üzenetet küld minden globális IRCopnak.</td>
<td>IRCop</td>
</tr>
<tr>
<td height="39">chatops &lt;üzenet&gt;</td>
<td>Üzenetet küld minden +c módú IRCopnak</td>
<td>Üzenetet küld minden (globális és lokális) IRCopnak</td>
<td>IRCop</td>
</tr>
<tr>
@@ -3340,7 +3507,7 @@ Ha t
és ez érvényes még néhány más dologra is.<br>
<br>
<b>KÖZÖNSÉGES FELHASZNÁLÓK ÉS SNOMASKOK</b><br>
Van egy featúra, amit nem ismernek széles körben; ez az, hogy közönséges felhasználók is beállíthatnak néhány korlátozott snomaskot,
Van egy funkció, melyet nem ismernek széles körben; ez az, hogy közönséges felhasználók is beállíthatnak néhány korlátozott snomaskot,
mégpedig azt, hogy "+s +sk". Ezzel láthatnak olyan dolgokat, mint a beállítások újratöltése, killek és egyéb más üzenetek.<br>
Ennek letiltására használhatod a "set::restrict-usermodes"-t a következőképpen: <i>set { restrict-usermodes "s"; };</i>.<br>
@@ -3352,12 +3519,16 @@ Viszont a t
<p><b><font size="+2">8.8. Sebezhetőségek elleni védelem</font></b><a name="secantiexploit"></a><br><div class="desc">
Vannak kernel patchek, amelyek nehezebbé teszik a szegmens és verem alapú sebezhetőségek működését.
Azonban ne ez legyen a figyelmed középpontja, sokkal nagyobb veszély van arra, hogy más módon
Ez szép és jó, azonban ne ez legyen a figyelmed középpontja, sokkal nagyobb veszély van arra, hogy más módon
aknázzák ki a szervere(i)det... különböző okok miatt.<br>
Egy másik lehetőség, hogy engedélyezed a chroot-olást (csak *NIX esetén), ami biztosíték arra, hogy ha sikerül is a kiaknázás,
a támadót bezártad az UnrealIRCd könyvtárba, és nem módosíthat más
fájlokat. Ehhez a módszerhez rendszergazdai jogosultságokon kellenek, valamint hogy módosítsd az include/config.h-t
(keress rá a CHROOTDIR-re, és állítsd be az IRC_USER és IRC_GROUP makrókat is), aztán fordítsd újra.<br>
<br>
Van egy dolog viszont, amit meg kellene tenned, ez pedig az, hogy MINDIG HASZNÁLD A LEGFRISSEBB VERZIÓT, és
Van egy dolog, amit határozottan érdemes megtenned, ez pedig, hogy MINDIG HASZNÁLD A LEGFRISSEBB VERZIÓT, és
jelentkezz fel az <a href="http://mail1.sourceforge.net/mailman/listinfo/unreal-notify" target="_blank">unreal-notify levelezőlistára</a> most rögtön,
hogy megkaphasd a a kiadási közleményeket (az unreal-notify csak kiadási közleményekre
hogy megkaphasd a kiadási közleményeket (az unreal-notify csak kiadási közleményekre
van, így csak 1 levelet jelent X havonta). A kiadási közleményben rendszerint világosan fel van tüntetve, ha
a kiadás (nagyobb veszélyességű) biztonsági hibák javítását tartalmazza, de egyébként is jó, ha frissítesz.<br>
</div></p>
@@ -3372,7 +3543,7 @@ Nagyon sokan nem is t
<p><font size="+2"><b>9 &#8211; Gyakran Ismételt Kérdések (FAQ)<a name="faq"></a></b></font></p>
<div class="desc"><p>A FAQ online elérhető <a href="http://www.vulnscan.org/UnrealIrcd/faq/" TARGET="_blank">innen</a>.</p></div>
<div class="desc"><p>A FAQ online elérhető <a href="http://www.vulnscan.org/UnrealIRCd/faq/" TARGET="_blank">innen</a>.</p></div>
<p></p>
<p><font size="+2"><b>A Reguláris kifejezések<a name="regex"></a></b></font></p>
@@ -3382,24 +3553,24 @@ Nagyon sokan nem is t
<div class="desc"><p>A konstansok a regexp legegyszerűbb elemei. Alapvetően ezek olyan karaktek, amelyeket egyszerű szövegként kezelünk. Például a "teszt" minta öt konstansból, a "t", "e", "s", "z" és "t" karakterekből áll. Az Unrealben a konstansok a kis- és nagybetűkre nem érzékenyek, ezért az előző regex illeszkedik a "teszt"-re valamint a "TESZT"-re is. Minden karakter, ami nem "metakarakter" (avagy különleges jelentésű karakter; ezeket a következő szekciókban tárgyaljuk), konstansként lesz kezelve. Egy karaktert határozottan konstanssá is tehetsz a visszaper (\) jellel. Például a pont (.) egy metakarakter. Ha szeretnénk a mintánkba belevenni egy konstans pontot, használjuk a \. jelölést, és az Unreal ezt pontként (írásjelként) fogja kezelni. Az is lehetséges, hogy egy olyan karaktert akarsz vizsgálni, ami nem írható be könnyen, mondjuk az ASCII kódú 3-as karakter (szín). Inkább, mint hogy egy IRC klienst kelljen használnunk ennek a karakternek az elkészítéséhez, használhatunk egy különleges karaktersorozatot, a "\x"-et. Ha beírjuk, hogy \x3, úgy lesz értelmezve, hogy ő 3-as ASCII karakter. A \x utáni szám hexadecimális ábrázolású, és "\x0"-tól "\xFF"-ig terjedhet.</p></div>
<p><font size="+2"><b>A.2 A pont operátor<a name="regexdot"></a></b></font></p>
<div class="desc"><p>A pont (.) operátort "akármilyen karakter" egyeztetésére használjuk. Egyetlen karakterre illeszkedik, aminek bármilyen értéke van. Például az "a.c" regex illeszkedik a "abc"-re, "adc"-re stb. Viszont nem fog illeszkedni az "abd"-re, mert az "a" és "c" konstansok, amelyeknek pontosan kell illeszkedniük.</p></div>
<div class="desc"><p>A pont (.) operátort "bármilyen karakter" egyeztetésére használjuk. Egyetlen karakterre illeszkedik, aminek bármilyen értéke van. Például az "a.c" regex illeszkedik a "abc"-re, "adc"-re stb. Viszont nem fog illeszkedni az "abd"-re, mert az "a" és "c" konstansok, amelyeknek pontosan kell illeszkedniük.</p></div>
<p><font size="+2"><b>A.3 Ismétlő operátorok<a name="regexrep"></a></b></font></p>
<div class="desc"><p>Az egyik gyakori hiba, amit az emberek elkövetnek a regexekkel, hogy feltételezik, úgy működnek, mint a joker karakterek, vagyis hogy a * és ? karakterek pontosan úgy illeszkednek, mint egy joker karakterben. Noha ezeknek a karaktereknek valóban hasonló a jelentésük egy regexben, mégsem pontosan ugyanazok. Továbbá a reguláris kifejezések támogatnak más, haladóbb ismétlési módszereket is.
<div class="desc"><p>Az egyik gyakran elkövetett hiba a regexeknél az, hogy azt feltételezk, hogy úgy működnek, mint a joker karakterek. Vagyis hogy a * és ? karakterek pontosan úgy illeszkednek, mint a joker karakterek. Noha ezeknek a karaktereknek valóban hasonló a jelentésük egy regexben, mégsem pontosan ugyanazok. Továbbá a reguláris kifejezések támogatnak más, fejlettebb ismétlési módszereket is.
<p>
A legegyszerűbb ismétlő operátor a ? operátor. Ez az operátor az előző karakternek 0 vagy 1 előfordulására illeszkedik. Ez az "előző karakternek" az, amiben a reguláris kifejezésbeli ? különbözik a joker karaktertől. Egy joker karakterben az "a?c" kifejezés illeszkedik egy "a"-ra, amelyet bármilyen karakter követ (vagy semmilyen), és ezt egy "c" karakter követi. Egy reguláris kifejezésben más jelentése van. Ott illeszkedik 0 vagy 1 egy "a" betűre, amelyet a "c" követ. Alaptvetően a ? módosítja az "a"-t úgy, hogy megadja, hány "a" fordulhat elő. Ahhoz, hogy a ?-et joker karakterként emuláljuk, a . operátort használjuk. A "a.?c" regex egyenértékű az előzőleg említett joker karakterrel. Olyan "a" betűre illeszkedik, amelyet 0 vagy 1 bármilyen karakter követ (a "?" módosítja a "."-ot), és azt követi egy "c".
A legegyszerűbb ismétlő operátor a ? operátor. Ez az operátor az előző karakternek 0 vagy 1 előfordulására illeszkedik. Ez az "előző karakternek" az, amiben a reguláris kifejezésbeli ? különbözik a joker karaktertől. Egy joker karakterben az "a?c" kifejezés illeszkedik egy olyan "a"-ra, amely után bármilyen karakter áll, és ezt egy "c" karakter követi. Egy reguláris kifejezésben más jelentése van. Ott illeszkedik 0 vagy 1 "a" betűre, amelyet a "c" követ. Alapvetően a ? módosítja az "a"-t úgy, hogy megadja, hány "a" fordulhat elő. Ahhoz, hogy emuláljuk a ?-et mint joker karaktert, a . operátort használjuk. A "a.c" regex egyenértékű az előzőleg említett joker karakterrel. Olyan "a" betűre illeszkedik, amelyet egy tetszőleges karakter követ, és azt követi egy "c".
<p>
A következő ismétlő operátor a *. Ez az operátor szintén hasonlít egy joker karakterre. Az előző karakternek 0 vagy több előfordulására illeszkedik. Megjegyzendő, hogy ez az "előző karakternek" olyasvalami, ami minden ismétlő operátor jellemzője. Az "a*c" illeszkedik 0 vagy több "a"-ra, amelyet "c" követ. Például az "aaaaaac"-re illeszkedik. És mégegyszer, ahhoz, hogy ez az operátor joker karakterként működjön, használjuk az "a.*c" kifejezést, aminek hatására a "*" a "."-ot (bármilyen karakter) módosítja, inkább mint az "a"-t.
A következő ismétlő operátor a *. Ez az operátor szintén hasonlít egy joker karakterre. Az előző karakternek 0 vagy több előfordulására illeszkedik. Megjegyzendő, hogy ez az "előző karakternek" olyasvalami, ami minden ismétlő operátor jellemzője. Az "a*c" illeszkedik 0 vagy több "a"-ra, amelyet "c" követ. Például az "aaaaaac"-re illeszkedik. És mégegyszer: ahhoz, hogy ez az operátor joker karakterként működjön, használjuk az "a.*c" kifejezést, aminek hatására a "*" a "."-ot (bármilyen karakter) módosítja, nem pedig az "a"-t.
<p>
A + operátor nagyon hasonló a *-hoz. Viszont ahelyett, hogy 0 vagy több karakterre illeszkedne, illeszkedik 1 vagy több karakterre. Alapvetően az "a*c" illeszkedik a "c"-re (0 "a", amelyet c követ), ugyanakkor az "a+c" nem. Az "a+" azt fejezi ki, hogy kell lennie "legalább" 1 "a"-nak. Így a "c"-re nem illeszkedik, de az "ac"-re és "aaaaaaaaac"-re igen.
A + operátor nagyon hasonló a *-hoz. Viszont ez 0 vagy több karakter helyett 1 vagy több karakterre illeszkedik. Alapvetően tehát az "a*c" illeszkedik magára a "c"-re is (0 darab "a"-ra, amelyet egy "c" követ), ugyanakkor az "a+c" már nem. Az "a+" azt fejezi ki, hogy lennie kell "legalább" 1 "a"-nak. Így a "c"-re nem illeszkedik, de az "ac"-re és "aaaaaaaaac"-re igen.
<p>
A leghaladóbb ismétlő operátor "intervallum" néven ismert. Egy intervallum operátorral pontos megszorítást tehetünk arra, hogy az előző karakterből mennyinek kell lennie. Például lehet, hogy pontosan 8 "a" megkövetelésére van szükségünk, vagy legalább 8 "a"-ra vagy 3 és 5 közötti darabszámú "a"-ra. Egy intervallum operátorral ezek mindegyike megvalósítható. Az alapvető szintaktikája az "{M,N}", ahol M az alsó határ, és N a felső határ. Például 3 és 5 közötti darabszámú "a" egyeztetésére azt írjuk, hogy "a{3,5}". Mindamellett nem kötelező mindkét számot megadni. Ha "a{8}"-at írunk, az azt jelenti, hogy pontosan 8 darab "a"-nak kell lennie. Ezért az "a{8}" megegyezik az "aaaaaaaa"-val. Ahhoz, hogy a "legalább"-os példát valósítsuk meg, alapvetően egy olyan intervallumot adunk meg, aminek csak alsó határa van. Eképpen a legalább 8 "a"-ra azt írjuk, hogy "a{8,}".
A legfejlettebb ismétlő operátor az "intervallum" néven ismert. Egy intervallum operátorral pontos megszorítást tehetünk arra, hogy az előző karakterből mennyinek kell lennie. Például lehet, hogy pontosan 8 darab "a" megkövetelésére van szükségünk, vagy legalább 8 "a"-ra vagy 3 és 5 közötti darabszámú "a"-ra. Egy intervallum operátorral ezek mindegyike megvalósítható. Az alapvető szintaktikája az "{M,N}", ahol M az alsó határ, és N a felső határ. Például 3 és 5 közötti darabszámú "a" egyeztetésére azt írjuk, hogy "a{3,5}". Mindamellett nem kötelező mindkét számot megadni. Ha "a{8}"-at írunk, az azt jelenti, hogy pontosan 8 darab "a"-nak kell lennie. Ezért az "a{8}" megegyezik az "aaaaaaaa"-val. Ahhoz, hogy a "legalább"-os példát valósítsuk meg, alapvetően egy olyan intervallumot adunk meg, aminek csak alsó határa van. Eképpen a legalább 8 "a"-ra azt írjuk, hogy "a{8,}".
<p>
Alapértelmezésben mindegyik ismétlő operátor "mohó". A mohóság egy kissé összetett fogalom. Alapvetően azt jelenti, hogy az operátor annyi karakterre illeszkedik, amennyire csak tud. Ezt a legkönnyebb elmagyarázni egy példával. <p>Mondjuk, van a következő szövegünk:<br>
HELLO<br>
És a következő regexünk:<br>
.+L<p>
Ebben a példában, lehet, hogy azt gondoljuk, hogy a .+ a "HE"-re illeszkedik. Azonban ez helytelen. Mivel a + mohó, a "HEL"-re illeszkedik. Az indok az, hogy a beviteli szöveg legnagyobb egyeztethető részét választja, miközben mégis megengedi a teljes regexnek, hogy illeszkedjen. Ebben a példában azért választotta a "HEL"-t, mert az egyetlen másik követelmény csak az, hogy a ".+"-ra illeszkedő szöveg utáni karakternek "L"-nek kell lennie. Mivel a szöveg "HELLO", a "HEL"-t "L" követi, ezért illeszkedik. Néha viszont jól jön, ha egy operátort nem mohóvá tudunk tenni. Ezt úgy tehetjük meg, hogy "?"-et teszünk az ismétlő operátor után. A fentit módosítva ".+?L"-re, a .+? most már a "HE"-re illeszkedik, mintsem a "HEL"-re, mert nem mohó állapotba helyeztük. A ? bármilyen ismétlő karakter után helyezhető: ??, *?, +?, {M,N}?.</p></div>
Ebben a példában, lehet, hogy azt gondoljuk, hogy a .+ a "HE"-re illeszkedik. Azonban ez helytelen. Mivel a + mohó, a "HEL"-re illeszkedik. Az oka az, hogy a beviteli szöveg legnagyobb egyeztethető részét választja, miközben továbbra is megengedi a teljes regexnek, hogy illeszkedjen. Ebben a példában azért választotta a "HEL"-t, mert az egyetlen másik követelmény csak az, hogy a ".+"-ra illeszkedő karaktersorozat után lévő karakternek "L"-nek kell lennie. Mivel a szöveg "HELLO", a "HEL"-t "L" követi, ezért illeszkedik. Néha viszont jól jön, ha egy operátort nem mohóvá tudunk tenni. Ezt úgy tehetjük meg, hogy egy "?"-et teszünk az ismétlő operátor után. A fentit módosítva ".+?L"-re, a .+? most már a "HE"-re illeszkedik, mintsem a "HEL"-re, mert nem mohó állapotba helyeztük. A ? bármilyen ismétlő karakter után helyezhető: ??, *?, +?, {M,N}?.</p></div>
<p><font size="+2"><b>A.4 Zárójeles kifejezések<a name="regexbracket"></a></b></font></p>
<div class="desc">A zárójeles kifejezések kényelmes módot nyújtanak ahhoz, hogy "vagy" műveletet végezzünk. Például ha azt szeretnénk mondani, hogy "illeszkedjen az a-ra vagy a b-re". A zárójeles kifejezés onnan kapja a nevét, hogy zárójelek ([]) közé tesszük. Az alapvető szintaktikája az, hogy ez a kifejezés magában foglal egy karaktersorozatot. Ezeket a karaktereket majd úgy kezeli, mintha "vagy" lenne közöttük. Például az "[abc]" kifejezés illeszkedik egy "a", egy "b" vagy egy "c" karakterre. Ezért az "a[bd]c" regex illeszkedik az "abc"-re és az "adc"-re, de az "acc"-re nem.
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
Binary file not shown.
BIN
View File
Binary file not shown.
+83 -22
View File
@@ -56,7 +56,9 @@ help Opercmds {
" a specific command.";
" -";
" ==-------------------------oOo-------------------------==";
" ADCHAT GLOBOPS OPERMOTD SPAMFILTER";
" ADCHAT DNS NACHAT SETIDENT";
" ADDMOTD GLINE OPER SHUN";
" ADDOMOTD GLOBOPS OPERMOTD SPAMFILTER";
" CHATOPS GZLINE REHASH SQUIT";
" CHGHOST HTM RESTART TEMPSHUN";
" CHGIDENT KILL RPING TRACE";
@@ -65,8 +67,6 @@ help Opercmds {
" CONNECT LOCOPS SAPART WALLOPS";
" DCCDENY MKPASSWD SDESC ZLINE";
" DIE MODULE SETHOST";
" DNS NACHAT SETIDENT";
" GLINE OPER SHUN";
" ==-------------------------oOo-------------------------==";
};
@@ -79,11 +79,11 @@ help Svscmds {
" a specific command.";
" -";
" ==-------------------------oOo-------------------------==";
" SQLINE SVSKILL SVSNLINE SVSSNO";
" SVS2MODE SVSLUSERS SVSNOOP SVSWATCH";
" SVS2SNO SVSMODE SVSO SWHOIS";
" SVSFLINE SVSMOTD SVSPART UNSQLINE";
" SVSJOIN SVSNICK SVSSILENCE";
" SQLINE SVSKILL SVSNLINE SVSSILENCE";
" SVS2MODE SVSLUSERS SVSNOLAG SVSSNO";
" SVS2SNO SVSMODE SVSNOOP SVSWATCH";
" SVSFLINE SVSMOTD SVSO SWHOIS";
" SVSJOIN SVSNICK SVSPART UNSQLINE";
" ==-------------------------oOo-------------------------==";
};
@@ -127,7 +127,7 @@ help Snomasks {
" 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)."
" 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:";
@@ -159,7 +159,8 @@ help Chmodes {
" a <nickname> = Gives Channel Admin to the user";
" q <nickname> = Gives Owner status to the user";
" -";
" b <nick!ident@host> = Bans the nick!ident@host from the channel [h]";
" b <nick!ident@host> = Bans the nick!ident@host from the channel";
" Extended bantypes (for more info see /HELPOP EXTBANS) [h]";
" c = Block messages containing mIRC color codes [o]";
" e <nick!ident@host> = Overrides a ban for matching users [h]";
" I <nick!ident@host> = Overrides +i for matching users [h]";
@@ -194,6 +195,35 @@ help Chmodes {
" ==------------------------------oOo----------------------------==";
};
help ExtBans {
" Extended bantypes: ";
" -";
" ==-Type--------Name---------------------------Explanation-----------------------==";
" | | People matching these bans can join but are unable to ";
" ~q | Quiet | speak, unless they have +v or higher. ";
" | | Example: ";
" | | +bb ~q:*!*@blah.blah.com ~q:nick*!*@* ";
"-----------------------------------------------------------------------------------";
" | | People matching these bans cannot change nicks, unless ";
" ~n | nickchange | they have +v or higher. ";
" | | Example: ";
" | | +bb ~n:*!*@*.aol.com ~n:nick*!*@* ";
"-----------------------------------------------------------------------------------";
" | | If the user is in this channel then (s)he is unable to ";
" | [prefix] | join. A prefix can also be specified (+/%/@/&/~) which ";
" ~c | channel | means that it will only match if the user has that ";
" | | rights or higher on the specified channel. ";
" | | Example: +b ~c:#lamers, +e ~c:@#trusted ";
"-----------------------------------------------------------------------------------";
" | | If the realname of a user matches this then (s)he is ";
" | | unable to join. ";
" ~r | realname | Example: +b ~r:*Stupid_bot_script* ";
" | | NOTE: an underscore ('_') matches both a space (' ') and";
" | | an underscore ('_'), so this ban would ";
" | | match 'Stupid bot script v1.4'. ";
" ==------------------------------------------------------------------------------==";
};
help Chmodef {
" The +f channel mode provides comprehensive flood protection for a channel.";
" This mode allows you to prevent join, nick change, CTCP, text, and knock";
@@ -207,7 +237,7 @@ help Chmodef {
" ==-----Type-----Name--------Default Action---Other Actions-----==";
" c CTCP +C m, M";
" j Join +i R";
" k Knock +k";
" k Knock +K";
" m Messages +m M";
" n Nickchange +N";
" t Text kick b";
@@ -752,10 +782,10 @@ help Nachat {
};
help Kill {
" Forcefully Disconnects a user from an IRC Server.";
" Forcefully Disconnects users from an IRC Server.";
" IRC Operator only command.";
" -";
" Syntax: KILL <user> <reason>";
" Syntax: KILL <user1>,<user2>,<user3>,... <reason>";
" Example: KILL Jack16 Cloning is not allowed";
};
@@ -1039,7 +1069,7 @@ help Sdesc {
};
help Mkpasswd {
" This command will return a 'hash' of the string that has been specified,"
" This command will return a 'hash' of the string that has been specified,";
" you can use this hash for any encrypted passwords in your configuration file:";
" eg: for oper::password, vhost::password, etc.";
" Available types (in order of 'secureness'):";
@@ -1132,7 +1162,7 @@ help Svskill {
};
help Svsnoop {
" Enables or disables whether Global IRCop functions";
" Enables or disables whether IRCop functions";
" exist on the server in question or not.";
" Must be sent through an U:Lined server.";
" -";
@@ -1226,9 +1256,11 @@ help Svsnline {
" Must be sent through an U:Lined server.";
" The reason must be a single parameter therefore";
" spaces are indicated by _, Unreal will internally";
" translate these to spaces";
" translate these to spaces.";
" -";
" Syntax: SVSNLINE +/- <reason_for_ban> :<realname>";
" Syntax: SVSNLINE + <reason_for_ban> :<realname> (To add a ban)";
" SVSNLINE - :<realname> (To remove a ban)";
" SVSNLINE * (To clear all bans)";
" Example: SVSNLINE + sub7_drone :*sub7*";
};
@@ -1244,18 +1276,18 @@ help Svslusers {
help Svswatch {
" Changes the WATCH list of a user.";
" Must be sent trough an U:Lined server.";
" Must be sent through an U:Lined server.";
" Syntax: SVSWATCH <nick> :<watch parameters>";
" Example: SVSWATCH Blah :+Blih!*@* +Bluh!*@* +Bleh!*@*.com";
};
help Svssilence {
" Changes the SILENCE list of a user.";
" Must be sent trough an U:Lined server.";
" Must be sent through an U:Lined server.";
" In contrast to the SILENCE command, you can add/remove";
" multiple entries in one line.";
" Syntax: SVSSILENCE <nick> :<silence parameters>";
" Example: SILENCE Blah :+*!*@*.com +*!*@*.bla.co.uk";
" Example: SVSSILENCE Blah :+*!*@*.com +*!*@*.bla.co.uk";
};
help Svssno {
@@ -1272,9 +1304,24 @@ help Svs2sno {
" Must be sent through an U:Lined server.";
" -";
" Syntax: SVS2SNO <nickname> <snomasks>";
" Example: SVSSNO joe +Gc";
" Example: SVS2SNO joe +Gc";
};
help Svsnolag {
" Enable 'no fake lag' for a user.";
" Must be sent through an U:Lined server.";
" -";
" Syntax: SVSNOLAG [+|-] <nickname>";
" Example: SVSNOLAG + joe";
};
help Svs2nolag {
" Enable 'no fake lag' for a user.";
" Must be sent through an U:Lined server.";
" -";
" Syntax: SVS2NOLAG [+|-] <nickname>";
" Example: SVS2NOLAG + joe";
};
help Spamfilter {
" This command adds/removes global spam filters.";
@@ -1289,7 +1336,7 @@ help Spamfilter {
" 'kill', 'tempshun' (only shun current session), 'shun',";
" 'kline', 'gline', 'zline', 'gzline', 'block' (blocks the msg),";
" 'dccblock' (unable to send any dccs), 'viruschan' (part all channels";
" and join the virus help chan).";
" and join the virus help chan), 'warn' (warn for IRC Operators).";
" [regex] this is the actual regex where we should block on";
" [tkltime] the duration of the *LINEs placed by action (use '-' to use the default";
" set::spamfilter::ban-time, this value is ignored for block/tempshun');";
@@ -1325,3 +1372,17 @@ help DccAllow {
* stuff quickly gets out-of-synch.
*/
};
help Addmotd {
" Adds a line to the end of the MOTD ";
" -";
" Syntax: ADDMOTD <text>";
" Example: ADDMOTD Play nice!";
};
help Addomotd {
" Adds a line to the end of the OPERMOTD ";
" -";
" Syntax: ADDOMOTD <text>";
" Example: ADDOMOTD Abuse it and lose it!";
};
+53 -40
View File
@@ -112,6 +112,8 @@
/*
* THROTTLING
* This will only allow 1 connection per ip in set::throttle::period time
* NOTE: There's no reason to disable this (anymore) since it can be fully
* configured in the unrealircd.conf. Keep the define...
*/
#define THROTTLING
@@ -139,6 +141,13 @@
*/
#undef JOIN_INSTEAD_OF_SJOIN_ON_REMOTEJOIN
/*
* So called 'smart' banning: if this is enabled and a ban on like *!*@*h.com is present,
* then you cannot add a ban like *!*@*blah.com. In other words.. the ircd tries to be "smart".
* In general this is considered quite annoying. This was on by default until Unreal 3.2.8.
*/
#undef SOCALLEDSMARTBANNING
/*
** Freelinks garbage collector -Stskeeps
**
@@ -214,15 +223,32 @@
/* CHROOTDIR
*
* Define for value added security if you are a rooter.
* This enables running the IRCd chrooted (requires initial root privileges,
* but will be dropped to IRC_USER/IRC_GROUP privileges if those are defined).
*
* All files you access must be in the directory you define as DPATH.
* The directory to chroot to is simply DPATH (which is set via ./Config).
* (This may effect the PATH locations above, though you can symlink it)
*
* You may want to define IRC_UID and IRC_GID
* Usually you only simply need to enable this, and set IRC_USER and
* IRC_GROUP, you don't need to create a special chroot environment..
* UnrealIRCd will do that by itself (Unreal will create /dev/random,
* etc. etc.).
*
* Change to '#define CHROOTDIR' to enable...
*/
/* #define CHROOTDIR */
/*
* IRC_USER
*
* If you start the server as root but wish to have it run as another user,
* define IRC_USER to that user name. This should only be defined if you
* are running as root and even then perhaps not.
*/
/* #define IRC_USER "<user name>" */
/* #define IRC_GROUP "<group name>" */
/* SHOW_INVISIBLE_LUSERS
*
* As defined this will show the correct invisible count for anyone who does
@@ -281,19 +307,6 @@
#define BUFFERPOOL (18 * MAXSENDQLENGTH)
#endif
/*
* IRC_UID
*
* If you start the server as root but wish to have it run as another user,
* define IRC_UID to that UID. This should only be defined if you are running
* as root and even then perhaps not.
* use #define IRC_UID <uid>
* and #define IRC_GID <gid>
*/
#undef IRC_UID
#undef IRC_GID
/*
* CLIENT_FLOOD
*
@@ -311,17 +324,13 @@
#define NO_FLOOD_AWAY
/*
* Define your network service names here.
/* You can define the nickname of NickServ here (usually "NickServ").
* This is ONLY used for the ""infamous IDENTIFY feature"", which is:
* whenever a user connects with a server password but there isn't
* a server password set, the password is sent to NickServ in an
* 'IDENTIFY <pass>' message.
*/
#define ChanServ "ChanServ"
#define MemoServ "MemoServ"
#define NickServ "NickServ"
#define OperServ "OperServ"
#define HelpServ "HelpServ"
#define StatServ "StatServ"
#define InfoServ "InfoServ"
#define BotServ "BotServ"
/*
* How many open targets can one nick have for messaging nicks and
@@ -358,7 +367,7 @@
* 8MB or less core memory : 500 (at least 1/4 of max users)
* 8MB-16MB core memory : 500-750 (1/4 -> 1/2 of max users)
* 16MB-32MB core memory : 750-1000 (1/2 -> 3/4 of max users)
* 32MB or more core memory : 1000+ (> 3/4 if max users)
* 32MB or more core memory : 1000+ (> 3/4 of max users)
* where max users is the expected maximum number of users.
* (100 nicks/users ~ 25k)
* NOTE: this is directly related to the amount of memory ircd will use whilst
@@ -373,12 +382,13 @@
/*
* Time interval to wait and if no messages have been received, then check for
* PINGFREQUENCY and CONNECTFREQUENCY
* pings, outgoing connects, events, and a couple of other things.
* Imo this is quite useless nowdays, it only saves _some_ cpu on tiny networks
* with like 10 users all of them being inactive. On a normal network with >30
* users this value is completely irrelevant.
* The original value here was 60 (which was [hopefuly] never reached and was
* stupid anyway), changed to 2.
* DO NOT SET THIS TO ANYTHING MORE THAN 5. BETTER YET, JUST LEAVE IT AT 2!
*/
#define TIMESEC 2
@@ -387,15 +397,10 @@
* PINGFREQUENCY seconds, then the server will attempt to check for
* an active link with a PING message. If no reply is received within
* (PINGFREQUENCY * 2) seconds, then the connection will be closed.
* NOTE: This is simply the class::pingfreq for the default class, nothing fancy ;)
*/
#define PINGFREQUENCY 120 /* Recommended value: 120 */
/*
* If the connection to to uphost is down, then attempt to reconnect every
* CONNECTFREQUENCY seconds.
*/
#define CONNECTFREQUENCY 600 /* Recommended value: 600 */
/*
* Often net breaks for a short time and it's useful to try to
* establishing the same connection again faster than CONNECTFREQUENCY
@@ -429,16 +434,10 @@
/*
* Use much faster badwords replace routine (>100 times faster).
* Disabling this is not supported.
*/
#define FAST_BADWORD_REPLACE
/*
* Only important for people using IPv6 (default should be ok for now) -Onliner
* Because ip6.arpa is still not delegated for the 6bone (3ffe::/16)
* this options allows you to still resolve it using ip6.int.
*/
#define SIXBONE_HACK
/*
* Forces Unreal to use compressed IPv6 addresses rather than expanding them
*/
@@ -464,6 +463,16 @@
*/
#define JOINTHROTTLE
/* Detect slow spamfilters? This requires a little more cpu time when processing
* any spamfilter (like on text/connect/..) but will save you from slowing down
* your IRCd to a near-halt (well, in most cases.. there are still cases like when
* it goes into a loop that it will still stall completely... forever..).
* This is kinda experimental, and requires getrusage.
*/
#ifndef _WIN32
#define SPAMFILTER_DETECTSLOW
#endif
/* ------------------------- END CONFIGURATION SECTION -------------------- */
#define MOTD MPATH
#define RULES RPATH
@@ -471,6 +480,10 @@
#define CONFIGFILE CPATH
#define IRCD_PIDFILE PPATH
#if defined(CHROOTDIR) && !defined(IRC_USER)
#error "ERROR: It makes no sense to define CHROOTDIR but not IRC_USER and IRC_GROUP! Please define IRC_USER and IRC_GROUP properly as the user/group to change to."
#endif
#ifdef __osf__
#define OSF
/* OSF defines BSD to be its version of BSD */
+48 -3
View File
@@ -81,7 +81,8 @@ struct zConfiguration {
unsigned use_ban_version:1;
unsigned mkpasswd_for_everyone:1;
unsigned allow_part_if_shunned:1;
unsigned use_egd;
unsigned check_target_nick_bans:1;
unsigned use_egd : 1;
long host_timeout;
int host_retries;
char *name_server;
@@ -109,11 +110,16 @@ struct zConfiguration {
#ifdef USE_SSL
char *x_server_cert_pem;
char *x_server_key_pem;
char *x_server_cipher_list;
char *trusted_ca_file;
long ssl_options;
int ssl_renegotiate_bytes;
int ssl_renegotiate_timeout;
#elif defined(_WIN32)
void *bogus1, *bogus2, *bogus3;
void *bogus1, *bogus2, *bogus3, *bogus5;
long bogus4;
int bogus6, bogus7;
#endif
enum UHAllowed userhost_allowed;
char *restrict_usermodes;
@@ -123,6 +129,7 @@ struct zConfiguration {
long unknown_flood_bantime;
long unknown_flood_amount;
struct ChMode modes_on_join;
int level_on_join;
#ifdef NO_FLOOD_AWAY
unsigned char away_count;
long away_period;
@@ -145,6 +152,15 @@ struct zConfiguration {
char spamfilter_vchan_deny;
SpamExcept *spamexcept;
char *spamexcept_line;
long spamfilter_detectslow_warn;
long spamfilter_detectslow_fatal;
int maxbans;
int maxbanlength;
int timesynch_enabled;
int timesynch_timeout;
char *timesynch_server;
int pingpong_warning;
int watch_away_notification;
aNetwork network;
};
@@ -214,6 +230,7 @@ extern MODVAR aConfiguration iConf;
#define UNKNOWN_FLOOD_BANTIME iConf.unknown_flood_bantime
#define UNKNOWN_FLOOD_AMOUNT iConf.unknown_flood_amount
#define MODES_ON_JOIN iConf.modes_on_join.mode
#define LEVEL_ON_JOIN iConf.level_on_join
#ifdef NO_FLOOD_AWAY
#define AWAY_PERIOD iConf.away_period
@@ -246,8 +263,23 @@ extern MODVAR aConfiguration iConf;
#define SPAMFILTER_VIRUSCHAN iConf.spamfilter_virus_help_channel
#define SPAMFILTER_VIRUSCHANDENY iConf.spamfilter_vchan_deny
#define SPAMFILTER_EXCEPT iConf.spamexcept_line
#define SPAMFILTER_DETECTSLOW_WARN iConf.spamfilter_detectslow_warn
#define SPAMFILTER_DETECTSLOW_FATAL iConf.spamfilter_detectslow_fatal
/* Used for duplicate checking */
#define CHECK_TARGET_NICK_BANS iConf.check_target_nick_bans
#define MAXBANS iConf.maxbans
#define MAXBANLENGTH iConf.maxbanlength
#define TIMESYNCH iConf.timesynch_enabled
#define TIMESYNCH_TIMEOUT iConf.timesynch_timeout
#define TIMESYNCH_SERVER iConf.timesynch_server
#define PINGPONG_WARNING iConf.pingpong_warning
#define WATCH_AWAY_NOTIFICATION iConf.watch_away_notification
/* Used for "is present?" and duplicate checking */
struct SetCheck {
unsigned has_show_opermotd:1;
unsigned has_hide_ulines:1;
@@ -262,9 +294,11 @@ struct SetCheck {
unsigned has_mkpasswd_for_everyone:1;
unsigned has_allow_part_if_shunned:1;
unsigned has_ssl_egd:1;
unsigned has_ssl_server_cipher_list :1;
unsigned has_dns_timeout:1;
unsigned has_dns_retries:1;
unsigned has_dns_nameserver:1;
unsigned has_dns_bind_ip:1;
#ifdef THROTTLING
unsigned has_throttle_period:1;
unsigned has_throttle_connections:1;
@@ -277,6 +311,9 @@ struct SetCheck {
unsigned has_snomask_on_oper:1;
unsigned has_auto_join:1;
unsigned has_oper_auto_join:1;
unsigned has_check_target_nick_bans:1;
unsigned has_pingpong_warning:1;
unsigned has_watch_away_notification:1;
unsigned has_oper_only_stats:1;
unsigned has_maxchannelsperuser:1;
unsigned has_maxdccallow:1;
@@ -289,6 +326,8 @@ struct SetCheck {
unsigned has_ssl_key:1;
unsigned has_ssl_trusted_ca_file:1;
unsigned has_ssl_options:1;
unsigned has_renegotiate_timeout : 1;
unsigned has_renegotiate_bytes : 1;
#endif
unsigned has_allow_userhost_change:1;
unsigned has_restrict_usermodes:1;
@@ -298,6 +337,7 @@ struct SetCheck {
unsigned has_anti_flood_unknown_flood_bantime:1;
unsigned has_anti_flood_unknown_flood_amount:1;
unsigned has_modes_on_join:1;
unsigned has_level_on_join:1;
#ifdef NO_FLOOD_AWAY
unsigned has_anti_flood_away_count:1;
unsigned has_anti_flood_away_period:1;
@@ -307,6 +347,8 @@ struct SetCheck {
unsigned has_ident_read_timeout:1;
unsigned has_default_bantime:1;
unsigned has_who_limit:1;
unsigned has_maxbans:1;
unsigned has_maxbanlength:1;
unsigned has_silence_limit:1;
#ifdef NEWCHFLOODPROT
unsigned has_modef_default_unsettime:1;
@@ -343,6 +385,9 @@ struct SetCheck {
unsigned has_options_show_connect_info:1;
unsigned has_options_mkpasswd_for_everyone:1;
unsigned has_options_allow_part_if_shunned:1;
int cgiirc_type; /* cheat :( */
unsigned has_cgiirc_hosts:1;
unsigned has_cgiirc_webpass:1;
};
+38 -22
View File
@@ -112,6 +112,8 @@ extern void module_loadall(int module_load);
extern long set_usermode(char *umode);
extern char *get_modestr(long umodes);
extern void config_error(char *format, ...) __attribute__((format(printf,1,2)));
extern void config_warn(char *format, ...) __attribute__((format(printf,1,2)));
extern MODVAR int config_verbose;
extern void config_progress(char *format, ...) __attribute__((format(printf,1,2)));
extern void ipport_seperate(char *string, char **ip, char **port);
@@ -123,6 +125,7 @@ ConfigItem_ulines *Find_uline(char *host);
ConfigItem_except *Find_except(aClient *, char *host, short type);
ConfigItem_tld *Find_tld(aClient *cptr, char *host);
ConfigItem_link *Find_link(char *username, char *hostname, char *ip, char *servername);
ConfigItem_cgiirc *Find_cgiirc(char *username, char *hostname, char *ip, CGIIRCType type);
ConfigItem_ban *Find_ban(aClient *, char *host, short type);
ConfigItem_ban *Find_banEx(aClient *,char *host, short type, short type2);
ConfigItem_vhost *Find_vhost(char *name);
@@ -188,6 +191,7 @@ extern int is_chan_op(aClient *, aChannel *);
extern int has_voice(aClient *, aChannel *);
extern int is_chanowner(aClient *, aChannel *);
extern Ban *is_banned(aClient *, aChannel *, int);
extern Ban *is_banned_with_nick(aClient *, aChannel *, int, char *);
extern int parse_help(aClient *, char *, char *);
extern void ircd_log(int, char *, ...) __attribute__((format(printf,2,3)));
@@ -215,11 +219,11 @@ extern MODFUNC char *sock_strerror(int);
extern int dgets(int, char *, int);
extern char *inetntoa(char *);
#if !defined(HAVE_SNPRINTF) || !defined(HAVE_VSNPRINTF)
/* #ifndef _WIN32 XXX why was this?? -- Syzop. */
#ifndef HAVE_SNPRINTF
extern int snprintf (char *str, size_t count, const char *fmt, ...);
#endif
#ifndef HAVE_VSNPRINTF
extern int vsnprintf (char *str, size_t count, const char *fmt, va_list arg);
/* #endif */
#endif
#ifdef _WIN32
@@ -263,15 +267,12 @@ extern void send_authports(aClient *);
extern void restart(char *);
extern void send_channel_modes(aClient *, aChannel *);
extern void server_reboot(char *);
extern void terminate(), write_pidfile();
extern void *MyMallocEx(size_t size);
extern int advanced_check(char *userhost, int ipstat);
extern int send_queued(aClient *);
/* i know this is naughty but :P --stskeeps */
extern void send_channel_modes_sjoin(aClient *cptr, aChannel *chptr);
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,
@@ -321,14 +322,7 @@ extern MODVAR int writecalls, writeb[];
extern int deliver_it(aClient *, char *, int);
extern int check_for_chan_flood(aClient *cptr, aClient *sptr, aChannel *chptr);
extern int check_for_target_limit(aClient *sptr, void *target, const char *name);
extern char *stripbadwords_message(char *str, int *);
extern char *stripbadwords_channel(char *str, int *);
extern char *stripbadwords_quit(char *str, int *);
extern char *stripbadwords(char *, ConfigItem_badword *, int *);
extern unsigned char *StripColors(unsigned char *);
extern const char *StripControlCodes(unsigned char *text);
extern char *canonize(char *buffer);
extern int webtv_parse(aClient *sptr, char *string);
extern ConfigItem_deny_dcc *dcc_isforbidden(aClient *sptr, char *filename);
extern ConfigItem_deny_dcc *dcc_isdiscouraged(aClient *sptr, char *filename);
extern int check_registered(aClient *);
@@ -340,6 +334,7 @@ extern int exit_client(aClient *, aClient *, aClient *, char *);
extern void initstats(), tstats(aClient *, char *);
extern char *check_string(char *);
extern char *make_nick_user_host(char *, char *, char *);
extern inline char *make_nick_user_host_r(char *namebuf, char *nick, char *name, char *host);
extern char *make_user_host(char *, char *);
extern int parse(aClient *, char *, char *);
extern int do_numeric(int, aClient *, aClient *, int, char **);
@@ -347,7 +342,6 @@ extern int hunt_server(aClient *, aClient *, char *, int, int, char **);
extern int hunt_server_token(aClient *, aClient *, char *, char *, char *, int, int, char **);
extern int hunt_server_token_quiet(aClient *, aClient *, char *, char *, char *, int, int, char **);
extern aClient *next_client(aClient *, char *);
extern int m_names(aClient *, aClient *, int, char **);
extern int m_server_estab(aClient *);
extern void umode_init(void);
extern long umode_get(char, int, int (*)(aClient *, int));
@@ -385,7 +379,7 @@ extern struct hostent *get_res(char *);
extern struct hostent *gethost_byaddr(char *, Link *);
extern struct hostent *gethost_byname(char *, Link *);
extern void flush_cache();
extern void init_resolver(void);
extern void init_resolver(int firsttime);
extern time_t timeout_query_list(time_t);
extern time_t expire_cache(time_t);
extern void del_queries(char *);
@@ -397,7 +391,7 @@ extern int add_to_client_hash_table(char *, aClient *);
extern int del_from_client_hash_table(char *, aClient *);
extern int add_to_channel_hash_table(char *, aChannel *);
extern int del_from_channel_hash_table(char *, aChannel *);
extern int add_to_watch_hash_table(char *, aClient *);
extern int add_to_watch_hash_table(char *, aClient *, int);
extern int del_from_watch_hash_table(char *, aClient *);
extern int hash_check_watch(aClient *, int);
extern int hash_del_watch_list(aClient *);
@@ -485,7 +479,6 @@ extern int dopacket(aClient *, char *, int);
extern void debug(int, char *, ...);
#if defined(DEBUGMODE)
extern void send_usage(aClient *, char *);
extern void send_listinfo(aClient *, char *);
extern void count_memory(aClient *, char *);
extern int checkprotoflags(aClient *, int, char *, int);
#endif
@@ -550,10 +543,9 @@ extern aClient *find_server_b64_or_real(char *name);
extern aClient *find_server_by_base64(char *b64);
extern int is_chanownprotop(aClient *cptr, aChannel *chptr);
extern int is_skochanop(aClient *cptr, aChannel *chptr);
extern char *make_virthost(char *curr, char *new, int mode);
extern char *make_virthost(aClient *sptr, char *curr, char *new, int mode);
extern int channel_canjoin(aClient *sptr, char *name);
extern char *collapse(char *pattern);
extern void send_list(aClient *cptr, int numsend);
extern void dcc_sync(aClient *sptr);
extern void report_flines(aClient *sptr);
extern void report_network(aClient *sptr);
@@ -729,14 +721,24 @@ extern MODVAR aTKline *(*tkl_expire)(aTKline * tmp);
extern MODVAR EVENT((*tkl_check_expire));
extern MODVAR int (*find_tkline_match)(aClient *cptr, int xx);
extern MODVAR int (*find_shun)(aClient *cptr);
extern MODVAR int (*find_spamfilter_user)(aClient *sptr);
extern MODVAR int (*find_spamfilter_user)(aClient *sptr, int flags);
extern MODVAR aTKline *(*find_qline)(aClient *cptr, char *nick, int *ishold);
extern MODVAR int (*find_tkline_match_zap)(aClient *cptr);
extern MODVAR int (*find_tkline_match_zap_ex)(aClient *cptr, aTKline **rettk);
extern MODVAR void (*tkl_stats)(aClient *cptr, int type, char *para);
extern MODVAR void (*tkl_synch)(aClient *sptr);
extern MODVAR int (*m_tkl)(aClient *cptr, aClient *sptr, int parc, char *parv[]);
extern MODVAR int (*place_host_ban)(aClient *sptr, int action, char *reason, long duration);
extern MODVAR int (*dospamfilter)(aClient *sptr, char *str_in, int type, char *target);
extern MODVAR int (*dospamfilter)(aClient *sptr, char *str_in, int type, char *target, int flags, aTKline **rettk);
extern MODVAR int (*dospamfilter_viruschan)(aClient *sptr, aTKline *tk, int type);
extern MODVAR void (*send_list)(aClient *cptr, int numsend);
extern MODVAR char *(*stripbadwords_channel)(char *str, int *blocked);
extern MODVAR char *(*stripbadwords_message)(char *str, int *blocked);
extern MODVAR char *(*stripbadwords_quit)(char *str, int *blocked);
extern MODVAR unsigned char *(*StripColors)(unsigned char *text);
extern MODVAR const char *(*StripControlCodes)(unsigned char *text);
extern MODVAR void (*spamfilter_build_user_string)(char *buf, char *nick, aClient *acptr);
extern MODVAR int (*is_silenced)(aClient *sptr, aClient *acptr);
/* /Efuncs */
extern MODVAR aMotd *opermotd, *svsmotd, *motd, *botmotd, *smotd;
extern MODVAR int max_connection_count;
@@ -761,10 +763,24 @@ extern void charsys_addallowed(char *s);
extern void charsys_reset(void);
extern MODVAR char langsinuse[4096];
extern MODVAR aTKline *tklines[TKLISTLEN];
extern char *cmdname_by_spamftarget(int target);
extern int isipv6(struct IN_ADDR *addr);
extern void inet4_to_inet6(const void *src_in, void *dst_in);
extern void unrealdns_delreq_bycptr(aClient *cptr);
extern void inet6_to_inet4(const void *src, void *dst);
extern void sendtxtnumeric(aClient *to, char *pattern, ...);
extern void sendtxtnumeric(aClient *to, char *pattern, ...) __attribute__((format(printf,2,3)));;
extern void unrealdns_gethostbyname_link(char *name, ConfigItem_link *conf);
extern void unrealdns_delasyncconnects(void);
extern int is_autojoin_chan(char *chname);
extern void unreal_free_hostent(struct hostent *he);
extern int match_esc(const char *mask, const char *name);
extern int iplist_onlist(IPList *iplist, char *ip);
extern struct hostent *unreal_create_hostent(char *name, struct IN_ADDR *addr);
extern char *unreal_time_synch_error(void);
extern int unreal_time_synch(int timeout);
extern int extban_is_banned_helper(char *buf);
extern char *getcloak(aClient *sptr);
extern void kick_insecure_users(aChannel *);
extern int file_exists(char* file);
extern void free_motd(aMotd *m);
extern void fix_timers(void);
+4
View File
@@ -57,3 +57,7 @@ extern __u_l inet_network();
extern __u_l inet_lnaof();
#endif
#undef __u_l
#ifndef INADDR_NONE
#define INADDR_NONE 0xffffffff
#endif
+29
View File
@@ -110,6 +110,7 @@ typedef struct {
#define MOBJ_CALLBACK 0x0200
#define MOBJ_ISUPPORT 0x0400
#define MOBJ_EFUNCTION 0x0800
#define MOBJ_CMODE 0x1000
typedef struct {
long mode;
@@ -222,6 +223,17 @@ typedef struct {
* aExtCMtableParam *: their parameter
*/
int (*sjoin_check)(aChannel *, CmodeParam *, CmodeParam *);
/** Is this mode being unloaded?
* This is set to 1 if the chanmode module providing this mode is unloaded
* and we are waiting to see if in our new round of loads a "new" chanmode
* module will popup to take this mode. This only happens during a rehash,
* should never be 0 outside an internal rehash.
*/
char unloaded;
/** Module owner */
Module *owner;
} Cmode;
typedef struct {
@@ -334,6 +346,7 @@ typedef struct _ModuleObject {
Callback *callback;
Efunction *efunction;
Isupport *isupport;
Cmode *cmode;
} object;
} ModuleObject;
@@ -420,6 +433,7 @@ struct _Module
unsigned char errorcode;
char *tmp_file;
unsigned long mod_sys_version;
unsigned int compiler_version;
};
/*
* Symbol table
@@ -635,6 +649,10 @@ int CallCmdoverride(Cmdoverride *ovr, aClient *cptr, aClient *sptr, int parc, ch
#define HOOKTYPE_REMOTE_PART 44
#define HOOKTYPE_REMOTE_KICK 45
#define HOOKTYPE_LOCAL_SPAMFILTER 46
#define HOOKTYPE_SILENCED 47
#define HOOKTYPE_POST_SERVER_CONNECT 48
#define HOOKTYPE_RAWPACKET_IN 49
#define HOOKTYPE_LOCAL_NICKPASS 50
/* Hook return values */
#define HOOK_CONTINUE 0
@@ -644,6 +662,7 @@ int CallCmdoverride(Cmdoverride *ovr, aClient *cptr, aClient *sptr, int parc, ch
/* Callback types */
#define CALLBACKTYPE_CLOAK 1
#define CALLBACKTYPE_CLOAKKEYCSUM 2
#define CALLBACKTYPE_CLOAK_EX 3
/* Efunction types */
#define EFUNC_DO_JOIN 1
@@ -670,6 +689,16 @@ int CallCmdoverride(Cmdoverride *ovr, aClient *cptr, aClient *sptr, int parc, ch
#define EFUNC_M_TKL 22
#define EFUNC_PLACE_HOST_BAN 23
#define EFUNC_DOSPAMFILTER 24
#define EFUNC_DOSPAMFILTER_VIRUSCHAN 25
#define EFUNC_FIND_TKLINE_MATCH_ZAP_EX 26
#define EFUNC_SEND_LIST 27
#define EFUNC_STRIPBADWORDS_CHANNEL 28
#define EFUNC_STRIPBADWORDS_MESSAGE 29
#define EFUNC_STRIPBADWORDS_QUIT 30
#define EFUNC_STRIPCOLORS 31
#define EFUNC_STRIPCONTROLCODES 32
#define EFUNC_SPAMFILTER_BUILD_USER_STRING 33
#define EFUNC_IS_SILENCED 34
/* Module flags */
#define MODFLAG_NONE 0x0000
+18 -5
View File
@@ -80,12 +80,25 @@
#define MYTOKEN_INET6 ""
#endif
#ifdef UNREALCORE
char our_mod_version[] = BASE_VERSION PATCH1 PATCH2 PATCH3 PATCH4 PATCH5 PATCH6 PATCH7 PATCH8 PATCH9 \
MYTOKEN_SSL MYTOKEN_ZIP MYTOKEN_NOSPOOF MYTOKEN_EXTCMODE MYTOKEN_JOINTHROTTLE \
MYTOKEN_NOFLDAWAY MYTOKEN_NEWCHF MYTOKEN_INET6;
#ifdef __GNUC__
#if defined(__GNUC_PATCHLEVEL__)
#define GCCVER ((__GNUC__ << 16) + (__GNUC_MINOR__ << 8) + __GNUC_PATCHLEVEL__)
#else
#define GCCVER ((__GNUC__ << 16) + (__GNUC_MINOR__ << 8))
#endif
#else
DLLFUNC char Mod_Version[] = BASE_VERSION PATCH1 PATCH2 PATCH3 PATCH4 PATCH5 PATCH6 PATCH7 PATCH8 PATCH9 \
#define GCCVER 0
#endif
#ifdef UNREALCORE
char our_mod_version[] = BASE_VERSION PATCH1 PATCH2 PATCH3 PATCH4 PATCH6 PATCH7 PATCH8 PATCH9 \
MYTOKEN_SSL MYTOKEN_ZIP MYTOKEN_NOSPOOF MYTOKEN_EXTCMODE MYTOKEN_JOINTHROTTLE \
MYTOKEN_NOFLDAWAY MYTOKEN_NEWCHF MYTOKEN_INET6;
unsigned int our_compiler_version = GCCVER;
#else
DLLFUNC char Mod_Version[] = BASE_VERSION PATCH1 PATCH2 PATCH3 PATCH4 PATCH6 PATCH7 PATCH8 PATCH9 \
MYTOKEN_SSL MYTOKEN_ZIP MYTOKEN_NOSPOOF MYTOKEN_EXTCMODE MYTOKEN_JOINTHROTTLE \
MYTOKEN_NOFLDAWAY MYTOKEN_NEWCHF MYTOKEN_INET6;
DLLFUNC unsigned int compiler_version = GCCVER;
#endif
-2
View File
@@ -303,8 +303,6 @@ extern int m_error();
extern int m_dns();
extern int m_info(), m_summon();
extern int m_users(), m_version();
extern int m_names();
extern int m_service();
extern int m_dalinfo();
extern int m_credits();
extern int m_license();
+7
View File
@@ -336,6 +336,9 @@
* These are also in the range 600-799.
*/
#define RPL_REAWAY 597
#define RPL_GONEAWAY 598
#define RPL_NOTAWAY 599
#define RPL_LOGON 600
#define RPL_LOGOFF 601
#define RPL_WATCHOFF 602
@@ -344,6 +347,8 @@
#define RPL_NOWOFF 605
#define RPL_WATCHLIST 606
#define RPL_ENDOFWATCHLIST 607
#define RPL_CLEARWATCH 608
#define RPL_NOWISAWAY 609
#define RPL_DCCSTATUS 617
#define RPL_DCCLIST 618
@@ -354,6 +359,8 @@
#define RPL_DUMPRPL 641
#define RPL_EODUMP 642
#define RPL_SPAMCMDFWD 659
#define RPL_WHOISSECURE 671
#define ERR_CANNOTDOCOMMAND 972
+1 -1
View File
@@ -77,6 +77,6 @@ struct _dnsstats {
extern ares_channel resolver_channel;
extern void init_resolver(void);
extern void init_resolver(int);
struct hostent *unrealdns_doclient(aClient *cptr);
-3
View File
@@ -186,9 +186,6 @@
/* Local hostname of the server */
#undef DOMAINNAME
/* The OS name and version of the server */
#undef MYOSNAME
/* The default permissions for configuration files */
#undef DEFAULT_PERMISSIONS
+3
View File
@@ -23,6 +23,9 @@
* $Id$
*
* $Log$
* Revision 1.1.1.1.6.1.2.1 2000/07/14 20:22:57 stskeeps
* +- Indentation and more SJ3 fixes
*
* Revision 1.1.1.1.6.1 2000/05/28 08:55:24 cmunk
* Import of Unreal3.1-beta3
*
+60 -12
View File
@@ -109,6 +109,7 @@ typedef struct _configitem_allow_dcc ConfigItem_allow_dcc;
typedef struct _configitem_vhost ConfigItem_vhost;
typedef struct _configitem_except ConfigItem_except;
typedef struct _configitem_link ConfigItem_link;
typedef struct _configitem_cgiirc ConfigItem_cgiirc;
typedef struct _configitem_ban ConfigItem_ban;
typedef struct _configitem_badword ConfigItem_badword;
typedef struct _configitem_deny_dcc ConfigItem_deny_dcc;
@@ -171,14 +172,12 @@ typedef unsigned int u_int32_t; /* XXX Hope this works! */
#define REALLEN 50
#define TOPICLEN 307
#define CHANNELLEN 32
#define PASSWDLEN 32 /* orig. 20, changed to 32 for nickpasswords */
#define PASSWDLEN 48 /* was 20, then 32, now 48. */
#define KEYLEN 23
#define LINKLEN 32
#define BUFSIZE 512 /* WARNING: *DONT* CHANGE THIS!!!! */
#define MAXRECIPIENTS 20
#define MAXKILLS 20
#define MAXBANS 60
#define MAXBANLENGTH 1024
#define MAXSILELENGTH NICKLEN+USERLEN+HOSTLEN+10
#define UMODETABLESZ (sizeof(long) * 8)
/*
@@ -290,6 +289,8 @@ typedef unsigned int u_int32_t; /* XXX Hope this works! */
#define OPT_NOT_TKLEXT 0x8000
#define OPT_NICKIP 0x10000
#define OPT_NOT_NICKIP 0x20000
#define OPT_CLK 0x10000
#define OPT_NOT_CLK 0x20000
/* client->flags (32 bits): 28 used, 4 free */
#define FLAGS_PINGSENT 0x0001 /* Unreplied ping sent */
@@ -307,7 +308,7 @@ typedef unsigned int u_int32_t; /* XXX Hope this works! */
#define FLAGS_GOTID 0x1000 /* successful ident lookup achieved */
#define FLAGS_DOID 0x2000 /* I-lines say must use ident return */
#define FLAGS_NONL 0x4000 /* No \n in buffer */
#define FLAGS_TS8 0x8000 /* Why do you want to know? */
#define FLAGS_CGIIRC 0x8000 /* CGI IRC host: flag set = ip/host data has been filled in already */
#define FLAGS_ULINE 0x10000 /* User/server is considered U-lined */
#define FLAGS_SQUIT 0x20000 /* Server has been /squit by an oper */
#define FLAGS_PROTOCTL 0x40000 /* Received a PROTOCTL message */
@@ -325,7 +326,7 @@ typedef unsigned int u_int32_t; /* XXX Hope this works! */
#ifdef USE_SSL
#define FLAGS_SSL 0x10000000
#endif
#define FLAGS_UNOCCUP4 0x20000000 /* [FREE] */
#define FLAGS_NOFAKELAG 0x20000000 /* Exception from fake lag */
#define FLAGS_DCCBLOCK 0x40000000 /* Block all DCC send requests */
#define FLAGS_MAP 0x80000000 /* Show this entry in /map */
/* Dec 26th, 1997 - added flags2 when I ran out of room in flags -DuffJ */
@@ -358,8 +359,9 @@ typedef unsigned int u_int32_t; /* XXX Hope this works! */
#define PROTO_SJB64 0x0800
#define PROTO_TKLEXT 0x1000 /* TKL extension: 10 parameters instead of 8 (3.2RC2) */
#define PROTO_NICKIP 0x2000 /* Send IP addresses in the NICK command */
/* note: client->proto is currently a 'short' (max is 0x8000) */
#define PROTO_NAMESX 0x4000 /* Send all rights in NAMES output */
#define PROTO_CLK 0x8000 /* Send cloaked host in the NICK command (regardless of +x/-x) */
#define PROTO_UHNAMES 0x10000 /* Send n!u@h in NAMES */
/*
* flags macros.
@@ -405,14 +407,14 @@ typedef unsigned int u_int32_t; /* XXX Hope this works! */
#define IsOutgoing(x) ((x)->flags & FLAGS_OUTGOING)
#define GotNetInfo(x) ((x)->flags & FLAGS_NETINFO)
#define SetNetInfo(x) ((x)->flags |= FLAGS_NETINFO)
#define IsCGIIRC(x) ((x)->flags & FLAGS_CGIIRC)
#define IsShunned(x) ((x)->flags & FLAGS_SHUNNED)
#define SetShunned(x) ((x)->flags |= FLAGS_SHUNNED)
#define ClearShunned(x) ((x)->flags &= ~FLAGS_SHUNNED)
#define IsVirus(x) ((x)->flags & FLAGS_VIRUS)
#define SetVirus(x) ((x)->flags |= FLAGS_VIRUS)
#define ClearVirus(x) ((x)->flags |= FLAGS_VIRUS)
#define ClearVirus(x) ((x)->flags &= ~FLAGS_VIRUS)
#ifdef USE_SSL
#define IsSecure(x) ((x)->flags & FLAGS_SSL)
#else
@@ -427,10 +429,16 @@ typedef unsigned int u_int32_t; /* XXX Hope this works! */
#define IsZipStart(x) (0)
#endif
/* Fake lag exception */
#define IsNoFakeLag(x) ((x)->flags & FLAGS_NOFAKELAG)
#define SetNoFakeLag(x) ((x)->flags |= FLAGS_NOFAKELAG)
#define ClearNoFakeLag(x) ((x)->flags &= ~FLAGS_NOFAKELAG)
#define IsHybNotice(x) ((x)->flags & FLAGS_HYBNOTICE)
#define SetHybNotice(x) ((x)->flags |= FLAGS_HYBNOTICE)
#define ClearHybNotice(x) ((x)->flags &= ~FLAGS_HYBNOTICE)
#define IsHidden(x) ((x)->umodes & UMODE_HIDE)
#define IsSetHost(x) ((x)->umodes & UMODE_SETHOST)
#define IsHideOper(x) ((x)->umodes & UMODE_HIDEOPER)
#ifdef USE_SSL
#define IsSSL(x) IsSecure(x)
@@ -462,6 +470,7 @@ typedef unsigned int u_int32_t; /* XXX Hope this works! */
#define SetAccess(x) ((x)->flags |= FLAGS_CHKACCESS); Debug((DEBUG_DEBUG, "SetAccess(%s)", (x)->name))
#define SetBlocked(x) ((x)->flags |= FLAGS_BLOCKED)
#define SetOutgoing(x) do { x->flags |= FLAGS_OUTGOING; } while(0)
#define SetCGIIRC(x) do { x->flags |= FLAGS_CGIIRC; } while(0)
#define DoingAuth(x) ((x)->flags & FLAGS_AUTH)
#define NoNewLine(x) ((x)->flags & FLAGS_NONL)
#define IsDCCNotice(x) ((x)->flags & FLAGS_DCCNOTICE)
@@ -517,6 +526,9 @@ typedef unsigned int u_int32_t; /* XXX Hope this works! */
#define SupportSJ3(x) (CHECKPROTO(x, PROTO_SJ3))
#define SupportVHP(x) (CHECKPROTO(x, PROTO_VHP))
#define SupportTKLEXT(x) (CHECKPROTO(x, PROTO_TKLEXT))
#define SupportNAMESX(x) (CHECKPROTO(x, PROTO_NAMESX))
#define SupportCLK(x) (CHECKPROTO(x, PROTO_CLK))
#define SupportUHNAMES(x) (CHECKPROTO(x, PROTO_UHNAMES))
#define SetSJOIN(x) ((x)->proto |= PROTO_SJOIN)
#define SetNoQuit(x) ((x)->proto |= PROTO_NOQUIT)
@@ -529,6 +541,9 @@ typedef unsigned int u_int32_t; /* XXX Hope this works! */
#define SetSJ3(x) ((x)->proto |= PROTO_SJ3)
#define SetVHP(x) ((x)->proto |= PROTO_VHP)
#define SetTKLEXT(x) ((x)->proto |= PROTO_TKLEXT)
#define SetNAMESX(x) ((x)->proto |= PROTO_NAMESX)
#define SetCLK(x) ((x)->proto |= PROTO_CLK)
#define SetUHNAMES(x) ((x)->proto |= PROTO_UHNAMES)
#define ClearSJOIN(x) ((x)->proto &= ~PROTO_SJOIN)
#define ClearNoQuit(x) ((x)->proto &= ~PROTO_NOQUIT)
@@ -606,6 +621,11 @@ typedef unsigned int u_int32_t; /* XXX Hope this works! */
#define OPIsNetAdmin(x) ((x)->oflag & OFLAG_NETADMIN)
#define OPIsCoAdmin(x) ((x)->oflag & OFLAG_COADMIN)
#define OPIsWhois(x) ((x)->oflag & OFLAG_WHOIS)
#ifdef SHOW_SECRET
#define OPCanSeeSecret(x) IsAnOper(x)
#else
#define OPCanSeeSecret(x) IsNetAdmin(x)
#endif
#define OPSetRehash(x) ((x)->oflag |= OFLAG_REHASH)
#define OPSetDie(x) ((x)->oflag |= OFLAG_DIE)
@@ -741,6 +761,7 @@ struct User {
unsigned short joined; /* number of channels joined */
char username[USERLEN + 1];
char realhost[HOSTLEN + 1];
char cloakedhost[HOSTLEN + 1]; /* cloaked host (masked host for caching). NOT NECESSARILY THE SAME AS virthost. */
char *virthost;
char *server;
char *swhois; /* special whois thing */
@@ -763,6 +784,7 @@ struct User {
#ifdef JOINTHROTTLE
aJFlood *jflood;
#endif
TS lastaway;
};
struct Server {
@@ -818,6 +840,9 @@ struct Server {
#define SPAMF_AWAY 0x0100 /* a */
#define SPAMF_TOPIC 0x0200 /* t */
/* Other flags only for function calls: */
#define SPAMFLAG_NOWARN 0x0001
struct _spamfilter {
unsigned short action; /* see BAN_ACT* */
regex_t expr;
@@ -947,7 +972,7 @@ struct Client {
#ifdef NOSPOOF
u_int32_t nospoof; /* Anti-spoofing random number */
#endif
short proto; /* ProtoCtl options */
int proto; /* ProtoCtl options */
long sendM; /* Statistics: protocol messages send */
long sendK; /* Statistics: total k-bytes send */
long receiveM; /* Statistics: protocol messages received */
@@ -1063,6 +1088,7 @@ struct _configflag_tld
#define BAN_ACT_BLOCK 8
#define BAN_ACT_DCCBLOCK 9
#define BAN_ACT_VIRUSCHAN 10
#define BAN_ACT_WARN 11
#define CRULE_ALL 0
@@ -1137,6 +1163,7 @@ struct _configitem_oper_from {
ConfigItem *prev, *next;
ConfigFlag flag;
char *name;
struct irc_netmask *netmask;
};
struct _configitem_drpass {
@@ -1201,6 +1228,19 @@ struct _configitem_link {
#endif
};
typedef enum {
CGIIRC_PASS=1, CGIIRC_WEBIRC=2
} CGIIRCType;
struct _configitem_cgiirc {
ConfigItem *prev, *next;
ConfigFlag flag;
CGIIRCType type;
char *username;
char *hostname;
anAuthStruct *auth;
};
struct _configitem_except {
ConfigItem *prev, *next;
ConfigFlag_except flag;
@@ -1217,6 +1257,13 @@ struct _configitem_ban {
unsigned short action;
};
typedef struct _iplist IPList;
struct _iplist {
IPList *prev, *next;
char *mask;
/* struct irc_netmask *netmask; */
};
#ifdef FAST_BADWORD_REPLACE
#define BADW_TYPE_INVALID 0x0
#define BADW_TYPE_FAST 0x1
@@ -1301,7 +1348,7 @@ struct _configitem_unknown_ext {
typedef enum {
ALIAS_SERVICES=1, ALIAS_STATS, ALIAS_NORMAL, ALIAS_COMMAND, ALIAS_CHANNEL
ALIAS_SERVICES=1, ALIAS_STATS, ALIAS_NORMAL, ALIAS_COMMAND, ALIAS_CHANNEL, ALIAS_REAL
} AliasType;
struct _configitem_alias {
@@ -1310,6 +1357,7 @@ struct _configitem_alias {
ConfigItem_alias_format *format;
char *alias, *nick;
AliasType type;
unsigned int spamfilter:1;
};
struct _configitem_alias_format {
@@ -1652,7 +1700,7 @@ struct liststruct {
*/
#define MyConnect(x) ((x)->fd != -256)
#define MyClient(x) (MyConnect(x) && IsClient(x))
#define MyOper(x) (MyConnect(x) && IsOper(x))
#define MyOper(x) (MyConnect(x) && IsAnOper(x))
#ifdef CLEAN_COMPILE
#define TStime() (time(NULL) + TSoffset)
+9
View File
@@ -132,6 +132,13 @@ extern char *rindex(char *, char);
#define dn_skipname __dn_skipname
#endif
/*
* Mac OS X Tiger Support (Intel Only)
*/
#if defined(macosx) || (defined(__APPLE__) && defined(__MACH__))
#define OSXTIGER
#endif
#ifndef _WIN32
extern VOIDSIG dummy();
#endif
@@ -147,6 +154,8 @@ typedef unsigned int u_int;
#define MYOSNAME OSName
extern char OSName[256];
#define PATH_MAX MAX_PATH
#else
#define MYOSNAME getosname()
#endif
#ifdef DEBUGMODE
// #define ircsprintf sprintf
+27 -5
View File
@@ -23,15 +23,37 @@
#endif
/**/
#define COMPILEINFO DEBUGMODESET DEBUGSET
/*
* Version Unreal3.2.2
/* Version info follows
* Please be sure to update ALL fields when changing the version.
* Also don't forget to bump the protocol version every release.
*/
#define UnrealProtocol 2306
/** These UNREAL_VERSION_* macros can be used so (3rd party) modules
* can easily distinguish versions.
*/
/** The generation version number (eg: 3 for Unreal3*) */
#define UNREAL_VERSION_GENERATION 3
/** The major version number (eg: 2 for Unreal3.2*) */
#define UNREAL_VERSION_MAJOR 2
/** The minor version number (eg: 1 for Unreal3.2.1), negative numbers for unstable/alpha/beta */
#define UNREAL_VERSION_MINOR 8
/** Year + week of the year (with Monday as first day of the week).
* Can be useful if the above 3 versionids are insufficient for you (eg: you want to support CVS).
* This is updated automatically on the CVS server every Monday. so don't touch it.
*/
#define UNREAL_VERSION_TIME 200914
#define UnrealProtocol 2309
#define PATCH1 "3"
#define PATCH2 ".2"
#define PATCH3 ".3"
#define PATCH3 ".8"
#define PATCH4 ""
#define PATCH5 ""
#define PATCH5 ".1"
#define PATCH6 ""
#define PATCH7 ""
#define PATCH8 COMPILEINFO
+333
View File
@@ -0,0 +1,333 @@
/* $Id$ */
/* Copyright 1998 by the Massachusetts Institute of Technology.
* Copyright (C) 2007-2008 by Daniel Stenberg
*
* Permission to use, copy, modify, and distribute this
* software and its documentation for any purpose and without
* fee is hereby granted, provided that the above copyright
* notice appear in all copies and that both that copyright
* notice and this permission notice appear in supporting
* documentation, and that the name of M.I.T. not be used in
* advertising or publicity pertaining to distribution of the
* software without specific, written prior permission.
* M.I.T. makes no representations about the suitability of
* this software for any purpose. It is provided "as is"
* without express or implied warranty.
*/
#ifndef ARES__H
#define ARES__H
/*
* Define WIN32 when build target is Win32 API
*/
#if (defined(_WIN32) || defined(__WIN32__)) && !defined(WIN32)
#define WIN32
#endif
#include <sys/types.h>
#include <winsock.h>
#include <windows.h>
/* HP-UX systems version 9, 10 and 11 lack sys/select.h and so does oldish
libc5-based Linux systems. Only include it on system that are known to
require it! */
#if defined(_AIX) || defined(__NOVELL_LIBC__) || defined(__NetBSD__) || \
defined(__minix) || defined(__SYMBIAN32__) || defined(__INTEGRITY)
#include <sys/select.h>
#endif
#if (defined(NETWARE) && !defined(__NOVELL_LIBC__))
#include <sys/bsdskt.h>
#endif
#if defined(WATT32)
#include <netinet/in.h>
#include <sys/socket.h>
#include <tcp.h>
#elif defined(WIN32)
# ifndef WIN32_LEAN_AND_MEAN
# define WIN32_LEAN_AND_MEAN
# endif
# include <winsock.h>
# include <windows.h>
//# include <ws2tcpip.h>
#else
#include <sys/socket.h>
#include <netinet/in.h>
#endif
#ifdef __cplusplus
extern "C" {
#endif
#define ARES_SUCCESS 0
/* Server error codes (ARES_ENODATA indicates no relevant answer) */
#define ARES_ENODATA 1
#define ARES_EFORMERR 2
#define ARES_ESERVFAIL 3
#define ARES_ENOTFOUND 4
#define ARES_ENOTIMP 5
#define ARES_EREFUSED 6
/* Locally generated error codes */
#define ARES_EBADQUERY 7
#define ARES_EBADNAME 8
#define ARES_EBADFAMILY 9
#define ARES_EBADRESP 10
#define ARES_ECONNREFUSED 11
#define ARES_ETIMEOUT 12
#define ARES_EOF 13
#define ARES_EFILE 14
#define ARES_ENOMEM 15
#define ARES_EDESTRUCTION 16
#define ARES_EBADSTR 17
/* ares_getnameinfo error codes */
#define ARES_EBADFLAGS 18
/* ares_getaddrinfo error codes */
#define ARES_ENONAME 19
#define ARES_EBADHINTS 20
/* Flag values */
#define ARES_FLAG_USEVC (1 << 0)
#define ARES_FLAG_PRIMARY (1 << 1)
#define ARES_FLAG_IGNTC (1 << 2)
#define ARES_FLAG_NORECURSE (1 << 3)
#define ARES_FLAG_STAYOPEN (1 << 4)
#define ARES_FLAG_NOSEARCH (1 << 5)
#define ARES_FLAG_NOALIASES (1 << 6)
#define ARES_FLAG_NOCHECKRESP (1 << 7)
/* Option mask values */
#define ARES_OPT_FLAGS (1 << 0)
#define ARES_OPT_TIMEOUT (1 << 1)
#define ARES_OPT_TRIES (1 << 2)
#define ARES_OPT_NDOTS (1 << 3)
#define ARES_OPT_UDP_PORT (1 << 4)
#define ARES_OPT_TCP_PORT (1 << 5)
#define ARES_OPT_SERVERS (1 << 6)
#define ARES_OPT_DOMAINS (1 << 7)
#define ARES_OPT_LOOKUPS (1 << 8)
#define ARES_OPT_SOCK_STATE_CB (1 << 9)
#define ARES_OPT_SORTLIST (1 << 10)
#define ARES_OPT_SOCK_SNDBUF (1 << 11)
#define ARES_OPT_SOCK_RCVBUF (1 << 12)
#define ARES_OPT_TIMEOUTMS (1 << 13)
#define ARES_OPT_ROTATE (1 << 14)
/* Nameinfo flag values */
#define ARES_NI_NOFQDN (1 << 0)
#define ARES_NI_NUMERICHOST (1 << 1)
#define ARES_NI_NAMEREQD (1 << 2)
#define ARES_NI_NUMERICSERV (1 << 3)
#define ARES_NI_DGRAM (1 << 4)
#define ARES_NI_TCP 0
#define ARES_NI_UDP ARES_NI_DGRAM
#define ARES_NI_SCTP (1 << 5)
#define ARES_NI_DCCP (1 << 6)
#define ARES_NI_NUMERICSCOPE (1 << 7)
#define ARES_NI_LOOKUPHOST (1 << 8)
#define ARES_NI_LOOKUPSERVICE (1 << 9)
/* Reserved for future use */
#define ARES_NI_IDN (1 << 10)
#define ARES_NI_IDN_ALLOW_UNASSIGNED (1 << 11)
#define ARES_NI_IDN_USE_STD3_ASCII_RULES (1 << 12)
/* Addrinfo flag values */
#define ARES_AI_CANONNAME (1 << 0)
#define ARES_AI_NUMERICHOST (1 << 1)
#define ARES_AI_PASSIVE (1 << 2)
#define ARES_AI_NUMERICSERV (1 << 3)
#define ARES_AI_V4MAPPED (1 << 4)
#define ARES_AI_ALL (1 << 5)
#define ARES_AI_ADDRCONFIG (1 << 6)
/* Reserved for future use */
#define ARES_AI_IDN (1 << 10)
#define ARES_AI_IDN_ALLOW_UNASSIGNED (1 << 11)
#define ARES_AI_IDN_USE_STD3_ASCII_RULES (1 << 12)
#define ARES_AI_CANONIDN (1 << 13)
#define ARES_AI_MASK (ARES_AI_CANONNAME|ARES_AI_NUMERICHOST|ARES_AI_PASSIVE| \
ARES_AI_NUMERICSERV|ARES_AI_V4MAPPED|ARES_AI_ALL| \
ARES_AI_ADDRCONFIG)
#define ARES_GETSOCK_MAXNUM 16 /* ares_getsock() can return info about this
many sockets */
#define ARES_GETSOCK_READABLE(bits,num) (bits & (1<< (num)))
#define ARES_GETSOCK_WRITABLE(bits,num) (bits & (1 << ((num) + \
ARES_GETSOCK_MAXNUM)))
/*
* Typedef our socket type
*/
#ifndef ares_socket_typedef
#ifdef WIN32
typedef SOCKET ares_socket_t;
#define ARES_SOCKET_BAD INVALID_SOCKET
#else
typedef int ares_socket_t;
#define ARES_SOCKET_BAD -1
#endif
#define ares_socket_typedef
#endif /* ares_socket_typedef */
typedef void (*ares_sock_state_cb)(void *data,
ares_socket_t socket_fd,
int readable,
int writable);
struct apattern;
/* NOTE about the ares_options struct to users and developers.
This struct will remain looking like this. It will not be extended nor
shrunk in future releases, but all new options will be set by ares_set_*()
options instead of with the ares_init_options() function.
Eventually (in a galaxy far far away), all options will be settable by
ares_set_*() options and the ares_init_options() function will become
deprecated.
When new options are added to c-ares, they are not added to this
struct. And they are not "saved" with the ares_save_options() function but
instead we encourage the use of the ares_dup() function. Needless to say,
if you add config options to c-ares you need to make sure ares_dup()
duplicates this new option.
*/
struct ares_options {
int flags;
int timeout; /* in seconds or milliseconds, depending on options */
int tries;
int ndots;
unsigned short udp_port;
unsigned short tcp_port;
int socket_send_buffer_size;
int socket_receive_buffer_size;
struct in_addr *servers;
int nservers;
char **domains;
int ndomains;
char *lookups;
ares_sock_state_cb sock_state_cb;
void *sock_state_cb_data;
struct apattern *sortlist;
int nsort;
};
struct ares_config_info {
int timeout;
int tries;
int numservers;
char **servers;
};
struct hostent;
struct timeval;
struct sockaddr;
struct ares_channeldata;
typedef struct ares_channeldata *ares_channel;
typedef void (*ares_callback)(void *arg, int status, int timeouts,
unsigned char *abuf, int alen);
typedef void (*ares_host_callback)(void *arg, int status, int timeouts,
struct hostent *hostent);
typedef void (*ares_nameinfo_callback)(void *arg, int status, int timeouts,
char *node, char *service);
typedef int (*ares_sock_create_callback)(ares_socket_t socket_fd,
int type, void *data);
int ares_init(ares_channel *channelptr);
int ares_init_options(ares_channel *channelptr, struct ares_options *options,
int optmask);
int ares_save_options(ares_channel channel, struct ares_options *options,
int *optmask);
void ares_destroy_options(struct ares_options *options);
int ares_dup(ares_channel *dest, ares_channel src);
void ares_destroy(ares_channel channel);
void ares_cancel(ares_channel channel);
void ares_set_socket_callback(ares_channel channel,
ares_sock_create_callback callback,
void *user_data);
void ares_send(ares_channel channel, const unsigned char *qbuf, int qlen,
ares_callback callback, void *arg);
void ares_query(ares_channel channel, const char *name, int dnsclass,
int type, ares_callback callback, void *arg);
void ares_search(ares_channel channel, const char *name, int dnsclass,
int type, ares_callback callback, void *arg);
void ares_gethostbyname(ares_channel channel, const char *name, int family,
ares_host_callback callback, void *arg);
int ares_gethostbyname_file(ares_channel channel, const char *name,
int family, struct hostent **host);
void ares_gethostbyaddr(ares_channel channel, const void *addr, int addrlen,
int family, ares_host_callback callback, void *arg);
void ares_getnameinfo(ares_channel channel, const struct sockaddr *sa,
socklen_t salen, int flags,
ares_nameinfo_callback callback,
void *arg);
int ares_fds(ares_channel channel, fd_set *read_fds, fd_set *write_fds);
int ares_getsock(ares_channel channel, int *socks, int numsocks);
struct timeval *ares_timeout(ares_channel channel, struct timeval *maxtv,
struct timeval *tv);
void ares_process(ares_channel channel, fd_set *read_fds, fd_set *write_fds);
void ares_process_fd(ares_channel channel, ares_socket_t read_fd,
ares_socket_t write_fd);
int ares_mkquery(const char *name, int dnsclass, int type, unsigned short id,
int rd, unsigned char **buf, int *buflen);
int ares_expand_name(const unsigned char *encoded, const unsigned char *abuf,
int alen, char **s, long *enclen);
int ares_expand_string(const unsigned char *encoded, const unsigned char *abuf,
int alen, unsigned char **s, long *enclen);
#if !defined(HAVE_STRUCT_IN6_ADDR) && !defined(s6_addr)
struct in6_addr {
union {
unsigned char _S6_u8[16];
} _S6_un;
};
#define s6_addr _S6_un._S6_u8
#endif
struct addrttl {
struct in_addr ipaddr;
int ttl;
};
struct addr6ttl {
struct in6_addr ip6addr;
int ttl;
};
/*
** Parse the buffer, starting at *abuf and of length alen bytes, previously
** obtained from an ares_search call. Put the results in *host, if nonnull.
** Also, if addrttls is nonnull, put up to *naddrttls IPv4 addresses along with
** their TTLs in that array, and set *naddrttls to the number of addresses
** so written.
*/
int ares_parse_a_reply(const unsigned char *abuf, int alen,
struct hostent **host,
struct addrttl *addrttls, int *naddrttls);
int ares_parse_aaaa_reply(const unsigned char *abuf, int alen,
struct hostent **host,
struct addr6ttl *addrttls, int *naddrttls);
int ares_parse_ptr_reply(const unsigned char *abuf, int alen, const void *addr,
int addrlen, int family, struct hostent **host);
int ares_parse_ns_reply(const unsigned char *abuf, int alen,
struct hostent **host);
void ares_free_string(void *str);
void ares_free_hostent(struct hostent *host);
const char *ares_strerror(int code);
int ares_get_config(struct ares_config_info *d, ares_channel c);
#ifdef __cplusplus
}
#endif
#endif /* ARES__H */
+25
View File
@@ -0,0 +1,25 @@
/* $Id$ */
#ifndef ARES__VERSION_H
#define ARES__VERSION_H
#define ARES_VERSION_MAJOR 1
#define ARES_VERSION_MINOR 6
#define ARES_VERSION_PATCH 0
#define ARES_VERSION ((ARES_VERSION_MAJOR<<16)|\
(ARES_VERSION_MINOR<<8)|\
(ARES_VERSION_PATCH))
#define ARES_VERSION_STR "1.6.0"
#ifdef __cplusplus
extern "C" {
#endif
const char *ares_version(int *version);
#ifdef __cplusplus
}
#endif
#endif
+284
View File
@@ -0,0 +1,284 @@
#ifndef __ARES_CONFIG_WIN32_H
#define __ARES_CONFIG_WIN32_H
/* $Id$ */
/* Copyright (C) 2004 - 2008 by Daniel Stenberg et al
*
* Permission to use, copy, modify, and distribute this software and its
* documentation for any purpose and without fee is hereby granted, provided
* that the above copyright notice appear in all copies and that both that
* copyright notice and this permission notice appear in supporting
* documentation, and that the name of M.I.T. not be used in advertising or
* publicity pertaining to distribution of the software without specific,
* written prior permission. M.I.T. makes no representations about the
* suitability of this software for any purpose. It is provided "as is"
* without express or implied warranty.
*/
/* ================================================================ */
/* ares/config-win32.h - Hand crafted config file for Windows */
/* ================================================================ */
/* ---------------------------------------------------------------- */
/* HEADER FILES */
/* ---------------------------------------------------------------- */
/* Define if you have the <getopt.h> header file. */
#if defined(__MINGW32__)
#define HAVE_GETOPT_H 1
#endif
/* Define if you have the <signal.h> header file. */
#define HAVE_SIGNAL_H 1
/* Define if you have the <sys/time.h> header file */
/* #define HAVE_SYS_TIME_H 1 */
/* Define if you have the <time.h> header file. */
#define HAVE_TIME_H 1
/* Define if you have the <process.h> header file. */
#define HAVE_PROCESS_H 1
/* Define if you have the <unistd.h> header file. */
#if defined(__MINGW32__) || defined(__WATCOMC__) || defined(__LCC__) || \
defined(__POCC__)
#define HAVE_UNISTD_H 1
#endif
/* Define if you have the <windows.h> header file. */
#define HAVE_WINDOWS_H 1
/* Define if you have the <winsock.h> header file. */
#define HAVE_WINSOCK_H 1
/* Define if you have the <winsock2.h> header file. */
//#define HAVE_WINSOCK2_H 1
/* Define if you have the <ws2tcpip.h> header file. */
//#define HAVE_WS2TCPIP_H 1
/* ---------------------------------------------------------------- */
/* OTHER HEADER INFO */
/* ---------------------------------------------------------------- */
/* Define if sig_atomic_t is an available typedef. */
#define HAVE_SIG_ATOMIC_T 1
/* Define if you have the ANSI C header files. */
#define STDC_HEADERS 1
/* Define if you can safely include both <sys/time.h> and <time.h>. */
/* #define TIME_WITH_SYS_TIME 1 */
/* ---------------------------------------------------------------- */
/* FUNCTIONS */
/* ---------------------------------------------------------------- */
/* Define if you have the ioctlsocket function. */
#define HAVE_IOCTLSOCKET 1
/* Define if you have a working ioctlsocket FIONBIO function. */
#define HAVE_IOCTLSOCKET_FIONBIO 1
/* Define if you have the strcasecmp function. */
/* #define HAVE_STRCASECMP 1 */
/* Define if you have the strdup function. */
#define HAVE_STRDUP 1
/* Define if you have the stricmp function. */
#define HAVE_STRICMP 1
/* Define if you have the strncasecmp function. */
/* #define HAVE_STRNCASECMP 1 */
/* Define if you have the strnicmp function. */
#define HAVE_STRNICMP 1
/* Define if you have the gethostname function. */
#define HAVE_GETHOSTNAME 1
/* Define if you have the recv function. */
#define HAVE_RECV 1
/* Define to the type of arg 1 for recv. */
#define RECV_TYPE_ARG1 SOCKET
/* Define to the type of arg 2 for recv. */
#define RECV_TYPE_ARG2 char *
/* Define to the type of arg 3 for recv. */
#define RECV_TYPE_ARG3 int
/* Define to the type of arg 4 for recv. */
#define RECV_TYPE_ARG4 int
/* Define to the function return type for recv. */
#define RECV_TYPE_RETV int
/* Define if you have the recvfrom function. */
#define HAVE_RECVFROM 1
/* Define to the type of arg 1 for recvfrom. */
#define RECVFROM_TYPE_ARG1 SOCKET
/* Define to the type pointed by arg 2 for recvfrom. */
#define RECVFROM_TYPE_ARG2 char
/* Define to the type of arg 3 for recvfrom. */
#define RECVFROM_TYPE_ARG3 int
/* Define to the type of arg 4 for recvfrom. */
#define RECVFROM_TYPE_ARG4 int
/* Define to the type pointed by arg 5 for recvfrom. */
#define RECVFROM_TYPE_ARG5 struct sockaddr
/* Define to the type pointed by arg 6 for recvfrom. */
#define RECVFROM_TYPE_ARG6 int
/* Define to the function return type for recvfrom. */
#define RECVFROM_TYPE_RETV int
/* Define if you have the send function. */
#define HAVE_SEND 1
/* Define to the type of arg 1 for send. */
#define SEND_TYPE_ARG1 SOCKET
/* Define to the type qualifier of arg 2 for send. */
#define SEND_QUAL_ARG2 const
/* Define to the type of arg 2 for send. */
#define SEND_TYPE_ARG2 char *
/* Define to the type of arg 3 for send. */
#define SEND_TYPE_ARG3 int
/* Define to the type of arg 4 for send. */
#define SEND_TYPE_ARG4 int
/* Define to the function return type for send. */
#define SEND_TYPE_RETV int
/* Specifics for the Watt-32 tcp/ip stack */
#ifdef WATT32
#define SOCKET int
#define NS_INADDRSZ 4
#define HAVE_ARPA_NAMESER_H 1
#define HAVE_ARPA_INET_H 1
#define HAVE_NETDB_H 1
#define HAVE_NETINET_IN_H 1
#define HAVE_SYS_SOCKET_H 1
#define HAVE_NETINET_TCP_H 1
#define HAVE_AF_INET6 1
#define HAVE_PF_INET6 1
#define HAVE_STRUCT_IN6_ADDR 1
#define HAVE_STRUCT_SOCKADDR_IN6 1
#undef HAVE_WINSOCK_H
#undef HAVE_WINSOCK2_H
#undef HAVE_WS2TCPIP_H
#endif
/* ---------------------------------------------------------------- */
/* TYPEDEF REPLACEMENTS */
/* ---------------------------------------------------------------- */
/* Define this if in_addr_t is not an available 'typedefed' type */
#define in_addr_t unsigned long
/* Define as the return type of signal handlers (int or void). */
#define RETSIGTYPE void
/* Define ssize_t if it is not an available 'typedefed' type */
#if (defined(__WATCOMC__) && (__WATCOMC__ >= 1240)) || defined(__POCC__)
#elif defined(_WIN64)
#define ssize_t __int64
#else
#define ssize_t int
#endif
/* ---------------------------------------------------------------- */
/* STRUCT RELATED */
/* ---------------------------------------------------------------- */
/* Define this if you have struct addrinfo */
#define HAVE_STRUCT_ADDRINFO 1
/* Define this if you have struct sockaddr_storage */
#define HAVE_STRUCT_SOCKADDR_STORAGE 1
/* Define this if you have struct timeval */
#define HAVE_STRUCT_TIMEVAL 1
/* ---------------------------------------------------------------- */
/* COMPILER SPECIFIC */
/* ---------------------------------------------------------------- */
/* Define to avoid VS2005 complaining about portable C functions */
#if defined(_MSC_VER) && (_MSC_VER >= 1400)
#define _CRT_SECURE_NO_DEPRECATE 1
#define _CRT_NONSTDC_NO_DEPRECATE 1
#endif
/* VS2008 does not support Windows build targets prior to WinXP, */
/* so, if no build target has been defined we will target WinXP. */
#if defined(_MSC_VER) && (_MSC_VER >= 1500)
# ifndef _WIN32_WINNT
# define _WIN32_WINNT 0x0501
# endif
# ifndef WINVER
# define WINVER 0x0501
# endif
# if (_WIN32_WINNT < 0x0501) || (WINVER < 0x0501)
# error VS2008 does not support Windows build targets prior to WinXP
# endif
#endif
/* Availability of freeaddrinfo, getaddrinfo and getnameinfo functions is quite */
/* convoluted, compiler dependant and in some cases even build target dependat. */
#if defined(HAVE_WS2TCPIP_H)
# if defined(_WIN32_WINNT) && (_WIN32_WINNT >= 0x0501)
# define HAVE_FREEADDRINFO 1
# define HAVE_GETADDRINFO 1
# define HAVE_GETNAMEINFO 1
# elif defined(_MSC_VER) && (_MSC_VER >= 1200)
# define HAVE_FREEADDRINFO 1
# define HAVE_GETADDRINFO 1
# define HAVE_GETNAMEINFO 1
# endif
#endif
/* ---------------------------------------------------------------- */
/* IPV6 COMPATIBILITY */
/* ---------------------------------------------------------------- */
/* Define this if you have address family AF_INET6 */
#ifdef HAVE_WINSOCK2_H
#define HAVE_AF_INET6 1
#endif
/* Define this if you have protocol family PF_INET6 */
#ifdef HAVE_WINSOCK2_H
#define HAVE_PF_INET6 1
#endif
/* Define this if you have struct in6_addr */
#ifdef HAVE_WS2TCPIP_H
#define HAVE_STRUCT_IN6_ADDR 1
#endif
/* Define this if you have struct sockaddr_in6 */
#ifdef HAVE_WS2TCPIP_H
#define HAVE_STRUCT_SOCKADDR_IN6 1
#endif
/* Define this if you have sockaddr_in6 with scopeid */
#ifdef HAVE_WS2TCPIP_H
#define HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID 1
#endif
#endif /* __ARES_CONFIG_WIN32_H */
+155
View File
@@ -0,0 +1,155 @@
#ifndef __ARES_SETUP_H
#define __ARES_SETUP_H
/* $Id$ */
/* Copyright (C) 2004 - 2008 by Daniel Stenberg et al
*
* Permission to use, copy, modify, and distribute this software and its
* documentation for any purpose and without fee is hereby granted, provided
* that the above copyright notice appear in all copies and that both that
* copyright notice and this permission notice appear in supporting
* documentation, and that the name of M.I.T. not be used in advertising or
* publicity pertaining to distribution of the software without specific,
* written prior permission. M.I.T. makes no representations about the
* suitability of this software for any purpose. It is provided "as is"
* without express or implied warranty.
*/
/*
* Define WIN32 when build target is Win32 API
*/
#if (defined(_WIN32) || defined(__WIN32__)) && !defined(WIN32)
#define WIN32
#endif
/*
* Include configuration script results or hand-crafted
* configuration file for platforms which lack config tool.
*/
#ifdef HAVE_CONFIG_H
#include "config.h"
#else
#ifdef WIN32
#include "config-win32.h"
#endif
#endif /* HAVE_CONFIG_H */
/*
* Tru64 needs _REENTRANT set for a few function prototypes and
* things to appear in the system header files. Unixware needs it
* to build proper reentrant code. Others may also need it.
*/
#ifdef NEED_REENTRANT
# ifndef _REENTRANT
# define _REENTRANT
# endif
#endif
/*
* Include header files for windows builds before redefining anything.
* Use this preproessor block only to include or exclude windows.h,
* winsock2.h, ws2tcpip.h or winsock.h. Any other windows thing belongs
* to any other further and independant block. Under Cygwin things work
* just as under linux (e.g. <sys/socket.h>) and the winsock headers should
* never be included when __CYGWIN__ is defined. configure script takes
* care of this, not defining HAVE_WINDOWS_H, HAVE_WINSOCK_H, HAVE_WINSOCK2_H,
* neither HAVE_WS2TCPIP_H when __CYGWIN__ is defined.
*/
#ifdef HAVE_WINDOWS_H
# ifndef WIN32_LEAN_AND_MEAN
# define WIN32_LEAN_AND_MEAN
# endif
# include <windows.h>
# ifdef HAVE_WINSOCK2_H
# include <winsock2.h>
# ifdef HAVE_WS2TCPIP_H
# include <ws2tcpip.h>
# endif
# else
# ifdef HAVE_WINSOCK_H
# include <winsock.h>
# endif
# endif
#endif
/*
* Define USE_WINSOCK to 2 if we have and use WINSOCK2 API, else
* define USE_WINSOCK to 1 if we have and use WINSOCK API, else
* undefine USE_WINSOCK.
*/
#undef USE_WINSOCK
#ifdef HAVE_WINSOCK2_H
# define USE_WINSOCK 2
#else
# ifdef HAVE_WINSOCK_H
# define USE_WINSOCK 1
# endif
#endif
/*
* Work-arounds for systems without configure support
*/
#ifndef HAVE_CONFIG_H
#if defined(__DJGPP__) || (defined(__WATCOMC__) && (__WATCOMC__ >= 1240)) || \
defined(__POCC__)
#else
#define ssize_t int
#endif
#if !defined(HAVE_SYS_TIME_H) && !defined(_MSC_VER) && !defined(__WATCOMC__)
#define HAVE_SYS_TIME_H
#endif
#if !defined(HAVE_UNISTD_H) && !defined(_MSC_VER)
#define HAVE_UNISTD_H 1
#endif
#if !defined(HAVE_SYS_UIO_H) && !defined(WIN32) && !defined(MSDOS)
#define HAVE_SYS_UIO_H
#endif
#endif /* HAVE_CONFIG_H */
/*
* Recent autoconf versions define these symbols in config.h. We don't
* want them (since they collide with the libcurl ones when we build
* --enable-debug) so we undef them again here.
*/
#undef PACKAGE_STRING
#undef PACKAGE_TARNAME
#undef PACKAGE_VERSION
#undef PACKAGE_BUGREPORT
#undef PACKAGE_NAME
#undef VERSION
#undef PACKAGE
/* IPv6 compatibility */
#if !defined(HAVE_AF_INET6)
#if defined(HAVE_PF_INET6)
#define AF_INET6 PF_INET6
#else
#define AF_INET6 AF_MAX+1
#endif
#endif
/*
* Include macros and defines that should only be processed once.
*/
#ifndef __SETUP_ONCE_H
#include "setup_once.h"
#endif
#endif /* __ARES_SETUP_H */
+523
View File
@@ -0,0 +1,523 @@
#ifndef __SETUP_ONCE_H
#define __SETUP_ONCE_H
/* $Id$ */
/* Copyright (C) 2004 - 2008 by Daniel Stenberg et al
*
* Permission to use, copy, modify, and distribute this software and its
* documentation for any purpose and without fee is hereby granted, provided
* that the above copyright notice appear in all copies and that both that
* copyright notice and this permission notice appear in supporting
* documentation, and that the name of M.I.T. not be used in advertising or
* publicity pertaining to distribution of the software without specific,
* written prior permission. M.I.T. makes no representations about the
* suitability of this software for any purpose. It is provided "as is"
* without express or implied warranty.
*/
/********************************************************************
* NOTICE *
* ======== *
* *
* Content of header files lib/setup_once.h and ares/setup_once.h *
* must be kept in sync. Modify the other one if you change this. *
* *
********************************************************************/
/*
* Inclusion of common header files.
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdarg.h>
#include <ctype.h>
#include <errno.h>
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif
#ifdef HAVE_SYS_STAT_H
#include <sys/stat.h>
#endif
#ifdef HAVE_SYS_TIME_H
#include <sys/time.h>
#ifdef TIME_WITH_SYS_TIME
#include <time.h>
#endif
#else
#ifdef HAVE_TIME_H
#include <time.h>
#endif
#endif
#ifdef WIN32
#include <io.h>
#include <fcntl.h>
#endif
#ifdef HAVE_STDBOOL_H
#include <stdbool.h>
#endif
/*
* Definition of timeval struct for platforms that don't have it.
*/
#ifndef HAVE_STRUCT_TIMEVAL
struct timeval {
long tv_sec;
long tv_usec;
};
#endif
/*
* If we have the MSG_NOSIGNAL define, make sure we use
* it as the fourth argument of function send()
*/
#ifdef HAVE_MSG_NOSIGNAL
#define SEND_4TH_ARG MSG_NOSIGNAL
#else
#define SEND_4TH_ARG 0
#endif
/*
* Windows build targets have socklen_t definition in
* ws2tcpip.h but some versions of ws2tcpip.h do not
* have the definition. It seems that when the socklen_t
* definition is missing from ws2tcpip.h the definition
* for INET_ADDRSTRLEN is also missing, and that when one
* definition is present the other one also is available.
*/
#if defined(WIN32) && !defined(HAVE_CONFIG_H)
# if ( defined(_MSC_VER) && !defined(INET_ADDRSTRLEN) ) || \
(!defined(_MSC_VER) && !defined(HAVE_WS2TCPIP_H) )
# define socklen_t int
# endif
#endif
#if defined(__minix)
/* Minix doesn't support recv on TCP sockets */
#define sread(x,y,z) (ssize_t)read((RECV_TYPE_ARG1)(x), \
(RECV_TYPE_ARG2)(y), \
(RECV_TYPE_ARG3)(z))
#elif defined(HAVE_RECV)
/*
* The definitions for the return type and arguments types
* of functions recv() and send() belong and come from the
* configuration file. Do not define them in any other place.
*
* HAVE_RECV is defined if you have a function named recv()
* which is used to read incoming data from sockets. If your
* function has another name then don't define HAVE_RECV.
*
* If HAVE_RECV is defined then RECV_TYPE_ARG1, RECV_TYPE_ARG2,
* RECV_TYPE_ARG3, RECV_TYPE_ARG4 and RECV_TYPE_RETV must also
* be defined.
*
* HAVE_SEND is defined if you have a function named send()
* which is used to write outgoing data on a connected socket.
* If yours has another name then don't define HAVE_SEND.
*
* If HAVE_SEND is defined then SEND_TYPE_ARG1, SEND_QUAL_ARG2,
* SEND_TYPE_ARG2, SEND_TYPE_ARG3, SEND_TYPE_ARG4 and
* SEND_TYPE_RETV must also be defined.
*/
#if !defined(RECV_TYPE_ARG1) || \
!defined(RECV_TYPE_ARG2) || \
!defined(RECV_TYPE_ARG3) || \
!defined(RECV_TYPE_ARG4) || \
!defined(RECV_TYPE_RETV)
/* */
Error Missing_definition_of_return_and_arguments_types_of_recv
/* */
#else
#define sread(x,y,z) (ssize_t)recv((RECV_TYPE_ARG1)(x), \
(RECV_TYPE_ARG2)(y), \
(RECV_TYPE_ARG3)(z), \
(RECV_TYPE_ARG4)(0))
#endif
#else /* HAVE_RECV */
#ifndef sread
/* */
Error Missing_definition_of_macro_sread
/* */
#endif
#endif /* HAVE_RECV */
#if defined(__minix)
/* Minix doesn't support send on TCP sockets */
#define swrite(x,y,z) (ssize_t)write((SEND_TYPE_ARG1)(x), \
(SEND_TYPE_ARG2)(y), \
(SEND_TYPE_ARG3)(z))
#elif defined(HAVE_SEND)
#if !defined(SEND_TYPE_ARG1) || \
!defined(SEND_QUAL_ARG2) || \
!defined(SEND_TYPE_ARG2) || \
!defined(SEND_TYPE_ARG3) || \
!defined(SEND_TYPE_ARG4) || \
!defined(SEND_TYPE_RETV)
/* */
Error Missing_definition_of_return_and_arguments_types_of_send
/* */
#else
#define swrite(x,y,z) (ssize_t)send((SEND_TYPE_ARG1)(x), \
(SEND_TYPE_ARG2)(y), \
(SEND_TYPE_ARG3)(z), \
(SEND_TYPE_ARG4)(SEND_4TH_ARG))
#endif
#else /* HAVE_SEND */
#ifndef swrite
/* */
Error Missing_definition_of_macro_swrite
/* */
#endif
#endif /* HAVE_SEND */
#if 0
#if defined(HAVE_RECVFROM)
/*
* Currently recvfrom is only used on udp sockets.
*/
#if !defined(RECVFROM_TYPE_ARG1) || \
!defined(RECVFROM_TYPE_ARG2) || \
!defined(RECVFROM_TYPE_ARG3) || \
!defined(RECVFROM_TYPE_ARG4) || \
!defined(RECVFROM_TYPE_ARG5) || \
!defined(RECVFROM_TYPE_ARG6) || \
!defined(RECVFROM_TYPE_RETV)
/* */
Error Missing_definition_of_return_and_arguments_types_of_recvfrom
/* */
#else
#define sreadfrom(s,b,bl,f,fl) (ssize_t)recvfrom((RECVFROM_TYPE_ARG1) (s), \
(RECVFROM_TYPE_ARG2 *)(b), \
(RECVFROM_TYPE_ARG3) (bl), \
(RECVFROM_TYPE_ARG4) (0), \
(RECVFROM_TYPE_ARG5 *)(f), \
(RECVFROM_TYPE_ARG6 *)(fl))
#endif
#else /* HAVE_RECVFROM */
#ifndef sreadfrom
/* */
Error Missing_definition_of_macro_sreadfrom
/* */
#endif
#endif /* HAVE_RECVFROM */
#ifdef RECVFROM_TYPE_ARG6_IS_VOID
# define RECVFROM_ARG6_T int
#else
# define RECVFROM_ARG6_T RECVFROM_TYPE_ARG6
#endif
#endif /* if 0 */
/*
* Uppercase macro versions of ANSI/ISO is*() functions/macros which
* avoid negative number inputs with argument byte codes > 127.
*/
#define ISSPACE(x) (isspace((int) ((unsigned char)x)))
#define ISDIGIT(x) (isdigit((int) ((unsigned char)x)))
#define ISALNUM(x) (isalnum((int) ((unsigned char)x)))
#define ISXDIGIT(x) (isxdigit((int) ((unsigned char)x)))
#define ISGRAPH(x) (isgraph((int) ((unsigned char)x)))
#define ISALPHA(x) (isalpha((int) ((unsigned char)x)))
#define ISPRINT(x) (isprint((int) ((unsigned char)x)))
#define ISUPPER(x) (isupper((int) ((unsigned char)x)))
#define ISLOWER(x) (islower((int) ((unsigned char)x)))
#define ISBLANK(x) (int)((((unsigned char)x) == ' ') || \
(((unsigned char)x) == '\t'))
/*
* Typedef to 'unsigned char' if bool is not an available 'typedefed' type.
*/
#ifndef HAVE_BOOL_T
typedef unsigned char bool;
#define HAVE_BOOL_T
#endif
/*
* Default definition of uppercase TRUE and FALSE.
*/
#ifndef TRUE
#define TRUE 1
#endif
#ifndef FALSE
#define FALSE 0
#endif
/*
* Typedef to 'int' if sig_atomic_t is not an available 'typedefed' type.
*/
#ifndef HAVE_SIG_ATOMIC_T
typedef int sig_atomic_t;
#define HAVE_SIG_ATOMIC_T
#endif
/*
* Convenience SIG_ATOMIC_T definition
*/
#ifdef HAVE_SIG_ATOMIC_T_VOLATILE
#define SIG_ATOMIC_T static sig_atomic_t
#else
#define SIG_ATOMIC_T static volatile sig_atomic_t
#endif
/*
* Default return type for signal handlers.
*/
#ifndef RETSIGTYPE
#define RETSIGTYPE void
#endif
/*
* Macro used to include code only in debug builds.
*/
#ifdef CURLDEBUG
#define DEBUGF(x) x
#else
#define DEBUGF(x) do { } while (0)
#endif
/*
* Macro used to include assertion code only in debug builds.
*/
#if defined(CURLDEBUG) && defined(HAVE_ASSERT_H)
#define DEBUGASSERT(x) assert(x)
#else
#define DEBUGASSERT(x) do { } while (0)
#endif
/*
* Macro SOCKERRNO / SET_SOCKERRNO() returns / sets the *socket-related* errno
* (or equivalent) on this platform to hide platform details to code using it.
*/
#ifdef USE_WINSOCK
#define SOCKERRNO ((int)WSAGetLastError())
#define SET_SOCKERRNO(x) (WSASetLastError((int)(x)))
#else
#define SOCKERRNO (errno)
#define SET_SOCKERRNO(x) (errno = (x))
#endif
/*
* Macro ERRNO / SET_ERRNO() returns / sets the NOT *socket-related* errno
* (or equivalent) on this platform to hide platform details to code using it.
*/
/*UNREALUNREALUNREALEDIT#ifdef WIN32
#define ERRNO ((int)GetLastError())
#define SET_ERRNO(x) (SetLastError((DWORD)(x)))
#else
#define ERRNO (errno)
#define SET_ERRNO(x) (errno = (x))
#endif*/
/*
* Portable error number symbolic names defined to Winsock error codes.
*/
#ifdef USE_WINSOCK
#undef EBADF /* override definition in errno.h */
#define EBADF WSAEBADF
#undef EINTR /* override definition in errno.h */
#define EINTR WSAEINTR
#undef EINVAL /* override definition in errno.h */
#define EINVAL WSAEINVAL
#define EWOULDBLOCK WSAEWOULDBLOCK
#define EINPROGRESS WSAEINPROGRESS
#define EALREADY WSAEALREADY
#define ENOTSOCK WSAENOTSOCK
#define EDESTADDRREQ WSAEDESTADDRREQ
#define EMSGSIZE WSAEMSGSIZE
#define EPROTOTYPE WSAEPROTOTYPE
#define ENOPROTOOPT WSAENOPROTOOPT
#define EPROTONOSUPPORT WSAEPROTONOSUPPORT
#define ESOCKTNOSUPPORT WSAESOCKTNOSUPPORT
#define EOPNOTSUPP WSAEOPNOTSUPP
#define EPFNOSUPPORT WSAEPFNOSUPPORT
#define EAFNOSUPPORT WSAEAFNOSUPPORT
#define EADDRINUSE WSAEADDRINUSE
#define EADDRNOTAVAIL WSAEADDRNOTAVAIL
#define ENETDOWN WSAENETDOWN
#define ENETUNREACH WSAENETUNREACH
#define ENETRESET WSAENETRESET
#define ECONNABORTED WSAECONNABORTED
#define ECONNRESET WSAECONNRESET
#define ENOBUFS WSAENOBUFS
#define EISCONN WSAEISCONN
#define ENOTCONN WSAENOTCONN
#define ESHUTDOWN WSAESHUTDOWN
#define ETOOMANYREFS WSAETOOMANYREFS
#define ETIMEDOUT WSAETIMEDOUT
#define ECONNREFUSED WSAECONNREFUSED
#define ELOOP WSAELOOP
#ifndef ENAMETOOLONG /* possible previous definition in errno.h */
#define ENAMETOOLONG WSAENAMETOOLONG
#endif
#define EHOSTDOWN WSAEHOSTDOWN
#define EHOSTUNREACH WSAEHOSTUNREACH
#ifndef ENOTEMPTY /* possible previous definition in errno.h */
#define ENOTEMPTY WSAENOTEMPTY
#endif
#define EPROCLIM WSAEPROCLIM
#define EUSERS WSAEUSERS
#define EDQUOT WSAEDQUOT
#define ESTALE WSAESTALE
#define EREMOTE WSAEREMOTE
#endif
/*
* Actually use __32_getpwuid() on 64-bit VMS builds for getpwuid()
*/
#if defined(VMS) && \
defined(__INITIAL_POINTER_SIZE) && (__INITIAL_POINTER_SIZE == 64)
#define getpwuid __32_getpwuid
#endif
/*
* Macro argv_item_t hides platform details to code using it.
*/
#ifdef VMS
#define argv_item_t __char_ptr32
#else
#define argv_item_t char *
#endif
/*
* We use this ZERO_NULL to avoid picky compiler warnings,
* when assigning a NULL pointer to a function pointer var.
*/
#define ZERO_NULL 0
#if defined (__LP64__) && defined(__hpux) && !defined(_XOPEN_SOURCE_EXTENDED)
#include <sys/socket.h>
/* HP-UX has this oddity where it features a few functions that don't work
with socklen_t so we need to convert to ints
This is due to socklen_t being a 64bit int under 64bit ABI, but the
pre-xopen (default) interfaces require an int, which is 32bits.
Therefore, Anytime socklen_t is passed by pointer, the libc function
truncates the 64bit socklen_t value by treating it as a 32bit value.
Note that some socket calls are allowed to have a NULL pointer for
the socklen arg.
*/
inline static int Curl_hp_getsockname(int s, struct sockaddr *name,
socklen_t *namelen)
{
int rc;
if(namelen) {
int len = *namelen;
rc = getsockname(s, name, &len);
*namelen = len;
}
else
rc = getsockname(s, name, 0);
return rc;
}
inline static int Curl_hp_getsockopt(int s, int level, int optname,
void *optval, socklen_t *optlen)
{
int rc;
if(optlen) {
int len = *optlen;
rc = getsockopt(s, level, optname, optval, &len);
*optlen = len;
}
else
rc = getsockopt(s, level, optname, optval, 0);
return rc;
}
inline static int Curl_hp_accept(int sockfd, struct sockaddr *addr,
socklen_t *addrlen)
{
int rc;
if(addrlen) {
int len = *addrlen;
rc = accept(sockfd, addr, &len);
*addrlen = len;
}
else
rc = accept(sockfd, addr, 0);
return rc;
}
inline static ssize_t Curl_hp_recvfrom(int s, void *buf, size_t len, int flags,
struct sockaddr *from,
socklen_t *fromlen)
{
ssize_t rc;
if(fromlen) {
int fromlen32 = *fromlen;
rc = recvfrom(s, buf, len, flags, from, &fromlen32);
*fromlen = fromlen32;
}
else {
rc = recvfrom(s, buf, len, flags, from, 0);
}
return rc;
}
#define getsockname(a,b,c) Curl_hp_getsockname((a),(b),(c))
#define getsockopt(a,b,c,d,e) Curl_hp_getsockopt((a),(b),(c),(d),(e))
#define accept(a,b,c) Curl_hp_accept((a),(b),(c))
#define recvfrom(a,b,c,d,e,f) Curl_hp_recvfrom((a),(b),(c),(d),(e),(f))
#endif /* HPUX work-around */
#endif /* __SETUP_ONCE_H */
+6
View File
@@ -43,6 +43,12 @@
#undef TIMES_2
#undef GETRUSAGE_2
#define HAVE_ALLOCA
/* vc 2005 */
#if defined(_MSC_VER) && _MSC_VER >= 1400
# define HAVE_VSNPRINTF
# define HAVE_SNPRINTF
# define snprintf _snprintf
#endif
#define SPATH "."
#define DPATH "."
#define DOMAINNAME "irc.net"
+6 -4
View File
@@ -1,9 +1,11 @@
/* tre-config.h. This file defines all compile time definitions
that are needed in `regex.h' for Win32. */
#ifndef HAVE_ALLOCA
/* Define to 1 if you have `alloca', as a function or macro. */
#define HAVE_ALLOCA 1
#endif
/* Define to 1 if you have <alloca.h> and it should be used (not on Ultrix).
*/
#define HAVE_ALLOCA_H 1
@@ -24,7 +26,7 @@
#define TRE_APPROX 1
/* Define to enable multibyte character set support. */
#undef TRE_MULTIBYTE
#define TRE_MULTIBYTE 1
/* Define to the absolute path to the system regex.h */
/* #undef TRE_SYSTEM_REGEX_H_PATH */
@@ -37,10 +39,10 @@
/* #undef TRE_USE_SYSTEM_REGEX_H */
/* Define to enable wide character (wchar_t) support. */
#undef TRE_WCHAR
#define TRE_WCHAR 1
/* TRE version string. */
#define TRE_VERSION "0.7.2"
#define TRE_VERSION "0.7.5"
/* TRE version level 1. */
#define TRE_VERSION_1 0
@@ -49,4 +51,4 @@
#define TRE_VERSION_2 7
/* TRE version level 3. */
#define TRE_VERSION_3 2
#define TRE_VERSION_3 5
+51 -32
View File
@@ -4,6 +4,7 @@
CC=cl
LINK=link
RC=rc
MT=mt
############################ USER CONFIGURATION ############################
@@ -54,11 +55,19 @@ RC=rc
#
######### END SSL ########
###### RELEASE BUILD #####
#To make a release build comment out the next line a release build
#does not contain debugging symbols and can not be used to locate
#the source of a crash or bug
DEBUG=1
###### _EXTRA_ DEBUGGING #####
# We always build releases with debugging information, since otherwise
# we cannot trace the source of a crash. Plus we do not mind the extra
# performance hit caused by not enabling super-optimization, tracing
# crashes properly is more important.
# You can choose (at your own risk) to enable EVEN MORE debugging,
# note that this causes /MDd to be used instead of /MD which can make
# libraries incompatible, plus all the other side-effects such as
# requiring a different dll we do not ship (and maybe you are not even
# allowed to ship due to license agreements), etc...
# In any case, this probably should not be used, unless debugging a
# problem locally, in which case it can be useful.
#DEBUGEXTRA=1
#
#
#### END RELEASE BUILD ###
@@ -100,25 +109,30 @@ OPENSSL_LIB=/LIBPATH:"$(OPENSSL_LIB_DIR)"
!ENDIF
!ENDIF
!IFDEF DEBUG
DBGCFLAG=/MD /Zi
DBGLFLAG=/debug /debugtype:BOTH
MODDBGCFLAG=/LDd /MD /Zi
!IFDEF DEBUGEXTRA
DBGCFLAG=/MDd /Zi /Od
DBGCFLAGST=/MTd /Zi /Od
DBGLFLAG=/debug
MODDBGCFLAG=/LDd /MDd /Zi
!ELSE
DBGCFLAG=/MD /O2 /G5
MODDBGCFLAG=/LD /MD
DBGCFLAG=/MD /Zi
DBGCFLAGST=/MT /Zi
DBGLFLAG=/debug
MODDBGCFLAG=/LDd /MD /Zi
!ENDIF
FD_SETSIZE=/D FD_SETSIZE=16384
CFLAGS=$(DBGCFLAG) $(LIBCURL_INC) $(ZLIB_INC) $(OPENSSL_INC) /J /I ./INCLUDE /I ./INCLUDE/WIN32/ARES /Fosrc/ /nologo \
$(ZIPCFLAGS) $(CURLCFLAGS) $(FD_SETSIZE) $(SSLCFLAGS) $(NS_ADDRESS) /D NOSPOOF=1 /c
$(ZIPCFLAGS) $(CURLCFLAGS) $(FD_SETSIZE) $(SSLCFLAGS) $(NS_ADDRESS) /D NOSPOOF=1 /c /D _CRT_SECURE_NO_DEPRECATE /D _CRT_NONSTDC_NO_DEPRECATE /D _USE_32BIT_TIME_T
CFLAGSST=$(DBGCFLAGST) $(LIBCURL_INC) $(ZLIB_INC) $(OPENSSL_INC) /J /I ./INCLUDE /I ./INCLUDE/WIN32/ARES /Fosrc/ /nologo \
$(ZIPCFLAGS) $(CURLCFLAGS) $(FD_SETSIZE) $(SSLCFLAGS) $(NS_ADDRESS) /D NOSPOOF=1 /c /D _CRT_SECURE_NO_DEPRECATE /D _CRT_NONSTDC_NO_DEPRECATE /D _USE_32BIT_TIME_T
LFLAGS=kernel32.lib user32.lib gdi32.lib shell32.lib ws2_32.lib advapi32.lib \
dbghelp.lib oldnames.lib comctl32.lib comdlg32.lib $(ZLIB_LIB) $(ZIPLIB) \
$(OPENSSL_LIB) $(SSLLIBS) $(LIBCURL_LIB) $(CURLLIB) /def:wircd.def /implib:wircd.lib \
/nologo $(DBGLFLAG) /out:WIRCD.EXE
MODCFLAGS=$(MODDBGCFLAG) $(SSLCFLAGS) $(ZIPCFLAGS) $(CURLCFLAGS) /J /Fesrc/modules/ \
/Fosrc/modules/ /nologo $(LIBCURL_INC) $(ZLIB_INC) $(OPENSSL_INC) /I ./INCLUDE /D \
DYNAMIC_LINKING /D NOSPOOF /D MODULE_COMPILE
DYNAMIC_LINKING /D NOSPOOF /D MODULE_COMPILE /D _CRT_SECURE_NO_DEPRECATE /D _CRT_NONSTDC_NO_DEPRECATE /D _USE_32BIT_TIME_T
MODLFLAGS=/link /def:src/modules/module.def wircd.lib $(OPENSSL_LIB) $(SSLLIBS) \
$(ZLIB_LIB) $(ZIPLIB) $(LIBCURL_LIB) $(CURLLIB)
@@ -135,10 +149,10 @@ EXP_OBJ_FILES=SRC/CHANNEL.OBJ SRC/SEND.OBJ SRC/SOCKET.OBJ \
SRC/S_ERR.OBJ SRC/PACKET.OBJ SRC/S_BSD.OBJ \
SRC/S_SERV.OBJ SRC/S_USER.OBJ SRC/CHARSYS.OBJ \
SRC/VERSION.OBJ SRC/S_KLINE.OBJ SRC/S_EXTRA.OBJ SRC/IRCSPRINTF.OBJ SRC/LUSERS.OBJ \
SRC/SCACHE.OBJ SRC/ALN.OBJ SRC/BADWORDS.OBJ SRC/WEBTV.OBJ SRC/RES.OBJ SRC/MODULES.OBJ \
SRC/SCACHE.OBJ SRC/ALN.OBJ SRC/RES.OBJ SRC/MODULES.OBJ \
SRC/S_SVS.OBJ SRC/EVENTS.OBJ SRC/UMODES.OBJ SRC/AUTH.OBJ SRC/CIDR.OBJ SRC/SSL.OBJ \
SRC/RANDOM.OBJ SRC/EXTCMODES.OBJ SRC/MD5.OBJ SRC/API-ISUPPORT.OBJ SRC/API-COMMAND.OBJ \
SRC/EXTBANS.OBJ $(ZIPOBJ) $(CURLOBJ)
SRC/EXTBANS.OBJ SRC/TIMESYNCH.OBJ $(ZIPOBJ) $(CURLOBJ)
OBJ_FILES=$(EXP_OBJ_FILES) SRC/GUI.OBJ SRC/SERVICE.OBJ SRC/DEBUG.OBJ SRC/RTF.OBJ \
SRC/EDITOR.OBJ SRC/WIN32.OBJ
@@ -150,7 +164,7 @@ MOD_FILES=SRC/MODULES/L_COMMANDS.C SRC/MODULES/M_CHGHOST.C SRC/MODULES/M_SDESC.C
SRC/MODULES/M_SVSNOOP.C SRC/MODULES/M_MKPASSWD.C SRC/MODULES/M_SVSO.C \
SRC/MODULES/M_SVSNICK.C SRC/MODULES/M_ADMINCHAT.C SRC/MODULES/M_AKILL.C \
SRC/MODULES/M_CHGNAME.C SRC/MODULES/M_GUEST.C SRC/MODULES/M_HTM.C SRC/MODULES/M_LAG.C \
SRC/MODULES/M_MESSAGE.C SRC/MODULES/M_NACHAT.C SRC/MODULES/M_OPER.C \
SRC/MODULES/M_MESSAGE.C SRC/MODULES/WEBTV.C SRC/MODULES/M_NACHAT.C SRC/MODULES/M_OPER.C \
SRC/MODULES/M_PINGPONG.C SRC/MODULES/M_QUIT.C SRC/MODULES/M_RAKILL.C SRC/MODULES/M_RPING.C \
SRC/MODULES/M_SENDUMODE.C SRC/MODULES/M_SQLINE.C SRC/MODULES/M_KILL.C \
SRC/MODULES/M_TSCTL.C SRC/MODULES/M_UNKLINE.C SRC/MODULES/M_UNSQLINE.C \
@@ -174,7 +188,7 @@ MOD_FILES=SRC/MODULES/L_COMMANDS.C SRC/MODULES/M_CHGHOST.C SRC/MODULES/M_SDESC.C
SRC/MODULES/M_NICK.C SRC/MODULES/M_USER.C SRC/MODULES/M_MODE.C \
SRC/MODULES/M_WATCH.C SRC/MODULES/M_PART.C SRC/MODULES/M_JOIN.C \
SRC/MODULES/M_MOTD.C SRC/MODULES/M_OPERMOTD.C SRC/MODULES/M_BOTMOTD.C \
SRC/MODULES/M_LUSERS.C
SRC/MODULES/M_LUSERS.C SRC/MODULES/M_NAMES.C SRC/MODULES/M_SVSNOLAG.C
DLL_FILES=SRC/MODULES/M_CHGHOST.DLL SRC/MODULES/M_SDESC.DLL SRC/MODULES/M_SETIDENT.DLL \
SRC/MODULES/M_SETNAME.DLL SRC/MODULES/M_SETHOST.DLL SRC/MODULES/M_CHGIDENT.DLL \
@@ -209,7 +223,7 @@ DLL_FILES=SRC/MODULES/M_CHGHOST.DLL SRC/MODULES/M_SDESC.DLL SRC/MODULES/M_SETIDE
SRC/MODULES/M_NICK.DLL SRC/MODULES/M_USER.DLL SRC/MODULES/M_MODE.DLL \
SRC/MODULES/M_WATCH.DLL SRC/MODULES/M_PART.DLL SRC/MODULES/M_JOIN.DLL \
SRC/MODULES/M_MOTD.DLL SRC/MODULES/M_OPERMOTD.DLL SRC/MODULES/M_BOTMOTD.DLL \
SRC/MODULES/M_LUSERS.DLL \
SRC/MODULES/M_LUSERS.DLL SRC/MODULES/M_NAMES.DLL SRC/MODULES/M_SVSNOLAG.DLL \
SRC/MODULES/CLOAK.DLL
@@ -230,7 +244,7 @@ CLEAN:
-@erase src\modules\*.ilk >NUL
./UNREAL.EXE: SRC/UNREAL.OBJ SRC/WIN32/UNREAL.RES
$(LINK) advapi32.lib src/unreal.obj src/win32/unreal.res
$(LINK) $(DBGLFLAGST) advapi32.lib src/unreal.obj src/win32/unreal.res
CONF:
-@copy include\win32\setup.h include\setup.h >NUL
@@ -240,12 +254,13 @@ CONF:
./WIRCD.EXE: $(OBJ_FILES) SRC/win32/WIN32.RES
$(LINK) $(LFLAGS) $(OBJ_FILES) SRC/win32/WIN32.RES SRC/WIN32/TRE.LIB SRC/WIN32/ARESLIB.LIB /MAPINFO:LINES /MAP
$(LINK) $(LFLAGS) $(OBJ_FILES) SRC/win32/WIN32.RES SRC/WIN32/TRE.LIB SRC/WIN32/ARESLIB.LIB /MAP
-@erase src\win32\win32.res
!IFNDEF DEBUG
@echo Non Debug version built
$(MT) -manifest WIRCD.EXE.manifest -outputresource:WIRCD.EXE;1
!IFNDEF DEBUGEXTRA
@echo Standard version built
!ELSE
@echo Debug version built ...
@echo Extra-Debug version built ...
!ENDIF
#Source files
@@ -256,12 +271,6 @@ src/version.obj: src/version.c
src/parse.obj: src/parse.c $(INCLUDES)
$(CC) $(CFLAGS) src/parse.c
src/badwords.obj: src/badwords.c $(INCLUDES)
$(CC) $(CFLAGS) src/badwords.c
src/webtv.obj: src/webtv.c $(INCLUDES)
$(CC) $(CFLAGS) src/webtv.c
src/socket.obj: src/socket.c $(INCLUDES)
$(CC) $(CFLAGS) src/socket.c
@@ -311,6 +320,9 @@ src/list.obj: src/list.c $(INCLUDES)
src/res.obj: src/res.c $(INCLUDES)
$(CC) $(CFLAGS) src/res.c
src/timesynch.obj: src/timesynch.c $(INCLUDES)
$(CC) $(CFLAGS) src/timesynch.c
src/s_bsd.obj: src/s_bsd.c $(INCLUDES)
$(CC) $(CFLAGS) src/s_bsd.c
@@ -387,7 +399,7 @@ src/win32.obj: src/win32/win32.c $(INCLUDES)
$(CC) $(CFLAGS) src/win32/win32.c
src/unreal.obj: src/win32/unreal.c $(INCLUDES)
$(CC) $(CFLAGS) src/win32/unreal.c
$(CC) $(CFLAGSST) src/win32/unreal.c
src/help.obj: src/help.c $(INCLUDES)
$(CC) $(CFLAGS) src/help.c
@@ -458,7 +470,8 @@ MODULES: $(DLL_FILES)
src/modules/commands.dll: $(MOD_FILES) $(INCLUDES)
$(CC) $(MODDBGCFLAG) $(LIBCURL_INC) $(ZLIB_INC) $(OPENSSL_INC) /nologo \
$(SSLCFLAGS) $(ZIPCFLAGS) $(CURLCFLAGS) /Fosrc/modules/ \
/I ./INCLUDE /D NOSPOOF /D MODULE_COMPILE $(MOD_FILES) \
/I ./INCLUDE /D NOSPOOF /D MODULE_COMPILE /D _CRT_SECURE_NO_DEPRECATE \
/D _USE_32BIT_TIME_T $(MOD_FILES) \
$(MODLFLAGS) src/win32/tre.lib /OUT:src/modules/commands.dll
src/modules/m_chghost.dll: src/modules/m_chghost.c $(INCLUDES)
@@ -534,7 +547,7 @@ src/modules/m_lag.dll: src/modules/m_lag.c $(INCLUDES)
$(CC) $(MODCFLAGS) src/modules/m_lag.c $(MODLFLAGS)
src/modules/m_message.dll: src/modules/m_message.c $(INCLUDES)
$(CC) $(MODCFLAGS) src/modules/m_message.c $(MODLFLAGS)
$(CC) $(MODCFLAGS) src/modules/m_message.c src/modules/webtv.c $(MODLFLAGS) src/win32/tre.lib
src/modules/m_nachat.dll: src/modules/m_nachat.c $(INCLUDES)
$(CC) $(MODCFLAGS) src/modules/m_nachat.c $(MODLFLAGS)
@@ -761,9 +774,15 @@ src/modules/m_botmotd.dll: src/modules/m_botmotd.c $(INCLUDES)
src/modules/m_lusers.dll: src/modules/m_lusers.c $(INCLUDES)
$(CC) $(MODCFLAGS) src/modules/m_lusers.c $(MODLFLAGS)
src/modules/m_names.dll: src/modules/m_names.c $(INCLUDES)
$(CC) $(MODCFLAGS) src/modules/m_names.c $(MODLFLAGS)
src/modules/cloak.dll: src/modules/cloak.c $(INCLUDES)
$(CC) $(MODCFLAGS) src/modules/cloak.c $(MODLFLAGS)
src/modules/m_svsnolag.dll: src/modules/m_svsnolag.c $(INCLUDES)
$(CC) $(MODCFLAGS) src/modules/m_svsnolag.c $(MODLFLAGS)
dummy:
+5 -8
View File
@@ -21,13 +21,13 @@
CC = danger will robinson
OBJS=res.o s_bsd.o auth.o aln.o badwords.o channel.o cloak.o crule.o dbuf.o \
OBJS=timesynch.o res.o s_bsd.o auth.o aln.o channel.o cloak.o crule.o dbuf.o \
events.o fdlist.o hash.o help.o ircd.o ircsprintf.o list.o lusers.o \
match.o modules.o packet.o parse.o s_auth.o \
s_conf.o s_debug.o s_err.o s_extra.o s_kline.o \
s_misc.o s_numeric.o s_serv.o s_svs.o $(STRTOUL) socket.o \
ssl.o s_user.o charsys.o scache.o send.o support.o umodes.o \
version.o webtv.o whowas.o zip.o cidr.o random.o extcmodes.o \
version.o whowas.o zip.o cidr.o random.o extcmodes.o \
extbans.o md5.o api-isupport.o api-command.o $(URL)
SRC=$(OBJS:%.o=%.c)
@@ -105,9 +105,6 @@ dbuf.o: dbuf.c $(INCLUDES)
packet.o: packet.c $(INCLUDES)
$(CC) $(CFLAGS) -c packet.c
badwords.o: badwords.c $(INCLUDES)
$(CC) $(CFLAGS) -c badwords.c
aln.o: aln.c $(INCLUDES)
$(CC) $(CFLAGS) -c aln.c
@@ -120,9 +117,6 @@ zip.o: zip.c $(INCLUDES)
send.o: send.c $(INCLUDES)
$(CC) $(CFLAGS) -c send.c
webtv.o: webtv.c $(INCLUDES)
$(CC) $(CFLAGS) -c webtv.c
ssl.o: ssl.c $(INCLUDES)
$(CC) $(CFLAGS) -c ssl.c
@@ -183,6 +177,9 @@ lusers.o: lusers.c $(INCLUDES)
res.o: res.c $(INCLUDES) ../include/res.h
$(CC) $(CFLAGS) -c res.c
timesynch.o: timesynch.c $(INCLUDES)
$(CC) $(CFLAGS) -c timesynch.c
cloak.o: cloak.c $(INCLUDES)
$(CC) $(CFLAGS) -c cloak.c
+1
View File
@@ -116,6 +116,7 @@ void CommandDel(Command *command) {
if (!*tmp)
{
IsupportDel(IsupportFind("CMDS"));
free(tmp);
cmdstr = NULL;
}
else
+4
View File
@@ -132,6 +132,8 @@ void isupport_init(void)
IsupportAdd(NULL, "CHANTYPES", "#");
IsupportAdd(NULL, "MODES", my_itoa(MAXMODEPARAMS));
IsupportAdd(NULL, "SILENCE", my_itoa(SILENCE_LIMIT));
if (WATCH_AWAY_NOTIFICATION)
IsupportAdd(NULL, "WATCHOPTS", "A");
IsupportAdd(NULL, "WATCH", my_itoa(MAXWATCH));
IsupportAdd(NULL, "WALLCHOPS", NULL);
IsupportAdd(NULL, "MAXTARGETS", my_itoa(MAXTARGETS));
@@ -147,6 +149,8 @@ void isupport_init(void)
IsupportAdd(NULL, "MAXCHANNELS", my_itoa(MAXCHANNELSPERUSER));
IsupportAdd(NULL, "HCN", NULL);
IsupportAdd(NULL, "SAFELIST", NULL);
IsupportAdd(NULL, "NAMESX", NULL);
IsupportAdd(NULL, "UHNAMES", NULL);
if (cmdstr)
IsupportAdd(NULL, "CMDS", cmdstr);
}
+6
View File
@@ -94,6 +94,12 @@ int Auth_CheckError(ConfigEntry *ce)
ce->ce_fileptr->cf_filename, ce->ce_varlinenum);
return -1;
}
if (ce->ce_entries && ce->ce_entries->ce_next)
{
config_error("%s:%i: you may not have multiple authentication methods",
ce->ce_fileptr->cf_filename, ce->ce_varlinenum);
return -1;
}
if (ce->ce_entries)
{
if (ce->ce_entries->ce_varname)
-293
View File
@@ -1,293 +0,0 @@
/*
* IRC - Internet Relay Chat, badwords.c
* Copyleft (C) 2000 meow <csi@gnu.net>
*
* Provides functions, for loading and filtering unwanted words out of
* a string, or in this case part of a message. Please note that this
* is flawed because when mode_strip is set, mode_stripbadwords is not
* active. This is due to the structure of m_message(), and therefore
* will not change until I (or someone else) revamps the code.
*
* You can redistribute and/or modify this under the terms of the GNU
* General Public License as published by the Free Software Foundation.
*
* Disclaimer: You have no rights. Use at your own risk. Don't drink
* too much pepsi.
*/
#ifndef _WIN32
#include <unistd.h>
#endif
#include "config.h"
#include "struct.h"
#include "common.h"
#include "h.h"
#ifdef STRIPBADWORDS
#include "badwords.h"
/* This was modified a bit in order to use newconf. The loading functions
* have been trashed and integrated into the config parser. The striping
* function now only uses REPLACEWORD if no word is specifically defined
* for the word found. Also the freeing function has been ditched. -- codemastr
*/
#ifdef FAST_BADWORD_REPLACE
/*
* our own strcasestr implementation because strcasestr is often not
* available or is not working correctly (??).
*/
char *our_strcasestr(char *haystack, char *needle) {
int i;
int nlength = strlen (needle);
int hlength = strlen (haystack);
if (nlength > hlength) return NULL;
if (hlength <= 0) return NULL;
if (nlength <= 0) return haystack;
for (i = 0; i <= (hlength - nlength); i++) {
if (strncasecmp (haystack + i, needle, nlength) == 0)
return haystack + i;
}
return NULL; /* not found */
}
inline int fast_badword_match(ConfigItem_badword *badword, char *line)
{
char *p;
int bwlen = strlen(badword->word);
if ((badword->type & BADW_TYPE_FAST_L) && (badword->type & BADW_TYPE_FAST_R))
return (our_strcasestr(line, badword->word) ? 1 : 0);
p = line;
while((p = our_strcasestr(p, badword->word)))
{
if (!(badword->type & BADW_TYPE_FAST_L))
{
if ((p != line) && !iswseperator(*(p - 1))) /* aaBLA but no *BLA */
goto next;
}
if (!(badword->type & BADW_TYPE_FAST_R))
{
if (!iswseperator(*(p + bwlen))) /* BLAaa but no BLA* */
goto next;
}
/* Looks like it matched */
return 1;
next:
p += bwlen;
}
return 0;
}
/* fast_badword_replace:
* a fast replace routine written by Syzop used for replacing badwords.
* searches in line for huntw and replaces it with replacew,
* buf is used for the result and max is sizeof(buf).
* (Internal assumptions: max > 0 AND max > strlen(line)+1)
*/
inline int fast_badword_replace(ConfigItem_badword *badword, char *line, char *buf, int max)
{
/* Some aliases ;P */
char *replacew = badword->replace ? badword->replace : REPLACEWORD;
char *pold = line, *pnew = buf; /* Pointers to old string and new string */
char *poldx = line;
int replacen = -1; /* Only calculated if needed. w00t! saves us a few nanosecs? lol */
int searchn = -1;
char *startw, *endw;
char *c_eol = buf + max - 1; /* Cached end of (new) line */
int run = 1;
int cleaned = 0;
Debug((DEBUG_NOTICE, "replacing %s -> %s in '%s'", badword->word, replacew, line));
while(run) {
pold = our_strcasestr(pold, badword->word);
if (!pold)
break;
if (replacen == -1)
replacen = strlen(replacew);
if (searchn == -1)
searchn = strlen(badword->word);
/* Hunt for start of word */
if (pold > line) {
for (startw = pold; (!iswseperator(*startw) && (startw != line)); startw--);
if (iswseperator(*startw))
startw++; /* Don't point at the space/seperator but at the word! */
} else {
startw = pold;
}
if (!(badword->type & BADW_TYPE_FAST_L) && (pold != startw)) {
/* not matched */
pold++;
continue;
}
/* Hunt for end of word */
for (endw = pold; ((*endw != '\0') && (!iswseperator(*endw))); endw++);
if (!(badword->type & BADW_TYPE_FAST_R) && (pold+searchn != endw)) {
/* not matched */
pold++;
continue;
}
cleaned = 1; /* still too soon? Syzop/20050227 */
/* Do we have any not-copied-yet data? */
if (poldx != startw) {
int tmp_n = startw - poldx;
if (pnew + tmp_n >= c_eol) {
/* Partial copy and return... */
memcpy(pnew, poldx, c_eol - pnew);
*c_eol = '\0';
return 1;
}
memcpy(pnew, poldx, tmp_n);
pnew += tmp_n;
}
/* Now update the word in buf (pnew is now something like startw-in-new-buffer */
if (replacen) {
if ((pnew + replacen) >= c_eol) {
/* Partial copy and return... */
memcpy(pnew, replacew, c_eol - pnew);
*c_eol = '\0';
return 1;
}
memcpy(pnew, replacew, replacen);
pnew += replacen;
}
poldx = pold = endw;
}
/* Copy the last part */
if (*poldx) {
strncpy(pnew, poldx, c_eol - pnew);
*(c_eol) = '\0';
} else {
*pnew = '\0';
}
return cleaned;
}
#endif
/*
* Returns a string, which has been filtered by the words loaded via
* the loadbadwords() function. It's primary use is to filter swearing
* in both private and public messages
*/
void badwords_stats(aClient *sptr)
{
}
char *stripbadwords(char *str, ConfigItem_badword *start_bw, int *blocked)
{
regmatch_t pmatch[MAX_MATCH];
static char cleanstr[4096];
char buf[4096];
char *ptr;
int matchlen, m, stringlen, cleaned;
ConfigItem_badword *this_word;
*blocked = 0;
if (!start_bw)
return str;
/*
* work on a copy
*/
stringlen = strlcpy(cleanstr, StripControlCodes(str), sizeof cleanstr);
memset(&pmatch, 0, sizeof pmatch);
matchlen = 0;
buf[0] = '\0';
cleaned = 0;
for (this_word = start_bw; this_word; this_word = (ConfigItem_badword *)this_word->next)
{
#ifdef FAST_BADWORD_REPLACE
if (this_word->type & BADW_TYPE_FAST)
{
if (this_word->action == BADWORD_BLOCK)
{
if (fast_badword_match(this_word, cleanstr))
{
*blocked = 1;
return NULL;
}
}
else
{
int n;
/* fast_badword_replace() does size checking so we can use 512 here instead of 4096 */
n = fast_badword_replace(this_word, cleanstr, buf, 512);
if (!cleaned && n)
cleaned = n;
strcpy(cleanstr, buf);
memset(buf, 0, sizeof(buf)); /* regexp likes this somehow */
}
} else
if (this_word->type & BADW_TYPE_REGEX)
{
#endif
if (this_word->action == BADWORD_BLOCK)
{
if (!regexec(&this_word->expr, cleanstr, 0, NULL, 0))
{
*blocked = 1;
return NULL;
}
}
else
{
ptr = cleanstr; /* set pointer to start of string */
while (regexec(&this_word->expr, ptr, MAX_MATCH, pmatch,0) != REG_NOMATCH)
{
if (pmatch[0].rm_so == -1)
break;
m = pmatch[0].rm_eo - pmatch[0].rm_so;
if (m == 0)
break; /* anti-loop */
cleaned = 1;
matchlen += m;
strlncat(buf, ptr, sizeof buf, pmatch[0].rm_so);
if (this_word->replace)
strlcat(buf, this_word->replace, sizeof buf);
else
strlcat(buf, REPLACEWORD, sizeof buf);
ptr += pmatch[0].rm_eo; /* Set pointer after the match pos */
memset(&pmatch, 0, sizeof(pmatch));
}
/* All the better to eat you with! */
strlcat(buf, ptr, sizeof buf);
memcpy(cleanstr, buf, sizeof cleanstr);
memset(buf, 0, sizeof(buf));
if (matchlen == stringlen)
break;
}
#ifdef FAST_BADWORD_REPLACE
}
#endif
}
cleanstr[511] = '\0'; /* cutoff, just to be sure */
return (cleaned) ? cleanstr : str;
}
char inline *stripbadwords_channel(char *str, int *blocked)
{
return stripbadwords(str, conf_badword_channel, blocked);
}
char inline *stripbadwords_message(char *str, int *blocked)
{
return stripbadwords(str, conf_badword_message, blocked);
}
char inline *stripbadwords_quit(char *str, int *blocked)
{
return stripbadwords(str, conf_badword_quit, blocked);
}
#endif
+88 -941
View File
File diff suppressed because it is too large Load Diff
+35 -12
View File
@@ -90,11 +90,12 @@ struct _langlist
/* MUST be alphabetized (first column) */
static LangList langlist[] = {
{ "belarussian-w1251", "blr", LANGAV_ASCII|LANGAV_W1251 },
{ "catalan", "cat", LANGAV_ASCII|LANGAV_LATIN1 },
{ "chinese", "chi-s,chi-t,chi-j", LANGAV_GBK },
{ "chinese", "chi-j,chi-s,chi-t", LANGAV_GBK },
{ "chinese-ja", "chi-j", LANGAV_GBK },
{ "chinese-simp", "chi-s", LANGAV_GBK },
{ "chinese-trad", "chi-t", LANGAV_GBK },
{ "chinese-ja", "chi-j", LANGAV_GBK },
{ "czech", "cze-m", LANGAV_ASCII|LANGAV_W1250 },
{ "danish", "dan", LANGAV_ASCII|LANGAV_LATIN1 },
{ "dutch", "dut", LANGAV_ASCII|LANGAV_LATIN1 },
@@ -106,7 +107,7 @@ static LangList langlist[] = {
{ "hungarian", "hun", LANGAV_ASCII|LANGAV_LATIN2W1250 },
{ "icelandic", "ice", LANGAV_ASCII|LANGAV_LATIN1 },
{ "italian", "ita", LANGAV_ASCII|LANGAV_LATIN1 },
{ "latin1", "cat,dan,dut,fre,ger,ita,spa,swe", LANGAV_ASCII|LANGAV_LATIN1 },
{ "latin1", "cat,dut,fre,ger,ita,spa,swe", LANGAV_ASCII|LANGAV_LATIN1 },
{ "latin2", "hun,pol,rum", LANGAV_ASCII|LANGAV_LATIN2 },
{ "polish", "pol", LANGAV_ASCII|LANGAV_LATIN2 },
{ "polish-w1250", "pol-m", LANGAV_ASCII|LANGAV_W1250 },
@@ -117,7 +118,9 @@ static LangList langlist[] = {
{ "swedish", "swe", LANGAV_ASCII|LANGAV_LATIN1 },
{ "swiss-german", "swg", LANGAV_ASCII|LANGAV_LATIN1 },
{ "turkish", "tur", LANGAV_ASCII|LANGAV_ISO8859_9 },
{ "ukrainian-w1251", "ukr", LANGAV_ASCII|LANGAV_W1251 },
{ "windows-1250", "cze-m,pol-m,rum,slo-m,hun", LANGAV_ASCII|LANGAV_W1250 },
{ "windows-1251", "rus,ukr,blr", LANGAV_ASCII|LANGAV_W1251 },
{ NULL, NULL, 0 }
};
@@ -242,7 +245,7 @@ ILangList *e, *e_next;
*/
void charsys_addmultibyterange(char s1, char e1, char s2, char e2)
{
MBList *m = MyMallocEx(sizeof(m));
MBList *m = MyMallocEx(sizeof(MBList));
m->s1 = s1;
m->e1 = e1;
@@ -369,7 +372,7 @@ int charsys_postconftest(void)
int x=0;
if ((langav & LANGAV_ASCII) && (langav & LANGAV_GBK))
{
config_error("ERROR: set::accept-language specifies incorrect combination "
config_error("ERROR: set::allowed-nickchars specifies incorrect combination "
"of languages: high-ascii languages (such as german, french, etc) "
"cannot be mixed with chinese/..");
return -1;
@@ -390,7 +393,7 @@ int x=0;
x++;
if (x > 1)
{
config_status("WARNING: set::accept-language: "
config_status("WARNING: set::allowed-nickchars: "
"Mixing of charsets (eg: latin1+latin2) can cause display problems");
}
return 1;
@@ -405,7 +408,7 @@ int mid;
while (start <= stop)
{
mid = (start+stop)/2;
if (smycmp(name, langlist[mid].directive) < 0)
if (!langlist[mid].directive || smycmp(name, langlist[mid].directive) < 0)
stop = mid-1;
else if (strcmp(name, langlist[mid].directive) == 0)
return &langlist[mid];
@@ -427,7 +430,7 @@ LangList *l = charsys_find_language(name);
}
if (!strcmp(name, "euro-west"))
{
config_error("set::accept-language: ERROR: 'euro-west' got renamed to 'latin1'");
config_error("set::allowed-nickchars: ERROR: 'euro-west' got renamed to 'latin1'");
return 0;
}
return 0;
@@ -472,7 +475,7 @@ char tmp[512], *lang, *p;
void charsys_add_language(char *name)
{
char latin1=0, latin2=0, w1250=0, chinese=0;
char latin1=0, latin2=0, w1250=0, w1251=0, chinese=0;
/** Note: there could well be some characters missing in the lists below.
* While I've seen other altnernatives that just allow pretty much
@@ -493,6 +496,8 @@ char latin1=0, latin2=0, w1250=0, chinese=0;
latin2 = 1;
else if (!strcmp(name, "windows-1250"))
w1250 = 1;
else if (!strcmp(name, "windows-1251"))
w1251 = 1;
else if (!strcmp(name, "chinese") || !strcmp(name, "gbk"))
chinese = 1;
@@ -548,8 +553,8 @@ char latin1=0, latin2=0, w1250=0, chinese=0;
if (latin1 || !strcmp(name, "catalan"))
{
/* supplied by Trocotronic */
/* a`, A`, e`, E`, e', E', i', I', o`, O`, o', O', u', U', i", I", u", U" */
charsys_addallowed("àÀèÈéÉíÍòÒóÓúÚïÏüÜ");
/* a`, A`, e`, weird-c, weird-C, E`, e', E', i', I', o`, O`, o', O', u', U', i", I", u", U", weird-dot */
charsys_addallowed("àÀçÇèÈéÉíÍòÒóÓúÚïÏüÜ");
}
if (latin1 || !strcmp(name, "swedish"))
{
@@ -603,13 +608,31 @@ char latin1=0, latin2=0, w1250=0, chinese=0;
}
/* [windows 1251] */
if (!strcmp(name, "russian-w1251"))
if (w1251 || !strcmp(name, "russian-w1251"))
{
/* supplied by Roman Parkin:
* 128-159 and 223-254
*/
charsys_addallowed("ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ¨¸");
}
if (w1251 || !strcmp(name, "belarussian-w1251"))
{
/* supplied by Bock (Samets Anton) & ss:
* 128-159, 161, 162, 178, 179 and 223-254
* Corrected 01.11.2006 to more "correct" behavior by Bock
*/
charsys_addallowed("ÀÁÂÃÄŨÆÇ²ÉÊËÌÍÎÏÐÑÒÓ¡ÔÕÖרÛÜÝÞßàáâãä叿ç³éêëìíîïðñòó¢ôõö÷øûüýþÿ");
}
if (w1251 || !strcmp(name, "ukrainian-w1251"))
{
/* supplied by Anton Samets & ss:
* 128-159, 170, 175, 178, 179, 186, 191 and 223-254
* Corrected 01.11.2006 to more "correct" behavior by core
*/
charsys_addallowed("ÀÁÂÃ¥ÄŪÆÇȲ¯ÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÜÞßàáâã´äåºæç賿éêëìíîïðñòóôõö÷øùüþÿ");
}
/* [GREEK] */
if (!strcmp(name, "greek"))
+6 -3
View File
@@ -150,7 +150,7 @@ unsigned long our_crc32(const unsigned char *s, unsigned int len)
}
/* mode = 0, just use strncpyzt, 1 = Realloc new and return new pointer */
char *make_virthost(char *curr, char *new, int mode)
char *make_virthost(aClient *sptr, char *curr, char *new, int mode)
{
char host[256], *mask, *x, *p, *q;
@@ -163,11 +163,14 @@ char host[256], *mask, *x, *p, *q;
*q = '\0';
/* Call the cloaking layer */
mask = RCallbacks[CALLBACKTYPE_CLOAK]->func.pcharfunc(host);
if (RCallbacks[CALLBACKTYPE_CLOAK_EX])
mask = RCallbacks[CALLBACKTYPE_CLOAK_EX]->func.pcharfunc(sptr, host);
else
mask = RCallbacks[CALLBACKTYPE_CLOAK]->func.pcharfunc(host);
if (mode == 0)
{
strncpyzt(new, mask, HOSTLEN); /* */
strlcpy(new, mask, HOSTLEN + 1);
return NULL;
}
if (new)
+16 -14
View File
@@ -230,7 +230,7 @@ char *p = ban+3, symbol = '\0';
}
for (lp = sptr->user->channel; lp; lp = lp->next)
{
if (!match(p, lp->chptr->chname))
if (!match_esc(p, lp->chptr->chname))
{
/* Channel matched, check symbol if needed (+/%/@/etc) */
if (symbol)
@@ -250,13 +250,8 @@ char *ban = banin + 3;
if (type != BANCHK_MSG)
return 0;
if ((ban_realhost && !match(ban, ban_realhost)) ||
(ban_virthost && !match(ban, ban_virthost)) ||
(ban_ip && !match(ban, ban_ip)))
return 1;
return 0;
return extban_is_banned_helper(ban);
}
int extban_moden_is_banned(aClient *sptr, aChannel *chptr, char *banin, int type)
@@ -269,12 +264,7 @@ char *ban = banin + 3;
if (has_voice(sptr, chptr))
return 0;
if ((ban_realhost && !match(ban, ban_realhost)) ||
(ban_virthost && !match(ban, ban_virthost)) ||
(ban_ip && !match(ban, ban_ip)))
return 1;
return 0;
return extban_is_banned_helper(ban);
}
/** Some kind of general conv_param routine,
@@ -323,10 +313,11 @@ static char retbuf[REALLEN + 8];
mask[REALLEN + 3] = '\0';
return retbuf;
}
int extban_moder_is_banned(aClient *sptr, aChannel *chptr, char *banin, int type)
{
char *ban = banin+3;
if (!match(ban, sptr->info))
if (!match_esc(ban, sptr->info))
return 1;
return 0;
}
@@ -341,17 +332,28 @@ void extban_init(void)
req.is_banned = extban_modec_is_banned;
req.is_ok = extban_modec_is_ok;
ExtbanAdd(NULL, req);
memset(&req, 0, sizeof(ExtbanInfo));
req.flag = 'q';
req.conv_param = extban_conv_param_nuh;
req.is_banned = extban_modeq_is_banned;
ExtbanAdd(NULL, req);
memset(&req, 0, sizeof(ExtbanInfo));
req.flag = 'n';
req.conv_param = extban_conv_param_nuh;
req.is_banned = extban_moden_is_banned;
ExtbanAdd(NULL, req);
memset(&req, 0, sizeof(ExtbanInfo));
req.flag = 'r';
req.conv_param = extban_moder_conv_param;
req.is_banned = extban_moder_is_banned;
req.options = EXTBOPT_CHSVSMODE;
ExtbanAdd(NULL, req);
/* When adding new extbans, be sure to always add a prior memset like above
* so you don't "inherit" old options (we are 2005 and the 20 nanoseconds
* per-boot/rehash is NOT EXACTLY a problem....) -- Syzop.
*/
}
+87 -16
View File
@@ -1,6 +1,6 @@
/************************************************************************
* IRC - Internet Relay Chat, s_unreal.c
* (C) 2003 Bram Matthys (Syzop) and the UnrealIRCd Team
* IRC - Internet Relay Chat, extcmodes.c
* (C) 2003-2007 Bram Matthys (Syzop) and the UnrealIRCd Team
*
* See file AUTHORS in IRC package for additional names of
* the programmers.
@@ -151,7 +151,7 @@ void extcmode_init(void)
load_extendedchanmodes();
}
Cmode *CmodeAdd(Module *reserved, CmodeInfo req, Cmode_t *mode)
Cmode *CmodeAdd(Module *module, CmodeInfo req, Cmode_t *mode)
{
short i = 0, j = 0;
char tmpbuf[512];
@@ -162,17 +162,23 @@ Cmode *CmodeAdd(Module *reserved, CmodeInfo req, Cmode_t *mode)
break;
else if (Channelmode_Table[i].flag == req.flag)
{
if (reserved)
reserved->errorcode = MODERR_EXISTS;
return NULL;
if (Channelmode_Table[i].unloaded)
{
Channelmode_Table[i].unloaded = 0;
break;
} else {
if (module)
module->errorcode = MODERR_EXISTS;
return NULL;
}
}
i++;
}
if (i == EXTCMODETABLESZ)
{
Debug((DEBUG_DEBUG, "CmodeAdd failed, no space"));
if (reserved)
reserved->errorcode = MODERR_NOSPACE;
if (module)
module->errorcode = MODERR_NOSPACE;
return NULL;
}
*mode = Channelmode_Table[i].mode;
@@ -186,12 +192,20 @@ Cmode *CmodeAdd(Module *reserved, CmodeInfo req, Cmode_t *mode)
Channelmode_Table[i].free_param = req.free_param;
Channelmode_Table[i].dup_struct = req.dup_struct;
Channelmode_Table[i].sjoin_check = req.sjoin_check;
Channelmode_Table[i].owner = module;
for (j = 0; j < EXTCMODETABLESZ; j++)
if (Channelmode_Table[j].flag)
if (j > Channelmode_highest)
Channelmode_highest = j;
if (reserved)
reserved->errorcode = MODERR_NOERROR;
if (module)
{
ModuleObject *cmodeobj = MyMallocEx(sizeof(ModuleObject));
cmodeobj->object.cmode = &Channelmode_Table[i];
cmodeobj->type = MOBJ_CMODE;
AddListItem(cmodeobj, module->objects);
module->errorcode = MODERR_NOERROR;
}
if (loop.ircd_booted)
{
make_cmodestr();
@@ -203,20 +217,75 @@ Cmode *CmodeAdd(Module *reserved, CmodeInfo req, Cmode_t *mode)
return &(Channelmode_Table[i]);
}
void CmodeDel(Cmode *cmode)
void unload_extcmode_commit(Cmode *cmode)
{
char tmpbuf[512];
/* TODO: remove from all channel */
if (cmode)
cmode->flag = '\0';
char tmpbuf[512];
aChannel *chptr;
if (!cmode)
return;
if (cmode->paracount == 1)
{
/* If we don't do this, we will crash anyway.. but then with severe corruption / suckyness */
ircd_log(LOG_ERROR, "FATAL ERROR: ChannelMode module for chanmode +%c is misbehaving: "
"all chanmode modules with parameters should be tagged PERManent.", cmode->flag);
abort();
}
for (chptr = channel; chptr; chptr = chptr->nextch)
if (chptr->mode.extmode && cmode->mode)
{
/* Unset channel mode and send MODE -<char> to other servers */
sendto_channel_butserv(chptr, &me, ":%s MODE %s -%c",
me.name, chptr->chname, cmode->flag);
sendto_serv_butone(NULL, ":%s MODE %s -%c 0",
me.name, chptr->chname, cmode->flag);
chptr->mode.extmode &= ~cmode->mode;
}
cmode->flag = '\0';
make_cmodestr();
make_extcmodestr();
/* Not unloadable, so module object support is not needed (yet) */
ircsprintf(tmpbuf, CHPAR1 "%s," CHPAR2 "%s," CHPAR3 "%s," CHPAR4 "%s",
EXPAR1, EXPAR2, EXPAR3, EXPAR4);
IsupportSetValue(IsupportFind("CHANMODES"), tmpbuf);
}
void CmodeDel(Cmode *cmode)
{
/* It would be nice if we could abort() here if a parameter module is trying to unload which is extremely dangerous/crashy/disallowed */
if (loop.ircd_rehashing)
cmode->unloaded = 1;
else
unload_extcmode_commit(cmode);
if (cmode->owner)
{
ModuleObject *cmodeobj;
for (cmodeobj = cmode->owner->objects; cmodeobj; cmodeobj = cmodeobj->next) {
if (cmodeobj->type == MOBJ_CMODE && cmodeobj->object.cmode == cmode) {
DelListItem(cmodeobj, cmode->owner->objects);
MyFree(cmodeobj);
break;
}
}
cmode->owner = NULL;
}
}
void unload_all_unused_extcmodes(void)
{
int i;
for (i = 0; i < EXTCMODETABLESZ; i++)
if (Channelmode_Table[i].flag && Channelmode_Table[i].unloaded)
{
unload_extcmode_commit(&Channelmode_Table[i]);
}
}
/** searches in chptr extmode parameters and returns entry or NULL. */
CmodeParam *extcmode_get_struct(CmodeParam *p, char ch)
{
@@ -249,6 +318,7 @@ CmodeParam *extcmode_duplicate_paramlist(CmodeParam *lst)
}
}
n = tbl->dup_struct(lst);
n->next = n->prev = NULL; /* safety (required!) */
if (head)
{
AddListItem(n, head);
@@ -454,6 +524,7 @@ aModejEntry *r = (aModejEntry *)r_in;
aModejEntry *w = (aModejEntry *)MyMalloc(sizeof(aModejEntry));
memcpy(w, r, sizeof(aModejEntry));
w->next = w->prev = NULL;
return (CmodeParam *)w;
}
+63 -21
View File
@@ -480,7 +480,7 @@ void clear_watch_hash_table(void)
/*
* add_to_watch_hash_table
*/
int add_to_watch_hash_table(char *nick, aClient *cptr)
int add_to_watch_hash_table(char *nick, aClient *cptr, int awaynotify)
{
unsigned int hashv;
aWatch *anptr;
@@ -516,11 +516,13 @@ int add_to_watch_hash_table(char *nick, aClient *cptr)
lp = anptr->watch;
anptr->watch = make_link();
anptr->watch->value.cptr = cptr;
anptr->watch->flags = awaynotify;
anptr->watch->next = lp;
lp = make_link();
lp->next = cptr->watch;
lp->value.wptr = anptr;
lp->flags = awaynotify;
cptr->watch = lp;
cptr->watches++;
}
@@ -536,6 +538,10 @@ int hash_check_watch(aClient *cptr, int reply)
unsigned int hashv;
aWatch *anptr;
Link *lp;
int awaynotify = 0;
if ((reply == RPL_GONEAWAY) || (reply == RPL_NOTAWAY) || (reply == RPL_REAWAY))
awaynotify = 1;
/* Get us the right bucket */
@@ -554,22 +560,46 @@ int hash_check_watch(aClient *cptr, int reply)
/* Send notifies out to everybody on the list in header */
for (lp = anptr->watch; lp; lp = lp->next)
{
if (IsWebTV(lp->value.cptr))
sendto_one(lp->value.cptr, ":IRC!IRC@%s PRIVMSG %s :%s (%s@%s) "
" %s IRC",
me.name, lp->value.cptr->name, cptr->name,
(IsPerson(cptr) ? cptr->user->username : "<N/A>"),
(IsPerson(cptr) ?
(IsHidden(cptr) ? cptr->user->virthost : cptr->
user->realhost) : "<N/A>"), reply == RPL_LOGON ?
"is now on" : "has left");
else
sendto_one(lp->value.cptr, rpl_str(reply), me.name,
lp->value.cptr->name, cptr->name,
(IsPerson(cptr) ? cptr->user->username : "<N/A>"),
(IsPerson(cptr) ?
(IsHidden(cptr) ? cptr->user->virthost : cptr->
user->realhost) : "<N/A>"), anptr->lasttime, cptr->info);
if (!awaynotify)
{
/* Most common: LOGON or LOGOFF */
if (IsWebTV(lp->value.cptr))
sendto_one(lp->value.cptr, ":IRC!IRC@%s PRIVMSG %s :%s (%s@%s) "
" %s IRC",
me.name, lp->value.cptr->name, cptr->name,
(IsPerson(cptr) ? cptr->user->username : "<N/A>"),
(IsPerson(cptr) ?
(IsHidden(cptr) ? cptr->user->virthost : cptr->
user->realhost) : "<N/A>"), reply == RPL_LOGON ?
"is now on" : "has left");
else
sendto_one(lp->value.cptr, rpl_str(reply), me.name,
lp->value.cptr->name, cptr->name,
(IsPerson(cptr) ? cptr->user->username : "<N/A>"),
(IsPerson(cptr) ?
(IsHidden(cptr) ? cptr->user->virthost : cptr->
user->realhost) : "<N/A>"), anptr->lasttime, cptr->info);
} else
{
/* AWAY or UNAWAY */
if (!lp->flags)
continue; /* skip away/unaway notification for users not interested in them */
if (reply == RPL_NOTAWAY)
sendto_one(lp->value.cptr, rpl_str(reply), me.name,
lp->value.cptr->name, cptr->name,
(IsPerson(cptr) ? cptr->user->username : "<N/A>"),
(IsPerson(cptr) ?
(IsHidden(cptr) ? cptr->user->virthost : cptr->
user->realhost) : "<N/A>"), cptr->user->lastaway);
else /* RPL_GONEAWAY / RPL_REAWAY */
sendto_one(lp->value.cptr, rpl_str(reply), me.name,
lp->value.cptr->name, cptr->name,
(IsPerson(cptr) ? cptr->user->username : "<N/A>"),
(IsPerson(cptr) ?
(IsHidden(cptr) ? cptr->user->virthost : cptr->
user->realhost) : "<N/A>"), cptr->user->lastaway, cptr->user->away);
}
}
return 0;
@@ -751,9 +781,17 @@ struct MODVAR ThrottlingBucket *ThrottlingHash[THROTTLING_HASH_SIZE+1];
void init_throttling_hash()
{
long v;
bzero(ThrottlingHash, sizeof(ThrottlingHash));
EventAddEx(NULL, "bucketcleaning", (THROTTLING_PERIOD ? THROTTLING_PERIOD : 120)/2, 0,
e_clean_out_throttling_buckets, NULL);
if (!THROTTLING_PERIOD)
v = 120;
else
{
v = THROTTLING_PERIOD/2;
if (v > 5)
v = 5; /* accuracy, please */
}
EventAddEx(NULL, "bucketcleaning", v, 0, e_clean_out_throttling_buckets, NULL);
}
int hash_throttling(struct IN_ADDR *in)
@@ -813,10 +851,14 @@ EVENT(e_clean_out_throttling_buckets)
{ p = strchr(serveropts, 'm'); *p = '\0'; }
if (!Hooks[18] && strchr(serveropts, 'M'))
{ p = strchr(serveropts, 'M'); *p = '\0'; }
if (!Hooks[49] && strchr(serveropts, 'R'))
{ p = strchr(serveropts, 'R'); *p = '\0'; }
if (Hooks[17] && !strchr(serveropts, 'm'))
*p++ = 'm';
if (Hooks[18] && !strchr(serveropts, 'M'))
*p++ = 'M';
if (Hooks[49] && !strchr(serveropts, 'R'))
*p++ = 'R';
*p = '\0';
for (mi = Modules; mi; mi = mi->next)
if (!(mi->options & MOD_OPT_OFFICIAL))
@@ -869,9 +911,9 @@ int throttle_can_connect(aClient *sptr, struct IN_ADDR *in)
{
if (Find_except(sptr, Inet_ia2p(in), CONF_EXCEPT_THROTTLE))
return 2;
b->count++;
if (b->count > (THROTTLING_COUNT ? THROTTLING_COUNT : 3))
if (b->count+1 > (THROTTLING_COUNT ? THROTTLING_COUNT : 3))
return 0;
b->count++;
return 2;
}
}
+284 -32
View File
@@ -37,6 +37,7 @@ Computing Center and Jarkko Oikarinen";
#ifndef _WIN32
#include <sys/file.h>
#include <pwd.h>
#include <grp.h>
#include <sys/time.h>
#else
#include <io.h>
@@ -96,6 +97,10 @@ extern MODVAR aMotd *rules;
extern MODVAR aMotd *botmotd;
extern MODVAR aMotd *smotd;
MODVAR MemoryInfo StatsZ;
#ifndef _WIN32
uid_t irc_uid = 0;
gid_t irc_gid = 0;
#endif
int R_do_dns, R_fin_dns, R_fin_dnsc, R_fail_dns, R_do_id, R_fin_id, R_fail_id;
@@ -141,6 +146,9 @@ char trouble_info[1024];
extern void url_init(void);
#endif
time_t highesttimeofday=0, oldtimeofday=0, lasthighwarn=0;
void save_stats(void)
{
FILE *stats = fopen("ircd.stats", "w");
@@ -166,7 +174,11 @@ extern void init_glines(void);
extern void tkl_init(void);
MODVAR TS last_garbage_collect = 0;
#ifndef _WIN32
MODVAR char **myargv;
#else
LPCSTR cmdLine;
#endif
int portnum = -1; /* Server port number, listening this */
char *configfile = CONFIGFILE; /* Server configuration file */
int debuglevel = 10; /* Server debug level */
@@ -357,7 +369,7 @@ void server_reboot(char *mesg)
if (!IsService)
{
CleanUp();
(void)execv(myargv[0], myargv);
WinExec(cmdLine, SW_SHOWDEFAULT);
}
#endif
#ifndef _WIN32
@@ -450,7 +462,7 @@ static TS try_connections(TS currenttime)
/*
* Also when already connecting! (update holdtimes) --SRB
*/
if (!(aconf->options & CONNECT_AUTO))
if (!(aconf->options & CONNECT_AUTO) || (aconf->flag.temporary == 1))
continue;
cltmp = aconf->class;
@@ -486,7 +498,7 @@ static TS try_connections(TS currenttime)
&& crule_eval(deny->rule))
break;
if (connect_server(aconf, (aClient *)NULL,
if (!deny && connect_server(aconf, (aClient *)NULL,
(struct hostent *)NULL) == 0)
sendto_realops
("Connection to %s[%s] activated.",
@@ -586,12 +598,11 @@ extern TS check_pings(TS currenttime)
reason : "no reason");
if (bconf->reason) {
if (IsPerson(cptr))
snprintf(banbuf,
sizeof banbuf - 1,
"User has been banned (%s)",
bconf->reason);
snprintf(banbuf, sizeof banbuf - 1,
"Banned (%s)", bconf->reason);
snprintf(banbuf, sizeof banbuf - 1,
"User has been banned (%s)", bconf->reason);
else
snprintf(banbuf, sizeof banbuf - 1,
"Banned (%s)", bconf->reason);
(void)exit_client(cptr, cptr, &me,
banbuf);
} else {
@@ -610,12 +621,12 @@ extern TS check_pings(TS currenttime)
/* Do spamfilter 'user' banchecks.. */
if (loop.do_bancheck_spamf_user && IsPerson(cptr))
{
if (find_spamfilter_user(cptr) == FLUSH_BUFFER)
if (find_spamfilter_user(cptr, SPAMFLAG_NOWARN) == FLUSH_BUFFER)
continue;
}
if (loop.do_bancheck_spamf_away && IsPerson(cptr) && cptr->user->away)
{
if (dospamfilter(cptr, cptr->user->away, SPAMF_AWAY, NULL) == FLUSH_BUFFER)
if (dospamfilter(cptr, cptr->user->away, SPAMF_AWAY, NULL, SPAMFLAG_NOWARN, NULL) == FLUSH_BUFFER)
continue;
}
/*
@@ -846,7 +857,7 @@ int error = 0;
#ifdef ZIP_LINKS
runtime = zlibVersion();
compiledfor = ZLIB_VERSION;
if (strcasecmp(compiledfor, runtime))
if (*compiledfor != *runtime)
{
version_check_logerror("Zlib version mismatch: compiled for '%s', library is '%s'",
compiledfor, runtime);
@@ -900,6 +911,139 @@ int error = 0;
extern time_t TSoffset;
extern int unreal_time_synch(int timeout);
extern MODVAR Event *events;
extern struct MODVAR ThrottlingBucket *ThrottlingHash[THROTTLING_HASH_SIZE+1];
/** This functions resets a couple of timers and does other things that
* are absolutely cruicial when the clock is adjusted - particularly
* when the clock goes backwards. -- Syzop
*/
void fix_timers(void)
{
int i, cnt;
aClient *acptr;
Event *e;
struct ThrottlingBucket *n;
struct ThrottlingBucket z = { NULL, NULL, {0}, 0, 0};
/* Client time stuff */
for (i = 0; i <= LastSlot; i++)
{
if (!(acptr = local[i]) || IsMe(acptr))
continue;
/* all (servers AND users) */
if (MyConnect(acptr))
{
if (acptr->since > TStime())
{
Debug((DEBUG_DEBUG, "fix_timers(): %s: acptr->since %ld -> %ld",
acptr->name, acptr->since, TStime()));
acptr->since = TStime();
}
if (acptr->lasttime > TStime())
{
Debug((DEBUG_DEBUG, "fix_timers(): %s: acptr->lasttime %ld -> %ld",
acptr->name, acptr->lasttime, TStime()));
acptr->lasttime = TStime();
}
if (acptr->last > TStime())
{
Debug((DEBUG_DEBUG, "fix_timers(): %s: acptr->last %ld -> %ld",
acptr->name, acptr->last, TStime()));
acptr->last = TStime();
}
}
/* users */
if (MyClient(acptr))
{
if (acptr->nextnick > TStime())
{
Debug((DEBUG_DEBUG, "fix_timers(): %s: acptr->nextnick %ld -> %ld",
acptr->name, acptr->nextnick, TStime()));
acptr->nextnick = TStime();
}
if (acptr->nexttarget > TStime())
{
Debug((DEBUG_DEBUG, "fix_timers(): %s: acptr->nexttarget %ld -> %ld",
acptr->name, acptr->nexttarget, TStime()));
acptr->nexttarget = TStime();
}
}
}
/* Reset all event timers */
for (e = events; e; e = e->next)
{
if (e->last > TStime())
{
Debug((DEBUG_DEBUG, "fix_timers(): %s: e->last %ld -> %ld",
e->name, e->last, TStime()-1));
e->last = TStime()-1;
}
}
/* Just flush all throttle stuff... */
cnt = 0;
for (i = 0; i < THROTTLING_HASH_SIZE; i++)
for (n = ThrottlingHash[i]; n; n = n->next)
{
z.next = (struct ThrottlingBucket *) DelListItem(n, ThrottlingHash[i]);
cnt++;
MyFree(n);
n = &z;
}
Debug((DEBUG_DEBUG, "fix_timers(): removed %d throttling item(s)", cnt));
Debug((DEBUG_DEBUG, "fix_timers(): updating nextping/nextconnect/nextdnscheck/nextexpire (%ld/%ld/%ld/%ld)",
nextping, nextconnect, nextdnscheck, nextexpire));
nextping = nextconnect = nextdnscheck = nextexpire = 0;
}
#ifndef _WIN32
static void generate_cloakkeys()
{
/* Generate 3 cloak keys */
#define GENERATE_CLOAKKEY_MINLEN 10
#define GENERATE_CLOAKKEY_MAXLEN 20 /* Length of cloak keys to generate. */
char keyBuf[GENERATE_CLOAKKEY_MAXLEN + 1];
int keyNum;
int keyLen;
int charIndex;
int value;
fprintf(stderr, "Here are 3 random cloak keys:\n");
for (keyNum = 0; keyNum < 3; ++keyNum)
{
keyLen = (getrandom8() % (GENERATE_CLOAKKEY_MAXLEN - GENERATE_CLOAKKEY_MINLEN + 1)) + GENERATE_CLOAKKEY_MINLEN;
for (charIndex = 0; charIndex < keyLen; ++charIndex)
{
switch (getrandom8() % 3)
{
case 0: /* Uppercase. */
keyBuf[charIndex] = (char)('A' + (getrandom8() % ('Z' - 'A')));
break;
case 1: /* Lowercase. */
keyBuf[charIndex] = (char)('a' + (getrandom8() % ('z' - 'a')));
break;
case 2: /* Digit. */
keyBuf[charIndex] = (char)('0' + (getrandom8() % ('9' - '0')));
break;
}
}
keyBuf[keyLen] = '\0';
(void)fprintf(stderr, "%s\n", keyBuf);
}
}
#endif
#ifndef _WIN32
int main(int argc, char *argv[])
#else
@@ -913,6 +1057,8 @@ int InitwIRCD(int argc, char *argv[])
uid_t uid, euid;
gid_t gid, egid;
TS delay = 0;
struct passwd *pw;
struct group *gr;
#endif
#ifdef HAVE_PSTAT
union pstun pstats;
@@ -940,13 +1086,31 @@ int InitwIRCD(int argc, char *argv[])
(void)signal(SIGUSR1, s_monitor);
# endif
#endif
#if defined(IRC_USER) && defined(IRC_GROUP)
if ((int)getuid() == 0) {
pw = getpwnam(IRC_USER);
gr = getgrnam(IRC_GROUP);
if ((pw == NULL) || (gr == NULL)) {
fprintf(stderr, "ERROR: Unable to lookup to specified user (IRC_USER) or group (IRC_GROUP): %s\n", strerror(errno));
exit(-1);
} else {
irc_uid = pw->pw_uid;
irc_gid = gr->gr_gid;
}
}
#endif
#ifdef CHROOTDIR
if (chdir(dpath)) {
perror("chdir");
fprintf(stderr, "ERROR: Unable to change to directory '%s'\n", dpath);
exit(-1);
}
ircd_res_init();
if (geteuid() != 0)
fprintf(stderr, "WARNING: IRCd compiled with CHROOTDIR but effective user id is not root!? "
"Booting is very likely to fail...\n");
init_resolver(1);
{
struct stat sb;
mode_t umaskold;
@@ -994,7 +1158,11 @@ int InitwIRCD(int argc, char *argv[])
exit(5);
}
#endif /*CHROOTDIR*/
#ifndef _WIN32
myargv = argv;
#else
cmdLine = GetCommandLine();
#endif
#ifndef _WIN32
(void)umask(077); /* better safe than sorry --SRB */
#else
@@ -1092,6 +1260,14 @@ int InitwIRCD(int argc, char *argv[])
}
p = *++argv;
argc--;
#ifdef AUTHENABLE_UNIXCRYPT
if ((type == AUTHTYPE_UNIXCRYPT) && (strlen(p) > 8))
{
printf("WARNING: Password truncated to 8 characters due to 'crypt' algorithm. "
"You are suggested to use the 'md5' algorithm instead.");
p[8] = '\0';
}
#endif
if (!(result = Auth_Make(type, p))) {
printf("Authentication failed\n");
exit(0);
@@ -1164,6 +1340,11 @@ int InitwIRCD(int argc, char *argv[])
}
# endif
exit(0);
#endif
#ifndef _WIN32
case 'k':
generate_cloakkeys();
exit(0);
#endif
default:
bad_command();
@@ -1206,14 +1387,19 @@ int InitwIRCD(int argc, char *argv[])
}
#endif
/* HACK! This ifndef should be removed when the restart-on-w32-brings-up-dialog bug
* is fixed. This is just an ugly "ignore the invalid parameter" thing ;). -- Syzop
*/
#ifndef _WIN32
if (argc > 0)
return bad_command(); /* This should exit out */
#endif
#ifndef _WIN32
fprintf(stderr, "%s", unreallogo);
fprintf(stderr, " v%s\n", VERSIONONLY);
fprintf(stderr, " using %s\n", tre_version());
#ifdef USE_SSL
fprintf(stderr, " using %s\n", OPENSSL_VERSION_TEXT);
fprintf(stderr, " using %s\n", SSLeay_version(SSLEAY_VERSION));
#endif
#ifdef ZIP_LINKS
fprintf(stderr, " using zlib %s\n", zlibVersion());
@@ -1234,7 +1420,7 @@ int InitwIRCD(int argc, char *argv[])
DeleteTempModules();
booted = FALSE;
/* Hack to stop people from being able to read the config file */
#if !defined(_WIN32) && !defined(_AMIGA) && DEFAULT_PERMISSIONS != 0
#if !defined(_WIN32) && !defined(_AMIGA) && !defined(OSXTIGER) && DEFAULT_PERMISSIONS != 0
chmod(CPATH, DEFAULT_PERMISSIONS);
#endif
init_dynconf();
@@ -1339,6 +1525,7 @@ int InitwIRCD(int argc, char *argv[])
Debug((DEBUG_ERROR, "Port = %d", portnum));
if (inetport(&me, conf_listen->ip, portnum))
exit(1);
set_non_blocking(me.fd, &me);
conf_listen->options |= LISTENER_BOUND;
me.umodes = conf_listen->options;
conf_listen->listener = &me;
@@ -1389,7 +1576,7 @@ int InitwIRCD(int argc, char *argv[])
R_fin_id = strlen(REPORT_FIN_ID);
R_fail_id = strlen(REPORT_FAIL_ID);
#if !defined(IRC_UID) && !defined(_WIN32)
#if !defined(IRC_USER) && !defined(_WIN32)
if ((uid != euid) && !euid) {
(void)fprintf(stderr,
"ERROR: do not run ircd setuid root. Make it setuid a normal user.\n");
@@ -1397,29 +1584,42 @@ int InitwIRCD(int argc, char *argv[])
}
#endif
#if defined(IRC_UID) && defined(IRC_GID)
#if defined(IRC_USER) && defined(IRC_GROUP)
if ((int)getuid() == 0) {
if ((IRC_UID == 0) || (IRC_GID == 0)) {
/* NOTE: irc_uid/irc_gid have been looked up earlier, before the chrooting code */
if ((irc_uid == 0) || (irc_gid == 0)) {
(void)fprintf(stderr,
"ERROR: SETUID and SETGID have not been set properly"
"\nPlease read your documentation\n(HINT:SETUID or SETGID can not be 0)\n");
"\nPlease read your documentation\n(HINT: IRC_USER and IRC_GROUP in include/config.h cannot be root/wheel)\n");
exit(-1);
} else {
/*
* run as a specified user
*/
(void)fprintf(stderr,
"WARNING: ircd invoked as root\n");
(void)fprintf(stderr, " changing to uid %d\n",
IRC_UID);
(void)fprintf(stderr, " changing to gid %d\n",
IRC_GID);
(void)setgid(IRC_GID);
(void)setuid(IRC_UID);
(void)fprintf(stderr, "WARNING: ircd invoked as root\n");
(void)fprintf(stderr, " changing to uid %d\n", irc_uid);
(void)fprintf(stderr, " changing to gid %d\n", irc_gid);
if (setgid(irc_gid))
{
fprintf(stderr, "ERROR: Unable to change group: %s\n", strerror(errno));
exit(-1);
}
if (setuid(irc_uid))
{
fprintf(stderr, "ERROR: Unable to change userid: %s\n", strerror(errno));
exit(-1);
}
}
}
#endif
if (TIMESYNCH)
{
if (!unreal_time_synch(TIMESYNCH_TIMEOUT))
ircd_log(LOG_ERROR, "TIME SYNCH: Unable to synchronize time: %s. This happens sometimes, no error on your part.",
unreal_time_synch_error());
}
write_pidfile();
Debug((DEBUG_NOTICE, "Server ready..."));
SetupEvents();
@@ -1474,14 +1674,66 @@ void SocketLoop(void *dummy)
for (;;)
#endif
{
time_t oldtimeofday;
oldtimeofday = timeofday;
#define NEGATIVE_SHIFT_WARN -15
#define POSITIVE_SHIFT_WARN 20
timeofday = time(NULL) + TSoffset;
if (timeofday - oldtimeofday < 0) {
sendto_realops("Time running backwards! %ld - %ld < 0",
timeofday, oldtimeofday);
if (timeofday - oldtimeofday < NEGATIVE_SHIFT_WARN) {
/* tdiff = # of seconds of time set backwards (positive number! eg: 60) */
long tdiff = oldtimeofday - timeofday;
ircd_log(LOG_ERROR, "WARNING: Time running backwards! Clock set back ~%ld seconds (%ld -> %ld)",
tdiff, oldtimeofday, timeofday);
ircd_log(LOG_ERROR, "[TimeShift] Resetting a few timers to prevent IRCd freeze!");
sendto_realops("WARNING: Time running backwards! Clock set back ~%ld seconds (%ld -> %ld)",
tdiff, oldtimeofday, timeofday);
sendto_realops("Incorrect time for IRC servers is a serious problem. "
"Time being set backwards (either by TSCTL or by resetting the clock) is "
"even more serious and can cause clients to freeze, channels to be "
"taken over, and other issues.");
sendto_realops("Please be sure your clock is always synchronized before "
"the IRCd is started or use the built-in timesynch feature.");
sendto_realops("[TimeShift] Resetting a few timers to prevent IRCd freeze!");
fix_timers();
nextfdlistcheck = 0;
} else
if ((oldtimeofday > 0) && (timeofday - oldtimeofday > POSITIVE_SHIFT_WARN)) /* do not set too low or you get false positives */
{
/* tdiff = # of seconds of time set forward (eg: 60) */
long tdiff = timeofday - oldtimeofday;
ircd_log(LOG_ERROR, "WARNING: Time jumped ~%ld seconds ahead! (%ld -> %ld)",
tdiff, oldtimeofday, timeofday);
ircd_log(LOG_ERROR, "[TimeShift] Resetting some timers!");
sendto_realops("WARNING: Time jumped ~%ld seconds ahead! (%ld -> %ld)",
tdiff, oldtimeofday, timeofday);
sendto_realops("Incorrect time for IRC servers is a serious problem. "
"Time being adjusted (either by TSCTL or by resetting the clock) "
"more than a few seconds forward/backward can lead to serious issues.");
sendto_realops("Please be sure your clock is always synchronized before "
"the IRCd is started or use the built-in timesynch feature.");
sendto_realops("[TimeShift] Resetting some timers!");
fix_timers();
nextfdlistcheck = 0;
}
if (highesttimeofday+NEGATIVE_SHIFT_WARN > timeofday)
{
if (lasthighwarn > timeofday)
lasthighwarn = timeofday;
if (timeofday - lasthighwarn > 300)
{
ircd_log(LOG_ERROR, "[TimeShift] The (IRCd) clock was set backwards. "
"Waiting for time to be OK again. This will be in %ld seconds",
highesttimeofday - timeofday);
sendto_realops("[TimeShift] The (IRCd) clock was set backwards. Timers, nick- "
"and channel-timestamps are possibly incorrect. This message will "
"repeat itself until we catch up with the original time, which will be "
"in %ld seconds", highesttimeofday - timeofday);
lasthighwarn = timeofday;
}
} else {
highesttimeofday = timeofday;
}
oldtimeofday = timeofday;
LockEventSystem();
DoEvents();
UnlockEventSystem();
+2
View File
@@ -162,6 +162,8 @@ void free_client(aClient *cptr)
if (cptr->zip)
zip_free(cptr);
#endif
if (cptr->hostp)
unreal_free_hostent(cptr->hostp);
}
MyFree((char *)cptr);
}
+114 -132
View File
@@ -37,21 +37,6 @@ ID_Copyright("(C) 1990 Jarkko Oikarinen");
u_char touppertab[], tolowertab[];
#define tolowertab2 tolowertab
#endif
/*
* match()
* written by binary
*/
static inline int match2(const char *mask, const char *name)
{
u_char *m; /* why didn't the old one use registers */
u_char *n; /* because registers suck -- codemastr */
u_char cm;
u_char *wsn;
u_char *wsm;
m = (u_char *)mask;
cm = *m;
#ifndef USE_LOCALE
#define lc(x) tolowertab2[x] /* use mylowertab, because registers are FASTER */
@@ -59,134 +44,131 @@ static inline int match2(const char *mask, const char *name)
#define lc(x) tolower(x)
#endif
n = (u_char *)name;
if (cm == '*')
/* Match routine for special cases where escaping is needed in a normal fashion.
* Checks a string ('name') against a globbing(+more) pattern ('mask').
* Original by Douglas A Lewis (dalewis@acsu.buffalo.edu).
* Code based on hybrid7's version (match_esc()).
* Various modifications by Bram Matthys (Syzop).
* Instead of our previous code, this one is less optimized but actually _readable_ ;).
* Modifications I (Syzop) had to do vs the hybrid7 code:
* - Got rid of (u_char *) casts, since we already compile with
* chars defaulting to unsigned [or else major things break] ;).
* - Use 0 for match and non-zero for no match (a la strcmp), not the reverse.
* - Support for '_'.
* - Rip out support for '#'.
*/
int match_esc(const char *mask, const char *name)
{
const u_char *m = mask;
const u_char *n = name;
const u_char *ma = NULL;
const u_char *na = name;
while(1)
{
if (m[1] == '\0') /* mask is just "*", so true */
return 0;
}
else if (cm != '?' && lc(cm) != lc(*n))
return 1; /* most likely first chars won't match */
else if ((cm == '_') && (*n != ' ') && (*n != '_'))
return 1; /* false: '_' but first character not '_' nor ' ' */
else if ((*m == '\0') && (*n == '\0'))
return 0; /* true: both are empty */
else if (*n == '\0')
return 1; /* false: name is empty */
else
{
m++;
n++;
}
cm = lc(*m);
wsm = (char *)NULL;
wsn = (char *)NULL;
while (1)
{
if (cm == '*') /* found the * wildcard */
if (*m == '*')
{
m++; /* go to next char of mask */
if (!*m) /* if at end of mask, */
return 0; /* function becomes true. */
while (*m == '*') /* while the char at m is "*" */
{
m++; /* go to next char of mask */
if (!*m) /* if at end of mask, */
return 0; /* function becomes true. */
}
cm = *m;
if (cm == '\\') /* don't do ? checking if a \ */
{
cm = *(++m); /* just skip this char, no ? checking */
/* In case of something like: '*\', return false. */
if (!*m)
return 1;
}
else if (cm == '?') /* if it's a ? */
{
do
{
m++; /* go to the next char of both */
if (!*n)
return 1; /* false: no character left */
n++;
if (!*n) /* if end of test string... */
return (!*m ? 0 : 1); /* true if end of mask str, else false */
}
while (*m == '?'); /* while we have ?'s */
cm = *m;
if (!cm) /* last char of mask is ?, so it's true */
return 0;
}
cm = lc(cm);
while (lc(*n) != cm)
{ /* compare */
if (!*n) /* if at end of n string */
return 1; /* function becomes false. */
n++; /* go to next char of n */
}
wsm = m; /* mark after where wildcard found */
cm = lc(*(++m)); /* go to next mask char */
wsn = n; /* mark spot first char was found */
n++; /* go to next char of n */
continue;
while (*m == '*') /* collapse.. */
m++;
ma = m;
na = n;
}
if (cm == '?') /* found ? wildcard */
if (!*m)
{
cm = lc(*(++m)); /* just skip and go to next */
if (!*n)
return 1; /* false: no character left */
n++;
if (!*n) /* return true if end of both, */
{
if ((m[0] == '*') && (m[1] == '\0'))
return 0; /* special case.. a '?*' */
return (cm ? 1 : 0); /* false if end of test str only */
}
continue;
}
if (cm == '_') /* found _: check for '_' or ' ' */
return 0;
if (!ma)
return 1;
for (m--; (m > (const u_char *)mask) && (*m == '?'); m--);
if (*m == '*')
return 0;
m = ma;
n = ++na;
} else
if (!*n)
{
cm = lc(*(++m)); /* just skip and go to next */
if ((*n != ' ') && (*n != '_'))
return 1; /* false: didnt match or no character left */
n++;
if (!*n) /* return true if end of both, */
{
if ((m[0] == '*') && (m[1] == '\0'))
return 0; /* special case.. a '?*' */
return (cm ? 1 : 0); /* false if end of test str only */
}
continue;
while (*m == '*') /* collapse.. */
m++;
return (*m != 0);
}
if (cm == '\\') /* next char will not be a wildcard. */
{ /* skip wild checking, don't continue */
cm = lc(*(++m));
n++;
}
/* Complicated to read, but to save CPU time. Every ounce counts. */
if (lc(*n) != cm) /* if the current chars don't equal, */
if (*m != '?')
{
if (!wsm) /* if there was no * wildcard, */
return 1; /* function becomes false. */
n = wsn + 1; /* start on char after the one we found last */
m = wsm; /* set m to the spot after the "*" */
cm = lc(*m);
while (cm != lc(*n))
{ /* compare them */
if (!*n) /* if we reached end of n string, */
return 1; /* function becomes false. */
n++; /* go to next char of n */
if (*m == '\\')
if (!*++m)
return 1; /* unfinished escape sequence */
if ((lc(*m) != lc(*n)) && !((*m == '_') && (*n == ' ')))
{
if (!ma)
return 1;
m = ma;
n = ++na;
} else
{
m++;
n++;
}
wsn = n; /* mark spot first char was found */
} else
{
m++;
n++;
}
if (!cm) /* cm == cn, so if !cm, then we've */
return 0; /* reached end of BOTH, so it matches */
m++; /* go to next mask char */
n++; /* go to next testing char */
cm = lc(*m); /* pointers are slower */
}
return 1;
}
/** Same credit/copyright as match_esc() applies, except escaping removed.. ;p */
static inline int match2(const char *mask, const char *name)
{
const u_char *m = mask;
const u_char *n = name;
const u_char *ma = NULL;
const u_char *na = name;
while(1)
{
if (*m == '*')
{
while (*m == '*') /* collapse.. */
m++;
ma = m;
na = n;
}
if (!*m)
{
if (!*n)
return 0;
if (!ma)
return 1;
for (m--; (m > (const u_char *)mask) && (*m == '?'); m--);
if (*m == '*')
return 0;
m = ma;
n = ++na;
} else
if (!*n)
{
while (*m == '*') /* collapse.. */
m++;
return (*m != 0);
}
if ((lc(*m) != lc(*n)) && !((*m == '_') && (*n == ' ')) && (*m != '?'))
{
if (!ma)
return 1;
m = ma;
n = ++na;
} else
{
m++;
n++;
}
}
return 1;
}
/*
+98 -14
View File
@@ -98,15 +98,24 @@ aTKline *(*tkl_expire)(aTKline * tmp);
EVENT((*tkl_check_expire));
int (*find_tkline_match)(aClient *cptr, int xx);
int (*find_shun)(aClient *cptr);
int(*find_spamfilter_user)(aClient *sptr);
int(*find_spamfilter_user)(aClient *sptr, int flags);
aTKline *(*find_qline)(aClient *cptr, char *nick, int *ishold);
int (*find_tkline_match_zap)(aClient *cptr);
void (*tkl_stats)(aClient *cptr, int type, char *para);
void (*tkl_synch)(aClient *sptr);
int (*m_tkl)(aClient *cptr, aClient *sptr, int parc, char *parv[]);
int (*place_host_ban)(aClient *sptr, int action, char *reason, long duration);
int (*dospamfilter)(aClient *sptr, char *str_in, int type, char *target);
int (*dospamfilter)(aClient *sptr, char *str_in, int type, char *target, int flags, aTKline **rettk);
int (*dospamfilter_viruschan)(aClient *sptr, aTKline *tk, int type);
int (*find_tkline_match_zap_ex)(aClient *cptr, aTKline **rettk);
void (*send_list)(aClient *cptr, int numsend);
char *(*stripbadwords_channel)(char *str, int *blocked);
char *(*stripbadwords_message)(char *str, int *blocked);
char *(*stripbadwords_quit)(char *str, int *blocked);
unsigned char *(*StripColors)(unsigned char *text);
const char *(*StripControlCodes)(unsigned char *text);
void (*spamfilter_build_user_string)(char *buf, char *nick, aClient *acptr);
int (*is_silenced)(aClient *sptr, aClient *acptr);
static const EfunctionsList efunction_table[MAXEFUNCTIONS] = {
/* 00 */ {NULL, NULL},
@@ -134,10 +143,17 @@ static const EfunctionsList efunction_table[MAXEFUNCTIONS] = {
/* 22 */ {"m_tkl", (void *)&m_tkl},
/* 23 */ {"place_host_ban", (void *)&place_host_ban},
/* 24 */ {"dospamfilter", (void *)&dospamfilter},
/* 25 */ {NULL, NULL},
/* 26 */ {NULL, NULL},
/* 27 */ {NULL, NULL},
/* 28 */ {NULL, NULL}
/* 25 */ {"dospamfilter_viruschan", (void *)&dospamfilter_viruschan},
/* 26 */ {"find_tkline_match_zap_ex", (void *)&find_tkline_match_zap_ex},
/* 27 */ {"send_list", (void *)&send_list},
/* 28 */ {"stripbadwords_channel", (void *)&stripbadwords_channel},
/* 29 */ {"stripbadwords_message", (void *)&stripbadwords_message},
/* 30 */ {"stripbadwords_quit", (void *)&stripbadwords_quit},
/* 31 */ {"StripColors", (void *)&StripColors},
/* 32 */ {"StripControlCodes", (void *)&StripControlCodes},
/* 33 */ {"spamfilter_build_user_string", (void *)&spamfilter_build_user_string},
/* 34 */ {"is_silenced", (void *)&is_silenced},
/* 35 */ {NULL, NULL}
};
@@ -257,6 +273,26 @@ int parse_modsys_version(char *version)
return 0;
}
void make_compiler_string(char *buf, unsigned int ver)
{
unsigned int maj, min, plevel;
if (ver == 0)
{
strcpy(buf, "0");
return;
}
maj = ver >> 16;
min = (ver >> 8) & 0xff;
plevel = ver & 0xff;
if (plevel == 0)
sprintf(buf, "%d.%d", maj, min);
else
sprintf(buf, "%d.%d.%d", maj, min, plevel);
}
/*
* Returns an error if insucessful .. yes NULL is OK!
*/
@@ -273,12 +309,14 @@ char *Module_Create(char *path_)
int (*Mod_Load)();
int (*Mod_Unload)();
char *Mod_Version;
unsigned int *compiler_version;
static char errorbuf[1024];
char *path, *tmppath;
ModuleHeader *mod_header = NULL;
int ret = 0;
Module *mod = NULL, **Mod_Handle = NULL;
char *expectedmodversion = our_mod_version;
unsigned int expectedcompilerversion = our_compiler_version;
long modsys_ver = 0;
Debug((DEBUG_DEBUG, "Attempting to load module from %s",
path_));
@@ -288,13 +326,35 @@ char *Module_Create(char *path_)
tmppath = unreal_mktemp("tmp", unreal_getfilename(path));
if (!tmppath)
return "Unable to create temporary file!";
#ifndef _WIN32
if(!strchr(path, '/'))
#else
if (!strchr(path, '\\') && !strchr(path, '/'))
#endif
{
path = MyMalloc(strlen(path) + 3);
strcpy(path, "./");
strcat(path, path_);
}
unreal_copyfileex(path, tmppath, 1);
if (!file_exists(path))
{
snprintf(errorbuf, sizeof(errorbuf), "Cannot open module file: %s", strerror(errno));
return errorbuf;
}
#ifdef __OpenBSD__
/* For OpenBSD, do not do a hardlinkink attempt first because it checks inode
* numbers to see if a certain module is already loaded. -- Syzop
*/
ret = unreal_copyfileex(path, tmppath, 0);
#else
ret = unreal_copyfileex(path, tmppath, 1);
#endif
if (!ret)
{
snprintf(errorbuf, sizeof(errorbuf), "Failed to copy module file.");
return errorbuf;
}
if ((Mod = irc_dlopen(tmppath, RTLD_NOW)))
{
/* We have engaged the borg cube. Scan for lifesigns. */
@@ -302,7 +362,7 @@ char *Module_Create(char *path_)
if (Mod_Version && strcmp(Mod_Version, expectedmodversion))
{
snprintf(errorbuf, sizeof(errorbuf),
"Module was compiled for '%s', we are '%s', please recompile the module",
"Module was compiled for '%s', we were configured for '%s'. SOLUTION: Recompile the module(s).",
Mod_Version, expectedmodversion);
irc_dlclose(Mod);
remove(tmppath);
@@ -316,6 +376,19 @@ char *Module_Create(char *path_)
remove(tmppath);
return errorbuf;
}
irc_dlsym(Mod, "compiler_version", compiler_version);
if (compiler_version && ( ((*compiler_version) & 0xffff00) != (expectedcompilerversion & 0xffff00) ) )
{
char theyhad[64], wehave[64];
make_compiler_string(theyhad, *compiler_version);
make_compiler_string(wehave, expectedcompilerversion);
snprintf(errorbuf, sizeof(errorbuf),
"Module was compiled with GCC %s, core was compiled with GCC %s. SOLUTION: Recompile your UnrealIRCd and all it's modules by doing a 'make clean; ./Config -quick && make'.",
theyhad, wehave);
irc_dlclose(Mod);
remove(tmppath);
return errorbuf;
}
irc_dlsym(Mod, "Mod_Header", mod_header);
if (!mod_header)
{
@@ -353,6 +426,8 @@ char *Module_Create(char *path_)
mod = (Module *)Module_make(mod_header, Mod);
mod->tmp_file = strdup(tmppath);
mod->mod_sys_version = modsys_ver;
mod->compiler_version = compiler_version ? *compiler_version : 0;
irc_dlsym(Mod, "Mod_Init", Mod_Init);
if (!Mod_Init)
{
@@ -536,6 +611,9 @@ void Unload_all_loaded_modules(void)
else if (objs->type == MOBJ_UMODE) {
UmodeDel(objs->object.umode);
}
else if (objs->type == MOBJ_CMODE) {
CmodeDel(objs->object.cmode);
}
else if (objs->type == MOBJ_CMDOVERRIDE) {
CmdoverrideDel(objs->object.cmdoverride);
}
@@ -604,6 +682,9 @@ void Unload_all_testing_modules(void)
else if (objs->type == MOBJ_UMODE) {
UmodeDel(objs->object.umode);
}
else if (objs->type == MOBJ_CMODE) {
CmodeDel(objs->object.cmode);
}
else if (objs->type == MOBJ_CMDOVERRIDE) {
CmdoverrideDel(objs->object.cmdoverride);
}
@@ -676,6 +757,9 @@ int Module_free(Module *mod)
else if (objs->type == MOBJ_UMODE) {
UmodeDel(objs->object.umode);
}
else if (objs->type == MOBJ_CMODE) {
CmodeDel(objs->object.cmode);
}
else if (objs->type == MOBJ_CMDOVERRIDE) {
CmdoverrideDel(objs->object.cmdoverride);
}
@@ -959,15 +1043,15 @@ int m_module(aClient *cptr, aClient *sptr, int parc, char *parv[])
#endif
/* Opers can do /module <servername> */
if ((parc > 1) && (IsServer(cptr) || IsOper(sptr)) &&
(hunt_server_token(cptr, sptr, MSG_MODULE, TOK_MODULE, ":%s", 1, parc, parv) != HUNTED_ISME))
return 0;
if ((parc > 1) && (hunt_server_token(cptr, sptr, MSG_MODULE, TOK_MODULE, ":%s", 1, parc,
parv) != HUNTED_ISME))
return 0;
if (!Modules)
{
sendto_one(sptr, ":%s NOTICE %s :*** No modules loaded", me.name, sptr->name);
return 1;
}
for (mi = Modules; mi; mi = mi->next)
{
tmp[0] = '\0';
@@ -1543,7 +1627,7 @@ int callbacks_check(void)
{
int i;
if (!num_callbacks(CALLBACKTYPE_CLOAK) || !num_callbacks(CALLBACKTYPE_CLOAKKEYCSUM))
if ((!num_callbacks(CALLBACKTYPE_CLOAK) && !num_callbacks(CALLBACKTYPE_CLOAK_EX)) || !num_callbacks(CALLBACKTYPE_CLOAKKEYCSUM))
{
#ifndef _WIN32
config_error("ERROR: No cloaking module loaded. (hint: you probably want to load cloak.so)");
+24 -8
View File
@@ -32,8 +32,6 @@ INCLUDES = ../include/auth.h ../include/badwords.h ../include/channel.h \
../include/threads.h ../include/types.h ../include/url.h \
../include/version.h ../include/whowas.h ../include/zip.h
#just changing this to cloak.so could be a ./Config option...
#R_MODULES=cloak.so
R_MODULES= \
m_sethost.so m_chghost.so m_chgident.so m_setname.so \
m_setident.so m_sdesc.so m_svsmode.so m_swhois.so\
@@ -55,14 +53,15 @@ R_MODULES= \
m_svsfline.so m_dccdeny.so m_undccdeny.so m_whowas.so \
m_connect.so m_dccallow.so m_userip.so m_nick.so m_user.so \
m_mode.so m_watch.so m_part.so m_join.so m_motd.so m_opermotd.so \
m_botmotd.so m_lusers.so cloak.so
m_botmotd.so m_lusers.so m_names.so m_svsnolag.so m_addmotd.so \
m_svslusers.so
#note change of .c to .o
COMMANDS=m_sethost.o m_chghost.o m_chgident.o m_setname.o m_setident.o \
m_sdesc.o m_svsmode.o m_swhois.o m_svsmotd.o m_svsnline.o \
m_who.o m_mkpasswd.o m_away.o m_svsnoop.o m_svso.o m_svsnick.o \
m_adminchat.o m_akill.o m_chgname.o m_guest.o m_htm.o m_kill.o \
m_lag.o m_message.o m_nachat.o m_oper.o m_pingpong.o \
m_lag.o m_message.o webtv.o m_nachat.o m_oper.o m_pingpong.o \
m_quit.o m_rakill.o m_rping.o m_sendumode.o m_sqline.o \
m_tsctl.o m_unkline.o m_unsqline.o m_unzline.o m_whois.o \
m_tkl.o m_vhost.o m_cycle.o m_svsjoin.o m_svspart.o \
@@ -77,10 +76,10 @@ COMMANDS=m_sethost.o m_chghost.o m_chgident.o m_setname.o m_setident.o \
m_svsfline.o m_dccdeny.o m_undccdeny.o m_whowas.o \
m_connect.o m_dccallow.o m_userip.o m_nick.o m_user.o \
m_mode.o m_watch.o m_part.o m_join.o m_motd.o m_opermotd.o \
m_botmotd.o m_lusers.o
m_botmotd.o m_lusers.o m_names.o m_svsnolag.o
MODULES=commands.so $(R_MODULES)
MODULES=commands.so cloak.so $(R_MODULES)
MODULEFLAGS=@MODULEFLAGS@
all: build
@@ -123,6 +122,9 @@ m_lag.o: m_lag.c $(INCLUDES)
m_message.o: m_message.c $(INCLUDES)
$(CC) $(CFLAGS) $(MODULEFLAGS) -c m_message.c
webtv.o: webtv.c $(INCLUDES)
$(CC) $(CFLAGS) $(MODULEFLAGS) -c webtv.c
m_nachat.o: m_nachat.c $(INCLUDES)
$(CC) $(CFLAGS) $(MODULEFLAGS) -c m_nachat.c
@@ -399,6 +401,12 @@ m_botmotd.o: m_botmotd.c $(INCLUDES)
m_lusers.o: m_lusers.c $(INCLUDES)
$(CC) $(CFLAGS) $(MODULEFLAGS) -c m_lusers.c
m_names.o: m_names.c $(INCLUDES)
$(CC) $(CFLAGS) $(MODULEFLAGS) -c m_names.c
m_svsnolag.o: m_svsnolag.c $(INCLUDES)
$(CC) $(CFLAGS) $(MODULEFLAGS) -c m_svsnolag.c
#############################################################################
# .so's section
#############################################################################
@@ -431,9 +439,9 @@ m_lag.so: m_lag.c $(INCLUDES)
$(CC) $(CFLAGS) $(MODULEFLAGS) -DDYNAMIC_LINKING \
-o m_lag.so m_lag.c
m_message.so: m_message.c $(INCLUDES)
m_message.so: m_message.c webtv.c $(INCLUDES)
$(CC) $(CFLAGS) $(MODULEFLAGS) -DDYNAMIC_LINKING \
-o m_message.so m_message.c
-o m_message.so m_message.c webtv.c
m_nachat.so: m_nachat.c $(INCLUDES)
$(CC) $(CFLAGS) $(MODULEFLAGS) -DDYNAMIC_LINKING \
@@ -803,6 +811,14 @@ m_lusers.so: m_lusers.c $(INCLUDES)
$(CC) $(CFLAGS) $(MODULEFLAGS) -DDYNAMIC_LINKING \
-o m_lusers.so m_lusers.c
m_names.so: m_names.c $(INCLUDES)
$(CC) $(CFLAGS) $(MODULEFLAGS) -DDYNAMIC_LINKING \
-o m_names.so m_names.c
m_svsnolag.so: m_svsnolag.c $(INCLUDES)
$(CC) $(CFLAGS) $(MODULEFLAGS) -DDYNAMIC_LINKING \
-o m_svsnolag.so m_svsnolag.c
#############################################################################
# and now the remaining modules...
#############################################################################
+16 -3
View File
@@ -74,7 +74,8 @@ ModuleHeader l_commands_Header
extern int m_htm_Test(ModuleInfo *modinfo), m_join_Test(ModuleInfo *modinfo);
extern int m_mode_Test(ModuleInfo *modinfo), m_nick_Test(ModuleInfo *modinfo);
extern int m_tkl_Test(ModuleInfo *modinfo);
extern int m_tkl_Test(ModuleInfo *modinfo), m_list_Test(ModuleInfo *modinfo);
extern int m_message_Test(ModuleInfo *modinfo);
extern int m_sethost_Init(ModuleInfo *modinfo), m_setname_Init(ModuleInfo *modinfo), m_chghost_Init(ModuleInfo *modinfo);
extern int m_chgident_Init(ModuleInfo *modinfo), m_setident_Init(ModuleInfo *modinfo), m_sdesc_Init(ModuleInfo *modinfo);
@@ -119,6 +120,8 @@ extern int m_mode_Init(ModuleInfo *modinfo), m_watch_Init(ModuleInfo *modinfo);
extern int m_part_Init(ModuleInfo *modinfo), m_join_Init(ModuleInfo *modinfo);
extern int m_motd_Init(ModuleInfo *modinfo), m_opermotd_Init(ModuleInfo *modinfo);
extern int m_botmotd_Init(ModuleInfo *modinfo), m_lusers_Init(ModuleInfo *modinfo);
extern int m_names_Init(ModuleInfo *modinfo);
extern int m_svsnolag_Init(ModuleInfo *modinfo);
#ifdef GUEST
extern int m_guest_Init(ModuleInfo *modinfo);
#endif
@@ -166,6 +169,8 @@ extern int m_mode_Load(int module_load), m_watch_Load(int module_load);
extern int m_part_Load(int module_load), m_join_Load(int module_load);
extern int m_motd_Load(int module_load), m_opermotd_Load(int module_load);
extern int m_botmotd_Load(int module_load), m_lusers_Load(int module_load);
extern int m_names_Load(int module_load);
extern int m_svsnolag_Load(int module_load);
#ifdef GUEST
extern int m_guest_Load(int module_load);
#endif
@@ -183,7 +188,7 @@ extern int m_sqline_Unload(), m_unsqline_Unload(), m_tkl_Unload(), m_vhost_Unloa
extern int m_cycle_Unload(), m_svsjoin_Unload(), m_svspart_Unload(), m_svslusers_Unload();
extern int m_svswatch_Unload(), m_svssilence_Unload(), m_svskill_Unload();
extern int m_sendsno_Unload(), m_svssno_Unload(), m_time_Unload();
extern int m_sajoin_Unload(), m_sapart_Unload(), m_knock_Umload();
extern int m_sajoin_Unload(), m_sapart_Unload();
extern int m_kick_Unload(), m_topic_Unload(), m_umode2_Unload();
extern int m_invite_Unload(), m_list_Unload(), m_squit_Unload();
extern int m_samode_Unload(), m_sjoin_Unload(), m_protoctl_Unload();
@@ -200,7 +205,7 @@ extern int m_whowas_Unload(), m_connect_Unload(), m_dccallow_Unload();
extern int m_nick_Unload(), m_user_Unload(), m_mode_Unload();
extern int m_watch_Unload(), m_part_Unload(), m_join_Unload();
extern int m_motd_Unload(), m_opermotd_Unload(), m_botmotd_Unload();
extern int m_lusers_Unload();
extern int m_lusers_Unload(), m_names_Unload(), m_svsnolag_Unload();
#ifdef GUEST
extern int m_guest_Unload();
#endif
@@ -221,6 +226,8 @@ int l_commands_Test(ModuleInfo *modinfo)
m_mode_Test(ModCmdsInfo);
m_nick_Test(ModCmdsInfo);
m_tkl_Test(ModCmdsInfo);
m_list_Test(ModCmdsInfo);
m_message_Test(ModCmdsInfo);
return MOD_SUCCESS;
}
@@ -338,6 +345,8 @@ int l_commands_Init(ModuleInfo *modinfo)
m_opermotd_Init(ModCmdsInfo);
m_botmotd_Init(ModCmdsInfo);
m_lusers_Init(ModCmdsInfo);
m_names_Init(ModCmdsInfo);
m_svsnolag_Init(ModCmdsInfo);
#ifdef GUEST
m_guest_Init(ModCmdsInfo);
#endif
@@ -449,6 +458,8 @@ int l_commands_Load(int module_load)
m_opermotd_Load(module_load);
m_botmotd_Load(module_load);
m_lusers_Load(module_load);
m_names_Load(module_load);
m_svsnolag_Load(module_load);
#ifdef GUEST
m_guest_Load(module_load);
#endif
@@ -560,6 +571,8 @@ int l_commands_Unload(int module_unload)
m_opermotd_Unload();
m_botmotd_Unload();
m_lusers_Unload();
m_names_Unload();
m_svsnolag_Unload();
#ifdef GUEST
m_guest_Unload();
#endif
+1 -1
View File
@@ -108,7 +108,7 @@ DLLFUNC int m_admins(aClient *cptr, aClient *sptr, int parc, char *parv[])
return 0;
}
#ifdef ADMINCHAT
if (MyClient(sptr) && !IsAdmin(sptr))
if (MyClient(sptr) && !IsAdmin(sptr) && !IsCoAdmin(sptr))
#else
if (MyClient(sptr))
#endif
+16 -10
View File
@@ -100,7 +100,7 @@ DLLFUNC int MOD_UNLOAD(m_away)(int module_unload)
int m_away(aClient *cptr, aClient *sptr, int parc, char *parv[])
{
char *away, *awy2 = parv[1];
int n;
int n, wasaway = 0;
if (IsServer(sptr))
return 0;
@@ -115,6 +115,7 @@ int n;
sptr->user->away = NULL;
/* Only send this if they were actually away -- codemastr */
sendto_serv_butone_token(cptr, parv[0], MSG_AWAY, TOK_AWAY, "");
hash_check_watch(cptr, RPL_NOTAWAY);
}
/* hope this works XX */
if (MyConnect(sptr))
@@ -122,7 +123,7 @@ int n;
return 0;
}
n = dospamfilter(sptr, parv[1], SPAMF_AWAY, NULL);
n = dospamfilter(sptr, parv[1], SPAMF_AWAY, NULL, 0, NULL);
if (n < 0)
return n;
@@ -151,17 +152,22 @@ int n;
if (strcmp(away, parv[1]) == 0)
return 0;
sendto_serv_butone_token(cptr, parv[0], MSG_AWAY, TOK_AWAY, ":%s",
awy2);
sptr->user->lastaway = TStime();
sendto_serv_butone_token(cptr, parv[0], MSG_AWAY, TOK_AWAY, ":%s", awy2);
if (away)
away = (char *)MyRealloc(away, strlen(awy2) + 1);
else
away = (char *)MyMalloc(strlen(awy2) + 1);
if (away)
{
MyFree(away);
wasaway = 1;
}
away = sptr->user->away = strdup(awy2);
sptr->user->away = away;
(void)strcpy(away, awy2);
if (MyConnect(sptr))
sendto_one(sptr, rpl_str(RPL_NOWAWAY), me.name, parv[0]);
hash_check_watch(cptr, wasaway ? RPL_REAWAY : RPL_GONEAWAY);
return 0;
}
+8
View File
@@ -147,6 +147,14 @@ DLLFUNC int m_chghost(aClient *cptr, aClient *sptr, int parc, char *parv[])
if ((acptr = find_person(parv[1], NULL)))
{
DYN_LOCAL(char, did_parts, acptr->user->joined);
if (MyClient(sptr) && (IsLocOp(sptr) && !MyClient(acptr)))
{
sendto_one(sptr, err_str(ERR_NOPRIVILEGES), me.name,
parv[0]);
DYN_FREE(did_parts);
return 0;
}
if (!strcmp(GetHost(acptr), parv[2]))
{
sendnotice(sptr, "*** /ChgHost Error: requested host is same as current host.");
+8
View File
@@ -159,6 +159,14 @@ int legalident = 1;
if ((acptr = find_person(parv[1], NULL)))
{
DYN_LOCAL(char, did_parts, acptr->user->joined);
if (MyClient(sptr) && (IsLocOp(sptr) && !MyClient(acptr)))
{
sendto_one(sptr, err_str(ERR_NOPRIVILEGES), me.name,
parv[0]);
DYN_FREE(did_parts);
return 0;
}
switch (UHOST_ALLOWED)
{
case UHALLOW_NEVER:
+9 -2
View File
@@ -72,7 +72,7 @@ DLLFUNC int MOD_INIT(m_chgname)(ModuleInfo *modinfo)
* We call our add_Command crap here
*/
add_Command(MSG_CHGNAME, TOK_CHGNAME, m_chgname, 2);
add_Command(MSG_SVSNAME, TOK_CHGNAME, m_chgname, 2);
add_Command(MSG_SVSNAME, NULL, m_chgname, 2);
MARK_AS_OFFICIAL_MODULE(modinfo);
return MOD_SUCCESS;
}
@@ -93,7 +93,7 @@ DLLFUNC int MOD_UNLOAD(m_chgname)(int module_unload)
sendto_realops("Failed to delete command chgname when unloading %s",
MOD_HEADER(m_chgname).name);
}
if (del_Command(MSG_SVSNAME, TOK_CHGNAME, m_chgname) < 0)
if (del_Command(MSG_SVSNAME, NULL, m_chgname) < 0)
{
sendto_realops("Failed to delete command svsname when unloading %s",
MOD_HEADER(m_chgname).name);
@@ -146,6 +146,13 @@ DLLFUNC int m_chgname(aClient *cptr, aClient *sptr, int parc, char *parv[])
if ((acptr = find_person(parv[1], NULL)))
{
if (MyClient(sptr) && (IsLocOp(sptr) && !MyClient(acptr)))
{
sendto_one(sptr, err_str(ERR_NOPRIVILEGES), me.name,
parv[0]);
return 0;
}
/* set the realname first to make n:line checking work */
ircsprintf(acptr->info, "%s", parv[2]);
/* only check for n:lines if the person who's name is being changed is not an oper */
+10 -1
View File
@@ -169,16 +169,25 @@ DLLFUNC CMD_FUNC(m_connect)
return 0;
}
/* Evaluate deny link */
for (deny = conf_deny_link; deny; deny = (ConfigItem_deny_link *) deny->next) {
if (deny->flag.type == CRULE_ALL && !match(deny->mask, aconf->servername)
&& crule_eval(deny->rule)) {
sendto_one(sptr,
":%s %s %s :Connect: Disallowed by connection rule",
":%s %s %s :*** Connect: Disallowed by connection rule",
me.name, IsWebTV(sptr) ? "PRIVMSG" : "NOTICE", parv[0]);
return 0;
}
}
if (strchr(aconf->hostname, '*') != NULL || strchr(aconf->hostname, '?') != NULL)
{
sendto_one(sptr,
":%s %s %s :*** Connect: You cannot connect to a server with wildcards (* and ?) in the hostname",
me.name, IsWebTV(sptr) ? "PRIVMSG" : "NOTICE", parv[0]);
return 0;
}
/*
** Notify all operators about remote connect requests
*/
+2 -2
View File
@@ -62,7 +62,7 @@ ModuleHeader MOD_HEADER(m_help)
DLLFUNC int MOD_INIT(m_help)(ModuleInfo *modinfo)
{
add_Command(MSG_HELP, TOK_HELP, m_help, 1);
add_Command(MSG_HELPOP, TOK_HELP, m_help, 1);
add_Command(MSG_HELPOP, NULL, m_help, 1);
MARK_AS_OFFICIAL_MODULE(modinfo);
return MOD_SUCCESS;
}
@@ -79,7 +79,7 @@ DLLFUNC int MOD_UNLOAD(m_help)(int module_unload)
sendto_realops("Failed to delete commands when unloading %s",
MOD_HEADER(m_help).name);
}
if (del_Command(MSG_HELPOP, TOK_HELP, m_help) < 0)
if (del_Command(MSG_HELPOP, NULL, m_help) < 0)
{
sendto_realops("Failed to delete commands when unloading %s",
MOD_HEADER(m_help).name);
+3 -2
View File
@@ -337,8 +337,9 @@ DLLFUNC CMD_FUNC(m_invite)
add_invite(acptr, chptr);
}
}
sendto_prefix_one(acptr, sptr, ":%s INVITE %s :%s", parv[0],
acptr->name, ((chptr) ? (chptr->chname) : parv[2]));
if (!is_silenced(sptr, acptr))
sendto_prefix_one(acptr, sptr, ":%s INVITE %s :%s", parv[0],
acptr->name, ((chptr) ? (chptr->chname) : parv[2]));
return 0;
}
+4 -4
View File
@@ -219,7 +219,7 @@ Ban *banned;
#ifndef NO_OPEROVERRIDE
#ifdef OPEROVERRIDE_VERIFY
if (IsOper(sptr) && (chptr->mode.mode & MODE_SECRET ||
chptr->mode.mode & MODE_PRIVATE))
chptr->mode.mode & MODE_PRIVATE) && !is_autojoin_chan(chptr->chname))
return (ERR_OPERSPVERIFY);
#endif
#endif
@@ -377,7 +377,7 @@ DLLFUNC void _join_channel(aChannel *chptr, aClient *cptr, aClient *sptr, int fl
a SJOIN bug --stskeeps */
sendto_serv_butone_token_opt(cptr, OPT_SJ3|OPT_SJB64,
me.name, MSG_SJOIN, TOK_SJOIN,
"%B %s :%s%s ", chptr->creationtime,
"%B %s :%s%s ", (long)chptr->creationtime,
chptr->chname, flags & CHFL_CHANOP ? "@" : "", sptr->name);
sendto_serv_butone_token_opt(cptr, OPT_SJ3|OPT_NOT_SJB64,
me.name, MSG_SJOIN, TOK_SJOIN,
@@ -461,7 +461,7 @@ DLLFUNC void _join_channel(aChannel *chptr, aClient *cptr, aClient *sptr, int fl
}
parv[0] = sptr->name;
parv[1] = chptr->chname;
(void)m_names(cptr, sptr, 2, parv);
do_cmd(cptr, sptr, "NAMES", 2, parv);
RunHook4(HOOKTYPE_LOCAL_JOIN, cptr, sptr,chptr,parv);
} else {
RunHook4(HOOKTYPE_REMOTE_JOIN, cptr, sptr, chptr, parv); /* (rarely used) */
@@ -608,7 +608,7 @@ DLLFUNC CMD_FUNC(_do_join)
*/
flags =
(ChannelExists(name)) ? CHFL_DEOPPED : CHFL_CHANOP;
(ChannelExists(name)) ? CHFL_DEOPPED : LEVEL_ON_JOIN;
if (!IsAnOper(sptr)) /* opers can join unlimited chans */
if (sptr->user->joined >= MAXCHANNELSPERUSER)
+8 -1
View File
@@ -167,7 +167,7 @@ CMD_FUNC(m_kick)
me.name, sptr->name, "KICK",
errbuf);
sendto_one(who,
":%s %s %s :*** Q: %s tried to kick you from channel %s (%s)",
":%s %s %s :*** q: %s tried to kick you from channel %s (%s)",
me.name, IsWebTV(who) ? "PRIVMSG" : "NOTICE", who->name,
parv[0],
chptr->chname, comment);
@@ -179,6 +179,8 @@ CMD_FUNC(m_kick)
{
if (!op_can_override(sptr))
{
if (!MyClient(sptr))
goto attack; /* lag? yes.. kick crossing +Q... allow */
sendto_one(sptr, err_str(ERR_CANNOTDOCOMMAND),
me.name, sptr->name, "KICK",
"channel is +Q");
@@ -188,6 +190,9 @@ CMD_FUNC(m_kick)
"*** OperOverride -- %s (%s@%s) KICK %s %s (%s)",
sptr->name, sptr->user->username, sptr->user->realhost,
chptr->chname, who->name, comment);
ircd_log(LOG_OVERRIDE,"OVERRIDE: %s (%s@%s) KICK %s %s (%s)",
sptr->name, sptr->user->username, sptr->user->realhost,
chptr->chname, who->name, comment);
goto attack; /* No reason to continue.. */
}
/* Store "who" access flags */
@@ -219,6 +224,8 @@ CMD_FUNC(m_kick)
/* victim is +a or +q, we are not +q */
if ((who_flags & (CHFL_CHANOWNER|CHFL_CHANPROT) || IsServices(who))
&& !(sptr_flags & CHFL_CHANOWNER)) {
if (sptr == who)
goto attack; /* kicking self == ok */
if (op_can_override(sptr)) /* (and f*ck local ops) */
{ /* IRCop kicking owner/prot */
sendto_snomask(SNO_EYES,
+5 -12
View File
@@ -245,18 +245,11 @@ DLLFUNC int m_kill(aClient *cptr, aClient *sptr, int parc, char *parv[])
auser = acptr->user;
if (index(parv[0], '.'))
sendto_snomask_normal(SNO_KILLS,
"*** Notice -- Received KILL message for %s!%s@%s from %s Path: %s!%s",
acptr->name, auser->username,
IsHidden(acptr) ? auser->virthost : auser->realhost,
parv[0], inpath, path);
else
sendto_snomask_normal(SNO_KILLS,
"*** Notice -- Received KILL message for %s!%s@%s from %s Path: %s!%s",
acptr->name, auser->username,
IsHidden(acptr) ? auser->virthost : auser->realhost,
parv[0], inpath, path);
sendto_snomask_normal(SNO_KILLS,
"*** Notice -- Received KILL message for %s!%s@%s from %s Path: %s!%s",
acptr->name, auser->username,
IsHidden(acptr) ? auser->virthost : auser->realhost,
parv[0], inpath, path);
#if defined(USE_SYSLOG) && defined(SYSLOG_KILL)
if (IsOper(sptr))
syslog(LOG_DEBUG, "KILL From %s For %s Path %s!%s",
+147 -1
View File
@@ -45,6 +45,7 @@
#endif
DLLFUNC int m_list(aClient *cptr, aClient *sptr, int parc, char *parv[]);
void _send_list(aClient *cptr, int numsend);
#define MSG_LIST "LIST"
#define TOK_LIST "("
@@ -58,6 +59,13 @@ ModuleHeader MOD_HEADER(m_list)
NULL
};
DLLFUNC int MOD_TEST(m_list)(ModuleInfo *modinfo)
{
MARK_AS_OFFICIAL_MODULE(modinfo);
EfunctionAddVoid(modinfo->handle, EFUNC_SEND_LIST, _send_list);
return MOD_SUCCESS;
}
DLLFUNC int MOD_INIT(m_list)(ModuleInfo *modinfo)
{
add_Command(MSG_LIST, TOK_LIST, m_list, MAXPARA);
@@ -261,7 +269,7 @@ DLLFUNC CMD_FUNC(m_list)
else /* Just a normal channel */
{
chptr = find_channel(name, NullChn);
if (chptr && (ShowChannel(sptr, chptr) || IsAnOper(sptr))) {
if (chptr && (ShowChannel(sptr, chptr) || OPCanSeeSecret(sptr))) {
#ifdef LIST_SHOW_MODES
modebuf[0] = '[';
channel_modes(sptr, &modebuf[1], parabuf, chptr);
@@ -306,3 +314,141 @@ DLLFUNC CMD_FUNC(m_list)
return 0;
}
/*
* The function which sends the actual channel list back to the user.
* Operates by stepping through the hashtable, sending the entries back if
* they match the criteria.
* cptr = Local client to send the output back to.
* numsend = Number (roughly) of lines to send back. Once this number has
* been exceeded, send_list will finish with the current hash bucket,
* and record that number as the number to start next time send_list
* is called for this user. So, this function will almost always send
* back more lines than specified by numsend (though not by much,
* assuming CH_MAX is was well picked). So be conservative in your choice
* of numsend. -Rak
*/
/* Taken from bahamut, modified for Unreal by codemastr */
void _send_list(aClient *cptr, int numsend)
{
aChannel *chptr;
LOpts *lopt = cptr->user->lopt;
unsigned int hashnum;
/* Begin of /list? then send official channels. */
if ((lopt->starthash == 0) && conf_offchans)
{
ConfigItem_offchans *x;
for (x = conf_offchans; x; x = (ConfigItem_offchans *)x->next)
{
if (find_channel(x->chname, (aChannel *)NULL))
continue; /* exists, >0 users.. will be sent later */
sendto_one(cptr,
rpl_str(RPL_LIST), me.name,
cptr->name, x->chname,
0,
#ifdef LIST_SHOW_MODES
"",
#endif
x->topic ? x->topic : "");
}
}
for (hashnum = lopt->starthash; hashnum < CH_MAX; hashnum++)
{
if (numsend > 0)
for (chptr =
(aChannel *)hash_get_chan_bucket(hashnum);
chptr; chptr = chptr->hnextch)
{
if (SecretChannel(chptr)
&& !IsMember(cptr, chptr)
&& !OPCanSeeSecret(cptr))
continue;
/* Much more readable like this -- codemastr */
if ((!lopt->showall))
{
/* User count must be in range */
if ((chptr->users < lopt->usermin) ||
((lopt->usermax >= 0) && (chptr->users >
lopt->usermax)))
continue;
/* Creation time must be in range */
if ((chptr->creationtime && (chptr->creationtime <
lopt->chantimemin)) || (chptr->creationtime >
lopt->chantimemax))
continue;
/* Topic time must be in range */
if ((chptr->topic_time < lopt->topictimemin) ||
(chptr->topic_time > lopt->topictimemax))
continue;
/* Must not be on nolist (if it exists) */
if (lopt->nolist && find_str_match_link(lopt->nolist,
chptr->chname))
continue;
/* Must be on yeslist (if it exists) */
if (lopt->yeslist && !find_str_match_link(lopt->yeslist,
chptr->chname))
continue;
}
#ifdef LIST_SHOW_MODES
modebuf[0] = '[';
channel_modes(cptr, &modebuf[1], parabuf, chptr);
if (modebuf[2] == '\0')
modebuf[0] = '\0';
else
strlcat(modebuf, "]", sizeof modebuf);
#endif
if (!OPCanSeeSecret(cptr))
sendto_one(cptr,
rpl_str(RPL_LIST), me.name,
cptr->name,
ShowChannel(cptr,
chptr) ? chptr->chname :
"*", chptr->users,
#ifdef LIST_SHOW_MODES
ShowChannel(cptr, chptr) ?
modebuf : "",
#endif
ShowChannel(cptr,
chptr) ? (chptr->topic ?
chptr->topic : "") : "");
else
sendto_one(cptr,
rpl_str(RPL_LIST), me.name,
cptr->name, chptr->chname,
chptr->users,
#ifdef LIST_SHOW_MODES
modebuf,
#endif
(chptr->topic ? chptr->topic : ""));
numsend--;
}
else
break;
}
/* All done */
if (hashnum == CH_MAX)
{
sendto_one(cptr, rpl_str(RPL_LISTEND), me.name, cptr->name);
free_str_list(cptr->user->lopt->yeslist);
free_str_list(cptr->user->lopt->nolist);
MyFree(cptr->user->lopt);
cptr->user->lopt = NULL;
return;
}
/*
* We've exceeded the limit on the number of channels to send back
* at once.
*/
lopt->starthash = hashnum;
return;
}
+2 -6
View File
@@ -75,10 +75,6 @@ DLLFUNC int MOD_UNLOAD(m_map)(int module_unload)
return MOD_SUCCESS;
}
char servername[128][128];
int server_usercount[128];
int numservers = 0;
/*
* New /MAP format -Potvin
* dump_map function.
@@ -100,7 +96,7 @@ static void dump_map(aClient *cptr, aClient *server, char *mask, int prompt_leng
{
sendto_one(cptr, rpl_str(RPL_MAP), me.name, cptr->name, prompt,
length, server->name, server->serv->users,
(server->serv->numeric ? (char *)my_itoa(server->serv->
((IsAnOper(cptr) && server->serv->numeric) ? (char *)my_itoa(server->serv->
numeric) : ""));
cnt = 0;
}
@@ -130,7 +126,7 @@ static void dump_map(aClient *cptr, aClient *server, char *mask, int prompt_leng
for (lp = Servers; lp; lp = lp->next)
{
acptr = lp->value.cptr;
if (IsULine(acptr) && HIDE_ULINES && !IsOper(cptr))
if (IsULine(acptr) && HIDE_ULINES && !IsAnOper(cptr))
continue;
if (acptr->srvptr != server)
continue;
+593 -149
View File
@@ -42,13 +42,21 @@
#ifdef _WIN32
#include "version.h"
#endif
#include "badwords.h"
static int is_silenced(aClient *, aClient *);
int _is_silenced(aClient *, aClient *);
char *_stripbadwords_channel(char *str, int *blocked);
char *_stripbadwords_message(char *str, int *blocked);
char *_stripbadwords_quit(char *str, int *blocked);
char *_StripColors(unsigned char *text);
char *_StripControlCodes(unsigned char *text);
DLLFUNC int m_message(aClient *cptr, aClient *sptr, int parc, char *parv[], int notice);
DLLFUNC int m_notice(aClient *cptr, aClient *sptr, int parc, char *parv[]);
DLLFUNC int m_private(aClient *cptr, aClient *sptr, int parc, char *parv[]);
extern int webtv_parse(aClient *sptr, char *string);
/* Place includes here */
#define MSG_PRIVATE "PRIVMSG" /* PRIV */
#define TOK_PRIVATE "!" /* 33 */
@@ -64,6 +72,18 @@ ModuleHeader MOD_HEADER(m_message)
NULL
};
DLLFUNC int MOD_TEST(m_message)(ModuleInfo *modinfo)
{
MARK_AS_OFFICIAL_MODULE(modinfo);
EfunctionAddPChar(modinfo->handle, EFUNC_STRIPBADWORDS_CHANNEL, _stripbadwords_channel);
EfunctionAddPChar(modinfo->handle, EFUNC_STRIPBADWORDS_MESSAGE, _stripbadwords_message);
EfunctionAddPChar(modinfo->handle, EFUNC_STRIPBADWORDS_QUIT, _stripbadwords_quit);
EfunctionAddPChar(modinfo->handle, EFUNC_STRIPCOLORS, _StripColors);
EfunctionAddPChar(modinfo->handle, EFUNC_STRIPCONTROLCODES, _StripControlCodes);
EfunctionAdd(modinfo->handle, EFUNC_IS_SILENCED, _is_silenced);
return MOD_SUCCESS;
}
/* This is called on module init, before Server Ready */
DLLFUNC int MOD_INIT(m_message)(ModuleInfo *modinfo)
{
@@ -102,6 +122,114 @@ DLLFUNC int MOD_UNLOAD(m_message)(int module_unload)
static int check_dcc(aClient *sptr, char *target, aClient *targetcli, char *text);
static int check_dcc_soft(aClient *from, aClient *to, char *text);
#define CANPRIVMSG_CONTINUE 100
#define CANPRIVMSG_SEND 101
/** Check if PRIVMSG's are permitted from a person to another person.
* cptr: ..
* sptr: ..
* acptr: target client
* notice: 1 if notice, 0 if privmsg
* text: Pointer to a pointer to a text [in, out]
* cmd: Pointer to a pointer which contains the command to use [in, out]
*
* RETURN VALUES:
* CANPRIVMSG_CONTINUE: issue a 'continue' in target nickname list (aka: skip further processing this target)
* CANPRIVMSG_SEND: send the message (use text/newcmd!)
* Other: return with this value (can be anything like 0, -1, FLUSH_BUFFER, etc)
*/
static int can_privmsg(aClient *cptr, aClient *sptr, aClient *acptr, int notice, char **text, char **cmd)
{
char *ctcp;
int ret;
if (IsVirus(sptr))
{
sendnotice(sptr, "You are only allowed to talk in '%s'", SPAMFILTER_VIRUSCHAN);
return CANPRIVMSG_CONTINUE;
}
/* Umode +R (idea from Bahamut) */
if (IsRegNickMsg(acptr) && !IsRegNick(sptr) && !IsULine(sptr) && !IsOper(sptr) && !IsServer(sptr)) {
sendto_one(sptr, err_str(ERR_NONONREG), me.name, sptr->name,
acptr->name);
return 0;
}
if (IsNoCTCP(acptr) && !IsOper(sptr) && **text == 1 && acptr != sptr)
{
ctcp = *text + 1; /* &*text[1]; */
if (myncmp(ctcp, "ACTION ", 7) && myncmp(ctcp, "DCC ", 4))
{
sendto_one(sptr, err_str(ERR_NOCTCP), me.name, sptr->name, acptr->name);
return 0;
}
}
if (MyClient(sptr) && !strncasecmp(*text, "\001DCC", 4))
{
ret = check_dcc(sptr, acptr->name, acptr, *text);
if (ret < 0)
return ret;
if (ret == 0)
return CANPRIVMSG_CONTINUE;
}
if (MyClient(acptr) && !strncasecmp(*text, "\001DCC", 4) &&
!check_dcc_soft(sptr, acptr, *text))
return CANPRIVMSG_CONTINUE;
if (MyClient(sptr) && check_for_target_limit(sptr, acptr, acptr->name))
return CANPRIVMSG_CONTINUE;
if (!is_silenced(sptr, acptr))
{
#ifdef STRIPBADWORDS
int blocked = 0;
#endif
Hook *tmphook;
if (notice && IsWebTV(acptr) && **text != '\1')
*cmd = MSG_PRIVATE;
if (!notice && MyConnect(sptr) &&
acptr->user && acptr->user->away)
sendto_one(sptr, rpl_str(RPL_AWAY),
me.name, sptr->name, acptr->name,
acptr->user->away);
#ifdef STRIPBADWORDS
if (MyClient(sptr) && !IsULine(acptr) && IsFilteringWords(acptr))
{
*text = stripbadwords_message(*text, &blocked);
if (blocked)
{
if (!notice && MyClient(sptr))
sendto_one(sptr, rpl_str(ERR_NOSWEAR),
me.name, sptr->name, acptr->name);
return CANPRIVMSG_CONTINUE;
}
}
#endif
if (MyClient(sptr))
{
ret = dospamfilter(sptr, *text, (notice ? SPAMF_USERNOTICE : SPAMF_USERMSG), acptr->name, 0, NULL);
if (ret < 0)
return ret;
}
for (tmphook = Hooks[HOOKTYPE_USERMSG]; tmphook; tmphook = tmphook->next) {
*text = (*(tmphook->func.pcharfunc))(cptr, sptr, acptr, *text, notice);
if (!*text)
break;
}
if (!*text)
return CANPRIVMSG_CONTINUE;
return CANPRIVMSG_SEND;
} else {
/* Silenced */
RunHook4(HOOKTYPE_SILENCED, cptr, sptr, acptr, notice);
}
return CANPRIVMSG_CONTINUE;
}
/*
** m_message (used in m_private() and m_notice())
** the general function to deliver MSG's between users/channels
@@ -117,10 +245,10 @@ static int check_dcc_soft(aClient *from, aClient *to, char *text);
static int recursive_webtv = 0;
DLLFUNC int m_message(aClient *cptr, aClient *sptr, int parc, char *parv[], int notice)
{
aClient *acptr;
aClient *acptr, *srvptr;
char *s;
aChannel *chptr;
char *nick, *server, *p, *cmd, *ctcp, *p2, *pc, *text;
char *nick, *server, *p, *cmd, *ctcp, *p2, *pc, *text, *newcmd;
int cansend = 0;
int prefix = 0;
char pfixchan[CHANNELLEN + 4];
@@ -197,96 +325,21 @@ DLLFUNC int m_message(aClient *cptr, aClient *sptr, int parc, char *parv[], int
return ret;
}
}
if (*nick != '#' && (acptr = find_person(nick, NULL)))
{
if (IsVirus(sptr))
text = parv[2];
newcmd = cmd;
ret = can_privmsg(cptr, sptr, acptr, notice, &text, &newcmd);
if (ret == CANPRIVMSG_SEND)
{
sendnotice(sptr, "You are only allowed to talk in '%s'", SPAMFILTER_VIRUSCHAN);
sendto_message_one(acptr, sptr, parv[0], newcmd, nick, text);
continue;
}
/* Umode +R (idea from Bahamut) */
if (IsRegNickMsg(acptr) && !IsRegNick(sptr) && !IsULine(sptr) && !IsOper(sptr) && !IsServer(sptr)) {
sendto_one(sptr, err_str(ERR_NONONREG), me.name, parv[0],
acptr->name);
return 0;
}
if (IsNoCTCP(acptr) && !IsOper(sptr) && *parv[2] == 1 && acptr != sptr)
{
ctcp = &parv[2][1];
if (myncmp(ctcp, "ACTION ", 7) && myncmp(ctcp, "DCC ", 4))
{
sendto_one(sptr, err_str(ERR_NOCTCP), me.name, parv[0],
acptr->name);
return 0;
}
}
if (MyClient(sptr) && !strncasecmp(parv[2], "\001DCC", 4))
{
ret = check_dcc(sptr, acptr->name, acptr, parv[2]);
if (ret < 0)
return ret;
if (ret == 0)
continue;
}
if (MyClient(acptr) && !strncasecmp(parv[2], "\001DCC", 4) &&
!check_dcc_soft(sptr, acptr, parv[2]))
} else
if (ret == CANPRIVMSG_CONTINUE)
continue;
if (MyClient(sptr) && check_for_target_limit(sptr, acptr, acptr->name))
continue;
if (!is_silenced(sptr, acptr))
{
#ifdef STRIPBADWORDS
int blocked = 0;
#endif
char *newcmd = cmd, *text;
Hook *tmphook;
if (notice && IsWebTV(acptr) && *parv[2] != '\1')
newcmd = MSG_PRIVATE;
if (!notice && MyConnect(sptr) &&
acptr->user && acptr->user->away)
sendto_one(sptr, rpl_str(RPL_AWAY),
me.name, parv[0], acptr->name,
acptr->user->away);
#ifdef STRIPBADWORDS
if (MyClient(sptr) && !IsULine(acptr) && IsFilteringWords(acptr))
{
text = stripbadwords_message(parv[2], &blocked);
if (blocked)
{
if (!notice && MyClient(sptr))
sendto_one(sptr, rpl_str(ERR_NOSWEAR),
me.name, parv[0], acptr->name);
continue;
}
}
else
#endif
text = parv[2];
if (MyClient(sptr))
{
ret = dospamfilter(sptr, text, (notice ? SPAMF_USERNOTICE : SPAMF_USERMSG), acptr->name);
if (ret < 0)
return ret;
}
for (tmphook = Hooks[HOOKTYPE_USERMSG]; tmphook; tmphook = tmphook->next) {
text = (*(tmphook->func.pcharfunc))(cptr, sptr, acptr, text, notice);
if (!text)
break;
}
if (!text)
continue;
sendto_message_one(acptr,
sptr, parv[0], newcmd, nick, text);
}
continue;
else
return ret;
}
p2 = (char *)strchr(nick, '#');
@@ -409,10 +462,7 @@ DLLFUNC int m_message(aClient *cptr, aClient *sptr, int parc, char *parv[], int
if (check_for_chan_flood(cptr, sptr, chptr) == 1)
continue;
if (!CHANCMDPFX)
sendanyways = (parv[2][0] == '`' ? 1 : 0);
else
sendanyways = (strchr(CHANCMDPFX,parv[2][0]) ? 1 : 0);
sendanyways = (strchr(CHANCMDPFX,parv[2][0]) ? 1 : 0);
text = parv[2];
if (MyClient(sptr) && (chptr->mode.mode & MODE_STRIP))
text = StripColors(parv[2]);
@@ -448,7 +498,7 @@ DLLFUNC int m_message(aClient *cptr, aClient *sptr, int parc, char *parv[], int
if (MyClient(sptr))
{
ret = dospamfilter(sptr, text, notice ? SPAMF_CHANNOTICE : SPAMF_CHANMSG, chptr->chname);
ret = dospamfilter(sptr, text, notice ? SPAMF_CHANNOTICE : SPAMF_CHANMSG, chptr->chname, 0, NULL);
if (ret < 0)
return ret;
}
@@ -514,24 +564,6 @@ DLLFUNC int m_message(aClient *cptr, aClient *sptr, int parc, char *parv[], int
if ((*nick == '$' || *nick == '#') && (IsAnOper(sptr)
|| IsULine(sptr)))
{
if (IsULine(sptr))
goto itsokay;
if (!(s = (char *)rindex(nick, '.')))
{
sendto_one(sptr, err_str(ERR_NOTOPLEVEL),
me.name, parv[0], nick);
continue;
}
while (*++s)
if (*s == '.' || *s == '*' || *s == '?')
break;
if (*s == '*' || *s == '?')
{
sendto_one(sptr, err_str(ERR_WILDTOPLEVEL),
me.name, parv[0], nick);
continue;
}
itsokay:
sendto_match_butone(IsServer(cptr) ? cptr : NULL,
sptr, nick + 1,
(*nick == '#') ? MATCH_HOST :
@@ -549,49 +581,37 @@ DLLFUNC int m_message(aClient *cptr, aClient *sptr, int parc, char *parv[], int
/* There is always a \0 if its a string */
if (*(server + 1) != '\0')
{
acptr = find_server_quick(server + 1);
if (acptr)
char fulltarget[NICKLEN + HOSTLEN + 1];
strlcpy(fulltarget, nick, sizeof(fulltarget)); /* lame.. I know.. */
srvptr = find_server_quick(server + 1);
if (srvptr)
{
/*
** Not destined for a user on me :-(
*/
if (!IsMe(acptr))
acptr = find_nickserv(nick, NULL);
if (acptr && (acptr->srvptr == srvptr))
{
if (IsToken(acptr->from))
sendto_one(acptr,
":%s %s %s :%s", parv[0],
notice ? TOK_NOTICE : TOK_PRIVATE,
nick, parv[2]);
else
sendto_one(acptr,
":%s %s %s :%s", parv[0],
cmd, nick, parv[2]);
continue;
}
text = parv[2];
newcmd = cmd;
ret = can_privmsg(cptr, sptr, acptr, notice, &text, &newcmd);
if (ret == CANPRIVMSG_CONTINUE)
continue;
else if (ret != CANPRIVMSG_SEND)
return ret;
/* If we end up here, we have to actually send it... */
/* Find the nick@server using hash. */
acptr =
find_nickserv(nick,
(aClient *)NULL);
if (acptr)
{
sendto_prefix_one(acptr, sptr,
":%s %s %s :%s",
parv[0], cmd,
acptr->name, parv[2]);
if (IsMe(acptr))
sendto_prefix_one(acptr, sptr, ":%s %s %s :%s", sptr->name, newcmd, acptr->name, text);
else
sendto_message_one(acptr, sptr, sptr->name, newcmd, fulltarget, text);
continue;
}
}
if (server
&& strncasecmp(server + 1, SERVICES_NAME,
strlen(SERVICES_NAME)) == 0)
sendto_one(sptr,
err_str(ERR_SERVICESDOWN), me.name,
parv[0], nick);
/* NICK@SERVER NOT FOUND: */
if (server && strncasecmp(server + 1, SERVICES_NAME, strlen(SERVICES_NAME)) == 0)
sendto_one(sptr, err_str(ERR_SERVICESDOWN), me.name, parv[0], nick);
else
sendto_one(sptr,
err_str(ERR_NOSUCHNICK), me.name,
parv[0], nick);
sendto_one(sptr, err_str(ERR_NOSUCHNICK), me.name, parv[0], fulltarget);
continue;
}
@@ -641,7 +661,7 @@ DLLFUNC int m_notice(aClient *cptr, aClient *sptr, int parc, char *parv[])
* but more over, if this is detected on a server not local to sptr
* the SILENCE mask is sent upstream.
*/
static int is_silenced(aClient *sptr, aClient *acptr)
int _is_silenced(aClient *sptr, aClient *acptr)
{
Link *lp;
anUser *user;
@@ -779,7 +799,7 @@ int size_string, ret;
strlcpy(realfile, ctcp, size_string+1);
if ((ret = dospamfilter(sptr, realfile, SPAMF_DCC, target)) < 0)
if ((ret = dospamfilter(sptr, realfile, SPAMF_DCC, target, 0, NULL)) < 0)
return ret;
if ((fl = dcc_isforbidden(sptr, realfile)))
@@ -890,3 +910,427 @@ int size_string;
return 1; /* allowed */
}
/* This was modified a bit in order to use newconf. The loading functions
* have been trashed and integrated into the config parser. The striping
* function now only uses REPLACEWORD if no word is specifically defined
* for the word found. Also the freeing function has been ditched. -- codemastr
*/
#ifdef FAST_BADWORD_REPLACE
/*
* our own strcasestr implementation because strcasestr is often not
* available or is not working correctly (??).
*/
char *our_strcasestr(char *haystack, char *needle) {
int i;
int nlength = strlen (needle);
int hlength = strlen (haystack);
if (nlength > hlength) return NULL;
if (hlength <= 0) return NULL;
if (nlength <= 0) return haystack;
for (i = 0; i <= (hlength - nlength); i++) {
if (strncasecmp (haystack + i, needle, nlength) == 0)
return haystack + i;
}
return NULL; /* not found */
}
inline int fast_badword_match(ConfigItem_badword *badword, char *line)
{
char *p;
int bwlen = strlen(badword->word);
if ((badword->type & BADW_TYPE_FAST_L) && (badword->type & BADW_TYPE_FAST_R))
return (our_strcasestr(line, badword->word) ? 1 : 0);
p = line;
while((p = our_strcasestr(p, badword->word)))
{
if (!(badword->type & BADW_TYPE_FAST_L))
{
if ((p != line) && !iswseperator(*(p - 1))) /* aaBLA but no *BLA */
goto next;
}
if (!(badword->type & BADW_TYPE_FAST_R))
{
if (!iswseperator(*(p + bwlen))) /* BLAaa but no BLA* */
goto next;
}
/* Looks like it matched */
return 1;
next:
p += bwlen;
}
return 0;
}
/* fast_badword_replace:
* a fast replace routine written by Syzop used for replacing badwords.
* searches in line for huntw and replaces it with replacew,
* buf is used for the result and max is sizeof(buf).
* (Internal assumptions: max > 0 AND max > strlen(line)+1)
*/
inline int fast_badword_replace(ConfigItem_badword *badword, char *line, char *buf, int max)
{
/* Some aliases ;P */
char *replacew = badword->replace ? badword->replace : REPLACEWORD;
char *pold = line, *pnew = buf; /* Pointers to old string and new string */
char *poldx = line;
int replacen = -1; /* Only calculated if needed. w00t! saves us a few nanosecs? lol */
int searchn = -1;
char *startw, *endw;
char *c_eol = buf + max - 1; /* Cached end of (new) line */
int run = 1;
int cleaned = 0;
Debug((DEBUG_NOTICE, "replacing %s -> %s in '%s'", badword->word, replacew, line));
while(run) {
pold = our_strcasestr(pold, badword->word);
if (!pold)
break;
if (replacen == -1)
replacen = strlen(replacew);
if (searchn == -1)
searchn = strlen(badword->word);
/* Hunt for start of word */
if (pold > line) {
for (startw = pold; (!iswseperator(*startw) && (startw != line)); startw--);
if (iswseperator(*startw))
startw++; /* Don't point at the space/seperator but at the word! */
} else {
startw = pold;
}
if (!(badword->type & BADW_TYPE_FAST_L) && (pold != startw)) {
/* not matched */
pold++;
continue;
}
/* Hunt for end of word */
for (endw = pold; ((*endw != '\0') && (!iswseperator(*endw))); endw++);
if (!(badword->type & BADW_TYPE_FAST_R) && (pold+searchn != endw)) {
/* not matched */
pold++;
continue;
}
cleaned = 1; /* still too soon? Syzop/20050227 */
/* Do we have any not-copied-yet data? */
if (poldx != startw) {
int tmp_n = startw - poldx;
if (pnew + tmp_n >= c_eol) {
/* Partial copy and return... */
memcpy(pnew, poldx, c_eol - pnew);
*c_eol = '\0';
return 1;
}
memcpy(pnew, poldx, tmp_n);
pnew += tmp_n;
}
/* Now update the word in buf (pnew is now something like startw-in-new-buffer */
if (replacen) {
if ((pnew + replacen) >= c_eol) {
/* Partial copy and return... */
memcpy(pnew, replacew, c_eol - pnew);
*c_eol = '\0';
return 1;
}
memcpy(pnew, replacew, replacen);
pnew += replacen;
}
poldx = pold = endw;
}
/* Copy the last part */
if (*poldx) {
strncpy(pnew, poldx, c_eol - pnew);
*(c_eol) = '\0';
} else {
*pnew = '\0';
}
return cleaned;
}
#endif
/*
* Returns a string, which has been filtered by the words loaded via
* the loadbadwords() function. It's primary use is to filter swearing
* in both private and public messages
*/
char *stripbadwords(char *str, ConfigItem_badword *start_bw, int *blocked)
{
regmatch_t pmatch[MAX_MATCH];
static char cleanstr[4096];
char buf[4096];
char *ptr;
int matchlen, m, stringlen, cleaned;
ConfigItem_badword *this_word;
*blocked = 0;
if (!start_bw)
return str;
/*
* work on a copy
*/
stringlen = strlcpy(cleanstr, StripControlCodes(str), sizeof cleanstr);
memset(&pmatch, 0, sizeof pmatch);
matchlen = 0;
buf[0] = '\0';
cleaned = 0;
for (this_word = start_bw; this_word; this_word = (ConfigItem_badword *)this_word->next)
{
#ifdef FAST_BADWORD_REPLACE
if (this_word->type & BADW_TYPE_FAST)
{
if (this_word->action == BADWORD_BLOCK)
{
if (fast_badword_match(this_word, cleanstr))
{
*blocked = 1;
return NULL;
}
}
else
{
int n;
/* fast_badword_replace() does size checking so we can use 512 here instead of 4096 */
n = fast_badword_replace(this_word, cleanstr, buf, 512);
if (!cleaned && n)
cleaned = n;
strcpy(cleanstr, buf);
memset(buf, 0, sizeof(buf)); /* regexp likes this somehow */
}
} else
if (this_word->type & BADW_TYPE_REGEX)
{
#endif
if (this_word->action == BADWORD_BLOCK)
{
if (!regexec(&this_word->expr, cleanstr, 0, NULL, 0))
{
*blocked = 1;
return NULL;
}
}
else
{
ptr = cleanstr; /* set pointer to start of string */
while (regexec(&this_word->expr, ptr, MAX_MATCH, pmatch,0) != REG_NOMATCH)
{
if (pmatch[0].rm_so == -1)
break;
m = pmatch[0].rm_eo - pmatch[0].rm_so;
if (m == 0)
break; /* anti-loop */
cleaned = 1;
matchlen += m;
strlncat(buf, ptr, sizeof buf, pmatch[0].rm_so);
if (this_word->replace)
strlcat(buf, this_word->replace, sizeof buf);
else
strlcat(buf, REPLACEWORD, sizeof buf);
ptr += pmatch[0].rm_eo; /* Set pointer after the match pos */
memset(&pmatch, 0, sizeof(pmatch));
}
/* All the better to eat you with! */
strlcat(buf, ptr, sizeof buf);
memcpy(cleanstr, buf, sizeof cleanstr);
memset(buf, 0, sizeof(buf));
if (matchlen == stringlen)
break;
}
#ifdef FAST_BADWORD_REPLACE
}
#endif
}
cleanstr[511] = '\0'; /* cutoff, just to be sure */
return (cleaned) ? cleanstr : str;
}
#ifdef STRIPBADWORDS
char *_stripbadwords_channel(char *str, int *blocked)
{
return stripbadwords(str, conf_badword_channel, blocked);
}
char *_stripbadwords_message(char *str, int *blocked)
{
return stripbadwords(str, conf_badword_message, blocked);
}
char *_stripbadwords_quit(char *str, int *blocked)
{
return stripbadwords(str, conf_badword_quit, blocked);
}
#else
char *_stripbadwords_channel(char *str, int *blocked)
{
return NULL;
}
char *_stripbadwords_message(char *str, int *blocked)
{
return NULL;
}
char *_stripbadwords_quit(char *str, int *blocked)
{
return NULL;
}
#endif
/* Taken from xchat by Peter Zelezny
* changed very slightly by codemastr
* RGB color stripping support added -- codemastr
*/
char *_StripColors(unsigned char *text) {
int i = 0, len = strlen(text), save_len=0;
char nc = 0, col = 0, rgb = 0, *save_text=NULL;
static unsigned char new_str[4096];
while (len > 0)
{
if ((col && isdigit(*text) && nc < 2) || (col && *text == ',' && nc < 3))
{
nc++;
if (*text == ',')
nc = 0;
}
/* Syntax for RGB is ^DHHHHHH where H is a hex digit.
* If < 6 hex digits are specified, the code is displayed
* as text
*/
else if ((rgb && isxdigit(*text) && nc < 6) || (rgb && *text == ',' && nc < 7))
{
nc++;
if (*text == ',')
nc = 0;
}
else
{
if (col)
col = 0;
if (rgb)
{
if (nc != 6)
{
text = save_text+1;
len = save_len-1;
rgb = 0;
continue;
}
rgb = 0;
}
if (*text == '\003')
{
col = 1;
nc = 0;
}
else if (*text == '\004')
{
save_text = text;
save_len = len;
rgb = 1;
nc = 0;
}
else if (*text != '\026') /* (strip reverse too) */
{
new_str[i] = *text;
i++;
}
}
text++;
len--;
}
new_str[i] = 0;
return new_str;
}
/* strip color, bold, underline, and reverse codes from a string */
char *_StripControlCodes(unsigned char *text)
{
int i = 0, len = strlen(text), save_len=0;
char nc = 0, col = 0, rgb = 0, *save_text=NULL;
static unsigned char new_str[4096];
while (len > 0)
{
if ( col && ((isdigit(*text) && nc < 2) || (*text == ',' && nc < 3)))
{
nc++;
if (*text == ',')
nc = 0;
}
/* Syntax for RGB is ^DHHHHHH where H is a hex digit.
* If < 6 hex digits are specified, the code is displayed
* as text
*/
else if ((rgb && isxdigit(*text) && nc < 6) || (rgb && *text == ',' && nc < 7))
{
nc++;
if (*text == ',')
nc = 0;
}
else
{
if (col)
col = 0;
if (rgb)
{
if (nc != 6)
{
text = save_text+1;
len = save_len-1;
rgb = 0;
continue;
}
rgb = 0;
}
switch (*text)
{
case 3:
/* color */
col = 1;
nc = 0;
break;
case 4:
/* RGB */
save_text = text;
save_len = len;
rgb = 1;
nc = 0;
break;
case 2:
/* bold */
break;
case 31:
/* underline */
break;
case 22:
/* reverse */
break;
case 15:
/* plain */
break;
default:
new_str[i] = *text;
i++;
break;
}
}
text++;
len--;
}
new_str[i] = 0;
return new_str;
}
+9
View File
@@ -128,6 +128,15 @@ int m_mkpasswd(aClient *cptr, aClient *sptr, int parc, char *parv[])
return 0;
}
#ifdef AUTHENABLE_UNIXCRYPT
if ((type == AUTHTYPE_UNIXCRYPT) && (strlen(parv[2]) > 8))
{
sendnotice(sptr, "WARNING: Password truncated to 8 characters due to 'crypt' algorithm. "
"You are suggested to use the 'md5' algorithm instead.");
parv[2][8] = '\0';
}
#endif
if (!(result = Auth_Make(type, parv[2])))
{
sendto_one(sptr,

Some files were not shown because too many files have changed in this diff Show More