mirror of
https://github.com/unrealircd/unrealircd.git
synced 2026-06-22 23:56:37 +02:00
Compare commits
27 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| e2c54d4b1e | |||
| 7949ef2550 | |||
| c625c3574c | |||
| 648d0c6465 | |||
| 9d9c699b71 | |||
| 05f74f405f | |||
| 58c2a0ec5a | |||
| 5c4a58b2aa | |||
| 0d6cd21fde | |||
| 7c1de2fbc8 | |||
| 40ecbe946d | |||
| 013da5b350 | |||
| f7514a3124 | |||
| 39b67b0258 | |||
| d13c52ea67 | |||
| 23919ffb6e | |||
| 8833b59594 | |||
| c4de0d3718 | |||
| c274501c9f | |||
| a808ef8104 | |||
| 283dfcfe0f | |||
| 41eb4cea2f | |||
| 12593314da | |||
| 23366dfb8b | |||
| 2e969a14c7 | |||
| e5191d37e4 | |||
| 2144a83c89 |
+1
-1
@@ -7,7 +7,7 @@
|
||||
\___/|_| |_|_| \___|\__,_|_|\___/\_| \_| \____/\__,_|
|
||||
|
||||
Configuration Program
|
||||
for Unreal3.2.9-RC2
|
||||
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.
|
||||
|
||||
+69
-91
@@ -1,6 +1,10 @@
|
||||
Unreal3.2.9-RC2 Release Notes
|
||||
Unreal3.2.8.1 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'
|
||||
@@ -10,108 +14,82 @@ Unreal3.2.9-RC2 Release Notes
|
||||
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.8/3.2.8.1). Upgrading from 3.2.6 or 3.2.7 should also be no problem.
|
||||
- The purpose of the sections below (NEW, CHANGED, MINOR, etc) is to be a SUMMARY
|
||||
of the changes in this release. There have been 160+ changes, twice as much
|
||||
as usual for a release, hence this summary is a bit long too.
|
||||
For the FULL list of changes, see the Changelog.
|
||||
- If you previously used CVS to access the development version of UnrealIRCd,
|
||||
you now need to use Mercurial, see see http://www.unrealircd.com/hgmove
|
||||
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 ]==
|
||||
- Extban ~j: this only prevents a user from joining, once in he can speak freely.
|
||||
- Extban ~R:<nick>: this ban only matches if <nick> is a registered user (has
|
||||
identified to services). Especially useful in cases like: +e ~R:TrustedUser.
|
||||
- Stacked Extended Bans:
|
||||
- Extbans are now split in two groups:
|
||||
- Ones that specify which user actions are affected (group 1):
|
||||
~q (quiet), ~n (nick change), ~j (join)
|
||||
- Ones that introduce new criteria that can be used (group 2):
|
||||
~c (channel), ~r (realname), ~R (registered)
|
||||
- With stacked extbans you can combine an extban of the first group with the second
|
||||
For example: ~q:~c:#lamers would quiet all users who are also in #lamers
|
||||
- Extended Invex: very much like extended bans, but for +I (Invite Exception).
|
||||
Currently supported are: ~c (channel, ~r (realname) and ~R (registered) [=group 2]
|
||||
Possible useful uses are setting a channel +i (invite only) and then setting
|
||||
+I ~c:#trustedchan (or even: +I ~c:+#trustedchan) while still retaining the ability
|
||||
to easily ban users through +b.
|
||||
- Channel Mode +Z: indicates whether a channel is 'secure' or not.
|
||||
This channel mode works in conjunction with +z (lower case z).
|
||||
While +z (normally) prevents new non-SSL users from joining, sometimes they
|
||||
can still join, like when after a netsplit the channels merge again.
|
||||
When all users on the channel are connected through SSL, the channel is set +Z
|
||||
by the server. Whenever an insecure user joins, the channel is put -Z.
|
||||
- Remote MOTD support: you can now specify an URL instead of a file
|
||||
- Automatic installation of curl (w/c-ares) if you answer 'Yes' to remote includes
|
||||
- One can now rehash ALL servers with the command '/REHASH -global'. This can be
|
||||
particularly useful if you use remote includes or MOTD's. NetAdmin only command.
|
||||
- files { } block by which you can configure the location of the tune file, pid, etc
|
||||
- STARTTLS: On an IRCd compiled with SSL support this allows a client to start a SSL
|
||||
session on a regular non-SSL port (like 6667). Only supported by a few IRC clients.
|
||||
Can be disabled by setting set::ssl::options::no-starttls
|
||||
- set::uhnames: this allows one to turn UHNAMES off ('no'), which can be a good idea
|
||||
if you have channels with more than 1000 users, as otherwise the nicklist can take
|
||||
several seconds to load. Defaults to on ('yes').
|
||||
- IPv6 clones detection support: allow::ipv6-clone-mask determines the number of bits
|
||||
used when comparing two IPv6 addresses to determine if allow::maxperip is exceeded.
|
||||
This allows an admin to recognize that most IPv6 blocks are allocated to individuals,
|
||||
who might each get a /64 IPv6 block. set::default-ipv6-clone-mask defaults to 64 and
|
||||
provides default value for the allow blocks.
|
||||
- The m_nopost module is now part of Unreal: this defends against the Firefox/
|
||||
Javascript 'XPS attack' which uses HTTP POST to create dummy IRC bots.
|
||||
- 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 ]==
|
||||
- Channel Mode +z: due to the +z/+Z changes, some things have changed:
|
||||
- +z can now be set even when insecure users are present
|
||||
(the channel will then be set +Z when the last insecure user leaves)
|
||||
- An oper previously had to invite himself and then join the channel
|
||||
with the key 'override' to set -z. This is no longer needed.
|
||||
The channel stays +z, but will be set -Z when the oper joins.
|
||||
- Remote includes: if a remote include fails to load (eg: webserver down) then
|
||||
the most recent (cached) version of that remote include will be used, and the
|
||||
IRCd will still boot and be able to REHASH. This means it is now 'safe' to
|
||||
use remote includes on a network, without risking problems like unable to
|
||||
rehash in case of webserver problems.
|
||||
- set::level-on-join now supports voice/halfop/protect/owner
|
||||
- Backslashes (\) in MOTD/RULES files are no longer considered special, this
|
||||
might mean that you have to change some escaped backslashes (\\) to \.
|
||||
- '/REHASH -motd' really rehashes ALL MOTD/OPERMOTD/BOTMOTD/RULES files, both
|
||||
the 'normal' files and the ones in tld { } blocks.
|
||||
- The 'Compile as hub/leaf' choice is now gone, as it didn't do anything.
|
||||
- Better document 'sslclientcert' in the Oper Block documentation.
|
||||
This allows one to authenticate against a SSL certificate for /OPER, instead
|
||||
of using a password.
|
||||
- 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 ]==
|
||||
- If you have autoconnect with a low connfreq, previously you often risked getting
|
||||
'Server exists' errors and 'breaking' the network. Now, the server handshake has
|
||||
been redesigned which means this will no longer happen. You can now safely have
|
||||
a low connfreq of - for example - 10 seconds.
|
||||
- Windows: 'Permission denied' errors when starting Unreal
|
||||
- A crash on some new Linux systems when replacing .so files
|
||||
- Solaris & QNX: Compile problems
|
||||
- IPv6: admins no longer have to tweak sysctl, like on FreeBSD & newer Linux systems
|
||||
- IPv6: IPv4 ip's in link::bind-ip did not work properly which made the IRCd either
|
||||
not bind to the correct IP, or - like on FreeBSD - made it unable to link at all.
|
||||
- A very rare crash on outgoing connect
|
||||
- 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 ]==
|
||||
- autoconnect not working if TS offset was negative (for the duration of the offset)
|
||||
- CGI:IRC & IPv6: sometimes a users' IP was incorrectly formatted, causing 'ghosts'
|
||||
- Mac OS X: permission problems
|
||||
- Several installation issues with curl
|
||||
- SSL: No more 'Underlying syscall error', the actual error is now shown
|
||||
- And many more... see Changelog
|
||||
- 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
|
||||
|
||||
==[ 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.
|
||||
- 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
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
ircdcron/ircd.cron
|
||||
ircdcron/ircdchk
|
||||
src/modules/Makefile
|
||||
src/ssl.rnd
|
||||
src/win32/devel/StackTrace.lib
|
||||
src/win32/gnu_regex.lib
|
||||
@@ -1,16 +0,0 @@
|
||||
[repository]
|
||||
native = LF
|
||||
|
||||
[patterns]
|
||||
.RELEASE.NOTES = native
|
||||
README = native
|
||||
Unreal.nfo = native
|
||||
makefile.win32 = native
|
||||
Changes = native
|
||||
**.c = native
|
||||
**.h = native
|
||||
**.conf = native
|
||||
**.html = native
|
||||
**.txt = native
|
||||
**.bat = native
|
||||
**.iss = native
|
||||
@@ -1,22 +0,0 @@
|
||||
syntax: regexp
|
||||
|
||||
# particular targets
|
||||
^ircdcron/ircdchk$
|
||||
^ircdcron/ircd\.cron$
|
||||
^src/ircd$
|
||||
^src/include$
|
||||
^src/version\.c$
|
||||
^unreal$
|
||||
|
||||
# General
|
||||
\.(o|so|orig|rej)$
|
||||
~$
|
||||
|
||||
# autotools
|
||||
^config\.(status|log)$
|
||||
|
||||
# not quite autotools
|
||||
^config\.settings$
|
||||
^include/setup\.h$
|
||||
^Makefile$
|
||||
^src/modules/Makefile$
|
||||
@@ -1767,543 +1767,3 @@
|
||||
- Fixed (serious) security issue regarding allow::options::noident,
|
||||
reported by meepmeep (#0003852).
|
||||
** 3.2.8.1 release **
|
||||
- Fixed compile issue on Solaris regarding c-ares (-lrt), reported and
|
||||
test shell provided by fraggeln (#0003854).
|
||||
- Improved automatic SSL detection on Solaris (/usr/sfw), reported by
|
||||
fraggeln (also #0003854).
|
||||
- Don't do show-connect-info on serversonly ports
|
||||
- Fixed crash on Linux (with a 'new' dynamic linker) when a module has
|
||||
been updated and then reloaded. From now on we just copy to a tempfile,
|
||||
and never hardlink. (bug #3557).
|
||||
- Print out an error if a user uses standard ./configure stuff instead of
|
||||
./Config. Won't catch all cases, but will definitely catch most problems.
|
||||
- Update some urls
|
||||
- Added ./configure option called --with-system-tre by which you can specify
|
||||
a path to the TRE library (instead of using the TRE we ship with Unreal).
|
||||
Patch provided by ohnobinki (#0003842).
|
||||
- Applied another patch from ohnobinki which adds --with-system-cares
|
||||
(#0003847).
|
||||
- Comitted Windows Installer fix that was put in 3.2.8.1, fixing
|
||||
#0003845 and #0003809 (MS Visual Studio Redistributable package automatic
|
||||
installation).
|
||||
- Fix /VERSION output on Windows, especially for Vista and newer Windows,
|
||||
patch from BuHHunyx and Bock (#0003846).
|
||||
- Fixed issue where a negative time offset (either caused by ircd.tune or
|
||||
timesynch) made autoconnect not work for the duration of the offset
|
||||
(eg: -60 would make autoconnect wait 60 seconds after boot, instead of
|
||||
autoconnecting almost immediately). Reported by aragon (#0003853).
|
||||
- class name 'default' is reserved. Using it caused the ircd to crash
|
||||
on-boot, reported by Dragon_Legion (#0003864).
|
||||
- Fixed IPv4 ip's in link::bind-ip on IPv6 builds. This caused issues ranging
|
||||
from not binding to that ip when linking, to not being able to link at
|
||||
all. Also fixed a very small memory leak upon /REHASH. Bug reported by
|
||||
Mr_Smoke (#0003858).
|
||||
- Applied patch from k4be (#0003866) which introduces a new packet hook
|
||||
(HOOKTYPE_PACKET). Replacing the 'text to be sent' to a client is
|
||||
supported, which allows character(set) conversion in a module.
|
||||
Note that modifying an incoming message by the hook is not supported.
|
||||
- Applied patch from ohnobinki (#0003863) which makes run-time configuration
|
||||
of files (tune, pid, motd) possible.
|
||||
- Fixed bug reported by mut80r (#0003867) where locops didn't get a
|
||||
proper vhost when set::hosts::local had a 'user@host' syntax instead of
|
||||
just 'host'. Also fixed a bug with regards to +x on-oper with locops.
|
||||
- When an incorrect command line argument is passed, the IRCd will no longer
|
||||
boot. Previously it said 'Server not started' but started anyway.
|
||||
Reported and patch provided by ohnobinki (#0003870).
|
||||
- Added special caching of remote includes. When a remote include fails to
|
||||
load (for example when the webserver is down), then the most recent
|
||||
version of that remote include will be used, and the ircd will still boot
|
||||
and be able to rehash. Even though this is quite a simple feature, it
|
||||
can make a key difference when deciding to roll out remote includes on
|
||||
your network. Previously, servers would be unable to boot or rehash when
|
||||
the webserver was down, which would be a big problem (often unacceptable).
|
||||
The latest version of fetched urls are cached in the cache/ directory as
|
||||
cache/<md5 hash of url>.
|
||||
Obviously, if there's no 'latest version' and an url fails, the ircd will
|
||||
still not be able to boot. This would be the case if you added or changed
|
||||
the path of a remote include and it's trying to fetch it for the first time.
|
||||
To disable this new behavior, check out REMOTEINC_SPECIALCACHE in
|
||||
include/config.h.
|
||||
- set::level-on-join now also supports voice, halfop, protect and owner.
|
||||
Requested by katsklaw (#0003852). Partial patch provided by katsklaw and
|
||||
morpheus_pl.
|
||||
- Added initial support for "stacked" extbans. Please see the Changelog item
|
||||
further down (250 lines or so) for more information, as it was heavily
|
||||
reworked later on and the API was changed.
|
||||
- Misc fix for disabling stacked extbans, should've done stuff in our autoconf
|
||||
stuff instead of hacking configure directly :P .
|
||||
- Made the timesynch log output more clear and understandable.
|
||||
- Added an 'UnrealIRCd started' log message on startup.
|
||||
- Added support for STARTTLS. This allows users to switch to SSL without
|
||||
having to use a special SSL-only port, they can simply switch to SSL on
|
||||
any port. This is currently only supported by few clients (such as KVIrc 4).
|
||||
This functionality can be disabled by setting set::ssl::options::no-starttls,
|
||||
for example if you don't want to offer SSL to your users and only want it
|
||||
to be used for server to server links.
|
||||
Naturally, the IRCd must be compiled with SSL support for STARTTLS to work.
|
||||
- Fixed SSL_ERROR_WANT_READ in IRCd_ssl_write()
|
||||
- Use RPL_STARTTLS/ERR_STARTTLS numerics
|
||||
- Removed log target 'kline' from documentation, as it didn't do anything
|
||||
(use 'tkl' instead). Reported by nephilim and Stealth (#0003849).
|
||||
- Server protocol: added PROTOCTL EAUTH=servername, which allows us to
|
||||
authenticate the server very early in the handshake process. That way,
|
||||
certain commands and PROTOCTL tokens can 'trust' the server.
|
||||
See doc/technical/protoctl.txt for details.
|
||||
- Server protocol: between new Unreal servers we now do the handshake a
|
||||
little bit different, so it waits with sending the SERVER command until
|
||||
the first PROTOCTL is received. Needed for next.
|
||||
- Server protocol: added PROTOCTL SERVERS=1,2,3,4,etc by which a server can
|
||||
inform the other server which servers (server numeric, actually) it has
|
||||
linked. See doc/technical/protoctl.txt and next for details.
|
||||
- When our server was trying to link to some server, and at the same time
|
||||
another server was also trying to link with us, this would lead to a
|
||||
server collision: the server would link (twice) ok at first, but then a
|
||||
second later or so both would quit with 'Server Exists' with quite some
|
||||
mess as a result. This isn't unique to Unreal, btw.
|
||||
This happened more often when you had a low connfreq in your link blocks
|
||||
(aka: quick reconnects), or had multiple hubs on autoconnect (with same
|
||||
connfreq), or when you (re)started all servers at the same time.
|
||||
This should now be solved by a new server handshake design, which detects
|
||||
this race condition and solves it by closing one of the two (or more)
|
||||
connections to avoid the issue.
|
||||
This also means that it should now be safe to have multiple hubs with low
|
||||
connfreq's (eg: 10s) without risking that your network falls apart.
|
||||
This new server handshake (protocol updates, etc) was actually quite some
|
||||
work, especially for something that only happened sporadically. I felt it
|
||||
was needed though, because (re)linking stability is extremely important.
|
||||
This new feature/design/fix requires extensive testing.
|
||||
This feature can be disabled by: set { new-linking-protocol 0; };
|
||||
- Made ./Config description about remote includes a bit more clear.
|
||||
- When you now answer Yes to Remote includes in ./Config and $HOME/curl does
|
||||
not exist, it now asks you if you want to automatically download and
|
||||
install curl (which is done by ./curlinstall).
|
||||
This has been tested on Linux, further testing on f.e. FreeBSD is required.
|
||||
- Fixed a /RESTART issue on Linux: Unreal did not properly close all file-
|
||||
descriptors. Because of this, Unreal did not restart properly as you would
|
||||
get an "Address already in use" error. This only seemed to happen when
|
||||
logging to syslog, or when there was something wrong with syslogd.
|
||||
Reported by Mouse (#0003882).
|
||||
- Fixed a similar issue with syslog (and debugmode) and closing fd's as well:
|
||||
the first port we listened on would not open up, ircd did not log any error.
|
||||
- Added set::uhnames setting which can be used to disable uhnames by setting
|
||||
it to 'no', the default is 'yes' (on). Requested by Robin (#0003885) as
|
||||
UHNAMES may increase the time of the nick list being loaded from 1 to 4
|
||||
seconds when joining several channels with more than 1000 users. As this
|
||||
problem is only present on some networks, we keep UHNAMES enabled by default.
|
||||
- Added patch from ohnobinki (#0003888), only slightly edited, which improves
|
||||
curl detection, added checks to see if curl actually works (print out a
|
||||
clear curl error during configure, instead of getting an error during
|
||||
'make'), and we now error when using --enable-libcurl without
|
||||
--with-system-cares if the system curl depends on c-ares. This is because
|
||||
this can cause ABI incompatability between curl's c-ares and our c-ares,
|
||||
which leads to odd issues such as:
|
||||
Could not resolve host: www.example.net (Successful completion)
|
||||
And possibly other weird issues, perhaps even crashes.
|
||||
- Patch from above is (temp.) reverted, Unreal wouldn't compile without curl.
|
||||
- Reverted the revert and updated one line to fix the fix.
|
||||
- Fix for --with-system-cares, reported and patch provided by ohnobinki
|
||||
(#0003890).
|
||||
- Another c-ares fix for Solaris 10, this time it had to do with
|
||||
PATH_SEPARATOR, the exact error was: error: PATH_SEPARATOR not set.
|
||||
Reported by j0inty, patch provided by ohnobinki (#0003887).
|
||||
- Updated pkg-config m4 macro (now 0.23) for configure, patch from ohnobinki
|
||||
(#0003889).
|
||||
- Better document /REHASH flags. No longer document some flags as they are
|
||||
redundant and confusing. Also removed an old statement saying k-lines would
|
||||
be erased on rehash which is not true. Documented '/rehash -dns'.
|
||||
Reported by ohnobinki (#0003881).
|
||||
- We now no longer treat \ (backslash) in *MOTD and RULES files as special.
|
||||
Previously this caused some really odd behavior. Backslashes are now
|
||||
treated as-is, so no special escaping is necessary. Reported by DelGurth
|
||||
(#0003002).
|
||||
- Removed old dgets() and crc32 function (code cleanup)
|
||||
- Updated ./Config description for NOSPOOF, it already said it protects
|
||||
against HTTP POST proxies, now added some extra text to say it also
|
||||
protects against the Firefox XPS IRC Attack. Also made NOSPOOF enabled by
|
||||
default on *NIX (this was already the case on Windows).
|
||||
- Updated ./Config description for DPATH. Seems quite some people answer
|
||||
this question wrong, and when that happens, you only get some obscure
|
||||
error when running './unreal start'.
|
||||
- Fixed 'unreal' script to give a better error if it cannot find the IRCd
|
||||
binary.
|
||||
- Made '/REHASH -motd' really rehash *all* MOTD, OPERMOTD, BOTMOTD and RULES
|
||||
files. Reported by bitmaster (#0003894).
|
||||
- IPv6: it seems some recent Linux dists decided to make IPv6 sockets
|
||||
IPv6-only, instead of accepting both IPv4&IPv6 on them like until now.
|
||||
FreeBSD (and other *BSD's) already did that move a few years back,
|
||||
requiring server admins to sysctl.
|
||||
We now make use of a new option to explicitly disable "IPv6-only".
|
||||
This should work fine on Linux.
|
||||
Whether it provides a complete solution for FreeBSD, I don't know, testing
|
||||
is welcome! In theory setting net.inet6.ip6.v6only to 0 should no longer
|
||||
be needed, but you might still need to enable ipv6_ipv4mapping.
|
||||
- Fix stupid issue where current CVS would no longer link TO an earlier
|
||||
Unreal server (eg: outgoing connect to a 3.2.8 hub). Reported by ohnobinki
|
||||
(#0003901).
|
||||
- Update Unreal.nfo with information about new support network setup (#0003904)
|
||||
- Remove the ``Compile as hub/leaf'' concept as I'm quite sure this doesn't
|
||||
actually do anything (#0003891)
|
||||
- Clarify/expand alias block documentation, especially for alias::type=command;
|
||||
(#0003902)
|
||||
- Fix -DDEFAULT_PERMISSIONS=0 support. Previously, support.c:unreal_copyfile()
|
||||
would create files with no permissions, breaking loadmodule. (#0003905)
|
||||
- Remove m_addline from commands.so
|
||||
- Removed ugly ``files {} got initialized!'' message.
|
||||
- SVSMODE now triggers HOOKTYPE_UMODE_CHANGE and HOOKTYPE_REMOTE_CHANMODE.
|
||||
- Added chmode +r to HTML documentation.
|
||||
- ./Config now remembers extra/custom ./configure parameters.
|
||||
- Fixed bug in CVS where the ban exempt (+e) handling was reversed: if a
|
||||
non-matching +e was present, one could walk through bans. Reported by
|
||||
tabrisnet (#0003909). Bug was caused by stacked extbans.
|
||||
- Partially fixed bug where IPv4 addresses were randomly mishandled by the
|
||||
cgiirc code, resulting in the sockhost/hostmask being set to something like
|
||||
::ffff:127.0.0.1, which confused the s2s protocol. Reported by tabrisnet
|
||||
(#0003907). Also, reject incorrectly formed hostnames from WEBIRC command.
|
||||
- More strict sockhost (hostmask) checking in m_nick.c:_register_user(). Fixed
|
||||
some bad string handling as well. See comments in bug (#0003907).
|
||||
- Throw out old USE_POLL code which 1. has no buildsystem support and 2.
|
||||
has comments which claim it doesn't work.
|
||||
- Removed extraneous apostrophe from a module loader error message.
|
||||
- Added error message for unknown directives in the "files" block
|
||||
- Remote MOTD support. Not adequately tested. Required restructuring of the
|
||||
asynchronous download callback and handler. (#)
|
||||
- Added some consts throughout url.c, etc.
|
||||
- Fix segfault where the an include directive specifies a URL and cURL follows
|
||||
redirects, resulting in a different resultant URL. The remote includes code
|
||||
would look for the an include block using the resultant URL and assume that
|
||||
it would be found. The new code searches differently, has new checks, and
|
||||
ignores the resultant URL.
|
||||
- Removed duplicated m_motd() and friends that were both in modules and s_serv.c.
|
||||
The copies in s_serv.c (core) were overriding the in-module functions.
|
||||
- Forgot to commit the REMOTEINC_SPECIALCACHE stuff to config.h which means
|
||||
it wasn't actually enabled until now...
|
||||
- Fix typo
|
||||
- Fix files::shortmotd to by accepted by unrealircd like the docs say it is.
|
||||
- Fix remote includes download handling which I broke for remote includes ;-).
|
||||
- Recursively add more consts.
|
||||
- Rename configure.in to configure.ac and modernize AC_INIT.
|
||||
- Handle bad flags in set::ssl::options better (#0003896).
|
||||
- When removing a SHUN, check if users who were blocked by this SHUN are still
|
||||
blocked by another SHUN. Previously, if multiple shuns covered a single user,
|
||||
removing one of these shuns would mark the user as un-SHUN-ed. (#0003906)
|
||||
- Fixed race condition / reference count issue where an outgoing server connect
|
||||
would cause the IRCd to crash. Reported by Monk (#0003913).
|
||||
- Replaced some coders@lists.unrealircd.org references with bugs.unrealircd.org
|
||||
- Fixed desynchronized prototype.
|
||||
- Fixed a few trivial compilation warnings.
|
||||
- Move configure.ac to the project's root.
|
||||
- Separate m4 macros into *.m4 files (it is much easier to run aclocal now).
|
||||
- Remove unused DOMAINNAME macro and --with-hostname= options as the DOMAINNAME
|
||||
macro isn't used anywheres and its use shouldn't be encouraged.
|
||||
- autogen.sh to bootstrap the buildsystem. We now maintain setup.h with autoheader.
|
||||
- --disable-blah now does the opposite of --enable-blah. The same for --with-blah
|
||||
and --without-blah. (This makes Gentoo users happier).
|
||||
- Attempt to make up for Windows not having mode_t and not complying to POSIX.
|
||||
- Fix references in src/win32 to aMotd to now be to aMotdFile.
|
||||
- Fix references to motd and friends in src/win32. (#0003918)
|
||||
- Remove include/nameser.h and reference to nameser.h from s_bsd.c. The associated
|
||||
functionality has been provided by c-ares for a long time.
|
||||
- Remove remaining nameser.h references from Makfiles.
|
||||
- Prevent stacked bans (like +b ~q:~q:~n:~c:#chanel) from crashing unrealircd due
|
||||
to over-recycling a static buffer. Discovered by syzop.
|
||||
- helpop documentation for stacked extbans.
|
||||
- Updated doc/coding-guidelines
|
||||
- Fixed some odd behavior with SVSMODE and +z/-z, reported by TehRes (#0003498),
|
||||
fixed a strange SVSMODE +d <non-number> bug where it would act as a +x too.
|
||||
- The patch from #0003888 made ./Config favor the curl in /usr, even if it
|
||||
was not compiled with c-ares, which is clearly a bad idea as then the
|
||||
entire IRCd can hang for several seconds or more...
|
||||
We now check if they support asynch DNS, and skip them if they don't.
|
||||
- Remove extraneous `I' from configure.ac, run ./autogen.sh. (#3930)
|
||||
- Added some checks in ./Config which (often) ensures that the self-compiled
|
||||
curl version is new enough and is not using a c-ares which is binary
|
||||
incompatible. If the self-compiled curl version is (too) outdated, then we
|
||||
now suggest to rename it and have the installer re-download and compile
|
||||
it automatically. This avoids some potential crashes.
|
||||
- Give more clear error to users who use ``make custommodule'' without
|
||||
MODULEFILE. (#3935)
|
||||
- Support compiling with a bundled c-ares again, the hacky way. (#3931)
|
||||
- The configure.ac change silently changed the nospoof parameter in
|
||||
./configure. This meant that the answer to NOSPOOF in ./Config was ignored
|
||||
and it was always enabled.
|
||||
- Initialize ARG parameter properly in ./Config, otherwise everything fails.
|
||||
- Fixed similar bug like nospoof with ./Config, but now with prefixaq.
|
||||
- Same for IPv6
|
||||
- Now define _SOLARIS, USE_LIBCURL, and ZIP_LINKS in setup.h instead
|
||||
of the Makefiles. This means better automatic rebuilds if the latter
|
||||
settings change.
|
||||
- Updated unreal32docs:
|
||||
- Remove browser compatibility listing.
|
||||
- Added information about ``oper::password::auth-type sslclientcert''
|
||||
and the same for link::password-receive::auth-type.
|
||||
- A little bit more of interlinking and using id="" instead of <a
|
||||
name="" />
|
||||
- Some minor tweaks
|
||||
- Fix the detection for curl-without-c-ares a little (#0003940).
|
||||
- Add an extban of the schema +b ~j:*!*@* which _only_ prevents a user
|
||||
from joining a channel. (#3192)
|
||||
- Fix src/Makefile's lack of depencencies for modules.c, related to
|
||||
#3938.
|
||||
- Fix a few compiler warnings with some double-casting and another
|
||||
const. (#3939)
|
||||
- Define intptr_t in win32's setup.h. (#3939)
|
||||
- Upgraded c-ares to 1.7.3. API seems compatible with
|
||||
c-ares-1.6.0. (#3932)
|
||||
- Force compilation with bundled c-ares to statically link using more
|
||||
sed hackery in configure.ac.
|
||||
- Remove extras/c-ares before each time c-ares is compiled.
|
||||
- Uniform naming for 'stacked extbans' in Changelog/etc.
|
||||
- Make extended bans documentation more clear by splitting the extbans in
|
||||
two groups: one that specifies ban actions (~q/~n/~j) and one that
|
||||
introduces new criteria (~c/~r). Also added documentation for ~R which
|
||||
does not exist yet, but will soon...
|
||||
- This is actually an update of earlier code from CVS, but now it works ok:
|
||||
- Added support for "stacked" extbans. Put simply this allows extban combinations
|
||||
such as ~q:~c:#test to only silence users on #test, for example. This feature
|
||||
is enabled by default, but can be disabled during ./Config -advanced.
|
||||
This feature was suggested by Shining Phoenix (#0003193), was then coded
|
||||
by aquanight for U3.3, and later on backported and partially redone by Syzop.
|
||||
Module coders:
|
||||
In an extban ~x:~y:something where we call ~x the 1st, and ~y the 2nd extban:
|
||||
Since stacked extbans only makes sense where the 1st one is an action
|
||||
extended ban like ~q/~n/~j, most modules won't have to be changed, as
|
||||
their extban never gets extended (just like ~c:~q: makes no sense).
|
||||
However, you may still want to indicate in some cases that the extban your
|
||||
module introduces also shouldn't be used as 2nd extban.
|
||||
For example with a textban extban ~T it makes no sense to have ~n:~T.
|
||||
The module can indicate this by setting EXTBOPT_NOSTACKCHILD in
|
||||
the ExtbanInfo struct used by ExtbanAdd().
|
||||
For completeness I note that action modifier extbans are indicated by
|
||||
EXTBOPT_ACTMODIFIER. However, note that we currently assume all such
|
||||
extbans use the extban_is_ok_nuh_extban and extban_conv_param_nuh_or_extban
|
||||
functions. If you don't use these and use EXTBOPT_ACTMODIFIER, then things
|
||||
will go wrong with regards to stack-counting.
|
||||
Module coders should also note that stacked extbans are not available if
|
||||
DISABLE_STACKED_EXTBANS is defined.
|
||||
- Added extended ban ~R:<nick>, which only matches if <nick> is a registered
|
||||
user (has identified to services). This is really only useful in ban
|
||||
exemptions, like: +e ~R:Nick would allow Nick to go through all bans if he
|
||||
has identified to NickServ. This is often safer than using +e n!u@h.
|
||||
- Added Extended Invex. This is very much like extended bans, in fact it
|
||||
supports some of the same flags. Syntax: +I ~character:mask
|
||||
Currently supported are: ~c (channel), ~r (realname) and ~R (registered).
|
||||
This can be useful when setting a channel invite only (+i) and then
|
||||
setting invite exceptions such as +I ~c:#chan (or even ~c:+#chan), while
|
||||
still being able to ban users.
|
||||
Because action modifiers (~q/~n/~j) make no sense here, extended invex
|
||||
stacking (+I ~a:~b:c) makes no sense either, and is not supported.
|
||||
Suggested by DanPMK (#0002817), parts based on patch from ohnobinki.
|
||||
Module coders: set EXTBOPT_INVEX in the ExtbanInfo struct used by
|
||||
ExtbanAdd() to indicate that your extban may also be used in +I.
|
||||
- Invex (+I) now always checks cloaked hosts as well. Just like with bans,
|
||||
it checks them also when the user is not currently cloaked (eg: did -x, or
|
||||
is currently using some VHOST).
|
||||
- Fixed client desynch caused by (un)banning, reported by Sephiroth (#2837).
|
||||
- IPv6 clones detection support (#2321). allow::ipv6-clone-mask determines
|
||||
the number of bits used when comparing two IPv6 addresses to determine if
|
||||
allow::maxperip is exceeded. This allows an admin to recognize that most
|
||||
IPv6 blocks are allocated to individuals, who might each get a /64 IPv6
|
||||
block. set::default-ipv6-clone-mask defaults to 64 and provides default
|
||||
value for the allow blocks.
|
||||
- Upgrade to tre-0.8.0, adding hack similar to the one for c-ares to
|
||||
ensure that the bundled tre is compiled against even when a system
|
||||
libtre is installed. (#3916)
|
||||
- Install ircdcron scripts. (#2620)
|
||||
- Autogenerate ircdcron/ircd.cron based on ./configure settings.
|
||||
- Get rid of any setsockopt(IPV6_V6ONLY) errors in ircd.log (#3944).
|
||||
- Actually initialize m_starttls when it's included into commands.so.
|
||||
- Prepend a `0' to the begining of --with-permission, working around a
|
||||
Mac OS X bug and hiding the fact that chmod()'s params are octal
|
||||
from users. (#3189)
|
||||
- Warn users against running UnrealIRCd as root without setting
|
||||
IRC_USER. (#3053 reported by Stealth)
|
||||
- Remove snomasks upon deopering when it seems like the user shouldn't
|
||||
have snomasks. (#3329)
|
||||
- Fix /msg IRC WHOIS response for persons with secure connections. (#3947)
|
||||
- Fix segfault by checking if RESTRICT_USERMODES is NULL in the code
|
||||
for bug #3329.
|
||||
- Don't use sys/errno.h, as it's not POSIX and breaks on QNX-6.5.0. (#3955)
|
||||
- Fixed another compile problem on QNX, reported by chotaire (#3955 too).
|
||||
- Fixed incorrect messages regarding clock going backwards on QNX 6 and
|
||||
later, reported by chotaire (#0003956).
|
||||
- Reverted an IPv6/Config fix I did on July 17. Reported by chotaire (#3958).
|
||||
- Document the badword block more explicitly and clearly. (#3959)
|
||||
- Add the m_nopost module written by syzop and compile it into
|
||||
commands.so. This module was written to help IRCd maintainers deal
|
||||
with some sort of ``XPS'' attack in which javascript-initiated HTTP
|
||||
POST form submissions were able to act as dummy IRC bots. These
|
||||
simple bots were the cause of much spam. Note that enabling NOSPOOF,
|
||||
which was the default on Windows and is now also the default on *NIX,
|
||||
already stops the troublemakers from getting on IRC. However, the nopost
|
||||
module kills them right away, rather than have them idle for 30 seconds
|
||||
which could consume all your connections, preventing (legit) users
|
||||
from being able to connect (#3893).
|
||||
- Add a modules section to the documentation. This was created to put
|
||||
all documentation specific to the m_post module in one, easy to find
|
||||
place. The documentation on m_post is likely incomplete, however.
|
||||
- Fixed notices to opers about server delinks not being broadcasted to all
|
||||
other servers if they were on SSL links. Reported by chotaire (#0003957).
|
||||
- SSL errors are now more descriptive. In some cases, like server to server
|
||||
links it was still showing 'Underlying syscall error', this has now been
|
||||
replaced to show the actual (surprise!) underlying syscall error instead.
|
||||
Reported by vonitsanet, patch from ohnobinki (#0003157).
|
||||
- Fix ordering of ``9. FAQ'' and ``10. Modules'' in HTML docs.
|
||||
- Always display the real host of successful OPERing up. Reported by
|
||||
Josh. (#3950)
|
||||
- Fixed braindamage in stacked bans.
|
||||
- Add m_nopost to makefile.win32 in the hopes that it may work (#3961).
|
||||
- Document spamfilter 'warn' action in unreal32docs.
|
||||
- Fix missing OperOverride notices for +u and +L if not chanowner, reported
|
||||
by Mareo (#0003358), partial patch from goldenwolf.
|
||||
- Updated doc/compiling_win32.txt with current free MS SDK information,
|
||||
patch from goldenwolf.
|
||||
- And another m_nopost makefile.win32 fix.
|
||||
- Some small updates to the extended channel mode system: it now has minimal
|
||||
support for 'local channel modes'. This is really only meant for channel
|
||||
mode +Z (upcase z), see next.
|
||||
- Added Channel Mode Z which indicates if a channel is 'secure' or not.
|
||||
This mode works in conjunction with +z (lower case z).
|
||||
If +z is set ('only secure users may join'), then the IRCd scans to see
|
||||
if everyone in the channel is connected through SSL. If so, then the
|
||||
channel is set +Z as well ('channel is secure').
|
||||
Whenever an insecure user manages to join, the channel is -Z. And whenever
|
||||
all insecure users leave, the channel is set +Z.
|
||||
The 'insecure user being present in a +z channel' can be because:
|
||||
- An IRCOp joined the channel, and he's not secure
|
||||
- When servers link together and a user on the other side is not secure
|
||||
This only happens on net merge (equal time stamp).
|
||||
On different time stamp, we still kick insecure users on the new side.
|
||||
- At the time when +z is set, there are insecure users present.
|
||||
This feature was implemented after a heavy discussion in bug #3720 by fez
|
||||
and others, and was suggested by Stealth.
|
||||
Tech note: +Z/-Z is handled locally by each server. Any attempt to
|
||||
remotely set +Z/-Z (eg: by services) will be ignored.
|
||||
- As mentioned above, +z can now be set even if any insecure users are
|
||||
present. Previously, this was not permitted. Now, as soon as the last
|
||||
non-SSL user leaves, the channel will be set +Z.
|
||||
- An oper not connected through SSL previously had to /INVITE himself
|
||||
to a channel and then /JOIN the channel with the key 'override'.
|
||||
This 'override' key is no longer required, a simple JOIN will suffice.
|
||||
- Sorted channel modes in /HELPOP ?CHMODES
|
||||
- Re-enabled 'fishy timestamp' errors in MODE. For some reason this was
|
||||
commented out, even though the (more annoying and less useful) code in
|
||||
JOIN was enabled so that did not make a lot of sense. It also now logs to
|
||||
ircd.log (or whatever you configure). This enables people to easier find
|
||||
the cause of any timestamp issues (which usually is badly coded services).
|
||||
- Win32 installer: Make it so a user can no longer accidentally check both
|
||||
'install as service' and 'encrypt SSL certificate', as they are
|
||||
incompatible (a service cannot ask a user to enter a password).
|
||||
Reported by HotFusionMan (#0003848).
|
||||
- Win32 installer: Fixed long outstanding problem with some Vista / Windows 7
|
||||
installations, which has to do with file permissions of the Unreal3.2
|
||||
folder. Symptoms were error messages such as:
|
||||
Unable to create file 'tmp/10D9D743.commands.dll': Permission denied
|
||||
But also failing to create SSL certificates, nothing being logged, etc.
|
||||
This is now fixed by setting write access on the Unreal3.2 folder to the
|
||||
user running the install, unless the user chooses not to use this new
|
||||
option (it can be unchecked), in which case the user is warned that he
|
||||
should take care of this himself.
|
||||
Reported by various persons, special thanks to Bock and goldenwolf for
|
||||
helping us to track down this issue (#0003943).
|
||||
- Little tweak to +Z: when the last insecure user parts and the channel is
|
||||
set +Z (secure), the parting user saw the MODE too, which was silly.
|
||||
Reported by Robby22 (#0003720).
|
||||
- Added '/REHASH -global' command which will rehash all servers on the
|
||||
network. You can also specify options like '/REHASH -global -motd' to
|
||||
rehash only the MOTD/RULES/etc. Just like /REHASH <servername> this is a
|
||||
NetAdmin-only command. This command is fully backwards compatible with
|
||||
older UnrealIRCd version in the sense that it will also REHASH old
|
||||
Unreal's. Suggested by 'P' in #0001522.
|
||||
- Clarified the difference between 'except ban' (which exempts from KLINE
|
||||
and ZLINE) and 'except tkl' (which can exempt from GLINE, GZLINE, SHUN,
|
||||
QLINE and GQLINE). Reported by Digerati (#0002535).
|
||||
- Added except tkl::type 'all', which exempts from all TKL types (except
|
||||
KLINE).
|
||||
- Added set::options::allow-insane-bans which makes it possible to set
|
||||
really broad bans such as *@*.xx. Needless to say this can be very
|
||||
dangerous. Reported and patch provided by Stealth (#0003963).
|
||||
- Windows: When trying to load a module (DLL) windows can give us the
|
||||
mysterious error 'The specified module could not be found' even though the
|
||||
file exists. This usually means that it depends on another DLL, but
|
||||
apparently Microsoft decided not to mention that in the error message.
|
||||
We now append some small text when such an error happens, saying that it
|
||||
could be because of a missing dependency. Reported by Phil.
|
||||
- Fixed Windows compile problem with current CVS due to m_issecure,
|
||||
reported and fix provided by therock247uk (#3970).
|
||||
- Added release notes.
|
||||
- Error on zero sendq in class::sendq, reported by jonbeard.
|
||||
- Fix return values in src/auth.c on Win32.
|
||||
- Win32: Attempt to move to 100% winsock2 (the include, to be precise),
|
||||
this means includes have to be in a very particular order (!)
|
||||
- Win32: #define _WIN32_WINNT 0x0501 and force our own inet_ntop/pton,
|
||||
otherwise you get an ntop runtime error on XP and earlier.
|
||||
- Win32: Get rid of c-ares includes and library in our tree, and use the
|
||||
DLL instead of static LIB, just like we do for ssl and zlib.
|
||||
- Win32: Get rid of TRE lib and includes
|
||||
- Win32: reorder includes to fix winsock errors with curl
|
||||
- Win32: show missing /INFO in GUI
|
||||
** 3.2.9-rc1 release **
|
||||
- Enable parallel building of modules.
|
||||
- Fixed bug with curl not finding libcares, reported by katslaw.
|
||||
- Added workaround for 'curl-config' depending on 'bc'.
|
||||
- Fix typo 'alias::spampfilter' in German docs, reported by seraphim (#3978).
|
||||
- Fix missing #include <stdint.h>. Fixes compile error on OpenBSD
|
||||
reported by CuleX (#3977).
|
||||
- Fix invalid use of 'wc -l' when detecting the AsynchDNS feature of
|
||||
libcurl which breaks compilation on FreeBSD; instead use 'grep
|
||||
-q'. Reported by Jobe (#3981), solution proposed by satmd.
|
||||
- Fix bundled TRE compilation error on OpenBSD with pkg-config-0.21
|
||||
where pkg-config can't find 'tre.pc'. Reported by CuleX. (#3982)
|
||||
Also properly escape the sed expression used in the pkg-config call.
|
||||
- Fix remote MOTDs for URLs whose path components contain
|
||||
subdirectories, in the process much simplifying my remote MOTD
|
||||
code. Reported by goldenwolf (#3986).
|
||||
- Windows installer: if an SSL certificate already exists, then don't check
|
||||
the 'create SSL certificate' by default. Patch from goldenwolf (#3965).
|
||||
- Update doc/compiling_win32.txt a bit (#3975).
|
||||
- Updated credits a bit (#3980).
|
||||
- Fix set::ssl::options::no-starttls not being recognized.
|
||||
- Fix pointer handling in remote MOTD code, fixing a crash on REHASH
|
||||
reported by goldenwolf (#3992).
|
||||
- Bump server protocol version to 2310, due to the various changes and so
|
||||
you can use deny link { } blocks if you want to deny older versions than
|
||||
this release.
|
||||
- Fix documentation about channel mode +t and halfops, thanks warg (#4007).
|
||||
- Fix empty/nonexistent short MOTD being shown instead of the full
|
||||
MOTD on user registration. Thanks WakiMiko (#4011).
|
||||
- Module coders: Added HOOKTYPE_HANDSHAKE which is called before the client
|
||||
handshake, IOTW: as soon as the connection is established. This can be used
|
||||
to do things prior to accepting any commands, such as sending some text.
|
||||
- Moved from cvs to hg (thanks binki!), this means cvs from this point in
|
||||
time should no longer be used (the lastest CVS version will not compile,
|
||||
this has been done on-purpose).
|
||||
The new way to access the development version of UnrealIRCd is:
|
||||
hg clone http://hg.unrealircd.org/unreal
|
||||
If you get something like 'hg: command not found' then you need to
|
||||
install mercurial. Most *NIX systems have such a 'mercurial' package,
|
||||
but if you don't, or you are on Windows or Mac OS X, then grab it at
|
||||
http://mercurial.selenic.com/
|
||||
- Updated doc/compiling_win32.txt a bit.
|
||||
- The unreal32docs translations in Greek, Spanish and Dutch are marked as
|
||||
out of date.
|
||||
- CRLF conversion of unreal32docs.gr.html
|
||||
- Zip links: once a link was zipped, the error message when closing the
|
||||
connection was never actually sent (due to buffering). Hence, things like
|
||||
the /SQUIT reason was never seen on the other side (just 'server closed
|
||||
the connection'). This has now been fixed.
|
||||
- Fix compile failure introduced by last change when zip links are
|
||||
disabled.
|
||||
- Check that the automatically-generated cloak keys fit unrealircd's
|
||||
own criteria before printing them out. (#4017)
|
||||
- Added aliases/atheme.conf, provided by katsklaw (#0003990).
|
||||
- Support installing the ircd binary for people who set
|
||||
--with-spath=<dpath>/bin/ircd.
|
||||
- Add missing quotation to doc/help.fr.conf (#4026 by MewT).
|
||||
- Remove temporary message (Unreal3.2.1) regarding cloaking modules.
|
||||
- Add a self-documented and commented files {} block to example.conf.
|
||||
- Another fix-for-fix of zip links buffering from a few weeks ago.
|
||||
Reported by fbi (#0004030).
|
||||
- Win32: fix rehash from the command line not working, reported by Platzii
|
||||
(#0004028).
|
||||
- Update curl-ca-bundle.crt
|
||||
** 3.2.9-rc2 release **
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
|
||||
|
||||
RUN_CONFIGURE () {
|
||||
ARG=" "
|
||||
ARG=""
|
||||
# Do this even if we're not in advanced mode
|
||||
if [ "$SHOWLISTMODES" = "1" ] ; then
|
||||
ARG="$ARG--with-showlistmodes "
|
||||
@@ -41,12 +41,12 @@ fi
|
||||
if [ "$OPEROVERRIDEVERIFY" = "1" ] ; then
|
||||
ARG="$ARG--with-operoverride-verify "
|
||||
fi
|
||||
if [ "$DISABLEEXTBANSTACKING" = "1" ]; then
|
||||
ARG="$ARG--with-disable-extendedban-stacking ";
|
||||
fi
|
||||
if [ "$NOSPOOF" = "1" ] ; then
|
||||
ARG="$ARG--enable-nospoof "
|
||||
fi
|
||||
if [ "$NOSPOOF" != "1" ] ; then
|
||||
ARG="$ARG--disable-nospoof "
|
||||
if [ -n "$HUB" ] ; then
|
||||
ARG="$ARG--enable-hub "
|
||||
fi
|
||||
if [ "$CRYPTOIRCD" = "1" ] ; then
|
||||
if test x"$SSLDIR" = "x" ; then
|
||||
@@ -68,8 +68,8 @@ fi
|
||||
if [ "$INET6" = "1" ] ; then
|
||||
ARG="$ARG--enable-inet6 "
|
||||
fi
|
||||
if [ "$PREFIXAQ" != "1" ]; then
|
||||
ARG="$ARG--disable-prefixaq "
|
||||
if [ "$PREFIXAQ" = "1" ]; then
|
||||
ARG="$ARG--enable-prefixaq "
|
||||
fi
|
||||
ARG="$ARG--with-listen=$LISTEN_SIZE "
|
||||
ARG="$ARG--with-dpath=$DPATH "
|
||||
@@ -77,14 +77,12 @@ ARG="$ARG--with-spath=$SPATH "
|
||||
ARG="$ARG--with-nick-history=$NICKNAMEHISTORYLENGTH "
|
||||
ARG="$ARG--with-sendq=$MAXSENDQLENGTH "
|
||||
ARG="$ARG--with-bufferpool=$BUFFERPOOL "
|
||||
ARG="$ARG--with-hostname=$DOMAINNAME "
|
||||
ARG="$ARG--with-permissions=$DEFPERM "
|
||||
ARG="$ARG--with-fd-setsize=$MAXCONNECTIONS "
|
||||
ARG="$ARG--enable-dynamic-linking "
|
||||
ARG="$ARG $EXTRAPARA "
|
||||
CONF="./configure $ARG"
|
||||
if [ "x$INSTALLCURL" = "x1" ]; then
|
||||
./curlinstall || exit 1
|
||||
fi
|
||||
echo $CONF
|
||||
$CONF || exit 1
|
||||
cd "$UNREALCWD"
|
||||
@@ -277,42 +275,15 @@ while [ -z "$TEST" ] ; do
|
||||
esac
|
||||
done
|
||||
|
||||
TEST=""
|
||||
while [ -z "$TEST" ] ; do
|
||||
if [ "$DISABLEEXTBANSTACKING" = "1" ] ; then
|
||||
TEST="Yes"
|
||||
else
|
||||
TEST="No"
|
||||
fi
|
||||
echo ""
|
||||
echo "Do you want to disable extended ban stacking (~q:~c:#test, etc) support?"
|
||||
echo $n "[$TEST] -> $c"
|
||||
read cc
|
||||
if [ -z "$cc" ] ; then
|
||||
cc=$TEST
|
||||
fi
|
||||
case "$cc" in
|
||||
[Yy]*)
|
||||
DISABLEEXTBANSTACKING="1"
|
||||
;;
|
||||
[Nn]*)
|
||||
DISABLEEXTBANSTACKING="0"
|
||||
;;
|
||||
*)
|
||||
echo ""
|
||||
echo "You must enter either Yes or No"
|
||||
TEST=""
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
}
|
||||
c=""
|
||||
n=""
|
||||
UNREALCWD="`pwd`"
|
||||
NOSPOOF="1"
|
||||
NOSPOOF=""
|
||||
DPATH="`pwd`"
|
||||
SPATH="`pwd`/src/ircd"
|
||||
HUB="1"
|
||||
DOMAINNAME=`hostname`
|
||||
DEFPERM="0600"
|
||||
CRYPTOIRCD=""
|
||||
SSLDIR=""
|
||||
@@ -333,7 +304,6 @@ SHUNNOTICES=""
|
||||
NOOPEROVERRIDE=""
|
||||
DISABLEUSERMOD=""
|
||||
OPEROVERRIDEVERIFY=""
|
||||
DISABLEEXTBANSTACKING=""
|
||||
EXTRAPARA=""
|
||||
if [ "`eval echo -n 'a'`" = "-n a" ] ; then
|
||||
c="\c"
|
||||
@@ -418,10 +388,8 @@ while [ -z "$TEST" ] ; do
|
||||
echo "Many older operating systems have an insecure TCP/IP stack"
|
||||
echo "which may be vulnerable to IP spoofing attacks, if you run"
|
||||
echo "an operating system that is vulnerable to such attacks"
|
||||
echo "enable this option."
|
||||
echo "This option also prevents blind proxies (eg: HTTP POST proxies)"
|
||||
echo "and other blind clients from connecting (eg: protects against"
|
||||
echo "the Firefox XPS IRC Attack)."
|
||||
echo "enable this option. This option can also be useful to prevent"
|
||||
echo "blind proxies from connecting (eg: HTTP POST proxies)."
|
||||
echo ""
|
||||
echo "Do you want to enable the server anti-spoof protection?"
|
||||
echo $n "[$TEST] -> $c"
|
||||
@@ -455,28 +423,58 @@ else
|
||||
DPATH=`eval echo $cc` # modified
|
||||
fi
|
||||
|
||||
TEST="$SPATH"
|
||||
echo ""
|
||||
echo "What is the path to the ircd binary including the name of the binary?"
|
||||
echo $n "[$TEST] -> $c"
|
||||
read cc
|
||||
if [ -z "$cc" ] ; then
|
||||
SPATH=$TEST
|
||||
else
|
||||
SPATH=`eval echo $cc` # modified
|
||||
fi
|
||||
|
||||
TEST=""
|
||||
SAVEME="$SPATH"
|
||||
while [ -z "$TEST" ] ; do
|
||||
TEST="$SAVEME"
|
||||
if [ "$HUB" = "1" ] ; then
|
||||
TEST="Hub"
|
||||
else
|
||||
TEST="Leaf"
|
||||
fi
|
||||
echo ""
|
||||
echo "What is the path to the ircd binary including the name of the binary?"
|
||||
echo "Would you like to compile as a hub or as a leaf?"
|
||||
echo "Type Hub to select hub and Leaf to select leaf."
|
||||
echo $n "[$TEST] -> $c"
|
||||
read cc
|
||||
read cc
|
||||
if [ -z "$cc" ] ; then
|
||||
SPATH=$TEST
|
||||
else
|
||||
SPATH=`eval echo $cc` # modified
|
||||
fi
|
||||
if [ "$SPATH" = "$DPATH" ]; then
|
||||
echo ""
|
||||
echo "You need to specify the path to the BINARY, not to a directory."
|
||||
echo "The answer to this question can never be identical to the previous one."
|
||||
echo "HINT: perhaps you want $DPATH/ircd ?"
|
||||
TEST=""
|
||||
cc=$TEST
|
||||
fi
|
||||
case "$cc" in
|
||||
[Hh]*)
|
||||
HUB="1"
|
||||
;;
|
||||
[Ll]*)
|
||||
HUB=""
|
||||
;;
|
||||
*)
|
||||
echo ""
|
||||
echo "You must enter either Hub or Leaf"
|
||||
TEST=""
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
TEST="$DOMAINNAME"
|
||||
echo ""
|
||||
echo "What is the hostname of the server running your IRCd?"
|
||||
echo $n "[$TEST] -> $c"
|
||||
read cc
|
||||
if [ -z "$cc" ] ; then
|
||||
DOMAINNAME=$TEST
|
||||
else
|
||||
DOMAINNAME=`eval echo $cc` # modified
|
||||
fi
|
||||
|
||||
TEST=""
|
||||
while [ -z "$TEST" ] ; do
|
||||
TEST="$DEFPERM"
|
||||
@@ -535,7 +533,7 @@ if [ "$CRYPTOIRCD" = "1" ] ; then
|
||||
TEST="$SSLDIR"
|
||||
echo ""
|
||||
echo "If you know the path to OpenSSL on your system, enter it here. If not"
|
||||
echo "leave this blank (in most cases it will be detected automatically)."
|
||||
echo "leave this blank"
|
||||
echo $n "[$TEST] -> $c"
|
||||
read cc
|
||||
if [ -z "$cc" ] ; then
|
||||
@@ -626,8 +624,6 @@ while [ -z "$TEST" ] ; do
|
||||
fi
|
||||
echo ""
|
||||
echo "Do you want to enable remote includes?"
|
||||
echo "This allows stuff like this in your configuration file:"
|
||||
echo "include \"http://www.somesite.org/files/opers.conf\";"
|
||||
echo $n "[$TEST] -> $c"
|
||||
read cc
|
||||
if [ -z "$cc" ] ; then
|
||||
@@ -650,144 +646,20 @@ while [ -z "$TEST" ] ; do
|
||||
done
|
||||
|
||||
if [ "$REMOTEINC" = "1" ] ; then
|
||||
if [ ! -d "$CURLDIR" ]; then
|
||||
# Reset any previous CURLDIR if it doesn't exist (anymore)
|
||||
CURLDIR=""
|
||||
fi
|
||||
|
||||
|
||||
INSTALLCURL="0"
|
||||
if [ "x$CURLDIR" = "x" ]; then
|
||||
# There is no reason to support this:
|
||||
if [ -d "/usr/local/include/curl" ]; then
|
||||
CURLDIR="/usr/local"
|
||||
TEST=""
|
||||
while [ -z "$TEST" ] ; do
|
||||
TEST="$CURLDIR"
|
||||
echo ""
|
||||
echo "Specify the directory you installed libcurl to"
|
||||
echo $n "[$TEST] -> $c"
|
||||
read cc
|
||||
if [ -z "$cc" ] ; then
|
||||
cc=$TEST
|
||||
else
|
||||
TEST=$cc
|
||||
CURLDIR=`eval echo $cc` # modified
|
||||
fi
|
||||
# Zeroeth, let's act SANE
|
||||
if [ -d "/usr/include/curl" ]; then
|
||||
CURLDIR="/usr"
|
||||
fi
|
||||
# First, let's make shell admins happy...
|
||||
if [ -d "/usr/share/unreal-curl" ]; then
|
||||
CURLDIR="/usr/share/unreal-curl"
|
||||
fi
|
||||
|
||||
GOTASYNC=0
|
||||
if [ "x$CURLDIR" != "x" ]; then
|
||||
# Check if it's of any use: a curl without async dns (cares) hangs the entire ircd..
|
||||
# normally this is done in ./configure but now we're forced to do it also here..
|
||||
if "$CURLDIR"/bin/curl-config --features | grep -q -e AsynchDNS; then
|
||||
GOTASYNC="1"
|
||||
fi
|
||||
if [ "$GOTASYNC" != "1" ]; then
|
||||
PREVCURLDIR="$CURLDIR"
|
||||
CURLDIR=""
|
||||
fi
|
||||
fi
|
||||
|
||||
# Second, use the local curl if it exists (overrides above)
|
||||
if [ -d "$HOME/curl" ]; then
|
||||
CURLDIR="$HOME/curl"
|
||||
|
||||
# Check if it's recent enough...
|
||||
# But first, check if curl-config can be trusted at all: it depends
|
||||
# on 'bc' for some reason and not all systems have that installed!
|
||||
echo "1+1"|bc 1>/dev/null 2>&1
|
||||
if [ "$?" = 0 ]; then
|
||||
"$CURLDIR"/bin/curl-config --checkfor 7.21.0
|
||||
if [ "$?" != 0 ]; then
|
||||
echo ""
|
||||
echo "Your self-compiled CURL library in $CURLDIR is slightly outdated."
|
||||
echo "This probably means you had the library from a previous installation of UnrealIRCd."
|
||||
echo "Because previous versions may be linked to a previous version to c-ares which"
|
||||
echo "were not ABI compatible it is highly recommended to remove the version"
|
||||
echo "and recompile it. We now have an automatic downloader and installer to compile"
|
||||
echo "and install curl for you (in $CURLDIR). You can choose to do so in the question"
|
||||
echo "after this one."
|
||||
TEST=""
|
||||
while [ -z "$TEST" ] ; do
|
||||
TEST="Yes"
|
||||
echo "Shall I rename $CURLDIR to $CURLDIR.old so it can be rebuild later on?"
|
||||
echo $n "[$TEST] -> $c"
|
||||
read cc
|
||||
if [ -z "$cc" ] ; then
|
||||
cc=$TEST
|
||||
fi
|
||||
case "$cc" in
|
||||
[Yy]*)
|
||||
rm -rf "$CURLDIR".old
|
||||
mv "$CURLDIR" "$CURLDIR".old
|
||||
CURLDIR=""
|
||||
GOTASYNC=1
|
||||
# wow the GOTASYNC=1 is hackish, but we need to prevent the error from later on
|
||||
;;
|
||||
[Nn]*)
|
||||
echo "Uh, ok... I hope you know what you are doing..."
|
||||
echo ""
|
||||
;;
|
||||
*)
|
||||
echo ""
|
||||
echo "You must enter either Yes or No"
|
||||
TEST=""
|
||||
;;
|
||||
esac
|
||||
done
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
# Need to output it here, as the HOME check from above may cause this to be no longer relevant.
|
||||
if [ "x$CURLDIR" = "x" -a "$GOTASYNC" != "1" ]; then
|
||||
echo "Curl library was found in $PREVCURLDIR, but it does not support Asynchronous DNS (not compiled with c-ares)"
|
||||
echo "so it's of no use to us."
|
||||
fi
|
||||
|
||||
fi
|
||||
if [ "x$CURLDIR" = "x" ]; then
|
||||
# Still empty?
|
||||
TEST=""
|
||||
while [ -z "$TEST" ] ; do
|
||||
TEST="Yes"
|
||||
echo ""
|
||||
echo "Do you want me to automatically download and install curl for you?"
|
||||
echo "(will install in $HOME/curl)"
|
||||
echo $n "[$TEST] -> $c"
|
||||
read cc
|
||||
if [ -z "$cc" ] ; then
|
||||
cc=$TEST
|
||||
fi
|
||||
case "$cc" in
|
||||
[Yy]*)
|
||||
INSTALLCURL="1"
|
||||
CURLDIR="$HOME/curl"
|
||||
;;
|
||||
[Nn]*)
|
||||
INSTALLCURL="0"
|
||||
;;
|
||||
*)
|
||||
echo ""
|
||||
echo "You must enter either Yes or No"
|
||||
TEST=""
|
||||
;;
|
||||
esac
|
||||
done
|
||||
fi
|
||||
|
||||
if [ "$INSTALLCURL" != "1" ]; then
|
||||
TEST=""
|
||||
while [ -z "$TEST" ] ; do
|
||||
TEST="$CURLDIR"
|
||||
echo ""
|
||||
echo "Specify the directory you installed libcurl to"
|
||||
echo $n "[$TEST] -> $c"
|
||||
read cc
|
||||
if [ -z "$cc" ] ; then
|
||||
cc=$TEST
|
||||
else
|
||||
TEST=$cc
|
||||
CURLDIR=`eval echo $cc` # modified
|
||||
fi
|
||||
done
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
|
||||
@@ -946,16 +818,11 @@ done
|
||||
if [ -n "$ADVANCED" ] ; then
|
||||
RUN_ADVANCED
|
||||
fi
|
||||
|
||||
TEST="$EXTRAPARA"
|
||||
echo ""
|
||||
echo "Would you like to pass any custom parameters to configure?"
|
||||
echo "See \`./configure --help' and write them here:"
|
||||
echo $n "[$TEST] -> $c"
|
||||
echo "Would you like any more parameters to configure?"
|
||||
echo "Write them here:"
|
||||
echo $n "[]-> $c"
|
||||
read EXTRAPARA
|
||||
if [ -z "$EXTRAPARA" ]; then
|
||||
EXTRAPARA="$TEST"
|
||||
fi
|
||||
|
||||
rm -f config.settings
|
||||
cat > config.settings << __EOF__
|
||||
@@ -970,6 +837,8 @@ MAXSENDQLENGTH="$MAXSENDQLENGTH"
|
||||
BUFFERPOOL="$BUFFERPOOL"
|
||||
MAXCONNECTIONS="$MAXCONNECTIONS"
|
||||
NICKNAMEHISTORYLENGTH="$NICKNAMEHISTORYLENGTH"
|
||||
HUB="$HUB"
|
||||
DOMAINNAME="$DOMAINNAME"
|
||||
DEFPERM="$DEFPERM"
|
||||
CRYPTOIRCD="$CRYPTOIRCD"
|
||||
SSLDIR="$SSLDIR"
|
||||
@@ -983,7 +852,6 @@ SHUNNOTICES="$SHUNNOTICES"
|
||||
NOOPEROVERRIDE="$NOOPEROVERRIDE"
|
||||
DISABLEUSERMOD="$DISABLEUSERMOD"
|
||||
OPEROVERRIDEVERIFY="$OPEROVERRIDEVERIFY"
|
||||
DISABLEEXTBANSTACKING="$DISABLEEXTBANSTACKING"
|
||||
EXTRAPARA="$EXTRAPARA"
|
||||
ADVANCED="$ADVANCED"
|
||||
__EOF__
|
||||
@@ -1004,6 +872,8 @@ cat << __EOF__
|
||||
|_______________________________________________________________________|
|
||||
| - The UnrealIRCd Team - |
|
||||
| |
|
||||
| * Stskeeps stskeeps@unrealircd.com |
|
||||
| * codemastr codemastr@unrealircd.com |
|
||||
| * Syzop syzop@unrealircd.com |
|
||||
|_______________________________________________________________________|
|
||||
__EOF__
|
||||
|
||||
@@ -1,18 +1,32 @@
|
||||
UnrealIRCd is a free program, but we do put a lot of time, effort, and money
|
||||
into creating and maintaining Unreal. To make it easier for users to show their
|
||||
into creating and maintaining Unreal. To make it easier for user's to show their
|
||||
appreciation, the Unreal team has decided to accept donations through PayPal. If
|
||||
you like Unreal, and you'd like to see it continue to exist, please consider making
|
||||
a donation. We're not asking for anything huge, whatever you can afford is fine.
|
||||
|
||||
PayPal Donation Link: http://unrealircd.com/donate.php
|
||||
PayPal Donation Link:
|
||||
<https://www.paypal.com/xclick/business=donation%40unrealircd.org&
|
||||
item_name=UnrealIRCd+Donation&no_shipping=1&cn=Comments&tax=0¤cy_code=USD>
|
||||
|
||||
If you don't want to use PayPal, or you want to donate something other than money,
|
||||
contact Syzop (syzop@unrealircd.com).
|
||||
Or simply send a payment through PayPal to:
|
||||
donation@unrealircd.org
|
||||
|
||||
All those who donate at least a certain minimum amount will have their name
|
||||
and/or company listed in /CREDITS.
|
||||
Additionally, all donators will be listed on the website (regardless of the amount).
|
||||
Please check the website for details.
|
||||
If you don't want to use PayPal, or you want to donate something other than money
|
||||
(old computer hardware, etc.), contact Stskeeps (stskeeps@unrealircd.com) and send
|
||||
your donation to:
|
||||
|
||||
UnrealIRCd Project
|
||||
C/O Carsten Munk
|
||||
P.O.Box 52
|
||||
7400 Herning
|
||||
Denmark
|
||||
|
||||
All those who donate at least $10 USD will have their name and/or company listed in /credits.
|
||||
Additionally, all donators will be listed on the website (regardless of the amount). To make
|
||||
this possible, please include along with your donation the name (or nickname) you want to
|
||||
appear in the list as well as the company name (or IRC server) to list.
|
||||
|
||||
Thank you for your support,
|
||||
The UnrealIRCd Team
|
||||
|
||||
[ $Id$ ]
|
||||
|
||||
+6
-12
@@ -34,11 +34,11 @@ FROMDOS=/home/cmunk/bin/4dos
|
||||
#
|
||||
|
||||
#XCFLAGS=-O -g -export-dynamic
|
||||
IRCDLIBS=@IRCDLIBS@ @TRE_LIBS@ @CARES_LIBS@
|
||||
IRCDLIBS=@IRCDLIBS@ @TRELIBS@ @CARESLIBS@
|
||||
CRYPTOLIB=@CRYPTOLIB@
|
||||
OPENSSLINCLUDES=
|
||||
|
||||
XCFLAGS=@TRE_CFLAGS@ @CARES_CFLAGS@ @CFLAGS@
|
||||
XCFLAGS=-I@TREINCDIR@ -I@CARESINCDIR@ @CARESLIBDIR@ @CFLAGS@
|
||||
#
|
||||
# use the following on MIPS:
|
||||
#CFLAGS= -systype bsd43 -DSYSTYPE_BSD43 -I$(INCLUDEDIR)
|
||||
@@ -104,11 +104,9 @@ URL=@URL@
|
||||
STRTOUL=@STRTOUL@
|
||||
|
||||
# [CHANGEME]
|
||||
# If you get crashes around a specific number of clients, and that
|
||||
# client load comes close or a little over the system-defined value of
|
||||
# FD_SETSIZE, override it here and see what happens. You may override
|
||||
# the system FD_SETSIZE by setting the FD_SETSIZE Makefile variable to
|
||||
# -DFD_SETSIZE=<some number>.
|
||||
# If you get crashes around a specific number of clients, and that client
|
||||
# load comes close or a little over the system-defined value of FD_SETSIZE,
|
||||
# override it here and see what happens.
|
||||
FD_SETSIZE=@FD_SETSIZE@
|
||||
|
||||
# Where is your openssl binary
|
||||
@@ -137,7 +135,6 @@ MAKEARGS = 'CFLAGS=${CFLAGS}' 'CC=${CC}' 'IRCDLIBS=${IRCDLIBS}' \
|
||||
'URL=${URL}'
|
||||
|
||||
custommodule:
|
||||
@if test -z "${MODULEFILE}"; then echo "Please set MODULEFILE when calling \`\`make custommodule''. For example, \`\`make custommodule MODULEFILE=callerid''." >&2; exit 1; fi
|
||||
cd src; ${MAKE} ${MAKEARGS} MODULEFILE=${MODULEFILE} 'EXLIBS=${EXLIBS}' custommodule
|
||||
|
||||
server:
|
||||
@@ -206,7 +203,7 @@ depend:
|
||||
|
||||
install: all
|
||||
$(INSTALL) -m 0700 -d $(IRCDDIR)
|
||||
$(INSTALL) -m 0700 src/ircd $(BINDIR) 2>/dev/null || { $(INSTALL) -m 0700 -d "$$(dirname '$(BINDIR)')"; $(INSTALL) -m 0700 src/ircd $(BINDIR); }
|
||||
$(INSTALL) -m 0700 src/ircd $(BINDIR)
|
||||
$(INSTALL) -m 0700 -d $(IRCDDIR)/networks
|
||||
$(INSTALL) -m 0600 networks/*.network $(IRCDDIR)/networks
|
||||
$(INSTALL) -m 0700 networks/makenet $(IRCDDIR)/networks
|
||||
@@ -222,9 +219,6 @@ install: all
|
||||
$(INSTALL) -m 0700 unreal $(IRCDDIR)
|
||||
$(INSTALL) -m 0700 -d $(IRCDDIR)/modules
|
||||
$(INSTALL) -m 0700 src/modules/*.so $(IRCDDIR)/modules
|
||||
$(INSTALL) -m 0700 -d $(IRCDDIR)/ircdcron
|
||||
$(INSTALL) -m 0600 ircdcron/ircd.cron $(IRCDDIR)/ircdcron
|
||||
$(INSTALL) -m 0700 ircdcron/ircdchk $(IRCDDIR)/ircdcron
|
||||
-@if [ ! -f "$(IRCDDIR)/curl-ca-bundle.crt" ] ; then \
|
||||
$(INSTALL) -m 0700 curl-ca-bundle.crt $(IRCDDIR) ; \
|
||||
fi
|
||||
|
||||
+36
-42
@@ -1,26 +1,24 @@
|
||||
===============================================
|
||||
= UnrealIRCd v3.2.9-RC2 =
|
||||
= UnrealIRCd v3.2.8.1 =
|
||||
===============================================
|
||||
This release was brought to you by:
|
||||
|
||||
Head coder:
|
||||
============
|
||||
* Syzop
|
||||
|
||||
Coders:
|
||||
========
|
||||
* binki
|
||||
=======
|
||||
* Syzop
|
||||
|
||||
Contributors:
|
||||
=============
|
||||
* Bock
|
||||
* goldenwolf
|
||||
* katsklaw
|
||||
* aquanight
|
||||
* WolfSage
|
||||
* Stealth
|
||||
* tabrisnet
|
||||
* Bock
|
||||
* fbi
|
||||
|
||||
RC Testers:
|
||||
===========
|
||||
LqidSkin, goldenwolf, katsklaw, nph, selten, Simplicity
|
||||
* Bock, Apocalypse, StrawberryKittens, wax, Elemental, and many more
|
||||
|
||||
Previous coders:
|
||||
================
|
||||
@@ -28,47 +26,43 @@
|
||||
* codemastr
|
||||
* Many more..
|
||||
|
||||
Internet Presence:
|
||||
* http://www.unrealircd.com/
|
||||
Precenses on the Internet:
|
||||
* http://www.unrealircd.com
|
||||
|
||||
UnrealIRCd Bugtracker (Where to report bugs, make suggestions, and submit patches)
|
||||
===================================================================================
|
||||
http://bugs.unrealircd.org/
|
||||
CVS
|
||||
====
|
||||
To get anonymous access: (read only)
|
||||
"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 -z3 -d :pserver:anonymous@cvs.unrealircd.com:/cvs checkout -r stable -d Unreal-stable unreal"
|
||||
|
||||
latest 3.2 fixes / development ("unreal3_2_fixes"):
|
||||
"cvs -z3 -d :pserver:anonymous@cvs.unrealircd.com:/cvs checkout -r unreal3_2_fixes -d Unreal-stable unreal"
|
||||
|
||||
To get support
|
||||
================
|
||||
Before asking others for help you MUST:
|
||||
* read the docs (doc/unreal32docs.html or online: http://unrealircd.com/unreal32docs.html)
|
||||
* check the FAQ (http://vulnscan.org/UnrealIrcd/faq/)
|
||||
* read the docs (doc/unreal32docs.html or online: www.unrealircd.com/unreal32docs.html)
|
||||
* check the FAQ (www.vulnscan.org/UnrealIrcd/faq/)
|
||||
|
||||
Means of support:
|
||||
* IRC: /server irc.unrealircd.com 6667 - /join #unreal-support
|
||||
[Note: Follow the bot's instructions in order to get voice.
|
||||
Please be patient after asking questions, we may be busy
|
||||
or we're away. Don't repeat questions, we will have heard
|
||||
you first time.
|
||||
READ THE TOPIC before you ask anything. We give support
|
||||
on a free basis. We are volunteering to help you, but we
|
||||
are humans like you. We sometimes just need some peace.]
|
||||
[Note: Follow the bots instructions in order to get voice.
|
||||
Please be patient after asking questions, we may do other stuff
|
||||
or we're away. Don't repeat questions, we heard you first time,
|
||||
READ THE TOPIC before you ask anything. We do this on a free
|
||||
base so we are volunteeringly helping you, but we are humans
|
||||
like you, and we got to have peace at times as well.]
|
||||
* Forum: http://forums.unrealircd.com/
|
||||
|
||||
Development version
|
||||
====================
|
||||
To access the latest development version of UnrealIRCd you need to use mercurial (hg).
|
||||
Note that because you are accessing a development version it may not compile, the
|
||||
server may crash, or other problems can occur since the code is likely to be only
|
||||
lightly tested (or not at all). On the other hand, using the development version may
|
||||
help you to get rid of that single nasty bug that is haunting you, plus if you test
|
||||
it and give us feedback (report bugs) then you actually help us with developing Unreal.
|
||||
|
||||
The command to grab the development version is:
|
||||
hg clone http://hg.unrealircd.org/unreal
|
||||
|
||||
If you get something like 'hg: command not found' then you need to install mercurial.
|
||||
Most *NIX systems have such a 'mercurial' package, but if you don't, or you are on
|
||||
Windows or Mac OS X, then see http://mercurial.selenic.com/
|
||||
UnrealIRCd Bugtracker (Where to report bugs or make suggestions)
|
||||
==================================================================
|
||||
http://bugs.unrealircd.org
|
||||
|
||||
Want to discuss, chat, etc?
|
||||
=============================
|
||||
* IRC: /server irc.unrealircd.com 6667 - /join #chat
|
||||
(NOT for support! If you want support then use #unreal-support instead!)
|
||||
* IRC: /server irc.unrealircd.com 6667 - /join #UnrealIRCd
|
||||
|
||||
@@ -1,26 +0,0 @@
|
||||
/* Atheme Aliases */
|
||||
|
||||
alias nickserv { type services; };
|
||||
alias ns { target nickserv; type services; };
|
||||
alias chanserv { type services; };
|
||||
alias cs { target chanserv; 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; };
|
||||
alias botserv { type services; };
|
||||
alias bs { target botserv; type services; };
|
||||
alias hostserv { type services; };
|
||||
alias hs { target hostserv; type services; };
|
||||
alias saslserv { type services; };
|
||||
alias sss { target saslserv; type services; };
|
||||
alias gameserv { type services; };
|
||||
alias gms { target gameserv; type services; };
|
||||
alias groupserv { type services; };
|
||||
alias grs { target groupserv; type services; };
|
||||
alias alis { type services; };
|
||||
alias ls { target alis; type services; };
|
||||
|
||||
include "aliases/aliases.conf";
|
||||
|
||||
Vendored
+174
@@ -0,0 +1,174 @@
|
||||
dnl aclocal.m4 generated automatically by aclocal 1.4-p4
|
||||
|
||||
dnl Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
|
||||
dnl This file is free software; the Free Software Foundation
|
||||
dnl gives unlimited permission to copy and/or distribute it,
|
||||
dnl with or without modifications, as long as this notice is preserved.
|
||||
|
||||
dnl This program is distributed in the hope that it will be useful,
|
||||
dnl but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
||||
dnl even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
dnl PARTICULAR PURPOSE.
|
||||
|
||||
dnl Macro: unet_CHECK_TYPE_SIZES
|
||||
dnl
|
||||
dnl Check the size of several types and define a valid int16_t and int32_t.
|
||||
dnl
|
||||
AC_DEFUN(unreal_CHECK_TYPE_SIZES,
|
||||
[dnl Check type sizes
|
||||
AC_CHECK_SIZEOF(short)
|
||||
AC_CHECK_SIZEOF(int)
|
||||
AC_CHECK_SIZEOF(long)
|
||||
if test "$ac_cv_sizeof_int" = 2 ; then
|
||||
AC_CHECK_TYPE(int16_t, int)
|
||||
AC_CHECK_TYPE(u_int16_t, unsigned int)
|
||||
elif test "$ac_cv_sizeof_short" = 2 ; then
|
||||
AC_CHECK_TYPE(int16_t, short)
|
||||
AC_CHECK_TYPE(u_int16_t, unsigned short)
|
||||
else
|
||||
AC_MSG_ERROR([Cannot find a type with size of 16 bits])
|
||||
fi
|
||||
if test "$ac_cv_sizeof_int" = 4 ; then
|
||||
AC_CHECK_TYPE(int32_t, int)
|
||||
AC_CHECK_TYPE(u_int32_t, unsigned int)
|
||||
elif test "$ac_cv_sizeof_short" = 4 ; then
|
||||
AC_CHECK_TYPE(int32_t, short)
|
||||
AC_CHECK_TYPE(u_int32_t, unsigned short)
|
||||
elif test "$ac_cv_sizeof_long" = 4 ; then
|
||||
AC_CHECK_TYPE(int32_t, long)
|
||||
AC_CHECK_TYPE(u_int32_t, unsigned long)
|
||||
else
|
||||
AC_MSG_ERROR([Cannot find a type with size of 32 bits])
|
||||
fi
|
||||
AC_CHECK_SIZEOF(rlim_t)
|
||||
if test "$ac_cv_sizeof_rlim_t" = 8 ; then
|
||||
AC_DEFINE(LONG_LONG_RLIM_T)
|
||||
fi
|
||||
])
|
||||
|
||||
AC_DEFUN(CHECK_LIBCURL,
|
||||
[
|
||||
AC_ARG_ENABLE(libcurl,
|
||||
[AC_HELP_STRING([--enable-libcurl=DIR],[enable libcurl (remote include) support])],
|
||||
[
|
||||
CURLCFLAG=`$enableval/bin/curl-config --cflags`
|
||||
CURLLIBS=`$enableval/bin/curl-config --libs`
|
||||
|
||||
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)
|
||||
])
|
||||
])
|
||||
|
||||
dnl the following 2 macros are based on CHECK_SSL by Mark Ethan Trostler <trostler@juniper.net>
|
||||
|
||||
AC_DEFUN([CHECK_SSL],
|
||||
[
|
||||
AC_ARG_ENABLE(ssl,
|
||||
[AC_HELP_STRING([--enable-ssl=],[enable ssl will check /usr/local/ssl /usr/lib/ssl /usr/ssl /usr/pkg /usr/local /usr])],
|
||||
[
|
||||
AC_MSG_CHECKING(for openssl)
|
||||
for dir in $enableval /usr/local/ssl /usr/lib/ssl /usr/ssl /usr/pkg /usr/local /usr; do
|
||||
ssldir="$dir"
|
||||
if test -f "$dir/include/openssl/ssl.h"; then
|
||||
AC_MSG_RESULT(found in $ssldir/include/openssl)
|
||||
found_ssl="yes";
|
||||
if test ! "$ssldir" = "/usr" ; then
|
||||
CFLAGS="$CFLAGS -I$ssldir/include";
|
||||
fi
|
||||
break;
|
||||
fi
|
||||
if test -f "$dir/include/ssl.h"; then
|
||||
AC_MSG_RESULT(found in $ssldir/include)
|
||||
found_ssl="yes";
|
||||
if test ! "$ssldir" = "/usr" ; then
|
||||
CFLAGS="$CFLAGS -I$ssldir/include";
|
||||
fi
|
||||
break
|
||||
fi
|
||||
done
|
||||
if test x_$found_ssl != x_yes; then
|
||||
AC_MSG_RESULT(not found)
|
||||
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
|
||||
LDFLAGS="$LDFLAGS -L$ssldir/lib";
|
||||
fi
|
||||
AC_DEFINE(USE_SSL)
|
||||
fi
|
||||
],
|
||||
)
|
||||
])
|
||||
|
||||
AC_DEFUN([CHECK_ZLIB],
|
||||
[
|
||||
AC_ARG_ENABLE(ziplinks,
|
||||
[AC_HELP_STRING([--enable-ziplinks],[enable ziplinks will check /usr/local /usr /usr/pkg])],
|
||||
[
|
||||
AC_MSG_CHECKING(for zlib)
|
||||
for dir in $enableval /usr/local /usr /usr/pkg; do
|
||||
zlibdir="$dir"
|
||||
if test -f "$dir/include/zlib.h"; then
|
||||
AC_MSG_RESULT(found in $zlibdir)
|
||||
found_zlib="yes";
|
||||
if test "$zlibdir" = "/usr" ; then
|
||||
CFLAGS="$CFLAGS -DZIP_LINKS";
|
||||
else
|
||||
CFLAGS="$CFLAGS -I$zlibdir/include -DZIP_LINKS";
|
||||
fi
|
||||
break;
|
||||
fi
|
||||
done
|
||||
if test x_$found_zlib != x_yes; then
|
||||
AC_MSG_RESULT(not found)
|
||||
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
|
||||
LDFLAGS="$LDFLAGS -L$zlibdir/lib";
|
||||
fi
|
||||
HAVE_ZLIB=yes
|
||||
fi
|
||||
AC_SUBST(HAVE_ZLIB)
|
||||
],
|
||||
)
|
||||
])
|
||||
@@ -0,0 +1,515 @@
|
||||
dnl Process this file with autoconf to produce a configure script.
|
||||
AC_INIT(src/ircd.c)
|
||||
if test $# = 0; then
|
||||
echo "You might want to run ./Config or provide some parameters to this script."
|
||||
echo "./configure --help for information about this script"
|
||||
exit 0
|
||||
fi
|
||||
AC_CONFIG_HEADER(include/setup.h)
|
||||
AC_PROG_CC
|
||||
if test "$ac_cv_prog_gcc" = "yes"; then
|
||||
CFLAGS="$CFLAGS -funsigned-char"
|
||||
AC_CACHE_CHECK(if gcc has a working -pipe, ac_cv_pipe, [
|
||||
save_cflags="$CFLAGS"
|
||||
CFLAGS="$CFLAGS -pipe"
|
||||
AC_TRY_COMPILE(,, ac_cv_pipe="yes", ac_cv_pipe="no")
|
||||
CFLAGS="$save_cflags"
|
||||
])
|
||||
if test "$ac_cv_pipe" = "yes"; then
|
||||
CFLAGS="-pipe $CFLAGS"
|
||||
fi
|
||||
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 "`$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 "`$CC -v --help 2>&1`" in
|
||||
*-Wpointer-sign* ) CFLAGS="$CFLAGS -Wno-pointer-sign" ;;
|
||||
esac
|
||||
|
||||
AC_PATH_PROG(RM,rm)
|
||||
AC_PATH_PROG(CP,cp)
|
||||
AC_PATH_PROG(TOUCH,touch)
|
||||
AC_PATH_PROG(OPENSSLPATH,openssl)
|
||||
AC_PATH_PROG(INSTALL,install)
|
||||
AC_CHECK_PROG(MAKER, gmake, gmake, make)
|
||||
AC_PATH_PROG(GMAKE,gmake)
|
||||
AC_PATH_PROG(GUNZIP, gunzip)
|
||||
AC_PATH_PROG(PKGCONFIG, pkg-config)
|
||||
|
||||
dnl Checks for libraries.
|
||||
AC_CHECK_LIB(descrypt, crypt, [AC_DEFINE(HAVE_CRYPT) IRCDLIBS="$IRCDLIBS-ldescrypt " MKPASSWDLIBS="-ldescrypt"],
|
||||
AC_CHECK_LIB(crypt, crypt,[ AC_DEFINE(HAVE_CRYPT) IRCDLIBS="$IRCDLIBS-lcrypt " MKPASSWDLIBS="-lcrypt"]))
|
||||
AC_CHECK_LIB(socket, socket,IRCDLIBS="$IRCDLIBS-lsocket " SOCKLIB="-lsocket")
|
||||
AC_CHECK_LIB(nsl, inet_ntoa,IRCDLIBS="$IRCDLIBS-lnsl " INETLIB="-lnsl")
|
||||
|
||||
AC_SUBST(IRCDLIBS)
|
||||
AC_SUBST(MKPASSWDLIBS)
|
||||
|
||||
dnl module checking based on Hyb7's module checking code
|
||||
AC_DEFUN([AC_ENABLE_DYN],
|
||||
[
|
||||
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"
|
||||
AC_CACHE_CHECK(if we need the -export-dynamic flag, ac_cv_export_dynamic, [
|
||||
AC_TRY_LINK(, [int i];, ac_cv_export_dynamic=yes, ac_cv_export_dynamic=no)])
|
||||
if test "$ac_cv_export_dynamic" = "no"; then
|
||||
CFLAGS=$hold_cflags
|
||||
fi
|
||||
|
||||
AC_CACHE_CHECK(for compiler option to produce PIC,ac_cv_pic,[
|
||||
if test "$ac_cv_prog_gcc" = "yes"; then
|
||||
ac_cv_pic="-fPIC -DPIC -shared"
|
||||
case `uname -s` in
|
||||
Darwin*[)]
|
||||
ac_cv_pic="-bundle -flat_namespace -undefined suppress"
|
||||
;;
|
||||
HP-UX*[)]
|
||||
ac_cv_pic="-fPIC"
|
||||
;;
|
||||
esac
|
||||
else
|
||||
case `uname -s` in
|
||||
SunOS*[)]
|
||||
ac_cv_pic="-KPIC -DPIC -G"
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
])
|
||||
AC_CACHE_CHECK(if your system prepends an underscore on symbols,ac_cv_underscore,[
|
||||
cat >uscore.c << __EOF__
|
||||
int main() {
|
||||
return 0;
|
||||
}
|
||||
__EOF__
|
||||
$CC -o uscore $CFLAGS uscore.c 1>&5
|
||||
if test -z "`strings -a uscore |grep '^_main$'`"; then
|
||||
ac_cv_underscore=no
|
||||
else
|
||||
ac_cv_underscore=yes
|
||||
fi
|
||||
rm -f uscore uscore.c
|
||||
])
|
||||
if test "$ac_cv_underscore" = "yes"; then
|
||||
AC_DEFINE(UNDERSCORE)
|
||||
fi
|
||||
|
||||
MODULEFLAGS=$ac_cv_pic
|
||||
AC_DEFINE(DYNAMIC_LINKING)
|
||||
])
|
||||
AC_DEFUN([AC_ENABLE_INET6],[
|
||||
AC_CACHE_CHECK(if your system has IPv6 support, ac_cv_ip6, [
|
||||
save_libs="$LIBS"
|
||||
LIBS="$LIBS $SOCKLIB"
|
||||
AC_TRY_RUN([
|
||||
#include <sys/types.h>
|
||||
#include <sys/socket.h>
|
||||
int main() {
|
||||
if (socket(AF_INET6, SOCK_STREAM, 0) < 0)
|
||||
exit(1);
|
||||
exit(0);
|
||||
}
|
||||
], ac_cv_ip6=yes, ac_cv_ip6=no)
|
||||
])
|
||||
if test "$ac_cv_ip6" = "no"; then
|
||||
AC_MSG_WARN(Your system does not support IPv6 so it will not be enabled)
|
||||
else
|
||||
AC_DEFINE(INET6)
|
||||
dnl in6addr_any detection code taken from ratbox
|
||||
AC_MSG_CHECKING([for struct in6addr_any])
|
||||
AC_COMPILE_IFELSE(
|
||||
[AC_LANG_PROGRAM(
|
||||
[[#define IN_AUTOCONF
|
||||
#include <sys/types.h>
|
||||
#include <sys/socket.h>
|
||||
#include <netinet/in.h>]],
|
||||
[[struct in6_addr a = in6addr_any;]]
|
||||
)],
|
||||
[AC_MSG_RESULT(yes)],
|
||||
[
|
||||
AC_MSG_RESULT(no)
|
||||
AC_DEFINE(NO_IN6ADDR_ANY)
|
||||
]
|
||||
)
|
||||
fi
|
||||
LIBS="$save_libs"
|
||||
])
|
||||
|
||||
AC_CHECK_HEADER(sys/param.h,AC_DEFINE(PARAMH))
|
||||
AC_CHECK_HEADER(stdlib.h,AC_DEFINE(STDLIBH))
|
||||
AC_CHECK_HEADER(stddef.h,AC_DEFINE(STDDEFH))
|
||||
AC_CHECK_HEADER(sys/syslog.h,AC_DEFINE(SYSSYSLOGH))
|
||||
AC_CHECK_HEADER(unistd.h,AC_DEFINE(UNISTDH))
|
||||
AC_CHECK_HEADER(string.h,AC_DEFINE(STRINGH))
|
||||
AC_CHECK_HEADER(strings.h,AC_DEFINE(STRINGSH))
|
||||
AC_CHECK_HEADER(malloc.h,AC_DEFINE(MALLOCH,<malloc.h>))
|
||||
AC_CHECK_HEADER(sys/rusage.h,AC_DEFINE(RUSAGEH))
|
||||
AC_CHECK_HEADER(glob.h,AC_DEFINE(GLOBH))
|
||||
dnl Checks for typedefs, structures, and compiler characteristics.
|
||||
AC_C_CONST
|
||||
AC_C_INLINE
|
||||
AC_TYPE_SIZE_T
|
||||
AC_HEADER_TIME
|
||||
AC_STRUCT_TM
|
||||
AC_TYPE_UID_T
|
||||
unreal_CHECK_TYPE_SIZES
|
||||
|
||||
AC_CACHE_CHECK(what kind of nonblocking sockets you have, ac_cv_nonblocking,[
|
||||
save_libs="$LIBS"
|
||||
LIBS="$LIBS $SOCKLIB"
|
||||
AC_TRY_RUN([
|
||||
#include <sys/types.h>
|
||||
#include <sys/socket.h>
|
||||
#include <fcntl.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <sys/file.h>
|
||||
#include <signal.h>
|
||||
alarmed() {
|
||||
exit(1);
|
||||
}
|
||||
int main() {
|
||||
#ifdef O_NONBLOCK
|
||||
char b[12], x[32];
|
||||
int f, l = sizeof(x);
|
||||
f = socket(AF_INET, SOCK_DGRAM, 0);
|
||||
if (f >= 0 && !(fcntl(f, F_SETFL, O_NONBLOCK))) {
|
||||
signal(SIGALRM, alarmed);
|
||||
alarm(3);
|
||||
recvfrom(f, b, 12, 0, (struct sockaddr *)x, &l);
|
||||
alarm(0);
|
||||
exit(0);
|
||||
}
|
||||
#endif
|
||||
exit(1);
|
||||
}
|
||||
],ac_cv_nonblocking=O_NONBLOCK,[
|
||||
AC_TRY_RUN([
|
||||
#include <sys/types.h>
|
||||
#include <sys/socket.h>
|
||||
#include <fcntl.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <sys/file.h>
|
||||
#include <signal.h>
|
||||
alarmed() {
|
||||
exit(0);
|
||||
}
|
||||
int main() {
|
||||
#ifdef O_NDELAY
|
||||
char b[12], x[32];
|
||||
int f, l = sizeof(x);
|
||||
f = socket(AF_INET, SOCK_DGRAM, 0);
|
||||
if (f >= 0 && !(fcntl(f, F_SETFL, O_NDELAY))) {
|
||||
signal(SIGALRM, alarmed);
|
||||
alarm(3);
|
||||
recvfrom(f, b, 12, 0, (struct sockaddr *)x, &l);
|
||||
alarm(0);
|
||||
exit(0);
|
||||
}
|
||||
#endif
|
||||
exit(1);
|
||||
}],ac_cv_nonblocking=O_NDELAY,[
|
||||
AC_TRY_RUN([
|
||||
#include <sys/types.h>
|
||||
#include <sys/socket.h>
|
||||
#include <fcntl.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <sys/file.h>
|
||||
#include <signal.h>
|
||||
alarmed() {
|
||||
exit(1);
|
||||
}
|
||||
int main() {
|
||||
#ifdef FIONBIO
|
||||
char b[12], x[32];
|
||||
int f, l = sizeof(x);
|
||||
f = socket(AF_INET, SOCK_DGRAM, 0);
|
||||
if (f >= 0 && !(fcntl(f, F_SETFL, FIONBIO))) {
|
||||
signal(SIGALRM, alarmed);
|
||||
alarm(3);
|
||||
recvfrom(f, b, 12, 0, (struct sockaddr *)x, &l);
|
||||
alarm(0);
|
||||
exit(0);
|
||||
}
|
||||
#endif
|
||||
exit(1);
|
||||
], ac_cv_nonblocking=FIONBIO,ac_cv_nonblocking=none)])])])
|
||||
if test "$ac_cv_nonblocking" = "O_NONBLOCK"; then
|
||||
AC_DEFINE(NBLOCK_POSIX)
|
||||
elif test "$ac_cv_nonblocking" = "O_NDELAY"; then
|
||||
AC_DEFINE(NBLOCK_BSD)
|
||||
elif test "$ac_cv_nonblocking" = "FIONBIO"; then
|
||||
AC_DEFINE(NBLOCK_SYSV)
|
||||
fi
|
||||
LIBS="$save_libs"
|
||||
dnl Checks for library functions.
|
||||
AC_PROG_GCC_TRADITIONAL
|
||||
AC_FUNC_SETPGRP
|
||||
AC_FUNC_SETVBUF_REVERSED
|
||||
AC_FUNC_ALLOCA
|
||||
AC_CHECK_FUNCS(snprintf,AC_DEFINE(HAVE_SNPRINTF))
|
||||
AC_CHECK_FUNCS(vsnprintf,AC_DEFINE(HAVE_VSNPRINTF))
|
||||
AC_CHECK_FUNCS(strlcpy, AC_DEFINE(HAVE_STRLCPY))
|
||||
AC_CHECK_FUNCS(strlcat, AC_DEFINE(HAVE_STRLCAT))
|
||||
AC_CHECK_FUNCS(strlncat, AC_DEFINE(HAVE_STRLNCAT))
|
||||
AC_CHECK_FUNCS(inet_pton, AC_DEFINE(HAVE_INET_PTON))
|
||||
AC_CHECK_FUNCS(inet_ntop, AC_DEFINE(HAVE_INET_NTOP))
|
||||
dnl Check if it supports C99 style variable length arrays
|
||||
AC_CACHE_CHECK(if C99 variable length arrays are supported, ac_cv_varlen_arrays, [
|
||||
AC_TRY_COMPILE(,[
|
||||
int main() {
|
||||
int i = 5;
|
||||
int a[i];
|
||||
a[0] = 1;
|
||||
return 0;
|
||||
}], ac_cv_varlen_arrays=yes, ac_cv_varlen_arrays=no)
|
||||
])
|
||||
if test "$ac_cv_varlen_arrays" = "yes" ; then
|
||||
AC_DEFINE(HAVE_C99_VARLEN_ARRAY)
|
||||
fi
|
||||
AC_CACHE_CHECK(if we can set the core size to unlimited, ac_cv_force_core,[
|
||||
AC_TRY_RUN([
|
||||
#include <sys/time.h>
|
||||
#include <sys/resource.h>
|
||||
#include <unistd.h>
|
||||
int main() {
|
||||
struct rlimit corelim;
|
||||
corelim.rlim_cur = corelim.rlim_max = RLIM_INFINITY;
|
||||
if (setrlimit(RLIMIT_CORE, &corelim))
|
||||
exit(1);
|
||||
exit(0);
|
||||
}
|
||||
],ac_cv_force_core=yes,ac_cv_force_core=no)
|
||||
])
|
||||
if test "$ac_cv_force_core" = "yes"; then
|
||||
AC_DEFINE(FORCE_CORE)
|
||||
fi
|
||||
AC_FUNC_VPRINTF
|
||||
AC_CHECK_FUNCS(gettimeofday,AC_DEFINE(GETTIMEOFDAY),[AC_CHECK_FUNCS(lrand48,AC_DEFINE(LRADN48))])
|
||||
AC_CHECK_FUNCS(getrusage,AC_DEFINE(GETRUSAGE_2),[AC_CHECK_FUNCS(times,AC_DEFINE(TIMES_2))])
|
||||
AC_CHECK_FUNCS(setproctitle,AC_DEFINE(HAVE_SETPROCTITLE),[
|
||||
AC_CHECK_LIB(util,setproctitle,AC_DEFINE(HAVE_SETPROCTITLE) IRCDLIBS="$IRCDLIBS-lutil",[
|
||||
AC_EGREP_HEADER([#define.*PS_STRINGS.*],sys/exec.h,AC_DEFINE(HAVE_PSSTRINGS),[
|
||||
AC_CHECK_FUNCS(pstat,AC_DEFINE(HAVE_PSTAT))
|
||||
])
|
||||
])
|
||||
])
|
||||
AC_CACHE_CHECK(what type of signals you have, ac_cv_sigtype, [
|
||||
AC_TRY_RUN([
|
||||
#include <signal.h>
|
||||
int main() {
|
||||
sigaction(SIGTERM, (struct sigaction *)0L, (struct sigaction *)0L);
|
||||
}
|
||||
], ac_cv_sigtype=POSIX, [
|
||||
AC_TRY_RUN([
|
||||
#include <signal.h>
|
||||
int calls = 0;
|
||||
void handler()
|
||||
{
|
||||
if (calls)
|
||||
return;
|
||||
calls++;
|
||||
kill(getpid(), SIGTERM);
|
||||
sleep(1);
|
||||
}
|
||||
|
||||
int main() {
|
||||
signal(SIGTERM, handler);
|
||||
kill(getpid(), SIGTERM);
|
||||
exit(0);
|
||||
}
|
||||
], ac_cv_sigtype=BSD,ac_cv_sigtype=SYSV)])])
|
||||
|
||||
if test "$ac_cv_sigtype" = "POSIX"; then
|
||||
AC_DEFINE(POSIX_SIGNALS)
|
||||
elif test "$ac_cv_sigtype" = "BSD"; then
|
||||
AC_DEFINE(BSD_RELIABLE_SIGNALS)
|
||||
else
|
||||
AC_DEFINE(SYSV_UNRELIABLE_SIGNALS)
|
||||
fi
|
||||
AC_CHECK_FUNCS(strtoken,,AC_DEFINE(NEED_STRTOKEN))
|
||||
AC_CHECK_FUNCS(strtok,,AC_DEFINE(NEED_STRTOK))
|
||||
AC_CHECK_FUNCS(strerror,,AC_DEFINE(NEED_STRERROR))
|
||||
AC_CHECK_FUNCS(index,,AC_DEFINE(NOINDEX))
|
||||
AC_CHECK_FUNCS(strtoul,,STRTOUL="strtoul.o")
|
||||
AC_CHECK_FUNCS(bcopy,,AC_DEFINE(NEED_BCOPY))
|
||||
AC_CHECK_FUNCS(bcmp,,AC_DEFINE(NEED_BCMP))
|
||||
AC_CHECK_FUNCS(bzero,,AC_DEFINE(NEED_BZERO))
|
||||
AC_CHECK_FUNCS(strcasecmp,AC_DEFINE(GOT_STRCASECMP))
|
||||
save_libs="$LIBS"
|
||||
LIBS="$LIBS $SOCKLIB $INETLIB"
|
||||
AC_CHECK_FUNCS(inet_addr,,AC_DEFINE(NEED_INET_ADDR))
|
||||
AC_CHECK_FUNCS(inet_ntoa,,AC_DEFINE(NEED_INET_NTOA))
|
||||
AC_CHECK_FUNCS(inet_netof,,AC_DEFINE(NEED_INET_NETOF))
|
||||
LIBS="$save_libs"
|
||||
AC_CHECK_FUNCS(syslog,AC_DEFINE(HAVE_SYSLOG))
|
||||
AC_CHECK_FUNCS(vsyslog,AC_DEFINE(HAVE_VSYSLOG))
|
||||
AC_SUBST(STRTOUL)
|
||||
AC_SUBST(CRYPTOLIB)
|
||||
AC_SUBST(MODULEFLAGS)
|
||||
AC_ARG_WITH(listen, [AC_HELP_STRING([--with-listen=backlog],[Specify the listen backlog value])],
|
||||
AC_DEFINE_UNQUOTED(LISTEN_SIZE,$withval),AC_DEFINE(LISTEN_SIZE,5))
|
||||
AC_ARG_WITH(nick-history, [AC_HELP_STRING([--with-nick-history=length],[Specify the length of the nickname history])],
|
||||
AC_DEFINE_UNQUOTED(NICKNAMEHISTORYLENGTH,$withval), AC_DEFINE(NICKNAMEHISTORYLENGTH,2000))
|
||||
AC_ARG_WITH(sendq, [AC_HELP_STRING([--with-sendq=maxsendq],[Specify the max sendq for the server])],
|
||||
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_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])],
|
||||
AC_DEFINE_UNQUOTED(DPATH, "$withval") IRCDDIR="$withval", AC_DEFINE_UNQUOTED(DPATH,"`pwd`") IRCDDIR="`pwd`")
|
||||
AC_ARG_WITH(fd-setsize, [AC_HELP_STRING([--with-fd-setsize=size],[Specify the max file descriptors to use])],
|
||||
ac_fd=$withval, ac_fd=1024)
|
||||
AC_DEFINE_UNQUOTED(MAXCONNECTIONS, $ac_fd)
|
||||
AC_ARG_WITH(spath, [AC_HELP_STRING([--with-spath],[Specify the location of the executable])],
|
||||
AC_DEFINE_UNQUOTED(SPATH,"$withval") BINDIR="$withval",AC_DEFINE_UNQUOTED(SPATH,"`pwd`/src/ircd") BINDIR="`pwd`/src/ircd")
|
||||
AC_ARG_ENABLE(nospoof, [AC_HELP_STRING([--enable-nospoof],[Enable spoofing protection])], AC_DEFINE(NOSPOOF))
|
||||
AC_ARG_ENABLE(prefixaq, [AC_HELP_STRING([--enable-prefixaq],[Enable chanadmin and chanowner prefixes])], AC_DEFINE(PREFIX_AQ))
|
||||
AC_ARG_ENABLE(hub, [AC_HELP_STRING([--enable-hub],[Compile as a hub server])], AC_DEFINE(HUB))
|
||||
AC_ARG_WITH(showlistmodes, [AC_HELP_STRING([--with-showlistmodes], [Specify whether modes are shown in /list])],
|
||||
AC_DEFINE(LIST_SHOW_MODES))
|
||||
AC_ARG_WITH(topicisnuhost, [AC_HELP_STRING([--with-topicisnuhost], [Display nick!user@host as the topic setter])],
|
||||
AC_DEFINE(TOPIC_NICK_IS_NUHOST))
|
||||
AC_ARG_WITH(shunnotices, [AC_HELP_STRING([--with-shunnotices], [Notify a user when he/she is no longer shunned])],
|
||||
AC_DEFINE(SHUN_NOTICES))
|
||||
AC_ARG_WITH(no-operoverride, [AC_HELP_STRING([--with-no-operoverride], [Disable OperOverride])],
|
||||
AC_DEFINE(NO_OPEROVERRIDE))
|
||||
AC_ARG_WITH(disableusermod, [AC_HELP_STRING([--with-disableusermod], [Disable /set* and /chg*])],
|
||||
AC_DEFINE(DISABLE_USERMOD))
|
||||
AC_ARG_WITH(operoverride-verify, [AC_HELP_STRING([--with-operoverride-verify], [Require opers to invite themselves to +s/+p channels])],
|
||||
AC_DEFINE(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_SUBST(IRCDDIR)
|
||||
AC_SUBST(BINDIR)
|
||||
AC_MSG_CHECKING(if FD_SETSIZE is large enough to allow $ac_fd file descriptors)
|
||||
AC_TRY_RUN([
|
||||
#include <sys/types.h>
|
||||
#include <sys/time.h>
|
||||
int main() {
|
||||
if (FD_SETSIZE >= $ac_fd)
|
||||
exit(0);
|
||||
exit(1);
|
||||
}
|
||||
], AC_MSG_RESULT(yes), [
|
||||
FD_SETSIZE="-DFD_SETSIZE=$ac_fd"
|
||||
AC_MSG_RESULT(no)
|
||||
])
|
||||
AC_SUBST(FD_SETSIZE)
|
||||
case `uname -s` in
|
||||
*SunOS*)
|
||||
CFLAGS="$CFLAGS -D_SOLARIS"
|
||||
IRCDLIBS="$IRCDLIBS -lresolv "
|
||||
;;
|
||||
*solaris*)
|
||||
CFLAGS="$CFLAGS -D_SOLARIS"
|
||||
IRCDLIBS="$IRCDLIBS -lresolv "
|
||||
;;
|
||||
esac
|
||||
|
||||
dnl REMEMBER TO CHANGE WITH A NEW TRE RELEASE!
|
||||
tre_version="0.7.5"
|
||||
AC_MSG_RESULT(extracting TRE regex library)
|
||||
cur_dir=`pwd`
|
||||
cd extras
|
||||
dnl remove old tre directory to force a recompile...
|
||||
rm -rf tre-$tre_version
|
||||
if test "x$ac_cv_path_GUNZIP" = "x" ; then
|
||||
tar xfz tre.tar.gz
|
||||
else
|
||||
cp tre.tar.gz tre.tar.gz.bak
|
||||
gunzip -f tre.tar.gz
|
||||
cp tre.tar.gz.bak tre.tar.gz
|
||||
tar xf tre.tar
|
||||
fi
|
||||
AC_MSG_RESULT(configuring TRE regex library)
|
||||
cd tre-$tre_version
|
||||
./configure --disable-agrep --disable-shared --disable-system-abi --disable-wchar --disable-multibyte --prefix=$cur_dir/extras/regexp || exit 1
|
||||
AC_MSG_RESULT(compiling TRE regex library)
|
||||
$ac_cv_prog_MAKER || exit 1
|
||||
AC_MSG_RESULT(installing TRE regex library)
|
||||
$ac_cv_prog_MAKER install || exit 1
|
||||
TREINCDIR="$cur_dir/extras/regexp/include"
|
||||
AC_SUBST(TREINCDIR)
|
||||
if test "x$ac_cv_path_PKGCONFIG" = "x" ; then
|
||||
TRELIBS="-L../extras/regexp/lib -ltre"
|
||||
else
|
||||
TRELIBS=`$ac_cv_path_PKGCONFIG --libs tre.pc`
|
||||
fi
|
||||
AC_SUBST(TRELIBS)
|
||||
cd $cur_dir
|
||||
|
||||
|
||||
dnl REMEMBER TO CHANGE WITH A NEW C-ARES RELEASE!
|
||||
cares_version="1.6.0"
|
||||
AC_MSG_RESULT(extracting c-ares resolver library)
|
||||
cur_dir=`pwd`
|
||||
cd extras
|
||||
dnl remove old c-ares directory to force a recompile...
|
||||
rm -rf c-ares-$cares_version
|
||||
if test "x$ac_cv_path_GUNZIP" = "x" ; then
|
||||
tar xfz c-ares.tar.gz
|
||||
else
|
||||
cp c-ares.tar.gz c-ares.tar.gz.bak
|
||||
gunzip -f c-ares.tar.gz
|
||||
cp c-ares.tar.gz.bak c-ares.tar.gz
|
||||
tar xf c-ares.tar
|
||||
fi
|
||||
AC_MSG_RESULT(configuring c-ares library)
|
||||
cd c-ares-$cares_version
|
||||
./configure --prefix=$cur_dir/extras/c-ares || exit 1
|
||||
AC_MSG_RESULT(compiling c-ares resolver library)
|
||||
$ac_cv_prog_MAKER || exit 1
|
||||
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)
|
||||
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
|
||||
|
||||
|
||||
AC_OUTPUT(Makefile src/modules/Makefile unreal ircdcron/ircdchk)
|
||||
chmod 0700 unreal
|
||||
chmod 0700 ircdcron/ircdchk
|
||||
@@ -1,253 +0,0 @@
|
||||
#serial 1
|
||||
|
||||
dnl Macro: unreal_CHECK_TYPE_SIZES
|
||||
dnl originally called unet_CHECK_TYPE_SIZES
|
||||
dnl
|
||||
dnl Check the size of several types and define a valid int16_t and int32_t.
|
||||
dnl
|
||||
AC_DEFUN([unreal_CHECK_TYPE_SIZES],
|
||||
[dnl Check type sizes
|
||||
AC_CHECK_SIZEOF(short)
|
||||
AC_CHECK_SIZEOF(int)
|
||||
AC_CHECK_SIZEOF(long)
|
||||
if test "$ac_cv_sizeof_int" = 2 ; then
|
||||
AC_CHECK_TYPE(int16_t, int)
|
||||
AC_CHECK_TYPE(u_int16_t, unsigned int)
|
||||
elif test "$ac_cv_sizeof_short" = 2 ; then
|
||||
AC_CHECK_TYPE(int16_t, short)
|
||||
AC_CHECK_TYPE(u_int16_t, unsigned short)
|
||||
else
|
||||
AC_MSG_ERROR([Cannot find a type with size of 16 bits])
|
||||
fi
|
||||
if test "$ac_cv_sizeof_int" = 4 ; then
|
||||
AC_CHECK_TYPE(int32_t, int)
|
||||
AC_CHECK_TYPE(u_int32_t, unsigned int)
|
||||
elif test "$ac_cv_sizeof_short" = 4 ; then
|
||||
AC_CHECK_TYPE(int32_t, short)
|
||||
AC_CHECK_TYPE(u_int32_t, unsigned short)
|
||||
elif test "$ac_cv_sizeof_long" = 4 ; then
|
||||
AC_CHECK_TYPE(int32_t, long)
|
||||
AC_CHECK_TYPE(u_int32_t, unsigned long)
|
||||
else
|
||||
AC_MSG_ERROR([Cannot find a type with size of 32 bits])
|
||||
fi
|
||||
AC_CHECK_SIZEOF(rlim_t)
|
||||
if test "$ac_cv_sizeof_rlim_t" = 8 ; then
|
||||
AC_DEFINE([LONG_LONG_RLIM_T], [], [Define if rlim_t is long long])
|
||||
fi
|
||||
])
|
||||
|
||||
AC_DEFUN([CHECK_LIBCURL],
|
||||
[
|
||||
AC_ARG_ENABLE(libcurl,
|
||||
[AC_HELP_STRING([--enable-libcurl=DIR],[enable libcurl (remote include) support])],
|
||||
[enable_curl=$enableval],
|
||||
[enable_curl=no])
|
||||
|
||||
AS_IF([test "x$enable_curl" != "xno"],
|
||||
[
|
||||
dnl sane, default directory for Operating System-managed libcURL
|
||||
dnl (when --enable-libcurl is passed without any arguments). On
|
||||
dnl systems with stuff in /usr/local, /usr/local/bin should already
|
||||
dnl be in PATH. On sane systems, this will invoke the curl-config
|
||||
dnl installed by the package manager.
|
||||
CURLCONFIG="curl-config"
|
||||
AS_IF([test "x$enable_curl" != "xyes"],
|
||||
[CURLCONFIG="$enable_curl/bin/curl-config"])
|
||||
|
||||
AC_MSG_CHECKING([$CURLCONFIG])
|
||||
AS_IF([$CURLCONFIG --version 2>/dev/null >/dev/null],
|
||||
[AC_MSG_RESULT([yes])],
|
||||
[AC_MSG_RESULT([no])
|
||||
AC_MSG_FAILURE([Could not find curl-config, try editing --enable-libcurl])])
|
||||
|
||||
CURLCFLAG="`$CURLCONFIG --cflags`"
|
||||
CURLLIBS="`$CURLCONFIG --libs`"
|
||||
|
||||
dnl This test must be this way because of #3981
|
||||
AS_IF([$CURLCONFIG --features | grep -q -e AsynchDNS],
|
||||
[CURLUSESCARES="1"],
|
||||
[CURLUSESCARES="0"])
|
||||
AS_IF([test "$CURLUSESCARES" = "0"],
|
||||
[AC_MSG_WARN([cURL seems compiled without c-ares support. Your IRCd will possibly stall when REHASHing!])])
|
||||
|
||||
dnl sanity warnings
|
||||
AS_IF([test -z "${CURLLIBS}"],
|
||||
[AC_MSG_WARN([CURLLIBS is empty, that probably means that I could not find $enable_curl/bin/curl-config])])
|
||||
|
||||
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. -- Syzop
|
||||
dnl
|
||||
dnl It is dangerous to mix and match cURL with potentially ABI-incompatible versions of
|
||||
dnl c-ares, just use --with-system-cares.
|
||||
dnl Thus, make sure to use --with-system-cares when using system-cURL. If the user
|
||||
dnl wants bundled c-ares + system libcURL, then we should filter out c-ares
|
||||
dnl flags. _Only_ in that case should we mess with the flags. -- ohnobinki
|
||||
|
||||
AS_IF([test "x$with_system_cares" = "xno" && test "x$HOME/curl" != "x$enable_curl" && test "x/usr/share/unreal-curl" != "x$enable_curl" && test "$CURLUSESCARES" != "0" ],
|
||||
[
|
||||
AC_MSG_ERROR([[
|
||||
|
||||
You have decided to build unrealIRCd with libcURL (remote includes) support.
|
||||
However, you have disabled system-installed c-ares support (--with-system-cares).
|
||||
Because UnrealIRCd will use a bundled copy of c-ares which may be incompatible
|
||||
with the system-installed libcURL, this is a bad idea which may result in error
|
||||
messages looking like:
|
||||
|
||||
\`\`[error] unrealircd.conf:9: include: error downloading '(http://example.net/ex.conf)': Could not resolve host: example.net (Successful completion)''
|
||||
|
||||
Or UnrealIRCd might even crash.
|
||||
|
||||
Please build UnrealIRCd with --with-system-cares when enabling --enable-libcurl
|
||||
]])
|
||||
])
|
||||
|
||||
AS_IF([test "x`echo $CURLLIBS |grep ares`" != x && test "x$with_system_cares" = "xno"],
|
||||
[
|
||||
dnl Attempt one: Linux sed
|
||||
XCURLLIBS="`echo "$CURLLIBS"|sed -r 's/(@<:@^ @:>@+ @<:@^ @:>@+ )(@<:@^ @:>@+ @<:@^ @:>@+ )(.+)/\1\3/g' 2>/dev/null`"
|
||||
AS_IF([test "x$XCURLLIBS" = "x"],
|
||||
[
|
||||
dnl Attempt two: FreeBSD (and others?) sed
|
||||
XCURLLIBS="`echo "$CURLLIBS"|sed -E 's/(@<:@^ @:>@+ @<:@^ @:>@+ )(@<:@^ @:>@+ @<:@^ @:>@+ )(.+)/\1\3/g' 2>/dev/null`"
|
||||
AS_IF([test x"$XCURLLIBS" = x],
|
||||
[
|
||||
AC_MSG_ERROR([sed appears to be broken. It is needed for a remote includes compile hack.])
|
||||
])
|
||||
])
|
||||
CURLLIBS="$XCURLLIBS"
|
||||
|
||||
IRCDLIBS_CURL_CARES="$CARES_LIBS"
|
||||
CFLAGS_CURL_CARES="$CARES_CFLAGS"
|
||||
])
|
||||
|
||||
dnl Make sure that linking against cURL works rather than letting the user
|
||||
dnl find out after compiling most of his program. ~ohnobinki
|
||||
IRCDLIBS="$IRCDLIBS $CURLLIBS"
|
||||
CFLAGS="$CFLAGS $CURLCFLAG"
|
||||
AC_DEFINE([USE_LIBCURL], [], [Define if you have libcurl installed to get remote includes and MOTD support])
|
||||
|
||||
AC_MSG_CHECKING([curl_easy_init() in $CURLLIBS])
|
||||
LIBS_SAVEDA="$LIBS"
|
||||
CFLAGS_SAVEDA="$CFLAGS"
|
||||
|
||||
LIBS="$IRCDLIBS $IRCDLIBS_CURL_CARES"
|
||||
CFLAGS="$CFLAGS $CFLAGS_CURL_CARES"
|
||||
AC_LINK_IFELSE(
|
||||
[
|
||||
AC_LANG_PROGRAM(
|
||||
[[#include <curl/curl.h>]],
|
||||
[[CURL *curl = curl_easy_init();]])
|
||||
],
|
||||
[AC_MSG_RESULT([yes])],
|
||||
[AC_MSG_RESULT([no])
|
||||
AC_MSG_FAILURE([You asked for libcURL (remote includes) support, but it can't be found at $enable_curl])
|
||||
])
|
||||
LIBS="$LIBS_SAVEDA"
|
||||
CFLAGS="$CFLAGS_SAVEDA"
|
||||
|
||||
URL="url.o"
|
||||
AC_SUBST(URL)
|
||||
]) dnl AS_IF(enable_curl)
|
||||
])
|
||||
|
||||
dnl the following 2 macros are based on CHECK_SSL by Mark Ethan Trostler <trostler@juniper.net>
|
||||
|
||||
AC_DEFUN([CHECK_SSL],
|
||||
[
|
||||
AC_ARG_ENABLE(ssl,
|
||||
[AC_HELP_STRING([--enable-ssl=],[enable ssl will check /usr/local/ssl /usr/lib/ssl /usr/ssl /usr/pkg /usr/sfw /usr/local /usr])],
|
||||
[],
|
||||
[enable_ssl=no])
|
||||
AS_IF([test $enable_ssl != "no"],
|
||||
[
|
||||
AC_MSG_CHECKING([for openssl])
|
||||
for dir in $enable_ssl /usr/local/ssl /usr/lib/ssl /usr/ssl /usr/pkg /usr/sfw /usr/local /usr; do
|
||||
ssldir="$dir"
|
||||
if test -f "$dir/include/openssl/ssl.h"; then
|
||||
AC_MSG_RESULT([found in $ssldir/include/openssl])
|
||||
found_ssl="yes";
|
||||
if test ! "$ssldir" = "/usr" ; then
|
||||
CFLAGS="$CFLAGS -I$ssldir/include";
|
||||
fi
|
||||
break
|
||||
fi
|
||||
if test -f "$dir/include/ssl.h"; then
|
||||
AC_MSG_RESULT([found in $ssldir/include])
|
||||
found_ssl="yes";
|
||||
if test ! "$ssldir" = "/usr" ; then
|
||||
CFLAGS="$CFLAGS -I$ssldir/include";
|
||||
fi
|
||||
break
|
||||
fi
|
||||
done
|
||||
if test x_$found_ssl != x_yes; then
|
||||
AC_MSG_RESULT(not found)
|
||||
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 " (or pass --disable-ssl to ./configure)"
|
||||
echo ""
|
||||
exit 1
|
||||
else
|
||||
CRYPTOLIB="-lssl -lcrypto";
|
||||
if test ! "$ssldir" = "/usr" ; then
|
||||
LDFLAGS="$LDFLAGS -L$ssldir/lib";
|
||||
fi
|
||||
AC_DEFINE([USE_SSL], [], [Define if you want to allow SSL connections])
|
||||
fi
|
||||
])
|
||||
])
|
||||
|
||||
AC_DEFUN([CHECK_ZLIB],
|
||||
[
|
||||
AC_ARG_ENABLE([ziplinks],
|
||||
[AC_HELP_STRING([--enable-ziplinks=DIR],[enable ziplinks. will check /usr/local /usr /usr/pkg. Note that SSL does its own compression, so you won't need this for SSL links.])],
|
||||
[],
|
||||
[enable_ziplinks=no])
|
||||
AS_IF([test $enable_ziplinks != "no"],
|
||||
[
|
||||
AC_MSG_CHECKING([for zlib])
|
||||
for dir in $enable_ziplinks /usr/local /usr /usr/pkg; do
|
||||
zlibdir="$dir"
|
||||
if test -f "$dir/include/zlib.h"; then
|
||||
AC_MSG_RESULT(found in $zlibdir)
|
||||
found_zlib="yes";
|
||||
if test "$zlibdir" != "/usr" ; then
|
||||
CFLAGS="$CFLAGS -I$zlibdir/include";
|
||||
fi
|
||||
AC_DEFINE([ZIP_LINKS], [], [Define if you have zlib and want zip links support.])
|
||||
break
|
||||
fi
|
||||
done
|
||||
if test x_$found_zlib != x_yes; then
|
||||
AC_MSG_RESULT([not found])
|
||||
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
|
||||
LDFLAGS="$LDFLAGS -L$zlibdir/lib"
|
||||
fi
|
||||
HAVE_ZLIB=yes
|
||||
fi
|
||||
AC_SUBST([HAVE_ZLIB])
|
||||
])
|
||||
])
|
||||
@@ -1,9 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
cd "$(dirname "${0}")"
|
||||
|
||||
ACLOCAL_AMFLAGS=(-I autoconf/m4)
|
||||
|
||||
aclocal "${ACLOCAL_AMFLAGS[@]}"
|
||||
autoconf
|
||||
autoheader
|
||||
-667
@@ -1,667 +0,0 @@
|
||||
dnl Process this file with autoconf to produce a configure script.
|
||||
AC_INIT([unrealircd], [3.2.8.1], [http://bugs.unrealircd.org/], [], [http://unrealircd.org/])
|
||||
AC_CONFIG_SRCDIR([src/ircd.c])
|
||||
AC_CONFIG_HEADER([include/setup.h])
|
||||
AC_CONFIG_AUX_DIR([autoconf])
|
||||
AC_CONFIG_MACRO_DIR([autoconf/m4])
|
||||
|
||||
if test "x$enable_dynamic_linking" = "x"; then
|
||||
echo "Please use ./Config instead of ./configure"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
AC_PROG_CC
|
||||
if test "$ac_cv_prog_gcc" = "yes"; then
|
||||
CFLAGS="$CFLAGS -funsigned-char"
|
||||
AC_CACHE_CHECK(if gcc has a working -pipe, ac_cv_pipe, [
|
||||
save_cflags="$CFLAGS"
|
||||
CFLAGS="$CFLAGS -pipe"
|
||||
AC_TRY_COMPILE(,, ac_cv_pipe="yes", ac_cv_pipe="no")
|
||||
CFLAGS="$save_cflags"
|
||||
])
|
||||
if test "$ac_cv_pipe" = "yes"; then
|
||||
CFLAGS="-pipe $CFLAGS"
|
||||
fi
|
||||
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 "`$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 "`$CC -v --help 2>&1`" in
|
||||
*-Wpointer-sign* ) CFLAGS="$CFLAGS -Wno-pointer-sign" ;;
|
||||
esac
|
||||
|
||||
AC_PATH_PROG(RM,rm)
|
||||
AC_PATH_PROG(CP,cp)
|
||||
AC_PATH_PROG(TOUCH,touch)
|
||||
AC_PATH_PROG(OPENSSLPATH,openssl)
|
||||
AC_PATH_PROG(INSTALL,install)
|
||||
AC_CHECK_PROG(MAKER, gmake, gmake, make)
|
||||
AC_PATH_PROG(GMAKE,gmake)
|
||||
AC_PATH_PROG(GUNZIP, gunzip)
|
||||
AC_PATH_PROG(PKGCONFIG, pkg-config)
|
||||
|
||||
dnl Checks for libraries.
|
||||
AC_CHECK_LIB(descrypt, crypt,
|
||||
[AC_DEFINE([HAVE_CRYPT], [], [Define if you have crypt])
|
||||
IRCDLIBS="$IRCDLIBS-ldescrypt "
|
||||
MKPASSWDLIBS="-ldescrypt"],
|
||||
[AC_CHECK_LIB(crypt, crypt,
|
||||
[AC_DEFINE([HAVE_CRYPT], [], [Define if you have crypt])
|
||||
IRCDLIBS="$IRCDLIBS-lcrypt "
|
||||
MKPASSWDLIBS="-lcrypt"])])
|
||||
AC_CHECK_LIB(socket, socket,
|
||||
[IRCDLIBS="$IRCDLIBS-lsocket "
|
||||
SOCKLIB="-lsocket"])
|
||||
AC_CHECK_LIB(nsl, inet_ntoa,
|
||||
[IRCDLIBS="$IRCDLIBS-lnsl "
|
||||
INETLIB="-lnsl"])
|
||||
|
||||
AC_SUBST(IRCDLIBS)
|
||||
AC_SUBST(MKPASSWDLIBS)
|
||||
|
||||
dnl module checking based on Hyb7's module checking code
|
||||
AC_DEFUN([AC_ENABLE_DYN],
|
||||
[
|
||||
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"
|
||||
AC_CACHE_CHECK(if we need the -export-dynamic flag, ac_cv_export_dynamic, [
|
||||
AC_TRY_LINK(, [int i];, ac_cv_export_dynamic=yes, ac_cv_export_dynamic=no)])
|
||||
if test "$ac_cv_export_dynamic" = "no"; then
|
||||
CFLAGS=$hold_cflags
|
||||
fi
|
||||
|
||||
AC_CACHE_CHECK(for compiler option to produce PIC,ac_cv_pic,[
|
||||
if test "$ac_cv_prog_gcc" = "yes"; then
|
||||
ac_cv_pic="-fPIC -DPIC -shared"
|
||||
case `uname -s` in
|
||||
Darwin*[)]
|
||||
ac_cv_pic="-bundle -flat_namespace -undefined suppress"
|
||||
;;
|
||||
HP-UX*[)]
|
||||
ac_cv_pic="-fPIC"
|
||||
;;
|
||||
esac
|
||||
else
|
||||
case `uname -s` in
|
||||
SunOS*[)]
|
||||
ac_cv_pic="-KPIC -DPIC -G"
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
])
|
||||
AC_CACHE_CHECK(if your system prepends an underscore on symbols,ac_cv_underscore,[
|
||||
cat >uscore.c << __EOF__
|
||||
int main() {
|
||||
return 0;
|
||||
}
|
||||
__EOF__
|
||||
$CC -o uscore $CFLAGS uscore.c 1>&5
|
||||
if test -z "`strings -a uscore |grep '^_main$'`"; then
|
||||
ac_cv_underscore=no
|
||||
else
|
||||
ac_cv_underscore=yes
|
||||
fi
|
||||
rm -f uscore uscore.c
|
||||
])
|
||||
dnl libtool has built-in tests that determine proper underscorage
|
||||
if test "$ac_cv_underscore" = "yes"; then
|
||||
AC_DEFINE([UNDERSCORE], [], [Define if your system prepends an underscore to symbols])
|
||||
fi
|
||||
|
||||
MODULEFLAGS=$ac_cv_pic
|
||||
dnl DYNAMIC_LINKING is not meant to be defined in include/setup.h, it's
|
||||
dnl defined in the Makefiles using -D. Having it defined globally will
|
||||
dnl only cause braindamage and symbol collisions :-D.
|
||||
dnl AC_DEFINE([DYNAMIC_LINKING], [], [Link dynamically as opposed to statically. (Dynamic linking is the only supported method of linking atm)])
|
||||
])
|
||||
AC_DEFUN([AC_ENABLE_INET6],[
|
||||
AC_CACHE_CHECK([if your system has IPv6 support], [ac_cv_ip6], [
|
||||
save_libs="$LIBS"
|
||||
LIBS="$LIBS $SOCKLIB"
|
||||
AC_TRY_RUN([
|
||||
#include <sys/types.h>
|
||||
#include <sys/socket.h>
|
||||
int main() {
|
||||
if (socket(AF_INET6, SOCK_STREAM, 0) < 0)
|
||||
exit(1);
|
||||
exit(0);
|
||||
}
|
||||
],
|
||||
[ac_cv_ip6=yes],
|
||||
[ac_cv_ip6=no])
|
||||
])
|
||||
if test "$ac_cv_ip6" = "no"; then
|
||||
AC_MSG_ERROR([Your system does not support IPv6 so it will not be enabled])
|
||||
else
|
||||
AC_DEFINE([INET6], [], [Define if you want IPv6 enabled])
|
||||
dnl in6addr_any detection code taken from ratbox
|
||||
AC_MSG_CHECKING([for struct in6addr_any])
|
||||
AC_COMPILE_IFELSE(
|
||||
[AC_LANG_PROGRAM(
|
||||
[[#define IN_AUTOCONF
|
||||
#include <sys/types.h>
|
||||
#include <sys/socket.h>
|
||||
#include <netinet/in.h>]],
|
||||
[[struct in6_addr a = in6addr_any;]]
|
||||
)],
|
||||
[AC_MSG_RESULT(yes)],
|
||||
[
|
||||
AC_MSG_RESULT([no])
|
||||
AC_DEFINE([NO_IN6ADDR_ANY], [1], [Define to 1 if your system has no in6addr_any.])
|
||||
]
|
||||
)
|
||||
fi
|
||||
LIBS="$save_libs"
|
||||
])
|
||||
|
||||
AC_CHECK_HEADER(sys/param.h,
|
||||
AC_DEFINE([PARAMH], [], [Define if you have the <sys/param.h> header file.]))
|
||||
AC_CHECK_HEADER(stdlib.h,
|
||||
AC_DEFINE([STDLIBH], [], [Define if you have the <stdlib.h> header file.]))
|
||||
AC_CHECK_HEADER(stddef.h,
|
||||
AC_DEFINE([STDDEFH], [], [Define if you have the <stddef.h> header file.]))
|
||||
AC_CHECK_HEADER(sys/syslog.h,
|
||||
AC_DEFINE([SYSSYSLOGH], [], [Define if you have the <sys/syslog.h> header file.]))
|
||||
AC_CHECK_HEADER(unistd.h,
|
||||
AC_DEFINE([UNISTDH], [], [Define if you have the <unistd.h> header file.]))
|
||||
AC_CHECK_HEADER(string.h,
|
||||
AC_DEFINE([STRINGH], [], [Define if you have the <string.h> header file.]))
|
||||
AC_CHECK_HEADER(strings.h,
|
||||
AC_DEFINE([STRINGSH], [], [Define if you have the <strings.h> header file.]))
|
||||
AC_CHECK_HEADER(malloc.h,
|
||||
AC_DEFINE([MALLOCH], [<malloc.h>], [Define to <malloc.h> you need malloc.h.]))
|
||||
AC_CHECK_HEADER(sys/rusage.h,
|
||||
AC_DEFINE([RUSAGEH], [], [Define if you have the <sys/rusage.h> header file.]))
|
||||
AC_CHECK_HEADER(glob.h,
|
||||
AC_DEFINE([GLOBH], [], [Define if you have the <glob.h> header file.]))
|
||||
AC_CHECK_HEADERS([stdint.h inttypes.h])
|
||||
dnl Checks for typedefs, structures, and compiler characteristics.
|
||||
AC_C_CONST
|
||||
AC_C_INLINE
|
||||
|
||||
AC_TYPE_MODE_T
|
||||
AC_TYPE_SIZE_T
|
||||
AC_TYPE_INTPTR_T
|
||||
|
||||
AC_HEADER_TIME
|
||||
AC_STRUCT_TM
|
||||
AC_TYPE_UID_T
|
||||
unreal_CHECK_TYPE_SIZES
|
||||
|
||||
dnl in the future, it would be nice to avoid AC_TRY_RUN to allow
|
||||
dnl better support for crosscompiling.
|
||||
AC_CACHE_CHECK([what kind of nonblocking sockets you have], [ac_cv_nonblocking],[
|
||||
save_libs="$LIBS"
|
||||
LIBS="$LIBS $SOCKLIB"
|
||||
AC_TRY_RUN([
|
||||
#include <sys/types.h>
|
||||
#include <sys/socket.h>
|
||||
#include <fcntl.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <sys/file.h>
|
||||
#include <signal.h>
|
||||
alarmed() {
|
||||
exit(1);
|
||||
}
|
||||
int main() {
|
||||
#ifdef O_NONBLOCK
|
||||
char b[12], x[32];
|
||||
int f, l = sizeof(x);
|
||||
f = socket(AF_INET, SOCK_DGRAM, 0);
|
||||
if (f >= 0 && !(fcntl(f, F_SETFL, O_NONBLOCK))) {
|
||||
signal(SIGALRM, alarmed);
|
||||
alarm(3);
|
||||
recvfrom(f, b, 12, 0, (struct sockaddr *)x, &l);
|
||||
alarm(0);
|
||||
exit(0);
|
||||
}
|
||||
#endif
|
||||
exit(1);
|
||||
}
|
||||
],ac_cv_nonblocking=O_NONBLOCK,[
|
||||
AC_TRY_RUN([
|
||||
#include <sys/types.h>
|
||||
#include <sys/socket.h>
|
||||
#include <fcntl.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <sys/file.h>
|
||||
#include <signal.h>
|
||||
alarmed() {
|
||||
exit(0);
|
||||
}
|
||||
int main() {
|
||||
#ifdef O_NDELAY
|
||||
char b[12], x[32];
|
||||
int f, l = sizeof(x);
|
||||
f = socket(AF_INET, SOCK_DGRAM, 0);
|
||||
if (f >= 0 && !(fcntl(f, F_SETFL, O_NDELAY))) {
|
||||
signal(SIGALRM, alarmed);
|
||||
alarm(3);
|
||||
recvfrom(f, b, 12, 0, (struct sockaddr *)x, &l);
|
||||
alarm(0);
|
||||
exit(0);
|
||||
}
|
||||
#endif
|
||||
exit(1);
|
||||
}],ac_cv_nonblocking=O_NDELAY,[
|
||||
AC_TRY_RUN([
|
||||
#include <sys/types.h>
|
||||
#include <sys/socket.h>
|
||||
#include <fcntl.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <sys/file.h>
|
||||
#include <signal.h>
|
||||
alarmed() {
|
||||
exit(1);
|
||||
}
|
||||
int main() {
|
||||
#ifdef FIONBIO
|
||||
char b[12], x[32];
|
||||
int f, l = sizeof(x);
|
||||
f = socket(AF_INET, SOCK_DGRAM, 0);
|
||||
if (f >= 0 && !(fcntl(f, F_SETFL, FIONBIO))) {
|
||||
signal(SIGALRM, alarmed);
|
||||
alarm(3);
|
||||
recvfrom(f, b, 12, 0, (struct sockaddr *)x, &l);
|
||||
alarm(0);
|
||||
exit(0);
|
||||
}
|
||||
#endif
|
||||
exit(1);
|
||||
], ac_cv_nonblocking=FIONBIO,ac_cv_nonblocking=none)])])])
|
||||
if test "$ac_cv_nonblocking" = "O_NONBLOCK"; then
|
||||
AC_DEFINE([NBLOCK_POSIX], [], [Define if you have O_NONBLOCK])
|
||||
elif test "$ac_cv_nonblocking" = "O_NDELAY"; then
|
||||
AC_DEFINE([NBLOCK_BSD], [], [Define if you have O_NDELAY])
|
||||
elif test "$ac_cv_nonblocking" = "FIONBIO"; then
|
||||
AC_DEFINE([NBLOCK_SYSV], [], [Define if you have FIONBIO])
|
||||
fi
|
||||
LIBS="$save_libs"
|
||||
dnl Checks for library functions.
|
||||
AC_PROG_GCC_TRADITIONAL
|
||||
AC_FUNC_SETPGRP
|
||||
AC_FUNC_SETVBUF_REVERSED
|
||||
AC_FUNC_ALLOCA
|
||||
AC_CHECK_FUNCS(snprintf,
|
||||
AC_DEFINE([HAVE_SNPRINTF], [], [Define if you have snprintf]))
|
||||
AC_CHECK_FUNCS(vsnprintf,
|
||||
AC_DEFINE([HAVE_VSNPRINTF], [], [Define if you have vsnprintf]))
|
||||
AC_CHECK_FUNCS(strlcpy,
|
||||
AC_DEFINE([HAVE_STRLCPY], [], [Define if you have strlcpy. Otherwise, an internal implementation will be used!]))
|
||||
AC_CHECK_FUNCS(strlcat,
|
||||
AC_DEFINE([HAVE_STRLCAT], [], [Define if you have strlcat]))
|
||||
AC_CHECK_FUNCS(strlncat,
|
||||
AC_DEFINE([HAVE_STRLNCAT], [], [Define if you have strlncat]))
|
||||
AC_CHECK_FUNCS(inet_pton,
|
||||
AC_DEFINE([HAVE_INET_PTON], [], [Define if you have inet_pton]))
|
||||
AC_CHECK_FUNCS(inet_ntop,
|
||||
AC_DEFINE([HAVE_INET_NTOP], [], [Define if you have inet_ntop]))
|
||||
dnl Check if it supports C99 style variable length arrays
|
||||
AC_CACHE_CHECK([if C99 variable length arrays are supported], [ac_cv_varlen_arrays], [
|
||||
AC_TRY_COMPILE(,[
|
||||
int main() {
|
||||
int i = 5;
|
||||
int a[i];
|
||||
a[0] = 1;
|
||||
return 0;
|
||||
}], ac_cv_varlen_arrays=yes, ac_cv_varlen_arrays=no)
|
||||
])
|
||||
if test "$ac_cv_varlen_arrays" = "yes" ; then
|
||||
AC_DEFINE([HAVE_C99_VARLEN_ARRAY], [], [Define if you have a compiler with C99 variable length array support])
|
||||
fi
|
||||
|
||||
dnl This check doesn't need to be in ./configure, we can
|
||||
dnl write the sourcecode to actually handle the return value
|
||||
dnl of setrlimit if necessary... -- ohnobinki
|
||||
AC_CACHE_CHECK([if we can set the core size to unlimited], [ac_cv_force_core], [
|
||||
AC_TRY_RUN([
|
||||
#include <sys/time.h>
|
||||
#include <sys/resource.h>
|
||||
#include <unistd.h>
|
||||
int main() {
|
||||
struct rlimit corelim;
|
||||
corelim.rlim_cur = corelim.rlim_max = RLIM_INFINITY;
|
||||
if (setrlimit(RLIMIT_CORE, &corelim))
|
||||
exit(1);
|
||||
exit(0);
|
||||
}
|
||||
],ac_cv_force_core=yes,ac_cv_force_core=no)
|
||||
])
|
||||
if test "$ac_cv_force_core" = "yes"; then
|
||||
AC_DEFINE([FORCE_CORE], [], [Define if you can set the core size to unlimited])
|
||||
fi
|
||||
AC_FUNC_VPRINTF
|
||||
AC_CHECK_FUNCS([gettimeofday],
|
||||
[AC_DEFINE([GETTIMEOFDAY], [], [Define if you have gettimeofday])],
|
||||
[AC_CHECK_FUNCS([lrand48],
|
||||
[AC_DEFINE([LRADN48], [], [Define if you have lrand48])])])
|
||||
AC_CHECK_FUNCS([getrusage],
|
||||
[AC_DEFINE([GETRUSAGE_2], [], [Define if you have getrusage])],
|
||||
[AC_CHECK_FUNCS([times],
|
||||
[AC_DEFINE([TIMES_2], [], [Define if you have times])])])
|
||||
AC_CHECK_FUNCS([setproctitle],
|
||||
[AC_DEFINE([HAVE_SETPROCTITLE], [], [Define if you have setproctitle])],
|
||||
[AC_CHECK_LIB([util],
|
||||
[setproctitle],
|
||||
[AC_DEFINE([HAVE_SETPROCTITLE], [], [Define if you have setproctitle])
|
||||
IRCDLIBS="$IRCDLIBS-lutil"],
|
||||
[
|
||||
AC_EGREP_HEADER([#define.*PS_STRINGS.*],[sys/exec.h],
|
||||
[AC_DEFINE([HAVE_PSSTRINGS],[], [Define if you have PS_STRINGS])],
|
||||
[AC_CHECK_FUNCS([pstat],
|
||||
[AC_DEFINE([HAVE_PSTAT], [], [Define if you have pstat])])])
|
||||
])
|
||||
]
|
||||
)
|
||||
|
||||
|
||||
AC_CACHE_CHECK([what type of signals you have], [ac_cv_sigtype], [
|
||||
AC_TRY_RUN([
|
||||
#include <signal.h>
|
||||
int main() {
|
||||
sigaction(SIGTERM, (struct sigaction *)0L, (struct sigaction *)0L);
|
||||
}
|
||||
], ac_cv_sigtype=POSIX, [
|
||||
AC_TRY_RUN([
|
||||
#include <signal.h>
|
||||
int calls = 0;
|
||||
void handler()
|
||||
{
|
||||
if (calls)
|
||||
return;
|
||||
calls++;
|
||||
kill(getpid(), SIGTERM);
|
||||
sleep(1);
|
||||
}
|
||||
|
||||
int main() {
|
||||
signal(SIGTERM, handler);
|
||||
kill(getpid(), SIGTERM);
|
||||
exit(0);
|
||||
}
|
||||
], ac_cv_sigtype=BSD,ac_cv_sigtype=SYSV)])])
|
||||
|
||||
if test "$ac_cv_sigtype" = "POSIX"; then
|
||||
AC_DEFINE([POSIX_SIGNALS], [], [Define if you have POSIX signals])
|
||||
elif test "$ac_cv_sigtype" = "BSD"; then
|
||||
AC_DEFINE([BSD_RELIABLE_SIGNALS], [], [Define if you have BSD signals])
|
||||
else
|
||||
AC_DEFINE([SYSV_UNRELIABLE_SIGNALS], [], [Define if you have SYSV signals])
|
||||
fi
|
||||
AC_CHECK_FUNCS(strtoken,,AC_DEFINE([NEED_STRTOKEN], [], [Define if you need the strtoken function.]))
|
||||
AC_CHECK_FUNCS(strtok,,AC_DEFINE([NEED_STRTOK], [], [Define if you need the strtok function.]))
|
||||
AC_CHECK_FUNCS(strerror,,AC_DEFINE([NEED_STRERROR], [], [Define if you need the strerror function.]))
|
||||
AC_CHECK_FUNCS(index,,AC_DEFINE([NOINDEX], [], [Define if you do not have the index function.]))
|
||||
AC_CHECK_FUNCS(strtoul,,STRTOUL="strtoul.o")
|
||||
AC_CHECK_FUNCS(bcopy,,AC_DEFINE([NEED_BCOPY], [], [Define if you don't have bcopy]))
|
||||
AC_CHECK_FUNCS(bcmp,,AC_DEFINE([NEED_BCMP], [], [Define if you don't have bcmp]))
|
||||
AC_CHECK_FUNCS(bzero,,AC_DEFINE([NEED_BZERO], [], [Define if you need bzero]))
|
||||
AC_CHECK_FUNCS(strcasecmp,AC_DEFINE([GOT_STRCASECMP], [], [Define if you have strcasecmp]))
|
||||
save_libs="$LIBS"
|
||||
LIBS="$LIBS $SOCKLIB $INETLIB"
|
||||
AC_CHECK_FUNCS(inet_addr,,AC_DEFINE([NEED_INET_ADDR], [], [Define if you need inet_addr]))
|
||||
AC_CHECK_FUNCS(inet_ntoa,,AC_DEFINE([NEED_INET_NTOA], [], [Define if you need inet_ntoa]))
|
||||
AC_CHECK_FUNCS(inet_netof,,AC_DEFINE([NEED_INET_NETOF], [], [Define if you need inet_netof]))
|
||||
LIBS="$save_libs"
|
||||
AC_CHECK_FUNCS(syslog,AC_DEFINE([HAVE_SYSLOG], [], [Define if you have syslog]))
|
||||
AC_CHECK_FUNCS(vsyslog,AC_DEFINE([HAVE_VSYSLOG], [], [Define if you have vsyslog]))
|
||||
AC_SUBST(STRTOUL)
|
||||
AC_SUBST(CRYPTOLIB)
|
||||
AC_SUBST(MODULEFLAGS)
|
||||
AC_ARG_WITH(listen, [AS_HELP_STRING([--with-listen=backlog],[Specify the listen backlog value])],
|
||||
[AC_DEFINE_UNQUOTED([LISTEN_SIZE], [$withval], [Set to the listen backlog size you want])],
|
||||
[AC_DEFINE([LISTEN_SIZE], [5], [Set to the listen backlog size you want])])
|
||||
AC_ARG_WITH(nick-history, [AS_HELP_STRING([--with-nick-history=length],[Specify the length of the nickname history])],
|
||||
[AC_DEFINE_UNQUOTED([NICKNAMEHISTORYLENGTH], [$withval], [Set to the nickname history length you want])],
|
||||
[AC_DEFINE([NICKNAMEHISTORYLENGTH], [2000], [Set to the nickname history length you want])])
|
||||
AC_ARG_WITH([sendq], [AS_HELP_STRING([--with-sendq=maxsendq],[Specify the max sendq for the server])],
|
||||
[AC_DEFINE_UNQUOTED([MAXSENDQLENGTH], [$withval], [Set to the max sendq you want])],
|
||||
[AC_DEFINE([MAXSENDQLENGTH], [3000000], [Set to the max sendq you want])])
|
||||
AC_ARG_WITH(bufferpool, [AS_HELP_STRING([--with-bufferpool=size],[Specify the size of the buffer pool])],
|
||||
[AC_DEFINE_UNQUOTED([BUFFERPOOL],[($withval * MAXSENDQLENGTH)], [Set to the bufferpool size you want])],
|
||||
[AC_DEFINE([BUFFERPOOL],[(18 * MAXSENDQLENGTH)], [Set to the bufferpool size you want])])
|
||||
AC_ARG_WITH(permissions, [AS_HELP_STRING([--with-permissions=permissions], [Specify the default permissions for
|
||||
configuration files])],
|
||||
dnl We have an apparently out-of-place 0 here because of a MacOSX bug and because
|
||||
dnl we assume that a user thinks that `chmod 0600 blah' is the same as `chmod 600 blah'
|
||||
dnl (#3189)
|
||||
[AC_DEFINE_UNQUOTED([DEFAULT_PERMISSIONS], [0$withval], [The default permissions for configuration files. Set to 0 to prevent unrealircd from calling chmod() on the files.])],
|
||||
[AC_DEFINE([DEFAULT_PERMISSIONS], [0600], [The default permissions for configuration files. Set to 0 to prevent unrealircd from calling chmod() on the files.])])
|
||||
AC_ARG_WITH(dpath, [AS_HELP_STRING([--with-dpath=path],[Specify the path where configuration files are stored])],
|
||||
[AC_DEFINE_UNQUOTED([DPATH], ["$withval"], [Define the location of the configuration files])
|
||||
IRCDDIR="$withval"],
|
||||
[AC_DEFINE_UNQUOTED([DPATH], ["`pwd`"], [Define the location of the configuration files])
|
||||
IRCDDIR="`pwd`"])
|
||||
|
||||
AC_ARG_WITH(fd-setsize, [AS_HELP_STRING([--with-fd-setsize=size], [Specify the max file descriptors to use])],
|
||||
[ac_fd=$withval],
|
||||
[ac_fd=1024])
|
||||
AC_DEFINE_UNQUOTED([MAXCONNECTIONS], [$ac_fd], [Set to the max connections you want])
|
||||
|
||||
dnl It would be nice if this could just respect --bindir like every other
|
||||
dnl program does someday... -- ohnobinki
|
||||
AC_ARG_WITH(spath, [AS_HELP_STRING([--with-spath],[Specify the location of the executable])],
|
||||
[AC_DEFINE_UNQUOTED([SPATH], ["$withval"], [Define the location of the executable])
|
||||
BINDIR="$withval"],
|
||||
[AC_DEFINE_UNQUOTED([SPATH], ["`pwd`/src/ircd"], [Define the location of the executable])
|
||||
BINDIR="`pwd`/src/ircd"])
|
||||
|
||||
# enable nospoof by default; protects against javascript POST attacks and much more ;-)
|
||||
AC_ARG_ENABLE([nospoof],
|
||||
[AS_HELP_STRING([--disable-nospoof], [Disable spoofing protection (requires clients to respond to a randomly generated PING packet after USER and NICK but before using other commands)])],
|
||||
[],
|
||||
[enable_nospoof=yes])
|
||||
AS_IF([test $enable_nospoof = "yes"],
|
||||
[AC_DEFINE([NOSPOOF], [], [Define if you want spoof protection])])
|
||||
|
||||
AC_ARG_ENABLE([prefixaq],
|
||||
[AS_HELP_STRING([--disable-prefixaq],[Enable chanadmin (+a) and chanowner (+q) prefixes])],
|
||||
[],
|
||||
[enable_prefixaq=yes])
|
||||
AS_IF([test $enable_prefixaq = "yes"],
|
||||
[AC_DEFINE([PREFIX_AQ], [], [Define if you want +a/+q prefixes])])
|
||||
|
||||
AC_ARG_WITH(showlistmodes,
|
||||
[AS_HELP_STRING([--with-showlistmodes], [Specify whether modes are shown in /list])],
|
||||
[AS_IF([test $withval = "yes"],
|
||||
[AC_DEFINE([LIST_SHOW_MODES], [], [Define if you want modes shown in /list])])])
|
||||
AC_ARG_WITH(topicisnuhost, [AS_HELP_STRING([--with-topicisnuhost], [Display nick!user@host as the topic setter])],
|
||||
[AS_IF([test $withval = "yes"],
|
||||
[AC_DEFINE([TOPIC_NICK_IS_NUHOST], [], [Define if you want nick!user@host shown for the topic setter])])])
|
||||
AC_ARG_WITH(shunnotices, [AS_HELP_STRING([--with-shunnotices], [Notify a user when he/she is no longer shunned])],
|
||||
[AS_IF([test $withval = "yes"],
|
||||
[AC_DEFINE([SHUN_NOTICES], [], [Define if you want users to be notified when their shun is removed])])])
|
||||
AC_ARG_WITH(no-operoverride, [AS_HELP_STRING([--with-no-operoverride], [Disable OperOverride])],
|
||||
[AS_IF([test $withval = "yes"],
|
||||
[AC_DEFINE([NO_OPEROVERRIDE], [], [Define if you want OperOverride disabled])])])
|
||||
AC_ARG_WITH(disableusermod, [AS_HELP_STRING([--with-disableusermod], [Disable /set* and /chg*])],
|
||||
[AS_IF([test $withval = "yes"],
|
||||
[AC_DEFINE([DISABLE_USERMOD], [], [Define if you want to disable /set* and /chg*])])])
|
||||
AC_ARG_WITH(operoverride-verify, [AS_HELP_STRING([--with-operoverride-verify], [Require opers to invite themselves to +s/+p channels])],
|
||||
[AS_IF([test $withval = "yes"],
|
||||
[AC_DEFINE([OPEROVERRIDE_VERIFY], [], [Define if you want opers to have to use /invite to join +s/+p channels])])])
|
||||
AC_ARG_WITH(disable-extendedban-stacking, [AS_HELP_STRING([--with-disable-extendedban-stacking], [Disable extended ban stacking])],
|
||||
[AS_IF([test $withval = "yes"],
|
||||
[AC_DEFINE([DISABLE_STACKED_EXTBANS], [], [Define to disable extended ban stacking (~q:~c:\#chan, etc)])])])
|
||||
AC_ARG_WITH(system-tre, [AS_HELP_STRING([--with-system-tre], [Use the system tre package instead of bundled, discovered using pkg-config])], [], [with_system_tre=no])
|
||||
AC_ARG_WITH(system-cares, [AS_HELP_STRING([--with-system-cares], [Use the system c-ares (at least version 1.6.0) package instead of bundled c-ares, discovered using pkg-config])], [], [with_system_cares=no])
|
||||
CHECK_SSL
|
||||
CHECK_ZLIB
|
||||
AC_ARG_ENABLE(dynamic-linking, [AS_HELP_STRING([--disable-dynamic-linking], [Make the IRCd statically link with shared objects rather than dynamically (noone knows if disabling dynamic linking actually does anything or not)])],
|
||||
[enable_dynamic_linking=$enableval], [enable_dynamic_linking="yes"])
|
||||
AS_IF([test $enable_dynamic_linking = "yes"],
|
||||
[AC_ENABLE_DYN],
|
||||
[AC_DEFINE([STATIC_LINKING], [], [Link... statically(?) (defining this macro will probably cause the build tofail)])])
|
||||
|
||||
AC_ARG_ENABLE([inet6], [AS_HELP_STRING([--enable-inet6], [Make the IRCd support IPv6])],
|
||||
[AS_IF([test $enableval = "yes"],
|
||||
[AC_ENABLE_INET6])])
|
||||
AC_SUBST(IRCDDIR)
|
||||
AC_SUBST(BINDIR)
|
||||
AC_MSG_CHECKING([if FD_SETSIZE is large enough to allow $ac_fd file descriptors])
|
||||
AC_COMPILE_IFELSE([
|
||||
#include <sys/types.h>
|
||||
#include <sys/time.h>
|
||||
int main() {
|
||||
#if FD_SETSIZE < $ac_fd
|
||||
#error FD_SETSIZE is smaller than $ac_fd
|
||||
#endif
|
||||
exit(0);
|
||||
}
|
||||
], AC_MSG_RESULT([yes]), [
|
||||
# must be passed on the commandline to avoid a ``warning, you redefined something''
|
||||
FD_SETSIZE="-DFD_SETSIZE=$ac_fd"
|
||||
AC_MSG_RESULT(no)
|
||||
])
|
||||
AC_SUBST([FD_SETSIZE])
|
||||
|
||||
case `uname -s` in
|
||||
*SunOS*|*solaris*)
|
||||
AC_DEFINE([_SOLARIS], [], [Define if you are compiling unrealircd on Sun's (or Oracle's?) Solaris])
|
||||
IRCDLIBS="$IRCDLIBS -lresolv "
|
||||
;;
|
||||
esac
|
||||
|
||||
dnl c-ares needs PATH_SEPARATOR set or it will
|
||||
dnl fail on certain solaris boxes. We might as
|
||||
dnl well set it here.
|
||||
export PATH_SEPARATOR
|
||||
|
||||
AS_IF([test "x$with_system_tre" = "xno"],[
|
||||
dnl REMEMBER TO CHANGE WITH A NEW TRE RELEASE!
|
||||
tre_version="0.8.0"
|
||||
AC_MSG_RESULT(extracting TRE regex library)
|
||||
cur_dir=`pwd`
|
||||
cd extras
|
||||
dnl remove old tre directory to force a recompile...
|
||||
dnl and remove its installation prefix just to clean things up.
|
||||
rm -rf tre-$tre_version rege[]xp
|
||||
if test "x$ac_cv_path_GUNZIP" = "x" ; then
|
||||
tar xfz tre.tar.gz
|
||||
else
|
||||
cp tre.tar.gz tre.tar.gz.bak
|
||||
gunzip -f tre.tar.gz
|
||||
cp tre.tar.gz.bak tre.tar.gz
|
||||
tar xf tre.tar
|
||||
fi
|
||||
AC_MSG_RESULT(configuring TRE regex library)
|
||||
cd tre-$tre_version
|
||||
./configure --disable-agrep --disable-shared --disable-system-abi --disable-wchar --disable-multibyte --prefix=$cur_dir/extras/regexp || exit 1
|
||||
AC_MSG_RESULT(compiling TRE regex library)
|
||||
$ac_cv_prog_MAKER || exit 1
|
||||
AC_MSG_RESULT(installing TRE regex library)
|
||||
$ac_cv_prog_MAKER install || exit 1
|
||||
TRE_CFLAGS="-I$cur_dir/extras/regexp/include"
|
||||
AC_SUBST(TRE_CFLAGS)
|
||||
|
||||
TRE_LIBS=
|
||||
dnl See c-ares's compilation section for more info on this hack.
|
||||
dnl ensure that we're linking against the bundled version of tre
|
||||
dnl (we only reach this code if linking against the bundled version is desired).
|
||||
AS_IF([test -n "$ac_cv_path_PKGCONFIG"],
|
||||
[TRE_LIBS="`$ac_cv_path_PKGCONFIG --static --libs tre.pc | sed ['s,-L\([^ ]\+lib\) -ltre,\1/libtre.a,']`"])
|
||||
dnl For when pkg-config isn't available -- or for when pkg-config
|
||||
dnl doesn't see the tre.pc file somehow... (#3982)
|
||||
AS_IF([test -z "$TRE_LIBS"],
|
||||
[TRE_LIBS="../extras/regexp/lib/libtre.a"])
|
||||
AC_SUBST(TRE_LIBS)
|
||||
cd $cur_dir
|
||||
],[
|
||||
dnl use pkgconfig for tre:
|
||||
PKG_CHECK_MODULES([TRE], tre >= 0.7.5)
|
||||
])
|
||||
|
||||
AS_IF([test "x$with_system_cares" = "xno"],[
|
||||
dnl REMEMBER TO CHANGE WITH A NEW C-ARES RELEASE!
|
||||
dnl NOTE: when changing this here, ALSO change it in ./curlinstall
|
||||
dnl and in the comment in this file around line 400!
|
||||
cares_version="1.7.3"
|
||||
AC_MSG_RESULT(extracting c-ares resolver library)
|
||||
cur_dir=`pwd`
|
||||
cd extras
|
||||
dnl remove old c-ares directory to force a recompile...
|
||||
rm -rf c-ares-$cares_version c-ares
|
||||
if test "x$ac_cv_path_GUNZIP" = "x" ; then
|
||||
tar xfz c-ares.tar.gz
|
||||
else
|
||||
cp c-ares.tar.gz c-ares.tar.gz.bak
|
||||
gunzip -f c-ares.tar.gz
|
||||
cp c-ares.tar.gz.bak c-ares.tar.gz
|
||||
tar xf c-ares.tar
|
||||
fi
|
||||
AC_MSG_RESULT(configuring c-ares library)
|
||||
cd c-ares-$cares_version
|
||||
./configure --prefix=$cur_dir/extras/c-ares --disable-shared || exit 1
|
||||
AC_MSG_RESULT(compiling c-ares resolver library)
|
||||
$ac_cv_prog_MAKER || exit 1
|
||||
AC_MSG_RESULT(installing c-ares resolver library)
|
||||
$ac_cv_prog_MAKER install || exit 1
|
||||
CARES_CFLAGS="-I$cur_dir/extras/c-ares/include"
|
||||
AC_SUBST(CARES_CFLAGS)
|
||||
CARES_LIBS="-L../extras/c-ares/lib"
|
||||
|
||||
dnl Set default library parameters for when pkg-config is not available
|
||||
dnl Ugly cd'ing out of extras/c-ares-xxx ;)
|
||||
dnl Note: must be a full path, not relative path.
|
||||
cd ../..
|
||||
CARESLIBSALT="`pwd`/extras/c-ares/lib/libcares.a"
|
||||
cd -
|
||||
case `uname -s` in
|
||||
*FreeBSD*)
|
||||
CARESLIBSALT="$CARESLIBSALT"
|
||||
;;
|
||||
*Linux*)
|
||||
CARESLIBSALT="$CARESLIBSALT -lrt"
|
||||
;;
|
||||
*SunOS*)
|
||||
CARESLIBSALT="$CARESLIBSALT -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
|
||||
CARES_LIBS="$CARES_LIBS $CARESLIBSALT"
|
||||
else
|
||||
CARES_LIBSPRE="$CARES_LIBS"
|
||||
dnl the sed expression forces an absolute path to the .a file to be generated
|
||||
dnl because this is what libtool would do. If this wasn't done and /usr/lib*/libcares.so
|
||||
dnl exists, then unrealircd would still try to link against the system c-ares.
|
||||
dnl The [] quotation is needed because the sed expression has [] in it.
|
||||
[CARES_LIBS="$CARES_LIBS `$ac_cv_path_PKGCONFIG --static --libs libcares.pc | sed -e 's,-L\([^ ]\+lib\) -lcares,\1/libcares.a,'`"]
|
||||
if test "$CARES_LIBS" = "$CARES_LIBSPRE " ; then
|
||||
CARES_LIBS="$CARES_LIBS $CARESLIBSALT"
|
||||
fi
|
||||
fi
|
||||
AC_SUBST(CARES_LIBS)
|
||||
cd $cur_dir
|
||||
],[
|
||||
dnl use pkg-config for system c-ares:
|
||||
PKG_CHECK_MODULES([CARES], libcares >= 1.6.0)
|
||||
])
|
||||
|
||||
CHECK_LIBCURL
|
||||
|
||||
AC_CONFIG_FILES([Makefile
|
||||
src/modules/Makefile
|
||||
unreal
|
||||
ircdcron/ircdchk
|
||||
ircdcron/ircd.cron])
|
||||
AC_OUTPUT
|
||||
chmod 0700 unreal
|
||||
chmod 0700 ircdcron/ircdchk
|
||||
+4265
-3886
File diff suppressed because it is too large
Load Diff
+51
-70
@@ -1,85 +1,66 @@
|
||||
#!/bin/sh
|
||||
URL="http://www.unrealircd.com/files/curl-latest.tar.gz"
|
||||
OUTF="curl-latest.tar.gz"
|
||||
OUTD="curl-latest"
|
||||
ARESPATH="`pwd`/extras/c-ares"
|
||||
CARESVERSION="1.7.3"
|
||||
if [ ! -f "Unreal.nfo" ]; then
|
||||
echo "Please run this program from your UnrealIRCd directory"
|
||||
echo "(usually $HOME/Unreal3.2 or something like that)"
|
||||
|
||||
if test "x$1" = x -o "x$2" = x ; then
|
||||
echo "Syntax:"
|
||||
echo "curlinstall ares_path libcurl_path"
|
||||
echo ""
|
||||
exit 1
|
||||
fi
|
||||
|
||||
wget --version 1>/dev/null 2>&1
|
||||
if [ "$?" = 0 ]; then
|
||||
FETCHER="wget"
|
||||
else
|
||||
fetch --version 1>/dev/null 2>&1
|
||||
if [ "$?" = 0 ]; then
|
||||
FETCHER="fetch"
|
||||
else
|
||||
lynx --version 1>/dev/null 2>&1
|
||||
if [ "$?" = 0 ]; then
|
||||
FETCHER="lynx"
|
||||
else
|
||||
echo "ERROR: unable to find wget/fetch/lynx, please install at least one of these programs"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ ! -d tmp ]; then
|
||||
mkdir tmp || exit 1
|
||||
fi
|
||||
|
||||
cd tmp || exit 1
|
||||
|
||||
rm -f "$OUTF"
|
||||
|
||||
if [ "$FETCHER" = "wget" ]; then
|
||||
wget -O "$OUTF" "$URL"
|
||||
elif [ "$FETCHER" = "lynx" ]; then
|
||||
lynx -dump "$URL" >"$OUTF"
|
||||
elif [ "$FETCHER" = "fetch" ]; then
|
||||
cd tmp #todo: find out the cmd line parameter ;)
|
||||
fetch "$URL"
|
||||
fi
|
||||
|
||||
if [ "$?" != 0 ]; then
|
||||
echo "ERROR: Something went wrong while trying to download $URL"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
rm -rf "$OUTD" # remove old directory prior to extracting
|
||||
tar xzf "$OUTF" || exit 1
|
||||
|
||||
|
||||
if [ "`eval echo -n 'a'`" = "-n a" ] ; then
|
||||
c="\c"
|
||||
else
|
||||
n="-n"
|
||||
fi
|
||||
|
||||
if [ ! -d "$ARESPATH/lib" ]; then
|
||||
echo "c-ares has not been build yet, let's do that now..."
|
||||
cd ../extras/
|
||||
tar xzf c-ares.tar.gz || exit 1
|
||||
cd c-ares-$CARESVERSION || exit 1
|
||||
./configure --prefix=$ARESPATH || exit 1
|
||||
(make && make install) || exit 1
|
||||
cd ../../tmp/
|
||||
echo "c-ares built."
|
||||
save_PWD=`pwd`
|
||||
echo "Installing ares"
|
||||
cd $1
|
||||
./configure --prefix=$HOME/ares && make && make install
|
||||
|
||||
SSLFLAG=""
|
||||
while [ -z "$SSLFLAG" ] ; do
|
||||
echo ""
|
||||
echo "Should libcurl be built with SSL support?"
|
||||
echo $n "-> " $c
|
||||
read cc
|
||||
case "$cc" in
|
||||
[Yy]*)
|
||||
SSLFLAG="--with-ssl"
|
||||
;;
|
||||
[Nn]*)
|
||||
SSLFLAG="--without-ssl"
|
||||
;;
|
||||
*)
|
||||
echo ""
|
||||
echo "You must enter either Yes or No"
|
||||
;;
|
||||
esac
|
||||
done
|
||||
if [ -f $HOME/ares/lib/libcares.a ] ; then
|
||||
if [ -f $HOME/ares/lib/libares.a ] ; then
|
||||
rm -f $HOME/ares/lib/libares.a
|
||||
fi
|
||||
cp $HOME/ares/lib/libcares.a $HOME/ares/lib/libares.a
|
||||
fi
|
||||
|
||||
# We assume curl has been packaged in a way it will extract to "$OUTD"/
|
||||
cd "$OUTD" || exit 1
|
||||
|
||||
echo "Building and installing libcurl"
|
||||
CPPFLAGS="-I$ARESPATH/include" ./configure --prefix=$HOME/curl --disable-shared \
|
||||
--disable-thread --enable-ares=$ARESPATH --disable-ipv6 $SSLFLAG
|
||||
cp -R $ARESPATH/lib ares
|
||||
echo "Installing libcurl"
|
||||
cd $2
|
||||
CPPFLAGS="-I$HOME/ares/include" ./configure --prefix=$HOME/curl --disable-shared \
|
||||
--disable-thread --enable-ares=$HOME/ares --disable-ipv6 $SSLFLAG
|
||||
cp -R $HOME/ares/lib ares
|
||||
make && make install
|
||||
|
||||
#cp $ARESPATH/lib/libcares.a $HOME/curl/lib
|
||||
# that isn't needed anymore as the lib is already in unreal...
|
||||
if [ -f $HOME/curl/lib/libares.a ] ; then
|
||||
rm -f $HOME/curl/lib/libares.a
|
||||
fi
|
||||
cp $HOME/ares/lib/libares.a $HOME/curl/lib
|
||||
|
||||
cd $save_PWD
|
||||
|
||||
echo ""
|
||||
echo ""
|
||||
echo "libcurl has been installed. When running ./Config specify:"
|
||||
echo "$HOME/curl"
|
||||
echo "for the directory you installed libcurl to."
|
||||
|
||||
|
||||
+6
-7
@@ -119,13 +119,12 @@ Tom Hopkins <hoppie@buengf.bu.edu> / September, October 1990:
|
||||
lines worth. :)
|
||||
|
||||
UnrealIRCd Coders
|
||||
Carsten Munk <stskeeps@unrealircd.com> / May 1999 - December 2008
|
||||
Dominick Meglio <codemastr@unrealircd.com> / June 1999 - August 2005
|
||||
David Flynn / March 2000 - June 2000
|
||||
McSkaf / June 2001 - September 2001
|
||||
Finny Merrill <griever@unrealircd.com> / November 2001 - December 2002
|
||||
Bram Matthys <syzop@unrealircd.com> / January 2002 - date
|
||||
This list is incomplete, type /INFO on IRC to find the updated list.
|
||||
Carsten Munk <stskeeps@unrealircd.com> / May 1999, date
|
||||
Dominick Meglio <codemastr@unrealircd.com> / June 1999, date
|
||||
David Flynn / March 2000, June 2000
|
||||
McSkaf / June 2001, September 2001
|
||||
Finny Merrill <griever@unrealircd.com> / November 2001, December 2002
|
||||
Bram Matthys <syzop@unrealircd.com> / January 2002, date
|
||||
|
||||
Thanks go to those persons not mentioned here who have added their advice,
|
||||
opinions, and code to IRC.
|
||||
|
||||
+86
-141
@@ -1,141 +1,86 @@
|
||||
Rules about patches & modifications to UnrealIRCd
|
||||
|
||||
1. When making a change, always add a small description in Changes, in the
|
||||
BOTTOM. Don't forget to mention the bug# and credit the reporter (if any).
|
||||
|
||||
2. If new files are made, it must contain proper copyright headers.
|
||||
|
||||
3. If you want to submit patches (f.e. if you don't have CVS write access)
|
||||
then submit them to http://bugs.unrealircd.org/ (shortly called bugs*)
|
||||
using "cvs diff -u > patchname". A submission must contain description of
|
||||
what it does, etc.
|
||||
|
||||
4. Each bug or feature should have a bug# so people can have a discussion
|
||||
about it. This has a few implications (read!!):
|
||||
* People must report bugs/feature requests to bugs* and not on
|
||||
IRC, e-mail, etc.
|
||||
* That means other people can see the bug# and comment on it. This means
|
||||
discussion is easy to read back for each issue and not spread between
|
||||
several IRC logs.
|
||||
Furthermore, by using the bugtracker instead of directly committing,
|
||||
people could point out that there might be a better way to do things
|
||||
than you originally thought, or it might be that other devs don't like
|
||||
it at all.
|
||||
* If a head coder has 'acknowledged' or 'confirmed' the bug or stated in
|
||||
a comment that it's OK to implement, then a dev may take the issue.
|
||||
The dev should change the status to 'assigned' and work on it, then
|
||||
commit and change it to 'resolved', set 'fixed in version' to next
|
||||
release, and add a comment pasting the relevant Changelog item and the
|
||||
releaseid (.XYZ).
|
||||
Of course other guidelines, like #7 and #8 still apply.
|
||||
|
||||
5. Do not commit changes that do not have an associated bug# and have not
|
||||
had any discussion.
|
||||
Small/tiny bugfixes that do not change any functionality, are very
|
||||
unlikely to break anything and definitely don't require any prior
|
||||
discussion may be exempted.
|
||||
|
||||
6. Regarding reidenting, restructuring or other code cleanups: please
|
||||
discuss before doing so. The other devs might not agree with you on the
|
||||
particular cleanup you have in mind which would result in another
|
||||
clean-up-the-cleanup commit.
|
||||
You may, however reindent and clean up individual sections when you are
|
||||
working on fixing a particular bug# or implementing a new feature. In fact
|
||||
you're encouraged to do so if the code is confusing without it. However,
|
||||
obey the style of Unreal's code (mostly outlined in this document)
|
||||
and do not introduce yet another (new) style. Also, be careful with doing
|
||||
any cleanup: if you're unsure in any way about the use of something,
|
||||
or something that looks redundant on first sight, then look more
|
||||
carefully... it might indeed be useless and/or redundant, but it might
|
||||
also be a subtle thing that can create great bugs when 'cleaned up'.
|
||||
|
||||
7. Prior to a release: be very careful with any restructuring of a subsystem
|
||||
or doing any major commits that may break things. Stuff like this can be
|
||||
perfectly fine if there are many months to go, but are not good to do a
|
||||
month before release. The head coder may impose additional restrictions
|
||||
during such a period.
|
||||
|
||||
8. During the Release Candidate stage (from RC1 until the final release)
|
||||
only the head coder may commit directly, all others should ask and
|
||||
present their patch before committing. Yes, even if you are changing only
|
||||
1 line of code or text.
|
||||
|
||||
9. UnrealIRCd should compile on all supported operating systems and
|
||||
platforms, using GCC 3 or higher on *NIX, and Visual Studio 2008 or
|
||||
higher on Windows. This means you cannot blindly use all C99 extensions.
|
||||
|
||||
10. Coders should test their code before committing.
|
||||
|
||||
11. /*
|
||||
* These kind of comments
|
||||
*/
|
||||
|
||||
NOT
|
||||
|
||||
// These kind of comments
|
||||
|
||||
12. if (something == 1)
|
||||
{
|
||||
moo; /* comment */
|
||||
/* This does what what what */
|
||||
cow(go(moo));
|
||||
}
|
||||
|
||||
NOT
|
||||
|
||||
if (something == 1) {
|
||||
}
|
||||
|
||||
13. Do not touch version.c.SH or version.h, unless you are a head coder
|
||||
if you need a credit in, contact us
|
||||
|
||||
14. Protocol changes must be discussed before making patches for it.
|
||||
|
||||
15. We do NOT rip people off. If we use other people's code, it MUST be
|
||||
properly credited.
|
||||
|
||||
16. 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 ;)
|
||||
|
||||
17. 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.
|
||||
|
||||
18. 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.
|
||||
|
||||
19. 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 enormous 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 ;).
|
||||
|
||||
20. 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.
|
||||
|
||||
21. Use enums whenever possible, rather than #define constants. Besides making
|
||||
things more clean, it also aids debugging.
|
||||
|
||||
Some minor rules about patches & modifications to UnrealIRCd
|
||||
|
||||
1. When making a change, always add a small description in Changes, in the
|
||||
BOTTOM
|
||||
|
||||
2. If new files are made, it must contain proper copyright headers,
|
||||
and a $Id$ somewhere.
|
||||
|
||||
3. /*
|
||||
* These kind of comments
|
||||
*/
|
||||
|
||||
NOT
|
||||
|
||||
// These kind of comments
|
||||
|
||||
4. if (something == 1)
|
||||
{
|
||||
moo; /* comment */
|
||||
/* This does what what what */
|
||||
cow(go(moo));
|
||||
}
|
||||
|
||||
NOT
|
||||
|
||||
if (something == 1) {
|
||||
}
|
||||
|
||||
5. Do not touch version.c.SH or version.h, unless you are a head coder
|
||||
if you need a credit in, contact us
|
||||
|
||||
6. Patches are submitted to coders@lists.unrealircd.org,
|
||||
using "cvs diff -u > patchname". A submision must contain description of
|
||||
what it does, etc.
|
||||
|
||||
7. Protocol changes must be discussed before making patches for it.
|
||||
|
||||
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.
|
||||
|
||||
+70
-79
@@ -1,105 +1,95 @@
|
||||
==[ IMPORTANT MESSAGE ABOUT DISABLING NOSPOOF ]==
|
||||
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 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++ (see below), compiling with
|
||||
cygwin is not supported.
|
||||
cygwin is not supported (nor is there any good reason to do so).
|
||||
|
||||
Compatible compilers:
|
||||
cygwin NOT supported. Will not work. Should be no reason to use this anyway
|
||||
as cygwin is an emulation layer. It's obviously much better to run
|
||||
native (Windows) code on Windows.
|
||||
msvc 6.x Microsoft Visual Studio 6 does not work, this compiler is too old.
|
||||
msvc 7.x Microsoft Visual Studio 7.x (.NET), works.
|
||||
msvc 8.x Microsoft Visual Studio 8.x (.NET 2005), including the free kit, works.
|
||||
msvc 9.x Microsoft Visual Studio 9.x (.NET 2008), is used for official compile.
|
||||
mssdk Microsoft Windows SDK for Windows 7
|
||||
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 available for Windows 7 explained below:
|
||||
1. Download the 'MS SDK for Windows 7 and .NET Framework 3.5 SP1' at:
|
||||
http://www.microsoft.com/downloads/en/details.aspx?FamilyID=c17ba869-9671-4330-a63e-1fd44e0e2505&displaylang=en
|
||||
|
||||
2. NOTE: Whenever you need to compile something we say 'Start the Visual Studio
|
||||
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 CMD Shell instead (check out the
|
||||
Start Menu under Microsoft Windows SDK v7.0). Users on x64 environment will have
|
||||
to change their environment to x86 by typing 'SETENV /x86'.
|
||||
actually have to start the Platform SDK Prompt instead (check out the
|
||||
Start Menu).
|
||||
|
||||
3. Download http://www.vulnscan.org/tmp/dlltool.exe and put the file somewhere
|
||||
in your path (eg: put it in c:\windows\system32).
|
||||
|
||||
==[ EXTERNAL LIBRARIES ]==
|
||||
Fetch the external libraries (c-ares, tre, openssl, zlib, curl) from:
|
||||
http://www.vulnscan.org/unrealwin32dev/
|
||||
|
||||
==[ COMPILING ]==
|
||||
== 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)
|
||||
3. Have a look at 'makefile.win32' to look at what parameters you need to
|
||||
use, this depends on what libraries you want to link in and their location.
|
||||
4. Two options, use either one (B is preferred), and read step 5 too:
|
||||
A. Edit makefile.win32 directly to reflect your configuration and run
|
||||
'nmake -f makefile.win32'
|
||||
B. Don't edit makefile.win32 but instead create a one-line command (which
|
||||
you can put in a batch file), like this (all on one line!):
|
||||
nmake -f makefile.win32 USE_ZIPLINKS=1 ZLIB_INC_DIR="c:\dev\zlib"
|
||||
ZLIB_LIB_DIR="c:\dev\zlib\dll32" USE_SSL=1
|
||||
OPENSSL_INC_DIR="c:\openssl\include" OPENSSL_LIB_DIR="c:\openssl\lib"
|
||||
USE_REMOTEINC=1 LIBCURL_INC_DIR="c:\dev\curl-ssl\include"
|
||||
LIBCURL_LIB_DIR="c:\dev\curl-ssl\lib\dll-release"
|
||||
CARES_LIB_DIR="C:\dev\c-ares\vc\cares\dll-release"
|
||||
CARES_INC_DIR="C:\dev\c-ares" CARESLIB="cares.lib"
|
||||
TRE_LIB_DIR="C:\dev\tre\win32\release" TRE_INC_DIR="C:\dev\tre"
|
||||
TRELIB="tre.lib"
|
||||
5. You are likely to encounter an error like
|
||||
M_OPER.obj : error LNK2019: unresolved external symbol _sendto_snomask_global
|
||||
referenced in function _m_oper
|
||||
(the exact name and symbol will differ!!)
|
||||
In that case you need to generate a symbols file:
|
||||
nmake -f makefile.win32 SYMBOLFILE
|
||||
And after that simply re-run your nmake -f makefile.win32 [options]
|
||||
command, the same command you ran before the error occured.
|
||||
You should not get any unresolved external symbol error again.
|
||||
If you still do, then something is wrong.
|
||||
6. Your compile is now done, you can package unreal if you have InnoSetup,
|
||||
in that case check out src\win32\unrealinst.iss
|
||||
Otherwise, manually copy over the necessary files (and the dll files
|
||||
from the external libraries).
|
||||
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.
|
||||
4. Done!
|
||||
|
||||
==[ Compiling modules ]==
|
||||
== 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).
|
||||
4. Compile the module with:
|
||||
nmake -f makefile.win32 <YOUR OPTIONS> custommodule MODULEFILE=<name>
|
||||
nmake -f makefile.win32 custommodule MODULEFILE=<name>
|
||||
<name> is the name of the module WITHOUT the .c suffix, so if your
|
||||
module has the filename 'm_crappymod.c', then you use:
|
||||
nmake -f makefile.win32 <YOUR OPTIONS> custommodule MODULEFILE=m_crappymod
|
||||
Note that <YOUR OPTIONS> is the whole lot of options explained in
|
||||
previous section under 4B. If you use method 4A then there aren't any.
|
||||
Note 2: If you get any symbol file errors, see the section 'SYMBOL FILES'
|
||||
nmake -f makefile.win32 custommodule MODULEFILE=m_crappymod
|
||||
5. Done. A .dll file should have been created.
|
||||
|
||||
If you compiled with the same Visual Studio version that we use to compile
|
||||
the official UnrealIRCd version, and use the same Unreal3.2.X.tar.gz as the
|
||||
official version (and not CVS!), then your module is fully binary compatible
|
||||
and you can put it on your website (or ours) so users can use them.
|
||||
If you do anything else, this won't work.
|
||||
So, again, it will NOT work properly, if:
|
||||
1. You use a different UnrealIRCd source (like CVS, or a previous version).
|
||||
2. You use another compiler... this might still work but may require an
|
||||
additional .DLL file to be put in your UnrealIRCd directory (MSVxxxxxx.DLL).
|
||||
3. You compile with different options, such as compiling with SSL but trying
|
||||
to load the module on non-SSL.
|
||||
NOTE: unless your module uses SSL-specific code, you should compile
|
||||
without SSL as it will run on both SSL and non-SSL UnrealIRCd's.
|
||||
If you compiled with VC7 and used the official source (not a CVS version,
|
||||
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.
|
||||
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 that your module
|
||||
might seem to work fine at first (or not..) but will CRASH or cause memory
|
||||
corruption and other subtle errors.
|
||||
|
||||
==[ SYMBOL FILES ]==
|
||||
== COMPILING WITH ZIP LINKS / SSL / REMOTE INCLUDES SUPPORT ==
|
||||
First of all, DO NOT use any precompiled libs from the official
|
||||
zlib/openssl/curl sites. We require certain compile parameters.
|
||||
Versions downloaded from such sites will often CRASH.
|
||||
|
||||
The easiest is to download the UnrealIRCd development package
|
||||
which contains zlib, openssl and curl precompiled for you.
|
||||
See: www.vulnscan.org/unrealwin32dev/
|
||||
|
||||
Just extract it somewhere (eg: to c:\dev).
|
||||
Then, use compile flags to enable the features + specify where to look.
|
||||
Here are examples if you used c:\dev:
|
||||
ZIP: nmake -f makefile.win32 USE_ZIPLINKS=1 ZLIB_INC_DIR="c:\dev\zlib" ZLIB_LIB_DIR="c:\dev\zlib\dll32"
|
||||
SSL: nmake -f makefile.win32 USE_SSL=1 OPENSSL_INC_DIR="c:\dev\openssl\include" OPENSSL_LIB_DIR="c:\dev\openssl\lib"
|
||||
CURL: nmake -f makefile.win32 USE_REMOTEINC=1 LIBCURL_INC_DIR="c:\dev\curl\include" LIBCURL_LIB_DIR="c:\dev\curl\lib"
|
||||
|
||||
Obviously you can (and probably will) combine all these options, like
|
||||
to build a zip+ssl+curl version (all in 1 line):
|
||||
nmake -f makefile.win32 USE_ZIPLINKS=1 ZLIB_INC_DIR="c:\dev\zlib" ZLIB_LIB_DIR="c:\dev\zlib\dll32"
|
||||
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!)
|
||||
(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
|
||||
@@ -112,7 +102,8 @@ 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 ]==
|
||||
== COMPILING ZLIB/SSL/CURL YOURSELF ==
|
||||
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.
|
||||
reason to do otherwise (in which case we might not support your self-compiled version
|
||||
because we work with specific versions / compile options).
|
||||
|
||||
+3
-50
@@ -363,7 +363,7 @@ drpass {
|
||||
* NEW: log {} OLD: N/A Tells the ircd where and what to log(s). You can have
|
||||
* as many as you wish.
|
||||
*
|
||||
* FLAGS: errors, kills, tkl, connects, server-connects, oper
|
||||
* FLAGS: errors, kills, tkl, connects, server-connects, kline, oper
|
||||
*
|
||||
* Syntax:
|
||||
* log "log file"
|
||||
@@ -383,6 +383,7 @@ log "ircd.log" {
|
||||
maxsize 2097152;
|
||||
flags {
|
||||
oper;
|
||||
kline;
|
||||
connects;
|
||||
server-connects;
|
||||
kills;
|
||||
@@ -517,55 +518,7 @@ alias "glinebot" {
|
||||
type command;
|
||||
};
|
||||
|
||||
/*
|
||||
* NEW: files {}
|
||||
* OLD: include/config.h
|
||||
*
|
||||
* This block overrides the IRCd's default paths for loading things
|
||||
* like the MOTD, saving its PID, or writing/loading its tunefile. The
|
||||
* existence of this block allows one UnrealIRCd installation to
|
||||
* support multiple running instances when combined with the -c
|
||||
* commandline option.
|
||||
*
|
||||
* As usual, relative paths are interpreted relative to the directory
|
||||
* where UnrealIRCd would find unrealircd.conf if -c is _not_
|
||||
* specified on the commandline.
|
||||
*/
|
||||
files
|
||||
{
|
||||
/* The Message Of The Day shown to users who log in: */
|
||||
/* motd ircd.motd; */
|
||||
|
||||
/*
|
||||
* A short MOTD. If this file exists, it will be displayed to
|
||||
* the user in place of the MOTD. Users can still view the
|
||||
* full MOTD by using the /MOTD command.
|
||||
*/
|
||||
/* shortmotd ircd.smotd; */
|
||||
|
||||
/* Shown when an operator /OPERs up */
|
||||
/* opermotd oper.motd; */
|
||||
|
||||
/* Services MOTD append. */
|
||||
/* svsmotd ircd.svsmotd; */
|
||||
|
||||
/* Bot MOTD */
|
||||
/* botmotd bot.motd; */
|
||||
|
||||
/* Shown upon /RULES */
|
||||
/* rules ircd.rules; */
|
||||
|
||||
/*
|
||||
* Where the IRCd stores and loads a few values which should
|
||||
* be persistent across server restarts. Must point to an
|
||||
* existing file which the IRCd has permission to alter or to
|
||||
* a file in a folder within which the IRCd may create files.
|
||||
*/
|
||||
/* tunefile ircd.tune; */
|
||||
|
||||
/* Where to save the IRCd's pid. Should be writable by the IRCd. */
|
||||
/* pidfile ircd.pid; */
|
||||
};
|
||||
|
||||
/*
|
||||
* NEW: tld {}
|
||||
@@ -836,6 +789,6 @@ set {
|
||||
* Problems or need more help?
|
||||
* 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.unrealircd.org #unreal-support,
|
||||
* 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!
|
||||
*/
|
||||
|
||||
+5
-4
@@ -369,7 +369,7 @@ drpass {
|
||||
* NEU: log {} ALT: N/A Festlegung von Namen und Speicherort der Logfiles. Man kann
|
||||
* beliebig viele festlegen.
|
||||
*
|
||||
* FLAGS: errors, kills, tkl, connects, server-connects, oper
|
||||
* FLAGS: errors, kills, tkl, connects, server-connects, kline, oper
|
||||
*
|
||||
* Syntax:
|
||||
* log "log file"
|
||||
@@ -392,6 +392,7 @@ log "ircd.log" {
|
||||
kline;
|
||||
connects;
|
||||
server-connects;
|
||||
kills;
|
||||
errors;
|
||||
sadmin-commands;
|
||||
chg-commands;
|
||||
@@ -780,7 +781,7 @@ set {
|
||||
* Probleme? Weitere Hilfe nötig?
|
||||
* 1) www.vulnscan.org/UnrealIrcd/unreal32docs.html
|
||||
* 2) www.vulnscan.org/UnrealIrcd/faq/ <- enthält 80% deiner Fragen - Wetten Dass?
|
||||
* 3) Hat man dann noch Probleme, kann man den Chat bei irc.unrealircd.org
|
||||
* #unreal-support aufsuchen. Achtung, wir setzen voraus, dass zuvor die
|
||||
* DOKU GELESEN WURDE (genauso, wie die FAQ!)!
|
||||
* 3) Hat man dann noch Probleme, kann man den Chat bei irc.ircsystems.net
|
||||
* #unreal-support aufsuchen. Dabei ist zu beachten, dass wir voraussetzen,
|
||||
* dass zuvor DIE DOKU GELESEN WURDE (genauso, wie die FAQ!)!
|
||||
*/
|
||||
|
||||
+82
-86
@@ -1,26 +1,24 @@
|
||||
/*
|
||||
* example.conf par Daniel Hawton AKA Osiris (osiris@unrealircd.org).
|
||||
* Ancien traducteur français : babass
|
||||
* Tradution française : Alef Burzmali - http://www.burzmali.com
|
||||
* Dernière mise à jour : 2010-09-11
|
||||
* $Id$
|
||||
* Traduction française par babass (babass@unrealircd.org).
|
||||
*
|
||||
* Fonctionne pour Unreal3.2 et supérieur
|
||||
*
|
||||
* Okay les gars, voici la nouvelle version de l'example.conf. Cela ressemble plus à du C++.
|
||||
* Okay les mecs. Voici la nouvelle version de l'example.conf. Cela ressemble plus à du C++.
|
||||
* Peu importe, il est temps de se lancer. Il est difficile de l'attaquer pour la première fois, mais
|
||||
* avec un peu d'expérience et de lecture vous comprendrez.
|
||||
* avec un peu d'expérience et en lisant vous comprendrez.
|
||||
*
|
||||
* Copiez juste ce fichier dans votre répertoire unrealircd principal et appellez le 'unrealircd.conf'.
|
||||
*
|
||||
* NOTE: Toutes les lignes, exceptées les ligne d'ouvertures { , se terminent par un ;, en particulier
|
||||
* celles de fermeture }.
|
||||
* NOTE: Toutes les lignes, excepté la ligne d'ouverture { , les lignes finissant par un ;,
|
||||
* et celle de fermeture } incluses.
|
||||
* L'IRCd ignorera les lignes commentées.
|
||||
*
|
||||
* LISEZ S'IL VOUS PLAIT doc/unreal32docs.fr.html !
|
||||
* La version en ligne est aussi disponible à : http://www.unrealircd.com/files/docs/unreal32docs.fr.html
|
||||
* Elle contient beaucoup d'informations à propos du fichier de configuration : fournit des informations
|
||||
* à propos de chaque bloc, variable, etc..
|
||||
* LISEZ S'IL VOUS PLAIT doc/unreal32docs.fr.html! La version en ligne est aussi disponible à :
|
||||
* 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.
|
||||
*/
|
||||
@@ -29,10 +27,10 @@
|
||||
#Commentaire type 1 (type Shell)
|
||||
// Commentaire type 2 (style C++)
|
||||
/* Commentaire type 3 (style C) */
|
||||
# Toutes ces lignes sont ignorées par l'ircd.
|
||||
#Ces lignes sont ignorées par l'ircd.
|
||||
|
||||
/*
|
||||
* UnrealIRCd supporte des modules et certains sont obligatoires.
|
||||
* UnrealIRCd supportes des modules, en charger certains est requis.
|
||||
* Vous aurez besoin au moins du module commands et du module cloaking.
|
||||
*/
|
||||
|
||||
@@ -46,13 +44,12 @@
|
||||
|
||||
/*
|
||||
* Vous pouvez également inclure d'autres fichiers de configuration.
|
||||
* doc/help.fr.conf contient tout le texte de /helpop en français.
|
||||
* help.conf contient la version anglaise.
|
||||
* Les fichiers badwords.*.conf contiennent tous les badwords pour le mode +G...
|
||||
* help.conf contient tous le texte de /helpop. Les fichiers badwords.*.conf
|
||||
* contiennent tous les badwords pour le mode +G...
|
||||
* spamfilter.conf contient quelques bonnes règles pour les trojans courrants.
|
||||
* Vous voudrez probablement les inclure:
|
||||
*/
|
||||
include "doc/help.fr.conf";
|
||||
include "help.conf";
|
||||
include "badwords.channel.conf";
|
||||
include "badwords.message.conf";
|
||||
include "badwords.quit.conf";
|
||||
@@ -61,14 +58,14 @@ include "spamfilter.conf";
|
||||
/*
|
||||
* ACTUEL : me {}
|
||||
* ANCIEN : M:Line
|
||||
* me {} definit le nom, la description et l'identifiant numérique pour ce serveur.
|
||||
* La syntaxe est la suivante :
|
||||
* me {} definit le nom, la description et le numeric du serveur unreal
|
||||
* pour ce serveur. La syntaxe est la suivante :
|
||||
* me {
|
||||
* name "nom.du.serveur";
|
||||
* info "Description du Serveur";
|
||||
* numeric (numeric* serveur);
|
||||
* };
|
||||
* En cas de link, cet identifiant ne peut être utilisé pour aucun autre serveur du réseau.
|
||||
* En cas de link, ce numeric ne peut être utilisé pour aucun autre serveur du réseau.
|
||||
*/
|
||||
me
|
||||
{
|
||||
@@ -98,8 +95,8 @@ admin {
|
||||
/*
|
||||
* ACTUEL : class {}
|
||||
* ANCIEN : Y:line (l'ancien était déroutant)
|
||||
* Définit les réglages pour les classes. Une classe est un groupe de réglages pour
|
||||
* des connexions. Par exemple, pour les connexions serveurs, au lieu de passer par une classe
|
||||
* Défini les réglages pour les classes. Une classe est un groupe de réglages pour
|
||||
* des connexions. Par exemple, les connexions serveurs, au lieu de passer par une classe
|
||||
* client, vous utilisez directement une classe serveur. La syntaxe est la suivante :
|
||||
* class (nom de la classe)
|
||||
* {
|
||||
@@ -110,7 +107,7 @@ admin {
|
||||
* };
|
||||
*/
|
||||
|
||||
class clients
|
||||
class clients
|
||||
{
|
||||
pingfreq 90;
|
||||
maxclients 500;
|
||||
@@ -118,18 +115,18 @@ class clients
|
||||
recvq 8000;
|
||||
};
|
||||
|
||||
class servers
|
||||
class servers
|
||||
{
|
||||
pingfreq 90;
|
||||
maxclients 10; /* Nombre maximum de serveurs pouvant être reliés en même temps */
|
||||
maxclients 10; /* Nombre maximum de serveurs pouvant être reliés en même temps */
|
||||
sendq 1000000;
|
||||
connfreq 100; /* Combien de secondes entre chaque tentatives de connexions */
|
||||
connfreq 100; /* Combien de secondes entre chaque tentatives de connexions */
|
||||
};
|
||||
|
||||
/*
|
||||
* ACTUEL : allow {}
|
||||
* ANCIEN : I:Line
|
||||
* Définit les autorisations de connexions...
|
||||
* Défini les autorisations de connexions...
|
||||
* Principalement pour les clients, cela leur permet de se connecter, vous pouvez donc avoir un certain
|
||||
* contrôle et/ou mettre un mot de passe.
|
||||
* La syntaxe est la suivante :
|
||||
@@ -158,15 +155,30 @@ allow {
|
||||
maxperip 1;
|
||||
};
|
||||
|
||||
/*
|
||||
* ACTUEL : allow channel {}
|
||||
* ANCIEN : chrestrict
|
||||
* Autorise un utilisateur à joindre un salon...
|
||||
* comme une exception au deny channel.
|
||||
* Syntaxe :
|
||||
* allow channel {
|
||||
* channel "nom du salon";
|
||||
* };
|
||||
*/
|
||||
allow channel {
|
||||
channel "#WarezSucks";
|
||||
};
|
||||
|
||||
/*
|
||||
* ACTUEL : oper {}
|
||||
* ANCIEN : O:Line
|
||||
* Définit un IRC Operateur
|
||||
* Défini un IRC Operateur
|
||||
* Les IRC operateurs sont là pour préserver la qualité du serveur mais aussi d'en assurer
|
||||
* la maintenance et sa connexion au réseau.
|
||||
* La syntaxe est la suivante :
|
||||
* oper (login) {
|
||||
* class (classe à laquelle les associer, si différent du bloc allow, les déplace vers une nouvelle classe);
|
||||
* class (classe à laquelle les associer, si différent de moi, déplacez les vers une
|
||||
* nouvelle classe);
|
||||
* from {
|
||||
* userhost (ident@host);
|
||||
* userhost (ident@host);
|
||||
@@ -204,7 +216,7 @@ oper bobsmith {
|
||||
/*
|
||||
* ACTUEL : listen {}
|
||||
* ANCIEN : P:Line
|
||||
* Définit un port à rattacher à l'ircd, pour autoriser
|
||||
* Défini un port à rattacher à l'ircd, pour autoriser
|
||||
* des utilisateurs/serveurs à se connecter au serveur.
|
||||
* La syntaxe est la suivante :
|
||||
* listen (ip):(port)
|
||||
@@ -222,12 +234,12 @@ oper bobsmith {
|
||||
*/
|
||||
|
||||
/* Options de listen:
|
||||
ANCIEN | ACTUEL
|
||||
S serversonly
|
||||
C clientsonly
|
||||
J java
|
||||
s ssl
|
||||
* standard
|
||||
ANCIEN | ACTUEL
|
||||
S serversonly
|
||||
C clientsonly
|
||||
J java
|
||||
s ssl
|
||||
* standard
|
||||
*/
|
||||
|
||||
/* NOTE SUR LES PORTS SSL: les ports SSL sont plutôt non standardisés,
|
||||
@@ -236,9 +248,9 @@ oper bobsmith {
|
||||
* requière d'être root! D'un autre coté, le port 194 est le port irc officiel et
|
||||
* avez vous déjà vu un ircd fonctionner sur celui-ci ?
|
||||
* Donc, notre suggestion est d'utiliser le port 6697 pour le SSL, ceci est utilisé par
|
||||
* beaucoup de réseaux et est reconnu par exemple par StunTour.
|
||||
* assez bien de réseaux et est reconnu par exemple par StunTour.
|
||||
* Vous êtes libre d'ouvrir autant de ports SSL que vous le désirez mais
|
||||
* en utilisant (au moins) 6697 vous aidez le monde à se standardiser un peu ;).
|
||||
* en utilisant (au moins) 6697 vous aidez le monde à standardiser un peu a bit ;).
|
||||
*/
|
||||
listen *:6697
|
||||
{
|
||||
@@ -252,7 +264,7 @@ listen *:6697
|
||||
listen *:8067;
|
||||
listen *:6667;
|
||||
|
||||
/* NOTE: Si vous êtes sur un shell avec de multiples IP vous êtes
|
||||
/* NOTE: Si vous êtes sur un shell shell avec de multiples IP's vous êtes
|
||||
* susceptibles d'avoir l'erreur 'Address already in use' (adresse déjà utilisée)
|
||||
* dans vos logs et l'ircd refusera de démarer.
|
||||
* Cela signifie que vous devrez utiliser une IP spécifique au lieu de '*',
|
||||
@@ -264,14 +276,14 @@ listen *:6667;
|
||||
/*
|
||||
* ACTUEL : link {}
|
||||
* ANCIEN : C/N:Lines
|
||||
* Définit un accord pour la connexion d'un serveur.
|
||||
* Défini un accord pour la connexion d'un serveur.
|
||||
* NOTE : CHACUN DES SERVEURS NECESSITE UN PARAMETRE LINK {} POUR SE CONNECTER CORRECTEMENT !
|
||||
* La syntaxe est la suivante :
|
||||
* link (nom du serveur)
|
||||
* {
|
||||
* username (username, * fonctionne aussi);
|
||||
* hostname (ip/hostmask);
|
||||
* bind-ip (IP à laquelle se relier lors de la connexion, ou *);
|
||||
* bind-ip (Quelle IP à laquelle se relier lors de la connexion, ou *);
|
||||
* port (port auquel se connecter, si il y en a un);
|
||||
* hub (Si c'est un a hub, * fonctionne, ou les servermasks qu'il doit porter);
|
||||
* [ou leaf *;]
|
||||
@@ -281,8 +293,8 @@ listen *:6667;
|
||||
* options {
|
||||
* (options ici*);
|
||||
* };
|
||||
* // Si vous utilisez le SSL, vous pouvez choisir quel algorithme de hash utiliser dans le mode SSL
|
||||
* // Utilisez la commande "openssl ciphers" pour obtenir la liste des algorithmes disponibles, séparez les 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";
|
||||
*
|
||||
@@ -292,11 +304,11 @@ listen *:6667;
|
||||
/*
|
||||
options:
|
||||
ANCIEN | ACTUEL
|
||||
S ssl
|
||||
Z zip
|
||||
N/A autoconnect
|
||||
N/A quarantine
|
||||
N/A nodnscache
|
||||
S ssl
|
||||
Z zip
|
||||
N/A autoconnect
|
||||
N/A quarantine
|
||||
N/A nodnscache
|
||||
*/
|
||||
|
||||
|
||||
@@ -322,7 +334,7 @@ link hub.mynet.com
|
||||
* ACTUEL : ulines {}
|
||||
* ANCIEN : U:Line
|
||||
* Les U-lines donnent aux serveurs plus de pouvoir/commandes, ceci doit UNIQUEMENT être appliqué
|
||||
* aux serveurs de services/stats et JAMAIS pour des serveurs UnrealIRCd normaux !
|
||||
* aux serveurs de services/stats et JAMAIS pour des servuers UnrealIRCd normaux !
|
||||
* La syntaxe est la suivante :
|
||||
* ulines {
|
||||
* (serveur auquel appliquer la uline);
|
||||
@@ -342,7 +354,7 @@ ulines {
|
||||
* La syntaxe est la suivante :
|
||||
* drpass {
|
||||
* restart "(mot de passe pour relancer)";
|
||||
* die "(mot de passe pour arrêter)";
|
||||
* die "(mot de passe pour arrêter)";
|
||||
* };
|
||||
*/
|
||||
drpass {
|
||||
@@ -356,7 +368,7 @@ drpass {
|
||||
* Dit à l'ircd où et quoi loguer. Vous pouvez en avoir
|
||||
* autant que vous le souhaitez.
|
||||
*
|
||||
* FLAGS : errors, kills, tkl, connects, server-connects, oper
|
||||
* FLAGS : errors, kills, tkl, connects, server-connects, kline, oper
|
||||
*
|
||||
* Syntaxe :
|
||||
* log "fichier de log"
|
||||
@@ -376,6 +388,7 @@ log "ircd.log" {
|
||||
maxsize 2097152;
|
||||
flags {
|
||||
oper;
|
||||
kline;
|
||||
connects;
|
||||
server-connects;
|
||||
kills;
|
||||
@@ -442,7 +455,7 @@ alias StatServ { type stats; };
|
||||
* };
|
||||
*/
|
||||
/* Ceci est expliqué séparément car même si elle a le même nom que la directive précédente, elle est très
|
||||
* différente dans sa syntaxe, bien qu'elle a une fonction similaire et dépend des alias standards pour
|
||||
* différente dans sa syntaxe, bien que elle a une fonction similaire et dépend des alias standards pour
|
||||
* fonctionner.
|
||||
*/
|
||||
/*
|
||||
@@ -460,10 +473,10 @@ alias "identify" {
|
||||
type command;
|
||||
};
|
||||
*/
|
||||
/* La directive alias::format est une expression régulière. Le premier format correspond à la commande
|
||||
* /identify command lorsque le premier caractère est un #. Cela renvoit donc à l'alias chanserv avec
|
||||
* les paramètres IDENTIFY %1-. Le second format correspond à la commande /identify lorsque le premier
|
||||
* caractère n'est pas un #. Cela envoie alors la commande à l'alias nickserv avec les paramètres
|
||||
/* La direcitive alias::format est une expression régulière. Le premier format correspond à la commande
|
||||
* /identify command lorsque le premier caractère est un #. Cela renvois donc à l'alias chanserv avec
|
||||
* les paramètres IDENTIFY %1-. Le second format correspond à la commanden /identify lorsque le premier
|
||||
* caractère n'est pas un #. Cela envoies alors la commande à l'alias nickserv avec les paramètres
|
||||
* IDENTIFY %1-.
|
||||
*/
|
||||
|
||||
@@ -533,15 +546,15 @@ tld {
|
||||
rules "ircd.rules.fr";
|
||||
};
|
||||
|
||||
/* Note : vous pouvez juste effacer le bloc d'exemple ci-dessus,
|
||||
* auquel cas les fichiers motd/règles par défaut (ircd.motd, ircd.rules)
|
||||
/* note : vous pouvez juste effacer le bloc d'exemple ci-dessus,
|
||||
* en quel cas les fichiers motd/règles par défaut (ircd.motd, ircd.rules)
|
||||
* seront utilisés pour tout le monde.
|
||||
*/
|
||||
|
||||
/*
|
||||
* ACTUEL : ban nick {}
|
||||
* ANCIEN : Q:Line
|
||||
* Bannit un pseudo, il ne peut donc être utilisé.
|
||||
* Banni un pseudo, il ne peut donc être utilisé.
|
||||
* La syntaxe est la suivante :
|
||||
* ban nick {
|
||||
* mask "(pseudo à bannir)";
|
||||
@@ -591,7 +604,7 @@ ban server {
|
||||
|
||||
ban user {
|
||||
mask *tirc@*.saturn.bbn.com;
|
||||
reason "Idiot";
|
||||
reason "Idiot";
|
||||
};
|
||||
|
||||
/*
|
||||
@@ -628,15 +641,15 @@ ban realname {
|
||||
*/
|
||||
|
||||
except ban {
|
||||
/* ne bannit pas stskeeps */
|
||||
/* ne banni pas stskeeps */
|
||||
mask *stskeeps@212.*;
|
||||
};
|
||||
|
||||
/*
|
||||
* ACTUEL : deny dcc {}
|
||||
* ANCIEN : dccdeny.conf
|
||||
* Utilisez ceci pour bloquer l'envoi de dcc ...
|
||||
* Utile pour bloquer les virus.
|
||||
* Utilisez ceci pour bloquer l'envoie de dcc... stope
|
||||
* mieux les virus.
|
||||
* Syntaxe :
|
||||
* deny dcc
|
||||
* {
|
||||
@@ -652,8 +665,8 @@ deny dcc {
|
||||
/*
|
||||
* ACTUEL : deny channel {}
|
||||
* ANCIEN : N/A (NEW)
|
||||
* Ceci empêche des salons d'être joints.
|
||||
* Syntaxe :
|
||||
* Ceci empêche des salons d'être joins.
|
||||
* Syntax:
|
||||
* deny channel {
|
||||
* channel "(salon)";
|
||||
* reason "raison";
|
||||
@@ -664,21 +677,6 @@ deny channel {
|
||||
reason "Warez is illegal";
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
* ACTUEL : allow channel {}
|
||||
* ANCIEN : chrestrict
|
||||
* Autorise un utilisateur à joindre un salon...
|
||||
* comme une exception au deny channel.
|
||||
* Syntaxe :
|
||||
* allow channel {
|
||||
* channel "nom du salon";
|
||||
* };
|
||||
*/
|
||||
allow channel {
|
||||
channel "#WarezSucks";
|
||||
};
|
||||
|
||||
/*
|
||||
* ACTUEL : vhost {}
|
||||
* ANCIEN : Vhost.conf file
|
||||
@@ -721,8 +719,6 @@ set {
|
||||
* Les clés doivent être 3 chaînes de 5-100 caractères melangés.
|
||||
* (10-20 caractères est parfait) et elles doivent être constituées de minuscules (a-z),
|
||||
* majuscules (A-Z) et chiffres (0-9) [voir le premier exemple de clé].
|
||||
* Astuce : Sur *NIX, vous pouvez utiliser la commande './unreal gencloak' dans votre shell pour que
|
||||
* Unreal génère 3 chaînes aléatoires pour vous.
|
||||
*/
|
||||
cloak-keys {
|
||||
"aoAr1HnR6gl3sJ7hVz4Zb7x4YwpW";
|
||||
@@ -744,7 +740,7 @@ set {
|
||||
/* Configuration spécifique d'un serveur */
|
||||
|
||||
set {
|
||||
kline-address "définir.cet.email";
|
||||
kline-address "mettre.cet.email";
|
||||
modes-on-connect "+ixw";
|
||||
modes-on-oper "+xwgs";
|
||||
oper-auto-join "#opers";
|
||||
@@ -798,8 +794,8 @@ set {
|
||||
|
||||
/*
|
||||
* Problèmes ou besoin de plus d'aide ?
|
||||
* 1) http://www.unrealircd.com/files/docs/unreal32docs.fr.html
|
||||
* 2) http://www.vulnscan.org/UnrealIRCd/faq/ <- contient 80% de vos questions !
|
||||
* 3) Si vous avez encore des problèmes vous pouvez aller sur irc.unrealircd.org #unreal-support,
|
||||
* 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 !
|
||||
*/
|
||||
|
||||
+4
-3
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* example.conf Daniel Hawton avagy Osiris jóvoltából (osiris@unrealircd.org).
|
||||
* A magyar fordítást AngryWolf <angrywolf2009@gmail.com> készítette.
|
||||
* A magyar fordítást AngryWolf <angrywolf@flashmail.com> készítette.
|
||||
* $Id$
|
||||
*
|
||||
* Felhasználható Unreal3.2 és későbbi verziókhoz
|
||||
@@ -374,7 +374,7 @@ drpass {
|
||||
* Megmondja az ircd-nek, hová és mit naplózzon. Annyi naplófájlunk lehet,
|
||||
* amennyit szeretnénk.
|
||||
*
|
||||
* FLAGEK: errors, kills, tkl, connects, server-connects, oper
|
||||
* FLAGEK: errors, kills, tkl, connects, server-connects, kline, oper
|
||||
*
|
||||
* Szintaktika:
|
||||
* log "naplófájl"
|
||||
@@ -396,6 +396,7 @@ log "ircd.log" {
|
||||
maxsize 2097152;
|
||||
flags {
|
||||
oper;
|
||||
kline;
|
||||
connects;
|
||||
server-connects;
|
||||
kills;
|
||||
@@ -817,7 +818,7 @@ 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!
|
||||
* 3) Ha még mindig gondod van, felmehetsz az irc.unrealircd.org #unreal-support
|
||||
* 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!
|
||||
*/
|
||||
|
||||
+1
-1
@@ -811,6 +811,6 @@ set {
|
||||
* 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.unrealircd.org #unreal-support,
|
||||
* 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!
|
||||
*/
|
||||
+3
-2
@@ -365,7 +365,7 @@ drpass {
|
||||
* СТАРОЕ: N/A
|
||||
* Указыает ircd куда и что протоколировать (вести лог). Вы можете указать столько, сколько пожелаете.
|
||||
*
|
||||
* ФЛАГИ: errors, kills, tkl, connects, server-connects, oper
|
||||
* ФЛАГИ: errors, kills, tkl, connects, server-connects, kline, oper
|
||||
*
|
||||
* Синтаксис:
|
||||
* log "путь_к_лог_файлу"
|
||||
@@ -385,6 +385,7 @@ log "ircd.log" {
|
||||
maxsize 2097152;
|
||||
flags {
|
||||
oper;
|
||||
kline;
|
||||
connects;
|
||||
server-connects;
|
||||
kills;
|
||||
@@ -786,6 +787,6 @@ set {
|
||||
* Проблемы или нуждаетесь в более подробной информации?
|
||||
* 1) www.vulnscan.org/UnrealIRCd/unreal32docs.ru.html
|
||||
* 2) www.vulnscan.org/UnrealIRCd/faq/ <- содержит 80% ваших вопросов!
|
||||
* 3) Если у вас до сих пор остались проблемы, зайдите на irc.unrealircd.org #unreal-support,
|
||||
* 3) Если у вас до сих пор остались проблемы, зайдите на irc.ircsystems.net #unreal-support,
|
||||
* но мы требуем, чтобы вы ПРЕЖДЕ ПРОЧИТАЛИ ДОКУМЕНТАЦИЮ и ЧаВО!
|
||||
*/
|
||||
|
||||
+787
-787
File diff suppressed because it is too large
Load Diff
+459
-479
File diff suppressed because it is too large
Load Diff
+31
-63
@@ -173,60 +173,58 @@ help Chmodes {
|
||||
" a <nickname> = Даёт пользователю статус администратора канала";
|
||||
" q <nickname> = Даёт пользователю статус владельца канала";
|
||||
" -";
|
||||
" A = В канал могут попасть только администраторы сети/сервера";
|
||||
" (устанавливается администраторами)";
|
||||
" b <nick!ident@host> = Накладывает 'бан' на nick!ident@host [h]";
|
||||
" (подробнее о 'расширенных типах бана' /HELPOP EXTBANS)";
|
||||
" b <nick!ident@host> = Накладывает 'бан' на nick!ident@host";
|
||||
" также существуют 'расширенные баны' (подробнее /HELPOP EXTBANS) [h]";
|
||||
" c = Блокирует сообщения, содержащие управляющие коды mIRC для";
|
||||
" задания цвета [o]";
|
||||
" C = Запрещает хождение CTCP пакетов в канале [o]";
|
||||
" e <nick!ident@host> = Накладывает маску исключения на 'бан' для";
|
||||
" пользователей, попавших под заданную маску [h]";
|
||||
" f <параметры> = Защита от флуда. (Для получения дополнительной";
|
||||
" информации загляните в /HELPOP CHMODEF) [o]";
|
||||
" G = Включает фильтрацию сообщений путём замены нецензурных слов на";
|
||||
" <censored> [o]";
|
||||
" I <ник!пользователь@хост> = Накладывает маску исключения на режим +i";
|
||||
" i = Для того, чтобы попасть на канал, пользователь должен быть";
|
||||
" приглашён (Invite only) [h]";
|
||||
" I <ник!пользователь@хост> = Накладывает маску исключения на режим +i";
|
||||
" j <вход:секунды> = Устанавливает ограничение на количество команд";
|
||||
" join за задонное время";
|
||||
" k <ключ> = Пользователи должны иметь <ключ>, чтобы попасть на";
|
||||
" защищённый канал [h]";
|
||||
" K = Запрещает использование команды /KNOCK [o]";
|
||||
" l <число> = Задаёт максимальное <число> пользователей в канале [o]";
|
||||
" L <канал2> = Связывает каналы таким образом, что при достижении";
|
||||
" параметра, заданного режимом +l, новые пользователи";
|
||||
" будут перенаправляться на канал <канал2>) [q]";
|
||||
" m = Модерируемый канал (только пользователи с установленными флагами";
|
||||
" +vhoaq могут говорить) [h]";
|
||||
" n = Пользователи, не присутствующие в канале, не могут";
|
||||
" посылать PRIVMSGs в канал [h]";
|
||||
" p = Включает режим 'ограниченного доступа' на канал (Private) [o]";
|
||||
" r = Показывает, что канал зарегистрирован (устанавливается только";
|
||||
" сервисами)";
|
||||
" s = Включает 'режим секретности' на канале (Secret)[o]";
|
||||
" t = Блокирует топик, так что только пользователи с флагами +hoaq";
|
||||
" могут его изменить [h]";
|
||||
" z = Только пользователи, подключенные к серверу через шифрованный";
|
||||
" канал (SSL), могут попасть в канал [o]";
|
||||
" A = В канал могут попасть только администраторы сети/сервера";
|
||||
" (устанавливается администраторами)";
|
||||
" C = Запрещает хождение CTCP пакетов в канале [o]";
|
||||
" G = Включает фильтрацию сообщений путём замены нецензурных слов на";
|
||||
" <censored> [o]";
|
||||
" M = Включает ограничение на возможность говорить в канале только";
|
||||
" зарегистрированным пользователям (+r), либо пользователям с";
|
||||
" 'Правом голоса' (+v). [o]";
|
||||
" n = Пользователи, не присутствующие в канале, не могут";
|
||||
" посылать PRIVMSGs в канал [h]";
|
||||
" K = Запрещает использование команды /KNOCK [o]";
|
||||
" L <канал2> = Связывает каналы таким образом, что при достижении";
|
||||
" параметра, заданного режимом +l, новые пользователи";
|
||||
" будут перенаправляться на канал <канал2>) [q]";
|
||||
" N = Запрещает пользователям канала изменять свой ник [o]";
|
||||
" O = Канал только для IRC операторов (могут устанавливать только";
|
||||
" IRC операторы)";
|
||||
" p = Включает режим 'ограниченного доступа' на канал (Private) [o]";
|
||||
" Q = На канале запрещены 'кики' [o]";
|
||||
" r = Показывает, что канал зарегистрирован (устанавливается только";
|
||||
" сервисами)";
|
||||
" R = В канал могут войти только зарегистрированные (+r) ";
|
||||
" пользователи [o]";
|
||||
" s = Включает 'режим секретности' на канале (Secret)[o]";
|
||||
" S = Указывает, что на канале из сообщений вырезаются коды mIRC";
|
||||
" для управления цветом [o]";
|
||||
" t = Блокирует топик, так что только пользователи с флагами +hoaq";
|
||||
" могут его изменить [h]";
|
||||
" T = Указывает, что на канале запрещены уведомления (NOTICEs) [o]";
|
||||
" V = Указывает, что на канале нельзя использовать команду /INVITE [o]";
|
||||
" u = Auditorium mode (команды /names и /who #channel показывают";
|
||||
" только операторов канала) [q]";
|
||||
" V = Указывает, что на канале нельзя использовать команду /INVITE [o]";
|
||||
" z = Только пользователи, подключенные к серверу через шифрованный";
|
||||
" канал (SSL), могут попасть в канал [o]";
|
||||
" Z = Все пользователи на канале используют безопасное подключение SSL.";
|
||||
" (Устанавливается/снимается сервером. Только если канал так же +z)";
|
||||
" -";
|
||||
" [h] - минимум требуются права halfop, [o] - минимум требуются права";
|
||||
" chanop, [q] - требуются права владельца";
|
||||
@@ -234,17 +232,8 @@ help Chmodes {
|
||||
};
|
||||
|
||||
help ExtBans {
|
||||
" Данные типы банов позволяют вам банить не только по традиционной маске nick!user@host.";
|
||||
" Так же они позволяют пользователя "замолчать" (в других IRCd, это действие команды";
|
||||
" +q <hostmask>, в unrealircd надо использовать +b ~q:<hostmask>).";
|
||||
" -";
|
||||
" Вы так же можете совмещать расширенные типы банов. Это значит, что выражение будет правильным:";
|
||||
" +b ~q:~c:#lamers";
|
||||
" Этой командой вы заставите молчать всех пользователей, кто зашёл на канал #lamers.";
|
||||
" -";
|
||||
" Существуют следующие расширенные типы банов: ";
|
||||
" -";
|
||||
" Эти типы банов определяют, какие действия подвержены бану";
|
||||
" ==-Тип---------Имя----------------------------Разъяснение-----------------------==";
|
||||
" | | Люди, попадающие под бан, могут заходить на канал, но ";
|
||||
" ~q | Тихий | не могут говорить, пока у них не будет +v или выше. ";
|
||||
@@ -256,13 +245,6 @@ help ExtBans {
|
||||
" | смену ника | Пример: ";
|
||||
" | | +bb ~n:*!*@*.aol.com ~n:nick*!*@* ";
|
||||
"-----------------------------------------------------------------------------------";
|
||||
" | | Люди, попадающие под бан, не могут посетить канал. ";
|
||||
" ~j | Вход | При этом пользователь может выполнять все действия, если";
|
||||
" | | он уже находится на канале (смена ника, разговор). ";
|
||||
"-----------------------------------------------------------------------------------";
|
||||
" -";
|
||||
" Эти типы банов добавляют новый критерий, с которыми их можно использовать";
|
||||
" ==-Тип---------Имя----------------------------Разъяснение-----------------------==";
|
||||
" | | Если люди сидят на указанном канале, они не смогут зайти";
|
||||
" | | Префиксом можно указать (+/%/@/&/~), каких именно ";
|
||||
" ~c | [префикс] | пользователей необходимо банить. Будут забанены те, у ";
|
||||
@@ -273,18 +255,7 @@ help ExtBans {
|
||||
" ~r | настоящее имя | он не сможет зайти. Пример: +b ~r:*Stupid_bot_script* ";
|
||||
" | | Дополнение: Подчёркивание ('_') обозначает и ";
|
||||
" | | пробел (' '), и подчёркивание ('_'). ";
|
||||
"-----------------------------------------------------------------------------------";
|
||||
" | | Бан срабатывает, если пользователь идентифицирован ";
|
||||
" ~R | | на сервисах (обычно Nickserv) и имя совпадает. В ";
|
||||
" |зарегестрирован| реальности необходим для исключений на канале. ";
|
||||
" | | Пример: +e ~R:Nick ";
|
||||
" | | Позволяет Nick находится на канале, независимо от банов,";
|
||||
" | | если он идентифицирован на сервисах, использует ник Nick";
|
||||
" ==------------------------------------------------------------------------------==";
|
||||
" -";
|
||||
" Вы можете стекировать расширенные типы банов первой и второй группы друг с другом.";
|
||||
" Пример: +b ~q:~c:#lamers";
|
||||
" Действием данной команды будет молчание всех пользователей, кто сидит в #lamers";
|
||||
};
|
||||
|
||||
help Chmodef {
|
||||
@@ -1007,23 +978,20 @@ help Rehash {
|
||||
" Заставляет сервер перечитать файл конфигурации.";
|
||||
" Доступна для использования только IRC операторам.";
|
||||
" -";
|
||||
" Синтаксис: REHASH <имя сервера> -<флаг>";
|
||||
" REHASH -global <флаг>";
|
||||
" REHASH -<флаг>";
|
||||
" Синтаксис: REHASH <имя сервера> -<флаги>";
|
||||
" REHASH -<флаги>";
|
||||
" -";
|
||||
" Если не указано имя сервера и флаг, сервер перечитает unrealircd.conf,";
|
||||
" а так же все файлы MOTD, BOTMOTD, OPERMOTD и RULES.";
|
||||
" Если не указано имя сервера и флаги, сервер перечитает unrealircd.conf";
|
||||
" с удалением всех временных k:lines.";
|
||||
" Если указано имя сервера, команда подействует на указанный сервер.";
|
||||
" Если указан -global, то все сервера в сети перечитают настройки";
|
||||
" Только администратор сети может указывать имя сервера и -global.";
|
||||
" Только администратор сети может указывать имя сервера.";
|
||||
" -";
|
||||
" Указание флагов позволяет перечитать другие конфигурационные файлы." ;
|
||||
" Список флагов:";
|
||||
" -dns - Переинециализация и перезагрузка преобразования адресов";
|
||||
" -motd - Перечитает файлы MOTD и RULES (включая tld{})";
|
||||
" -opermotd - Перечитает OPERMOTD";
|
||||
" -botmotd - Перечитает BOTMOTD";
|
||||
" -garbage - Активирует \"сборщик мусора\"";
|
||||
" -motd - Перечитает все файлы MOTD, BOTMOTD, OPERMOTD и RULES (включая tld{})";
|
||||
" -ssl - Перезагрузка сертификатов SSL";
|
||||
|
||||
};
|
||||
|
||||
help Restart {
|
||||
|
||||
+125
-153
@@ -6,7 +6,7 @@
|
||||
* Unreal3.2 ve üzeri versionları kapsanmıştır. 8/24/02 (Beta12)
|
||||
*
|
||||
* Türkçe Çeviri: Diablo - (Serkan Sepetçi)
|
||||
* İletişim: diablo@unrealircd.org
|
||||
* İletişim: diablo@unrealircd.org - http://www.ircforumlari.net/
|
||||
*/
|
||||
|
||||
help {
|
||||
@@ -116,7 +116,7 @@ help Umodes {
|
||||
" B = Bot statüsündeki kullanıcı";
|
||||
" G = Badwords bloğunda belirtilen kötü kelimeler kullanıldığında sansürlenir.";
|
||||
" H = IRCOp statüsüne sahipseniz /whois /who sorgusunda bu statünüz görünmez.(Sadece IRCop)";
|
||||
" R = Sadece rumuzu kayitli (+r) olan kullanıcılardan mesaj almanızı sağlar";
|
||||
" R = Sadece nicki kayitli (+r) olan kullanıcılardan mesaj almanızı sağlar";
|
||||
" S = Servisler için koruma modu";
|
||||
" T = CTCP metinlerinin size gönderimini engeller";
|
||||
" V = Kullanıcının WebTV kullandığını belirtir";
|
||||
@@ -161,50 +161,45 @@ help Chmodes {
|
||||
" a <nick> = Koruma(a) almış kullanıcı.";
|
||||
" q <nick> = Kanal sahibi(q) almış kullanıcı.";
|
||||
" -";
|
||||
" A = Sadece Server/Net Adminlerinin girebileceği bir kanal.";
|
||||
" b <nick!ident@host> = Belirtilen maske kanalda yasaklanır. [h]";
|
||||
" c = Kanal icerisinde renk kullanımı engeller [o]";
|
||||
" C = CTCP metinlerini engeller. [o]";
|
||||
" e <nick!ident@host> = Belirtilen maske kanalda yasaklı (ban) listesinde olsa dahi kanala girebilir. [h]";
|
||||
" f <parametre> = Kanal flood koruma modu. (Bilgi için /HELPOP CHMODEF) [o]";
|
||||
" b <nick!ident@host> = Belirtilen maske kanalda yasaklanır.";
|
||||
" Detaylı ban çeşitleri (daha çok bilgi için /HELPOP EXTBANS) [h]";
|
||||
" G = Yasak kelimelerin sansür edildiği bir kanal. [o]";
|
||||
" i = Sadece davetle girilebilen kanal. [h]";
|
||||
" c = Kanal icerisinde renk kullanımı engeller [o]";
|
||||
" e <nick!ident@host> = Belirtilen maske kanalda yasaklı (ban) listesinde olsa dahi kanala girebilir. [h]";
|
||||
" I <nick!ident@host> = Belirtilen maskeye sahip olan kullanıcılar, kanal +i modunda olsa dahi kanala girebilirler. [h]";
|
||||
" f <parametre> = Kanal flood koruma modu. (Bilgi için /HELPOP CHMODEF) [o]";
|
||||
" i = Sadece davetle girilebilen kanal. [h]";
|
||||
" j <giriş:saniye> = Belirtilen saniyede bir kanala giriş yapılmasını sağlar. [o]";
|
||||
" k <Şifre> = Kanala giriş icin gereken anahtar. [h]";
|
||||
" K = /KNOCK komutuna izin verilmeyen bir kanal. [o]";
|
||||
" l <max kullanıcılar sayısı> = Kanala girebilicek olan maximum kullanıcı sayısını belirler. [o]";
|
||||
" L <Kanal2> = Kanal linkleme. (Eğer +l kişi ile kanal doldurulursa, sonraki kullanıcı otomatik olarak <kanal2> ye girer. [q]";
|
||||
" m = Sadece +vhoaq modeleri almış kullanıcıların konuşabileceği bir kanal. [h]";
|
||||
" M = Sadece kayıtlı (+r) veya voice'si olan (+v) kullanıcıların yazabileceği bir kanal. [o]";
|
||||
" n = Kanalda bulunmayan birinden gelecek mesajların bloklandığı bir kanal. [h]";
|
||||
" p = Özel bir kanal olduğunu belirtir. [o]";
|
||||
" r = Kayıt edilmiş bir kanal. (Sadece Servisler tarafından kullanılır.)";
|
||||
" s = Gizli bir kanal. [o]";
|
||||
" t = Sadece +hoaq modeleri almış kullanıcıların /topic komutunu kullanabileceği bir kanal. [h]";
|
||||
" z = Sadece Güvenli Bağlanti (SSL) kullananların erişim sağlayabileceği bir kanal. [o]";
|
||||
" A = Sadece Server/Net Adminlerinin girebileceği bir kanal.";
|
||||
" C = CTCP metinlerini engeller. [o]";
|
||||
" G = Yasak kelimelerin sansür edildiği bir kanal. [o]";
|
||||
" M = Sadece kayıtlı (+r) veya voice'si olan (+v) kullanıcıların yazabileceği bir kanal. [o]";
|
||||
" K = /KNOCK komutuna izin verilmeyen bir kanal. [o]";
|
||||
" L <Kanal2> = Kanal linkleme. (Eğer +l kişi ile kanal doldurulursa, sonraki kullanıcı otomatik olarak <kanal2> ye girer. [q]";
|
||||
" N = Nick değişikliği yapılamayan bir kanal. [o]";
|
||||
" O = Sadece IRCopların girebileceği bir kanal. (sadece IRCop'lar için)";
|
||||
" p = Özel bir kanal olduğunu belirtir. [o]";
|
||||
" Q = KICK Komutunun uygulanamayacağı bir kanal. [o]";
|
||||
" r = Kayıt edilmiş bir kanal. (Sadece Servisler tarafından kullanılır.)";
|
||||
" R = Sadece kayıtlı (+r) kullanıcıların girebileceği bir kanal. [o]";
|
||||
" s = Gizli bir kanal. [o]";
|
||||
" S = Renkli yazıların, renkli kodlardan arındırıp kanala gönderilmesini sağlar. [o]";
|
||||
" t = Sadece +hoaq modeleri almış kullanıcıların /topic komutunu kullanabileceği bir kanal. [h]";
|
||||
" T = Noticenin komutunun kullanilamayacagi kanal. [o]";
|
||||
" u = Kanal operatorlerinin modelerinin gizli oldugu bir kanal.(sadece op'lar /names ve /who #kanal komutunu kullanabilir.) [q]";
|
||||
" V = /INVITE 'in kapali oldugu kanal. [o]";
|
||||
" z = Sadece Güvenli Bağlanti (SSL) kullananların erişim sağlayabileceği bir kanal. [o]";
|
||||
" Z = Kanal üzerindeki tüm kullanıcıları güvenli bağlantı olarak varsayar. (SSL) [server]";
|
||||
" (Bu mode sadece sunucu tarafından açılır/kapanır. Kanal modu +z olmayan kanallar hariç)";
|
||||
" u = Kanal operatorlerinin modelerinin gizli oldugu bir kanal. (sadece op'lar /names ve /who #kanal komutunu kullanabilir.) [q]";
|
||||
" -";
|
||||
" [h] Halfop, [o] Kanal Operator, [q] Kanal Sahibi";
|
||||
" ==------------------------------oOo----------------------------==";
|
||||
};
|
||||
|
||||
help ExtBans {
|
||||
" Bu banlar, temel alınan geleneksel banlardan başka sana nick!user@host maskesi";
|
||||
" olarak izin verir. Bu banlar hemde kullanıcılar için ``Quieting'' desteği sağlar.";
|
||||
" (diğer IRCd'lerde +q <hostmask>, UnrealIRCd ise +b ~q:<hostmask> yapabilirsin).";
|
||||
" Detaylı ban çeşitleri: ";
|
||||
" -";
|
||||
" Bu ban tipleri, hangi hareketlerin bir ban ile etkilendiğini belirtir:";
|
||||
" ==-Tip--------İsim-----------------------------Açıklama-------------------------==";
|
||||
" | | Kullanıcı kanala girebilir fakat yazı yazamaz, ";
|
||||
" ~q | Quiet | yazabilmesi için +v veya daha yükseği gerekmektedir. ";
|
||||
@@ -216,17 +211,9 @@ help ExtBans {
|
||||
" | | Örnek: ";
|
||||
" | | +bb ~n:*!*@*.aol.com ~n:nick*!*@* ";
|
||||
"-----------------------------------------------------------------------------------";
|
||||
" | | Eğer bir kullanıcı, bu banla eşleşiyorsa kanala giremez.";
|
||||
" ~j | join | Eğer kanal içerisinde ise, tüm faaliyetleri yapabilir. ";
|
||||
" | | Kanal içerisinde konuşabilme ve nick değiştirme gibi. ";
|
||||
" | | Örnek: +bb ~j:*!*@*.aol.com ~j:nick*!*@* ";
|
||||
"-----------------------------------------------------------------------------------";
|
||||
" -";
|
||||
" Bu ban tipleri kullanılabilen yeni kriterleri gösterir:";
|
||||
" ==-Tip--------İsim------------------------------Açıklama------------------------==";
|
||||
" | | Eğer kullanıcı bu kanalda olduğunda diğer kanallara ";
|
||||
" | [Önek] | giriş yapamaz. Öneki (+/%/@/&/~) olan kullanıcılar ";
|
||||
" ~c | channel | veya daha üst yetkilere sahip olan kullanıcılar kanala ";
|
||||
" | [prefix] | giriş yapamaz. Öneki (+/%/@/&/~) olan kullanıcılar ";
|
||||
" ~c | channel | veya daha üst yetkilere sahip olan kullanıcılar kanala ";
|
||||
" | | giriş yapacaklardır. ";
|
||||
" | | Örnek: +b ~c:#lamers, +e ~c:@#trusted ";
|
||||
"-----------------------------------------------------------------------------------";
|
||||
@@ -236,19 +223,7 @@ help ExtBans {
|
||||
" | | NOT: ('_') Karakteri (' ') karakterine denk gelir ve ";
|
||||
" | | dolayısı ile ('_') karekteri, bu ban ";
|
||||
" | | 'Stupid bot script v1.4' ile eşleşir. ";
|
||||
"-----------------------------------------------------------------------------------";
|
||||
" | | Eğer bir kullanıcı kendini servislere tanıtmışsa ";
|
||||
" | | (Genellikle NickServ) ve nicki eşleşiyorsa bu ban da ";
|
||||
" | | eşleşir. Yani bu ban ceşidi yalnızca ban yollarında ";
|
||||
" ~R | registered | geçerlidir (+e). Örnek: +e ~R:Nick ";
|
||||
" | | Nick veya rumuzlu kullanıcının diğer banlarına ";
|
||||
" | | bakılmaksızın eğer kendini NickServ'e tanıtmışsa ";
|
||||
" | | kanalda bulunmasına izin verir. ";
|
||||
" ==------------------------------------------------------------------------------==";
|
||||
" -";
|
||||
" Sen 1. gruptan olan banları 2. bir grupa yönlendirebilirsin.";
|
||||
" Örnek: +b ~q:~c:#lamers";
|
||||
" Yukardaki yapılan ban, 'Quiet' olan bütün kullanıcıları #lamers kanalına girmelerini sağlayacaktır.";
|
||||
};
|
||||
|
||||
help Chmodef {
|
||||
@@ -417,7 +392,7 @@ help Dns {
|
||||
help Names {
|
||||
" Belirtilen kanalda kullanıcıların listesini gösterir.";
|
||||
" -";
|
||||
" Kullanımı: NAMES <kanal>";
|
||||
" Kullanımı: NAMES <kanal>";
|
||||
" Örnek: NAMES #Support";
|
||||
};
|
||||
|
||||
@@ -425,8 +400,8 @@ help Ison {
|
||||
" Bu komut, bir kullanıcı yada kullanıcıların online";
|
||||
" olup olmadığını gösterir.";
|
||||
" -";
|
||||
" Kullanımı: ISON <nick> <nick2> <nick3> <nick4>";
|
||||
" Örnek: ISON hAtbLaDe Stskeeps OperServ AOLBot";
|
||||
" Kullanımı: ISON <nick> <nick2> <nick3> <nick4>";
|
||||
" Örnek: ISON hAtbLaDe Stskeeps OperServ AOLBot";
|
||||
};
|
||||
|
||||
help Join {
|
||||
@@ -484,7 +459,7 @@ help Quit {
|
||||
" senin serverdan ayrılışından haberdar olacaklardır.";
|
||||
" Eğer sen, bir çıkış sebebi belirtmezsen, senin nickin sebeb olur.";
|
||||
" -";
|
||||
" Kullanımı: QUIT <sebeb>";
|
||||
" Kullanımı: QUIT <sebeb>";
|
||||
" Örnek: QUIT Leaving!";
|
||||
};
|
||||
|
||||
@@ -497,7 +472,7 @@ help Ping {
|
||||
" PING mesajı yollanabilir bağlantı aktifse bile.";
|
||||
" Bunun 'CTCP PING' komutundan farklı olduğunu unutmayınız..";
|
||||
" -";
|
||||
" Kullanımı: PING <server> <server2>";
|
||||
" Kullanımı: PING <server> <server2>";
|
||||
" Örnek: PING irc.fyremoon.net";
|
||||
" PING hAtbLaDe";
|
||||
" PING hAtbLaDe irc2.dynam.ac";
|
||||
@@ -509,7 +484,7 @@ help Pong {
|
||||
" parametre, mesaj ses çıkarmaya yanıt veren";
|
||||
" ve bu mesajı oluşturan varlığın ismidir.";
|
||||
" -";
|
||||
" Kullanımı: PONG <server> <server2>";
|
||||
" Kullanımı: PONG <server> <server2>";
|
||||
" Örnek: PONG irc.fyremoon.net irc2.dynam.ac";
|
||||
" (irc.fyremoon.net irc2.dynam.ac giden pong mesajı)";
|
||||
};
|
||||
@@ -548,7 +523,7 @@ help Userhost {
|
||||
" Bir kullanıcının USERHOST satırını gösterir.";
|
||||
" Genellikle metinler veya botlar ile kullanılır.";
|
||||
" -";
|
||||
" Kullanımı: USERHOST <nick>";
|
||||
" Kullanımı: USERHOST <nick>";
|
||||
" Örnek: USERHOST hAtbLaDe";
|
||||
};
|
||||
|
||||
@@ -564,8 +539,8 @@ help Topic {
|
||||
" Kanalın başlığını değiştirmeyi sağlar veya metin belirtilmez ise";
|
||||
" sadece önceden belirtilmiş güncel konuyu gösterir.";
|
||||
" -";
|
||||
" Kullanımı: TOPIC <kanal> (başlığı gösterir.)";
|
||||
" TOPIC <kanal> <metin> (başlığı değiştirir.)";
|
||||
" Kullanımı: TOPIC <kanal> (başlığı gösterir.)";
|
||||
" TOPIC <kanal> <metin> (başlığı değiştirir.)";
|
||||
" Örnek: TOPIC #Operhelp";
|
||||
" TOPIC #Lobby Hoşgeldiniz #Lobby!!";
|
||||
};
|
||||
@@ -576,7 +551,7 @@ help Invite {
|
||||
" Parametresiz kullanılan invite komutu ile hangi kanalların davet listesinde";
|
||||
" olduğunu görebilirsiniz.";
|
||||
" -";
|
||||
" Kullanımı: INVITE [<nick> <kanal>]";
|
||||
" Kullanımı: INVITE [<nick> <kanal>]";
|
||||
" Örnek: INVITE hAtbLaDe #Support";
|
||||
" Örnek: INVITE";
|
||||
};
|
||||
@@ -585,15 +560,15 @@ help Kick {
|
||||
" Kullanıcı yada Kullanıcıları kanaldan atmaya yarar.";
|
||||
" Sadece, operatörler veya HalfOp'lar tarafından kullanılabilir.";
|
||||
" -";
|
||||
" Kullanımı: KICK <kanal> <nick> <sebeb>";
|
||||
" Kullanımı: KICK <kanal> <nick> <sebeb>";
|
||||
" Örnek: KICK #Lobby foobar Lamer..";
|
||||
};
|
||||
|
||||
help Away {
|
||||
" Bir sebeb belirttiğinizde sizi \"Away\", yani meşgul olarak gösterir.";
|
||||
" -";
|
||||
" Kullanımı: AWAY <sebeb> (belirtilen nedenden dolayı sizi away(meşgul) yapar.)";
|
||||
" AWAY (Awaydan çıkartır.)";
|
||||
" Kullanımı: AWAY <sebeb> (belirtilen nedenden dolayı sizi away(meşgul) yapar.)";
|
||||
" AWAY (Awaydan çıkartır.)";
|
||||
" Örnek: AWAY Öğle yemeği zamanı!";
|
||||
};
|
||||
|
||||
@@ -615,9 +590,9 @@ help List {
|
||||
" Eğer bir arama maskesi, belirtilirse sadece ona denk,";
|
||||
" uyan maskedeki kanalları listeleyecekdir.";
|
||||
" -";
|
||||
" Kullanımı: LIST <maske>";
|
||||
" Örnek: LIST";
|
||||
" LIST *ircd*";
|
||||
" Kullanımı: LIST <maske>";
|
||||
" Örnek: LIST";
|
||||
" LIST *ircd*";
|
||||
" -";
|
||||
" Bazı ekstra desteklenen flaglar.";
|
||||
" sayı içerisinde belirttiğiniz <sayıdan> fazla kullanıcısı olan kanalları listeler.";
|
||||
@@ -685,8 +660,8 @@ help Knock {
|
||||
" Davetsel olan kanallar için, sadece sen \"Knock\" olan bir";
|
||||
" Kanalda rica etmek için, bir davetsel mesaj gönderirsin.";
|
||||
" -";
|
||||
" Kullanımı: KNOCK <kanal> <mesaj>";
|
||||
" Örnek: KNOCK #davetsel_kanal Ben opum, beni davet et!";
|
||||
" Kullanımı: KNOCK <kanal> <mesaj>";
|
||||
" Örnek: KNOCK #davetsel_kanal Ben opum, beni davet et!";
|
||||
};
|
||||
|
||||
help Setname {
|
||||
@@ -700,7 +675,7 @@ help Vhost {
|
||||
" Gerçek hostadını sanal host adı ile değiştirmeye yarar.";
|
||||
" IRC Serverlerinde uygulanır SETHOST komutu ile uygulanır.";
|
||||
" -";
|
||||
" Kullanımı: VHOST <giriş> <şifre>";
|
||||
" Kullanımı: VHOST <giriş> <şifre>";
|
||||
" Örnek: VHOST openbsd ilovecypto";
|
||||
};
|
||||
|
||||
@@ -708,7 +683,7 @@ help Mode {
|
||||
" Bir kanal veya nickin modesini değiştirir.";
|
||||
" Bilgi için /HELPOP CHMODES veya /HELPOP UMODES yazarak modeleri listeleyebilirsiniz.";
|
||||
" -";
|
||||
" Kullanımı: MODE <kanal/nick> <mode>";
|
||||
" Kullanımı: MODE <kanal/nick> <mode>";
|
||||
" Örnek: MODE #Support +tn";
|
||||
" MODE #Support +ootn hAtbLaDe XYZ";
|
||||
};
|
||||
@@ -770,35 +745,35 @@ help Globops {
|
||||
" Serverda bütün IRCops'lar global bir mesaj yollayabilir.";
|
||||
" (Sadece IRCops'lar tarafından sadece görülebilir).";
|
||||
" -";
|
||||
" Kullanımı: GLOBOPS <mesaj>";
|
||||
" Kullanımı: GLOBOPS <mesaj>";
|
||||
" Örnek: GLOBOPS Kloneleri almaya izin ver ..";
|
||||
};
|
||||
|
||||
help Locops {
|
||||
" Bu komut, serverda bütün IRCop'lara bir mesaj yollamasını sağlar. (Yerel).";
|
||||
" -";
|
||||
" Kullanımı: LOCOPS <mesaj>";
|
||||
" Kullanımı: LOCOPS <mesaj>";
|
||||
" Örnek: LOCOPS Gonna kullanıcısına k:line atın ...";
|
||||
};
|
||||
|
||||
help Chatops {
|
||||
" Sadece yerel serverda bulunan IRCop'lara mesaj gönderilmesini sağlar. (Global).";
|
||||
" -";
|
||||
" Kullanımı: CHATOPS <mesaj>";
|
||||
" Örnek: CHATOPS Gonna kullanıcısına k:line atın ...";
|
||||
" Kullanımı: CHATOPS <mesaj>";
|
||||
" Örnek: Gonna kullanıcısına k:line atın ...";
|
||||
};
|
||||
|
||||
help Adchat {
|
||||
" Online olan bütün Admin'lere mesaj gönderilmesini sağlar.";
|
||||
" -";
|
||||
" Kullanımı: ADCHAT <mesaj>";
|
||||
" Kullanımı: ADCHAT <mesaj>";
|
||||
" Örnek: ADCHAT Hey millet! Ben buradayım.";
|
||||
};
|
||||
|
||||
help Nachat {
|
||||
" Online olan bütün Network Admin'lere mesaj gönderilmesini sağlar.";
|
||||
" -";
|
||||
" Kullanımı: NACHAT <mesaj>";
|
||||
" Kullanımı: NACHAT <mesaj>";
|
||||
" Örnek: NACHAT Hey millet! Her şey nasıl?";
|
||||
};
|
||||
|
||||
@@ -806,8 +781,8 @@ help Kill {
|
||||
" Belirtilen Kullanıcıları IRC serverda bağlantısını kesmek için kullanılan bir komuttur.";
|
||||
" Sadece IRCop'lar kullanabilir.";
|
||||
" -";
|
||||
" Kullanımı: KILL <nick1>,<nick2>,<nick3>,... <sebeb>";
|
||||
" Örnek: KILL Jack16 Clone yasak!";
|
||||
" Kullanımı: KILL <nick1>,<nick2>,<nick3>,... <sebeb>";
|
||||
" Örnek: KILL Jack16 Clone yasak!";
|
||||
};
|
||||
|
||||
help Kline {
|
||||
@@ -832,11 +807,11 @@ help Zline {
|
||||
" Ayrıca zaman dilimini 1d10h15m30s gibi formatlarda düzenlenebilir.";
|
||||
" Sadece IRCop'lar kullanabilir.";
|
||||
" -";
|
||||
" Kullanımı: ZLINE <*@ipmaskesi> [süre] <sebeb> (Zline ekler.)";
|
||||
" ZLINE -<*@ipmaskesi> (Zline siler.)";
|
||||
" Örnek: ZLINE *@127.0.0.1 - Kötü kullanım (Süresiz Zline ekler.)";
|
||||
" ZLINE *@127.0.0.1 2d Kötü kullanım (2 günlük Zline ekler.)";
|
||||
" ZLINE -*@127.0.0.1";
|
||||
" Kullanımı: ZLINE <*@ipmaskesi> [süre] <sebeb> (Zline ekler.)";
|
||||
" ZLINE -<*@ipmaskesi> (Zline siler.)";
|
||||
" Örnek: ZLINE *@127.0.0.1 - Kötü kullanım (Süresiz Zline ekler.)";
|
||||
" ZLINE *@127.0.0.1 2d Kötü kullanım (2 günlük Zline ekler.)";
|
||||
" ZLINE -*@127.0.0.1";
|
||||
" NOT: ZLINE atabilme flağına sahip olmaniz gerekir. (can_zline)";
|
||||
};
|
||||
|
||||
@@ -847,7 +822,7 @@ help Gline {
|
||||
" Ayrıca zaman dilimini 1d10h15m30s gibi formatlarda düzenlenebilir.";
|
||||
" Sadece IRCop'lar kullanabilir.";
|
||||
" -";
|
||||
" Kullanımı: GLINE <kullanıcı@hostmaskesi yada nick> [süre] <sebeb>";
|
||||
" Kullanımı: GLINE <kullanıcı@hostmaskesi yada nick> [süre] <sebeb>";
|
||||
" (kullanıcı@hostmaskesi) kısmına Gline ekler.)";
|
||||
" GLINE -<kullanıcı@hostmaskesi> (Gline siler.)";
|
||||
" Örnek: GLINE *@*.idiot.net 900 Boş mesaj (15 dk Gline ekler)";
|
||||
@@ -882,12 +857,12 @@ help Gzline {
|
||||
" Ayrıca zaman dilimini 1d10h15m30s gibi formatlarda düzenlenebilir.";
|
||||
" Sadece IRCop'lar kullanabilir.";
|
||||
" -";
|
||||
" Kullanımı: GZLINE <*@ipmaske> <sure> :<sebeb>";
|
||||
" (Global Z:line ekler.)";
|
||||
" GZLINE -<*@ipmaske> (Global Z:line'i siler.)";
|
||||
" Kullanımı: GZLINE <*@ipmaske> <sure> :<sebeb>";
|
||||
" (Global Z:line ekler.)";
|
||||
" GZLINE -<*@ipmaske> (Global Z:line'i siler.)";
|
||||
" Örnek: GZLINE *@4.16.200.* 900 Boş mesaj (15 dk Global Z:line ekler.)";
|
||||
" GZLINE *@4.16.200.* 1d5h Boş mesaj (29 saat Global Z:line ekler.)";
|
||||
" NOT: Gzline atabilme flağına sahip olmanız gerekir. (can_gzline)";
|
||||
" NOT: Gzline atabilme flağına sahip olmanız gerekir. (can_gzline)";
|
||||
};
|
||||
|
||||
help Akill {
|
||||
@@ -895,8 +870,8 @@ help Akill {
|
||||
" o *@hostmaskesi'ne ait hiçbir kullanıcı servera bağlanamaz.";
|
||||
" Bu bir DEPRICATED komutudur, ve sadece U:Lines (Servisler)'den eklenir..";
|
||||
" -";
|
||||
" Kullanımı: AKILL <kullanıcı@hostmaskesi> :<sebeb>";
|
||||
" Örnek: AKILL foo@aol.com :Boş mesaj!";
|
||||
" Kullanımı: AKILL <kullanıcı@hostmaskesi> :<sebeb>";
|
||||
" Örnek: AKILL foo@aol.com :Boş mesaj!";
|
||||
};
|
||||
|
||||
help Rakill {
|
||||
@@ -910,22 +885,19 @@ help Rehash {
|
||||
" Yerel bir serverın konfigurasyon dosya(larını) yeniden okumasını sağlar";
|
||||
" Sadece IRCop'lar kullanabilir.";
|
||||
" -";
|
||||
" Kullanımı: REHASH <serverismi> [flag]";
|
||||
" REHASH -global [flag]";
|
||||
" REHASH [flag]";
|
||||
" Kullanımı: REHASH <server> -<flag>";
|
||||
" REHASH -<flag>";
|
||||
" -";
|
||||
" Eğer server ismi ve flag, belirtilmezse,";
|
||||
" unrealircd.conf ve tüm MOTD, BOTMOTD, OPERMOTD ve RULES dosyalarını yeniden okumasını sağlar.";
|
||||
" Eğer server ismi ve flaglar, belirtilmezse,";
|
||||
" unrealircd.conf ve k:lines dosyası tekrar kullanır.";
|
||||
" Eğer server ismi belirtilirse, server ismi config dosyalarını tekrar kullanmak için kullanılır.";
|
||||
" Eğer -global belirtilirse, ağ üzerindeki tüm sunucuların config dosyaları yeniden okunmasını sağlar.";
|
||||
" Sadece NetAdmin'ler bir server ismi ve -global belirtebilir.";
|
||||
" Sadece NetAdmin'ler bir server ismini belirtebilir.";
|
||||
" -";
|
||||
" Flaglar, diğer config dosyalarını tekrar kullanmak için kullanılır, aşağıdakiler geçerli flaglardır:";
|
||||
" -dns - Yeniden başlatır ve yeniden yükler, çözümler";
|
||||
" -garbage - Değersiz dataların toplanmasını sağlar";
|
||||
" -motd - Tüm MOTD, BOTMOTD, OPERMOTD ve RULES dosyalarını tekrar okumasını sağlar";
|
||||
" (tld{}'de onlar dahil bloklar)";
|
||||
" -ssl - SSL Sertifikaları yeniden okur";
|
||||
" -motd - Günün Mesajı ve Kurallar dosyasını yeniler.";
|
||||
" -opermotd - Opermotd dosyasını yeniler.";
|
||||
" -botmotd - Botmotd dosyasını yeniler.";
|
||||
" -garbage - Cop toplaması yapar.";
|
||||
};
|
||||
|
||||
help Restart {
|
||||
@@ -960,23 +932,23 @@ help Sethost {
|
||||
" Özel karakterler kullanılabilinir.";
|
||||
" Sadece IRCop'lar kullanabilir.";
|
||||
" -";
|
||||
" Kullanımı: SETHOST <yeni host>";
|
||||
" Örnek: SETHOST i.have.hairy.armpits";
|
||||
" Kullanımı: SETHOST <yeni host>";
|
||||
" Örnek: SETHOST i.have.hairy.armpits";
|
||||
};
|
||||
|
||||
help Setident {
|
||||
" Bu komutla, kendinin veya bir kullanıcının Identini değiştirmesini sağlar. (Username.)";
|
||||
" Sadece IRCop'lar kullanabilir.";
|
||||
" -";
|
||||
" Kullanımı: SETIDENT <yeni ident>";
|
||||
" Örnek: SETIDENT l33t";
|
||||
" Kullanımı: SETIDENT <yeni ident>";
|
||||
" Örnek: SETIDENT l33t";
|
||||
};
|
||||
|
||||
help Chghost {
|
||||
" Güncel olarak IRC Serverda bir kullanıcının hostname kısmını değiştirmeyi sağlar.";
|
||||
" Sadece IRCop'lar kullanabilir.";
|
||||
" -";
|
||||
" Kullanımı: CHGHOST <nick> <hostismi>";
|
||||
" Kullanımı: CHGHOST <nick> <hostismi>";
|
||||
" Örnek: CHGHOST hAtbLaDe root.me.com";
|
||||
};
|
||||
|
||||
@@ -984,7 +956,7 @@ help Chgident {
|
||||
" Güncel olarak IRC Serverda bir kullanıcının IDENT kısmını değiştirmesini sağlar.";
|
||||
" Sadece IRCop'lar kullanabilir.";
|
||||
" -";
|
||||
" Kullanımı: CHGIDENT <nick> <ident>";
|
||||
" Kullanımı: CHGIDENT <nick> <ident>";
|
||||
" Örnek: CHGIDENT hAtbLaDe Koyun";
|
||||
};
|
||||
|
||||
@@ -992,7 +964,7 @@ help Chgname {
|
||||
" Güncel olarak IRC Serverda bir kullanıcının \"IRC Name\" veya \"Real Name\" kısmını değiştirmeye yarar.";
|
||||
" Sadece IRCop'lar kullanabilir.";
|
||||
" -";
|
||||
" Kullanımı: CHGNAME <nick> <isim>";
|
||||
" Kullanımı: CHGNAME <nick> <isim>";
|
||||
" Örnek: CHGNAME hAtbLaDe Gotta yeni isim :)";
|
||||
};
|
||||
|
||||
@@ -1001,8 +973,8 @@ help Squit {
|
||||
" Genellikle serverların yönlendirmelerden çıkması için kullanılır.";
|
||||
" Sadece IRCop'lar kullanabilir.";
|
||||
" -";
|
||||
" Kullanımı: SQUIT <server>";
|
||||
" Örnek: SQUIT leaf.*";
|
||||
" Kullanımı: SQUIT <server>";
|
||||
" Örnek: SQUIT leaf.*";
|
||||
};
|
||||
|
||||
help Connect {
|
||||
@@ -1010,10 +982,10 @@ help Connect {
|
||||
" Uzak bağlantılarda, mümkün olabilir.";
|
||||
" Sadece IRCop'lar kullanabilir.";
|
||||
" -";
|
||||
" Kullanımı: CONNECT <server> [port]";
|
||||
" CONNECT <server> <port> <ana server>";
|
||||
" Örnek: CONNECT leaf.*";
|
||||
" CONNECT leaf.* 6667 hub.*";
|
||||
" Kullanımı: CONNECT <server> [port]";
|
||||
" CONNECT <server> <port> <ana server>";
|
||||
" Örnek: CONNECT leaf.*";
|
||||
" CONNECT leaf.* 6667 hub.*";
|
||||
};
|
||||
|
||||
help Dccdeny {
|
||||
@@ -1035,7 +1007,7 @@ help Sajoin {
|
||||
" Bir kullanıcıyı, zorla kanal yada kanallara girmesini sağlar.";
|
||||
" Sadece Servis Adminler'ler kullanabilir.";
|
||||
" -";
|
||||
" Kullanımı: SAJOIN <nick> <kanal>,[<kanal2>]";
|
||||
" Kullanımı: SAJOIN <nick> <kanal>,[<kanal2>]";
|
||||
" Örnek: SAJOIN hAtbLaDe #OperHelp";
|
||||
" SAJOIN hAtbLaDe #Support,#IRCHelp";
|
||||
};
|
||||
@@ -1044,7 +1016,7 @@ help Sapart {
|
||||
" Bir kullanıcıyı, zorla kanal yada kanallardan çıkmasını sağlar.";
|
||||
" Sadece Servis Admin'ler kullanabilir.";
|
||||
" -";
|
||||
" Kullanımı: SAPART <nick> <kanal>,[<kanal2>] [<sebeb>]";
|
||||
" Kullanımı: SAPART <nick> <kanal>,[<kanal2>] [<sebeb>]";
|
||||
" Örnek: SAPART hAtbLaDe #OperHelp";
|
||||
" SAPART hAtbLaDe #Support,#IRCHelp";
|
||||
" SAPART hAtbLaDe #Support,#IRCHelp Hoşcakal";
|
||||
@@ -1055,8 +1027,8 @@ help Samode {
|
||||
" modesini değiştirmenizi sağlar.";
|
||||
" Sadece Servis Admin'ler kullanabilir.";
|
||||
" -";
|
||||
" Kullanımı: SAMODE <kanal> <mode>";
|
||||
" Örnek: SAMODE #Support +m";
|
||||
" Kullanımı: SAMODE <kanal> <mode>";
|
||||
" Örnek: SAMODE #Support +m";
|
||||
};
|
||||
|
||||
help Rping {
|
||||
@@ -1071,7 +1043,7 @@ help Trace {
|
||||
" Server için uygularsanız size class,version ve link bilgisini gösterir.";
|
||||
" TRACE Komutu bazı zamanlarda karışabilir özellikle ilk defa kullanıyorsanız.";
|
||||
" -";
|
||||
" Kullanımı: TRACE <server|nick>";
|
||||
" Kullanımı: TRACE <server|nick>";
|
||||
" Örnek: TRACE irc.fyremoon.net";
|
||||
};
|
||||
|
||||
@@ -1087,8 +1059,8 @@ help Sdesc {
|
||||
" SQUIT ve RESTART edilmesine gerek kalmaz.";
|
||||
" Sadece Server Admin ve Co Admin'ler kullanabilir.";
|
||||
" -";
|
||||
" Kullanımı: SDESC <yeni bilgi>";
|
||||
" Örnek: SDESC Yüksekten uç";
|
||||
" Kullanımı: SDESC <yeni bilgi>";
|
||||
" Örnek: SDESC Yüksekten uç";
|
||||
};
|
||||
|
||||
help Mkpasswd {
|
||||
@@ -1099,7 +1071,7 @@ help Mkpasswd {
|
||||
" Windows: crypt [*], md5, sha1, ripemd160 [*]";
|
||||
" [*: Sadece, eğer SSL desteğiyle derlenirse müsait olur]";
|
||||
" -";
|
||||
" Kullanımı: MKPASSWD <metod> <şifre>";
|
||||
" Kullanımı: MKPASSWD <metod> <şifre>";
|
||||
" Örnek: MKPASSWD md5 IamTeh1337";
|
||||
};
|
||||
|
||||
@@ -1126,7 +1098,7 @@ help Close {
|
||||
" Bu komut, IRC serverından bütün bilinmeyen";
|
||||
" bağlantılarınızı kesmenizi sağlar.";
|
||||
" -";
|
||||
" Kullanımı: CLOSE";
|
||||
" Kullanımı: CLOSE";
|
||||
};
|
||||
|
||||
help Tsctl {
|
||||
@@ -1160,7 +1132,7 @@ help Svsnick {
|
||||
" Bu komut, bir kullanıcının o an kullandığı nickin başka bir nicke dönüştürmesini sağlar.";
|
||||
" Sadece U:Lined (Servisler)'den gönderilebilir.";
|
||||
" -";
|
||||
" Kullanımı: SVSNICK <nick> <yeni nick> <süre>";
|
||||
" Kullanımı: SVSNICK <nick> <yeni nick> <süre>";
|
||||
" Örnek: SVSNICK hAtbLaDe Foobar 963086432";
|
||||
};
|
||||
|
||||
@@ -1168,7 +1140,7 @@ help Svsmode {
|
||||
" Bu komut, bir kullanıcının o an kullandığı modelerini değiştirmesini sağlar.";
|
||||
" Sadece U:Lined (Servisler)'den gönderilebilir.";
|
||||
" -";
|
||||
" Kullanımı: SVSMODE <nick> <mode>";
|
||||
" Kullanımı: SVSMODE <nick> <mode>";
|
||||
" Örnek: SVSMODE hAtbLaDe +i";
|
||||
};
|
||||
|
||||
@@ -1176,7 +1148,7 @@ help Svskill {
|
||||
" Bu komut, bir kullanıcının IRC serverındaki bağlantısının zorla kopmasını sağlar.";
|
||||
" Sadece U:Lined (Servisler)'den gönderilebilir.";
|
||||
" -";
|
||||
" Kullanımı: SVSKILL <nick> :<sebeb>";
|
||||
" Kullanımı: SVSKILL <nick> :<sebeb>";
|
||||
" Örnek: SVSKILL Lamer21 :Güle Güle";
|
||||
};
|
||||
|
||||
@@ -1185,7 +1157,7 @@ help Svsnoop {
|
||||
" komutlarını iptal eder veya aktif eder.";
|
||||
" Sadece U:Lined (Servisler)'den gönderilebilir.";
|
||||
" -";
|
||||
" Kullanımı: SVSNOOP <server> <+/->";
|
||||
" Kullanımı: SVSNOOP <server> <+/->";
|
||||
" Örnek: SVSNOOP leaf.* -";
|
||||
};
|
||||
|
||||
@@ -1193,7 +1165,7 @@ help Svsjoin {
|
||||
" Bu komut, bir kullanıcının kanal yada kanallara zorla girmesini sağlar.";
|
||||
" Sadece U:Lined (Servisler)'den gönderilebilir.";
|
||||
" -";
|
||||
" Kullanımı: SVSJOIN <nick> <kanal>[,<kanal2>..] [şifre[,şifre2[..]]]";
|
||||
" Kullanımı: SVSJOIN <nick> <kanal>[,<kanal2>..] [şifre[,şifre2[..]]]";
|
||||
" Örnek: SVSJOIN hAtbLaDe #jail";
|
||||
" SVSJOIN hAtbLaDe #jail,#zoo";
|
||||
};
|
||||
@@ -1202,7 +1174,7 @@ help Svspart {
|
||||
" Bu komut, bir kullanıcının kanal yada kanallardan zorla çıkmasını sağlar.";
|
||||
" Sadece U:Lined (Servisler)'den gönderilebilir.";
|
||||
" -";
|
||||
" Kullanımı: SVSPART <nick> <kanal>[,<kanal2>..] [<yorum>]";
|
||||
" Kullanımı: SVSPART <nick> <kanal>[,<kanal2>..] [<yorum>]";
|
||||
" Örnek: SVSPART hAtbLaDe #Hanson";
|
||||
" SVSPART hAtbLaDe #Hanson,#AOL";
|
||||
" SVSPART hAtbLaDe #Hanson,#AOL Sen çıkmalısın";
|
||||
@@ -1213,8 +1185,8 @@ help Svso {
|
||||
" Svsmode +o ve benzeri komutları hatırlayınız.";
|
||||
" Sadece U:Lined (Servisler)'den gönderilebilir.";
|
||||
" -";
|
||||
" Kullanımı: SVSO <nick> <+oper-flagları> (OPER flagları ekler.)";
|
||||
" SVSO <nick> - (O:Line flaglarını siler.)";
|
||||
" Kullanımı: SVSO <nick> <+oper-flagları> (OPER flagları ekler.)";
|
||||
" SVSO <nick> - (O:Line flaglarını siler.)";
|
||||
" Örnek: SVSO SomeNick +bBkK";
|
||||
};
|
||||
|
||||
@@ -1222,8 +1194,8 @@ help Swhois {
|
||||
" Bu komut, bir kullanıcının whois bilgisini değiştirmeyi sağlar.";
|
||||
" Sadece U:Lined (Servisler)'den gönderilebilir.";
|
||||
" -";
|
||||
" Kullanımı: SWHOIS <nick> :<mesaj> (Swhois ekler.)";
|
||||
" SWHOIS <nick> : (Swhois'i temizler.)";
|
||||
" Kullanımı: SWHOIS <nick> :<mesaj> (Swhois ekler.)";
|
||||
" SWHOIS <nick> : (Swhois'i temizler.)";
|
||||
" Örnek: SWHOIS SomeNick :is a lamer";
|
||||
};
|
||||
|
||||
@@ -1231,7 +1203,7 @@ help Sqline {
|
||||
" Bu komut, nick veya nick karakterlerini kullanan kullanıcıları yasaklamasını sağlar.";
|
||||
" Sadece U:Lined (Servisler)'den gönderilebilir.";
|
||||
" -";
|
||||
" Kullanımı: SQLINE <nick> :<sebeb>";
|
||||
" Kullanımı: SQLINE <nick> :<sebeb>";
|
||||
" Örnek: SQLINE *Bot* :Botlara Hayır";
|
||||
};
|
||||
|
||||
@@ -1239,7 +1211,7 @@ help Unsqline {
|
||||
" Bu komut, kullanımı yasaklanmış olan nick veya nick karekterlerinin yeniden kullanılmasını sağlar.";
|
||||
" Sadece U:Lined (Servisler)'den gönderilebilir.";
|
||||
" -";
|
||||
" Kullanımı: UNSQLINE <nick>";
|
||||
" Kullanımı: UNSQLINE <nick>";
|
||||
" Örnek: UNSQLINE *Bot*";
|
||||
};
|
||||
|
||||
@@ -1247,7 +1219,7 @@ help Svs2mode {
|
||||
" Bu komut, bir kullanıcının modelerini zorla değiştirmeyi sağlar.";
|
||||
" Sadece U:Lined (Servisler)'den gönderilebilir.";
|
||||
" -";
|
||||
" Kullanımı: SVS2MODE <nick> <kullanıcı modesi>";
|
||||
" Kullanımı: SVS2MODE <nick> <kullanıcı modesi>";
|
||||
" Örnek: SVS2MODE hAtbLaDe +h";
|
||||
};
|
||||
|
||||
@@ -1263,10 +1235,10 @@ help Svsfline {
|
||||
help Svsmotd {
|
||||
" Günün Servisler mesajını ekler veya siler.";
|
||||
" Sadece U:Lined (Servisler)'den gönderilebilir.";
|
||||
" Kullanımı: SVSMOTD # :<mesaj> (Svsmotd ekler.)";
|
||||
" SVSMOTD ! (Motd siler.)";
|
||||
" SVSMOTD ! :<mesaj> (bulunan mesaji silip, yenisini ekler.)";
|
||||
" Örnek: SVSMOTD # :Services MOTD";
|
||||
" Kullanımı: SVSMOTD # :<mesaj> (Svsmotd ekler.)";
|
||||
" SVSMOTD ! (Motd siler.)";
|
||||
" SVSMOTD ! :<mesaj> (bulunan mesaji silip, yenisini ekler.)";
|
||||
" Örnek: SVSMOTD # :Services MOTD";
|
||||
};
|
||||
|
||||
help Svsnline {
|
||||
@@ -1276,10 +1248,10 @@ help Svsnline {
|
||||
" Kelime aralarında boşluk yerine _, kullanılmalıdır. Unreal otomatik olarak";
|
||||
" boşluk karaterine çevirecektir.";
|
||||
" -";
|
||||
" Kullanımı: SVSNLINE +/- <ban_sebebi> :<isim> (ban ekler.)";
|
||||
" SVSNLINE - :<isim> (eklenmiş bir banı kaldırır.)";
|
||||
" SVSNLINE * (eklenmiş tüm banları kaldırır.)";
|
||||
" Örnek: SVSNLINE + sub7_drone :*sub7*";
|
||||
" Kullanımı: SVSNLINE +/- <ban_sebebi> :<isim> (ban ekler.)";
|
||||
" SVSNLINE - :<isim> (eklenmiş bir banı kaldırır.)";
|
||||
" SVSNLINE * (eklenmiş tüm banları kaldırır.)";
|
||||
" Örnek: SVSNLINE + sub7_drone :*sub7*";
|
||||
};
|
||||
|
||||
help Svslusers {
|
||||
@@ -1287,15 +1259,15 @@ help Svslusers {
|
||||
" Eğer -1 değeri belirtilirse, varolan değerler saklanır/korunur.";
|
||||
" Sadece U:Lined (Servisler)'den gönderilebilir.";
|
||||
" -";
|
||||
" Kullanımı: SVSLUSERS <server> <globalmax|-1> <localmax|-1>";
|
||||
" Örnek: SVSLUSERS irc.test.com -1 200";
|
||||
" Kullanımı: SVSLUSERS <server> <globalmax|-1> <localmax|-1>";
|
||||
" Örnek: SVSLUSERS irc.test.com -1 200";
|
||||
};
|
||||
|
||||
help Svswatch {
|
||||
" Bir kullanıcının, WATCH listesini değiştirmeyi sağlar.";
|
||||
" Sadece U:Lined (Servis'den) gönderilebilir.";
|
||||
" Kullanımı: SVSWATCH <nick> :<watch parametresi>";
|
||||
" Örnek: SVSWATCH Blah :+Blih!*@* +Bluh!*@* +Bleh!*@*.com";
|
||||
" Örnek: SVSWATCH Blah :+Blih!*@* +Bluh!*@* +Bleh!*@*.com";
|
||||
};
|
||||
|
||||
help Svssilence {
|
||||
@@ -1311,7 +1283,7 @@ help Svssno {
|
||||
" Bu komut, bir kullanıcının snomasklarını değiştirmesini sağlar.";
|
||||
" Sadece U:Lined (Servisler)'den gönderilebilir.";
|
||||
" -";
|
||||
" Kullanımı: SVSSNO <nick> <snomasklar>";
|
||||
" Kullanımı: SVSSNO <nick> <snomasklar>";
|
||||
" Örnek: SVSSNO joe +Gc";
|
||||
};
|
||||
|
||||
@@ -1320,7 +1292,7 @@ help Svs2sno {
|
||||
" değiştirmesini sağlar.";
|
||||
" Sadece U:Lined (Servisler)'den gönderilebilir.";
|
||||
" -";
|
||||
" Kullanımı: SVS2SNO <nick> <snomasklar>";
|
||||
" Kullanımı: SVS2SNO <nick> <snomasklar>";
|
||||
" Örnek: SVS2SNO joe +Gc";
|
||||
};
|
||||
|
||||
@@ -1328,14 +1300,14 @@ help Svsnolag {
|
||||
" Bir kullanıcı için 'sahte gecikmeme' olanağı sağlar.";
|
||||
" Sadece U:Lined (Servisler)'den gönderilebilir.";
|
||||
" -";
|
||||
" Syntax: SVSNOLAG [+|-] <nickname>";
|
||||
" Syntax: SVSNOLAG [+|-] <nickname>";
|
||||
" Example: SVSNOLAG + joe";
|
||||
};
|
||||
help Svs2nolag {
|
||||
" Bir kullanıcı için 'sahte gecikmeme' olanağı sağlar.";
|
||||
" Sadece U:Lined (Servisler)'den gönderilebilir.";
|
||||
" -";
|
||||
" Kullanım: SVS2NOLAG [+|-] <nickname>";
|
||||
" Kullanım: SVS2NOLAG [+|-] <nickname>";
|
||||
" Örnek: SVS2NOLAG + joe";
|
||||
};
|
||||
|
||||
@@ -1376,7 +1348,7 @@ help Tempshun {
|
||||
" Geçici SHUN ekler/kaldırır.Geçici shun listesine eklenen nick";
|
||||
" Eğer serverdan çıkarsa otomatik olarak listeden silinir.";
|
||||
" -";
|
||||
" Kullanımı: TEMPSHUN [+|-]<nick> [sebeb]";
|
||||
" Kullanımı: TEMPSHUN [+|-]<nick> [sebeb]";
|
||||
" Örnek: TEMPSHUN evilguy Rahatsızlık vermeyiniz!";
|
||||
" TEMPSHUN -niceguy";
|
||||
};
|
||||
@@ -1391,14 +1363,14 @@ help DccAllow {
|
||||
help Addmotd {
|
||||
" MOTD sonuna yeni bir dizin ekler.";
|
||||
" -";
|
||||
" Kullanımı: ADDMOTD <yazı>";
|
||||
" Kullanımı: ADDMOTD <yazı>";
|
||||
" Örnek: ADDMOTD Güzel oyna!";
|
||||
};
|
||||
|
||||
help Addomotd {
|
||||
" OPERMOTD sonuna yeni bir dizin ekler.";
|
||||
" -";
|
||||
" Kullanımı: ADDOMOTD <yazı>";
|
||||
" Örnek: ADDOMOTD Onu kötü kullan ve onu kaybet!";
|
||||
" Kullanımı: ADDOMOTD <yazı>";
|
||||
" Örnek: ADDOMOTD Onu kötüye kullanır ve onu kaybeder!";
|
||||
};
|
||||
|
||||
|
||||
@@ -139,18 +139,3 @@ NICKCHARS This specifies a list of language characters that are allowed in n
|
||||
The items in the list sent as NICKCHARS=.. must always be sorted.
|
||||
If a server sends NICKCHARS= and if the remote parameters do not match the
|
||||
charsets in use locally, then the server link is rejected.
|
||||
|
||||
CHANMODES Like CHANMODES from the 005 numeric. Useful to see which channel modes are
|
||||
supported/used, and can also be used to properly eat parameters in parameter
|
||||
modes in the MODE command (for eg: +jk 1:1 a).
|
||||
|
||||
EAUTH Early Authorization. This makes it possible for servers to authenticate each
|
||||
other before the regular SERVER command. Needs to be done prior to using the
|
||||
SERVERS token, and possibly other tokens or commands in the future. Hence,
|
||||
is recommended to be sent as first (or early) PROTOCTL token. Note also that
|
||||
the PASS command should be sent prior to this PROTOCTL token.
|
||||
EAUTH=my.server.name[,options]
|
||||
|
||||
SERVERS Informs the other server about the other servers (numerics) on this network
|
||||
(including our own numeric).
|
||||
Syntax: SERVERS=numeric1,numeric2,numeric3,etc
|
||||
|
||||
+465
-467
@@ -1,467 +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).
|
||||
It is currently slightly out of date, as the current protocol is 2310, but that should not matter much.</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>2310 - Unreal 3.2.9</li>
|
||||
<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 "Client connecting" or "Client exiting" 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 "Link bla bla bla is now synched" 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: &)</h2>
|
||||
<p><b>Syntax (nick change):</b> <tt>:<i>oldnick</i> & <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>& <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>& <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>& <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>& <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>& <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 & 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 "quiet" 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>&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 &, ban exceptions prefixed with ", and invite exceptions with '. Note that when a &, " 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> "Larger" key (as defined by strcmp) is preferred (for example, +k moo versus +k meow : +k moo wins).</li>
|
||||
<li><b>Channel Link:</b> "Larger" 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 <-- 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 "SAPart:".</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 "*** Notice (or other leader here) -- from blah:" 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 "*** Notice (or other leader here) -- from blah:" 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 "digit" 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 "digit" in the base64 encoded IP corresponds to 6 bits of the IP address.</p>
|
||||
<p>An IPv4 address is 32 bits, so 6 base64 "digits" are needed. Since base64 requires values to come in multiples of 4 "digits", 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 "digits" 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>
|
||||
<!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 "Client connecting" or "Client exiting" 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 "Link bla bla bla is now synched" 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: &)</h2>
|
||||
<p><b>Syntax (nick change):</b> <tt>:<i>oldnick</i> & <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>& <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>& <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>& <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>& <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>& <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 & 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 "quiet" 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>&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 &, ban exceptions prefixed with ", and invite exceptions with '. Note that when a &, " 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> "Larger" key (as defined by strcmp) is preferred (for example, +k moo versus +k meow : +k moo wins).</li>
|
||||
<li><b>Channel Link:</b> "Larger" 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 <-- 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 "SAPart:".</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 "*** Notice (or other leader here) -- from blah:" 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 "*** Notice (or other leader here) -- from blah:" 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 "digit" 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 "digit" in the base64 encoded IP corresponds to 6 bits of the IP address.</p>
|
||||
<p>An IPv4 address is 32 bits, so 6 base64 "digits" are needed. Since base64 requires values to come in multiples of 4 "digits", 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 "digits" 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>
|
||||
|
||||
@@ -2,7 +2,6 @@ VL Information (c) 2002 codemastr (Dominick Meglio) [codemastr@unrealircd.com]
|
||||
|
||||
Protocol Version
|
||||
------------------------------------------------------------------------------------------------
|
||||
2310 3.2.9
|
||||
2309 3.2.6, 3.2.7, 3.2.8
|
||||
2308 3.2.5
|
||||
2307 3.2.4
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
==[ Translations ]===========================================================
|
||||
==[ Translations ]============================================================
|
||||
|
||||
Starting with the release of Unreal 3.2 we have begun accepting translated
|
||||
documentation files. For now, only translations of unreal32docs.html and
|
||||
@@ -42,4 +42,4 @@ to translate to.. You will then receive an email back saying you can
|
||||
go ahead (or not). This is mainly to avoid multiple persons working
|
||||
on the same translation.
|
||||
|
||||
=============================================================================
|
||||
==============================================================================
|
||||
|
||||
+21
-57
@@ -29,13 +29,13 @@
|
||||
|
||||
<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.9-RC2</font><br>
|
||||
<b>Letztes Update dieses Handbuchs:</b> 2009-12-24</div>
|
||||
<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> LowDigit / Orginalübersetzung: stylus740<br>
|
||||
<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 @
|
||||
<a href="http://www.vulnscan.org/UnrealIRCd/unreal32docs.html">http://www.vulnscan.org/UnrealIRCd/unreal32docs.html</a>
|
||||
@@ -116,7 +116,6 @@ Konfigurationsdatei</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>
|
||||
---4.38. <a href="#filesblock">Files Block</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>
|
||||
@@ -158,13 +157,11 @@ werden. – Copyright UnrealIRCd Development Team 2002-2006</p>
|
||||
<p>Bitte lesen Sie diese Anleitung, bevor Sie um Hilfe bitten und schauen Sie
|
||||
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.unrealircd.org
|
||||
(Port 6667) im Channel #unreal-support
|
||||
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 <a href="#faq">
|
||||
FAQ</a> gelesen wurden und wir helfen nur zu UnrealIRCd, nicht zu Services!).
|
||||
Ebenso können Sie das Forum nutzen, welches über <a href="http://forums.unrealircd.com/" target="_blank">http://forums.unrealircd.com</a>
|
||||
erreichbar ist. Im Falle eines echten Bugs (z.B. einem Crash) bitte Nachricht an
|
||||
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 – Anmerkungen zu Upgrade/Mixing 3.1.x -> 3.2</a> </b></font><br>
|
||||
@@ -1955,7 +1952,7 @@ in verschiedenen Dateien zu loggen.</p>
|
||||
tkl</p>
|
||||
</td>
|
||||
<td width="484">
|
||||
<p>zeichnet Infos auf über *lines (kline, zline etc), shuns und Spamfilter (setzen, löschen,
|
||||
<p>zeichnet Infos auf über *lines, shuns und Spamfilter (setzen, löschen,
|
||||
Ablauf)</p>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -1978,6 +1975,14 @@ Ablauf)</p>
|
||||
</tr>
|
||||
<tr>
|
||||
<td width="113">
|
||||
<p>
|
||||
kline</p>
|
||||
</td>
|
||||
<td width="484"><p>Zeichnet Infos /kline auf</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td width="113">
|
||||
<p>
|
||||
oper</p>
|
||||
</td>
|
||||
@@ -2022,6 +2027,7 @@ spamfilter
|
||||
errors;
|
||||
kills;
|
||||
oper;
|
||||
kline;
|
||||
tkl;
|
||||
};
|
||||
};
|
||||
@@ -2714,7 +2720,7 @@ weggelassen werden. <b> alias::type</b> gibt den Typ des Alias an, g
|
||||
Typen sind hier "services" (der User ist auf dem Services Server),
|
||||
"stats" (der User ist auf dem Stats Server) "normal" (der
|
||||
User ist normaler User auf irgendeinem Server) und "channel" (das Ziel
|
||||
ist ein Channel Name). Wenn <b>alias::spamfilter</b> (optional) auf 'yes'
|
||||
ist ein Channel Name). Wenn <b>alias::spampfilter</b> (optional) auf 'yes'
|
||||
eingestellt ist, werden auch Spamfilter geprüft (Default ist 'no'). Der "alias block" hat
|
||||
auch einen weiteren nachfolgend erklärten Zweck.</p>
|
||||
<p>Syntax [Befehl alias]:
|
||||
@@ -2988,7 +2994,7 @@ anwenden k
|
||||
<p><font class="set">set::level-on-join <op|none></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. Default ist Op.</p>
|
||||
gegeben werden soll.</p>
|
||||
<p><font class="set">set::restrict-channelmodes <modes></font><br>
|
||||
Die Channel-Modi, die User wählen können werden auf die hier angegebenen Modi
|
||||
eingeschränkt. (kein + oder - angeben!).<br>
|
||||
@@ -3203,9 +3209,6 @@ Verbietet Verbindungen von Usern mit selbst erstellten Zertifikaten.</p>
|
||||
<p><font class="set">set::ssl::options::verify-certificate;</font><br>
|
||||
Stellt ein, dass Unreal SSL Zertifikate auf Gültigkeit überprüft, bevor
|
||||
eine Verbindung akzeptiert wird.</p>
|
||||
<p><font class="set">set::ssl::options::no-starttls;</font><br>
|
||||
Deaktiviert STARTTLS. STARTTLS ermöglicht es Clients, über reguläere (nicht
|
||||
SSL) Ports zu verbinden.</p>
|
||||
<p><font class="set">set::throttle::period <timevalue></font><br>
|
||||
Wie lange muss ein User zum erneuten Connecten warten, wenn er häufiger, als
|
||||
unter 'set::throttle::connections' eingestellt, verbunden war.</p>
|
||||
@@ -3301,53 +3304,14 @@ benutzen, wenn es beim Verbinden Probleme gibt. Voreingestellt ist 'no'.</
|
||||
<p><font class="set">set::watch-away-notification <yes|no></font><br>
|
||||
Ermöglicht eine AWAY Meldung in WATCH. Der Default is yes.</p>
|
||||
</div>
|
||||
<p><font class="block_section"><a name="filesblock">4.38 - Files Block</a> </font><font class="block_optional" size="3">OPTIONAL</font>
|
||||
</p>
|
||||
<p>Es ist nicht nötig, für die Default Speicherorte der MOTD und Rules Dateien
|
||||
einen <a href="#tldblock">TLD block</a> zu definieren. Der Files Block steuert
|
||||
die Default Einstellungen für diese Dateien und zusätzlich für die pidfile und
|
||||
irc.tune file. Für alles, was hier nicht angegeben ist, wird der Defaultwert
|
||||
genommen, wie er in <a href="#addtlfiles">Additional Files</a> steht.</p>
|
||||
<p>Relative Pfadnamen werden als relativ zum unrealIRCD Startverzeichnis
|
||||
interpretiert, in dem normalerweise auch die <tt>unrealircd.conf</tt> steht.
|
||||
Dieser Block kan dazu benutzt werden, mehr als einen IRCd im gleichen
|
||||
Verzeichnis laufen zu lassen. In diesem Fall sollten mindestens verschiedene
|
||||
pidfiles und tunefiles definiert werden - eines für jeden Server.</p>
|
||||
<p>Syntax:<br>
|
||||
</p>
|
||||
<pre>files {
|
||||
motd <motd file>;
|
||||
shortmotd <short motd file>;
|
||||
opermotd <oper motd file>;
|
||||
svsmotd <services motd file>;
|
||||
botmotd <bot motd file>;
|
||||
|
||||
rules <rules file>;
|
||||
|
||||
tunefile <tune file>;
|
||||
pidfile <pid file>;
|
||||
};
|
||||
</pre>
|
||||
<p> </p>
|
||||
<p>Beispiel:<br>
|
||||
</p>
|
||||
<pre>files {
|
||||
motd /etc/motd;
|
||||
|
||||
pidfile /var/lib/run/unrealircd.pid;
|
||||
};
|
||||
</pre>
|
||||
<p>
|
||||
</p>
|
||||
<p><b><font size="+2"><a name="addtlfiles">5 – 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
|
||||
Namen dieser dateien und ihr Verwendungszweck.<br>
|
||||
Zu beachten ist, dass die motd Dateien (alle Typen) und die rules Dateien auch
|
||||
in einem speziellen <a href="#tldblock"> tld Block </a>oder einem <a href="#filesblock">files
|
||||
Block</a> angegeben sein können. Dies sind nur die
|
||||
in einem speziellen tld Block angegeben sein können. Dies sind nur die
|
||||
Dateien, die per Default benutzt werden (und für Anforderungen von
|
||||
MOTD/RULES).<br>
|
||||
MOTD/RULES).
|
||||
<table width="83%" border="1">
|
||||
<tr>
|
||||
<td>ircd.motd</td><td>Wird angezeigt, wenn der /motd Befehl ausgeführt wird
|
||||
@@ -4448,7 +4412,7 @@ Datei</a></b></font></p>
|
||||
<p>
|
||||
<br>
|
||||
Eines allerdings sollte man tun: IMMER DIE NEUESTE VERSION BENUTZEN. Wenn man
|
||||
sich in die <a href="http://lists.sourceforge.net/mailman/listinfo/unreal-notify" target="_blank"> Unreal-notify mailinglist</a> einträgt, erhält man die Ankündigung
|
||||
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
|
||||
über neue Versionen (unreal-notify ist nur für Ankündigungen und man
|
||||
erhält nur alle X Monate 1 Mail). Üblicherweise gibt es neue Releases, wenn
|
||||
es (bedeutende) Sicherheits Fixes gibt, aber eigentlich ist es gut, in jedem
|
||||
|
||||
@@ -31,7 +31,7 @@ Spanish |
|
||||
<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">Versión: 3.2.9-RC2</font><br>
|
||||
<font size="4">Versión: 3.2.8</font><br>
|
||||
<b>Última actualización del documento:</b> 22-12-2006</div>
|
||||
<br>
|
||||
<b>Programadores:</b> Stskeeps / codemastr / Syzop / Luke<br>
|
||||
@@ -149,7 +149,7 @@ Spanish |
|
||||
modificación alguna. – Copyright Equipo de Desarrollo UnrealIRCd 2002-2006</p>
|
||||
<p>Por favor lea este manual antes de solicitar ayuda, el 80% de las dudas más frecuentes están en una
|
||||
<a href="http://www.vulnscan.org/UnrealIRCd/faq/" target="_blank">FAQ</a>. Si todavía requiere ayuda,
|
||||
puede encontrarla en irc.unrealircd.org (puerto 6667) canal #unreal-support (nota:
|
||||
puede encontrarla en irc.ircsystems.net (puerto 6667) canal #unreal-support (nota:
|
||||
le pedimos que sean dudas relacionadas con UnrealIRCd, no con servicios).
|
||||
Si ha encontrado un error (como un bloqueo del programa) notifíquelo en
|
||||
<a href="http://bugs.unrealircd.org" TARGET="_blank">http://bugs.unrealircd.org</a>.</p>
|
||||
|
||||
+3252
-4696
File diff suppressed because it is too large
Load Diff
+4414
-4414
File diff suppressed because it is too large
Load Diff
+108
-325
@@ -12,8 +12,7 @@
|
||||
.block_old { font-size: 14; }
|
||||
.set { font-weight: bold; }
|
||||
.desc { margin-left: 15px; }
|
||||
.inline_pre { font-family: monospace; font-style: normal; background-color: #eeeeee;}
|
||||
pre { font-family: monospace; font-style: normal; background-color: #eeeeee;}
|
||||
pre { font: "times new roman"; font-style: normal; background-color: #eeeeee;}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
@@ -32,19 +31,25 @@ English |
|
||||
<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.9-RC2</font><br>
|
||||
<b>Last doc update:</b> 2010-11-15</div>
|
||||
<font size="4">Version: 3.2.8</font><br>
|
||||
<b>Last doc update:</b> 2009-01-03</div>
|
||||
<br>
|
||||
<b>Head coder/maintainer:</b> Syzop<br>
|
||||
<b>Coders:</b> binki<br>
|
||||
<b>Previous coders & contributors:</b> Stskeeps, codemastr, Luke, aquanight,
|
||||
WolfSage, McSkaf, Zogg, NiQuiL, assyrian, chasm, DrBin, llthangel,
|
||||
Griever, nighthawk<br>
|
||||
<b>Documentation:</b> CKnight^ (initial documentation), Syzop (major rewrite), codemastr, and many contributors<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>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>
|
||||
<li>Opera 6.02
|
||||
<li>Microsoft Internet Explorer 6.X / 5.5
|
||||
<li>Netscape Navigator 6.X
|
||||
<li>Mozilla 1.2.X
|
||||
<li>Lynx (to a point)
|
||||
</ul>
|
||||
</p>
|
||||
<p><font size="+2"><b>INDEX / TABLE OF CONTENTS</b></font><br>
|
||||
1. <a href="#IntroductionNotes">Introduction & Notes</a><br>
|
||||
---1.1. <a href="#notesonolder">Notes on upgrading/mixing 3.1.x -> 3.2</a><br>
|
||||
@@ -109,7 +114,6 @@ English |
|
||||
---4.35. <a href="#spamfilter">Spamfilter Block</a><br>
|
||||
---4.36. <a href="#cgiirc">Cgiirc Block</a><br>
|
||||
---4.37. <a href="#setblock">Set Block -=- (networks/unrealircd.conf)</a><br>
|
||||
---4.38. <a href="#filesblock">Files Block</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>
|
||||
@@ -123,9 +127,7 @@ English |
|
||||
---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 />
|
||||
10. <a href="#modules">Modules</a><br />
|
||||
---10.1. <a href="#modules_m_nopost">m_nopost</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>
|
||||
@@ -147,9 +149,8 @@ English |
|
||||
modified in anyway. – 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
|
||||
need help you can ask for support at irc.unrealircd.org (port 6667) channel #unreal-support (note
|
||||
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!).
|
||||
You can also use the forums located at <a href="http://forums.unrealircd.com/" TARGET="_blank">http://forums.unrealircd.com</a>.
|
||||
If you have a real bug (like a crash) then report it at
|
||||
<a href="http://bugs.unrealircd.org" TARGET="_blank">http://bugs.unrealircd.org</a>.</p></div>
|
||||
|
||||
@@ -255,7 +256,7 @@ because otherwise you will not understand concepts such as 'cloaking', 'snomasks
|
||||
<p>UnrealIRCd supports modules which is nice because:<br>
|
||||
- You can load/reload/unload them while the ircd is running (by /rehash). This allows some bugs to be fixed or new features to be added without requiring a restart!<br>
|
||||
- Other people can create (3rd party) modules with new commands, usermodes and even channelmodes.<br>
|
||||
UnrealIRCd only comes with a few <a href="#modules">modules</a>. Take a look at www.unrealircd.com -> modules
|
||||
UnrealIRCd only comes with a few modules. Take a look at www.unrealircd.com -> modules
|
||||
or use google to find 3rd party modules.<br>
|
||||
<p>You need to load at least 2 modules or else you won't be able to boot!:<br>
|
||||
- the commands module: commands.so (commands.dll on windows)<br>
|
||||
@@ -306,8 +307,8 @@ because otherwise you will not understand concepts such as 'cloaking', 'snomasks
|
||||
so <i>/helpop</i> becomes <i>/helpop ?</i> and
|
||||
<i>/helpop chmodes</i> becomes <i>/helpop ?chmodes</i> etc..</p></div>
|
||||
|
||||
<p id="feature_operaccesslevels"><font size="+2"><b>3.6 - Oper access levels</b></font></p><div class="desc">
|
||||
<p>There are several <a href="#operblock_flags">oper levels</a> in UnrealIRCd and you can add additional rights (like to use /gline) to
|
||||
<p><font size="+2"><b>3.6 - Oper access levels</b></font><a name="feature_operaccesslevels"></a></p><div class="desc">
|
||||
<p>There are several oper levels in UnrealIRCd and you can add additional rights (like to use /gline) to
|
||||
each of them, that way you can give each oper the privileges they need.</p>
|
||||
<p>This is controlled by the oper flags in the oper block, see the oper block for more information.</p></div>
|
||||
|
||||
@@ -473,30 +474,14 @@ If you ban *!*@*.303AEBC6.IP you ban *!*@1.2.*<br>
|
||||
This information might be helpful to you when deciding how broad a ban should be.<br>
|
||||
<br>
|
||||
<b>Extended bantypes</b><br>
|
||||
Extended bans look like ~<type>:<parameter>.<br>
|
||||
They let you ban (or exempt) based on things other than the traditional nick!user@host mask.
|
||||
They also provide support for things like 'quieting' users.<br>
|
||||
<br>
|
||||
These bantypes specify which actions are affected by a ban:<br>
|
||||
<br>
|
||||
Extended bans look like ~[!]<type>:<stuff>. Currently the following types are available:<br>
|
||||
<table border=1>
|
||||
<tr><td>type:</td><td>name</td><td>explanation:</td></tr>
|
||||
<tr><td>~q</td><td>quiet</td><td>People matching these bans can join but are unable to speak,
|
||||
unless they have +v or higher. <i>Ex: ~q:*!*@blah.blah.com</i></td></tr>
|
||||
<tr><td>~n</td><td>nickchange</td><td>People matching these bans cannot change nicks,
|
||||
unless they have +v or higher. <i>Ex: ~n:*!*@*.aol.com</i></td></tr>
|
||||
<tr><td>~j</td><td>join</td><td>If a user matches this, he may not join the channel.
|
||||
He may perform all other activities if he is already on the channel, such as speaking and changing his nick.
|
||||
<i>Ex: ~j:*!*@*.aol.com</i><br>
|
||||
Could be useful to prevent people from one ISP from joining, but still make
|
||||
them able to speak/nickchange freely once in the channel, like after an /INVITE.</td></tr>
|
||||
</table>
|
||||
<br>
|
||||
These bantypes introduce new criteria which can be used:<br>
|
||||
<br>
|
||||
<table border=1>
|
||||
<tr><td>type:</td><td>name</td><td>explanation:</td></tr>
|
||||
<tr><td>~c</td><td>channel</td><td>If the user is in this channel then (s)he is unable to join.
|
||||
<tr><td>~c</td><td>[prefix]channel</td><td>If the user is in this channel then (s)he is unable to join.
|
||||
A prefix can also be specified (+/%/@/&/~) which means that it will only match if the user has
|
||||
that rights or higher on the specified channel.
|
||||
<i>Ex: +b ~c:#lamers, +e ~c:@#trusted </i></td></tr>
|
||||
@@ -504,18 +489,9 @@ These bantypes introduce new criteria which can be used:<br>
|
||||
<i>Ex: ~r:*Stupid_bot_script*</i><br>
|
||||
NOTE: an underscore ('_') matches both a space (' ') and an underscore ('_'), so this ban would match
|
||||
'Stupid bot script v1.4'.</td></tr>
|
||||
<tr><td>~R</td><td>registered</td><td>If a user has identified to services (usually NickServ)
|
||||
and matches this nickname, then this ban will match. This means this ban is really only useful for ban
|
||||
exemptions (+e).<br>
|
||||
Ex: <i>+e ~R:Nick</i> will allow Nick in the channel, regardless of other bans, if he identified to
|
||||
NickServ and is using the nickname Nick.<br>
|
||||
</td></tr>
|
||||
</table>
|
||||
<br>
|
||||
You may stack extended bans from the 1st group with the 2nd, such as <i>+b ~q:~c:#lamers</i>, which
|
||||
would quiet all users who have joined #lamers.<br>
|
||||
<br>
|
||||
Modules can add other extended ban types.<br>
|
||||
These bantypes are also supported in the channel exception list (+e).<br>
|
||||
Modules can also add other extended ban types.<br>
|
||||
</p></div>
|
||||
|
||||
<p><font size="+2"><b>3.14 - Spamfilter</b></font><a name="feature_spamfilter"></a></p><div class="desc">
|
||||
@@ -552,9 +528,6 @@ Modules can add other extended ban types.<br>
|
||||
<tr><td>dccblock</td><td>mark the user so (s)he's unable to send any DCCs</td></tr>
|
||||
<tr valign="top"><td>viruschan</td><td>part all channels, join set::spamfilter::virus-help-channel, disables all commands
|
||||
except PONG, ADMIN, and msg/notices to set::spamfilter::virus-help-channel</td></tr>
|
||||
<tr><td>warn</td><td>send a notice to IRCOps (spamfilter snomask), and
|
||||
inform the user that the message has been intercepted. No further action is
|
||||
taken, the message is not blocked.</td></tr>
|
||||
</table></tr></td>
|
||||
<tr valign="top"><td><b>[tkltime]</b></td><td> The duration of the *line/shun added by the filter, use '-' to use the default or to skip
|
||||
(eg: if action = 'block')</td></tr>
|
||||
@@ -637,10 +610,10 @@ A table of all possible choices:<br>
|
||||
<tr><td>swedish</td><td>Swedish characters</td><td>iso8859-1 (latin1)</td></tr>
|
||||
<tr><td><b>latin1</b></td><td>catalan, danish, dutch, french, german, swiss-german, spanish, icelandic, italian, swedish</td><td>iso8859-1 (latin1)</td></tr>
|
||||
<tr><td>hungarian</td><td>Hungarian characters</td><td>iso8859-2 (latin2), windows-1250</td></tr>
|
||||
<tr><td>polish-iso</td><td>Polish characters (note that polish-w1250 is more common!)</td><td>iso8859-2 (latin2)</td></tr>
|
||||
<tr><td>polish</td><td>Polish characters</td><td>iso8859-2 (latin2)</td></tr>
|
||||
<tr><td>romanian</td><td>Romanian characters</td><td>iso8859-2 (latin2), windows-1250, iso8859-16</td></tr>
|
||||
<tr><td><b>latin2</b></td><td>hungarian, polish-iso, romanian</td><td>iso8859-2 (latin2)</td></tr>
|
||||
<tr><td>polish-w1250</td><td>Polish characters, windows variant</td><td>windows-1250</td></tr>
|
||||
<tr><td><b>latin2</b></td><td>hungarian, polish, romanian</td><td>iso8859-2 (latin2)</td></tr>
|
||||
<tr><td>polish-w1250</td><td>Polish characters, windows variant (unfortunately more common than iso)</td><td>windows-1250</td></tr>
|
||||
<tr><td>slovak-w1250</td><td>Slovak characters, windows variant</td><td>windows-1250</td></tr>
|
||||
<tr><td>czech-w1250</td><td>Czech characters, windows variant</td><td>windows-1250</td></tr>
|
||||
<tr><td><b>windows-1250</b></td><td>polish-w1250, slovak-w1250, czech-w1250, hungarian, romanian</td><td>windows-1250</td></tr>
|
||||
@@ -854,7 +827,6 @@ allow {
|
||||
class <connection-class>;
|
||||
password <connection-password> { <auth-type>; };
|
||||
maxperip <max-connections-per-ip>;
|
||||
ipv6-clone-mask <number-of-bits>;
|
||||
redirect-server <server-to-forward-to>;
|
||||
redirect-port <port-to-forward-to>;
|
||||
options {
|
||||
@@ -885,16 +857,6 @@ allow {
|
||||
<p><b>maxperip</b> (optional, but recommended)<br>
|
||||
Allows you to specify how many connections per IP are allowed to this server (ex: maxperip 4;).
|
||||
</p>
|
||||
<p id="allowblock_ipv6clonemask"><b>ipv6-clone-mask</b>
|
||||
(optional, defaults to <a href="#set_defaultipv6clonemask">set::default-ipv6-clone-mask</a>)<br />
|
||||
This option controls clone detection. If two clients connect from different IPv6 addresses
|
||||
but only the last few bits are different, there is almost a guarantee that both clients
|
||||
are really one person. This option only affects the enforcement of
|
||||
<a href="#allowblock_maxperip">allow::maxperip</a>. For example, if you set this option to
|
||||
128, then each IPv6 address will be considered unique. Because of current IP allocation
|
||||
policies, it is recommended that your most general <a href="#allowblock">allow block</a>
|
||||
use a value of 64.
|
||||
</p>
|
||||
<p><b>redirect-server</b> (optional)<br>
|
||||
If the class is full, redirect users to this server (if clients supports it [mIRC 6 does]).</p>
|
||||
<p><b>redirect-port</b> (optional)<br>
|
||||
@@ -975,8 +937,8 @@ listen *:6601 {
|
||||
<p>listen *:8067;<br>
|
||||
listen 213.12.31.126:6667;<br>
|
||||
listen *:6660-6669;</p></div>
|
||||
<p><font class="block_section">4.7 - </font><font id="operblock" class="block_name">Oper Block</font>
|
||||
<font class="block_recommended">RECOMMENDED</font> <font class="block_old">(Previously known as the O:Line)</font><div class="desc">
|
||||
<p><font class="block_section">4.7 - </font><font class="block_name">Oper Block</font>
|
||||
<font class="block_recommended">RECOMMENDED</font> <font class="block_old">(Previously known as the O:Line)</font><a name="operblock"></a><div class="desc">
|
||||
</p>
|
||||
<p>
|
||||
<pre>oper <name> {
|
||||
@@ -1001,47 +963,18 @@ listen *:6601 {
|
||||
<p>The oper block allows you to assign IRC Operators for your server. The <b>oper::</b>
|
||||
specifies the login name for the /oper. The <b>oper::from::userhost</b> is a user@host
|
||||
mask that the user must match, you can specify more than one hostmask by creating
|
||||
more than one oper::from::userhost.
|
||||
</p>
|
||||
<p id="operblock_password">The <b>oper::password::</b> is the password the oper must specify.
|
||||
<b>oper::password::auth-type</b> allows you to specify an authentication method
|
||||
for this password. Don't specify <b>oper::password::auth-type</b> for plaintext password.
|
||||
Valid auth-types are <tt>crypt</tt>, <tt>md5</tt>, <tt>sha1</tt>, <tt>ripemd160</tt>,
|
||||
and <tt>sslclientcert</tt>. Specifying any one of these types means that the
|
||||
value of <b>oper::password::</b> is a hash generated with
|
||||
<a href="#cmd_mkpasswd">mkpasswd</a>.
|
||||
</p>
|
||||
<p id="operblock_password_sslclientcert">
|
||||
<tt>sslclientcert</tt> is an exceptional auth-type. When this is
|
||||
chosen as the auth-type, <b>oper::password::</b> should be a file
|
||||
path (relative to UnrealIRCd's installation directory). The file
|
||||
should be a PEM-encoded SSL certificate (the public certificate, not
|
||||
a key). This specifies that only an IRC client that
|
||||
<ol>
|
||||
<li>is connected using SSL</li>
|
||||
<li>presented the matching client certficate when connecting</li>
|
||||
<li>has access to the private key associated with the certficiate file</li>
|
||||
</ol>
|
||||
may connect. Of course, this feature requires that UnrealIRCd be
|
||||
compiled with SSL support. Also, as any SSL certificate's associated
|
||||
key is much longer than a normal human's password and much more
|
||||
random, this is the securest authentication option. To oper
|
||||
up when you have specified a client SSL certificate as the oper's
|
||||
password, just ensure that the client is set up correctly and issue
|
||||
<pre>/oper <name> :</pre>. The <tt>sslclientcert</tt>
|
||||
auth-type may also be used
|
||||
for <a href="#linkblock_passwordreceive">link::password-receive</a>
|
||||
to secure <a href="#linkblock">link block</a>s.
|
||||
</ol>
|
||||
</p>
|
||||
<p>Please note that BOTH the password and login name are case sensitive.</p>
|
||||
more than one oper::from::userhost. The <b>oper::password</b> is the password the user
|
||||
must specify, oper::password:: allows you to specify an authentication method
|
||||
for this password, valid auth-types are crypt, md5, and sha1, ripemd-160. If
|
||||
you want to use a plain-text password leave this sub-block out.</p>
|
||||
<p>Please note that BOTH the login name and password are case sensitive</p>
|
||||
<p>The <b>oper::class</b> directive specifies the name of a preexisting (appears before
|
||||
this in the config file) class name that the oper block will use.</p>
|
||||
<p>The <b>oper::flags</b> directive has two formats. If you wish to use the old style
|
||||
oper flags i.e., OAa, you use the flags <flags> method, if you want to
|
||||
use the new style,i.e., services-admin, then you use the flags { <flag>;
|
||||
} method. Below is a list of all the flags (in both formats) and what they do.</p>
|
||||
<table width="75%" border="1" id="operblock_flags">
|
||||
<table width="75%" border="1">
|
||||
<tr>
|
||||
<td width="10%"><div align="center"><b>Old Flag</b></div></td>
|
||||
<td width="16%"><div align="center"><b>New Flag</b></div></td>
|
||||
@@ -1458,9 +1391,10 @@ log <file-name> {
|
||||
<table border=0>
|
||||
<tr><td>errors</td><td>self explanatory</td></tr>
|
||||
<tr><td>kills</td><td>logs /kill notices</td></tr>
|
||||
<tr><td>tkl</td><td>logs info on *lines (/kline, /zline, etc), shuns and spamfilters (adding/removing/expire)</td></tr>
|
||||
<tr><td>tkl</td><td>logs info on *lines, shuns and spamfilters (adding/removing/expire)</td></tr>
|
||||
<tr><td>connects</td><td>logs user connects/disconnects</td></tr>
|
||||
<tr><td>server-connects</td><td>logs server connects/squits</td></tr>
|
||||
<tr><td>kline</td><td>logs /kline usage</td></tr>
|
||||
<tr><td>oper</td><td>logs oper attempts (both failed and successful)</td></tr>
|
||||
<tr><td>sadmin-commands</td><td>logs /sa* (samode, sajoin, sapart, etc.) usage</td></tr>
|
||||
<tr><td>chg-commands</td><td>logs /chg* (chghost, chgname, chgident, etc.) usage</td></tr>
|
||||
@@ -1477,6 +1411,7 @@ log ircd.log {
|
||||
errors;
|
||||
kills;
|
||||
oper;
|
||||
kline;
|
||||
tkl;
|
||||
};
|
||||
};
|
||||
@@ -1665,11 +1600,9 @@ except ban {
|
||||
mask <hostmask>;
|
||||
};</pre></p>
|
||||
<p>The except ban block allows you to specify a user@host that will override a
|
||||
ban { } and KLINE/ZLINE placed on a broader host. This is useful when you want an ISP banned, but
|
||||
ban placed on a broader host. This is useful when you want an ISP banned, but
|
||||
still want specific users to be able to connect. The except::mask directive
|
||||
specifies the user@host mask of the client who will be allowed to connect.</p>
|
||||
<p>NOTE: If you want to exempt a host completely from all possible bans
|
||||
(except spamfilter), then you need both an 'except ban' and an 'except tkl' block</p>
|
||||
<p>Example:<br>
|
||||
<pre>
|
||||
except ban {
|
||||
@@ -1695,11 +1628,9 @@ except tkl {
|
||||
still want specific users to be able to connect. The except::mask directive
|
||||
specifies the user@host mask of the client who will be allowed to connect. The
|
||||
except::type specifies which type of ban this should override. Valid types are
|
||||
gline, gzline, qline, gqline, shun, and all, which make an exception from Glines,
|
||||
Global Zlines, Qlines, Global Qlines, shuns, and all bans except
|
||||
KLINE/ZLINE. If the type {} format is used, multiple types may be specified.</p>
|
||||
<p>NOTE: If you want to exempt a host completely from all possible bans
|
||||
(except spamfilter), then you need both an 'except ban' and an 'except tkl' block</p>
|
||||
gline, gzline, qline, gqline, and shun, which make an exception from Glines,
|
||||
Global Zlines, Qlines, Global Qlines, and shuns. If the type {} format is used,
|
||||
multiple types may be specified.</p>
|
||||
<p>Example:<br>
|
||||
<pre>
|
||||
except tkl {
|
||||
@@ -1936,22 +1867,16 @@ badword <type> {
|
||||
action <replace|block>;
|
||||
};</pre></p>
|
||||
<p>The badword block allows you to manipulate the list used for user and channel
|
||||
mode +G to strip "badwords". The <b>badword::</b> specifies the type, which decides
|
||||
what messages this badword filter applies to. The valid types are:</p>
|
||||
<ul>
|
||||
<li><tt>channel</tt> applies to channels with mode +G.</li>
|
||||
<li><tt>message</tt> applies to private messages (not in-channel messages) sent by a user with the +G usermode.</li>
|
||||
<li><tt>quit</tt> applies to all quit messages.</li>
|
||||
<li><tt>all</tt> applies to all three of the above situations.</li>
|
||||
</ul>
|
||||
<p>
|
||||
The <b>badword::word</b> can be a simple word or a regular expression we should search for. The
|
||||
<b>badword::replace</b> is what we should replace this match with. If <b>badword::replace</b>
|
||||
is left out, the word is replaced with <censored>. The <b>badword::action</b> defines
|
||||
mode +G to strip "badwords". The badword:: specifies the type, valid
|
||||
types are channel, message, quit, and all. channel is for the channel +G list, message
|
||||
is for the user +G list, quit is for quit message censoring, and all adds it to all three lists.
|
||||
The badword::word can be a simple word or a regular expression we should search for. The
|
||||
badword::replace is what we should replace this match with. If badword::replace
|
||||
is left out, the word is replaced with <censored>. The badword::action defines
|
||||
what action should be taken if this badword is found. If you specify replace, then the
|
||||
badword is replaced, if you specify block, then the entire message is blocked. If you do
|
||||
not specify a <b>badword::action</b>, replace is assumed.</p>
|
||||
<p>Example:<br />
|
||||
not specify a badword::action, replace is assumed.</p>
|
||||
<p>Example:<br>
|
||||
<pre>
|
||||
badword channel {
|
||||
word shit;
|
||||
@@ -1979,8 +1904,8 @@ ulines {
|
||||
stats.mynetwork.com;
|
||||
};</pre></p>
|
||||
<p></p></div>
|
||||
<p id="linkblock"><font class="block_section">4.31 - </font><font class="block_name">Link Block</font>
|
||||
<font class="block_optional">OPTIONAL</font> <font class="block_old">(Previously known as C/N/H:Lines)</font>
|
||||
<p><font class="block_section">4.31 - </font><font class="block_name">Link Block</font>
|
||||
<font class="block_optional">OPTIONAL</font> <font class="block_old">(Previously known as C/N/H:Lines)</font><a name="linkblock"></a>
|
||||
</p><div class="desc">
|
||||
<p>Syntax:<br>
|
||||
<pre>
|
||||
@@ -2030,13 +1955,10 @@ link <server-name> {
|
||||
<p><b>password-connect</b><br>
|
||||
The password used for connecting to the remote server, must be plain-text.
|
||||
</p>
|
||||
<p id="linkblock_passwordreceive"><b>password-receive</b><br> The password used for validating
|
||||
incoming links. This may be encrypted in the same manner
|
||||
as <a href="#operblock_password"><b>oper::password</b></a>. It may,
|
||||
notably, be set up to use
|
||||
the <a href="#operblock_password_sslclientcert"><tt>sslclientcert</tt></a>
|
||||
auth-type. In fact, this is strongly recommended as it is infinitely
|
||||
more resilient against brute-force attacks.
|
||||
<p><b>password-receive</b><br>
|
||||
The password used for validating incoming links, can be encrypted (valid methods
|
||||
are crypt, md5, sha1, ripemd-160). You can leave the auth-type parameter out to
|
||||
just use plain-text. Often this password is the same as your password-connect.
|
||||
</p>
|
||||
<p><b>hub vs leaf</b><br>
|
||||
A hub has multiple servers linked to it, a leaf has only one link... to you.
|
||||
@@ -2104,34 +2026,18 @@ alias <name> {
|
||||
type <type-of-alias>;
|
||||
spamfilter <yes|no>;
|
||||
};</pre></p>
|
||||
<p>(Note that <span class="inline_pre"><name></span> is referred to using "<b>alias::</b>")</p>
|
||||
<p>(Note: see <a href="#includedirective">a description</a> of the standard alias files UnrealIRCd has)</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,
|
||||
for example /chanserv sends a message to the user chanserv.
|
||||
</p>
|
||||
<ul>
|
||||
<li>
|
||||
<b>alias::</b> specifies the name of the command that will be the alias (eg: chanserv)
|
||||
</li>
|
||||
<li>
|
||||
<b>alias::target</b> is the nickname or channel it will forward to. If <b>alias::</b>
|
||||
would be the same as the target, <b>alias::target</b> may be left out.
|
||||
</li>
|
||||
<li>
|
||||
<b>alias::type</b> specifies the type of alias, valid types are
|
||||
<ul>
|
||||
<li><span class="inline_pre">services</span> (the user is on the <a href="#set-services-server">services server</a>),</li>
|
||||
<li><span class="inline_pre">stats</span> (the user is on the <a href="#set-stats-server">stats server</a>),</li>
|
||||
<li><span class="inline_pre">normal</span> (the user is a normal user on any server),</li>
|
||||
<li><span class="inline_pre">channel</span> (the target is a channel name), and</li>
|
||||
<li><span class="inline_pre">command</span> (this is not a "standard alias", see <a href="#aliasblock-command">below</a>).</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
<b>alias::spamfilter</b> (optional) causes the spamfilters will be checked if set to "yes" (default is 'no').
|
||||
</li>
|
||||
</ul>
|
||||
<p id="aliasblock-command">Syntax [command alias]:<br>
|
||||
for example /chanserv sends a message to the user chanserv. The alias:: specifies
|
||||
the name of the command that will be the alias (eg: chanserv), alias::target is
|
||||
the nickname or channel it will forward to, if the alias:: is the same as the target, it will
|
||||
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). 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 <name> {
|
||||
/* For aliases to be sent to users/channels */
|
||||
@@ -2153,49 +2059,25 @@ alias <name> {
|
||||
type command;
|
||||
spamfilter <yes|no>;
|
||||
};</pre></p>
|
||||
<p>
|
||||
When an alias block has <b>alias::type</b> set to <span class="inline_pre">command</span>,
|
||||
as shown <a href="#aliasblock-command">above</a>, it becomes a command alias.
|
||||
When the alias block is used in this format, it is much more flexible.
|
||||
For example, you could create an /identify alias.
|
||||
</p>
|
||||
<ul>
|
||||
<li>
|
||||
<b>alias::</b> is the name of the alias command as in standard alias block form
|
||||
(<a href="#aliasblock">above</a>).
|
||||
</li>
|
||||
<li>
|
||||
<b>alias::format</b> specifies a <a href="#regex">regular expression</a> which is matched against the
|
||||
text sent to the alias command. The sub-entries of the first matching <b>alias::format</b>
|
||||
will be used. Thus, you may have multiple <b>alias::format</b>s to make a command
|
||||
do different things depending on the text sent to it.
|
||||
</li>
|
||||
<li>
|
||||
<b>alias::format::target</b> is the target to forward this alias to.
|
||||
This value is not used if <b>alias::format::type</b> is "<span class="inline_pre">real</span>".
|
||||
</li>
|
||||
<li>
|
||||
<b>alias::format::type</b> specifies the type of the alias that the
|
||||
message should be forwarded to. In addition to the types mentioned previously in
|
||||
"<a href="#aliasblock">Syntax [standard alias]</a>", "<span class="inline_pre">real</span>"
|
||||
may be specified here for a "real alias" (a "real alias" is an alias that
|
||||
may be rewritten to something other than a PRIVMSG).
|
||||
</li>
|
||||
<li>
|
||||
<b>alias::format::parameters</b> (for "real aliases") is what will
|
||||
<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 <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 <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 <span class="inline_pre">%</span> followed by a number.
|
||||
For example, <span class="inline_pre">%1</span> is the first parameter. To specify
|
||||
all parameters from a given parameter to the end, use <span class="inline_pre">%</span>
|
||||
followed by the number and a <span class="inline_pre">-</span>. For example,
|
||||
<span class="inline_pre">%2-</span> returns all parameters from the second through the
|
||||
last. Additionally, you may specify <span class="inline_pre">%n</span> which will be
|
||||
replaced by the nickname of the user who executed the command.
|
||||
</li>
|
||||
</ul>
|
||||
<p>
|
||||
For examples of using the alias block in the command format, consult doc/example.conf.
|
||||
</p>
|
||||
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.<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>
|
||||
@@ -2335,8 +2217,8 @@ Then, in your unrealircd.conf you add a cgiirc block:
|
||||
};</pre></p>
|
||||
</div>
|
||||
|
||||
<p id="setblock"><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>
|
||||
<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
|
||||
file. On single server networks, rather than having 3 files you can just put all
|
||||
@@ -2396,9 +2278,9 @@ set {
|
||||
The snomask that will be set on a user when they /oper.</p>
|
||||
<p><font class="set">set::modes-on-join <+modes>;</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 <none|voice|halfop|op|protect|owner>;</font><br>
|
||||
The mode that a user will get when he's the first to join a channel. The
|
||||
default is 'op' (channel operator).</p>
|
||||
<p><font class="set">set::level-on-join <op|none>;</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 <modes></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,
|
||||
@@ -2420,7 +2302,7 @@ set {
|
||||
The channel(s) a user will be forced to join when they /oper. To specify more
|
||||
than one channel use a comma separated list.<br>
|
||||
[Note: don't forget to add quotes, like: oper-auto-join "#chan";]</p>
|
||||
<p id="set::anti-spam-quit-message-time"><font class="set">set::anti-spam-quit-message-time <timevalue>;</font><br>
|
||||
<p><font class="set">set::anti-spam-quit-message-time <timevalue>;</font><br>
|
||||
A time value specifying the length of time a user must be connected for before
|
||||
a /quit message will be displayed. Used to prevent spam. A time value is a numeric
|
||||
string with d meaning days, h meaning hours, m meaning minutes, and s meaning
|
||||
@@ -2500,25 +2382,6 @@ set {
|
||||
Allow shunned user to use /part.</p>
|
||||
<p><font class="set">set::options::fail-oper-warn;</font><br>
|
||||
If present, a user will be notified that his/her failed /oper attempt has been logged.</p>
|
||||
<p><font class="set">set::options::allow-insane-bans;</font><br>
|
||||
Allow insane broad bans like /GLINE *@*.xx. This makes it very easy to
|
||||
accidentally ban everyone on your network, so use with great care!</p>
|
||||
<p id="set_nopost_ban_action"><font class="set">set::nopost::ban-action</font> (requires <a href="#modules_m_nopost">m_nopost</a>)<br />
|
||||
Action to take on a user if he tries to perform an HTTP POST command.
|
||||
The allowed values are: kill, gline, gzline, kline, zline, shun, and tempshun.
|
||||
The default value is kill. If you use a *line value or shun, then note
|
||||
that if gullible user who is tricked into visiting a website exhibiting
|
||||
the XPS IRC spamming attack will experience the shun or *line on his existing
|
||||
connections. The default value of kill protects against such user accidents,
|
||||
but use of *line and especially gzline may be needed in some situations.</p>
|
||||
<p id="set_nopost_ban_reason"><font class="set">set::nopost::ban-reason</font> (requires <a href="#modules_m_nopost">m_nopost</a>)<br />
|
||||
The ban reason to set when m_nopost kills or bans a user.</p>
|
||||
<p id="set_nopost_ban_time"><font class="set">set::nopost::ban-time</font> (requires <a href="#modules_m_nopost">m_nopost</a>)<br />
|
||||
The duration for shuns, glines, gzlines, klines, and zlines set by m_nopost.
|
||||
Default is 4h.</p>
|
||||
<p id="set_nopost_except_hosts"><font class="set">set::nopost::except-hosts</font> (requires <a href="#modules_m_nopost">m_nopost</a>)<br />
|
||||
A list of hostmasks to exempt from m_nopost's killing or *-lining. You should
|
||||
neve need to place any hostmasks in this option.</p>
|
||||
<p><font class="set">set::dns::timeout <timevalue>;</font><br>
|
||||
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,
|
||||
@@ -2537,16 +2400,10 @@ set {
|
||||
<p><font class="set">set::default-server <server-name>;</font><br>
|
||||
Defines the name of the default server to tell users to connect to if this server
|
||||
is full.</p>
|
||||
<p id="set_defaultipv6clonemask">
|
||||
<font class="set">set::default-ipv6-clone-mask</font><br />
|
||||
The default IPv6 clone detection mask. See
|
||||
<a href="#allowblock_ipv6clonemask">allow::ipv6-clone-mask</a>. The default value for this
|
||||
setting is 64.
|
||||
</p>
|
||||
<p id="set-services-server"><font class="set">set::services-server <server-name>;</font><br>
|
||||
<p><font class="set">set::services-server <server-name>;</font><br>
|
||||
Specifies the name of the server that the services bots are connected to. Required,
|
||||
set it to something like services.yournet.com if you don't have services.</p>
|
||||
<p id="set-stats-server"><font class="set">set::stats-server <server-name>;</font><br>
|
||||
<p><font class="set">set::stats-server <server-name>;</font><br>
|
||||
Sets the name of the server on which the stats bot is located. If stats are
|
||||
not run this value may be left out.</p>
|
||||
<p><font class="set">set::help-channel <network-help-channel>;</font><br>
|
||||
@@ -2610,8 +2467,6 @@ set {
|
||||
Disallows connections from people with self-signed certificates.</p>
|
||||
<p><font class="set">set::ssl::options::verify-certificate;</font><br>
|
||||
Makes Unreal determine if the SSL certificate is valid before allowing connection.</p>
|
||||
<p><font class="set">set::ssl::options::no-starttls;</font><br>
|
||||
Disable STARTTLS. STARTTLS allows clients to use SSL on regular (non-SSL) ports.</p>
|
||||
<p><font class="set">set::throttle::period <timevalue></font><br>
|
||||
How long a user must wait before reconnecting more than set::throttle::connections
|
||||
times.</p>
|
||||
@@ -2685,44 +2540,11 @@ AU). Requests to these servers are sent in parallel, fastest reply wins.</p>
|
||||
<p><font class="set">set::watch-away-notification <yes|no></font><br>
|
||||
Allows you to enable/disable AWAY notification in WATCH. The default is yes.</p>
|
||||
<p></p> </div>
|
||||
<p id="filesblock"><font class="block_section">4.38 - </font><font class="block_name">Files Block</font>
|
||||
<font class="block_optional">OPTIONAL</font><div class="desc">
|
||||
</p>
|
||||
<p>
|
||||
You don't need to use a <a href="#tldblock">TLD block</a> to specify default locations for your MOTDs and rules files. This block controls default settings for those in addition to the pidfile and irc.tune file. Anything not specified here will default to the value documented in <a href="#addtlfiles">Additional Files</a>.
|
||||
</p>
|
||||
<p>
|
||||
Relative pathnames will be interpreted relative to UnrealIRCd's root directory which is normally the directory containing <tt>unrealircd.conf</tt>. This block may be used to facilitate running more than one IRCd out of the same directory/root. In that case, you should at least specify multiple pidfiles and tunefiles—one for each server.
|
||||
</p>
|
||||
<p>Syntax:<br>
|
||||
<pre>
|
||||
files {
|
||||
motd <motd file>;
|
||||
shortmotd <short motd file>;
|
||||
opermotd <oper motd file>;
|
||||
svsmotd <services motd file>;
|
||||
botmotd <bot motd file>;
|
||||
|
||||
rules <rules file>;
|
||||
|
||||
tunefile <tune file>;
|
||||
pidfile <pid file>;
|
||||
};
|
||||
</pre></p>
|
||||
<p>Example:<br />
|
||||
<pre>
|
||||
files {
|
||||
motd /etc/motd;
|
||||
|
||||
pidfile /var/lib/run/unrealircd.pid;
|
||||
};
|
||||
</pre>
|
||||
</p>
|
||||
<p><b><font size="+2">5 – Additional Files<a name="addtlfiles"></a>
|
||||
</font></b></p><div class="desc">
|
||||
In addition to the configuration files, Unreal has a few other files, such as MOTD, OperMOTD,
|
||||
BotMOTD, and Rules. Listed below are the names of these files and their uses.<br>
|
||||
Note that the motd files (all types) and rules files can also be specified in a <a href="#tldblock">tld</a> or <a href="#filesblock">files</a> block,
|
||||
Note that the motd files (all types) and rules files can also be specified in a tld block,
|
||||
these are just the files used by default (and for remote MOTD/RULES's).<p />
|
||||
<table width="83%" border="1">
|
||||
<tr>
|
||||
@@ -2857,10 +2679,6 @@ files {
|
||||
<td><div align="center">Q</div></td>
|
||||
<td>Only U:Lined servers can kick users</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><div align="center">r</div></td>
|
||||
<td>This channel is registered (only settable by services)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><div align="center">R</div></td>
|
||||
<td>Requires a registered nickname to join</td>
|
||||
@@ -2875,7 +2693,7 @@ files {
|
||||
</tr>
|
||||
<tr>
|
||||
<td><div align="center">t</div></td>
|
||||
<td>Only halfops, chanops, or better can set topic</td>
|
||||
<td>Only chanops can set topic</td>
|
||||
</tr>
|
||||
</tr>
|
||||
<tr>
|
||||
@@ -2898,15 +2716,6 @@ files {
|
||||
<td><div align="center">z</div></td>
|
||||
<td>Only clients on a Secure (SSL) Connection may join</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><div align="center">Z</div></td>
|
||||
<td>Set by the server to indicate all users on the channel are on a Secure (SSL)
|
||||
Connection. Only active is +z is also set. ULines (eg: BotServ) are
|
||||
ignored when counting 'insecure users'. It's still up to the server
|
||||
admins to make safe server to server links (which could be with the help
|
||||
of SSL, but also VPN, loopback interface, quantum encryption, etc etc),
|
||||
the IRCd does not and cannot detect this.</td>
|
||||
</tr>
|
||||
</table>
|
||||
<p> </p>
|
||||
<table width="75%" border="1">
|
||||
@@ -3342,15 +3151,14 @@ to get more information on a command.</p>
|
||||
<td>IRCop</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td height="39">rehash <server|-global> <flags></td>
|
||||
<td height="39">rehash <server> –<flags></td>
|
||||
<td>Rehashes the servers config file. Including a server name allows you to
|
||||
rehash a remote servers config file, and using -global will rehash all
|
||||
servers on the network (both are NetAdmin-only). Several flags are also available. They
|
||||
rehash a remote servers config file. Several flags are also available. They
|
||||
Include <br>
|
||||
-dns - Reinitializes and reloads the resolver<br>
|
||||
-motd - Only re-read all MOTD, BOTMOTD, OPERMOTD and RULES files (including those in tld{} blocks)<br>
|
||||
-motd - Only rehash all MOTD and RULES files (including tld {})<br>
|
||||
-opermotd - Only rehash the OPERMOTD file<br>
|
||||
-botmotd - Only rehash the BOTMOTD file<br>
|
||||
-garbage - Force garbage collection<br>
|
||||
-ssl - Reloads SSL certificates<br>
|
||||
<td>IRCop</td>
|
||||
</tr>
|
||||
<tr>
|
||||
@@ -3472,20 +3280,12 @@ to get more information on a command.</p>
|
||||
</tr>
|
||||
<tr>
|
||||
<td height="36">addline <text><br></td>
|
||||
<td>Appends the specified text to unrealircd.conf. You must load the m_addline
|
||||
module to use this command since unrealircd-3.2.9.<br></td>
|
||||
<td>Allows you to add lines to the unrealircd.conf<br></td>
|
||||
<td>IRCop</td>
|
||||
</tr>
|
||||
<tr id="cmd_mkpasswd">
|
||||
<td height="36">mkpasswd <auth-type> <password><br></td>
|
||||
<td>Will encrypt <password> using the <auth-type> hashing method. Available hash methods:
|
||||
<ul>
|
||||
<li>crypt [<em>Windows support requires SSL</em>]</li>
|
||||
<li>md5</li>
|
||||
<li>sha1 [<em>requires SSL</em>]</li>
|
||||
<li>ripemd160 [<em>requires SSL</em>]</li>
|
||||
</ul>
|
||||
<br></td>
|
||||
<tr>
|
||||
<td height="36">mkpasswd <password><br></td>
|
||||
<td>Will encrypt a clear text password to add it to the unrealircd.conf<br></td>
|
||||
<td>IRCop</td>
|
||||
</tr>
|
||||
<tr>
|
||||
@@ -3619,14 +3419,13 @@ kind of shared directory. And for backups, make sure they get the correct permis
|
||||
(it happens quite frequently everything is secured fine but there's a backup.tar.gz lying
|
||||
around readable by everyone).<br>
|
||||
<br>
|
||||
You also want to use <a href="#passwords" title="Password Types">encrypted passwords</a> wherever possible, if you compile with OpenSSL
|
||||
You also want to use encrypted passwords wherever possible, if you compile with OpenSSL
|
||||
support (which you do, since you are concerned with security, right?) then I suggest to
|
||||
use <i>sha1</i> or <i>ripemd160</i> password encryption, else use <i>md5</i>. Also if
|
||||
you still have encrypted (oper) blocks left from Unreal3.2.1 or before I suggest you to
|
||||
re-enrypt these (just re-run /mkpasswd), because 3.2.1 introduced some considerable
|
||||
anti-crack improvements (basically a 14x slowdown of active cracks, and making
|
||||
stored-plain-ciphertext cracks impossible).
|
||||
<br>
|
||||
stored-plain-ciphertext cracks impossible).<br>
|
||||
Still, do note that this is just 'yet another layer of security', since if you have weak
|
||||
passwords they can still be cracked relatively easily and if someone manages to get your
|
||||
configfile there are usually other interesting things in it that may aid an attacker,
|
||||
@@ -3729,7 +3528,7 @@ files. This requires root privileges, modifying of include/config.h
|
||||
recompile.<br>
|
||||
<br>
|
||||
There's one thing you should definately do, which is to ALWAYS USE THE LATEST VERSION,
|
||||
subscribe to the <a href="http://lists.sourceforge.net/mailman/listinfo/unreal-notify" target="_blank">unreal-notify mailinglist</a>
|
||||
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
|
||||
release contains (high risk) security fixes, but it's good to upgrade anyway.<br>
|
||||
@@ -3743,27 +3542,11 @@ Do take the time to secure your network and educate your opers. A lot of people
|
||||
security until they got hacked, try to avoid that :).
|
||||
</div></p>
|
||||
|
||||
|
||||
<p><font size="+2"><b>9 – 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>
|
||||
<p></p>
|
||||
|
||||
<p id="modules"><font size="+2"><b>10 – Modules</b></font></p>
|
||||
<div class="desc">
|
||||
<p>The following are some descriptions of modules shipped with
|
||||
UnrealIRCd. Unfortunately, only one of the modules shipped with
|
||||
UnrealIRCd is documented at the moment.</p>
|
||||
</div>
|
||||
<p id="modules_m_nopost"><font size="+2"><b>10.1 <a href="#modules_m_nopost">m_nopost</a></b></font><br />
|
||||
This module automatically bans any user who tries to issue an HTTP-style request.
|
||||
This module was written by Syzop in response to the Firefox XPS attack through which
|
||||
AJAX-capable browsers were able to act as IRC spambots. To choose what m_nopost
|
||||
does when it receives such a request, configure the <a href="#set_nopost_ban_action">
|
||||
set::nopost::ban-action</a> and <a href="#set_nopost_ban_time">set::nopost::ban-time</a>
|
||||
settings (and their friends).<br />
|
||||
This module is new as of UnrealIRCd 3.2.9 and is compiled into commands.so. Thus,
|
||||
it is loaded by default in most cases.
|
||||
</p>
|
||||
|
||||
<p><font size="+2"><b>A Regular Expressions<a name="regex"></a></b></font></p>
|
||||
<div class="desc"><p>Regular expressions are used in many places in Unreal, including badwords, spamfilter, and aliases. Regular expressions are a very complex tool used for pattern matching. They are sometimes referred to as "regexp" or "regex." Unreal uses the TRE regular expression library for its regex. This library supports some very complex and advanced expressions that may be confusing. The information below will help you understand how regexps work. If you are interested in more technical and detailed information about the regexp syntax used by Unreal, visit the <a href="http://www.laurikari.net/tre/syntax.html" target="_new">TRE homepage</a>.</p></div>
|
||||
|
||||
|
||||
+121
-335
@@ -11,8 +11,8 @@
|
||||
.block_optional { color: blue; font-weight: bold; }
|
||||
.block_old { font-size: 14; }
|
||||
.set { font-weight: bold; }
|
||||
.inline_pre { font-family: monospace; font-style: normal; background-color: #eeeeee;}
|
||||
pre { font-family: monospace; font-style: normal; background-color: #eeeeee;}
|
||||
.desc { margin-left: 15px; }
|
||||
pre { font: "times new roman"; font-style: normal; background-color: #eeeeee;}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
@@ -31,20 +31,26 @@ Hungarian |
|
||||
<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.9-RC2</font><br>
|
||||
<b>Utolsó dokumentáció frissítés:</b> 2010-11-15</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õ/karbantartó:</b> Syzop<br>
|
||||
<b>Fejlesztõk:</b> binki<br>
|
||||
<b>Korábbi fejlesztõk és hozzájárulók:</b> Stskeeps, codemastr, Luke, aquanight,
|
||||
WolfSage, McSkaf, Zogg, NiQuiL, assyrian, chasm, DrBin, llthangel,
|
||||
Griever, nighthawk<br>
|
||||
<b>Dokumentáció:</b> CKnight^ (kezdeti dokumentáció), Syzop (jelentõs újraírás), codemastr, és sok más hozzájáruló<br>
|
||||
<b>Magyar fordítás:</b> <a href="mailto:angrywolf2009@gmail.com">AngryWolf</a><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>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>
|
||||
<li>Opera 6.02
|
||||
<li>Microsoft Internet Explorer 6.X / 5.5
|
||||
<li>Netscape Navigator 6.X
|
||||
<li>Mozilla 1.2.X
|
||||
<li>Lynx (valamennyire)
|
||||
</ul>
|
||||
</p>
|
||||
<p><font size="+2"><b>TÁRGYMUTATÓ / TARTALOMJEGYZÉK</b></font><br>
|
||||
1. <a href="#IntroductionNotes">Bevezetés és megjegyzések</a><br>
|
||||
---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>
|
||||
@@ -90,9 +96,9 @@ Hungarian |
|
||||
---4.16. <a href="#banserverblock">Ban server blokk -=-(q:Line)</a><br>
|
||||
---4.17. <a href="#banrealnameblock">Ban realname blokk -=- (n:Line)</a><br>
|
||||
---4.18. <a href="#banversionblock">Ban version blokk</a><br>
|
||||
---4.19. <a href="#banexceptionblock">Ban kivétel blokk -=- (E:Line)</a><br>
|
||||
---4.20. <a href="#tklexceptionblock">TKL kivétel blokk</a><br>
|
||||
---4.21. <a href="#throttleexceptionblock">Throttle kivétel blokk</a><br>
|
||||
---4.19. <a href="#banexceptionblock">Ban exception blokk -=- (E:Line)</a><br>
|
||||
---4.20. <a href="#tklexceptionblock">TKL exception blokk</a><br>
|
||||
---4.21. <a href="#throttleexceptionblock">Throttle exception blokk</a><br>
|
||||
---4.22. <a href="#denydccblock">Deny DCC blokk -=- (dccdeny.conf)</a><br>
|
||||
---4.23. <a href="#denyversionblock">Deny version blokk -=- (V:Line)</a><br>
|
||||
---4.24. <a href="#denylinkblock">Deny link blokk -=- (D:Line / d:Line)</a><br>
|
||||
@@ -109,7 +115,6 @@ Hungarian |
|
||||
---4.35. <a href="#spamfilter">Spamfilter blokk</a><br>
|
||||
---4.36. <a href="#cgiirc">Cgiirc blokk</a><br>
|
||||
---4.37. <a href="#setblock">Set blokk -=- (networks/unrealircd.conf)</a><br>
|
||||
---4.38. <a href="#filesblock">Files blokk</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>
|
||||
@@ -123,9 +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 (GYIK)</a><br />
|
||||
10. <a href="#modules">Modulok</a><br />
|
||||
---10.1. <a href="#modules_m_nopost">m_nopost</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>
|
||||
@@ -147,10 +150,9 @@ Hungarian |
|
||||
nem módosítod. – 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
|
||||
oldotta meg a problémádat, segítséget kérhetsz az irc.unrealircd.org címen (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 Services-zel!).
|
||||
A fórumokat is használhatod a <a href="http://forums.unrealircd.com/" TARGET="_blank">http://forums.unrealircd.com</a> címen.
|
||||
Ha találsz egy valódi hibát (például egy összeomlást), jelentsd a
|
||||
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
|
||||
<a href="http://bugs.unrealircd.org" TARGET="_blank">http://bugs.unrealircd.org</a>-on!</p></div>
|
||||
|
||||
<p><font size="+2"><b>1.1 – Megjegyzések a 3.1.x-rõl 3.2-re frissítésrõl és a verziók keverésérõl </b></font><a name="notesonolder"></a><br>
|
||||
@@ -255,8 +257,8 @@ mert m
|
||||
<p>Az UnrealIRCd támogatja a modulokat, ami hasznos, mert:<br>
|
||||
- Betölthetsz, újratöltetsz és eltávolíthatsz modulokat, miközben az ircd fut (a /rehash-sel). Így hibákat lehet javítani illetve új dolgokat hozzáadni az újraindítás szükségessége nélkül!<br>
|
||||
- Mások készíthetnek (nem hivatalos, angol nevén: 3rd party) modulokat, amelyek új parancsokat, felhasználói és akár csatornamódokat is tartalmazhatnak.<br>
|
||||
Az UnrealIRCd önmagában csak kevés <a href="#modules">modult</a> tartalmaz. Vess egy pillantást az www.unrealircd.com -> modules
|
||||
oldalra, vagy használd a google keresõt nemhivatalos modulok keresésére.<br>
|
||||
Az UnrealIRCd önmagában csak egy kevés modullal rendelkezik. Vess egy pillantást a www.unrealircd.com -> modules
|
||||
oldalára, vagy használd a google keresõt nemhivatalos modulok keresésére.<br>
|
||||
<p>Legalább 2 modult be kell töltened, különben az ircd nem fog elindulni!<br>
|
||||
- a commands modult: commands.so (commands.dll windows alatt)<br>
|
||||
- egy álcázó modult: rendszerint cloak.so (cloak.dll windows alatt).</p>
|
||||
@@ -306,8 +308,8 @@ mert m
|
||||
tehát a <i>/helpop</i> helyett <i>/helpop ?</i> lesz és
|
||||
a <i>/helpop chmodes</i> helyett <i>/helpop ?chmodes</i> stb..</p></div>
|
||||
|
||||
<p id="feature_operaccesslevels"><font size="+2"><b>3.6 - Operátori hozzáférési szintek</b></font></p><div class="desc">
|
||||
<p>Számos <a href="#operblock_flags">operátori szint</a> létezik az UnrealIRCd-ben, és további jogokat is tehetsz hozzájuk (például a /gline használatához),
|
||||
<p><font size="+2"><b>3.6 - Operátori hozzáférési szintek</b></font><a name="feature_operaccesslevels"></a></p><div class="desc">
|
||||
<p>Számos operátori szint létezik az UnrealIRCd-ben, és további jogokat tehetsz hozzájuk (például a /gline használatához),
|
||||
így minden operátornak megadhatod a szükséges jogokat.</p>
|
||||
<p>Ezeket az oper flagekkel vezérelheted az oper blokkban; további információért lásd az oper blokkot.</p></div>
|
||||
|
||||
@@ -473,30 +475,14 @@ Ha kitiltod a *!*@*.303AEBC6.IP-t, a *!*@1.2.*-ot bannolod.<br>
|
||||
Ez az információ hasznos lehet, amikor elhatározod, milyen széles legyen egy kitiltás.<br>
|
||||
<br>
|
||||
<b>Kiterjesztett ban típusok</b><br>
|
||||
|
||||
A kiterjesztett ban típusok ~<típus>:<paraméter> alakúak.<br>
|
||||
Ezek a típusok a hagyományos nick!user@host maszktól eltérõ kitiltásokat vagy felmentéseket tesznek lehetõvé.
|
||||
Arra is szolgálnak többek között, hogy pl. elnémítsanak felhasználókat.<br>
|
||||
<br>
|
||||
Az alábbiakban felsoroljuk, hogy mely ban típusok milyen mûveletekre vannak hatással:<br>
|
||||
<br>
|
||||
A kiterjesztett ban típusok ~[!]<típus>:<valami> alakúak. Jelenleg a következõ típusok használhatóak:<br>
|
||||
<table border=1>
|
||||
<tr><td>típus:</td><td>név</td><td>magyarázat:</td></tr>
|
||||
<tr><td>~q</td><td>némaság (quiet)</td><td>Az erre a banra illõ emberek beléphetnek, de nem beszélhetnek,
|
||||
hacsak nincs +v módjuk vagy annál magasabb. <i>Pl.: ~q:*!*@blah.blah.com</i></td></tr>
|
||||
<tr><td>~n</td><td>névváltás</td><td>Az erre a banra illõ emberek nem válthatnak nicknevet,
|
||||
hacsak nincs +v módjuk vagy annál magasabb. <i>Pl.: ~n:*!*@*.aol.com</i></td></tr>
|
||||
<tr><td>~j</td><td>join</td><td>Ha illik egy felhasználóra, nem léphet be a csatornára.
|
||||
Minden más megtehet, ha már be volt lépve a csatornára, mint pl. beszélni vagy nevet változtatni.
|
||||
<i>Pl.: ~j:*!*@*.aol.com</i><br>
|
||||
Hasznos lehet, ha meg akarjuk akadályozni egy adott internet-szolgáltatóhoz tartozó felhasználók belépését, miközben megengedjük, hogy a már belépettek szabadon beszélgethessenek/nevet váltsanak, például egy /INVITE után.</td></tr>
|
||||
</table>
|
||||
<br>
|
||||
Az alábbi ban típusok új feltétel használatára adnak lehetõséget:<br>
|
||||
<br>
|
||||
<table border=1>
|
||||
<tr><td>type:</td><td>név</td><td>magyarázat:</td></tr>
|
||||
<tr><td>~c</td><td>csatorna</td><td>A felhasználó nem léphet be a csatornára, ha belépett a megadott csatornára.
|
||||
<tr><td>~c</td><td>[elõtag]csatorna</td><td>Ha a felhasználó ezen a csatornán van, nem léphet be.
|
||||
Megadható egy elõtag is (+/%/@/&/~), ami azt jelenti, hogy csak akkor fog illeszkedni, ha a felhasználónak
|
||||
olyan vagy annál magasabb jogai vannak a megadott csatornán.
|
||||
<i>Pl.: +b ~c:#lamerek, +e ~c:@#megbizhatoak </i></td></tr>
|
||||
@@ -504,17 +490,9 @@ Az al
|
||||
<i>Pl.: ~r:*Stupid_bot_script*</i><br>
|
||||
MEGJEGYZÉS: az aláhúzás ('_') mind a szóközre (' ') és az aláhúzásra ('_') is illik, így ez a ban illik a
|
||||
'Stupid bot script v1.4'-re.</td></tr>
|
||||
<tr><td>~R</td><td>regisztrált</td><td>Ha egy felhasználó azonosította magát a services-ben (általában a NickServnél),
|
||||
és illeszkedik erre a nicknévre, akkor erre a banra is illeszkedik. Vagyis ez igazán csak a
|
||||
ban felmentésekre jó (+e).<br>
|
||||
Pl.: az <i>+e ~R:Nick</i> engedélyezi a belépést Nick számára, függetlenül más kitiltásoktól, amennyiben azonosította magát a NickServnél, és a Nick nevet használja.<br>
|
||||
</td></tr>
|
||||
</table>
|
||||
<br>
|
||||
Halmozni is lehet az elsõ csoportbeli kiterjesztett banokat a második csoportbeliekkel, pl. a <i>+b ~q:~c:#lamers</i>
|
||||
elnémít minden olyan felhasználót, aki a #lamers csatornára lépett be.<br>
|
||||
<br>
|
||||
Modulokkal további kiterjesztett ban típusok is bevezethetõk.<br>
|
||||
Ezek a ban típusok a csatornabeli kivétellistákon (+e) is támogatottak.<br>
|
||||
A modulok bõvíthetik is más típusokkal a kiterjesztett ban típusokat.<br>
|
||||
</p></div>
|
||||
|
||||
<p><font size="+2"><b>3.14 - A spamszûrõ</b></font><a name="feature_spamfilter"></a></p><div class="desc">
|
||||
@@ -551,9 +529,6 @@ Modulokkal tov
|
||||
<tr><td>dccblock</td><td>megjelöli a felhasználót DCC blokkolásra (nem küldhet DCC-ket)</td></tr>
|
||||
<tr valign="top"><td>viruschan</td><td>lelépteti a felhasználót minden csatornáról, belépteti a <tt>set::spamfilter::virus-help-channel</tt> csatornára, letilt minden parancsot,
|
||||
kivéve a PONG-ot, az ADMIN-t és a <tt>set::spamfilter::virus-help-channel</tt> csatornára küldött üzeneteket/értesítéseket</td></tr>
|
||||
<tr><td>warn</td><td>értesítést küld az IRCOpoknak (spamszûrõ snomask), és
|
||||
tájékoztatja a felhasználót, hogy az üzenetét lehallgatták. További lépéseket
|
||||
nem tesz, az üzenetet nem blokkolja.</td></tr>
|
||||
</table></td></tr>
|
||||
<tr valign="top"><td><b>[idõtartam]</b></td><td> A szûrõ által felvett *line-ok/shunok idõtartama, használj kötõjelet ('-') az alapértelmezéshez vagy a kihagyáshoz
|
||||
(pl.: ha a tevékenység = 'block')</td></tr>
|
||||
@@ -636,10 +611,10 @@ Egy t
|
||||
<tr><td>swedish</td><td>Svéd karakterek</td><td>iso8859-1 (latin1)</td></tr>
|
||||
<tr><td><b>latin1</b></td><td>catalan, danish, dutch, french, german, swiss-german, spanish, icelandic, italian, swedish</td><td>iso8859-1 (latin1)</td></tr>
|
||||
<tr><td>hungarian</td><td>Magyar karakterek</td><td>iso8859-2 (latin2), windows-1250</td></tr>
|
||||
<tr><td>polish-iso</td><td>Lengyel karakterek (megjegyzendõ, hogy a polish-w1250 gyakoribb!)</td><td>iso8859-2 (latin2)</td></tr>
|
||||
<tr><td>polish</td><td>Lengyel karakterek</td><td>iso8859-2 (latin2)</td></tr>
|
||||
<tr><td>romanian</td><td>Román karakterek</td><td>iso8859-2 (latin2), windows-1250, iso8859-16</td></tr>
|
||||
<tr><td><b>latin2</b></td><td>hungarian, polish-iso, romanian</td><td>iso8859-2 (latin2)</td></tr>
|
||||
<tr><td>polish-w1250</td><td>Lengyel karakterek, windowsos változat</td><td>windows-1250</td></tr>
|
||||
<tr><td><b>latin2</b></td><td>hungarian, polish, romanian</td><td>iso8859-2 (latin2)</td></tr>
|
||||
<tr><td>polish-w1250</td><td>Lengyel karakterek, windowsos változat (sajnos gyakoribb, mint az iso)</td><td>windows-1250</td></tr>
|
||||
<tr><td>slovak-w1250</td><td>Szlovák karakterek, windowsos változat</td><td>windows-1250</td></tr>
|
||||
<tr><td>czech-w1250</td><td>Cseh karakterek, windowsos változat</td><td>windows-1250</td></tr>
|
||||
<tr><td><b>windows-1250</b></td><td>polish-w1250, slovak-w1250, czech-w1250, hungarian, romanian</td><td>windows-1250</td></tr>
|
||||
@@ -853,7 +828,6 @@ allow {
|
||||
class <kapcsolati-osztály>;
|
||||
password <kapcsolódási-jelszó> { <hitelesítés-típusa>; };
|
||||
maxperip <ip-nkénti-kapcsolatok-száma>;
|
||||
ipv6-clone-mask <bitek-száma>;
|
||||
redirect-server <szerver-az-átirányításhoz>;
|
||||
redirect-port <port-az-átirányításhoz>;
|
||||
options {
|
||||
@@ -884,16 +858,6 @@ allow {
|
||||
<p><b>maxperip</b> (optional, but recommended)<br>
|
||||
Meghatározza, hogy egy IP címrõl maximum hány kapcsolatot engedélyezzen (például: maxperip 4;).
|
||||
</p>
|
||||
<p id="allowblock_ipv6clonemask"><b>ipv6-clone-mask</b>
|
||||
(nem kötelezõ, alapértelmezés a <a href="#set_defaultipv6clonemask">set::default-ipv6-clone-mask</a>)<br />
|
||||
A klóndetektálást szabályozza. Ha két kliens különbözõ IPv6 címrõl kapcsolódik,
|
||||
de csak az utolsó néhány bit különbözik, majdnem garantált, hogy mindkét kliens
|
||||
valójában egy személy. Ez az opció csak az
|
||||
<a href="#allowblock_maxperip">allow::maxperip</a> kényszerítésére van hatással. Például ha 128-as értékûre állítod,
|
||||
akkor minden IPv6 cím egyedinek minõsül. A jelenlegi IP lefoglalási
|
||||
irányelv miatt javasolt, hogy a legtöbb általános <a href="#allowblock">allow blokk</a>
|
||||
a 64-es értéket használja.
|
||||
</p>
|
||||
<p><b>redirect-server</b> (szabadon választható)<br>
|
||||
Ha a kapcsolati osztály megtelt, továbbítja a felhasználókat erre a szerverre (ha a kliens támogatja [a mIRC 6 igen]).</p>
|
||||
<p><b>redirect-port</b> (szabadon választható)<br>
|
||||
@@ -974,8 +938,8 @@ listen *:6601 {
|
||||
<p>listen *:8067;<br>
|
||||
listen 213.12.31.126:6667;<br>
|
||||
listen *:6660-6669;</p></div>
|
||||
<p><font class="block_section">4.7 - </font><font id="operblock" class="block_name">Oper blokk</font>
|
||||
<font class="block_recommended">AJÁNLOTT</font> <font class="block_old">(Elõzõleg O:Line-ként ismert)</font><div class="desc">
|
||||
<p><font class="block_section">4.7 - </font><font class="block_name">Oper blokk</font>
|
||||
<font class="block_recommended">AJÁNLOTT</font> <font class="block_old">(Elõzõleg O:Line néven ismert)</font><a name="operblock"></a><div class="desc">
|
||||
</p>
|
||||
<p>
|
||||
<pre>oper <name> {
|
||||
@@ -1000,38 +964,10 @@ listen *:6601 {
|
||||
<p>Az oper blokkal IRC operátorokat állíthatsz be a szerveredhez. Az <b>oper::</b>
|
||||
értéke adja meg az /oper-hez a bejelentkezõ nevet. Az <b>oper::from::userhost</b>
|
||||
egy user@host maszk, amelyre a felhasználó kapcsolatának illenie kell. Megadhatsz
|
||||
egynél több hostmaszkot is úgy, hogy több oper::from::userhost-ot használsz.
|
||||
</p>
|
||||
<p id="operblock_password">Az <b>oper::password::</b> az a jelszó, amit az operátornak meg kell adnia.
|
||||
Az <b>oper::password::auth-type</b> segítségével megadhatjuk a hitelesítés módját ehhez a jelszóhoz. Ne adjunk meg <b>oper::password::auth-type</b>-ot egyszerû szöveg típusú jelszóhoz!
|
||||
Érvényes hitelesítési típusok: <tt>crypt</tt>, <tt>md5</tt>, <tt>sha1</tt>, <tt>ripemd160</tt>
|
||||
és <tt>sslclientcert</tt>. Bármelyiket is választjuk,
|
||||
az <b>oper::password::</b> értéke egy hash, amit az
|
||||
<a href="#cmd_mkpasswd">mkpasswd</a> segítségével generálunk.
|
||||
</p>
|
||||
<p id="operblock_password_sslclientcert">
|
||||
Az <tt>sslclientcert</tt> egy kivételes hitelesítési típus. Amikor ezt
|
||||
választjuk, az <b>oper::password::</b> értéke legyen egy fájl
|
||||
útvonal (az UnrealIRCd telepítési célkönyvtárához relatívan), mely
|
||||
tartalmaz egy PEM kódolású SSL tanúsítványt (a nyilvános tanúsítványt, nem
|
||||
pedig egy kulcsot). Ezzel biztosíthatjuk, hogy csak olyan IRC kliens kapcsolódhasson, aki:
|
||||
<ol>
|
||||
<li>SSL-lel kapcsolódik,</li>
|
||||
<li>benyújtja az egyezõ kliens tanúsítványt a kapcsolódáskor,</li>
|
||||
<li>hozzáférése van a tanúsítványhoz tartozó privát kulcshoz.</li>
|
||||
</ol>
|
||||
Természetesen ez a funkció igényli, hogy az UnrealIRCd SSL támogatással
|
||||
legyen fordítva. Továbbá, mivel az SSL tanúsítványokhoz tartozó jelszavak
|
||||
mindig sokkal hosszabbak, mint egy normális emberi jelszó, és sokkal
|
||||
véletlenszerûbbek is, ez a legbiztonságosabb hitelesítési lehetõség. Ahhoz,
|
||||
hogy így jelentkezzünk be operátorként, miután a kliens SSL tanúsítványát
|
||||
megadtuk operátori jelszóként, elég meggyõzõdni arról, hogy a kliens helyesen
|
||||
lett beállítva, és adjuk ki az <pre>/oper <név> :</pre> parancsot. Az <tt>sslclientcert</tt>
|
||||
hitelesítési típust felhasználhatjuk
|
||||
a <a href="#linkblock_passwordreceive">link::password-receive</a>
|
||||
direktívában is biztonságos <a href="#linkblock">link blokkokra</a>.
|
||||
</ol>
|
||||
</p>
|
||||
egynél több hostmaszkot is úgy, hogy több oper::from::userhost-ot használsz. Az <b>oper::password</b>
|
||||
az a jelszó, amit a felhasználónak meg kell adnia, az oper::password:: segítségével kódolhatod
|
||||
a jelszót, érvényes hitelesítési típusok: crypt, md5, sha1, ripemd-160. Ha csak egyszerû szöveg
|
||||
típusú jelszót szeretnél megadni, az alblokkot kihagyhatod.</p>
|
||||
<p>Megjegyzendõ, hogy MIND a bejelentkezõ név és jelszó a kis- és nagybetûkre érzékenyek.</p>
|
||||
<p>Az <b>oper::class</b> direktíva meghatározza azt a már létezõ (a konfigurációban ezen blokk
|
||||
elõtt beállított) osztálynevet, amit az oper blokk használ.</p>
|
||||
@@ -1039,7 +975,7 @@ listen *:6601 {
|
||||
használni, pl. OAa, használd a <i>flags <flagek></i> formát, ha pedig az új stílust,
|
||||
pl. services-admin, akkor a <i>flags { <flag>; }</i> módszert. Az alábbiakban látható
|
||||
a flagek listája (mindkét formában) és amit csinálnak.</p>
|
||||
<table width="75%" border="1" id="operblock_flags">
|
||||
<table width="75%" border="1">
|
||||
<tr>
|
||||
<td width="10%"><div align="center"><b>Régi flag</b></div></td>
|
||||
<td width="16%"><div align="center"><b>Új flag</b></div></td>
|
||||
@@ -1456,9 +1392,10 @@ log <f
|
||||
<table border=0>
|
||||
<tr><td>errors</td><td>nyilvánvaló</td></tr>
|
||||
<tr><td>kills</td><td>naplózza a /kill értesítéseket</td></tr>
|
||||
<tr><td>tkl</td><td>naplózza a *line-okat (/kline, /zline, etc), a shunokat és a spamszûrõket (hozzáadás/törlés/lejárat)</td></tr>
|
||||
<tr><td>tkl</td><td>naplózza a *line-okat, a shunokat és a spamszûrõket (hozzáadás/törlés/lejárat)</td></tr>
|
||||
<tr><td>connects</td><td>naplózza a felhasználói kapcsolódásokat/kilépéseket</td></tr>
|
||||
<tr><td>server-connects</td><td>naplózza a szerverek kapcsolódásait/kilépéseit</td></tr>
|
||||
<tr><td>kline</td><td>naplózza a /kline használatokat</td></tr>
|
||||
<tr><td>oper</td><td>naplózza az operelési kísérleteket (a sikerteleneket és a sikereseket is)</td></tr>
|
||||
<tr><td>sadmin-commands</td><td>naplózza a /sa* (samode, sajoin, sapart stb.) használatokat</td></tr>
|
||||
<tr><td>chg-commands</td><td>naplózza a /chg* (chghost, chgname, chgident stb.) használatokat</td></tr>
|
||||
@@ -1475,6 +1412,7 @@ log ircd.log {
|
||||
errors;
|
||||
kills;
|
||||
oper;
|
||||
kline;
|
||||
tkl;
|
||||
};
|
||||
};
|
||||
@@ -1654,7 +1592,7 @@ ban version {
|
||||
};</pre>
|
||||
</p>
|
||||
<p></p></div>
|
||||
<p><font class="block_section">4.19 - </font><font class="block_name">Ban kivétel blokk</font>
|
||||
<p><font class="block_section">4.19 - </font><font class="block_name">Ban exceptions blokk</font>
|
||||
<font class="block_optional">SZABADON VÁLASZTHATÓ</font> <font class="block_old">(Elõzõleg E:Line néven ismert)</font><a name="banexceptionblock"></a><div class="desc">
|
||||
</p>
|
||||
<p>Szintaktika:<br>
|
||||
@@ -1662,19 +1600,17 @@ ban version {
|
||||
except ban {
|
||||
mask <hostmaszk>;
|
||||
};</pre></p>
|
||||
<p>Az except ban blokkal határozhatjuk meg, mely user@host-ok bírálhatnak felül egy szélesebb maszkra
|
||||
beállított ban { } blokkot vagy KLINE/ZLINE kitiltást. Hasznos, ha egy internet-szolgáltató ki van tiltva, de
|
||||
bizonyos felhasználók kapcsolódását még mindig szeretnénk onnan engedélyezni. Az except::mask direktíva
|
||||
<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
|
||||
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>MEGJEGYZÉS: Ha egy hosztot teljesen fel akarunk menteni mindenfajta lehetséges ban alól
|
||||
(kivéve a spamszûrõt), akkor szükségünk van 'except ban' és 'except tkl' blokkokra is.</p>
|
||||
<p>Példa:<br>
|
||||
<pre>
|
||||
except ban {
|
||||
mask identnev@sajat.szolgaltatom.com;
|
||||
};</pre></p>
|
||||
<p></p></div>
|
||||
<p><font class="block_section">4.20 - </font><font class="block_name">TKL kivétel blokk</font>
|
||||
<p><font class="block_section">4.20 - </font><font class="block_name">TKL exceptions blokk</font>
|
||||
<font class="block_optional">SZABADON VÁLASZTHATÓ</font><a name="tklexceptionblock"></a><div class="desc">
|
||||
</p>
|
||||
<p>Szintaktika:<br>
|
||||
@@ -1693,11 +1629,9 @@ except tkl {
|
||||
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:
|
||||
gline, gzline, qline, gqline, shun és all, amelyek kivételt képeznek a Gline-okra,
|
||||
globális Zline-okra, Qline-okra, globális Qline-okra, shunokra, valamint minden banra, kivéve
|
||||
a KLINE/ZLINE-okat. Ha a type {} formátumot használjuk, több típust is megadhatunk.</p>
|
||||
<p>MEGJEGYZÉS: Ha egy hosztot fel akarunk menteni mindenfajta lehetséges ban alól
|
||||
(kivéve a spamszûrõt), akkor szükségünk van 'except ban' és 'except tkl' blokkra is.</p>
|
||||
gline, gzline, qline, gqline és shun, amelyek kivételt képeznek a Gline-okra, globális Zline-okra,
|
||||
Qline-okra, globális Qline-okra és shunokra. Ha a type {} formátumot használod,
|
||||
több típust is megadhatsz.</p>
|
||||
<p>Példa:<br>
|
||||
<pre>
|
||||
except tkl {
|
||||
@@ -1705,7 +1639,7 @@ except tkl {
|
||||
type gline;
|
||||
};</pre></p>
|
||||
<p></p></div>
|
||||
<p><font class="block_section">4.21 - </font><font class="block_name">Throttle kivétel blokk</font>
|
||||
<p><font class="block_section">4.21 - </font><font class="block_name">Throttle Exceptions blokk</font>
|
||||
<font class="block_optional">SZABADON VÁLASZTHATÓ</font> <a name="throttleexceptionblock"></a>
|
||||
</p><div class="desc">
|
||||
<p>Szintaktika:<br>
|
||||
@@ -1933,23 +1867,17 @@ badword <t
|
||||
replace <csereszöveg>;
|
||||
action <replace|block>;
|
||||
};</pre></p>
|
||||
<p>A badword blokkal szerkesztheted azt a listát, melyet a "csúnya szavak" szûrésére használ
|
||||
a +G felhasználói és csatornamód. A <b>badword::</b> meghatározza a csúnyaszó típusát, ami
|
||||
eldönti, milyen üzenetekre vonatkozik ez a csúnyaszó szûrõ. Az érvényes típusok az alábbiak:</p>
|
||||
<ul>
|
||||
<li>A <tt>channel</tt> a +G módú csatonán szûr.</li>
|
||||
<li>A <tt>message</tt> olyan privát üzenetekben szûr (nem csatornára küldött üzenetekben), melyeket egy +G módú felhasználó küldött.</li>
|
||||
<li>A <tt>quit</tt> minden kilépõ üzenetet cenzúrázza.</li>
|
||||
<li>Az <tt>all</tt> a fenti három helyzet mindegyikére vonatkozik.</li>
|
||||
</ul>
|
||||
<p>
|
||||
A <b>badword::word</b> lehet egy egyszerû szó vagy reguláris kifejezés arra, hogy mire keressünk. A
|
||||
<b>badword::replace</b> az, amire a találatot cseréljük. Ha a <b>badword::replace</b>-t
|
||||
kihagyjuk, a csereszöveg <censored> lesz. A <b>badword::action</b> megmondja,
|
||||
mi legyen a teendõ, ha egy csúnya szóra találat van. Ha az értéke <code>replace</code>
|
||||
csere történik; ha <code>block</code>, az egész üzenet blokkolva lesz. Ha nem adsz meg
|
||||
<b>badword::action</b>-t, a <code>replace</code> lesz feltételezve.</p>
|
||||
<p>Példa:<br />
|
||||
<p>A badword blokkal kezelheted a +G felhasználói és csatornamódhoz használt, "csúnya szavak"
|
||||
szûrésére szolgáló listát. A badword:: meghatározza csúnya szó a típust; érvényes típusok a
|
||||
channel, message, quit és all. A channel a csatornabeli +G listára vonatkozik, a message a
|
||||
felhasználói +G listára, a quit a kilépõ üzeneteket cenzúrázza, végül az all mindhárom listára
|
||||
felveszi a csúnya szót. A badword::word lehet egy egyszerû (rész)szó vagy egy reguláris
|
||||
kifejezés, amire a keresést végzi a szerver. A badword::replace az, amire a találatot
|
||||
cseréljük. Ha a badword::replace-t kihagyod, a szó a <censored>-ra lesz cserélve.
|
||||
A badword::action megmondja, mi legyen a teendõ, ha egy csúnya szóra találat van. Ha replace
|
||||
az értéke, csere történik; ha block, az egész üzenet blokkolva lesz. Ha nem adsz meg
|
||||
badword::action-t, a replace lesz feltételezve.</p>
|
||||
<p>Példa:<br>
|
||||
<pre>
|
||||
badword channel {
|
||||
word szar;
|
||||
@@ -1977,8 +1905,8 @@ ulines {
|
||||
stats.sajátnet.com;
|
||||
};</pre></p>
|
||||
<p></p></div>
|
||||
<p id="linkblock"><font class="block_section">4.31 - </font><font class="block_name">Link blokk</font>
|
||||
<font class="block_optional">SZABADON VÁLASZTHATÓ</font> <font class="block_old">(Elõzõleg C/N/H:Line-okként ismert)</font>
|
||||
<p><font class="block_section">4.31 - </font><font class="block_name">Link blokk</font>
|
||||
<font class="block_optional">SZABADON VÁLASZTHATÓ</font> <font class="block_old">(Elõzõleg C/N/H:Line-okként ismert)</font><a name="linkblock"></a>
|
||||
</p><div class="desc">
|
||||
<p>Szintaktika:<br>
|
||||
<pre>
|
||||
@@ -2027,13 +1955,10 @@ link <szervern
|
||||
<p><b>password-connect</b><br>
|
||||
A távoli szerverre kapcsolódáskor használt jelszó; egyszerû szövegnek kell lennie.
|
||||
</p>
|
||||
<p id="linkblock_passwordreceive"><b>password-receive</b><br> A beérkezõ linkek érvényesítéséhez
|
||||
használt jelszó. Hasonló módon titkosítható, mint
|
||||
az <a href="#operblock_password"><b>oper::password</b></a>.
|
||||
Még az is megtehetõ, hogy
|
||||
a <a href="#operblock_password_sslclientcert"><tt>sslclientcert</tt></a>
|
||||
hitelesítési típust használjuk. Sõt, ez erõsen ajánlott is, mivel fényévekkel
|
||||
jobban ellenáll a brute-force támadásoknak.
|
||||
<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 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 egyszerre több szervert is linkelhet, míg a leafnek csak egy linkje lehet... hozzád.
|
||||
@@ -2101,34 +2026,18 @@ alias <n
|
||||
type <álparancs-típusa>;
|
||||
spamfilter <yes|no>;
|
||||
};</pre></p>
|
||||
<p>(Megjegyzendõ, hogy a <span class="inline_pre"><name></span> az "<b>alias::</b>" használatára utal.)</p>
|
||||
<p>(Megjegyzés: lásd még az <a href="#includedirective">include</a> direktívát az UnrealIRCd szabványos álparancs fájljairól!)</p>
|
||||
<p>Az alias blokk [szabványos álparancsokra] lehetõvé teszi, hogy parancsokat továbbítsunk egy felhasználóhoz,
|
||||
például a /chanserv üzenetet küld a chanserv felhasználónak.
|
||||
</p>
|
||||
<ul>
|
||||
<li>
|
||||
Az <b>alias::</b> megadja az álparancs nevét (pl.: chanserv).
|
||||
</li>
|
||||
<li>
|
||||
Az <b>alias::target</b> a továbbítás célpontjául szolgáló nick- vagy csatornanév. Ha az <b>alias::</b>
|
||||
értéke ugyanannak adódik, mint a továbbítási célpont, az <b>alias::target</b> elhagyható.
|
||||
</li>
|
||||
<li>
|
||||
Az <b>alias::type</b> meghatározza az álparancs típusát; érvényes típusok:
|
||||
<ul>
|
||||
<li><span class="inline_pre">services</span> (a felhasználó a <a href="#set-services-server">szolgáltatás szerveren</a> van),</li>
|
||||
<li><span class="inline_pre">stats</span> (a felhasználó a <a href="#set-stats-server">statisztikai szerveren</a> van),</li>
|
||||
<li><span class="inline_pre">normal</span> (a felhasználó egy közönséges felhasználó bármilyen szerveren),</li>
|
||||
<li><span class="inline_pre">channel</span> (a célpont egy csatornanév), és</li>
|
||||
<li><span class="inline_pre">command</span> (ez nem egy "szabványos álparancs", lásd <a href="#aliasblock-command">lentebb</a>).</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
Az <b>alias::spamfilter</b> (nem kötelezõ) "yes"-re állításával bekapcsolható a spamszûrés erre az álparancsra (az alapértelmezés 'no').
|
||||
</li>
|
||||
</ul>
|
||||
<p id="aliasblock-command">Szintaktika [formázott álparancsokra]:<br>
|
||||
<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ítsunk egy
|
||||
felhasználóhoz, például hogy a /chanserv üzenetet küldjön a chanserv felhasználónak.
|
||||
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::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 <név> {
|
||||
/* Felhasználóknak/csatornára küldendõ álparancsokra */
|
||||
@@ -2150,49 +2059,25 @@ alias <n
|
||||
type command;
|
||||
spamfilter <yes|no>;
|
||||
};</pre></p>
|
||||
<p>
|
||||
Amikor az alias blokk <b>alias::type</b> direktíváját <span class="inline_pre">command</span> értékûre állítjuk
|
||||
a <a href="#aliasblock-command">fent</a> mutatottak szerint, formázott álparancs lesz belõle.
|
||||
Az ebben a formában használt alias blokk sokkal rugalmasabb.
|
||||
Például készíthetünk vele egy /identify nevû álparancsot.
|
||||
</p>
|
||||
<ul>
|
||||
<li>
|
||||
Az <b>alias::</b> az álparancs neve, ugyanúgy, mint a szabványos álparancs blokkoknál
|
||||
(lásd <a href="#aliasblock">fentebb</a>).
|
||||
</li>
|
||||
<li>
|
||||
Az <b>alias::format</b> blokkok értékei <a href="#regex">reguláris kifejezések</a>, melyek az álparancs paramétereiként
|
||||
megadott szöveggel való összehasonlítás útján döntik el, hogy mely <b>alias::format</b>
|
||||
blokk albejegyzései legyenek használatban. Eképpen megadhatunk több <b>alias::format</b> blokkot is, hogy a parancs
|
||||
különbözõ dolgokat tegyen a neki küldött szövegtõl függõen.
|
||||
</li>
|
||||
<li>
|
||||
Az <b>alias::format::target</b> az álparancs továbbítási célpontja.
|
||||
Nem használjuk, ha az <b>alias::format::type</b> értéke "<span class="inline_pre">real</span>" (valódi álparancs).
|
||||
</li>
|
||||
<li>
|
||||
Az <b>alias::format::type</b> a továbbítási célpont típusát
|
||||
adja meg.
|
||||
A <a href="#aliasblock">szabványos álparancsok szintaktikájában</a> megadott típusokon kívül megengedett még a "<span class="inline_pre">real</span>"
|
||||
is, ha "valódi álparancsot" szeretnénk ("valódi álparancsok" alatt olyan álparancsot értünk,
|
||||
amely újraírható PRIVMSG-tõl eltérõ parancsra).
|
||||
</li>
|
||||
<li>
|
||||
Az <b>alias::format::parameters</b> ("valódi álparancsokra") megmondja, hogy milyen
|
||||
szöveg legyen elküldve a felhasználóhoz. Ahhoz, hogy az álparancshoz küldött paraméterek
|
||||
egyikére hivatkozzunk, írjunk egy <span class="inline_pre">%</span> jelet egy azt követõ számmal!
|
||||
Például <span class="inline_pre">%1</span> az elsõ paraméter. Lehetõség van arra is,
|
||||
hogy egy adott sorszámú paramétertõl kezdve az üzenet végéig tartó összes paraméterre hivatkozzunk, ehhez írjunk be egy <span class="inline_pre">%</span>
|
||||
jelet, majd azt követõ számot, és egy <span class="inline_pre">-</span> jelet! Például
|
||||
a <span class="inline_pre">%2-</span> visszaadja az összes paramétert a másodiktól kezdve
|
||||
az utolsóig. További különleges célt szolgál még az <span class="inline_pre">%n</span> is, amely
|
||||
helyettesíti annak a felhasználónak a nevét, aki kiadta a parancsot.
|
||||
</li>
|
||||
</ul>
|
||||
<p>
|
||||
Példákat a formázott álparancsokra vonatkozóan a doc/example.conf-ban találunk.
|
||||
</p>
|
||||
<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-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,
|
||||
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>
|
||||
@@ -2332,8 +2217,8 @@ Majd az unrealircd.conf-ba tegy
|
||||
};</pre></p>
|
||||
</div>
|
||||
|
||||
<p id="setblock"><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 ill. hálózati fájlként ismert)</font>
|
||||
<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
|
||||
fájlunk szokott lenni. Egyszerveres hálózatokon, inkább, mint hogy legyen 3 fájlod,
|
||||
@@ -2404,9 +2289,9 @@ set {
|
||||
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 funkciót is.</p>
|
||||
<p><font class="set">set::level-on-join <none|voice|halfop|op|protect|owner>;</font><br>
|
||||
Milyen módot kapjon az a felhasználó, aki elsõként lép be egy csatornára. Az
|
||||
alapértelmezés 'op' (csatorna operátor).</p>
|
||||
<p><font class="set">set::level-on-join <op|none>;</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 <típusok|*></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 <csatornák>;</font><br>
|
||||
@@ -2497,25 +2382,6 @@ set {
|
||||
Engedélyezi a shunolt felhasználóknak a /part használatát.</p>
|
||||
<p><font class="set">set::options::fail-oper-warn;</font><br>
|
||||
Ha jelen van, a felhasználók értesülni fognak arról, hogy a sikertelen /oper-elési kísérletük naplózva lett.</p>
|
||||
<p><font class="set">set::options::allow-insane-bans;</font><br>
|
||||
Engedélyt ad az olyan õrülten széles banokra is, mint a /GLINE *@*.xx. Ezzel nagyon könnyen elõfordulhat, hogy
|
||||
véletlenül kitiltunk mindenkit a hálózatról, ezért csak nagyon óvatosan használjuk!</p>
|
||||
<p id="set_nopost_ban_action"><font class="set">set::nopost::ban-action</font> (igényli az <a href="#modules_m_nopost">m_nopost</a> modult)<br />
|
||||
Megmondja, mit tegyen az olyan felhasználókkal, akik HTTP POST parancsot próbálnak kiadni.
|
||||
Az engedélyezett értékek: kill, gline, gzline, kline, zline, shun és tempshun.
|
||||
Az alapértelmezett érték a kill. Ha valamelyik *line értéket vagy shun-t használjuk,
|
||||
fontos tudni, hogy azok a könnyen becsapható felhasználók, akiket egy XPS IRC spammoló támadásra kiállított webhely meglátogatására csaltak rá,
|
||||
a shun vagy *line jellegû tiltást az összes meglévõ kapcsolatukon
|
||||
tapasztalni fogják. Az alapértelmezett "kill" érték kivédi az ilyen jellegû baleseteket,
|
||||
de a *line használata — különösen a gzline-é — szükséges lehet bizonyos szituációkban.</p>
|
||||
<p id="set_nopost_ban_reason"><font class="set">set::nopost::ban-reason</font> (igényli az <a href="#modules_m_nopost">m_nopost</a> modult)<br />
|
||||
A kitiltás indoka, amikor az m_nopost killel vagy bannol egy felhasználót.</p>
|
||||
<p id="set_nopost_ban_time"><font class="set">set::nopost::ban-time</font> (igényli az <a href="#modules_m_nopost">m_nopost</a> modult)<br />
|
||||
Az m_nopost által beállított shunok, gline-ok, gzline-ok, kline-ok és zline-ok idõtartama.
|
||||
Az alapértelmezés 4h.</p>
|
||||
<p id="set_nopost_except_hosts"><font class="set">set::nopost::except-hosts</font> (igényli az <a href="#modules_m_nopost">m_nopost</a> modult)<br />
|
||||
Egy lista az m_nopost killjei és *-line-jai alóli kivételekrõl. Lehetõleg soha ne adjunk meg
|
||||
gazdanév maszkokat ebben az opcióban!</p>
|
||||
<p><font class="set">set::dns::timeout <idõérték>;</font><br>
|
||||
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",
|
||||
@@ -2534,16 +2400,10 @@ set {
|
||||
<p><font class="set">set::default-server <szervernév>;</font><br>
|
||||
Meghatározza, hogy mi legyen annak az alapértelmezett szervernek a neve, ahová legyenek utasítva
|
||||
a felhasználók, ha ez a szerver tele van.</p>
|
||||
<p id="set_defaultipv6clonemask">
|
||||
<font class="set">set::default-ipv6-clone-mask</font><br />
|
||||
Az alapértelmezett IPv6 klóndetektáló maszk. Lásd az
|
||||
<a href="#allowblock_ipv6clonemask">allow::ipv6-clone-mask</a> direktívát. Az alapértelmezett érték
|
||||
ehhez a beállításhoz 64.
|
||||
</p>
|
||||
<p id="set-services-server"><font class="set">set::services-server <szervernév>;</font><br>
|
||||
<p><font class="set">set::services-server <szervernév>;</font><br>
|
||||
Meghatározza azon szerver nevét, ahová a services botok kapcsolódtak. Kötelezõ;
|
||||
állíts be valami services.sajátnet.com-hoz hasonlóra, ha nincs servicesed.</p>
|
||||
<p id="set-stats-server"><font class="set">set::stats-server <szervernév>;</font><br>
|
||||
<p><font class="set">set::stats-server <szervernév>;</font><br>
|
||||
Beállítja azon szerver nevét, ahol a statisztikai bot tartozkodik. Ha nem fut statisztikai szerver,
|
||||
ez az érték kihagyható.</p>
|
||||
<p><font class="set">set::help-channel <hálózati-segélycsatorna>;</font><br>
|
||||
@@ -2607,8 +2467,6 @@ set {
|
||||
Elutasítja az önaláírt tanúsítvánnyal rendelkezõ kliensek kapcsolódásait.</p>
|
||||
<p><font class="set">set::ssl::options::verify-certificate;</font><br>
|
||||
Megállapítja az SSL tanúsítvány érvényességét, mielõtt engedélyezi a kapcsolatot.</p>
|
||||
<p><font class="set">set::ssl::options::no-starttls;</font><br>
|
||||
Letiltja a STARTTLS-t. A STARTTLS megengedi a klienseknek az SSL használatát szokásos (nem SSL) portokon.</p>
|
||||
<p><font class="set">set::throttle::period <idõérték></font><br>
|
||||
Meghatározza, mennyi ideig kelljen egy felhasználónak várnia, mielõtt újrakapcsolódik több mint
|
||||
set::throttle::connections alkalommal.</p>
|
||||
@@ -2682,39 +2540,6 @@ AU). A lek
|
||||
<p><font class="set">set::watch-away-notification <yes|no></font><br>
|
||||
Engedélyezi vagy letiltja az AWAY értesítéseket a WATCH-ban. Az alapértelmezés "yes".</p>
|
||||
<p></p> </div>
|
||||
<p id="filesblock"><font class="block_section">4.38 - </font><font class="block_name">Files blokk</font>
|
||||
<font class="block_optional">SZABADON VÁLASZTHATÓ</font><div class="desc">
|
||||
</p>
|
||||
<p>
|
||||
Nem kell <a href="#tldblock">TLD blokkot</a> használnunk az MOTD-ket és a szabályokat leíró fájlok alapértelmezett helyeinek megadásához. Ez a blokk szabályozza az alapértelmezett beállításokat rájuk vonatkozóan a PID fájl és az irc.tune fájl mellett. Mindenre, ami itt nincs megadva, a <a href="#addtlfiles">További fájlok</a> szekcióban leírt alapértékek érvényesek.
|
||||
</p>
|
||||
<p>
|
||||
A relatív útvonalnevek az UnrealIRCD gyökérkönyvtárából kiindulva értendõek, amely rendszerint az <tt>unrealircd.conf</tt> fájlt tartalmazó könyvtár. Ez a blokk felhasználható arra, hogy több mint egy IRCd-t futtassunk ugyanabból a könyvtárból/gyökérbõl. Ilyen esetben minden egyes szerverhez állítsunk be legalább egy-egy PID fájlt, illetve tune fájlt!
|
||||
</p>
|
||||
<p>Szintaxis:<br>
|
||||
<pre>
|
||||
files {
|
||||
motd <motd fájl>;
|
||||
shortmotd <rövid motd fájl>;
|
||||
opermotd <motd fájl az operátoroknak>;
|
||||
svsmotd <motd fájl a szolgáltatásoknak>;
|
||||
botmotd <motd fájl a botoknak>;
|
||||
|
||||
rules <szabályokat leíró fájl>;
|
||||
|
||||
tunefile <behangoló fájl>;
|
||||
pidfile <PID fájl>;
|
||||
};
|
||||
</pre></p>
|
||||
<p>Példa:<br />
|
||||
<pre>
|
||||
files {
|
||||
motd /etc/motd;
|
||||
|
||||
pidfile /var/lib/run/unrealircd.pid;
|
||||
};
|
||||
</pre>
|
||||
</p>
|
||||
<p><b><font size="+2">5 – További fájlok<a name="addtlfiles"></a>
|
||||
</font></b></p><div class="desc">
|
||||
A konfigurációs fájlok mellett az Unreal néhány egyéb fájllal is rendelkezik, mint pl. az MOTD (a nap üzenete),
|
||||
@@ -2854,10 +2679,6 @@ files {
|
||||
<td><div align="center">Q</div></td>
|
||||
<td>Csak U:Line-os szerverek rúghatnak ki felhasználókat</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><div align="center">r</div></td>
|
||||
<td>Ez a csatorna regisztrált (csak szolgáltatás szerver állíthatja be)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><div align="center">R</div></td>
|
||||
<td>Egy regisztrált nicknév szükséges a belépéshez</td>
|
||||
@@ -2895,15 +2716,6 @@ files {
|
||||
<td><div align="center">z</div></td>
|
||||
<td>Csak titkos (SSL) kapcsolatú kliensek léphetnek be</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><div align="center">Z</div></td>
|
||||
<td>A szerver állítja be annak a jelzésére, hogy a csatornán lévõ felhasználók mindegyike titkosított (SSL)
|
||||
kapcsolaton van. Csak akkor aktív, ha a +z is be van állítva. Az ULine-okat (pl.: BotServ) figyelmen kívül
|
||||
hagyja a "nem biztonságos felhasználók" számlálásakor. Az továbbra is a szerver
|
||||
adminokra van bízva, hogy biztonságos, szerverek közötti kapcsolatokat hozzanak létre (amit
|
||||
SSL segítségével tehetnek meg, vagy akár VPN-nel, loopback interfésszel, kvantum-titkosítással stb.),
|
||||
az IRCd maga nem fogja, ill. nem tudja detektálni ezt.</td>
|
||||
</tr>
|
||||
</table>
|
||||
<p> </p>
|
||||
<table width="75%" border="1">
|
||||
@@ -3339,15 +3151,14 @@ tov
|
||||
<td>IRCop</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td height="39">rehash <szerver> <flagek></td>
|
||||
<td height="39">rehash <szerver> –<flagek></td>
|
||||
<td>Újratölti a szerver beállításfájlját. Szervernév megadásával távoli szerverek
|
||||
beállításait tölthetjük újra, ill. a -global flaggel a hálózat minden szerverén
|
||||
elvégezhetjük az újratöltést (mindkettõre csak NetAdminok jogosultak). Néhány további flag is rendelkezésre áll. Ezek
|
||||
beállításait töltheted újra. Néhány flag is rendelkezésre áll. Ezek
|
||||
a következõk:<br>
|
||||
-dns - Újrainicializálja és újratölti a névfeloldót<br>
|
||||
-motd - Csak az összes MOTD, BOTMOTD, OPERMOTD és RULES fájlt töltse újra (beleértve a tld{} blokkbelieket is)<br>
|
||||
-motd - Csak az összes MOTD és RULES fájlt töltse újra (a tld {}-ket is beleértve)<br>
|
||||
-opermotd - Csak az OPERMOTD fájlt töltse újra<br>
|
||||
-botmotd - Csak a BOTMOTD fájlt töltse újra<br>
|
||||
-garbage - Kikényszeríti a szemétgyûjtést<br>
|
||||
-ssl - Újratölti az SSL tanúsítványokat<br>
|
||||
<td>IRCop</td>
|
||||
</tr>
|
||||
<tr>
|
||||
@@ -3469,20 +3280,12 @@ tov
|
||||
</tr>
|
||||
<tr>
|
||||
<td height="36">addline <szöveg><br></td>
|
||||
<td>A megadott szöveget hozzáfûzi az unrealircd.conf-hoz. Az az unrealircd-3.2.9 óta
|
||||
ennek a parancsnak a használatához be kell töltenünk az m_addline modult.<br></td>
|
||||
<td>Lehetõséget ad arra, hogy sorokat fûzz az unrealircd.conf-hoz.<br></td>
|
||||
<td>IRCop</td>
|
||||
</tr>
|
||||
<tr id="cmd_mkpasswd">
|
||||
<td height="36">mkpasswd <hitelesítés-típusa> <jelszó><br></td>
|
||||
<td>Titkosítja a megadott <jelszót> a <hitelesítés-típusa> típusú hasító módszerrel. Lehetséges hasító módszerek:
|
||||
<ul>
|
||||
<li>crypt [<em>Windows alatti támogatáshoz SSL szükséges</em>]</li>
|
||||
<li>md5</li>
|
||||
<li>sha1 [<em>SSL-t igényel</em>]</li>
|
||||
<li>ripemd160 [<em>SSL-t igényel</em>]</li>
|
||||
</ul>
|
||||
<br></td>
|
||||
<tr>
|
||||
<td height="36">mkpasswd <jelszó><br></td>
|
||||
<td>Titkosít egy tiszta szövegû jelszót, hogy betehesd az unrealircd.conf-ba.<br></td>
|
||||
<td>IRCop</td>
|
||||
</tr>
|
||||
<tr>
|
||||
@@ -3616,14 +3419,13 @@ Tov
|
||||
gondoskodj, hogy a biztonsági mentéseid is megkapják a megfelelõ engedélybeállításokat. (Elég gyakran megesik, hogy minden
|
||||
biztonságos, mégis megbújik valahol egy mindenki számára olvasható mentes.tar.gz.)<br>
|
||||
<br>
|
||||
Erõsen ajánlott az is, hogy ahol csak lehetséges, használj <a href="#passwords" title="Password Types">titkosított jelszavakat</a>. Ha OpenSSL támogatással
|
||||
Erõsen ajánlott az is, hogy használj titkosított jelszavakat, ahol csak lehetséges. Ha OpenSSL támogatással
|
||||
fordítasz (és így is teszel, mivel érdekel téged a biztonság, igaz?), akkor javaslom, hogy
|
||||
titkosítsd a jelszavaidat <i>sha1</i> vagy <i>ripemd160</i> kódolással, különben <i>md5</i>-tel. Továbbá, ha
|
||||
még mindig vannak Unreal3.2.1 vagy késõbbi verziókból megmaradt titkosított (oper) blokkjaid, azt tanácsolom, hogy
|
||||
kódold újra ezeket (csak futtasd újra az /mkpasswd parancsot), mert a 3.2.1 bevezetett néhány számottevõ,
|
||||
feltörés elleni elõrelépést (alapvetõen az aktív feltöréseket 14-szeresen lelassítja, ezáltal lehetetlenné teszi
|
||||
a tárolt/nyílt/titkosított szöveges feltöréseket).
|
||||
<br>
|
||||
Ennek ellenére vedd figyelembe, hogy ez csak "egy újabb szintje a biztonságnak", mivel ha gyenge
|
||||
jelszavaid vannak, még mindig feltörhetõek viszonylag könnyen, és ha valamely támadónak sikerül megszereznie
|
||||
a konfigurációs fájlodat, rendszerint más érdekes dolgokat is talál benne, amelyek segítségére lehetnek,
|
||||
@@ -3725,7 +3527,7 @@ f
|
||||
(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, amit határozottan érdemes megtenned, ez pedig, hogy MINDIG HASZNÁLD A LEGFRISSEBB VERZIÓT, és
|
||||
jelentkezz fel az <a href="http://lists.sourceforge.net/mailman/listinfo/unreal-notify" target="_blank">unreal-notify levelezõlistára</a> most rögtön,
|
||||
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 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>
|
||||
@@ -3739,27 +3541,11 @@ Minden, amit itt elmagyar
|
||||
Nagyon sokan nem is törõdnek a biztonsággal, egészen addíg, amíg bajba nem kerülnek. Próbáld ezt elkerülni. :)
|
||||
</div></p>
|
||||
|
||||
|
||||
<p><font size="+2"><b>9 – 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>
|
||||
<p></p>
|
||||
|
||||
<p id="modules"><font size="+2"><b>10 – Modulok</b></font></p>
|
||||
<div class="desc">
|
||||
<p>Az alábbiakban bemutatunk néhány modult, melyeket egybecsomagoltunk az
|
||||
UnrealIRCd-vel. Jelen pillanatban sajnos csak egy ilyen modul van
|
||||
dokumentálva.</p>
|
||||
</div>
|
||||
<p id="modules_m_nopost"><font size="+2"><b>10.1 <a href="#modules_m_nopost">m_nopost</a></b></font><br />
|
||||
Ez a modul automatikusan bannol minden olyan felhasználót, aki HTTP-stílusú kéréseket próbál elküldeni.
|
||||
Ezt a modult Syzop írta válaszképpen azokra a Firefox XPS támadásokra, amelyeken keresztül
|
||||
az AJAX-képes böngészõk IRC spambotokként voltak képesek mûködni. Ahhoz, hogy kiválasszuk, mit tegyen az m_nopost,
|
||||
amikor egy ilyen kérést kap, állítsuk be a <a href="#set_nopost_ban_action">
|
||||
set::nopost::ban-action</a> és a <a href="#set_nopost_ban_time">set::nopost::ban-time</a>
|
||||
beállításokat (és barátaikat)!<br />
|
||||
Ez a modul az UnrealIRCd 3.2.9 óta új, és bele van fordítva a commands.so-ba. Ennélfogva
|
||||
a legtöbb esetben alapértelmezésben be van töltve.
|
||||
</p>
|
||||
|
||||
<p><font size="+2"><b>A Reguláris kifejezések<a name="regex"></a></b></font></p>
|
||||
<div class="desc"><p>Reguláris kifejezéseket sok helyen használunk az Unrealben, beleértve a csúnyaszavakat, spamszûrõket és álparancsokat. Ezek segítségével nagyon összetett mintaillesztést tudunk végezni. Néha "regexp"-ként vagy "regex"-ként hivatkozunk rájuk. Az Unreal a TRE reguláris kifejezés könyvtárat használja a regexeihez. Ez a rutinkönyvtár néhány nagyon összetett és haladó kifejezést is támogat, ami zavaró lehet. Az alábbi információk segítenek megérteni, hogyan mûködnek a regexek. Ha szakmaibb és részletesebb információk érdekelnek az Unreal által használt regexp szintaktikával kapcsolatban, látogassunk el a <a href="http://www.laurikari.net/tre/syntax.html" target="_new">TRE honlapjára</a>.</p></div>
|
||||
|
||||
|
||||
@@ -29,7 +29,7 @@ Dutch |
|
||||
<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.9-RC2</font><br>
|
||||
<font size="4">Version: 3.2.8</font><br>
|
||||
<b>Laatste documentatie wijziging:</b> 2009-01-03</div>
|
||||
|
||||
<br>
|
||||
@@ -42,7 +42,6 @@ Dutch |
|
||||
http://www.vulnscan.org/UnrealIRCd/unreal32docs.html</a> en een FAQ staat op
|
||||
<a href="http://www.vulnscan.org/UnrealIRCd/faq/" TARGET="_blank">http://www.vulnscan.org/UnrealIRCd/faq/</a>.
|
||||
</p>
|
||||
<p><font color="red">WARNING: The translation of this document is not up to date, the English version is more recent.</font></p>
|
||||
|
||||
<p><b>Geschikte browsers: </b><br>
|
||||
<ul>
|
||||
@@ -152,7 +151,7 @@ Dutch |
|
||||
<p>Lees dit document voordat je om hulp vraagt. We raden je ook ten zeerste aan de
|
||||
<a href="http://www.vulnscan.org/UnrealIRCd/faq/" target="_blank">FAQ</a> te lezen, omdat
|
||||
meer dan 80% van je problemen/vragen hierin behandeld worden. Wanneer je nog steeds hulp
|
||||
nodig hebt, kun je hulp vragen op irc.unrealircd.org (poort 6667), kanaal #unreal-support
|
||||
nodig hebt, kun je hulp vragen op irc.ircsystems.net (poort 6667), kanaal #unreal-support
|
||||
(Opmerking: We achten het nodig dat je de documentatie en de FAQ leest en we helpen alleen
|
||||
met UnrealIRCd, niet met Services!).
|
||||
Wanneer je een echte bug (zoals een crash) hebt gevonden, meldt deze dan op
|
||||
|
||||
+155
-351
@@ -4,16 +4,15 @@
|
||||
<title>UnrealIRCd - 3.2 - Официальная документация</title>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
|
||||
<style type="text/css"> .block_section { font-size: 24; font-weight: bold; }
|
||||
.block_name { font-size: 24; font-weight: bold; }
|
||||
.block_required { color: red; font-weight: bold; }
|
||||
.block_recommended { color: green; font-weight: bold; }
|
||||
.block_optional { color: blue; font-weight: bold; }
|
||||
.block_old { font-size: 14; }
|
||||
.set { font-weight: bold; }
|
||||
.desc { margin-left: 15px; }
|
||||
.inline_pre { font-family: monospace; font-style: normal; background-color: #eeeeee;}
|
||||
pre { font-family: monospace; font-style: normal; background-color: #eeeeee;}
|
||||
</style>
|
||||
.block_name { font-size: 24; font-weight: bold; }
|
||||
.block_required { color: red; font-weight: bold; }
|
||||
.block_recommended { color: green; font-weight: bold; }
|
||||
.block_optional { color: blue; font-weight: bold; }
|
||||
.block_old { font-size: 14; }
|
||||
.set { font-weight: bold; }
|
||||
.desc { margin-left: 15px; }
|
||||
pre { font: "times new roman"; font-style: normal; background-color: #eeeeee;}
|
||||
</style>
|
||||
<!-- $Id$ -->
|
||||
</head>
|
||||
<body>
|
||||
@@ -26,14 +25,15 @@
|
||||
<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">Версия: 3.2.9-RC2</font><br>
|
||||
<b>Последнее обновление:</b> 2010-05-17</div>
|
||||
<font size="4">Версия: 3.2.8</font><br>
|
||||
<b>Последнее обновление:</b> 2009-01-03</div>
|
||||
<br>
|
||||
<b>Главные программисты:</b> Stskeeps / codemastr / Syzop / Luke / aquanight /
|
||||
WolfSage<br>
|
||||
<b>Вкладчики:</b> McSkaf / Zogg / NiQuiL / assyrian / chasm / DrBin / llthangel
|
||||
/ Griever / nighthawk<br>
|
||||
<b>Документация:</b> CKnight^ / Syzop
|
||||
<br>
|
||||
<b>Главные программисты</b> Syzop<br>
|
||||
<b>Программисты:</b> binki<br>
|
||||
<b>Предыдущие программисты и вкладчики:</b> Stskeeps, codemastr, Luke, aquanight, WolfSage, McSkaf, Zogg,
|
||||
NiQuiL, assyrian, chasm, DrBin, llthangel, Griever, nighthawk<br>
|
||||
<b>Документация:</b> CKnight^ (начальная документация), Syzop (переписана большая часть), codemastr и множество вкладчиков<br>
|
||||
<b>Перевод:</b> <A href="mailto:Bock@bynets.org">Bock</A> / Slyder / DeathBaba
|
||||
/ Kirya<br>
|
||||
<p>Для просмотра данной документации, вы должны иметь совместимый браузер из
|
||||
@@ -42,6 +42,22 @@
|
||||
и ЧАВО (ЧАсто задаваемые ВОпросы): <a href="http://www.vulnscan.org/UnrealIRCd/faq/" target="_blank">
|
||||
http://www.vulnscan.org/UnrealIRCd/faq/</a>.
|
||||
</p>
|
||||
<p><b>Совместимые браузеры: </b>
|
||||
<br>
|
||||
<ul>
|
||||
<li>
|
||||
Opera 6.02
|
||||
<li>
|
||||
Microsoft Internet Explorer 6.X / 5.5
|
||||
<li>
|
||||
Netscape Navigator 6.X
|
||||
<li>
|
||||
Mozilla 1.2.X
|
||||
<li>
|
||||
Lynx (to a point)
|
||||
</li>
|
||||
</ul>
|
||||
<P></P>
|
||||
<p><font size="+2"><b>INDEX / Содержание</b></font><br>
|
||||
1. <A href="#IntroductionNotes">Введение</A><br>
|
||||
---1.1. <A href="#notesonolder">Замечания по обновлению/совместному использованию
|
||||
@@ -108,7 +124,6 @@
|
||||
---4.35. <A href="#spamfilter">Блок Spamfilter</A><br>
|
||||
---4.36. <A href="#cgiirc">Блок Cgiirc</A><br>
|
||||
---4.37. <A href="#setblock">Блок Set -=- (networks/unrealircd.conf)</A><br>
|
||||
---4.38. <a href="#filesblock">Блок Files</a><br />
|
||||
5. <A href="#addtlfiles">Дополнительные файлы</A><br>
|
||||
6. <A href="#userchannelmodes">Режимы пользователя и канала</A><br>
|
||||
7. <A href="#useropercommands">Команды пользователя и оператора</A><br>
|
||||
@@ -124,9 +139,7 @@
|
||||
---8.8. <A href="#secantiexploit">Защита против эксплоитов</A><br>
|
||||
---8.9. <A href="#secsummary">Итоги</A><br>
|
||||
9. <a href="http://www.vulnscan.org/UnrealIRCd/faq/" target="_blank">Часто
|
||||
задаваемые вопросы (ЧАВО)</a><br />
|
||||
10. <a href="#modules">Модули</a><br />
|
||||
---10.1. <a href="#modules_m_nopost">m_nopost</a><br />
|
||||
задаваемые вопросы (ЧАВО)</a><br>
|
||||
A. <A href="#regex">Регулярные выражения</A><br>
|
||||
---A.1. <A href="#regexlit">Литералы</A><br>
|
||||
---A.2. <A href="#regexdot">Оператор Точка</A><br>
|
||||
@@ -151,11 +164,10 @@
|
||||
<p>Пожалуйста, прочитайте это руководство прежде, чем задавать вопросы, а так же
|
||||
загляните в <a href="http://www.vulnscan.org/UnrealIRCd/faq/" target="_blank">ЧАВО</a>,
|
||||
так как 80% ваших вопросов/проблем уже описано в нём. Если вы всё же нуждаетесь
|
||||
в помощи, попросите поддержки на irc.unrealircd.org (port 6667) на канале
|
||||
в помощи, попросите поддержки на irc.ircsystems.net (port 6667) на канале
|
||||
#unreal-support (имейте в виду, что мы ТРЕБУЕМ, чтобы документация была
|
||||
прочитана, и мы помогаем только по UnrealIRCd, а не по сервисам!).
|
||||
Так же можете воспользоваться форумами <a href="http://forums.unrealircd.com/" TARGET="_blank">http://forums.unrealircd.com</a>.
|
||||
Если вы обнаружили реальный баг (например, аварийное завершение работы), сообщите об
|
||||
прочитана, и мы помогаем только по UnrealIRCd, а не по сервисам!). Если вы
|
||||
обнаружили реальный баг (например, аварийное завершение работы), сообщите об
|
||||
этом на <a href="http://bugs.unrealircd.org" target="_blank">http://bugs.unrealircd.org</a>.</p>
|
||||
</div>
|
||||
<p><font size="+2"><b>1.1 – Замечания по обновлению/совместному использованию версий
|
||||
@@ -199,7 +211,7 @@
|
||||
<li>
|
||||
Запустите программу установки новой версии Unreal.
|
||||
<li>
|
||||
Скопируйте старые конфигурационные файлы в новую папку.
|
||||
Скопируйте старые конфигурационные файлы в новую папку.
|
||||
</li>
|
||||
</ul>
|
||||
<p>Пожалуйста, проверьте/прочитайте .RELEASE.NOTES чтобы увидеть, что изменилось.
|
||||
@@ -222,7 +234,7 @@
|
||||
<li>
|
||||
OpenBSD (3.7, 3.8, 3.9)
|
||||
<li>
|
||||
Solaris (9, 10)
|
||||
Solaris (9, 10)
|
||||
</li>
|
||||
</ul>
|
||||
<li>
|
||||
@@ -233,7 +245,7 @@
|
||||
<li>
|
||||
Windows XP (Home, Pro)
|
||||
<li>
|
||||
Windows 2003
|
||||
Windows 2003
|
||||
</li>
|
||||
</ul>
|
||||
<li>
|
||||
@@ -246,7 +258,7 @@
|
||||
<li>
|
||||
amd64
|
||||
<li>
|
||||
alpha
|
||||
alpha
|
||||
</li>
|
||||
</ul>
|
||||
<br>
|
||||
@@ -271,8 +283,8 @@
|
||||
<li>
|
||||
make
|
||||
<li>
|
||||
Теперь создайте ваш unrealircd.conf и другие конфигурационные файлы так, как
|
||||
описано в разделе 4.
|
||||
Теперь создайте ваш unrealircd.conf и другие конфигурационные файлы так, как
|
||||
описано в разделе 4.
|
||||
</li>
|
||||
</ol>
|
||||
<p>Windows:<br>
|
||||
@@ -280,8 +292,8 @@
|
||||
<li>
|
||||
Запустите программу установки Unreal
|
||||
<li>
|
||||
Теперь создайте ваш unrealircd.conf и другие конфигурационные файлы так, как
|
||||
описано в разделе 4.
|
||||
Теперь создайте ваш unrealircd.conf и другие конфигурационные файлы так, как
|
||||
описано в разделе 4.
|
||||
</li>
|
||||
</ol>
|
||||
<P></P>
|
||||
@@ -318,21 +330,21 @@
|
||||
<p>Эти ключи ДОЛЖНЫ быть одинаковыми на ВСЕХ СЕРВЕРАХ в сети. Также ключи должны
|
||||
храниться в секрете, потому что возможно получить реальный хост, зная эти ключи
|
||||
(что делает режим +x бесполезным).</p>
|
||||
<P>Подсказка: Если вы используете *NIX, то у вас есть возможность создать
|
||||
новые ключи: запустите './unreal gencloak' в шелле, результатом выполнения
|
||||
<P>Подсказка: Если вы используете *NIX, то у вас есть возможность создать
|
||||
новые ключи: запустите './unreal gencloak' в шелле, результатом выполнения
|
||||
станет три строки сгенерированные случайно, которые вы сможете использовать в
|
||||
качестве ключей.</P>
|
||||
качестве ключей.</P>
|
||||
</div>
|
||||
<p><font size="+2"><b>3.2 - Модули</b></font><a name="feature_modules"></a></p>
|
||||
<div class="desc">
|
||||
<p>UnrealIRCd поддерживает модули, которые хороши тем, что:<br>
|
||||
- Вы можете загружать/перезагружать/выгружать их во время работы ircd (путём
|
||||
- Вы можете загружать/перезагружать/выгружать их во время работы ircd(путём
|
||||
команды /rehash). Это позволяет исправлять некоторые ошибки или добавлять новые
|
||||
возможности без перезапуска сервера!<br>
|
||||
- Сторонние люди могут создавать модули с новыми командами, режимами
|
||||
пользователей и каналов.<br>
|
||||
UnrealIRCd идёт только с <a href="#modules">некоторыми модулями</a>.
|
||||
Следите за модулями на www.unrealircd.com -> или используйте google.com для поиска сторонних модулей.<br>
|
||||
UnrealIRCd идёт только с некоторыми модулями. Следите на www.unrealircd.com
|
||||
-> modules или используйте google.com для поиска сторонних модулей.<br>
|
||||
<p>Вам необходимо загрузить как минимум два модуля, иначе вы не сможете запустить
|
||||
UnrealIRCd:<br>
|
||||
- модуль команд: commands.so (commands.dll в ОС Windows)<br>
|
||||
@@ -397,10 +409,10 @@
|
||||
писать <i>/helpop ?</i> и вместо <i>/helpop chmodes</i> надо писать <i>/helpop
|
||||
?chmodes</i> и т.д.</p>
|
||||
</div>
|
||||
<p id="feature_operaccesslevels"><font size="+2"><b>3.6 - Уровни доступа операторов</b></font>
|
||||
<p><font size="+2"><b>3.6 - Уровни доступа операторов</b></font><a name="feature_operaccesslevels"></a></p>
|
||||
<div class="desc">
|
||||
<p>В UnrealIRCd существует множество <a href="#operblock_flags">уровней привилегий операторов</a>.
|
||||
Вы можете давать им отдельные права (такие, как использование /gline), таким образом
|
||||
<p>В UnrealIRCd существует множество уровней привилегий операторов. Вы можете
|
||||
давать им отдельные права (такие, как использование /gline), таким образом
|
||||
оставляя каждому только те привилегии, которые ему необходимы.</p>
|
||||
<p>Эти привилегии контролируются флагами оператора в Oper-блоке, для получения
|
||||
подробной информации смотрите соответствующий блок конфигурационного файла и
|
||||
@@ -673,11 +685,7 @@
|
||||
устанавливать бан.<br>
|
||||
<br>
|
||||
<b>Расширенные типы бана</b><br>
|
||||
Расширенные типы бана имеют вид: ~[!]<тип>:<параметрgt;. Доступные типы:<br>
|
||||
Эти баны позволяют вам забанить (или сделать исключение), базируясь на вещах, отличных от
|
||||
традиционной маски nick!user@host. Так же есть поддержка таких вещей, как "молчание" пользователей.
|
||||
<br>
|
||||
Данные типы банов определяют последствия после их задействования:<br>
|
||||
Расширенные типы бана имеют вид: ~[!]<тип>:<stuff>. Доступные типы:<br>
|
||||
<table border="1">
|
||||
<tr>
|
||||
<td>тип:</td>
|
||||
@@ -696,19 +704,6 @@
|
||||
<td>Люди, попадающие под бан, не могут изменить ник, пока у них не будет +v или
|
||||
выше. <i>Пример: ~n:*!*@*.aol.com</i></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>~j</td>
|
||||
<td>вход</td>
|
||||
<td>Если пользователь подпадает, то не может зайти на канал.
|
||||
Однако, если он уже на канале, то он может говорить и менять свой ник.
|
||||
<i>Пример: ~j:*!*@*.aol.com</i><br>
|
||||
Может быть полезно для запрета подключений людей с одного провайдера,
|
||||
но если они уже на канале, то могут свободно общаться и менять ник, как будто после /INVITE.</td></tr>
|
||||
</table>
|
||||
<br>
|
||||
Эти типы банов вводят новый критерий для использования:<br>
|
||||
<br>
|
||||
<table border="1">
|
||||
<tr>
|
||||
<td>~c</td>
|
||||
<td>[префикс]канал</td>
|
||||
@@ -726,18 +721,9 @@
|
||||
ЗАМЕЧАНИЕ: Подчёркивание ('_') обозначает и пробел (' '), и подчёркивание
|
||||
('_'), поэтому, данный бан будет влиять и на 'Stupid bot script v1.4'.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>~R</td>
|
||||
<td>зарегестрирован</td>
|
||||
<td>Если пользователь идентифицирован на сервисах (обычно NickServ)
|
||||
и подпадает под ник, то бан сработает. Для данного типа бана есть только одно
|
||||
применение - в использовании для исключений (+e).<br>
|
||||
Пример: <i>+e ~R:Nick</i> позволяет Nick быть на канале, не смотря на другие баны,
|
||||
если он идентифицировался на NickServ и пользуется ником Nick.<br>
|
||||
</td></tr>
|
||||
|
||||
</table>
|
||||
Можно стекировать баны первого и второго вида. Например <i>+b ~q:~c:#lamers</i> заставит молчать всех, кто сидит на #lamers.<br>
|
||||
Данные типы бана поддерживаются и для листа с исключениями (+e).<br>
|
||||
Модули могут добавлять другие расширенные типы банов.<br>
|
||||
</p>
|
||||
</div>
|
||||
<p><font size="+2"><b>3.14 - Спамфильтр</b></font><a name="feature_spamfilter"></a></p>
|
||||
@@ -859,13 +845,6 @@
|
||||
set::spamfilter::virus-help-channel, отключает все команды кроме PONG, ADMIN, и
|
||||
сообщает/уведомляет об этом на set::spamfilter::virus-help-channel</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>warn</td>
|
||||
<td>посылает уведомление ирц-операторам (сномаска spamfilter) и уведомляет пользователя о том,
|
||||
что его сообщение было перехвачено. Никаких действией с пользователем не происходит,
|
||||
сообщение не блокируется.</td>
|
||||
</tr>
|
||||
|
||||
</table>
|
||||
</td>
|
||||
<tr vAlign="top">
|
||||
@@ -1030,8 +1009,8 @@
|
||||
<td>iso8859-2 (latin2), windows-1250</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>polish-iso</td>
|
||||
<td>Польская кодировка (учтите, что polish-w1250 более распостранена!) </td>
|
||||
<td>polish</td>
|
||||
<td>Польская кодировка</td>
|
||||
<td>iso8859-2 (latin2)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
@@ -1041,12 +1020,12 @@
|
||||
</tr>
|
||||
<tr>
|
||||
<td><b>latin2</b></td>
|
||||
<td>hungarian, polish-iso, romanian</td>
|
||||
<td>hungarian, polish, romanian</td>
|
||||
<td>iso8859-2 (latin2)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>polish-w1250</td>
|
||||
<td>Польская кодировка, windows вариант</td>
|
||||
<td>Польская кодировка, windows вариант (к сожалению, более общий, чем iso)</td>
|
||||
<td>windows-1250</td>
|
||||
</tr>
|
||||
<tr>
|
||||
@@ -1362,7 +1341,6 @@ class servers{
|
||||
class <класс-соединения>;
|
||||
password <пароль-на-соединение> { <тип-авторизации>; };
|
||||
maxperip <максимальное-количество-соединений-на-один-ip>;
|
||||
ipv6-clone-mask <количество-бит>;
|
||||
redirect-server <сервер-переадресации>;
|
||||
redirect-port <порт-переадресации>;
|
||||
options {
|
||||
@@ -1399,16 +1377,7 @@ class servers{
|
||||
<p><b>maxperip</b> (необязательно, но рекомендуется)<br>
|
||||
Позволяет указать, сколько соединений с одного IP разрешено на этот сервер
|
||||
(пример: maxperip 4;).
|
||||
</p>
|
||||
<p id="allowblock_ipv6clonemask"><b>ipv6-clone-mask</b>
|
||||
(опционально, по умолчанию <a href="#set_defaultipv6clonemask">set::default-ipv6-clone-mask</a>)<br />
|
||||
Данная опция позволяет контролировать обнаружение клонов. Если два клиента подключаются из двух разных адресов IPv6, но только последние пару
|
||||
бит отличаются, то это практически гарантия того, что оба клиента - одна персона.
|
||||
Данная опция применима только для <a href="#allowblock_maxperip">allow::maxperip</a>. К примеру, если вы укажете эту опцию в
|
||||
128, то каждый адрес IPv6 будет считаться уникальным. В соответствии с текущими политиками выделения пространства IP рекомендуется в
|
||||
<a href="#allowblock">allow block</a> использовать величину 64.
|
||||
</p>
|
||||
|
||||
</p>
|
||||
<p><b>redirect-server</b> (необязательно)<br>
|
||||
Если класс полон, перенаправляет пользователей на указанный сервер (если такое
|
||||
поддерживают клиенты [mIRC 6 поддерживает]).</p>
|
||||
@@ -1522,7 +1491,7 @@ allow {
|
||||
listen 213.12.31.126:6667;<br>
|
||||
listen *:6660-6669;</p>
|
||||
</div>
|
||||
<p><font class="block_section">4.7 - </font><font id="operblock" class="block_name">Oper блок</font>
|
||||
<p><font class="block_section">4.7 - </font><font class="block_name">Oper блок</font>
|
||||
<font class="block_recommended">РЕКОМЕНДОВАН</font> <font class="block_old">(Ранее
|
||||
известен как O:Line)</font><a name="operblock"></a>
|
||||
<div class="desc">
|
||||
@@ -1550,38 +1519,10 @@ allow {
|
||||
<p>Блок oper позволяет назначить IRC-операторов на вашем сервере. <b>oper::</b> определяет
|
||||
логин команды /oper. <b>oper::from::userhost</b> - это user@host маска, под
|
||||
которую должен попадать пользователь. Вы можете определить более, чем одну
|
||||
хостмаску в oper::from::userhost.
|
||||
</P>
|
||||
<p id="operblock_password"><b>oper::password</b> - пароль, который должен указать пользователь.
|
||||
<b>oper::password::auth-type</b> позволяет вам указать метод аутентификации для этого пароля.
|
||||
Если вы используете пароли открытым текстом, то не указывайте опцию <b>oper::password::auth-type</b>.
|
||||
Корректные методы аутентификации: <tt>crypt</tt>, <tt>md5</tt>, <tt>sha1</tt>,
|
||||
<tt>ripemd160</tt> и <tt>sslclientcert</tt>. Указание любого из этих методов означает, что
|
||||
значение <b>oper::password::</b> является сгенерированным хэшем (hash) при помощи
|
||||
<a href="#cmd_mkpasswd">mkpasswd</a>.
|
||||
</p>
|
||||
<p id="operblock_password_sslclientcert">
|
||||
<tt>sslclientcert</tt> исключительный тип авторизации. Если он указан в качестве авторизации,
|
||||
то <b>oper::password::</b> должен пыть путём к файлу (относительно директории
|
||||
установленного UnrealIRCd). Файл должен представлять собой PEM-закодированный
|
||||
сертификат SSL (естественно публичный сертификат, не ключ).
|
||||
Это значит, что только клиент IRC
|
||||
<ol>
|
||||
<li>подключён через SSL</li>
|
||||
<li>предоставил соответствующий сертификат клиента во время подключения</li>
|
||||
<li>имеет доступ к приватному ключу для данного сертификата</li>
|
||||
</ol>
|
||||
может получить оператора. Естественно, что эта опция требует поддержки SSL в UnrealIRCd.
|
||||
Так же учтите, что любой ключ, ассоциированный с сертификатом SSL гораздо длиннее
|
||||
нормального человеческого пароля и гораздо более случаен, чем самая безопаснейшая опция
|
||||
аутентификации. Для того, чтобы получить оператора, вы должны указать клиентский
|
||||
сертификат SSL как пароль оператора, убедиться, что IRC клиент настроен правильно, ввести
|
||||
<pre>/oper <name> :</pre>.
|
||||
Авторизация <tt>sslclientcert</tt> может использоваться так же и для
|
||||
<a href="#linkblock_passwordreceive">link::password-receive</a>
|
||||
в секции <a href="#linkblock">link block</a>.
|
||||
</ol>
|
||||
</p>
|
||||
хостмаску в oper::from::userhost. <b>oper::password</b> - пароль, который
|
||||
должен определить пользователь. oper::password:: позволяет определить метод
|
||||
аутентификации для данного пароля(crypt, md5, sha1 и ripemd-160). Если вы
|
||||
хотите использовать просто текстовый пароль, оставьте этот подблок пустым.</p>
|
||||
<p>Замечание: логин и пароль РЕГИСТРОЗАВИСИМЫ.</p>
|
||||
<p><b>oper::class</b> директива определяет имя уже существующего (в
|
||||
конфигурационном файле должен следовать перед oper-блоком) класса, который
|
||||
@@ -1591,7 +1532,7 @@ allow {
|
||||
флагов <flags>, если желаете использовать новый стиль, например,
|
||||
services-admin, тогда используйте метод флагов { <flag>; } . Ниже
|
||||
приведён список всех флагов (в обоих форматах) и что они обозначают.</p>
|
||||
<table width="75%" border="1" id="operblock_flags">
|
||||
<table width="75%" border="1">
|
||||
<tr>
|
||||
<td width="10%">
|
||||
<div align="center"><b>Старый флаг</b></div>
|
||||
@@ -2175,8 +2116,7 @@ loadmodule "modules/cloak.dll";
|
||||
</tr>
|
||||
<tr>
|
||||
<td>tkl</td>
|
||||
<td>информация о *lines (/kline, /zline и проч.), shuns и
|
||||
spamfilters (добавление/удаление/истекание срока)</td>
|
||||
<td>информация о *lines, shuns и spamfilters (добавление/удаление/истекание срока)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>connects</td>
|
||||
@@ -2219,6 +2159,7 @@ loadmodule "modules/cloak.dll";
|
||||
errors;
|
||||
kills;
|
||||
oper;
|
||||
kline;
|
||||
tkl;
|
||||
};
|
||||
};
|
||||
@@ -2435,13 +2376,9 @@ loadmodule "modules/cloak.dll";
|
||||
};</pre>
|
||||
<P></P>
|
||||
<p>Блок except ban позволяет определить user@host в качестве исключения для бана.
|
||||
Данный блок используется, если вы хотите забанить пользователей конкретного
|
||||
провайдера (блоком ban { } или KLINE/ZLINE), но так же хотите,
|
||||
чтобы определённые пользователи смогли подключиться. Директива except::mask
|
||||
Данный блок используется, если вы хотите забанить провайдера, но так же хотите,
|
||||
чтобы определённые пользователи могли присоединится. Директива except::mask
|
||||
определяет шаблон user@host для клиента, чтобы позволить ему присоединится.</p>
|
||||
<p>Замечание: Если вы желаете стопроцентно исключить хост от всех возможных банов
|
||||
(кроме спамфильтра), то вы должны указать оба блока: 'except ban' и 'except tkl'.</p>
|
||||
|
||||
<p>Пример:<br>
|
||||
<pre>except ban {
|
||||
mask myident@my.isp.com;
|
||||
@@ -2469,8 +2406,8 @@ loadmodule "modules/cloak.dll";
|
||||
забанить провайдера, но так же хотите, чтобы определённые пользователи могли
|
||||
присоединится. Директива except::mask определяет маску user@host для клиента,
|
||||
чтобы позволить ему присоединится. except::type определяет, какой тип бана
|
||||
должен преодолеваться. Возможные типы: gline, gzline, qline, gqline, shun и all, что
|
||||
позволяет исключать из Global Zlines, Qlines, Global Qlines, shuns и all баны (кроме KLINE/ZLINE).
|
||||
должен преодолеваться. Возможные типы: gline, gzline, qline, gqline и shun, что
|
||||
позволяет исключать из Glines, Global Zlines, Qlines, Global Qlines и shuns.
|
||||
Если используется формат type {}, то можно определить несколько типов.</p>
|
||||
<p>Пример:<br>
|
||||
<pre>except tkl {
|
||||
@@ -2734,24 +2671,18 @@ deny channel {
|
||||
};</pre>
|
||||
<P></P>
|
||||
<p>Блок badword позволяет манипулировать вам списком, используемым для режима +G,
|
||||
установленного на пользователей и канал, чтобы вырезать матные слова.
|
||||
<b>badword::</b> определяет тип, по которому будет судится, где придётся вырезать слова.
|
||||
Правильные типы:
|
||||
<ul>
|
||||
<li><tt>channel</tt> применяется на каналах с установленным режимом +G.</li>
|
||||
<li><tt>message</tt> применяется в личных сообщениях (не в канальных ), отправленных пользователем с режимом +G.</li>
|
||||
<li><tt>quit</tt> применяется во всех сообщениях выхода из сети.</li>
|
||||
<li><tt>all</tt> применяется во всех указанных выше ситуациях.</li>
|
||||
</ul>
|
||||
<p>
|
||||
<b>badword::word</b> может быть просто словом или же регулярным выражением (которое мы заменяем).
|
||||
<b>badword::replace</b> - чем заменить совпадающее слово. Если <b>badword::replace</b> не
|
||||
указан, то слово будет заменено на <censored>. <b>badword::action</b>
|
||||
установленного на пользователей и канал, чтобы вырезать матные слова. badword::
|
||||
определяет тип, такой, как channel, message, quit и all. channel - это список
|
||||
+G на канале, message - это список +G пользователя, quit - для цензуры
|
||||
сообщения при выходе, all - добавляет всё в указанные выше 3 списка.
|
||||
badword::word может быть просто словом или же регулярным выражением.
|
||||
badword::replace - чем заменить совпадающее слово.Если badword::replace не
|
||||
указан, то слово будет заменено на <censored>. badword::action
|
||||
определяет, какое действие будет предпринято, если будет найден мат. Если вы
|
||||
определили replace, тогда мат будет заменен, если же вы определили block, то
|
||||
сообщение будет заблокировано целиком. Если вы не определили <b>badword::action</b>,
|
||||
сообщение будет заблокировано целиком. Если вы не определили badword::action,
|
||||
то будет назначен replace.</p>
|
||||
<p>Пример:<br />
|
||||
<p>Пример:<br>
|
||||
<pre>badword channel {
|
||||
word shit;
|
||||
replace shoot;
|
||||
@@ -2783,9 +2714,9 @@ deny channel {
|
||||
<P></P>
|
||||
<p></p>
|
||||
</div>
|
||||
<p id="linkblock"><font class="block_section">4.31 - </font><font class="block_name">Link блок</font>
|
||||
<p><font class="block_section">4.31 - </font><font class="block_name">Link блок</font>
|
||||
<font class="block_optional">НЕОБЯЗАТЕЛЕН</font> <font class="block_old">(Ранее
|
||||
известен как C/N/H:Lines)</font>
|
||||
известен как C/N/H:Lines)</font><a name="linkblock"></a>
|
||||
</p>
|
||||
<div class="desc">
|
||||
<p>Синтаксис:<br>
|
||||
@@ -2854,11 +2785,10 @@ deny channel {
|
||||
Пароль, используемый для подключения к удалённому серверу, не может быть
|
||||
зашифрованным (обычный текст).
|
||||
</p>
|
||||
<p id="linkblock_passwordreceive"><b>password-receive</b><br>
|
||||
Пароль для проверки входящих соединений, может быть зашифрован как и
|
||||
<a href="#operblock_password"><b>oper::password</b></a>. Так же можно
|
||||
установить авторизацию <a href="#operblock_password_sslclientcert"><tt>sslclientcert</tt></a>.
|
||||
Фактически, самый рекомендуемый тип авторизации самый рекомендуемый тип авторизации - перебора пароля.
|
||||
<p><b>password-receive</b><br>
|
||||
Пароль для проверки входящих соединений, может быть зашифрован (методами crypt,
|
||||
md5, sha1, ripemd-160). Вы можете не трогать тип авторизации и использовать
|
||||
пароль в текстовом виде. Часто этот пароль совпадает с password-connect.
|
||||
</p>
|
||||
<P><b>hub vs leaf</b><br>
|
||||
Хаб позволяет соединения с несколькими серверами, а лист - только с одним.
|
||||
@@ -2954,35 +2884,23 @@ deny channel {
|
||||
type <тип-псевдонима>;
|
||||
spamfilter <yes|no>;
|
||||
};</pre>
|
||||
<p>Замечание: Помните, что <span class="inline_pre"><имя></span> используется вместе с "<b>alias::</b>")</p>
|
||||
<P></P>
|
||||
<p>Замечание: о стандартных файлах с псевдонимами, поставляемыми вместе с
|
||||
UnrealIRCd, можно прочитать <A href="#includedirective">здесь</A> .</p>
|
||||
<p>Блок alias позволяет вам перенаправить команду пользователя, например /chanserv
|
||||
будет отправлять сообщение пользователю chanserv.</p>
|
||||
<ul>
|
||||
<li>
|
||||
<b>alias::</b> опредеяет имя команды, которое использует алиас (пример: chanserv)
|
||||
</li>
|
||||
<li>
|
||||
<b>alias::target</b> ник или канал, которому придёт команда. Если <b>alias::</b>
|
||||
сама по себе команда, то<b>alias::target</b> можно опустить.
|
||||
</li>
|
||||
<li>
|
||||
<b>alias::type</b> определяет тип алиаса, правильные такие:
|
||||
<ul>
|
||||
<li><span class="inline_pre">services</span> (пользователь подключён к <a href="#set-services-server">серверу сервисов</a>),</li>
|
||||
<li><span class="inline_pre">stats</span> (пользователь подключён к <a href="#set-stats-server">серверу статистики</a>),</li>
|
||||
<li><span class="inline_pre">normal</span> (пользователь - обычный пользователь на любом сервере),</li>
|
||||
<li><span class="inline_pre">channel</span> (цель - имя канала)</li>
|
||||
<li><span class="inline_pre">command</span> (это не совсем "стандартный алиас", смотри <a href="#aliasblock-command">ниже</a>).</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
<b>alias::spamfilter</b> (необязательно) вызывает проверку спамфильтром команды, если установлено в "yes" (по умолчанию 'no').
|
||||
</li>
|
||||
</ul>
|
||||
<p id="aliasblock-command">Синтаксис [псевдоним команды]:<br>
|
||||
<pre>alias <имя> {
|
||||
будет отправлять сообщение пользователю chanserv (/msg chanserv). alias::
|
||||
определяет имя команды, которое будет псевдонимом (т.е.: chanserv),
|
||||
alias::target - это ник или канал, куда будет направлена команда, если alias::
|
||||
и есть цель, куда необходимо перенаправить, то alias::target может быть
|
||||
пропущен. alias::type определяет тип псевдонима, правильные типы это services
|
||||
(пользователь на сервере сервисов), stats (пользователь на сервере статистики),
|
||||
normal (пользователь - это обычный пользователь на любом сервере) и channel
|
||||
(цель - имя канала). Если alias::spamfilter (не обязательный параметр)
|
||||
установлен в 'yes', тогда будет произведена проверка на попадание в спамфильтр
|
||||
(по умолчанию 'no').<br>
|
||||
<p>Блок alias имеет так же и другую цель, которая объясняется ниже.</p>
|
||||
<p>Синтаксис [псевдоним команды]:<br>
|
||||
<pre>alias <имя> {
|
||||
/* Для псевдонимов, посылающих сообщения пользователям/в каналы */
|
||||
format <регулярное-выражение> {
|
||||
target <ник-направления>;
|
||||
@@ -3002,43 +2920,29 @@ deny channel {
|
||||
type command;
|
||||
spamfilter <yes|no>;
|
||||
};</pre>
|
||||
<p>
|
||||
Если <b>alias::type</b> установлен в <span class="inline_pre">command</span>,
|
||||
как показано <a href="#aliasblock-command">выше</a>, то алиас становится алиасом команды.
|
||||
Если блок алиас используется в таком форате, то он становится гораздо гибче, к примеру
|
||||
вы можете создать алиас /identify.
|
||||
</p>
|
||||
<ul>
|
||||
<li>
|
||||
<b>alias::</b> это имя команды как и в стандартном блоке алиаса (<a href="#aliasblock">выше</a>).
|
||||
</li>
|
||||
<li>
|
||||
<b>alias::format</b> определяет <a href="#regex">регулярное выражение</a>, под которое должен
|
||||
подпадать текст, посылаемый командному алиасу. Будет использовано первое вхождение в условие <b>alias::format</b>.
|
||||
Естественно, вы можете иметь много <b>alias::format</b>, чтобы делать различные вещи в зависимости от отправляемого текста.
|
||||
</li>
|
||||
<li>
|
||||
<b>alias::format::target</b> цель направления команды.
|
||||
Данное значение не используется, если <b>alias::format::type</b> установлен в "<span class="inline_pre">real</span>".
|
||||
</li>
|
||||
<li>
|
||||
<b>alias::format::type</b> определяет тип алиаса, для кого предназначена команда. В дополнении к описанному выше
|
||||
"<a href="#aliasblock">Синтаксису [стандартного алиаса]</a>", тип "<span class="inline_pre">real</span>"
|
||||
определяет как "настоящий алиас" ("настоящий алиас" - это алиас, который может быть переписан в
|
||||
что-нибудь отличное от PRIVMSG).
|
||||
</li>
|
||||
<li>
|
||||
<b>alias::format::parameters</b> (для "настоящих алиасов") это то, что будет отправлено в качестве
|
||||
параметров алиасу. Чтобы определить конкретный параметр, используйте <span class="inline_pre">%</span> и число.
|
||||
К примеру <span class="inline_pre">%1</span> укажет на первый параметр.
|
||||
Чтобы определить параметры до конца, используйте<span class="inline_pre">%</span> с числом и <span class="inline_pre">-</span>.
|
||||
К примеру <span class="inline_pre">%2-</span> вернёт все параметры со второго до последнего.
|
||||
Вы можете использовать параметр <span class="inline_pre">%n</span>, который вернёт ник пользователя, использовавшего команду.
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<P></P>
|
||||
<p>Блок alias в данном формате позволяет значительно расширить рамки своего
|
||||
использования. К примеру, можно создать псевдонимы вроде /identify. alias:: -
|
||||
это имя псевдонима команды. <b>alias::format</b> определяет регулярное
|
||||
выражение, которое сравнивается с текстом послылаемой команды, и если оно
|
||||
совпадает, то будет использован alias::format. Можно сделать несколько
|
||||
alias::format'ов, чтобы одна команда выполняла различные действия в зависимости
|
||||
от контекста. <b>alias::format::target</b> - цель направления этого псевдонима,
|
||||
например в случае ""действительно псевдонима" ("real alias") будет
|
||||
использована <B>alias::format::command</B>. <b>alias::format::type</b> определяет
|
||||
тип псевдонима, куда будет направлено сообщение, опираясь на типы, упомянутые
|
||||
выше в "Синтаксис [обычный псевдоним]". Мы также позволяем использовать
|
||||
тут тип "real", для "действительно псевдонимов". <b>alias::format::parameters</b>
|
||||
- это то, что будет послано в качестве параметра данному псевдониму. Чтобы
|
||||
определить, какой именно из параметров необходимо выдать псевдониму команды,
|
||||
используют знак % вместе с номером, к примеру, %1 - это первый параметр. Для
|
||||
определения всех параметров, идущих после указанного, используют %, идущий с
|
||||
номером и знаком, к примеру, %2- вернёт все параметры, от второго до
|
||||
последнего. Дополнительно, вы можете использовать %n как ник пользователя,
|
||||
который использует команду.</p>
|
||||
<P>Примеры использования блока alias в командном формате находятся в
|
||||
doc/example.conf.</P>
|
||||
<p></p>
|
||||
</div>
|
||||
<p><font class="block_section">4.33 - </font><font class="block_name">Help блок</font>
|
||||
<font class="block_optional">НЕОБЯЗАТЕЛЕН</font><a name="helpblock"></a>
|
||||
@@ -3187,9 +3091,9 @@ cgiirc {
|
||||
<P></P>
|
||||
</div>
|
||||
</div>
|
||||
<p id="setblock"><font class="block_section">4.37 - </font><font class="block_name">Set блок</font>
|
||||
<p><font class="block_section">4.37 - </font><font class="block_name">Set блок</font>
|
||||
<font class="block_required">НЕОБХОДИМ</font> <font class="block_old">(Ранее
|
||||
известен как unrealircd.conf/networks)</font>
|
||||
известен как unrealircd.conf/networks)</font><a name="setblock"></a>
|
||||
</p>
|
||||
<div class="desc">
|
||||
<p>Данный блок содержит настройки вашей irc-сети, он может размещаться как в
|
||||
@@ -3249,9 +3153,12 @@ cgiirc {
|
||||
<p><font class="set">set::modes-on-join <+режимы>;</font><br>
|
||||
Режимы, устанавливаемые на канале при его создании. Не все режимы возможно
|
||||
установить, используя эту опцию (+qaohvbeOAzlLk НЕЛЬЗЯ установить).</p>
|
||||
<p><font class="set">set::level-on-join <none|voice|halfop|op|protect|owner>;</font><br>
|
||||
Пользователь, который первый зашёл на канал, получит указанный статус. По
|
||||
умолчанию это 'op' (оператор канала).</p>
|
||||
<p><font class="set">set::level-on-join <op|none>;</font><br>
|
||||
Пользователь, который первый зашёл на канал, получит указаннй статус. Это будет
|
||||
либо 'op' (оператор канала, по умолчанию), либо 'none' (т.е. вообще никакого).</p>
|
||||
<p><font class="set">set::level-on-join <op|none>;</font><br>
|
||||
Режим, который получит пользователь, первым зашедший на канал. Это может быть
|
||||
'op' (оператор канала, используется по умолчанию) либо 'none'.</p>
|
||||
<p><font class="set">set::restrict-usermodes <режимы></font><br>
|
||||
Запрещает пользователям устанавливать/снимать ссебя указанные режимы (не
|
||||
используйте + или -).<br>
|
||||
@@ -3279,7 +3186,7 @@ cgiirc {
|
||||
/oper. Чтобы определить несколько каналов, необходимо разделить их запятыми.<br>
|
||||
[Замечание: имя канала(ов) должно быть в кавычках, т.е.: oper-auto-join
|
||||
"#chan";]</p>
|
||||
<p id="set::anti-spam-quit-message-time"><font class="set">set::anti-spam-quit-message-time <длительность>;</font><br>
|
||||
<p><font class="set">set::anti-spam-quit-message-time <длительность>;</font><br>
|
||||
Время, в течение которого пользователь должен быть подключен к серверу, чтобы
|
||||
отобразилось его сообщение о выходе (/quit). Используется для предотвращения
|
||||
спама. Длительность задаётся числовой строкой, где d значит дни, h - часы, m -
|
||||
@@ -3375,27 +3282,9 @@ cgiirc {
|
||||
использование команды не-операторами отправляется сномаске EYES.</p>
|
||||
<p><font class="set">set::options::allow-part-if-shunned;</font><br>
|
||||
Позволяет пользователям, на которых установлен shun, использовать /part.</p>
|
||||
<p><font class="set">set::options::fail-oper-warn;</font><br>
|
||||
<p><font class="set">set::options::fail-oper-warn;</font><br>
|
||||
При наличии этой опции пользователь будет уведомлён о том, что его неудачная
|
||||
попытка стать оператором (/oper) была зафиксирована.</p>
|
||||
<p><font class="set">set::options::allow-insane-bans;</font><br>
|
||||
Позволяет банить по указанной маске, например /GLINE *@*.xx. Позволяет легко и
|
||||
непринуждённо забанить любого в вашей сети, поэтому используйте осторожно!</p>
|
||||
<p id="set_nopost_ban_action"><font class="set">set::nopost::ban-action</font> (требует модуля <a href="#modules_m_nopost">m_nopost</a>)<br />
|
||||
Действие, применяемое к пользователю, если он пытается выполнить команду HTTP POST.
|
||||
Допустимые значения: kill, gline, gzline, kline, zline, shun, tempshun.
|
||||
Значение по умолчанию: kill. Если вы используете значения *line или shun,
|
||||
просто запомните, что возможно легковерный пользователь посетил сайт, который осуществляет
|
||||
спаммерскую атаку XPS IRC, и пользователя отключит от сети (прибьёт его существующие подключенния).
|
||||
Значение по умолчанию (kill) как раз служит защитой против таких инцидентов, но жёсткие меры (*line,
|
||||
а особенно gzline) иногда необходимы.</p>
|
||||
<p id="set_nopost_ban_reason"><font class="set">set::nopost::ban-reason</font> (требует модуля <a href="#modules_m_nopost">m_nopost</a>)<br />
|
||||
Указывается причина бана, если модуль m_nopost прибивает или банит пользователя.</p>
|
||||
<p id="set_nopost_ban_time"><font class="set">set::nopost::ban-time</font> (требует модуля <a href="#modules_m_nopost">m_nopost</a>)<br />
|
||||
Длительность для shuns, glines, gzlines, klines и zlines, установленных by m_nopost.
|
||||
По умолчанию 4h (4 часа).</p>
|
||||
<p id="set_nopost_except_hosts"><font class="set">set::nopost::except-hosts</font> (требует модуля <a href="#modules_m_nopost">m_nopost</a>)<br />
|
||||
Список маск хостов для исключения действия модуля m_nopost. Вы можете указать здесь любые хост маски.</p>
|
||||
<p><font class="set">set::dns::timeout <интервал-времени>;</font><br>
|
||||
Интервал времени, определяющий таймаут DNS-сервера. Это строка, где d означает
|
||||
дни, h - часы, m - минуты и s - секунды. К примеру, 1d2h3m означает 1 день, 2
|
||||
@@ -3414,15 +3303,10 @@ cgiirc {
|
||||
<p><font class="set">set::default-server <имя-сервера>;</font><br>
|
||||
Определяет имя сервера по умолчанию, которое сообщается пользователям, если
|
||||
текущий сервер полон.</p>
|
||||
<p id="set_defaultipv6clonemask">
|
||||
<font class="set">set::default-ipv6-clone-mask</font><br />
|
||||
Маска определения клонов в протоколе IPv6 по умолчанию. Смотри
|
||||
<a href="#allowblock_ipv6clonemask">allow::ipv6-clone-mask</a>. Значение по умолчанию 64.
|
||||
</p>
|
||||
<p id="set-services-server"><font class="set">set::services-server <имя-сервера>;</font><br>
|
||||
<p><font class="set">set::services-server <имя-сервера>;</font><br>
|
||||
Определяет имя сервера, к которому подключены сервисы. Если у вас нет сервисов,
|
||||
необходимо установить значение вроде services.yournet.com.</p>
|
||||
<p id="set-stats-server"><font class="set">set::stats-server <имя-сервера>;</font><br>
|
||||
<p><font class="set">set::stats-server <имя-сервера>;</font><br>
|
||||
Устанавливает имя сервера, где находится бот статистики. Если статистика не
|
||||
запущена, можно оставить значение пустым.</p>
|
||||
<p><font class="set">set::help-channel <канал-помощи>;</font><br>
|
||||
@@ -3492,8 +3376,6 @@ cgiirc {
|
||||
<p><font class="set">set::ssl::options::verify-certificate;</font><br>
|
||||
Позволяет серверу определять правильность SSL сертификата прежде, чем разрешить
|
||||
соединение.</p>
|
||||
<p><font class="set">set::ssl::options::no-starttls;</font><br>
|
||||
Отключает STARTTLS. STARTTLS позволяет использовать клиентам SSL на обычных портах (не-SSL).</p>
|
||||
<p><font class="set">set::throttle::period <длительность></font><br>
|
||||
Указывает, сколько времени должен подождать пользователь перед повторным
|
||||
подключением, если он превысил лимит set::throttle::connections.</p>
|
||||
@@ -3541,7 +3423,7 @@ cgiirc {
|
||||
<p><font class="set">set::spamfilter::ban-time <значение>;</font><br>
|
||||
Тоже, что и выше, только для *lines/shuns, добавленных спамфильтром.</p>
|
||||
<p><font class="set">set::spamfilter::ban-reason <причина>;</font><br>
|
||||
Причина, которая будет указана при добавлении бана спамфильтром.</p>
|
||||
Причина, которая будет указана при добавлении бана спамфильтром.</p>
|
||||
<p><font class="set">set::spamfilter::virus-help-channel <канал>;</font><br>
|
||||
Канал, используемый в качестве действия 'viruschan' в спамфильтре.</p>
|
||||
<p><font class="set">set::spamfilter::virus-help-channel-deny <yes|no>;</font><br>
|
||||
@@ -3586,54 +3468,14 @@ cgiirc {
|
||||
<p><font class="set">set::watch-away-notification <yes|no></font><br>
|
||||
Позволяет включать/отключать нотификацию AWAY (ухода) в команде WATCH. По
|
||||
умолчанию включено (yes).</p>
|
||||
</div>
|
||||
<p id="filesblock"><font class="block_section">4.38 - </font><font class="block_name">Блок Files</font>
|
||||
<font class="block_optional">НЕОБЯЗАТЕЛЕН</font><div class="desc">
|
||||
</p>
|
||||
<p> Вы не должны использовать <a href="#tldblock">TLD block</a> для указания нахождения
|
||||
ваших файлов MOTDs и rules. Данный блок указывает на настройки по умолчанию для
|
||||
файлов pidfile и irc.tune. Если тут что-то не определено, значит используется значение по умолчанию,
|
||||
задокументированное в <a href="#addtlfiles">Дополнительных файлах</a>.
|
||||
</p>
|
||||
<p>
|
||||
Относительные пути будут расценены как относительные согласно корневой
|
||||
директории UnrealIRCd, которая содержит<tt>unrealircd.conf</tt>.
|
||||
Данный блок может быть полезен тем, если вы запускаете больше, чем один IRCd в одной и той же
|
||||
директории. В этом случае вам надо указать как минимум файлы pid и tune для каждого сервера.
|
||||
</p>
|
||||
<p>Синтаксис:<br>
|
||||
<pre>
|
||||
files {
|
||||
motd <файл motd>;
|
||||
shortmotd <короткий файл motd>;
|
||||
opermotd <файл oper motd>;
|
||||
svsmotd <файл services motd>;
|
||||
botmotd <файл bot motd>;
|
||||
|
||||
rules <файл rules>;
|
||||
|
||||
tunefile <файл tune>;
|
||||
pidfile <файл pid>;
|
||||
};
|
||||
</pre></p>
|
||||
<p>Пример:<br />
|
||||
<pre>
|
||||
files {
|
||||
motd /etc/motd;
|
||||
|
||||
pidfile /var/lib/run/unrealircd.pid;
|
||||
};
|
||||
</pre>
|
||||
</p>
|
||||
|
||||
</div>
|
||||
<p><b><font size="+2">5 – Дополнительные файлы<a name="addtlfiles"></a> </font></b>
|
||||
</p>
|
||||
<div class="desc">В дополнение к указанным у Unreal есть ещё другие
|
||||
конфигурационные файлы, такие как MOTD, OperMOTD, BotMOTD и Rules. Ниже
|
||||
приведены имена файлов и их назначение.<br>
|
||||
Обратите внимание, что motd файлы (всех типов) и файлы правил могут быть
|
||||
определены в блоке <a href="#tldblock">tld</a> или в блоке
|
||||
<a href="#filesblock">файлов</a>, просто данные имена файлов используются по умолчанию (и
|
||||
определены в блоке tld, просто данные имена файлов используются по умолчанию (и
|
||||
для удалённых MOTD/RULES).
|
||||
<p>
|
||||
<table width="83%" border="1">
|
||||
@@ -3838,12 +3680,7 @@ files {
|
||||
<div align="center">Q</div>
|
||||
</td>
|
||||
<td>Только серверы из U:Lines могут кикать пользователей</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<div align="center">r</div></td>
|
||||
<td>Канал зарегестрирован (устанавливается только сервисами)</td>
|
||||
</tr>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<div align="center">R</div>
|
||||
@@ -3866,7 +3703,7 @@ files {
|
||||
<td>
|
||||
<div align="center">t</div>
|
||||
</td>
|
||||
<td>Полуоператоры, операторы и выше могут устанавливать топик</td>
|
||||
<td>Только операторы канала могут устанавливать топик</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
@@ -3899,17 +3736,6 @@ files {
|
||||
</td>
|
||||
<td>Зайти на канал могут только клиенты с защищённым соединением (SSL)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<div align="center">Z</div>
|
||||
</td>
|
||||
<td>Устанавливается сервером и сигнализирует о том, что все пользователи,
|
||||
находящиеся на канале, используют безопасное подключение (SSL).
|
||||
Будет активно, если указано +z. ULines (к примеру BotServ), игнорируются,
|
||||
при подсчёте "небезопасных пользователей". По прежнему, озаботиться безопасностью
|
||||
межсерверных линков должны администраторы (SSL, VPN, использование loopback интерфейсов
|
||||
и прочая, прочая), потому что IRCd не может и не сможет определить безопасность.</td>
|
||||
</tr>
|
||||
</table>
|
||||
<p>
|
||||
</p>
|
||||
@@ -4475,17 +4301,14 @@ files {
|
||||
<td>Оператор</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td height="39">rehash <сервер|global> –<флаги></td>
|
||||
<td height="39">rehash <сервер> –<флаги></td>
|
||||
<td>Осуществляет рехэш (Rehash - перечитать) конфигурационных файлов сервера. Если
|
||||
указано имя сервера, то позволяет осуществить рехэш конфигурационного файла на
|
||||
удалённом сервере. Если указан -global, то будет произведён рехэш
|
||||
ВСЕХ серверов в вашей сети (требует прав NetAdmin).
|
||||
Доступны некоторые флаги:<br>
|
||||
-motd - Осуществляет рехэш всех MOTD и RULES файлов (включая tld {})<br>
|
||||
удалённом сервере. Доступны некоторые флаги:<br>
|
||||
-motd - Осуществляет рехэш только всех MOTD и RULES файлов (включая tld {})<br>
|
||||
-opermotd - осуществляет рехэш только файла OPERMOTD<br>
|
||||
-botmotd - осуществляет рехэш только файла BOTMOTD<br>
|
||||
-garbage - запускает сбор мусора<br>
|
||||
-ssl - перезагружает сертификаты SSL<br>
|
||||
<td>Оператор</td>
|
||||
</tr>
|
||||
<tr>
|
||||
@@ -4645,23 +4468,18 @@ files {
|
||||
<tr>
|
||||
<td height="36">addline <текст><br>
|
||||
</td>
|
||||
<td>Позволяет добавить строки в unrealircd.conf. Вы должны подгрузить модуль m_addline
|
||||
чтобы использовать эту команду (начиная с версии 3.2.9)<br>
|
||||
<td>Позволяет добавить строки в unrealircd.conf<br>
|
||||
</td>
|
||||
<td>Оператор</td>
|
||||
</tr>
|
||||
<tr id="cmd_mkpasswd">
|
||||
<td height="36">mkpasswd <тип> <пароль><br></td>
|
||||
<td>Шифрует <пароль> используя <тип> хэширования. Доступные методы хэширования:
|
||||
<ul>
|
||||
<li>crypt [<em>для Windows необходима поддержка SSL</em>]</li>
|
||||
<li>md5</li>
|
||||
<li>sha1 [<em>необходим SSL</em>]</li>
|
||||
<li>ripemd160 [<em>необходим SSL</em>]</li>
|
||||
</ul>
|
||||
<br></td>
|
||||
<tr>
|
||||
<td height="36">mkpasswd <пароль><br>
|
||||
</td>
|
||||
<td>Зашифровывает пароль, чтобы в зашифрованном виде его можно было добавить в
|
||||
unrealircd.conf<br>
|
||||
</td>
|
||||
<td>Оператор</td>
|
||||
</tr>
|
||||
</tr>
|
||||
<tr>
|
||||
<td height="36">tsctl offset +/- <время><br>
|
||||
</td>
|
||||
@@ -4817,8 +4635,8 @@ files {
|
||||
бэкапов, удостоверьтесь, что вы имеете правильные разрешения (иногда часто
|
||||
бывает, что всё защищено, а backup.tar.gz может прочитать любой человек).<br>
|
||||
<br>
|
||||
Если вы желаете <a href="#passwords" title="Типы паролей">зашифровать пароли</a> везде,
|
||||
где только возможно, вам необходимо скомпилировать сервер с поддержкой OpenSSL (вы же заботитесь о своей
|
||||
Если вы желаете зашифровать пароли везде, где только возможно, вам необходимо
|
||||
скомпилировать сервер с поддержкой OpenSSL (вы же заботитесь о своей
|
||||
безопасности?), тогда можно использовать <i>sha1,</i> <i>ripemd160</i> или <I>md5 </I>
|
||||
методы шифрации паролей . Если у вас остались зашифрованные блоки от
|
||||
Unreal3.2.1 или более ранней версии, я предлагаю вам перезашифровать (просто
|
||||
@@ -4953,7 +4771,7 @@ files {
|
||||
</DIV>
|
||||
<DIV class="desc">
|
||||
Первое, что вы должны сделать - это ВСЕГДА ИСПОЛЬЗОВАТЬ ПОСЛЕДНЮЮ ВЕРСИЮ,
|
||||
поэтому прямо сейчас подпишитесь на <a href="http://lists.sourceforge.net/mailman/listinfo/unreal-notify" target="_blank">
|
||||
поэтому прямо сейчас подпишитесь на <a href="http://mail1.sourceforge.net/mailman/listinfo/unreal-notify" target="_blank">
|
||||
рассылку по уведомлениям от unreal</a>, и вы будете получать уведомления о
|
||||
релизах (unreal-notify служит только для релизов, т.е. одно письмо в X
|
||||
месяцев). Приходят уведомления об исправленных уязвимостях высокого риска,
|
||||
@@ -4976,20 +4794,6 @@ files {
|
||||
этому адресу</a>.</p>
|
||||
</div>
|
||||
<p></p>
|
||||
<p id="modules"><font size="+2"><b>10 – Modules</b></font></p>
|
||||
<div class="desc">
|
||||
<p>Данная секция описывает модули, идущие в комплекте с UnrealIRCd.
|
||||
К сожалению в настоящее время только один модуль, идущий вместе с
|
||||
UnrealIRCd, документирован.</p>
|
||||
</div>
|
||||
<p id="modules_m_nopost"><font size="+2"><b>10.1 <a href="#modules_m_nopost">m_nopost</a></b></font><br />
|
||||
Данный модуль автоматически банит любого пользователя, кто пытается использовать запрос в стиле HTTP.
|
||||
Модуль был написан Syzop в ответ на использование Firefox XPS атак, которые позволяли AJAX-совместимым
|
||||
браузерам выступать в роли спамботов в IRC. Выбрать, что будет делать модуль m_nopost, когда получит
|
||||
подобный запрос, можно в секции <a href="#set_nopost_ban_action"> set::nopost::ban-action</a> и
|
||||
<a href="#set_nopost_ban_time">set::nopost::ban-time</a>.<br />
|
||||
Модуль появился в UnrealIRCd версии 3.2.9 и компилируется в commands.so, так что он загружается автоматически в
|
||||
большинстве случаев.</p>
|
||||
<p><font size="+2"><b>Регулярные выражения<a name="regex"></a></b></font></p>
|
||||
<div class="desc"><p>Регулярные выражения часто используются в Unreal (например, в
|
||||
badwords, spamfilter, и aliases), они являются отличным инструментом для поиска
|
||||
|
||||
+553
-2517
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
@@ -159,53 +159,48 @@ help Chmodes {
|
||||
" a <nickname> = Gives Channel Admin to the user";
|
||||
" q <nickname> = Gives Owner status to the user";
|
||||
" -";
|
||||
" A = Server/Net Admin only channel (settable by Admins)";
|
||||
" 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]";
|
||||
" C = No CTCPs allowed in the channel [o]";
|
||||
" e <nick!ident@host> = Overrides a ban for matching users [h]";
|
||||
" f <floodparams> = Flood protection (for more info see /HELPOP CHMODEF) [o]";
|
||||
" (For more info on extended bantypes, see /HELPOP EXTBANS)";
|
||||
" G = Filters out all Bad words in messages with <censored> [o]";
|
||||
" i = A user must be invited to join the channel [h]";
|
||||
" I <nick!ident@host> = Overrides +i for matching users [h]";
|
||||
" f <floodparams> = Flood protection (for more info see /HELPOP CHMODEF) [o]";
|
||||
" i = A user must be invited to join the channel [h]";
|
||||
" j <joins:sec> = Throttle joins per-user to 'joins' per 'sec' seconds [o]";
|
||||
" k <key> = Users must specify <key> to join [h]";
|
||||
" K = /KNOCK is not allowed [o]";
|
||||
" L <chan2> = Channel link (If +l is full, the next user will auto-join <chan2>) [q]";
|
||||
" l <number of max users> = Channel may hold at most <number> of users [o]";
|
||||
" m = Moderated channel (only +vhoaq users may speak) [h]";
|
||||
" M = Must be using a registered nick (+r), or have voice access to talk [o]";
|
||||
" N = No Nickname changes are permitted in the channel [o]";
|
||||
" n = Users outside the channel can not send PRIVMSGs to the channel [h]";
|
||||
" O = IRC Operator only channel (settable by IRCops)";
|
||||
" p = Private channel [o]";
|
||||
" Q = No kicks allowed [o]";
|
||||
" R = Only registered (+r) users may join the channel [o]";
|
||||
" r = The channel is registered (settable by services only)";
|
||||
" s = Secret channel [o]";
|
||||
" t = Only +hoaq may change the topic [h]";
|
||||
" z = Only Clients on a Secure Connection (SSL) can join [o]";
|
||||
" A = Server/Net Admin only channel (settable by Admins)";
|
||||
" C = No CTCPs allowed in the channel [o]";
|
||||
" G = Filters out all Bad words in messages with <censored> [o]";
|
||||
" M = Must be using a registered nick (+r), or have voice access to talk [o]";
|
||||
" K = /KNOCK is not allowed [o]";
|
||||
" L <chan2> = Channel link (If +l is full, the next user will auto-join <chan2>) [q]";
|
||||
" N = No Nickname changes are permitted in the channel [o]";
|
||||
" O = IRC Operator only channel (settable by IRCops)";
|
||||
" Q = No kicks allowed [o]";
|
||||
" R = Only registered (+r) users may join the channel [o]";
|
||||
" S = Strips mIRC color codes [o]";
|
||||
" T = No NOTICEs allowed in the channel [o]";
|
||||
" t = Only +hoaq may change the topic [h]";
|
||||
" u = Auditorium mode (/names and /who #channel only show channel ops) [q]";
|
||||
" V = /INVITE is not allowed [o]";
|
||||
" z = Only Clients on a Secure Connection (SSL) can join [o]";
|
||||
" Z = All users on the channel are on a Secure connection (SSL) [server]";
|
||||
" (This mode is set/unset by the server. Only if the channel is also +z)";
|
||||
" u = Auditorium mode (/names and /who #channel only show channel ops) [q]";
|
||||
" -";
|
||||
" [h] requires at least halfop, [o] requires at least chanop, [q] requires owner";
|
||||
" ==------------------------------oOo----------------------------==";
|
||||
};
|
||||
|
||||
help ExtBans {
|
||||
" These bans let you ban based on things other than the traditional nick!user@host";
|
||||
" mask. They also provide support for things like ``quieting'' users (on other IRCds";
|
||||
" you might do +q <hostmask>, on UnrealIRCd use +b ~q:<hostmask>).";
|
||||
" Extended bantypes: ";
|
||||
" -";
|
||||
" These bantypes specify which actions are affected by a ban:";
|
||||
" ==-Type--------Name---------------------------Explanation-----------------------==";
|
||||
" | | People matching these bans can join but are unable to ";
|
||||
" ~q | quiet | speak, unless they have +v or higher. ";
|
||||
" ~q | Quiet | speak, unless they have +v or higher. ";
|
||||
" | | Example: ";
|
||||
" | | +bb ~q:*!*@blah.blah.com ~q:nick*!*@* ";
|
||||
"-----------------------------------------------------------------------------------";
|
||||
@@ -214,15 +209,8 @@ help ExtBans {
|
||||
" | | Example: ";
|
||||
" | | +bb ~n:*!*@*.aol.com ~n:nick*!*@* ";
|
||||
"-----------------------------------------------------------------------------------";
|
||||
" | | If a user matches this, he may not join the channel. ";
|
||||
" ~j | join | He may perform all other activities if he is already on ";
|
||||
" | | the channel, such as speaking and changing his nick. ";
|
||||
"-----------------------------------------------------------------------------------";
|
||||
" -";
|
||||
" These bantypes introduce new criteria which can be used:";
|
||||
" ==-Type--------Name---------------------------Explanation-----------------------==";
|
||||
" | | If the user is in this channel then (s)he is unable to ";
|
||||
" | | join. A prefix can also be specified (+/%/@/&/~) which ";
|
||||
" | [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 ";
|
||||
@@ -233,19 +221,7 @@ help ExtBans {
|
||||
" | | NOTE: an underscore ('_') matches both a space (' ') and";
|
||||
" | | an underscore ('_'), so this ban would ";
|
||||
" | | match 'Stupid bot script v1.4'. ";
|
||||
"-----------------------------------------------------------------------------------";
|
||||
" | | If a user has identified to services (usually NickServ) ";
|
||||
" | | and matches this nickname, then this ban will match. ";
|
||||
" | | This means this ban is really only useful for ban ";
|
||||
" ~R | registered | exemptions (+e). Example: +e ~R:Nick ";
|
||||
" | | Will allow Nick in the channel, regardless of other ";
|
||||
" | | bans, if he identified to NickServ and is using the ";
|
||||
" | | nickname Nick. ";
|
||||
" ==------------------------------------------------------------------------------==";
|
||||
" -";
|
||||
"You may stack extended bans from the 1st group with the 2nd.";
|
||||
"Example: +b ~q:~c:#lamers";
|
||||
"The above would quiet all users who have joined #lamers.";
|
||||
};
|
||||
|
||||
help Chmodef {
|
||||
@@ -913,22 +889,19 @@ help Rehash {
|
||||
" Prompts the server to reread the configuration files.";
|
||||
" IRC Operator only command.";
|
||||
" -";
|
||||
" Syntax: REHASH <servername> [flag]";
|
||||
" REHASH -global [flag]";
|
||||
" REHASH [flag]";
|
||||
" Syntax: REHASH <servername> -<flags>";
|
||||
" REHASH -<flags>";
|
||||
" -";
|
||||
" If servername and flag are not specified this rehashes the";
|
||||
" unrealircd.conf, and re-reads all MOTD, BOTMOTD, OPERMOTD and RULES files.";
|
||||
" If servername is specified, this is used to rehash the remote server.";
|
||||
" If -global is specified, then all servers on the network are rehashed.";
|
||||
" Only NetAdmins may specify a server name and use -global.";
|
||||
" If servername and flags are not specified this rehashes the";
|
||||
" unrealircd.conf , removing any temporary k:lines.";
|
||||
" If servername is specified, this is used to rehash config files on servername.";
|
||||
" Only NetAdmins may specify a server name.";
|
||||
" -";
|
||||
" The flags are used to rehash other config files, valid flags are:";
|
||||
" -dns - Reinitializes and reloads the resolver";
|
||||
" -motd - Rehashes all MOTD files and RULES files (including tld{})";
|
||||
" -opermotd - Rehashes the OPERMOTD";
|
||||
" -botmotd - Rehashes the BOTMOTD";
|
||||
" -garbage - Force garbage collection";
|
||||
" -motd - Only re-read all MOTD, BOTMOTD, OPERMOTD and RULES files";
|
||||
" (including those in tld{} blocks)";
|
||||
" -ssl - Reloads SSL certificates";
|
||||
};
|
||||
|
||||
help Restart {
|
||||
|
||||
@@ -5,7 +5,11 @@
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#ifndef _WIN32
|
||||
#include "tre/regex.h"
|
||||
#else
|
||||
#include "win32/regex.h"
|
||||
#endif
|
||||
|
||||
#define MAX_MATCH 1
|
||||
#define MAX_WORDLEN 64
|
||||
|
||||
+2
-24
@@ -99,24 +99,6 @@
|
||||
*/
|
||||
#define REMOTE_REHASH
|
||||
|
||||
/*
|
||||
* Special remote include caching, see this Changelog item:
|
||||
* - Added special caching of remote includes. When a remote include fails to
|
||||
* load (for example when the webserver is down), then the most recent
|
||||
* version of that remote include will be used, and the ircd will still boot
|
||||
* and be able to rehash. Even though this is quite a simple feature, it
|
||||
* can make a key difference when deciding to roll out remote includes on
|
||||
* your network. Previously, servers would be unable to boot or rehash when
|
||||
* the webserver was down, which would be a big problem (often unacceptable).
|
||||
* The latest version of fetched urls are cached in the cache/ directory as
|
||||
* cache/<md5 hash of url>.
|
||||
* Obviously, if there's no 'latest version' and an url fails, the ircd will
|
||||
* still not be able to boot. This would be the case if you added or changed
|
||||
* the path of a remote include and it's trying to fetch it for the first time.
|
||||
* There usually is no reason to disable this.
|
||||
*/
|
||||
#define REMOTEINC_SPECIALCACHE
|
||||
|
||||
/*
|
||||
Stripbadwords patch
|
||||
*/
|
||||
@@ -225,12 +207,8 @@
|
||||
|
||||
/*
|
||||
* Full pathnames and defaults of irc system's support files. Please note that
|
||||
* these are only the recommened names and paths. You must define PPATH if you
|
||||
* want a pidfile written. Also, IRCDTUNE should be defined because it is needed for
|
||||
* operation. All of these options are runtime-configurable (except for CPATH and LPATH)
|
||||
* in the files block of unrealircd.conf. CPATH is runtime-configurable as a command-
|
||||
* line argument. These used as the default values for options absent from the user's
|
||||
* unrealircd.conf.
|
||||
* these are only the recommened names and paths. Change as needed.
|
||||
* You must define these to something, even if you don't really want them.
|
||||
*/
|
||||
#define CPATH "unrealircd.conf" /* server configuration file */
|
||||
#define MPATH "ircd.motd" /* server MOTD file */
|
||||
|
||||
@@ -80,7 +80,6 @@ struct zConfiguration {
|
||||
unsigned dont_resolve:1;
|
||||
unsigned use_ban_version:1;
|
||||
unsigned mkpasswd_for_everyone:1;
|
||||
unsigned allow_insane_bans;
|
||||
unsigned allow_part_if_shunned:1;
|
||||
unsigned check_target_nick_bans:1;
|
||||
unsigned use_egd : 1;
|
||||
@@ -126,7 +125,6 @@ struct zConfiguration {
|
||||
char *restrict_usermodes;
|
||||
char *restrict_channelmodes;
|
||||
char *restrict_extendedbans;
|
||||
int new_linking_protocol;
|
||||
char *channel_command_prefix;
|
||||
long unknown_flood_bantime;
|
||||
long unknown_flood_amount;
|
||||
@@ -163,11 +161,7 @@ struct zConfiguration {
|
||||
char *timesynch_server;
|
||||
int pingpong_warning;
|
||||
int watch_away_notification;
|
||||
int uhnames;
|
||||
aNetwork network;
|
||||
#ifdef INET6
|
||||
unsigned short default_ipv6_clone_mask;
|
||||
#endif /* INET6 */
|
||||
};
|
||||
|
||||
#ifndef DYNCONF_C
|
||||
@@ -228,7 +222,6 @@ extern MODVAR aConfiguration iConf;
|
||||
#define RESTRICT_USERMODES iConf.restrict_usermodes
|
||||
#define RESTRICT_CHANNELMODES iConf.restrict_channelmodes
|
||||
#define RESTRICT_EXTENDEDBANS iConf.restrict_extendedbans
|
||||
#define NEW_LINKING_PROTOCOL iConf.new_linking_protocol
|
||||
#ifdef THROTTLING
|
||||
#define THROTTLING_PERIOD iConf.throttle_period
|
||||
#define THROTTLING_COUNT iConf.throttle_count
|
||||
@@ -250,7 +243,6 @@ extern MODVAR aConfiguration iConf;
|
||||
#define IDENT_READ_TIMEOUT iConf.ident_read_timeout
|
||||
|
||||
#define MKPASSWD_FOR_EVERYONE iConf.mkpasswd_for_everyone
|
||||
#define ALLOW_INSANE_BANS iConf.allow_insane_bans
|
||||
#define CHANCMDPFX iConf.channel_command_prefix
|
||||
|
||||
#define DEFAULT_BANTIME iConf.default_bantime
|
||||
@@ -287,8 +279,6 @@ extern MODVAR aConfiguration iConf;
|
||||
|
||||
#define WATCH_AWAY_NOTIFICATION iConf.watch_away_notification
|
||||
|
||||
#define UHNAMES_ENABLED iConf.uhnames
|
||||
|
||||
/* Used for "is present?" and duplicate checking */
|
||||
struct SetCheck {
|
||||
unsigned has_show_opermotd:1;
|
||||
@@ -324,7 +314,6 @@ struct SetCheck {
|
||||
unsigned has_check_target_nick_bans:1;
|
||||
unsigned has_pingpong_warning:1;
|
||||
unsigned has_watch_away_notification:1;
|
||||
unsigned has_uhnames:1;
|
||||
unsigned has_oper_only_stats:1;
|
||||
unsigned has_maxchannelsperuser:1;
|
||||
unsigned has_maxdccallow:1;
|
||||
@@ -344,7 +333,6 @@ struct SetCheck {
|
||||
unsigned has_restrict_usermodes:1;
|
||||
unsigned has_restrict_channelmodes:1;
|
||||
unsigned has_restrict_extendedbans:1;
|
||||
unsigned has_new_linking_protocol:1;
|
||||
unsigned has_channel_command_prefix:1;
|
||||
unsigned has_anti_flood_unknown_flood_bantime:1;
|
||||
unsigned has_anti_flood_unknown_flood_amount:1;
|
||||
@@ -396,7 +384,6 @@ struct SetCheck {
|
||||
unsigned has_options_dont_resolve:1;
|
||||
unsigned has_options_show_connect_info:1;
|
||||
unsigned has_options_mkpasswd_for_everyone:1;
|
||||
unsigned has_options_allow_insane_bans:1;
|
||||
unsigned has_options_allow_part_if_shunned:1;
|
||||
int cgiirc_type; /* cheat :( */
|
||||
unsigned has_cgiirc_hosts:1;
|
||||
|
||||
+13
-34
@@ -73,7 +73,6 @@ extern MODVAR long lastsendK, lastrecvK;
|
||||
* Configuration linked lists
|
||||
*/
|
||||
extern MODVAR ConfigItem_me *conf_me;
|
||||
extern MODVAR ConfigItem_files *conf_files;
|
||||
extern MODVAR ConfigItem_class *conf_class;
|
||||
extern MODVAR ConfigItem_class *default_class;
|
||||
extern MODVAR ConfigItem_admin *conf_admin;
|
||||
@@ -136,10 +135,8 @@ ConfigItem_help *Find_Help(char *command);
|
||||
int AllowClient(aClient *cptr, struct hostent *hp, char *sockhost, char *username);
|
||||
int parse_netmask(const char *text, struct irc_netmask *netmask);
|
||||
int match_ip(struct IN_ADDR addr, char *uhost, char *mask, struct irc_netmask *netmask);
|
||||
#ifdef INET6
|
||||
int match_ipv6(struct IN_ADDR *addr, struct IN_ADDR *mask, int bits);
|
||||
#endif
|
||||
ConfigItem_ban *Find_ban_ip(aClient *sptr);
|
||||
extern MODVAR struct tm motd_tm, smotd_tm;
|
||||
extern MODVAR Link *Servers;
|
||||
void add_ListItem(ListStruct *, ListStruct **);
|
||||
ListStruct *del_ListItem(ListStruct *, ListStruct **);
|
||||
@@ -193,11 +190,6 @@ extern long get_access(aClient *, aChannel *);
|
||||
extern int is_chan_op(aClient *, aChannel *);
|
||||
extern int has_voice(aClient *, aChannel *);
|
||||
extern int is_chanowner(aClient *, aChannel *);
|
||||
#ifndef DISABLE_EXTBAN_STACKING
|
||||
extern int ban_check_mask(aClient *, aChannel *, char *, int, int);
|
||||
extern int extban_is_ok_nuh_extban(aClient *, aChannel *, char *, int, int, int);
|
||||
extern char* extban_conv_param_nuh_or_extban(char *);
|
||||
#endif
|
||||
extern Ban *is_banned(aClient *, aChannel *, int);
|
||||
extern Ban *is_banned_with_nick(aClient *, aChannel *, int, char *);
|
||||
extern int parse_help(aClient *, char *, char *);
|
||||
@@ -258,7 +250,6 @@ extern int get_sockerr(aClient *);
|
||||
extern int inetport(aClient *, char *, int);
|
||||
extern void init_sys();
|
||||
extern void init_modef();
|
||||
extern int verify_hostname(char *name);
|
||||
|
||||
#ifdef NO_FDLIST
|
||||
extern int read_message(time_t);
|
||||
@@ -550,7 +541,6 @@ extern int Auth_CheckError(ConfigEntry *ce);
|
||||
extern long xbase64dec(char *b64);
|
||||
extern aClient *find_server_b64_or_real(char *name);
|
||||
extern aClient *find_server_by_base64(char *b64);
|
||||
extern aClient *find_server_by_numeric(long value);
|
||||
extern int is_chanownprotop(aClient *cptr, aChannel *chptr);
|
||||
extern int is_skochanop(aClient *cptr, aChannel *chptr);
|
||||
extern char *make_virthost(aClient *sptr, char *curr, char *new, int mode);
|
||||
@@ -567,6 +557,7 @@ extern char *oflagstr(long oflag);
|
||||
extern int rehash(aClient *cptr, aClient *sptr, int sig);
|
||||
extern int _match(char *mask, char *name);
|
||||
extern void outofmemory(void);
|
||||
extern unsigned long our_crc32(const unsigned char *s, unsigned int len);
|
||||
extern int add_listener2(ConfigItem_listen *conf);
|
||||
extern void link_cleanup(ConfigItem_link *link_ptr);
|
||||
extern void listen_cleanup();
|
||||
@@ -580,7 +571,8 @@ extern int init_conf(char *filename, int rehash);
|
||||
extern void validate_configuration(void);
|
||||
extern void run_configuration(void);
|
||||
extern void rehash_motdrules();
|
||||
extern void read_motd(const char *filename, aMotdFile *motd); /* s_serv.c */
|
||||
extern aMotd *read_file(char *filename, aMotd **list);
|
||||
extern aMotd *read_file_ex(char *filename, aMotd **list, struct tm *);
|
||||
extern CMD_FUNC(m_server_remote);
|
||||
extern void send_proto(aClient *, ConfigItem_link *);
|
||||
extern char *xbase64enc(long i);
|
||||
@@ -639,15 +631,13 @@ extern void sendto_chmodemucrap(aClient *, aChannel *, char *);
|
||||
extern void verify_opercount(aClient *, char *);
|
||||
extern int valid_host(char *host);
|
||||
extern int count_oper_sessions(char *);
|
||||
extern char *unreal_mktemp(const char *dir, const char *suffix);
|
||||
extern char *unreal_mktemp(char *dir, char *suffix);
|
||||
extern char *unreal_getpathname(char *filepath, char *path);
|
||||
extern char *unreal_getfilename(char *path);
|
||||
extern char *unreal_mkcache(const char *url);
|
||||
extern int has_cached_version(const char *url);
|
||||
extern int unreal_copyfile(const char *src, const char *dest);
|
||||
extern int unreal_copyfileex(const char *src, const char *dest, int tryhardlink);
|
||||
extern time_t unreal_getfilemodtime(const char *filename);
|
||||
extern void unreal_setfilemodtime(const char *filename, time_t mtime);
|
||||
extern int unreal_copyfile(char *src, char *dest);
|
||||
extern int unreal_copyfileex(char *src, char *dest, int tryhardlink);
|
||||
extern time_t unreal_getfilemodtime(char *filename);
|
||||
extern void unreal_setfilemodtime(char *filename, time_t mtime);
|
||||
extern void DeleteTempModules(void);
|
||||
extern MODVAR Extban *extbaninfo;
|
||||
extern Extban *findmod_by_bantype(char c);
|
||||
@@ -685,6 +675,7 @@ extern MODVAR aCtab cFlagTab[];
|
||||
extern char *unreal_encodespace(char *s);
|
||||
extern char *unreal_decodespace(char *s);
|
||||
extern MODVAR Link *helpign;
|
||||
extern MODVAR aMotd *rules;
|
||||
extern MODVAR fdlist default_fdlist, busycli_fdlist, serv_fdlist, oper_fdlist;
|
||||
extern void DCCdeny_add(char *filename, char *reason, int type, int type2);
|
||||
extern void DCCdeny_del(ConfigItem_deny_dcc *deny);
|
||||
@@ -748,11 +739,8 @@ 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);
|
||||
extern MODVAR void (*send_protoctl_servers)(aClient *sptr, int response);
|
||||
extern MODVAR int (*verify_link)(aClient *cptr, aClient *sptr, char *servername, ConfigItem_link **link_out);
|
||||
extern MODVAR void (*send_server_message)(aClient *sptr);
|
||||
/* /Efuncs */
|
||||
extern MODVAR aMotdFile opermotd, svsmotd, motd, botmotd, smotd, rules;
|
||||
extern MODVAR aMotd *opermotd, *svsmotd, *motd, *botmotd, *smotd;
|
||||
extern MODVAR int max_connection_count;
|
||||
extern int add_listmode(Ban **list, aClient *cptr, aChannel *chptr, char *banid);
|
||||
extern int del_listmode(Ban **list, aChannel *chptr, char *banid);
|
||||
@@ -762,8 +750,7 @@ extern void chanfloodtimer_del(aChannel *chptr, char mflag, long mbit);
|
||||
extern char *clean_ban_mask(char *, int, aClient *);
|
||||
extern void chanfloodtimer_stopchantimers(aChannel *chptr);
|
||||
extern int find_invex(aChannel *chptr, aClient *sptr);
|
||||
extern void DoMD5(unsigned char *mdout, const unsigned char *src, unsigned long n);
|
||||
extern char *md5hash(unsigned char *dst, const unsigned char *src, unsigned long n);
|
||||
extern void DoMD5(unsigned char *mdout, unsigned char *src, unsigned long n);
|
||||
#ifdef JOINTHROTTLE
|
||||
aJFlood *cmodej_addentry(aClient *cptr, aChannel *chptr);
|
||||
void cmodej_delentry(aJFlood *e);
|
||||
@@ -775,7 +762,6 @@ extern void charsys_addmultibyterange(char s1, char e1, char s2, char e2);
|
||||
extern void charsys_addallowed(char *s);
|
||||
extern void charsys_reset(void);
|
||||
extern MODVAR char langsinuse[4096];
|
||||
extern MODVAR char *casemapping[2];
|
||||
extern MODVAR aTKline *tklines[TKLISTLEN];
|
||||
extern char *cmdname_by_spamftarget(int target);
|
||||
extern int isipv6(struct IN_ADDR *addr);
|
||||
@@ -796,12 +782,5 @@ 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(aMotdFile *motd); /* s_serv.c */
|
||||
extern void free_motd(aMotd *m);
|
||||
extern void fix_timers(void);
|
||||
extern char *chfl_to_sjoin_symbol(int s);
|
||||
extern char chfl_to_chanmode(int s);
|
||||
extern void add_pending_net(aClient *sptr, char *str);
|
||||
extern void free_pending_net(aClient *sptr);
|
||||
extern aPendingNet *find_pending_net_by_numeric_butone(int numeric, aClient *exempt);
|
||||
extern aClient *find_pending_net_duplicates(aClient *cptr, aClient **srv, int *numeric);
|
||||
extern aClient *find_non_pending_net_duplicates(aClient *cptr);
|
||||
|
||||
+1
-1
@@ -22,7 +22,7 @@ typedef struct {
|
||||
} MD5_CTX;
|
||||
|
||||
extern void MD5_Init(MD5_CTX *ctx);
|
||||
extern void MD5_Update(MD5_CTX *ctx, const void *data, unsigned long size);
|
||||
extern void MD5_Update(MD5_CTX *ctx, void *data, unsigned long size);
|
||||
extern void MD5_Final(unsigned char *result, MD5_CTX *ctx);
|
||||
|
||||
#endif
|
||||
|
||||
+1
-11
@@ -224,9 +224,6 @@ typedef struct {
|
||||
*/
|
||||
int (*sjoin_check)(aChannel *, CmodeParam *, CmodeParam *);
|
||||
|
||||
/** Local channel mode? Prevents remote servers from setting/unsetting this */
|
||||
char local;
|
||||
|
||||
/** 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
|
||||
@@ -249,7 +246,6 @@ typedef struct {
|
||||
void (*free_param)(CmodeParam *);
|
||||
CmodeParam * (*dup_struct)(CmodeParam *);
|
||||
int (*sjoin_check)(aChannel *, CmodeParam *, CmodeParam *);
|
||||
char local;
|
||||
} CmodeInfo;
|
||||
#endif
|
||||
|
||||
@@ -261,11 +257,10 @@ typedef struct {
|
||||
|
||||
#define EXBTYPE_BAN 0 /* a ban */
|
||||
#define EXBTYPE_EXCEPT 1 /* an except */
|
||||
#define EXBTYPE_INVEX 2 /* an invite exception */
|
||||
|
||||
#define EXTBANTABLESZ 32
|
||||
|
||||
typedef enum ExtbanOptions { EXTBOPT_CHSVSMODE=0x1, EXTBOPT_ACTMODIFIER=0x2, EXTBOPT_NOSTACKCHILD=0x4, EXTBOPT_INVEX=0x8 } ExtbanOptions;
|
||||
typedef enum ExtbanOptions { EXTBOPT_CHSVSMODE=0x1 } ExtbanOptions;
|
||||
|
||||
typedef struct {
|
||||
/** extbans module */
|
||||
@@ -658,8 +653,6 @@ int CallCmdoverride(Cmdoverride *ovr, aClient *cptr, aClient *sptr, int parc, ch
|
||||
#define HOOKTYPE_POST_SERVER_CONNECT 48
|
||||
#define HOOKTYPE_RAWPACKET_IN 49
|
||||
#define HOOKTYPE_LOCAL_NICKPASS 50
|
||||
#define HOOKTYPE_PACKET 51
|
||||
#define HOOKTYPE_HANDSHAKE 52
|
||||
|
||||
/* Hook return values */
|
||||
#define HOOK_CONTINUE 0
|
||||
@@ -706,9 +699,6 @@ int CallCmdoverride(Cmdoverride *ovr, aClient *cptr, aClient *sptr, int parc, ch
|
||||
#define EFUNC_STRIPCONTROLCODES 32
|
||||
#define EFUNC_SPAMFILTER_BUILD_USER_STRING 33
|
||||
#define EFUNC_IS_SILENCED 34
|
||||
#define EFUNC_SEND_PROTOCTL_SERVERS 35
|
||||
#define EFUNC_VERIFY_LINK 36
|
||||
#define EFUNC_SEND_SERVER_MESSAGE 37
|
||||
|
||||
/* Module flags */
|
||||
#define MODFLAG_NONE 0x0000
|
||||
|
||||
@@ -0,0 +1,388 @@
|
||||
/*
|
||||
* ++Copyright++ 1983, 1989, 1993
|
||||
* -
|
||||
* Copyright (c) 1983, 1989, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by the University of
|
||||
* California, Berkeley and its contributors.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS `AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
* -
|
||||
* Portions Copyright (c) 1993 by Digital Equipment Corporation.
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies, and that
|
||||
* the name of Digital Equipment Corporation not be used in advertising or
|
||||
* publicity pertaining to distribution of the document or software without
|
||||
* specific, written prior permission.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND DIGITAL EQUIPMENT CORP. DISCLAIMS ALL
|
||||
* WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES
|
||||
* OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL DIGITAL EQUIPMENT
|
||||
* CORPORATION BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
|
||||
* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
|
||||
* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
|
||||
* ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
|
||||
* SOFTWARE.
|
||||
* -
|
||||
* Portions Copyright (c) 1995 by International Business Machines, Inc.
|
||||
*
|
||||
* International Business Machines, Inc. (hereinafter called IBM) grants
|
||||
* permission under its copyrights to use, copy, modify, and distribute this
|
||||
* Software with or without fee, provided that the above copyright notice and
|
||||
* all paragraphs of this notice appear in all copies, and that the name of IBM
|
||||
* not be used in connection with the marketing of any product incorporating
|
||||
* the Software or modifications thereof, without specific, written prior
|
||||
* permission.
|
||||
*
|
||||
* To the extent it has a right to do so, IBM grants an immunity from suit
|
||||
* under its patents, if any, for the use, sale or manufacture of products to
|
||||
* the extent that such products are used for performing Domain Name System
|
||||
* dynamic updates in TCP/IP networks by means of the Software. No immunity is
|
||||
* granted for any product per se or for any other function of any product.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", AND IBM DISCLAIMS ALL WARRANTIES,
|
||||
* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
|
||||
* PARTICULAR PURPOSE. IN NO EVENT SHALL IBM BE LIABLE FOR ANY SPECIAL,
|
||||
* DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER ARISING
|
||||
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE, EVEN
|
||||
* IF IBM IS APPRISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
||||
* --Copyright--
|
||||
*/
|
||||
|
||||
/*
|
||||
* @(#)nameser.h 8.1 (Berkeley) 6/2/93
|
||||
* $NetBSD: nameser.h,v 1.14 2000/08/09 14:41:00 itojun Exp $
|
||||
*/
|
||||
|
||||
#ifndef _ARPA_NAMESER_H_
|
||||
#define _ARPA_NAMESER_H_
|
||||
|
||||
#ifdef PARAMH
|
||||
#include <sys/param.h>
|
||||
#endif
|
||||
|
||||
#ifdef _AUX_SOURCE
|
||||
# include <sys/types.h>
|
||||
#endif
|
||||
|
||||
/*
|
||||
* revision information. this is the release date in YYYYMMDD format.
|
||||
* it can change every day so the right thing to do with it is use it
|
||||
* in preprocessor commands such as "#if (__BIND > 19931104)". do not
|
||||
* compare for equality; rather, use it to determine whether your resolver
|
||||
* is new enough to contain a certain feature.
|
||||
*/
|
||||
|
||||
#define __BIND 19960801 /* interface version stamp */
|
||||
|
||||
/*
|
||||
* Define constants based on rfc883
|
||||
*/
|
||||
#define PACKETSZ 512 /* maximum packet size */
|
||||
#define MAXDNAME 1025 /* maximum presentation domain name */
|
||||
#define MAXCDNAME 255 /* maximum compressed domain name */
|
||||
#define MAXLABEL 63 /* maximum length of domain label */
|
||||
#define HFIXEDSZ 12 /* #/bytes of fixed data in header */
|
||||
#define QFIXEDSZ 4 /* #/bytes of fixed data in query */
|
||||
#define RRFIXEDSZ 10 /* #/bytes of fixed data in r record */
|
||||
#define INT32SZ 4 /* for systems without 32-bit ints */
|
||||
#define INT16SZ 2 /* for systems without 16-bit ints */
|
||||
#define INADDRSZ 4 /* IPv4 T_A */
|
||||
#define IN6ADDRSZ 16 /* IPv6 T_AAAA */
|
||||
|
||||
/*
|
||||
* Internet nameserver port number
|
||||
*/
|
||||
#define NAMESERVER_PORT 53
|
||||
|
||||
/*
|
||||
* Currently defined opcodes
|
||||
*/
|
||||
#define QUERY 0x0 /* standard query */
|
||||
#define IQUERY 0x1 /* inverse query */
|
||||
#define STATUS 0x2 /* nameserver status query */
|
||||
/*#define xxx 0x3*/ /* 0x3 reserved */
|
||||
#define NS_NOTIFY_OP 0x4 /* notify secondary of SOA change */
|
||||
/*
|
||||
* Currently defined response codes
|
||||
*/
|
||||
#define NOERROR 0 /* no error */
|
||||
#define FORMERR 1 /* format error */
|
||||
#define SERVFAIL 2 /* server failure */
|
||||
#define NXDOMAIN 3 /* non existent domain */
|
||||
#define NOTIMP 4 /* not implemented */
|
||||
#define REFUSED 5 /* query refused */
|
||||
|
||||
/*
|
||||
* Type values for resources and queries
|
||||
*/
|
||||
#define T_A 1 /* host address */
|
||||
#define T_NS 2 /* authoritative server */
|
||||
#define T_MD 3 /* mail destination */
|
||||
#define T_MF 4 /* mail forwarder */
|
||||
#define T_CNAME 5 /* canonical name */
|
||||
#define T_SOA 6 /* start of authority zone */
|
||||
#define T_MB 7 /* mailbox domain name */
|
||||
#define T_MG 8 /* mail group member */
|
||||
#define T_MR 9 /* mail rename name */
|
||||
#define T_NULL 10 /* null resource record */
|
||||
#define T_WKS 11 /* well known service */
|
||||
#define T_PTR 12 /* domain name pointer */
|
||||
#define T_HINFO 13 /* host information */
|
||||
#define T_MINFO 14 /* mailbox information */
|
||||
#define T_MX 15 /* mail routing information */
|
||||
#define T_TXT 16 /* text strings */
|
||||
#define T_RP 17 /* responsible person */
|
||||
#define T_AFSDB 18 /* AFS cell database */
|
||||
#define T_X25 19 /* X_25 calling address */
|
||||
#define T_ISDN 20 /* ISDN calling address */
|
||||
#define T_RT 21 /* router */
|
||||
#define T_NSAP 22 /* NSAP address */
|
||||
#define T_NSAP_PTR 23 /* reverse NSAP lookup (deprecated) */
|
||||
#define T_SIG 24 /* security signature */
|
||||
#define T_KEY 25 /* security key */
|
||||
#define T_PX 26 /* X.400 mail mapping */
|
||||
#define T_GPOS 27 /* geographical position (withdrawn) */
|
||||
#define T_AAAA 28 /* IP6 Address */
|
||||
#define T_LOC 29 /* Location Information */
|
||||
#define T_NXT 30 /* Next Valid Name in Zone */
|
||||
#define T_EID 31 /* Endpoint identifier */
|
||||
#define T_NIMLOC 32 /* Nimrod locator */
|
||||
#define T_SRV 33 /* Server selection */
|
||||
#define T_ATMA 34 /* ATM Address */
|
||||
#define T_NAPTR 35 /* Naming Authority PoinTeR */
|
||||
#define T_OPT 41 /* OPT pseudo-RR, RFC2761 */
|
||||
/* non standard */
|
||||
#define T_UINFO 100 /* user (finger) information */
|
||||
#define T_UID 101 /* user ID */
|
||||
#define T_GID 102 /* group ID */
|
||||
#define T_UNSPEC 103 /* Unspecified format (binary data) */
|
||||
/* Query type values which do not appear in resource records */
|
||||
#define T_IXFR 251 /* incremental zone transfer */
|
||||
#define T_AXFR 252 /* transfer zone of authority */
|
||||
#define T_MAILB 253 /* transfer mailbox records */
|
||||
#define T_MAILA 254 /* transfer mail agent records */
|
||||
#define T_ANY 255 /* wildcard match */
|
||||
|
||||
/*
|
||||
* Values for class field
|
||||
*/
|
||||
|
||||
#define C_IN 1 /* the arpa internet */
|
||||
#define C_CHAOS 3 /* for chaos net (MIT) */
|
||||
#define C_HS 4 /* for Hesiod name server (MIT) (XXX) */
|
||||
/* Query class values which do not appear in resource records */
|
||||
#define C_ANY 255 /* wildcard match */
|
||||
|
||||
/*
|
||||
* Flags field of the KEY RR rdata
|
||||
*/
|
||||
#define KEYFLAG_TYPEMASK 0xC000 /* Mask for "type" bits */
|
||||
#define KEYFLAG_TYPE_AUTH_CONF 0x0000 /* Key usable for both */
|
||||
#define KEYFLAG_TYPE_CONF_ONLY 0x8000 /* Key usable for confidentiality */
|
||||
#define KEYFLAG_TYPE_AUTH_ONLY 0x4000 /* Key usable for authentication */
|
||||
#define KEYFLAG_TYPE_NO_KEY 0xC000 /* No key usable for either; no key */
|
||||
/* The type bits can also be interpreted independently, as single bits: */
|
||||
#define KEYFLAG_NO_AUTH 0x8000 /* Key not usable for authentication */
|
||||
#define KEYFLAG_NO_CONF 0x4000 /* Key not usable for confidentiality */
|
||||
|
||||
#define KEYFLAG_EXPERIMENTAL 0x2000 /* Security is *mandatory* if bit=0 */
|
||||
#define KEYFLAG_RESERVED3 0x1000 /* reserved - must be zero */
|
||||
#define KEYFLAG_RESERVED4 0x0800 /* reserved - must be zero */
|
||||
#define KEYFLAG_USERACCOUNT 0x0400 /* key is assoc. with a user acct */
|
||||
#define KEYFLAG_ENTITY 0x0200 /* key is assoc. with entity eg host */
|
||||
#define KEYFLAG_ZONEKEY 0x0100 /* key is zone key for the zone named */
|
||||
#define KEYFLAG_IPSEC 0x0080 /* key is for IPSEC use (host or user)*/
|
||||
#define KEYFLAG_EMAIL 0x0040 /* key is for email (MIME security) */
|
||||
#define KEYFLAG_RESERVED10 0x0020 /* reserved - must be zero */
|
||||
#define KEYFLAG_RESERVED11 0x0010 /* reserved - must be zero */
|
||||
#define KEYFLAG_SIGNATORYMASK 0x000F /* key can sign DNS RR's of same name */
|
||||
|
||||
#define KEYFLAG_RESERVED_BITMASK ( KEYFLAG_RESERVED3 | \
|
||||
KEYFLAG_RESERVED4 | \
|
||||
KEYFLAG_RESERVED10| KEYFLAG_RESERVED11)
|
||||
|
||||
/* The Algorithm field of the KEY and SIG RR's is an integer, {1..254} */
|
||||
#define ALGORITHM_MD5RSA 1 /* MD5 with RSA */
|
||||
#define ALGORITHM_EXPIRE_ONLY 253 /* No alg, no security */
|
||||
#define ALGORITHM_PRIVATE_OID 254 /* Key begins with OID indicating alg */
|
||||
|
||||
/* Signatures */
|
||||
/* Size of a mod or exp in bits */
|
||||
#define MIN_MD5RSA_KEY_PART_BITS 512
|
||||
#define MAX_MD5RSA_KEY_PART_BITS 2552
|
||||
/* Total of binary mod and exp, bytes */
|
||||
#define MAX_MD5RSA_KEY_BYTES ((MAX_MD5RSA_KEY_PART_BITS+7/8)*2+3)
|
||||
/* Max length of text sig block */
|
||||
#define MAX_KEY_BASE64 (((MAX_MD5RSA_KEY_BYTES+2)/3)*4)
|
||||
|
||||
/*
|
||||
* Status return codes for T_UNSPEC conversion routines
|
||||
*/
|
||||
#define CONV_SUCCESS 0
|
||||
#define CONV_OVERFLOW (-1)
|
||||
#define CONV_BADFMT (-2)
|
||||
#define CONV_BADCKSUM (-3)
|
||||
#define CONV_BADBUFLEN (-4)
|
||||
|
||||
#ifndef BYTE_ORDER
|
||||
#if (BSD >= 199103)
|
||||
# include <machine/endian.h>
|
||||
#else
|
||||
#ifdef linux
|
||||
# include <endian.h>
|
||||
#else
|
||||
#define LITTLE_ENDIAN 1234 /* least-significant byte first (vax, pc) */
|
||||
#define BIG_ENDIAN 4321 /* most-significant byte first (IBM, net) */
|
||||
#define PDP_ENDIAN 3412 /* LSB first in word, MSW first in long (pdp)*/
|
||||
|
||||
#if defined(vax) || defined(ns32000) || defined(sun386) || defined(i386) || \
|
||||
defined(MIPSEL) || defined(_MIPSEL) || defined(BIT_ZERO_ON_RIGHT) || \
|
||||
defined(__alpha__) || defined(__alpha) || defined(__vax__) || defined(_WIN32)
|
||||
#define BYTE_ORDER LITTLE_ENDIAN
|
||||
#endif
|
||||
|
||||
#if defined(sel) || defined(pyr) || defined(mc68000) || defined(sparc) || \
|
||||
defined(is68k) || defined(tahoe) || defined(ibm032) || defined(ibm370) || \
|
||||
defined(MIPSEB) || defined(_MIPSEB) || defined(_IBMR2) || defined(DGUX) ||\
|
||||
defined(apollo) || defined(__convex__) || defined(_CRAY) || \
|
||||
defined(__hppa) || defined(__hp9000) || \
|
||||
defined(__hp9000s300) || defined(__hp9000s700) || \
|
||||
defined (BIT_ZERO_ON_LEFT) || defined(m68k)
|
||||
#define BYTE_ORDER BIG_ENDIAN
|
||||
#endif
|
||||
#endif /* linux */
|
||||
#endif /* BSD */
|
||||
#endif /* BYTE_ORDER */
|
||||
|
||||
#if !defined(BYTE_ORDER) || \
|
||||
(BYTE_ORDER != BIG_ENDIAN && BYTE_ORDER != LITTLE_ENDIAN && \
|
||||
BYTE_ORDER != PDP_ENDIAN)
|
||||
/* you must determine what the correct bit order is for
|
||||
* your compiler - the next line is an intentional error
|
||||
* which will force your compiles to bomb until you fix
|
||||
* the above macros.
|
||||
*/
|
||||
#error "Undefined or invalid BYTE_ORDER";
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Structure for query header. The order of the fields is machine- and
|
||||
* compiler-dependent, depending on the byte/bit order and the layout
|
||||
* of bit fields. We use bit fields only in int variables, as this
|
||||
* is all ANSI requires. This requires a somewhat confusing rearrangement.
|
||||
*/
|
||||
|
||||
typedef struct {
|
||||
unsigned id :16; /* query identification number */
|
||||
#if BYTE_ORDER == BIG_ENDIAN
|
||||
/* fields in third byte */
|
||||
unsigned qr: 1; /* response flag */
|
||||
unsigned opcode: 4; /* purpose of message */
|
||||
unsigned aa: 1; /* authoritive answer */
|
||||
unsigned tc: 1; /* truncated message */
|
||||
unsigned rd: 1; /* recursion desired */
|
||||
/* fields in fourth byte */
|
||||
unsigned ra: 1; /* recursion available */
|
||||
unsigned unused :1; /* unused bits (MBZ as of 4.9.3a3) */
|
||||
unsigned ad: 1; /* authentic data from named */
|
||||
unsigned cd: 1; /* checking disabled by resolver */
|
||||
unsigned rcode :4; /* response code */
|
||||
#endif
|
||||
#if BYTE_ORDER == LITTLE_ENDIAN || BYTE_ORDER == PDP_ENDIAN
|
||||
/* fields in third byte */
|
||||
unsigned rd :1; /* recursion desired */
|
||||
unsigned tc :1; /* truncated message */
|
||||
unsigned aa :1; /* authoritive answer */
|
||||
unsigned opcode :4; /* purpose of message */
|
||||
unsigned qr :1; /* response flag */
|
||||
/* fields in fourth byte */
|
||||
unsigned rcode :4; /* response code */
|
||||
unsigned cd: 1; /* checking disabled by resolver */
|
||||
unsigned ad: 1; /* authentic data from named */
|
||||
unsigned unused :1; /* unused bits (MBZ as of 4.9.3a3) */
|
||||
unsigned ra :1; /* recursion available */
|
||||
#endif
|
||||
/* remaining bytes */
|
||||
unsigned qdcount :16; /* number of question entries */
|
||||
unsigned ancount :16; /* number of answer entries */
|
||||
unsigned nscount :16; /* number of authority entries */
|
||||
unsigned arcount :16; /* number of resource entries */
|
||||
} HEADER;
|
||||
|
||||
/*
|
||||
* Defines for handling compressed domain names
|
||||
*/
|
||||
#define INDIR_MASK 0xc0
|
||||
|
||||
|
||||
/*
|
||||
* Inline versions of get/put short/long. Pointer is advanced.
|
||||
*
|
||||
* These macros demonstrate the property of C whereby it can be
|
||||
* portable or it can be elegant but rarely both.
|
||||
*/
|
||||
#define GETSHORT(s, cp) { \
|
||||
register const u_char *t_cp = (const u_char *)(cp); \
|
||||
(s) = ((const u_int16_t)t_cp[0] << 8) \
|
||||
| ((const u_int16_t)t_cp[1]) \
|
||||
; \
|
||||
(cp) += INT16SZ; \
|
||||
}
|
||||
|
||||
#define GETLONG(l, cp) { \
|
||||
register const u_char *t_cp = (const u_char *)(cp); \
|
||||
(l) = ((const u_int32_t)t_cp[0] << 24) \
|
||||
| ((const u_int32_t)t_cp[1] << 16) \
|
||||
| ((const u_int32_t)t_cp[2] << 8) \
|
||||
| ((const u_int32_t)t_cp[3]) \
|
||||
; \
|
||||
(cp) += INT32SZ; \
|
||||
}
|
||||
|
||||
#define PUTSHORT(s, cp) { \
|
||||
register u_int16_t t_s = (u_int16_t)(s); \
|
||||
register u_char *t_cp = (u_char *)(cp); \
|
||||
*t_cp++ = (u_int32_t)t_s >> 8; \
|
||||
*t_cp = t_s; \
|
||||
(cp) += INT16SZ; \
|
||||
}
|
||||
|
||||
#define PUTLONG(l, cp) { \
|
||||
register u_int32_t t_l = (u_int32_t)(l); \
|
||||
register u_char *t_cp = (u_char *)(cp); \
|
||||
*t_cp++ = t_l >> 24; \
|
||||
*t_cp++ = t_l >> 16; \
|
||||
*t_cp++ = t_l >> 8; \
|
||||
*t_cp = t_l; \
|
||||
(cp) += INT32SZ; \
|
||||
}
|
||||
|
||||
#endif /* _ARPA_NAMESER_H_ */
|
||||
|
||||
@@ -361,13 +361,8 @@
|
||||
|
||||
#define RPL_SPAMCMDFWD 659
|
||||
|
||||
#define RPL_STARTTLS 670
|
||||
|
||||
#define RPL_WHOISSECURE 671
|
||||
|
||||
#define ERR_CANNOTDOCOMMAND 972
|
||||
#define ERR_CANNOTCHANGECHANMODE 974
|
||||
|
||||
#define ERR_STARTTLS 691
|
||||
|
||||
#define ERR_NUMERICERR 999
|
||||
|
||||
+2
-1
@@ -58,7 +58,8 @@ char *my_itoa(int i);
|
||||
/* s_serv.c */
|
||||
void load_tunefile(void);
|
||||
extern EVENT(save_tunefile);
|
||||
extern void read_motd(const char *filename, aMotdFile *motd);
|
||||
aMotd *read_rules(char *filename);
|
||||
aMotd *read_motd(char *filename);
|
||||
|
||||
/* s_user.c */
|
||||
int check_for_target_limit(aClient *sptr, void *target, const char *name);
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
/* OMG... OMG! WHAT AN INCLUDE HORROR !!! */
|
||||
#undef strcasecmp
|
||||
#undef strncasecmp
|
||||
#ifdef WIN32
|
||||
#include <win32/ares/setup.h>
|
||||
#endif
|
||||
#include <ares.h>
|
||||
#include <ares_version.h>
|
||||
#undef strcasecmp
|
||||
|
||||
+215
-341
@@ -1,107 +1,178 @@
|
||||
/* include/setup.h.in. Generated from configure.ac by autoheader. */
|
||||
/* config.h.in. Generated automatically from configure.in by autoheader. */
|
||||
|
||||
/* Define if you have BSD signals */
|
||||
#undef BSD_RELIABLE_SIGNALS
|
||||
|
||||
/* Set to the bufferpool size you want */
|
||||
#undef BUFFERPOOL
|
||||
|
||||
/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP
|
||||
systems. This function is required for `alloca.c' support on those systems.
|
||||
*/
|
||||
#undef CRAY_STACKSEG_END
|
||||
|
||||
/* Define to 1 if using `alloca.c'. */
|
||||
/* Define if using alloca.c. */
|
||||
#undef C_ALLOCA
|
||||
|
||||
/* The default permissions for configuration files. Set to 0 to prevent
|
||||
unrealircd from calling chmod() on the files. */
|
||||
#undef DEFAULT_PERMISSIONS
|
||||
/* Define to empty if the keyword does not work. */
|
||||
#undef const
|
||||
|
||||
/* Define to disable extended ban stacking (~q:~c:\#chan, etc) */
|
||||
#undef DISABLE_STACKED_EXTBANS
|
||||
/* Define to one of _getb67, GETB67, getb67 for Cray-2 and Cray-YMP systems.
|
||||
This function is required for alloca.c support on those systems. */
|
||||
#undef CRAY_STACKSEG_END
|
||||
|
||||
/* Define if you want to disable /set* and /chg* */
|
||||
#undef DISABLE_USERMOD
|
||||
/* Define to `int' if <sys/types.h> doesn't define. */
|
||||
#undef gid_t
|
||||
|
||||
/* Define the location of the configuration files */
|
||||
#undef DPATH
|
||||
/* Define if you have <sys/wait.h> that is POSIX.1 compatible. */
|
||||
#undef HAVE_SYS_WAIT_H
|
||||
|
||||
/* Define if you can set the core size to unlimited */
|
||||
#undef FORCE_CORE
|
||||
/* Define if you have the vprintf function. */
|
||||
#undef HAVE_VPRINTF
|
||||
|
||||
/* Define if you have getrusage */
|
||||
#undef GETRUSAGE_2
|
||||
/* Define as __inline if that's what the C compiler calls it. */
|
||||
#undef inline
|
||||
|
||||
/* Define if you have gettimeofday */
|
||||
#undef GETTIMEOFDAY
|
||||
/* Define if the `setpgrp' function takes no argument. */
|
||||
#undef SETPGRP_VOID
|
||||
|
||||
/* Define if the setvbuf function takes the buffering type as its second
|
||||
argument and the buffer pointer as the third, as on System V
|
||||
before release 3. */
|
||||
#undef SETVBUF_REVERSED
|
||||
|
||||
/* Define to `unsigned' if <sys/types.h> doesn't define. */
|
||||
#undef size_t
|
||||
|
||||
/* If using the C implementation of alloca, define if you know the
|
||||
direction of stack growth for your system; otherwise it will be
|
||||
automatically deduced at run-time.
|
||||
STACK_DIRECTION > 0 => grows toward higher addresses
|
||||
STACK_DIRECTION < 0 => grows toward lower addresses
|
||||
STACK_DIRECTION = 0 => direction of growth unknown
|
||||
*/
|
||||
#undef STACK_DIRECTION
|
||||
|
||||
/* Define if you have the ANSI C header files. */
|
||||
#undef STDC_HEADERS
|
||||
|
||||
/* Define if you can safely include both <sys/time.h> and <time.h>. */
|
||||
#undef TIME_WITH_SYS_TIME
|
||||
|
||||
/* Define if your <sys/time.h> declares struct tm. */
|
||||
#undef TM_IN_SYS_TIME
|
||||
|
||||
/* Define to `int' if <sys/types.h> doesn't define. */
|
||||
#undef uid_t
|
||||
|
||||
/* Define if you do not have the index function. */
|
||||
#undef NOINDEX
|
||||
|
||||
/* Define if you need the strtok function. */
|
||||
#undef NEED_STRTOK
|
||||
|
||||
/* Define if you need the strtoken function. */
|
||||
#undef NEED_STRTOKEN
|
||||
|
||||
/* Define if you have the times function. */
|
||||
#undef HAVE_TIMES
|
||||
|
||||
/* Define if you have the <stddef.h> header file. */
|
||||
#undef STDDEFH
|
||||
|
||||
/* Define if you have the <stdlib.h> header file. */
|
||||
#undef STDLIBH
|
||||
|
||||
/* Define if you have the <string.h> header file. */
|
||||
#undef STRINGH
|
||||
|
||||
/* Define if you have the <strings.h> header file. */
|
||||
#undef STRINGSH
|
||||
|
||||
/* Define if you have the <sys/param.h> header file. */
|
||||
#undef PARAMH
|
||||
|
||||
/* Define if you have the <sys/rusage.h> header file. */
|
||||
#undef HAVE_SYS_RUSAGE_H
|
||||
|
||||
/* Define if you have the <sys/syslog.h> header file. */
|
||||
#undef SYSSYSLOGH
|
||||
|
||||
/* Define if you have the <unistd.h> header file. */
|
||||
#undef UNISTDH
|
||||
|
||||
/* Define to <malloc.h> you need malloc.h. */
|
||||
#undef MALLOCH
|
||||
|
||||
/* Define if you have the <sys/rusage.h> header file. */
|
||||
#undef RUSAGEH
|
||||
|
||||
/* Define if you have the <glob.h> header file. */
|
||||
#undef GLOBH
|
||||
|
||||
/* Define if you have regex */
|
||||
#undef HAVE_REGEX
|
||||
|
||||
/* Define if you don't have bcopy */
|
||||
#undef NEED_BCOPY
|
||||
|
||||
/* Define if you don't have bcmp */
|
||||
#undef NEED_BCMP
|
||||
|
||||
/* Define if you need bzero */
|
||||
#undef NEED_BZERO
|
||||
|
||||
/* Define if you have syslog */
|
||||
#undef HAVE_SYSLOG
|
||||
|
||||
/* Define if you have vsyslog */
|
||||
#undef HAVE_VSYSLOG
|
||||
|
||||
/* Define if you want to allow SSL connections */
|
||||
#undef USE_SSL
|
||||
|
||||
/* Define if you can set the core size to unlimited */
|
||||
#undef FORCE_CORE
|
||||
|
||||
/* Define if you have strcasecmp */
|
||||
#undef GOT_STRCASECMP
|
||||
|
||||
/* Define to 1 if you have `alloca', as a function or macro. */
|
||||
#undef HAVE_ALLOCA
|
||||
/* Define if you need inet_addr */
|
||||
#undef NEED_INET_ADDR
|
||||
|
||||
/* Define to 1 if you have <alloca.h> and it should be used (not on Ultrix).
|
||||
*/
|
||||
#undef HAVE_ALLOCA_H
|
||||
/* Define if you need inet_ntoa */
|
||||
#undef NEED_INET_NTOA
|
||||
|
||||
/* Define to 1 if you have the `bcmp' function. */
|
||||
#undef HAVE_BCMP
|
||||
/* Define if you need inet_netof */
|
||||
#undef NEED_INET_NETOF
|
||||
|
||||
/* Define to 1 if you have the `bcopy' function. */
|
||||
#undef HAVE_BCOPY
|
||||
/* Define if you have gettimeofday */
|
||||
#undef GETTIMEOFDAY
|
||||
|
||||
/* Define to 1 if you have the `bzero' function. */
|
||||
#undef HAVE_BZERO
|
||||
/* Define if you have lrand48 */
|
||||
#undef LRAND48
|
||||
|
||||
/* Define if you have a compiler with C99 variable length array support */
|
||||
#undef HAVE_C99_VARLEN_ARRAY
|
||||
/* Define if you have getrusage */
|
||||
#undef GETRUSAGE_2
|
||||
|
||||
/* Define if you have crypt */
|
||||
#undef HAVE_CRYPT
|
||||
/* Define if you have times */
|
||||
#undef TIMES_2
|
||||
|
||||
/* Define to 1 if you don't have `vprintf' but do have `_doprnt.' */
|
||||
#undef HAVE_DOPRNT
|
||||
/* Define if you have O_NONBLOCK */
|
||||
#undef NBLOCK_POSIX
|
||||
|
||||
/* Define to 1 if you have the `getrusage' function. */
|
||||
#undef HAVE_GETRUSAGE
|
||||
/* Define if you have O_NDELAY */
|
||||
#undef NBLOCK_BSD
|
||||
|
||||
/* Define to 1 if you have the `gettimeofday' function. */
|
||||
#undef HAVE_GETTIMEOFDAY
|
||||
/* Define if you have FIONBIO */
|
||||
#undef NBLOCK_SYSV
|
||||
|
||||
/* Define to 1 if you have the `index' function. */
|
||||
#undef HAVE_INDEX
|
||||
/* Define if you have POSIX signals */
|
||||
#undef POSIX_SIGNALS
|
||||
|
||||
/* Define to 1 if you have the `inet_addr' function. */
|
||||
#undef HAVE_INET_ADDR
|
||||
/* Define if you have BSD signals */
|
||||
#undef RELIABLE_BSD_SIGNALS
|
||||
|
||||
/* Define to 1 if you have the `inet_netof' function. */
|
||||
#undef HAVE_INET_NETOF
|
||||
/* Define if you have SYSV signals */
|
||||
#undef UNRELIABLE_SYSV_SIGNALS
|
||||
|
||||
/* Define to 1 if you have the `inet_ntoa' function. */
|
||||
#undef HAVE_INET_NTOA
|
||||
/* Define these to be unsigned integral internal types,
|
||||
* of respecitvely 2 and 4 bytes in size, when not already
|
||||
* defined in <sys/types.h>, <stdlib.h> or <stddef.h> */
|
||||
#undef u_int16_t
|
||||
#undef u_int32_t
|
||||
|
||||
/* Define to 1 if you have the `inet_ntop' function. */
|
||||
#undef HAVE_INET_NTOP
|
||||
|
||||
/* Define to 1 if you have the `inet_pton' function. */
|
||||
#undef HAVE_INET_PTON
|
||||
|
||||
/* Define to 1 if the system has the type `intptr_t'. */
|
||||
#undef HAVE_INTPTR_T
|
||||
|
||||
/* Define to 1 if you have the <inttypes.h> header file. */
|
||||
#undef HAVE_INTTYPES_H
|
||||
|
||||
/* Define to 1 if you have the `lrand48' function. */
|
||||
#undef HAVE_LRAND48
|
||||
|
||||
/* Define to 1 if you have the <memory.h> header file. */
|
||||
#undef HAVE_MEMORY_H
|
||||
/* Define if you have setproctitle */
|
||||
#undef HAVE_SETPROCTITLE
|
||||
|
||||
/* Define if you have PS_STRINGS */
|
||||
#undef HAVE_PSSTRINGS
|
||||
@@ -109,143 +180,56 @@
|
||||
/* Define if you have pstat */
|
||||
#undef HAVE_PSTAT
|
||||
|
||||
/* Define if you have setproctitle */
|
||||
#undef HAVE_SETPROCTITLE
|
||||
/* Define if you have crypt */
|
||||
#undef HAVE_CRYPT
|
||||
|
||||
/* Define to 1 if you have the `snprintf' function. */
|
||||
#undef HAVE_SNPRINTF
|
||||
/* Local hostname of the server */
|
||||
#undef DOMAINNAME
|
||||
|
||||
/* Define to 1 if you have the <stdint.h> header file. */
|
||||
#undef HAVE_STDINT_H
|
||||
|
||||
/* Define to 1 if you have the <stdlib.h> header file. */
|
||||
#undef HAVE_STDLIB_H
|
||||
|
||||
/* Define to 1 if you have the `strcasecmp' function. */
|
||||
#undef HAVE_STRCASECMP
|
||||
|
||||
/* Define to 1 if you have the `strerror' function. */
|
||||
#undef HAVE_STRERROR
|
||||
|
||||
/* Define to 1 if you have the <strings.h> header file. */
|
||||
#undef HAVE_STRINGS_H
|
||||
|
||||
/* Define to 1 if you have the <string.h> header file. */
|
||||
#undef HAVE_STRING_H
|
||||
|
||||
/* Define to 1 if you have the `strlcat' function. */
|
||||
#undef HAVE_STRLCAT
|
||||
|
||||
/* Define to 1 if you have the `strlcpy' function. */
|
||||
#undef HAVE_STRLCPY
|
||||
|
||||
/* Define to 1 if you have the `strlncat' function. */
|
||||
#undef HAVE_STRLNCAT
|
||||
|
||||
/* Define to 1 if you have the `strtok' function. */
|
||||
#undef HAVE_STRTOK
|
||||
|
||||
/* Define to 1 if you have the `strtoken' function. */
|
||||
#undef HAVE_STRTOKEN
|
||||
|
||||
/* Define to 1 if you have the `strtoul' function. */
|
||||
#undef HAVE_STRTOUL
|
||||
|
||||
/* Define to 1 if you have the `syslog' function. */
|
||||
#undef HAVE_SYSLOG
|
||||
|
||||
/* Define to 1 if you have the <sys/stat.h> header file. */
|
||||
#undef HAVE_SYS_STAT_H
|
||||
|
||||
/* Define to 1 if you have the <sys/types.h> header file. */
|
||||
#undef HAVE_SYS_TYPES_H
|
||||
|
||||
/* Define to 1 if you have the `times' function. */
|
||||
#undef HAVE_TIMES
|
||||
|
||||
/* Define to 1 if you have the <unistd.h> header file. */
|
||||
#undef HAVE_UNISTD_H
|
||||
|
||||
/* Define to 1 if you have the `vprintf' function. */
|
||||
#undef HAVE_VPRINTF
|
||||
|
||||
/* Define to 1 if you have the `vsnprintf' function. */
|
||||
#undef HAVE_VSNPRINTF
|
||||
|
||||
/* Define to 1 if you have the `vsyslog' function. */
|
||||
#undef HAVE_VSYSLOG
|
||||
|
||||
/* Define if you want IPv6 enabled */
|
||||
#undef INET6
|
||||
|
||||
/* Set to the listen backlog size you want */
|
||||
#undef LISTEN_SIZE
|
||||
|
||||
/* Define if you want modes shown in /list */
|
||||
#undef LIST_SHOW_MODES
|
||||
|
||||
/* Define if rlim_t is long long */
|
||||
#undef LONG_LONG_RLIM_T
|
||||
|
||||
/* Define if you have lrand48 */
|
||||
#undef LRADN48
|
||||
|
||||
/* Define to <malloc.h> you need malloc.h. */
|
||||
#undef MALLOCH
|
||||
|
||||
/* Set to the max connections you want */
|
||||
#undef MAXCONNECTIONS
|
||||
|
||||
/* Set to the max sendq you want */
|
||||
#undef MAXSENDQLENGTH
|
||||
|
||||
/* Define if you have O_NDELAY */
|
||||
#undef NBLOCK_BSD
|
||||
|
||||
/* Define if you have O_NONBLOCK */
|
||||
#undef NBLOCK_POSIX
|
||||
|
||||
/* Define if you have FIONBIO */
|
||||
#undef NBLOCK_SYSV
|
||||
|
||||
/* Define if you don't have bcmp */
|
||||
#undef NEED_BCMP
|
||||
|
||||
/* Define if you don't have bcopy */
|
||||
#undef NEED_BCOPY
|
||||
|
||||
/* Define if you need bzero */
|
||||
#undef NEED_BZERO
|
||||
|
||||
/* Define if you need inet_addr */
|
||||
#undef NEED_INET_ADDR
|
||||
|
||||
/* Define if you need inet_netof */
|
||||
#undef NEED_INET_NETOF
|
||||
|
||||
/* Define if you need inet_ntoa */
|
||||
#undef NEED_INET_NTOA
|
||||
|
||||
/* Define if you need the strerror function. */
|
||||
#undef NEED_STRERROR
|
||||
|
||||
/* Define if you need the strtok function. */
|
||||
#undef NEED_STRTOK
|
||||
|
||||
/* Define if you need the strtoken function. */
|
||||
#undef NEED_STRTOKEN
|
||||
|
||||
/* Set to the nickname history length you want */
|
||||
#undef NICKNAMEHISTORYLENGTH
|
||||
|
||||
/* Define if you do not have the index function. */
|
||||
#undef NOINDEX
|
||||
/* The default permissions for configuration files */
|
||||
#undef DEFAULT_PERMISSIONS
|
||||
|
||||
/* Define if you want spoof protection */
|
||||
#undef NOSPOOF
|
||||
|
||||
/* Define to 1 if your system has no in6addr_any. */
|
||||
#undef NO_IN6ADDR_ANY
|
||||
/* Define if you want +a/+q prefixes */
|
||||
#undef PREFIX_AQ
|
||||
|
||||
/* Define if you want to compile as a hub */
|
||||
#undef HUB
|
||||
|
||||
/* Define the location of the configuration files */
|
||||
#undef DPATH
|
||||
|
||||
/* Define the location of the executable */
|
||||
#undef SPATH
|
||||
|
||||
/* Set to the listen backlog size you want */
|
||||
#undef LISTEN_SIZE
|
||||
|
||||
/* Set to the max sendq you want */
|
||||
#undef MAXSENDQLENGTH
|
||||
|
||||
/* Set to the nickname history length you want */
|
||||
#undef NICKNAMEHISTORYLENGTH
|
||||
|
||||
/* Set to the bufferpool size you want */
|
||||
#undef BUFFERPOOL
|
||||
|
||||
/* Set to the max connections you want */
|
||||
#undef MAXCONNECTIONS
|
||||
|
||||
/* Define if you want IPv6 enabled */
|
||||
#undef INET6
|
||||
|
||||
/* Define if you want modes shown in /list */
|
||||
#undef LIST_SHOW_MODES
|
||||
|
||||
/* Define if you want nick!user@host shown for the topic setter */
|
||||
#undef TOPIC_NICK_IS_NUHOST
|
||||
|
||||
/* Define if you want users to be notified when their shun is removed */
|
||||
#undef SHUN_NOTICES
|
||||
|
||||
/* Define if you want OperOverride disabled */
|
||||
#undef NO_OPEROVERRIDE
|
||||
@@ -253,154 +237,44 @@
|
||||
/* Define if you want opers to have to use /invite to join +s/+p channels */
|
||||
#undef OPEROVERRIDE_VERIFY
|
||||
|
||||
/* Define to the address where bug reports for this package should be sent. */
|
||||
#undef PACKAGE_BUGREPORT
|
||||
|
||||
/* Define to the full name of this package. */
|
||||
#undef PACKAGE_NAME
|
||||
|
||||
/* Define to the full name and version of this package. */
|
||||
#undef PACKAGE_STRING
|
||||
|
||||
/* Define to the one symbol short name of this package. */
|
||||
#undef PACKAGE_TARNAME
|
||||
|
||||
/* Define to the home page for this package. */
|
||||
#undef PACKAGE_URL
|
||||
|
||||
/* Define to the version of this package. */
|
||||
#undef PACKAGE_VERSION
|
||||
|
||||
/* Define if you have the <sys/param.h> header file. */
|
||||
#undef PARAMH
|
||||
|
||||
/* Define if you have POSIX signals */
|
||||
#undef POSIX_SIGNALS
|
||||
|
||||
/* Define if you want +a/+q prefixes */
|
||||
#undef PREFIX_AQ
|
||||
|
||||
/* Define if you have the <sys/rusage.h> header file. */
|
||||
#undef RUSAGEH
|
||||
|
||||
/* Define to 1 if the `setpgrp' function takes no argument. */
|
||||
#undef SETPGRP_VOID
|
||||
|
||||
/* Define if you want users to be notified when their shun is removed */
|
||||
#undef SHUN_NOTICES
|
||||
|
||||
/* The size of `int', as computed by sizeof. */
|
||||
#undef SIZEOF_INT
|
||||
|
||||
/* The size of `long', as computed by sizeof. */
|
||||
#undef SIZEOF_LONG
|
||||
|
||||
/* The size of `rlim_t', as computed by sizeof. */
|
||||
#undef SIZEOF_RLIM_T
|
||||
|
||||
/* The size of `short', as computed by sizeof. */
|
||||
#undef SIZEOF_SHORT
|
||||
|
||||
/* Define the location of the executable */
|
||||
#undef SPATH
|
||||
|
||||
/* If using the C implementation of alloca, define if you know the
|
||||
direction of stack growth for your system; otherwise it will be
|
||||
automatically deduced at runtime.
|
||||
STACK_DIRECTION > 0 => grows toward higher addresses
|
||||
STACK_DIRECTION < 0 => grows toward lower addresses
|
||||
STACK_DIRECTION = 0 => direction of growth unknown */
|
||||
#undef STACK_DIRECTION
|
||||
|
||||
/* Link... statically(?) (defining this macro will probably cause the build
|
||||
tofail) */
|
||||
#undef STATIC_LINKING
|
||||
|
||||
/* Define to 1 if you have the ANSI C header files. */
|
||||
#undef STDC_HEADERS
|
||||
|
||||
/* Define if you have the <stddef.h> header file. */
|
||||
#undef STDDEFH
|
||||
|
||||
/* Define if you have the <stdlib.h> header file. */
|
||||
#undef STDLIBH
|
||||
|
||||
/* Define if you have the <string.h> header file. */
|
||||
#undef STRINGH
|
||||
|
||||
/* Define if you have the <strings.h> header file. */
|
||||
#undef STRINGSH
|
||||
|
||||
/* Define if you have the <sys/syslog.h> header file. */
|
||||
#undef SYSSYSLOGH
|
||||
|
||||
/* Define if you have SYSV signals */
|
||||
#undef SYSV_UNRELIABLE_SIGNALS
|
||||
|
||||
/* Define if you have times */
|
||||
#undef TIMES_2
|
||||
|
||||
/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */
|
||||
#undef TIME_WITH_SYS_TIME
|
||||
|
||||
/* Define to 1 if your <sys/time.h> declares `struct tm'. */
|
||||
#undef TM_IN_SYS_TIME
|
||||
|
||||
/* Define if you want nick!user@host shown for the topic setter */
|
||||
#undef TOPIC_NICK_IS_NUHOST
|
||||
/* Define if you want to disable /set* and /chg* */
|
||||
#undef DISABLE_USERMOD
|
||||
|
||||
/* Define if your system prepends an underscore to symbols */
|
||||
#undef UNDERSCORE
|
||||
|
||||
/* Define if you have the <unistd.h> header file. */
|
||||
#undef UNISTDH
|
||||
/* Define if rlim_t is long long */
|
||||
#undef LONG_LONG_RLIM_T
|
||||
|
||||
/* Define if you have libcurl installed to get remote includes and MOTD
|
||||
support */
|
||||
#undef USE_LIBCURL
|
||||
/* Define if you have snprintf */
|
||||
#undef HAVE_SNPRINTF
|
||||
|
||||
/* Define if you want to allow SSL connections */
|
||||
#undef USE_SSL
|
||||
/* Define if you have vsnprintf */
|
||||
#undef HAVE_VSNPRINTF
|
||||
|
||||
/* Define if you have zlib and want zip links support. */
|
||||
#undef ZIP_LINKS
|
||||
/* Define if you have strlcpy */
|
||||
#undef HAVE_STRLCPY
|
||||
|
||||
/* Define if you are compiling unrealircd on Sun's (or Oracle's?) Solaris */
|
||||
#undef _SOLARIS
|
||||
/* Define if you have strlcat */
|
||||
#undef HAVE_STRLCAT
|
||||
|
||||
/* Define to empty if `const' does not conform to ANSI C. */
|
||||
#undef const
|
||||
/* Define if you have strlncat */
|
||||
#undef HAVE_STRLNCAT
|
||||
|
||||
/* Define to `int' if <sys/types.h> doesn't define. */
|
||||
#undef gid_t
|
||||
/* Define if you have inet_pton */
|
||||
#undef HAVE_INET_PTON
|
||||
|
||||
/* Define to `__inline__' or `__inline' if that's what the C compiler
|
||||
calls it, or to nothing if 'inline' is not supported under any name. */
|
||||
#ifndef __cplusplus
|
||||
#undef inline
|
||||
#endif
|
||||
/* Define if you have inet_ntop */
|
||||
#undef HAVE_INET_NTOP
|
||||
|
||||
/* Define to `short' if <sys/types.h> does not define. */
|
||||
#undef int16_t
|
||||
/* Define if you have a compiler with C99 variable length array support */
|
||||
#undef HAVE_C99_VARLEN_ARRAY
|
||||
|
||||
/* Define to `long' if <sys/types.h> does not define. */
|
||||
#undef int32_t
|
||||
/* Define if you have alloca.h */
|
||||
#undef HAVE_ALLOCA_H
|
||||
|
||||
/* Define to the type of a signed integer type wide enough to hold a pointer,
|
||||
if such a type exists, and if the system does not define it. */
|
||||
#undef intptr_t
|
||||
/* Define if you have alloca */
|
||||
#undef HAVE_ALLOCA
|
||||
|
||||
/* Define to `int' if <sys/types.h> does not define. */
|
||||
#undef mode_t
|
||||
|
||||
/* Define to `unsigned int' if <sys/types.h> does not define. */
|
||||
#undef size_t
|
||||
|
||||
/* Define to `unsigned short' if <sys/types.h> does not define. */
|
||||
#undef u_int16_t
|
||||
|
||||
/* Define to `unsigned long' if <sys/types.h> does not define. */
|
||||
#undef u_int32_t
|
||||
|
||||
/* Define to `int' if <sys/types.h> doesn't define. */
|
||||
#undef uid_t
|
||||
/* Define to 1 if your system has no in6addr_any. */
|
||||
#undef NO_IN6ADDR_ANY
|
||||
|
||||
@@ -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
|
||||
*
|
||||
|
||||
+17
-84
@@ -24,7 +24,6 @@
|
||||
#define __struct_include__
|
||||
|
||||
#include "config.h"
|
||||
#include "sys.h"
|
||||
/* need to include ssl stuff here coz otherwise you get
|
||||
* conflicting types with isalnum/isalpha/etc @ redhat. -- Syzop
|
||||
*/
|
||||
@@ -65,10 +64,17 @@
|
||||
#include "zip.h"
|
||||
#endif
|
||||
#include "auth.h"
|
||||
#ifndef _WIN32
|
||||
#include "tre/regex.h"
|
||||
#else
|
||||
#include "win32/regex.h"
|
||||
#endif
|
||||
|
||||
#include "channel.h"
|
||||
|
||||
#if defined(_WIN32) && !defined(NOSPOOF)
|
||||
#error "Compiling win32 without nospoof is VERY insecure and NOT supported"
|
||||
#endif
|
||||
|
||||
|
||||
extern MODVAR int sendanyways;
|
||||
@@ -88,7 +94,6 @@ typedef struct _configflag_ban ConfigFlag_ban;
|
||||
typedef struct _configflag_tld ConfigFlag_tld;
|
||||
typedef struct _configitem ConfigItem;
|
||||
typedef struct _configitem_me ConfigItem_me;
|
||||
typedef struct _configitem_files ConfigItem_files;
|
||||
typedef struct _configitem_admin ConfigItem_admin;
|
||||
typedef struct _configitem_class ConfigItem_class;
|
||||
typedef struct _configitem_oper ConfigItem_oper;
|
||||
@@ -137,12 +142,7 @@ typedef struct SChanFloodProt ChanFloodProt;
|
||||
typedef struct SRemoveFld RemoveFld;
|
||||
typedef struct ListOptions LOpts;
|
||||
typedef struct FloodOpt aFloodOpt;
|
||||
typedef struct Motd aMotdFile; /* represents a whole MOTD, including remote MOTD support info */
|
||||
typedef struct MotdItem aMotdLine; /* one line of a MOTD stored as a linked list */
|
||||
#ifdef USE_LIBCURL
|
||||
typedef struct MotdDownload aMotdDownload; /* used to coordinate download of a remote MOTD */
|
||||
#endif
|
||||
|
||||
typedef struct MotdItem aMotd;
|
||||
typedef struct trecord aTrecord;
|
||||
typedef struct Command aCommand;
|
||||
typedef struct _cmdoverride Cmdoverride;
|
||||
@@ -150,7 +150,6 @@ typedef struct SMember Member;
|
||||
typedef struct SMembership Membership;
|
||||
typedef struct SMembershipL MembershipL;
|
||||
typedef struct JFlood aJFlood;
|
||||
typedef struct PendingNet aPendingNet;
|
||||
|
||||
#ifdef ZIP_LINKS
|
||||
typedef struct Zdata aZdata;
|
||||
@@ -232,7 +231,6 @@ typedef unsigned int u_int32_t; /* XXX Hope this works! */
|
||||
|
||||
#define STAT_LOG -7 /* logfile for -x */
|
||||
#define STAT_CONNECTING -6
|
||||
#define STAT_SSL_STARTTLS_HANDSHAKE -8
|
||||
#define STAT_SSL_CONNECT_HANDSHAKE -5
|
||||
#define STAT_SSL_ACCEPT_HANDSHAKE -4
|
||||
#define STAT_HANDSHAKE -3
|
||||
@@ -255,11 +253,9 @@ typedef unsigned int u_int32_t; /* XXX Hope this works! */
|
||||
#define IsLog(x) ((x)->status == STAT_LOG)
|
||||
|
||||
#ifdef USE_SSL
|
||||
#define IsSSLStartTLSHandshake(x) ((x)->status == STAT_SSL_STARTTLS_HANDSHAKE)
|
||||
#define IsSSLAcceptHandshake(x) ((x)->status == STAT_SSL_ACCEPT_HANDSHAKE)
|
||||
#define IsSSLConnectHandshake(x) ((x)->status == STAT_SSL_CONNECT_HANDSHAKE)
|
||||
#define IsSSLHandshake(x) (IsSSLAcceptHandshake(x) || IsSSLConnectHandshake(x) | IsSSLStartTLSHandshake(x))
|
||||
#define SetSSLStartTLSHandshake(x) ((x)->status = STAT_SSL_STARTTLS_HANDSHAKE)
|
||||
#define IsSSLHandshake(x) (IsSSLAcceptHandshake(x) || IsSSLConnectHandshake(x))
|
||||
#define SetSSLAcceptHandshake(x) ((x)->status = STAT_SSL_ACCEPT_HANDSHAKE)
|
||||
#define SetSSLConnectHandshake(x) ((x)->status = STAT_SSL_CONNECT_HANDSHAKE)
|
||||
#endif
|
||||
@@ -273,7 +269,6 @@ typedef unsigned int u_int32_t; /* XXX Hope this works! */
|
||||
#define SetLog(x) ((x)->status = STAT_LOG)
|
||||
|
||||
#define IsSynched(x) (x->serv->flags.synced)
|
||||
#define IsServerSent(x) (x->serv && x->serv->flags.server_sent)
|
||||
|
||||
/* opt.. */
|
||||
#define OPT_SJOIN 0x0001
|
||||
@@ -318,7 +313,7 @@ typedef unsigned int u_int32_t; /* XXX Hope this works! */
|
||||
#define FLAGS_SQUIT 0x20000 /* Server has been /squit by an oper */
|
||||
#define FLAGS_PROTOCTL 0x40000 /* Received a PROTOCTL message */
|
||||
#define FLAGS_PING 0x80000
|
||||
#define FLAGS_EAUTH 0x100000
|
||||
#define FLAGS_ASKEDPING 0x100000
|
||||
#define FLAGS_NETINFO 0x200000
|
||||
#define FLAGS_HYBNOTICE 0x400000
|
||||
#define FLAGS_QUARANTINE 0x800000
|
||||
@@ -413,8 +408,7 @@ typedef unsigned int u_int32_t; /* XXX Hope this works! */
|
||||
#define GotNetInfo(x) ((x)->flags & FLAGS_NETINFO)
|
||||
#define SetNetInfo(x) ((x)->flags |= FLAGS_NETINFO)
|
||||
#define IsCGIIRC(x) ((x)->flags & FLAGS_CGIIRC)
|
||||
#define SetEAuth(x) ((x)->flags |= FLAGS_EAUTH)
|
||||
#define IsEAuth(x) ((x)->flags & FLAGS_EAUTH)
|
||||
|
||||
#define IsShunned(x) ((x)->flags & FLAGS_SHUNNED)
|
||||
#define SetShunned(x) ((x)->flags |= FLAGS_SHUNNED)
|
||||
#define ClearShunned(x) ((x)->flags &= ~FLAGS_SHUNNED)
|
||||
@@ -719,46 +713,6 @@ struct FloodOpt {
|
||||
TS firstmsg;
|
||||
};
|
||||
|
||||
#ifdef USE_LIBCURL
|
||||
struct Motd;
|
||||
struct MotdDownload
|
||||
{
|
||||
struct Motd *themotd;
|
||||
};
|
||||
#endif /* USE_LIBCURL */
|
||||
|
||||
struct Motd
|
||||
{
|
||||
struct MotdItem *lines;
|
||||
struct tm last_modified; /* store the last modification time */
|
||||
|
||||
#ifdef USE_LIBCURL
|
||||
/*
|
||||
This pointer is used to communicate with an asynchronous MOTD
|
||||
download. The problem is that a download may take 10 seconds or
|
||||
more to complete and, in that time, the IRCd could be rehashed.
|
||||
This would mean that TLD blocks are reallocated and thus the
|
||||
aMotd structs would be free()d in the meantime.
|
||||
|
||||
To prevent such a situation from leading to a segfault, we
|
||||
introduce this remote control pointer. It works like this:
|
||||
1. read_motd() is called with a URL. A new MotdDownload is
|
||||
allocated and the pointer is placed here. This pointer is
|
||||
also passed to the asynchrnous download handler.
|
||||
2.a. The download is completed and read_motd_asynch_downloaded()
|
||||
is called with the same pointer. From this function, this pointer
|
||||
if free()d. No other code may free() the pointer. Not even free_motd().
|
||||
OR
|
||||
2.b. The user rehashes the IRCd before the download is completed.
|
||||
free_motd() is called, which sets motd_download->themotd to NULL
|
||||
to signal to read_motd_asynch_downloaded() that it should ignore
|
||||
the download. read_motd_asynch_downloaded() is eventually called
|
||||
and frees motd_download.
|
||||
*/
|
||||
struct MotdDownload *motd_download;
|
||||
#endif /* USE_LIBCURL */
|
||||
};
|
||||
|
||||
struct MotdItem {
|
||||
char *line;
|
||||
struct MotdItem *next;
|
||||
@@ -847,7 +801,6 @@ struct Server {
|
||||
#endif
|
||||
struct {
|
||||
unsigned synced:1; /* Server linked? (3.2beta18+) */
|
||||
unsigned server_sent:1; /* SERVER message sent to this link? (for outgoing links) */
|
||||
} flags;
|
||||
};
|
||||
|
||||
@@ -969,8 +922,6 @@ typedef struct {
|
||||
#define LISTENER_SSL 0x000040
|
||||
#define LISTENER_BOUND 0x000080
|
||||
|
||||
#define IsServersOnlyListener(x) ((x) && ((x)->umodes & LISTENER_SERVERSONLY))
|
||||
|
||||
#define CONNECT_SSL 0x000001
|
||||
#define CONNECT_ZIP 0x000002
|
||||
#define CONNECT_AUTO 0x000004
|
||||
@@ -981,8 +932,6 @@ typedef struct {
|
||||
#define SSLFLAG_FAILIFNOCERT 0x1
|
||||
#define SSLFLAG_VERIFYCERT 0x2
|
||||
#define SSLFLAG_DONOTACCEPTSELFSIGNED 0x4
|
||||
#define SSLFLAG_NOSTARTTLS 0x8
|
||||
|
||||
struct Client {
|
||||
struct Client *next, *prev, *hnext;
|
||||
anUser *user; /* ...defined, if this is a User */
|
||||
@@ -1160,12 +1109,6 @@ struct _configitem_me {
|
||||
unsigned short numeric;
|
||||
};
|
||||
|
||||
struct _configitem_files {
|
||||
char *motd_file, *rules_file, *smotd_file;
|
||||
char *botmotd_file, *opermotd_file, *svsmotd_file;
|
||||
char *pid_file, *tune_file;
|
||||
};
|
||||
|
||||
struct _configitem_admin {
|
||||
ConfigItem *prev, *next;
|
||||
ConfigFlag flag;
|
||||
@@ -1202,9 +1145,6 @@ struct _configitem_allow {
|
||||
ConfigItem_class *class;
|
||||
struct irc_netmask *netmask;
|
||||
ConfigFlag_allow flags;
|
||||
#ifdef INET6
|
||||
unsigned short ipv6_clone_mask;
|
||||
#endif /* INET6 */
|
||||
};
|
||||
|
||||
struct _configitem_oper {
|
||||
@@ -1243,10 +1183,10 @@ struct _configitem_ulines {
|
||||
struct _configitem_tld {
|
||||
ConfigItem *prev, *next;
|
||||
ConfigFlag_tld flag;
|
||||
char *mask, *channel;
|
||||
char *motd_file, *rules_file, *smotd_file;
|
||||
char *botmotd_file, *opermotd_file;
|
||||
aMotdFile rules, motd, smotd, botmotd, opermotd;
|
||||
char *mask, *motd_file, *rules_file, *smotd_file;
|
||||
char *botmotd_file, *opermotd_file, *channel;
|
||||
struct tm motd_tm, smotd_tm;
|
||||
aMotd *rules, *motd, *smotd, *botmotd, *opermotd;
|
||||
u_short options;
|
||||
};
|
||||
|
||||
@@ -1448,7 +1388,7 @@ struct _configitem_help {
|
||||
ConfigItem *prev, *next;
|
||||
ConfigFlag flag;
|
||||
char *command;
|
||||
aMotdLine *text;
|
||||
aMotd *text;
|
||||
};
|
||||
|
||||
struct _configitem_offchans {
|
||||
@@ -1807,7 +1747,7 @@ struct liststruct {
|
||||
|
||||
/* misc variable externs */
|
||||
|
||||
extern MODVAR char *version, *infotext[], *dalinfotext[], *unrealcredits[], *unrealinfo[];
|
||||
extern MODVAR char *version, *infotext[], *dalinfotext[], *unrealcredits[];
|
||||
extern MODVAR char *generation, *creation;
|
||||
extern MODVAR char *gnulicense[];
|
||||
/* misc defines */
|
||||
@@ -1901,13 +1841,6 @@ struct JFlood {
|
||||
};
|
||||
#endif
|
||||
|
||||
struct PendingNet {
|
||||
aPendingNet *prev, *next; /* Previous and next in list */
|
||||
aClient *sptr; /**< Client to which these servers belong */
|
||||
int numservers; /**< Amount of servers in list */
|
||||
int servers[1]; /** The list of servers (array of integer server numerics) */
|
||||
};
|
||||
|
||||
void init_throttling_hash();
|
||||
int hash_throttling(struct IN_ADDR *in);
|
||||
struct ThrottlingBucket *find_throttling_bucket(struct IN_ADDR *in);
|
||||
|
||||
+7
-16
@@ -22,9 +22,6 @@
|
||||
#ifndef __sys_include__
|
||||
#define __sys_include__
|
||||
|
||||
/* PATH_MAX */
|
||||
#include <limits.h>
|
||||
|
||||
/* alloca stuff */
|
||||
#ifdef _WIN32
|
||||
# include <malloc.h>
|
||||
@@ -46,7 +43,11 @@
|
||||
#ifdef ISC202
|
||||
#include <net/errno.h>
|
||||
#else
|
||||
# ifndef _WIN32
|
||||
#include <sys/errno.h>
|
||||
# else
|
||||
#include <errno.h>
|
||||
# endif
|
||||
#endif
|
||||
#include "setup.h"
|
||||
#include <stdio.h>
|
||||
@@ -70,28 +71,18 @@
|
||||
# include <string.h>
|
||||
# endif
|
||||
#endif
|
||||
|
||||
/* get intptr_t if the system provides it -- otherwise, ./configure will define it for us */
|
||||
#ifdef HAVE_STDINT_H
|
||||
#include <stdint.h>
|
||||
#else
|
||||
#ifdef HAVE_INTTYPES_H
|
||||
#include <inttypes.h>
|
||||
#endif /* HAVE_INTTYPES_H */
|
||||
#endif /* HAVE_STDINT_H */
|
||||
|
||||
#ifdef SSL
|
||||
#include <openssl/ssl.h>
|
||||
#endif
|
||||
#ifdef INET6
|
||||
#ifndef _WIN32
|
||||
#include <netinet/in.h>
|
||||
#include <sys/socket.h>
|
||||
#endif
|
||||
#ifdef _WIN32
|
||||
#define _WIN32_WINNT 0x0501
|
||||
#else
|
||||
#include <winsock2.h>
|
||||
#include <ws2tcpip.h>
|
||||
#endif
|
||||
#endif
|
||||
#ifndef GOT_STRCASECMP
|
||||
#define strcasecmp mycmp
|
||||
#define strncasecmp myncmp
|
||||
|
||||
+4
-4
@@ -2,10 +2,10 @@
|
||||
#define URL_H
|
||||
#include "types.h"
|
||||
|
||||
int MODFUNC url_is_valid(const char *);
|
||||
char MODFUNC *url_getfilename(const char *url);
|
||||
char MODFUNC *download_file(const char *, char **);
|
||||
void MODFUNC download_file_async(const char *, time_t, vFP, void *callback_data);
|
||||
int MODFUNC url_is_valid(char *);
|
||||
char MODFUNC *url_getfilename(char *);
|
||||
char MODFUNC *download_file(char *, char **);
|
||||
void MODFUNC download_file_async(char *, time_t, vFP);
|
||||
void MODFUNC url_do_transfers_async(void);
|
||||
void MODFUNC url_init(void);
|
||||
|
||||
|
||||
+7
-7
@@ -40,20 +40,20 @@
|
||||
#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 9
|
||||
#define UNREAL_VERSION_MINOR 8
|
||||
|
||||
/** Year + week of the year (ISO week number, with Monday as first day of week)
|
||||
/** 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 201120
|
||||
#define UNREAL_VERSION_TIME 200914
|
||||
|
||||
#define UnrealProtocol 2310
|
||||
#define UnrealProtocol 2309
|
||||
#define PATCH1 "3"
|
||||
#define PATCH2 ".2"
|
||||
#define PATCH3 ".9"
|
||||
#define PATCH4 "-rc2"
|
||||
#define PATCH5 ""
|
||||
#define PATCH3 ".8"
|
||||
#define PATCH4 ""
|
||||
#define PATCH5 ".1"
|
||||
#define PATCH6 ""
|
||||
#define PATCH7 ""
|
||||
#define PATCH8 COMPILEINFO
|
||||
|
||||
@@ -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 */
|
||||
@@ -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
|
||||
|
||||
Executable
+284
@@ -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 */
|
||||
@@ -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 */
|
||||
Executable
+523
@@ -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 */
|
||||
|
||||
@@ -0,0 +1,250 @@
|
||||
/*
|
||||
regex.h - POSIX.2 compatible regexp interface and TRE extensions
|
||||
|
||||
Copyright (C) 2001-2004 Ville Laurikari <vl@iki.fi>.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License version 2 (June
|
||||
1991) as published by the Free Software Foundation.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
*/
|
||||
|
||||
#ifndef TRE_REGEX_H
|
||||
#define TRE_REGEX_H 1
|
||||
|
||||
#include "tre-config.h"
|
||||
|
||||
#ifdef HAVE_SYS_TYPES_H
|
||||
#include <sys/types.h>
|
||||
#endif /* HAVE_SYS_TYPES_H */
|
||||
|
||||
#ifdef HAVE_LIBUTF8_H
|
||||
#include <libutf8.h>
|
||||
#endif /* HAVE_LIBUTF8_H */
|
||||
|
||||
#ifdef TRE_USE_SYSTEM_REGEX_H
|
||||
/* Include the system regex.h to make TRE ABI compatible with the
|
||||
system regex. */
|
||||
#include TRE_SYSTEM_REGEX_H_PATH
|
||||
#endif /* TRE_USE_SYSTEM_REGEX_H */
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#ifdef TRE_USE_SYSTEM_REGEX_H
|
||||
|
||||
#ifndef REG_OK
|
||||
#define REG_OK 0
|
||||
#endif /* !REG_OK */
|
||||
|
||||
#ifndef HAVE_REG_ERRCODE_T
|
||||
typedef int reg_errcode_t;
|
||||
#endif /* !HAVE_REG_ERRCODE_T */
|
||||
|
||||
#if !defined(REG_NOSPEC) && !defined(REG_LITERAL)
|
||||
#define REG_LITERAL 0x1000
|
||||
#endif
|
||||
|
||||
/* Extra regcomp() flags. */
|
||||
#define REG_RIGHT_ASSOC (REG_LITERAL << 1)
|
||||
|
||||
/* Extra regexec() flags. */
|
||||
#define REG_APPROX_MATCHER 0x1000
|
||||
#define REG_BACKTRACKING_MATCHER (REG_APPROX_MATCHER << 1)
|
||||
|
||||
#else /* !TRE_USE_SYSTEM_REGEX_H */
|
||||
|
||||
/* If the we're not using system regex.h, we need to define the
|
||||
structs and enums ourselves. */
|
||||
|
||||
typedef int regoff_t;
|
||||
typedef struct {
|
||||
size_t re_nsub; /* Number of parenthesized subexpressions. */
|
||||
void *value; /* For internal use only. */
|
||||
} regex_t;
|
||||
|
||||
typedef struct {
|
||||
regoff_t rm_so;
|
||||
regoff_t rm_eo;
|
||||
} regmatch_t;
|
||||
|
||||
|
||||
typedef enum {
|
||||
REG_OK = 0, /* No error. */
|
||||
/* POSIX regcomp() return error codes. (In the order listed in the
|
||||
standard.) */
|
||||
REG_NOMATCH, /* No match. */
|
||||
REG_BADPAT, /* Invalid regexp. */
|
||||
REG_ECOLLATE, /* Unknown collating element. */
|
||||
REG_ECTYPE, /* Unknown character class name. */
|
||||
REG_EESCAPE, /* Trailing backslash. */
|
||||
REG_ESUBREG, /* Invalid back reference. */
|
||||
REG_EBRACK, /* "[]" imbalance */
|
||||
REG_EPAREN, /* "\(\)" or "()" imbalance */
|
||||
REG_EBRACE, /* "\{\}" or "{}" imbalance */
|
||||
REG_BADBR, /* Invalid content of {} */
|
||||
REG_ERANGE, /* Invalid use of range operator */
|
||||
REG_ESPACE, /* Out of memory. */
|
||||
REG_BADRPT
|
||||
} reg_errcode_t;
|
||||
|
||||
/* POSIX regcomp() flags. */
|
||||
#define REG_EXTENDED 1
|
||||
#define REG_ICASE (REG_EXTENDED << 1)
|
||||
#define REG_NEWLINE (REG_ICASE << 1)
|
||||
#define REG_NOSUB (REG_NEWLINE << 1)
|
||||
|
||||
/* Extra regcomp() flags. */
|
||||
#define REG_BASIC 0
|
||||
#define REG_LITERAL (REG_NOSUB << 1)
|
||||
#define REG_RIGHT_ASSOC (REG_LITERAL << 1)
|
||||
|
||||
/* POSIX regexec() flags. */
|
||||
#define REG_NOTBOL 1
|
||||
#define REG_NOTEOL (REG_NOTBOL << 1)
|
||||
|
||||
/* Extra regexec() flags. */
|
||||
#define REG_APPROX_MATCHER (REG_NOTEOL << 1)
|
||||
#define REG_BACKTRACKING_MATCHER (REG_APPROX_MATCHER << 1)
|
||||
|
||||
#endif /* !TRE_USE_SYSTEM_REGEX_H */
|
||||
|
||||
/* REG_NOSPEC and REG_LITERAL mean the same thing. */
|
||||
#ifdef REG_LITERAL
|
||||
#define REG_NOSPEC REG_LITERAL
|
||||
#elif defined(REG_NOSPEC)
|
||||
#define REG_LITERAL REG_NOSPEC
|
||||
#endif /* defined(REG_NOSPEC) */
|
||||
|
||||
/* The maximum number of iterations in a bound expression. */
|
||||
#undef RE_DUP_MAX
|
||||
#define RE_DUP_MAX 255
|
||||
|
||||
/* The POSIX.2 regexp functions */
|
||||
int regcomp(regex_t *preg, const char *regex, int cflags);
|
||||
int regexec(const regex_t *preg, const char *string, size_t nmatch,
|
||||
regmatch_t pmatch[], int eflags);
|
||||
size_t regerror(int errcode, const regex_t *preg, char *errbuf,
|
||||
size_t errbuf_size);
|
||||
void regfree(regex_t *preg);
|
||||
|
||||
#ifdef TRE_WCHAR
|
||||
#ifdef HAVE_WCHAR_H
|
||||
#include <wchar.h>
|
||||
#endif /* HAVE_WCHAR_H */
|
||||
|
||||
/* Wide character versions (not in POSIX.2). */
|
||||
int regwcomp(regex_t *preg, const wchar_t *regex, int cflags);
|
||||
int regwexec(const regex_t *preg, const wchar_t *string, size_t nmatch,
|
||||
regmatch_t pmatch[], int eflags);
|
||||
#endif /* TRE_WCHAR */
|
||||
|
||||
/* Versions with a maximum length argument and therefore the capability to
|
||||
handle null characters in the middle of the strings (not in POSIX.2). */
|
||||
int regncomp(regex_t *preg, const char *regex, size_t len, int cflags);
|
||||
int regnexec(const regex_t *preg, const char *string, size_t len,
|
||||
size_t nmatch, regmatch_t pmatch[], int eflags);
|
||||
#ifdef TRE_WCHAR
|
||||
int regwncomp(regex_t *preg, const wchar_t *regex, size_t len, int cflags);
|
||||
int regwnexec(const regex_t *preg, const wchar_t *string, size_t len,
|
||||
size_t nmatch, regmatch_t pmatch[], int eflags);
|
||||
#endif /* TRE_WCHAR */
|
||||
|
||||
#ifdef TRE_APPROX
|
||||
|
||||
/* Approximate matching parameter struct. */
|
||||
typedef struct {
|
||||
int cost_ins; /* Default cost of an inserted character. */
|
||||
int cost_del; /* Default cost of a deleted character. */
|
||||
int cost_subst; /* Default cost of a substituted character. */
|
||||
int max_cost; /* Maximum allowed cost of a match. */
|
||||
|
||||
int max_ins; /* Maximum allowed number of inserts. */
|
||||
int max_del; /* Maximum allowed number of deletes. */
|
||||
int max_subst; /* Maximum allowed number of substitutes. */
|
||||
int max_err; /* Maximum allowed number of errors total. */
|
||||
} regaparams_t;
|
||||
|
||||
/* Approximate matching result struct. */
|
||||
typedef struct {
|
||||
size_t nmatch; /* Length of pmatch[] array. */
|
||||
regmatch_t *pmatch; /* Submatch data. */
|
||||
int cost; /* Cost of the match. */
|
||||
int num_ins; /* Number of inserts in the match. */
|
||||
int num_del; /* Number of deletes in the match. */
|
||||
int num_subst; /* Number of substitutes in the match. */
|
||||
} regamatch_t;
|
||||
|
||||
|
||||
/* Approximate matching functions. */
|
||||
int regaexec(const regex_t *preg, const char *string,
|
||||
regamatch_t *match, regaparams_t params, int eflags);
|
||||
int reganexec(const regex_t *preg, const char *string, size_t len,
|
||||
regamatch_t *match, regaparams_t params, int eflags);
|
||||
#ifdef TRE_WCHAR
|
||||
/* Wide character approximate matching. */
|
||||
int regawexec(const regex_t *preg, const wchar_t *string,
|
||||
regamatch_t *match, regaparams_t params, int eflags);
|
||||
int regawnexec(const regex_t *preg, const wchar_t *string, size_t len,
|
||||
regamatch_t *match, regaparams_t params, int eflags);
|
||||
#endif /* TRE_WCHAR */
|
||||
|
||||
/* Sets the parameters to default values. */
|
||||
void regaparams_default(regaparams_t *params);
|
||||
#endif /* TRE_APPROX */
|
||||
|
||||
#ifdef TRE_WCHAR
|
||||
typedef wchar_t tre_char_t;
|
||||
#else /* !TRE_WCHAR */
|
||||
typedef unsigned char tre_char_t;
|
||||
#endif /* !TRE_WCHAR */
|
||||
|
||||
typedef struct {
|
||||
int (*get_next_char)(tre_char_t *c, unsigned int *pos_add, void *context);
|
||||
void (*rewind)(size_t pos, void *context);
|
||||
int (*compare)(size_t pos1, size_t pos2, size_t len, void *context);
|
||||
void *context;
|
||||
} tre_str_source;
|
||||
|
||||
int reguexec(const regex_t *preg, const tre_str_source *string,
|
||||
size_t nmatch, regmatch_t pmatch[], int eflags);
|
||||
|
||||
/* Returns the version string. The returned string is static. */
|
||||
char *tre_version(void);
|
||||
|
||||
/* Returns the value for a config parameter. The type to which `result'
|
||||
must point to depends of the value of `query', see documentation for
|
||||
more details. */
|
||||
int tre_config(int query, void *result);
|
||||
|
||||
enum {
|
||||
TRE_CONFIG_APPROX,
|
||||
TRE_CONFIG_WCHAR,
|
||||
TRE_CONFIG_MULTIBYTE,
|
||||
TRE_CONFIG_SYSTEM_ABI,
|
||||
TRE_CONFIG_VERSION
|
||||
};
|
||||
|
||||
/* Returns 1 if the compiled pattern has back references, 0 if not. */
|
||||
int tre_have_backrefs(const regex_t *preg);
|
||||
|
||||
/* Returns 1 if the compiled pattern uses approximate matching features,
|
||||
0 if not. */
|
||||
int tre_have_approx(const regex_t *preg);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif /* TRE_REGEX_H */
|
||||
|
||||
/* EOF */
|
||||
+1
-18
@@ -21,7 +21,6 @@
|
||||
|
||||
#ifndef __setup_include__
|
||||
#define __setup_include__
|
||||
|
||||
#undef PARAMH
|
||||
#undef UNISTDH
|
||||
#define STRINGH
|
||||
@@ -52,25 +51,9 @@
|
||||
#endif
|
||||
#define SPATH "."
|
||||
#define DPATH "."
|
||||
#define DOMAINNAME "irc.net"
|
||||
#define NO_U_TYPES
|
||||
#define NEED_U_INT32_T
|
||||
#define PREFIX_AQ
|
||||
#define LIST_SHOW_MODES
|
||||
|
||||
#ifndef mode_t
|
||||
/*
|
||||
Needed in s_conf.c for the third argument of open(3p).
|
||||
|
||||
Should be an int because of http://msdn.microsoft.com/en-us/library/z0kc8e3z(VS.71).aspx
|
||||
*/
|
||||
#define mode_t int
|
||||
#endif
|
||||
|
||||
/*
|
||||
make up for win32 (and win64?) users not being able to run ./configure.
|
||||
*/
|
||||
#ifndef intptr_t
|
||||
#define intptr_t long
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,54 @@
|
||||
/* 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
|
||||
|
||||
/* Define to 1 if you have the <libutf8.h> header file. */
|
||||
/* #undef HAVE_LIBUTF8_H */
|
||||
|
||||
/* Define to 1 if the system has the type `reg_errcode_t'. */
|
||||
/* #undef HAVE_REG_ERRCODE_T */
|
||||
|
||||
/* Define to 1 if you have the <sys/types.h> header file. */
|
||||
#define HAVE_SYS_TYPES_H 1
|
||||
|
||||
/* Define to 1 if you have the <wchar.h> header file. */
|
||||
#define HAVE_WCHAR_H 1
|
||||
|
||||
/* Define if you want to enable approximate matching functionality. */
|
||||
#define TRE_APPROX 1
|
||||
|
||||
/* Define to enable multibyte character set support. */
|
||||
#define TRE_MULTIBYTE 1
|
||||
|
||||
/* Define to the absolute path to the system regex.h */
|
||||
/* #undef TRE_SYSTEM_REGEX_H_PATH */
|
||||
|
||||
/* Define if you want TRE to use alloca() instead of malloc() when allocating
|
||||
memory needed for regexec operations. */
|
||||
#define TRE_USE_ALLOCA 1
|
||||
|
||||
/* Define to include the system regex.h from TRE regex.h */
|
||||
/* #undef TRE_USE_SYSTEM_REGEX_H */
|
||||
|
||||
/* Define to enable wide character (wchar_t) support. */
|
||||
#define TRE_WCHAR 1
|
||||
|
||||
/* TRE version string. */
|
||||
#define TRE_VERSION "0.7.5"
|
||||
|
||||
/* TRE version level 1. */
|
||||
#define TRE_VERSION_1 0
|
||||
|
||||
/* TRE version level 2. */
|
||||
#define TRE_VERSION_2 7
|
||||
|
||||
/* TRE version level 3. */
|
||||
#define TRE_VERSION_3 5
|
||||
Executable
+1
@@ -0,0 +1 @@
|
||||
0,10,20,30,40,50 * * * * /home/mydir-to/ircdcron/ircdchk >/dev/null 2>&1
|
||||
@@ -1 +0,0 @@
|
||||
0,10,20,30,40,50 * * * * @IRCDDIR@/ircdcron/ircdchk >/dev/null 2>&1
|
||||
+13
-55
@@ -8,22 +8,6 @@ MT=mt
|
||||
|
||||
############################ USER CONFIGURATION ############################
|
||||
|
||||
# You are encouraged NOT to set these values here, but instead make a batch file
|
||||
# which passes all these arguments to nmake, like:
|
||||
# nmake -f makefile.win32 USE_ZIPLINKS=1 ZLIB_INC_DIR="c:\dev\zlib" etc etc...
|
||||
# Both ways will work, but if you use a batch file it's easier with
|
||||
# upgrading Unreal as you won't have to edit this makefile again.
|
||||
|
||||
### TRE ###
|
||||
#TRE_LIB_DIR="C:\dev\tre\win32\release"
|
||||
#TRE_INC_DIR="C:\dev\tre"
|
||||
#TRELIB="tre.lib"
|
||||
|
||||
### C-ARES ####
|
||||
#CARES_LIB_DIR="C:\dev\c-ares\vc\cares\dll-release"
|
||||
#CARES_INC_DIR="C:\dev\c-ares"
|
||||
#CARESLIB="cares.lib"
|
||||
|
||||
##### REMOTE INCLUDES ####
|
||||
#To enable remote include support you must have libcurl installed on your
|
||||
#system and it must have ares support enabled.
|
||||
@@ -90,24 +74,10 @@ MT=mt
|
||||
|
||||
############################# END CONFIGURATION ############################
|
||||
|
||||
!IFDEF CARES_INC_DIR
|
||||
CARES_INC=/I "$(CARES_INC_DIR)"
|
||||
!ENDIF
|
||||
!IFDEF CARES_LIB_DIR
|
||||
CARES_LIB=/LIBPATH:"$(CARES_LIB_DIR)"
|
||||
!ENDIF
|
||||
|
||||
!IFDEF TRE_INC_DIR
|
||||
TRE_INC=/I "$(TRE_INC_DIR)"
|
||||
!ENDIF
|
||||
!IFDEF TRE_LIB_DIR
|
||||
TRE_LIB=/LIBPATH:"$(TRE_LIB_DIR)"
|
||||
!ENDIF
|
||||
|
||||
!IFDEF USE_REMOTEINC
|
||||
CURLCFLAGS=/D USE_LIBCURL
|
||||
CURLOBJ=SRC/URL.OBJ
|
||||
CURLLIB=libcurl_imp.lib
|
||||
CURLLIB=libcurl.lib
|
||||
!IFDEF LIBCURL_INC_DIR
|
||||
LIBCURL_INC=/I "$(LIBCURL_INC_DIR)"
|
||||
!ENDIF
|
||||
@@ -152,18 +122,18 @@ MODDBGCFLAG=/LDd /MD /Zi
|
||||
!ENDIF
|
||||
|
||||
FD_SETSIZE=/D FD_SETSIZE=16384
|
||||
CFLAGS=$(DBGCFLAG) $(TRE_INC) $(CARES_INC) $(LIBCURL_INC) $(ZLIB_INC) $(OPENSSL_INC) /J /I ./INCLUDE /I ./INCLUDE/WIN32/ARES /Fosrc/ /nologo \
|
||||
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 /D _CRT_SECURE_NO_DEPRECATE /D _CRT_NONSTDC_NO_DEPRECATE /D _USE_32BIT_TIME_T
|
||||
CFLAGSST=$(DBGCFLAGST) $(TRE_INC) $(CARES_INC) $(LIBCURL_INC) $(ZLIB_INC) $(OPENSSL_INC) /J /I ./INCLUDE /I ./INCLUDE/WIN32/ARES /Fosrc/ /nologo \
|
||||
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 $(CARES_LIB) $(CARESLIB) $(TRE_LIB) $(TRELIB) $(ZLIB_LIB) $(ZIPLIB) \
|
||||
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 $(TRE_INC) $(CARES_INC) $(LIBCURL_INC) $(ZLIB_INC) $(OPENSSL_INC) /I ./INCLUDE /D \
|
||||
/Fosrc/modules/ /nologo $(LIBCURL_INC) $(ZLIB_INC) $(OPENSSL_INC) /I ./INCLUDE /D \
|
||||
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 ws2_32.lib $(TRE_LIB) $(TRELIB) $(CARES_LIB) $(OPENSSL_LIB) $(SSLLIBS) \
|
||||
MODLFLAGS=/link /def:src/modules/module.def wircd.lib $(OPENSSL_LIB) $(SSLLIBS) \
|
||||
$(ZLIB_LIB) $(ZIPLIB) $(LIBCURL_LIB) $(CURLLIB)
|
||||
|
||||
INCLUDES=./include/struct.h ./include/config.h ./include/sys.h \
|
||||
@@ -218,8 +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_NAMES.C SRC/MODULES/M_SVSNOLAG.C \
|
||||
SRC/MODULES/M_STARTTLS.C SRC/MODULES/M_NOPOST.C SRC/MODULES/M_ISSECURE.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 \
|
||||
@@ -255,8 +224,6 @@ DLL_FILES=SRC/MODULES/M_CHGHOST.DLL SRC/MODULES/M_SDESC.DLL SRC/MODULES/M_SETIDE
|
||||
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_NAMES.DLL SRC/MODULES/M_SVSNOLAG.DLL \
|
||||
SRC/MODULES/M_STARTTLS.DLL \
|
||||
SRC/MODULES/M_NOPOST.DLL SRC/MODULES/M_ISSECURE.DLL \
|
||||
SRC/MODULES/CLOAK.DLL
|
||||
|
||||
|
||||
@@ -284,10 +251,10 @@ CONF:
|
||||
$(CC) src/win32/config.c
|
||||
-@config.exe
|
||||
|
||||
|
||||
|
||||
|
||||
./WIRCD.EXE: $(OBJ_FILES) SRC/win32/WIN32.RES
|
||||
$(LINK) $(LFLAGS) $(OBJ_FILES) SRC/win32/WIN32.RES /MAP
|
||||
$(LINK) $(LFLAGS) $(OBJ_FILES) SRC/win32/WIN32.RES SRC/WIN32/TRE.LIB SRC/WIN32/ARESLIB.LIB /MAP
|
||||
-@erase src\win32\win32.res
|
||||
$(MT) -manifest WIRCD.EXE.manifest -outputresource:WIRCD.EXE;1
|
||||
!IFNDEF DEBUGEXTRA
|
||||
@@ -502,10 +469,10 @@ MODULES: $(DLL_FILES)
|
||||
|
||||
src/modules/commands.dll: $(MOD_FILES) $(INCLUDES)
|
||||
$(CC) $(MODDBGCFLAG) $(LIBCURL_INC) $(ZLIB_INC) $(OPENSSL_INC) /nologo \
|
||||
$(SSLCFLAGS) $(ZIPCFLAGS) $(CURLCFLAGS) $(TRE_INC) /Fosrc/modules/ \
|
||||
$(SSLCFLAGS) $(ZIPCFLAGS) $(CURLCFLAGS) /Fosrc/modules/ \
|
||||
/I ./INCLUDE /D NOSPOOF /D MODULE_COMPILE /D _CRT_SECURE_NO_DEPRECATE \
|
||||
/D _USE_32BIT_TIME_T $(MOD_FILES) \
|
||||
$(MODLFLAGS) /OUT:src/modules/commands.dll
|
||||
$(MODLFLAGS) src/win32/tre.lib /OUT:src/modules/commands.dll
|
||||
|
||||
src/modules/m_chghost.dll: src/modules/m_chghost.c $(INCLUDES)
|
||||
$(CC) $(MODCFLAGS) src/modules/m_chghost.c $(MODLFLAGS)
|
||||
@@ -532,7 +499,7 @@ src/modules/m_svsmode.dll: src/modules/m_svsmode.c $(INCLUDES)
|
||||
$(CC) $(MODCFLAGS) src/modules/m_svsmode.c $(MODLFLAGS)
|
||||
|
||||
src/modules/m_tkl.dll: src/modules/m_tkl.c $(INCLUDES)
|
||||
$(CC) $(MODCFLAGS) src/modules/m_tkl.c $(MODLFLAGS)
|
||||
$(CC) $(MODCFLAGS) src/modules/m_tkl.c $(MODLFLAGS) src/win32/tre.lib
|
||||
|
||||
src/modules/m_swhois.dll: src/modules/m_swhois.c $(INCLUDES)
|
||||
$(CC) $(MODCFLAGS) src/modules/m_swhois.c $(MODLFLAGS)
|
||||
@@ -580,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 src/modules/webtv.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)
|
||||
@@ -816,15 +783,6 @@ src/modules/cloak.dll: src/modules/cloak.c $(INCLUDES)
|
||||
src/modules/m_svsnolag.dll: src/modules/m_svsnolag.c $(INCLUDES)
|
||||
$(CC) $(MODCFLAGS) src/modules/m_svsnolag.c $(MODLFLAGS)
|
||||
|
||||
src/modules/m_starttls.dll: src/modules/m_starttls.c $(INCLUDES)
|
||||
$(CC) $(MODCFLAGS) src/modules/m_starttls.c $(MODLFLAGS)
|
||||
|
||||
src/modules/m_nopost.dll: src/modules/m_nopost.c $(INCLUDES)
|
||||
$(CC) $(MODCFLAGS) src/modules/m_nopost.c $(MODLFLAGS)
|
||||
|
||||
src/modules/m_issecure.dll: src/modules/m_issecure.c $(INCLUDES)
|
||||
$(CC) $(MODCFLAGS) src/modules/m_issecure.c $(MODLFLAGS)
|
||||
|
||||
dummy:
|
||||
|
||||
|
||||
|
||||
+4
-6
@@ -41,14 +41,14 @@ MAKEARGS = 'CFLAGS=${CFLAGS}' 'CC=${CC}' 'IRCDLIBS=${IRCDLIBS}' \
|
||||
'CRYPTOLIB=${CRYPTOLIB}' \
|
||||
'CRYPTOINCLUDES=${CRYPTOINCLUDES}' 'URL=${URL}' \
|
||||
|
||||
MY_MAKE = $(MAKE) $(MAKEARGS)
|
||||
MAKE = make $(MAKEARGS)
|
||||
|
||||
INCLUDES = ../include/auth.h ../include/badwords.h ../include/channel.h \
|
||||
../include/class.h ../include/common.h ../include/config.h ../include/dbuf.h \
|
||||
../include/dynconf.h ../include/events.h ../include/fdlist.h ../include/h.h \
|
||||
../include/hash.h ../include/inet.h ../include/ircsprintf.h \
|
||||
../include/license.h ../include/macros.h ../include/md5.h \
|
||||
../include/modules.h ../include/modversion.h ../include/msg.h \
|
||||
../include/modules.h ../include/modversion.h ../include/msg.h ../include/nameser.h \
|
||||
../include/numeric.h ../include/proto.h \
|
||||
../include/resource.h ../include/setup.h ../include/sjoin.h \
|
||||
../include/sock.h ../include/ssl.h ../include/struct.h ../include/sys.h \
|
||||
@@ -60,7 +60,7 @@ all: build
|
||||
build: ircd mods
|
||||
|
||||
custommodule:
|
||||
cd modules; $(MY_MAKE) MODULEFILE=$(MODULEFILE) 'EXLIBS=$(EXLIBS)' custommodule
|
||||
cd modules; $(MAKE) MODULEFILE=$(MODULEFILE) 'EXLIBS=$(EXLIBS)' custommodule
|
||||
|
||||
ircd: $(OBJS)
|
||||
$(CC) $(CFLAGS) $(CRYPTOLIB) -o ircd $(OBJS) $(LDFLAGS) $(IRCDLIBS) $(CRYPTOLIB)
|
||||
@@ -83,7 +83,7 @@ mods:
|
||||
@if [ ! -r modules ] ; then \
|
||||
echo "You havent done cvs update -P -d"; \
|
||||
fi
|
||||
cd modules; $(MY_MAKE) all
|
||||
cd modules; $(MAKE) all
|
||||
|
||||
version.c: version.c.SH ../Changes
|
||||
$(SHELL) version.c.SH
|
||||
@@ -123,8 +123,6 @@ ssl.o: ssl.c $(INCLUDES)
|
||||
match.o: match.c $(INCLUDES)
|
||||
$(CC) $(CFLAGS) -c match.c
|
||||
|
||||
modules.o: modules.c $(INCLUDES)
|
||||
|
||||
support.o: support.c $(INCLUDES)
|
||||
$(CC) $(CFLAGS) -c support.c
|
||||
|
||||
|
||||
+1
-2
@@ -150,8 +150,7 @@ void isupport_init(void)
|
||||
IsupportAdd(NULL, "HCN", NULL);
|
||||
IsupportAdd(NULL, "SAFELIST", NULL);
|
||||
IsupportAdd(NULL, "NAMESX", NULL);
|
||||
if (UHNAMES_ENABLED)
|
||||
IsupportAdd(NULL, "UHNAMES", NULL);
|
||||
IsupportAdd(NULL, "UHNAMES", NULL);
|
||||
if (cmdstr)
|
||||
IsupportAdd(NULL, "CMDS", cmdstr);
|
||||
}
|
||||
|
||||
+6
-6
@@ -316,9 +316,9 @@ char *saltstr, *hashstr;
|
||||
SHA1_Update(&hash, para, strlen(para));
|
||||
SHA1_Final(result1, &hash);
|
||||
#else
|
||||
if (!CryptCreateHash(hProv, CALG_SHA1, 0, 0, &hHash)) return -1;
|
||||
if (!CryptHashData(hHash, para, strlen(para), 0)) return -1;
|
||||
if (!CryptGetHashParam(hHash, HP_HASHVAL, result1, &size, 0)) return -1;
|
||||
if (!CryptCreateHash(hProv, CALG_SHA1, 0, 0, &hHash)) return NULL;
|
||||
if (!CryptHashData(hHash, para, strlen(para), 0)) return NULL;
|
||||
if (!CryptGetHashParam(hHash, HP_HASHVAL, result1, &size, 0)) return NULL;
|
||||
CryptDestroyHash(hHash);
|
||||
#endif
|
||||
/* Add salt to result */
|
||||
@@ -330,9 +330,9 @@ char *saltstr, *hashstr;
|
||||
SHA1_Update(&hash, result1, rsaltlen+20);
|
||||
SHA1_Final(result2, &hash);
|
||||
#else
|
||||
if (!CryptCreateHash(hProv, CALG_SHA1, 0, 0, &hHash)) return -1;
|
||||
if (!CryptHashData(hHash, result1, 20+rsaltlen, 0)) return -1;
|
||||
if (!CryptGetHashParam(hHash, HP_HASHVAL, result2, &size, 0)) return -1;
|
||||
if (!CryptCreateHash(hProv, CALG_SHA1, 0, 0, &hHash)) return NULL;
|
||||
if (!CryptHashData(hHash, result1, 20+rsaltlen, 0)) return NULL;
|
||||
if (!CryptGetHashParam(hHash, HP_HASHVAL, result2, &size, 0)) return NULL;
|
||||
CryptDestroyHash(hHash);
|
||||
CryptReleaseContext(hProv, 0);
|
||||
#endif
|
||||
|
||||
+65
-82
@@ -445,7 +445,7 @@ int del_listmode(Ban **list, aChannel *chptr, char *banid)
|
||||
/* Those pointers can be used by extended ban modules so they
|
||||
* don't have to do 4 make_nick_user_host()'s all the time:
|
||||
*/
|
||||
char *ban_realhost = NULL, *ban_virthost = NULL, *ban_cloakhost = NULL, *ban_ip = NULL;
|
||||
char *ban_realhost = NULL, *ban_virthost = NULL, *ban_cloakhost, *ban_ip = NULL;
|
||||
|
||||
/** is_banned - Check if a user is banned on a channel.
|
||||
* @param sptr Client to check (can be remote client)
|
||||
@@ -459,39 +459,6 @@ inline Ban *is_banned(aClient *sptr, aChannel *chptr, int type)
|
||||
return is_banned_with_nick(sptr, chptr, type, sptr->name);
|
||||
}
|
||||
|
||||
/** ban_check_mask - Checks if the current user in ban checking (ban_ip, etc) matches the specified n!u@h mask -or- run an extended ban.
|
||||
* @param sptr Client to check (can be remote client)
|
||||
* @param chptr Channel to check
|
||||
* @param banstr Mask string to check user
|
||||
* @param type Type of ban to check for (BANCHK_*)
|
||||
* @param no_extbans 0 to check extbans, nonzero to disable extban checking.
|
||||
* @returns Nonzero if the mask/extban succeeds. Zero if it doesn't.
|
||||
* @comments This is basically extracting the mask and extban check from is_banned_with_nick, but with being a bit more strict in what an extban is.
|
||||
* Strange things could happen if this is called outside standard ban checking.
|
||||
*/
|
||||
inline int ban_check_mask(aClient *sptr, aChannel *chptr, char *banstr, int type, int no_extbans)
|
||||
{
|
||||
Extban *extban = NULL;
|
||||
if (!no_extbans && banstr[0] == '~' && banstr[1] != '\0' && banstr[2] == ':')
|
||||
{
|
||||
/* Is an extended ban. */
|
||||
extban = findmod_by_bantype(banstr[1]);
|
||||
if (!extban)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
return extban->is_banned(sptr, chptr, banstr, type);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Is a n!u@h mask. */
|
||||
return extban_is_banned_helper(banstr);
|
||||
}
|
||||
}
|
||||
|
||||
/** is_banned_with_nick - Check if a user is banned on a channel.
|
||||
* @param sptr Client to check (can be remote client)
|
||||
* @param chptr Channel to check
|
||||
@@ -507,6 +474,7 @@ Ban *is_banned_with_nick(aClient *sptr, aChannel *chptr, int type, char *nick)
|
||||
static char cloakhost[NICKLEN + USERLEN + HOSTLEN + 24];
|
||||
static char virthost[NICKLEN + USERLEN + HOSTLEN + 24];
|
||||
static char nuip[NICKLEN + USERLEN + HOSTLEN + 24];
|
||||
int dovirt = 0, mine = 0;
|
||||
Extban *extban;
|
||||
|
||||
if (!IsPerson(sptr) || !chptr->banlist)
|
||||
@@ -514,26 +482,19 @@ Ban *is_banned_with_nick(aClient *sptr, aChannel *chptr, int type, char *nick)
|
||||
|
||||
ban_realhost = realhost;
|
||||
ban_ip = ban_virthost = ban_cloakhost = NULL;
|
||||
|
||||
/* Might it be possible in the future to include the possiblity for SupportNICKIP(sptr->from), SupportCLK(sptr->from)? -- aquanight */
|
||||
/* Nope, because servers not directly connected to the server in question have no idea about the capabilities at all.
|
||||
* However, there's no need for a MyConnect() requirement, just check if GetIP() is non-NULL and
|
||||
* if sptr->user->cloakedhost contains anything... -- Syzop
|
||||
*/
|
||||
if (GetIP(sptr))
|
||||
|
||||
if (MyConnect(sptr))
|
||||
{
|
||||
mine = 1;
|
||||
make_nick_user_host_r(nuip, nick, sptr->user->username, GetIP(sptr));
|
||||
ban_ip = nuip;
|
||||
}
|
||||
|
||||
if (*sptr->user->cloakedhost)
|
||||
{
|
||||
make_nick_user_host_r(cloakhost, nick, sptr->user->username, sptr->user->cloakedhost);
|
||||
ban_cloakhost = cloakhost;
|
||||
}
|
||||
|
||||
if (IsSetHost(sptr) && strcmp(sptr->user->realhost, sptr->user->virthost))
|
||||
{
|
||||
dovirt = 1;
|
||||
make_nick_user_host_r(virthost, nick, sptr->user->username, sptr->user->virthost);
|
||||
ban_virthost = virthost;
|
||||
}
|
||||
@@ -541,19 +502,46 @@ Ban *is_banned_with_nick(aClient *sptr, aChannel *chptr, int type, char *nick)
|
||||
|
||||
make_nick_user_host_r(realhost, nick, sptr->user->username, sptr->user->realhost);
|
||||
|
||||
/* We now check +b first, if a +b is found we then see if there is a +e.
|
||||
* If a +e was found we return NULL, if not, we return the ban.
|
||||
*/
|
||||
/* We now check +b first, if a +b is found we then see if there is a +e.
|
||||
* If a +e was found we return NULL, if not, we return the ban.
|
||||
*/
|
||||
for (tmp = chptr->banlist; tmp; tmp = tmp->next)
|
||||
{
|
||||
if (!ban_check_mask(sptr, chptr, tmp->banstr, type, 0))
|
||||
continue;
|
||||
if (*tmp->banstr == '~')
|
||||
{
|
||||
extban = findmod_by_bantype(tmp->banstr[1]);
|
||||
if (!extban)
|
||||
continue;
|
||||
if (!extban->is_banned(sptr, chptr, tmp->banstr, type))
|
||||
continue;
|
||||
} else {
|
||||
if ((match(tmp->banstr, realhost) == 0) ||
|
||||
(dovirt && (match(tmp->banstr, virthost) == 0)) ||
|
||||
(mine && (match(tmp->banstr, nuip) == 0)) ||
|
||||
(mine && (match(tmp->banstr, cloakhost) == 0)) )
|
||||
{
|
||||
/* matches.. do nothing */
|
||||
} else
|
||||
continue;
|
||||
}
|
||||
|
||||
/* Ban found, now check for +e */
|
||||
for (tmp2 = chptr->exlist; tmp2; tmp2 = tmp2->next)
|
||||
{
|
||||
if (ban_check_mask(sptr, chptr, tmp2->banstr, type, 0))
|
||||
return NULL; /* except matched */
|
||||
if (*tmp2->banstr == '~')
|
||||
{
|
||||
extban = findmod_by_bantype(tmp2->banstr[1]);
|
||||
if (!extban)
|
||||
continue;
|
||||
if (extban->is_banned(sptr, chptr, tmp2->banstr, type))
|
||||
return NULL;
|
||||
} else {
|
||||
if ((match(tmp2->banstr, realhost) == 0) ||
|
||||
(dovirt && (match(tmp2->banstr, virthost) == 0)) ||
|
||||
(mine && (match(tmp2->banstr, nuip) == 0)) ||
|
||||
(mine && (match(tmp2->banstr, cloakhost) == 0)) )
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
break; /* ban found and not on except */
|
||||
}
|
||||
@@ -1153,46 +1141,41 @@ char *clean_ban_mask(char *mask, int what, aClient *cptr)
|
||||
|
||||
int find_invex(aChannel *chptr, aClient *sptr)
|
||||
{
|
||||
/* This routine is basically a copy-paste of is_banned_with_nick, with modifications, for invex */
|
||||
Ban *inv;
|
||||
char *s;
|
||||
static char realhost[NICKLEN + USERLEN + HOSTLEN + 24];
|
||||
static char cloakhost[NICKLEN + USERLEN + HOSTLEN + 24];
|
||||
static char virthost[NICKLEN + USERLEN + HOSTLEN + 24];
|
||||
static char nuip[NICKLEN + USERLEN + HOSTLEN + 24];
|
||||
Extban *extban;
|
||||
static char realhost[NICKLEN + USERLEN + HOSTLEN + 6];
|
||||
static char virthost[NICKLEN + USERLEN + HOSTLEN + 6];
|
||||
static char nuip[NICKLEN + USERLEN + HOSTLEN + 6];
|
||||
int dovirt = 0, mine = 0;
|
||||
|
||||
if (!IsPerson(sptr) || !chptr->invexlist)
|
||||
return 0;
|
||||
|
||||
ban_realhost = realhost;
|
||||
ban_ip = ban_virthost = ban_cloakhost = NULL;
|
||||
|
||||
if (GetIP(sptr))
|
||||
if (MyConnect(sptr))
|
||||
{
|
||||
make_nick_user_host_r(nuip, sptr->name, sptr->user->username, GetIP(sptr));
|
||||
ban_ip = nuip;
|
||||
}
|
||||
|
||||
if (*sptr->user->cloakedhost)
|
||||
{
|
||||
make_nick_user_host_r(cloakhost, sptr->name, sptr->user->username, sptr->user->cloakedhost);
|
||||
ban_cloakhost = cloakhost;
|
||||
mine = 1;
|
||||
s = make_nick_user_host(sptr->name, sptr->user->username, GetIP(sptr));
|
||||
strlcpy(nuip, s, sizeof nuip);
|
||||
}
|
||||
|
||||
if (IsSetHost(sptr) && strcmp(sptr->user->realhost, sptr->user->virthost))
|
||||
if (sptr->user->virthost)
|
||||
if (strcmp(sptr->user->realhost, sptr->user->virthost))
|
||||
dovirt = 1;
|
||||
|
||||
s = make_nick_user_host(sptr->name, sptr->user->username,
|
||||
sptr->user->realhost);
|
||||
strlcpy(realhost, s, sizeof realhost);
|
||||
|
||||
if (dovirt)
|
||||
{
|
||||
make_nick_user_host_r(virthost, sptr->name, sptr->user->username, sptr->user->virthost);
|
||||
ban_virthost = virthost;
|
||||
s = make_nick_user_host(sptr->name, sptr->user->username,
|
||||
sptr->user->virthost);
|
||||
strlcpy(virthost, s, sizeof virthost);
|
||||
}
|
||||
|
||||
|
||||
make_nick_user_host_r(realhost, sptr->name, sptr->user->username, sptr->user->realhost);
|
||||
|
||||
for (inv = chptr->invexlist; inv; inv = inv->next)
|
||||
if (ban_check_mask(sptr, chptr, inv->banstr, BANCHK_JOIN, 0))
|
||||
{
|
||||
if ((match(inv->banstr, realhost) == 0) ||
|
||||
(dovirt && (match(inv->banstr, virthost) == 0)) ||
|
||||
(mine && (match(inv->banstr, nuip) == 0)))
|
||||
return 1;
|
||||
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
+1
-4
@@ -295,8 +295,6 @@ int parse_netmask(const char *text, struct irc_netmask *netmask)
|
||||
/* The address matching stuff... */
|
||||
/* int match_ipv6(struct IN_ADDR *, struct IN_ADDR *, int)
|
||||
* Input: An IP address, an IP mask, the number of bits in the mask.
|
||||
* Only the first bits of the IP mask will be compared, so
|
||||
* it doesn't need to be zeroed out after bits bits.
|
||||
* Output: if match, 1 else 0
|
||||
* Side effects: None
|
||||
*/
|
||||
@@ -310,8 +308,7 @@ int match_ipv6(struct IN_ADDR *addr, struct IN_ADDR *mask, int bits)
|
||||
return 0;
|
||||
if ((m = bits % 8) == 0)
|
||||
return 1;
|
||||
if ((addr->s6_addr[n] & ~((1 << (8 - m)) - 1))
|
||||
== (mask->s6_addr[n] & ~((1 << (8 - m)) - 1)))
|
||||
if ((addr->s6_addr[n] & ~((1 << (8 - m)) - 1)) == mask->s6_addr[n])
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
+122
@@ -15,6 +15,12 @@
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
/*
|
||||
#ifdef CLEAN_COMPILE
|
||||
static char sccxid[] = "@(#)cloak.c 9.00 7/12/99 UnrealIRCd";
|
||||
#endif
|
||||
*/
|
||||
|
||||
#include "struct.h"
|
||||
#include "common.h"
|
||||
#include "sys.h"
|
||||
@@ -27,6 +33,122 @@
|
||||
#include <string.h>
|
||||
#include "h.h"
|
||||
|
||||
/* The implementation here was originally done by Gary S. Brown. I have
|
||||
borrowed the tables directly, and made some minor changes to the
|
||||
crc32-function (including changing the interface). //ylo */
|
||||
|
||||
/* ============================================================= */
|
||||
/* COPYRIGHT (C) 1986 Gary S. Brown. You may use this program, or */
|
||||
/* code or tables extracted from it, as desired without restriction. */
|
||||
/* */
|
||||
/* First, the polynomial itself and its table of feedback terms. The */
|
||||
/* polynomial is */
|
||||
/* X^32+X^26+X^23+X^22+X^16+X^12+X^11+X^10+X^8+X^7+X^5+X^4+X^2+X^1+X^0 */
|
||||
/* */
|
||||
/* Note that we take it "backwards" and put the highest-order term in */
|
||||
/* the lowest-order bit. The X^32 term is "implied"; the LSB is the */
|
||||
/* X^31 term, etc. The X^0 term (usually shown as "+1") results in */
|
||||
/* the MSB being 1. */
|
||||
/* */
|
||||
/* Note that the usual hardware shift register implementation, which */
|
||||
/* is what we're using (we're merely optimizing it by doing eight-bit */
|
||||
/* chunks at a time) shifts bits into the lowest-order term. In our */
|
||||
/* implementation, that means shifting towards the right. Why do we */
|
||||
/* do it this way? Because the calculated CRC must be transmitted in */
|
||||
/* order from highest-order term to lowest-order term. UARTs transmit */
|
||||
/* characters in order from LSB to MSB. By storing the CRC this way, */
|
||||
/* we hand it to the UART in the order low-byte to high-byte; the UART */
|
||||
/* sends each low-bit to hight-bit; and the result is transmission bit */
|
||||
/* by bit from highest- to lowest-order term without requiring any bit */
|
||||
/* shuffling on our part. Reception works similarly. */
|
||||
/* */
|
||||
/* The feedback terms table consists of 256, 32-bit entries. Notes: */
|
||||
/* */
|
||||
/* The table can be generated at runtime if desired; code to do so */
|
||||
/* is shown later. It might not be obvious, but the feedback */
|
||||
/* terms simply represent the results of eight shift/xor opera- */
|
||||
/* tions for all combinations of data and CRC register values. */
|
||||
/* */
|
||||
/* The values must be right-shifted by eight bits by the "updcrc" */
|
||||
/* logic; the shift must be unsigned (bring in zeroes). On some */
|
||||
/* hardware you could probably optimize the shift in assembler by */
|
||||
/* using byte-swap instructions. */
|
||||
/* polynomial $edb88320 */
|
||||
/* */
|
||||
/* -------------------------------------------------------------------- */
|
||||
|
||||
static unsigned long crc32_tab[] = {
|
||||
0x00000000L, 0x77073096L, 0xee0e612cL, 0x990951baL, 0x076dc419L,
|
||||
0x706af48fL, 0xe963a535L, 0x9e6495a3L, 0x0edb8832L, 0x79dcb8a4L,
|
||||
0xe0d5e91eL, 0x97d2d988L, 0x09b64c2bL, 0x7eb17cbdL, 0xe7b82d07L,
|
||||
0x90bf1d91L, 0x1db71064L, 0x6ab020f2L, 0xf3b97148L, 0x84be41deL,
|
||||
0x1adad47dL, 0x6ddde4ebL, 0xf4d4b551L, 0x83d385c7L, 0x136c9856L,
|
||||
0x646ba8c0L, 0xfd62f97aL, 0x8a65c9ecL, 0x14015c4fL, 0x63066cd9L,
|
||||
0xfa0f3d63L, 0x8d080df5L, 0x3b6e20c8L, 0x4c69105eL, 0xd56041e4L,
|
||||
0xa2677172L, 0x3c03e4d1L, 0x4b04d447L, 0xd20d85fdL, 0xa50ab56bL,
|
||||
0x35b5a8faL, 0x42b2986cL, 0xdbbbc9d6L, 0xacbcf940L, 0x32d86ce3L,
|
||||
0x45df5c75L, 0xdcd60dcfL, 0xabd13d59L, 0x26d930acL, 0x51de003aL,
|
||||
0xc8d75180L, 0xbfd06116L, 0x21b4f4b5L, 0x56b3c423L, 0xcfba9599L,
|
||||
0xb8bda50fL, 0x2802b89eL, 0x5f058808L, 0xc60cd9b2L, 0xb10be924L,
|
||||
0x2f6f7c87L, 0x58684c11L, 0xc1611dabL, 0xb6662d3dL, 0x76dc4190L,
|
||||
0x01db7106L, 0x98d220bcL, 0xefd5102aL, 0x71b18589L, 0x06b6b51fL,
|
||||
0x9fbfe4a5L, 0xe8b8d433L, 0x7807c9a2L, 0x0f00f934L, 0x9609a88eL,
|
||||
0xe10e9818L, 0x7f6a0dbbL, 0x086d3d2dL, 0x91646c97L, 0xe6635c01L,
|
||||
0x6b6b51f4L, 0x1c6c6162L, 0x856530d8L, 0xf262004eL, 0x6c0695edL,
|
||||
0x1b01a57bL, 0x8208f4c1L, 0xf50fc457L, 0x65b0d9c6L, 0x12b7e950L,
|
||||
0x8bbeb8eaL, 0xfcb9887cL, 0x62dd1ddfL, 0x15da2d49L, 0x8cd37cf3L,
|
||||
0xfbd44c65L, 0x4db26158L, 0x3ab551ceL, 0xa3bc0074L, 0xd4bb30e2L,
|
||||
0x4adfa541L, 0x3dd895d7L, 0xa4d1c46dL, 0xd3d6f4fbL, 0x4369e96aL,
|
||||
0x346ed9fcL, 0xad678846L, 0xda60b8d0L, 0x44042d73L, 0x33031de5L,
|
||||
0xaa0a4c5fL, 0xdd0d7cc9L, 0x5005713cL, 0x270241aaL, 0xbe0b1010L,
|
||||
0xc90c2086L, 0x5768b525L, 0x206f85b3L, 0xb966d409L, 0xce61e49fL,
|
||||
0x5edef90eL, 0x29d9c998L, 0xb0d09822L, 0xc7d7a8b4L, 0x59b33d17L,
|
||||
0x2eb40d81L, 0xb7bd5c3bL, 0xc0ba6cadL, 0xedb88320L, 0x9abfb3b6L,
|
||||
0x03b6e20cL, 0x74b1d29aL, 0xead54739L, 0x9dd277afL, 0x04db2615L,
|
||||
0x73dc1683L, 0xe3630b12L, 0x94643b84L, 0x0d6d6a3eL, 0x7a6a5aa8L,
|
||||
0xe40ecf0bL, 0x9309ff9dL, 0x0a00ae27L, 0x7d079eb1L, 0xf00f9344L,
|
||||
0x8708a3d2L, 0x1e01f268L, 0x6906c2feL, 0xf762575dL, 0x806567cbL,
|
||||
0x196c3671L, 0x6e6b06e7L, 0xfed41b76L, 0x89d32be0L, 0x10da7a5aL,
|
||||
0x67dd4accL, 0xf9b9df6fL, 0x8ebeeff9L, 0x17b7be43L, 0x60b08ed5L,
|
||||
0xd6d6a3e8L, 0xa1d1937eL, 0x38d8c2c4L, 0x4fdff252L, 0xd1bb67f1L,
|
||||
0xa6bc5767L, 0x3fb506ddL, 0x48b2364bL, 0xd80d2bdaL, 0xaf0a1b4cL,
|
||||
0x36034af6L, 0x41047a60L, 0xdf60efc3L, 0xa867df55L, 0x316e8eefL,
|
||||
0x4669be79L, 0xcb61b38cL, 0xbc66831aL, 0x256fd2a0L, 0x5268e236L,
|
||||
0xcc0c7795L, 0xbb0b4703L, 0x220216b9L, 0x5505262fL, 0xc5ba3bbeL,
|
||||
0xb2bd0b28L, 0x2bb45a92L, 0x5cb36a04L, 0xc2d7ffa7L, 0xb5d0cf31L,
|
||||
0x2cd99e8bL, 0x5bdeae1dL, 0x9b64c2b0L, 0xec63f226L, 0x756aa39cL,
|
||||
0x026d930aL, 0x9c0906a9L, 0xeb0e363fL, 0x72076785L, 0x05005713L,
|
||||
0x95bf4a82L, 0xe2b87a14L, 0x7bb12baeL, 0x0cb61b38L, 0x92d28e9bL,
|
||||
0xe5d5be0dL, 0x7cdcefb7L, 0x0bdbdf21L, 0x86d3d2d4L, 0xf1d4e242L,
|
||||
0x68ddb3f8L, 0x1fda836eL, 0x81be16cdL, 0xf6b9265bL, 0x6fb077e1L,
|
||||
0x18b74777L, 0x88085ae6L, 0xff0f6a70L, 0x66063bcaL, 0x11010b5cL,
|
||||
0x8f659effL, 0xf862ae69L, 0x616bffd3L, 0x166ccf45L, 0xa00ae278L,
|
||||
0xd70dd2eeL, 0x4e048354L, 0x3903b3c2L, 0xa7672661L, 0xd06016f7L,
|
||||
0x4969474dL, 0x3e6e77dbL, 0xaed16a4aL, 0xd9d65adcL, 0x40df0b66L,
|
||||
0x37d83bf0L, 0xa9bcae53L, 0xdebb9ec5L, 0x47b2cf7fL, 0x30b5ffe9L,
|
||||
0xbdbdf21cL, 0xcabac28aL, 0x53b39330L, 0x24b4a3a6L, 0xbad03605L,
|
||||
0xcdd70693L, 0x54de5729L, 0x23d967bfL, 0xb3667a2eL, 0xc4614ab8L,
|
||||
0x5d681b02L, 0x2a6f2b94L, 0xb40bbe37L, 0xc30c8ea1L, 0x5a05df1bL,
|
||||
0x2d02ef8dL
|
||||
};
|
||||
|
||||
/* Return a 32-bit CRC of the contents of the buffer. */
|
||||
|
||||
unsigned long our_crc32(const unsigned char *s, unsigned int len)
|
||||
{
|
||||
unsigned int i;
|
||||
unsigned long crc32val;
|
||||
|
||||
crc32val = 0;
|
||||
for (i = 0; i < len; i ++)
|
||||
{
|
||||
crc32val =
|
||||
crc32_tab[(crc32val ^ s[i]) & 0xff] ^
|
||||
(crc32val >> 8);
|
||||
}
|
||||
return crc32val;
|
||||
}
|
||||
|
||||
/* mode = 0, just use strncpyzt, 1 = Realloc new and return new pointer */
|
||||
char *make_virthost(aClient *sptr, char *curr, char *new, int mode)
|
||||
{
|
||||
|
||||
+14
-235
@@ -251,11 +251,7 @@ char *ban = banin + 3;
|
||||
if (type != BANCHK_MSG)
|
||||
return 0;
|
||||
|
||||
#ifdef DISABLE_STACKED_EXTBANS
|
||||
return extban_is_banned_helper(ban);
|
||||
#else
|
||||
return ban_check_mask(sptr, chptr, ban, type, 0);
|
||||
#endif
|
||||
}
|
||||
|
||||
int extban_moden_is_banned(aClient *sptr, aChannel *chptr, char *banin, int type)
|
||||
@@ -267,79 +263,10 @@ char *ban = banin + 3;
|
||||
|
||||
if (has_voice(sptr, chptr))
|
||||
return 0;
|
||||
|
||||
#ifdef DISABLE_STACKED_EXTBANS
|
||||
|
||||
return extban_is_banned_helper(ban);
|
||||
#else
|
||||
return ban_check_mask(sptr, chptr, ban, type, 0);
|
||||
#endif
|
||||
}
|
||||
|
||||
/* a ban that affects JOINs only */
|
||||
int extban_modej_is_banned(aClient *sptr, aChannel *chptr, char *banin, int type)
|
||||
{
|
||||
char *sub_ban;
|
||||
|
||||
if (type != BANCHK_JOIN)
|
||||
return 0;
|
||||
|
||||
sub_ban = banin + 3;
|
||||
|
||||
#ifdef DISABLE_STACKED_EXTBANS
|
||||
return extban_is_banned_helper(sub_ban);
|
||||
#else
|
||||
return ban_check_mask(sptr, chptr, sub_ban, type, 0);
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifndef DISABLE_STACKED_EXTBANS
|
||||
/** General is_ok for n!u@h stuff that also deals with recursive extbans.
|
||||
*/
|
||||
int extban_is_ok_nuh_extban(aClient* sptr, aChannel* chptr, char* para, int checkt, int what, int what2)
|
||||
{
|
||||
char *mask = (para + 3);
|
||||
Extban *p = NULL;
|
||||
int isok;
|
||||
static int extban_is_ok_recursion = 0;
|
||||
|
||||
/* Mostly copied from clean_ban_mask - but note MyClient checks aren't needed here: extban->is_ok() according to m_mode isn't called for nonlocal. */
|
||||
if ((*mask == '~') && mask[1] && (mask[2] == ':'))
|
||||
{
|
||||
if (extban_is_ok_recursion)
|
||||
return 0; /* Fail: more than one stacked extban */
|
||||
|
||||
/* We can be sure RESTRICT_EXTENDEDBANS is not *. Else this extended ban wouldn't be happening at all. */
|
||||
if (what == EXBCHK_PARAM && RESTRICT_EXTENDEDBANS && !IsAnOper(sptr))
|
||||
{
|
||||
if (strchr(RESTRICT_EXTENDEDBANS, mask[1]))
|
||||
{
|
||||
sendnotice(sptr, "Setting/removing of extended bantypes '%s' has been disabled.", RESTRICT_EXTENDEDBANS);
|
||||
return 0; /* Fail */
|
||||
}
|
||||
}
|
||||
p = findmod_by_bantype(mask[1]);
|
||||
if (!p)
|
||||
{
|
||||
if (what == MODE_DEL)
|
||||
{
|
||||
return 1; /* Always allow killing unknowns. */
|
||||
}
|
||||
return 0; /* Don't add unknown extbans. */
|
||||
}
|
||||
/* Now we have to ask the stacked extban if it's ok. */
|
||||
if (p->is_ok)
|
||||
{
|
||||
extban_is_ok_recursion++;
|
||||
isok = p->is_ok(sptr, chptr, mask, checkt, what, what2);
|
||||
extban_is_ok_recursion--;
|
||||
return isok;
|
||||
}
|
||||
}
|
||||
return 1; /* Either not an extban, or extban has NULL is_ok. Good to go. */
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
/** Some kind of general conv_param routine,
|
||||
* to ensure the parameter is nick!user@host.
|
||||
* most of the code is just copied from clean_ban_mask.
|
||||
@@ -374,100 +301,6 @@ char pfix[8];
|
||||
return retbuf;
|
||||
}
|
||||
|
||||
#ifndef DISABLE_STACKED_EXTBANS
|
||||
/** conv_param to deal with stacked extbans.
|
||||
*/
|
||||
char* extban_conv_param_nuh_or_extban(char* para)
|
||||
{
|
||||
#if (USERLEN + NICKLEN + HOSTLEN + 32) > 256
|
||||
#error "wtf?"
|
||||
#endif
|
||||
static char retbuf[256];
|
||||
static char printbuf[256];
|
||||
char *mask;
|
||||
char tmpbuf[USERLEN + NICKLEN + HOSTLEN + 32];
|
||||
char bantype = para[1];
|
||||
char *ret = NULL;
|
||||
Extban *p = NULL;
|
||||
static int extban_recursion = 0;
|
||||
|
||||
if (para[3] == '~' && para[4] && para[5] == ':')
|
||||
{
|
||||
/* We're dealing with a stacked extended ban.
|
||||
* Rules:
|
||||
* 1) You can only stack once, so: ~x:~y:something and not ~x:~y:~z...
|
||||
* 2) The first item must be an action modifier, such as ~q/~n/~j
|
||||
* 3) The second item may never be an action modifier, nor have the
|
||||
* EXTBOPT_NOSTACKCHILD flag set (for things like a textban).
|
||||
*/
|
||||
|
||||
/* Rule #1. Yes the recursion check is also in extban_is_ok_nuh_extban,
|
||||
* but it's possible to get here without the is_ok() function ever
|
||||
* being called (think: non-local client). And no, don't delete it
|
||||
* there either. It needs to be in BOTH places. -- Syzop
|
||||
*/
|
||||
if (extban_recursion)
|
||||
return NULL;
|
||||
|
||||
/* Rule #2 */
|
||||
p = findmod_by_bantype(para[1]);
|
||||
if (p && !(p->options & EXTBOPT_ACTMODIFIER))
|
||||
{
|
||||
/* Rule #2 violation */
|
||||
return NULL;
|
||||
}
|
||||
|
||||
strncpyzt(tmpbuf, para, sizeof(tmpbuf));
|
||||
mask = tmpbuf + 3;
|
||||
/* Already did restrict-extended bans check. */
|
||||
p = findmod_by_bantype(mask[1]);
|
||||
if (!p)
|
||||
{
|
||||
/* Handling unknown bantypes in is_ok. Assume that it's ok here. */
|
||||
return para;
|
||||
}
|
||||
if ((p->options & EXTBOPT_ACTMODIFIER) || (p->options & EXTBOPT_NOSTACKCHILD))
|
||||
{
|
||||
/* Rule #3 violation */
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (p->conv_param)
|
||||
{
|
||||
extban_recursion++;
|
||||
ret = p->conv_param(mask);
|
||||
extban_recursion--;
|
||||
if (ret)
|
||||
{
|
||||
/*
|
||||
* If bans are stacked, then we have to use two buffers
|
||||
* to prevent ircsprintf() from going into a loop.
|
||||
*/
|
||||
ircsprintf(printbuf, "~%c:%s", bantype, ret); /* Make sure our extban prefix sticks. */
|
||||
memcpy(retbuf, printbuf, sizeof(retbuf));
|
||||
return retbuf;
|
||||
}
|
||||
else
|
||||
{
|
||||
return NULL; /* Fail. */
|
||||
}
|
||||
}
|
||||
/* I honestly don't know what the deal is with the 80 char cap in clean_ban_mask is about. So I'm leaving it out here. -- aquanight */
|
||||
/* I don't know why it's 80, but I like a limit anyway. A ban of 500 characters can never be good... -- Syzop */
|
||||
if (strlen(para) > 80)
|
||||
{
|
||||
strlcpy(retbuf, para, 128);
|
||||
return retbuf;
|
||||
}
|
||||
return para;
|
||||
}
|
||||
else
|
||||
{
|
||||
return extban_conv_param_nuh(para);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
/** Realname bans - conv_param */
|
||||
char *extban_moder_conv_param(char *para)
|
||||
{
|
||||
@@ -478,8 +311,6 @@ static char retbuf[REALLEN + 8];
|
||||
mask = retbuf+3;
|
||||
if (strlen(mask) > REALLEN + 3)
|
||||
mask[REALLEN + 3] = '\0';
|
||||
if (*mask == '~')
|
||||
*mask = '?'; /* Is this good? No ;) */
|
||||
return retbuf;
|
||||
}
|
||||
|
||||
@@ -491,86 +322,34 @@ char *ban = banin+3;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/** Registered user ban */
|
||||
char *extban_modeR_conv_param(char *para)
|
||||
{
|
||||
static char retbuf[NICKLEN + 4];
|
||||
|
||||
strlcpy(retbuf, para, sizeof(retbuf));
|
||||
if (do_nick_name(retbuf+3) == 0)
|
||||
return NULL;
|
||||
return retbuf;
|
||||
}
|
||||
|
||||
int extban_modeR_is_banned(aClient *sptr, aChannel *chptr, char *banin, int type)
|
||||
{
|
||||
char *ban = banin+3;
|
||||
|
||||
if (IsRegNick(sptr) && !strcasecmp(ban, sptr->name))
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
void extban_init(void)
|
||||
{
|
||||
ExtbanInfo req;
|
||||
|
||||
memset(&req, 0, sizeof(ExtbanInfo));
|
||||
req.flag = 'q';
|
||||
#ifdef DISABLE_STACKED_EXTBANS
|
||||
req.conv_param = extban_conv_param_nuh;
|
||||
#else
|
||||
req.conv_param = extban_conv_param_nuh_or_extban;
|
||||
req.is_ok = extban_is_ok_nuh_extban;
|
||||
#endif
|
||||
req.options = EXTBOPT_ACTMODIFIER;
|
||||
req.is_banned = extban_modeq_is_banned;
|
||||
ExtbanAdd(NULL, req);
|
||||
|
||||
memset(&req, 0, sizeof(ExtbanInfo));
|
||||
req.flag = 'j';
|
||||
#ifdef DISABLE_STACKED_EXTBANS
|
||||
req.conv_param = extban_conv_param_nuh;
|
||||
#else
|
||||
req.conv_param = extban_conv_param_nuh_or_extban;
|
||||
#endif
|
||||
req.is_banned = extban_modej_is_banned;
|
||||
req.is_ok = extban_is_ok_nuh_extban;
|
||||
req.options = EXTBOPT_ACTMODIFIER;
|
||||
ExtbanAdd(NULL, req);
|
||||
|
||||
memset(&req, 0, sizeof(ExtbanInfo));
|
||||
req.flag = 'n';
|
||||
#ifdef DISABLE_STACKED_EXTBANS
|
||||
req.conv_param = extban_conv_param_nuh;
|
||||
#else
|
||||
req.conv_param = extban_conv_param_nuh_or_extban;
|
||||
req.is_ok = extban_is_ok_nuh_extban;
|
||||
#endif
|
||||
req.is_banned = extban_moden_is_banned;
|
||||
req.options = EXTBOPT_ACTMODIFIER;
|
||||
ExtbanAdd(NULL, req);
|
||||
|
||||
memset(&req, 0, sizeof(ExtbanInfo));
|
||||
req.flag = 'c';
|
||||
req.conv_param = extban_modec_conv_param;
|
||||
req.is_banned = extban_modec_is_banned;
|
||||
req.is_ok = extban_modec_is_ok;
|
||||
req.options = EXTBOPT_INVEX;
|
||||
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|EXTBOPT_INVEX;
|
||||
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_INVEX;
|
||||
req.options = EXTBOPT_CHSVSMODE;
|
||||
ExtbanAdd(NULL, req);
|
||||
|
||||
/* When adding new extbans, be sure to always add a prior memset like above
|
||||
|
||||
@@ -192,7 +192,6 @@ Cmode *CmodeAdd(Module *module, 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].local = req.local;
|
||||
Channelmode_Table[i].owner = module;
|
||||
|
||||
for (j = 0; j < EXTCMODETABLESZ; j++)
|
||||
|
||||
+2
-2
@@ -851,13 +851,13 @@ 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] && !Hooks[51] && strchr(serveropts, 'R'))
|
||||
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] || Hooks[51]) && !strchr(serveropts, 'R'))
|
||||
if (Hooks[49] && !strchr(serveropts, 'R'))
|
||||
*p++ = 'R';
|
||||
*p = '\0';
|
||||
for (mi = Modules; mi; mi = mi->next)
|
||||
|
||||
+1
-1
@@ -47,7 +47,7 @@ ConfigItem_help *Find_Help(char *command) {
|
||||
int parse_help(aClient *sptr, char *name, char *help)
|
||||
{
|
||||
ConfigItem_help *helpitem;
|
||||
aMotdLine *text;
|
||||
aMotd *text;
|
||||
if (BadPtr(help))
|
||||
{
|
||||
helpitem = Find_Help(NULL);
|
||||
|
||||
+22
-74
@@ -90,6 +90,12 @@ extern MODVAR char *buildid;
|
||||
time_t timeofday = 0;
|
||||
int tainted = 0;
|
||||
LoopStruct loop;
|
||||
extern MODVAR aMotd *opermotd;
|
||||
extern MODVAR aMotd *svsmotd;
|
||||
extern MODVAR aMotd *motd;
|
||||
extern MODVAR aMotd *rules;
|
||||
extern MODVAR aMotd *botmotd;
|
||||
extern MODVAR aMotd *smotd;
|
||||
MODVAR MemoryInfo StatsZ;
|
||||
#ifndef _WIN32
|
||||
uid_t irc_uid = 0;
|
||||
@@ -355,7 +361,8 @@ void server_reboot(char *mesg)
|
||||
if (!(bootopt & (BOOT_TTY | BOOT_DEBUG)))
|
||||
(void)close(2);
|
||||
(void)close(1);
|
||||
(void)close(0);
|
||||
if ((bootopt & BOOT_CONSOLE) || isatty(0))
|
||||
(void)close(0);
|
||||
(void)execv(MYNAME, myargv);
|
||||
#else
|
||||
close_connections();
|
||||
@@ -995,7 +1002,7 @@ struct ThrottlingBucket z = { NULL, NULL, {0}, 0, 0};
|
||||
|
||||
Debug((DEBUG_DEBUG, "fix_timers(): updating nextping/nextconnect/nextdnscheck/nextexpire (%ld/%ld/%ld/%ld)",
|
||||
nextping, nextconnect, nextdnscheck, nextexpire));
|
||||
nextping = nextconnect = nextdnscheck = nextexpire = 1;
|
||||
nextping = nextconnect = nextdnscheck = nextexpire = 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -1003,26 +1010,18 @@ struct ThrottlingBucket z = { NULL, NULL, {0}, 0, 0};
|
||||
static void generate_cloakkeys()
|
||||
{
|
||||
/* Generate 3 cloak keys */
|
||||
#define GENERATE_CLOAKKEY_MINLEN 16
|
||||
#define GENERATE_CLOAKKEY_MAXLEN 32 /* Length of cloak keys to generate. */
|
||||
#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;
|
||||
|
||||
short has_upper;
|
||||
short has_lower;
|
||||
short has_num;
|
||||
|
||||
fprintf(stderr, "Here are 3 random cloak keys:\n");
|
||||
|
||||
for (keyNum = 0; keyNum < 3; ++keyNum)
|
||||
{
|
||||
has_upper = 0;
|
||||
has_lower = 0;
|
||||
has_num = 0;
|
||||
|
||||
keyLen = (getrandom8() % (GENERATE_CLOAKKEY_MAXLEN - GENERATE_CLOAKKEY_MINLEN + 1)) + GENERATE_CLOAKKEY_MINLEN;
|
||||
for (charIndex = 0; charIndex < keyLen; ++charIndex)
|
||||
{
|
||||
@@ -1030,35 +1029,21 @@ static void generate_cloakkeys()
|
||||
{
|
||||
case 0: /* Uppercase. */
|
||||
keyBuf[charIndex] = (char)('A' + (getrandom8() % ('Z' - 'A')));
|
||||
has_upper = 1;
|
||||
break;
|
||||
case 1: /* Lowercase. */
|
||||
keyBuf[charIndex] = (char)('a' + (getrandom8() % ('z' - 'a')));
|
||||
has_lower = 1;
|
||||
break;
|
||||
case 2: /* Digit. */
|
||||
keyBuf[charIndex] = (char)('0' + (getrandom8() % ('9' - '0')));
|
||||
has_num = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
keyBuf[keyLen] = '\0';
|
||||
|
||||
if (has_upper && has_lower && has_num)
|
||||
(void)fprintf(stderr, "%s\n", keyBuf);
|
||||
else
|
||||
/* Try again. For this reason, keyNum must be signed. */
|
||||
keyNum--;
|
||||
(void)fprintf(stderr, "%s\n", keyBuf);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
/* MY tdiff... because 'double' sucks.
|
||||
* This should work until 2038, and very likely after that as well
|
||||
* because 'long' should be 64 bit on all systems by then... -- Syzop
|
||||
*/
|
||||
#define mytdiff(a, b) ((long)a - (long)b)
|
||||
|
||||
#ifndef _WIN32
|
||||
int main(int argc, char *argv[])
|
||||
#else
|
||||
@@ -1085,14 +1070,6 @@ int InitwIRCD(int argc, char *argv[])
|
||||
#ifndef NO_FDLIST
|
||||
TS nextfdlistcheck = 0; /*end of priority code */
|
||||
#endif
|
||||
|
||||
memset(&botmotd, '\0', sizeof(aMotdFile));
|
||||
memset(&rules, '\0', sizeof(aMotdFile));
|
||||
memset(&opermotd, '\0', sizeof(aMotdFile));
|
||||
memset(&motd, '\0', sizeof(aMotdFile));
|
||||
memset(&smotd, '\0', sizeof(aMotdFile));
|
||||
memset(&svsmotd, '\0', sizeof(aMotdFile));
|
||||
|
||||
#ifdef _WIN32
|
||||
CreateMutex(NULL, FALSE, "UnrealMutex");
|
||||
SetErrorMode(SEM_FAILCRITICALERRORS);
|
||||
@@ -1103,21 +1080,6 @@ int InitwIRCD(int argc, char *argv[])
|
||||
euid = geteuid();
|
||||
gid = getgid();
|
||||
egid = getegid();
|
||||
|
||||
#ifndef IRC_USER
|
||||
if (!euid)
|
||||
{
|
||||
fprintf(stderr,
|
||||
"WARNING: You are running UnrealIRCd as root and it is not\n"
|
||||
" configured to drop priviliges. This is _very_ dangerous,\n"
|
||||
" as any compromise of your UnrealIRCd is the same as\n"
|
||||
" giving a cracker root SSH access to your box.\n"
|
||||
" You should either start UnrealIRCd under a different\n"
|
||||
" account than root, or set IRC_USER in include/config.h\n"
|
||||
" to a nonprivileged username and recompile.\n");
|
||||
}
|
||||
#endif /* IRC_USER */
|
||||
|
||||
# ifdef PROFIL
|
||||
(void)monstartup(0, etext);
|
||||
(void)moncontrol(1);
|
||||
@@ -1385,7 +1347,7 @@ int InitwIRCD(int argc, char *argv[])
|
||||
exit(0);
|
||||
#endif
|
||||
default:
|
||||
return bad_command();
|
||||
bad_command();
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -1408,14 +1370,8 @@ int InitwIRCD(int argc, char *argv[])
|
||||
#endif
|
||||
#ifndef _WIN32
|
||||
mkdir("tmp", S_IRUSR|S_IWUSR|S_IXUSR); /* Create the tmp dir, if it doesn't exist */
|
||||
#if defined(USE_LIBCURL) && defined(REMOTEINC_SPECIALCACHE)
|
||||
mkdir("cache", S_IRUSR|S_IWUSR|S_IXUSR); /* Create the cache dir, if using curl and it doesn't exist */
|
||||
#endif
|
||||
#else
|
||||
mkdir("tmp");
|
||||
#if defined(USE_LIBCURL) && defined(REMOTEINC_SPECIALCACHE)
|
||||
mkdir("cache");
|
||||
#endif
|
||||
#endif
|
||||
#ifndef _WIN32
|
||||
/*
|
||||
@@ -1574,15 +1530,12 @@ int InitwIRCD(int argc, char *argv[])
|
||||
me.umodes = conf_listen->options;
|
||||
conf_listen->listener = &me;
|
||||
run_configuration();
|
||||
ircd_log(LOG_ERROR, "UnrealIRCd started.");
|
||||
|
||||
read_motd(conf_files->botmotd_file, &botmotd);
|
||||
read_motd(conf_files->rules_file, &rules);
|
||||
read_motd(conf_files->opermotd_file, &opermotd);
|
||||
read_motd(conf_files->motd_file, &motd);
|
||||
read_motd(conf_files->smotd_file, &smotd);
|
||||
read_motd(conf_files->svsmotd_file, &svsmotd);
|
||||
|
||||
botmotd = (aMotd *) read_file(BPATH, NULL);
|
||||
rules = (aMotd *) read_file(RPATH, NULL);
|
||||
opermotd = (aMotd *) read_file(OPATH, NULL);
|
||||
motd = (aMotd *) read_file_ex(MPATH, NULL, &motd_tm);
|
||||
smotd = (aMotd *) read_file_ex(SMPATH, NULL, &smotd_tm);
|
||||
svsmotd = (aMotd *) read_file(VPATH, NULL);
|
||||
strncpy(me.sockhost, conf_listen->ip, sizeof(me.sockhost) - 1);
|
||||
if (me.name[0] == '\0')
|
||||
strncpyzt(me.name, me.sockhost, sizeof(me.name));
|
||||
@@ -1664,12 +1617,9 @@ int InitwIRCD(int argc, char *argv[])
|
||||
if (TIMESYNCH)
|
||||
{
|
||||
if (!unreal_time_synch(TIMESYNCH_TIMEOUT))
|
||||
ircd_log(LOG_ERROR, "TIME SYNCH: Unable to synchronize time: %s. "
|
||||
"This means UnrealIRCd was unable to synchronize the IRCd clock to a known good time source. "
|
||||
"As long as the server owner keeps the server clock synchronized through NTP, everything will be fine.",
|
||||
ircd_log(LOG_ERROR, "TIME SYNCH: Unable to synchronize time: %s. This happens sometimes, no error on your part.",
|
||||
unreal_time_synch_error());
|
||||
}
|
||||
fix_timers(); /* Fix timers AFTER reading tune file AND timesynch */
|
||||
write_pidfile();
|
||||
Debug((DEBUG_NOTICE, "Server ready..."));
|
||||
SetupEvents();
|
||||
@@ -1729,9 +1679,7 @@ void SocketLoop(void *dummy)
|
||||
#define POSITIVE_SHIFT_WARN 20
|
||||
|
||||
timeofday = time(NULL) + TSoffset;
|
||||
if (oldtimeofday == 0)
|
||||
oldtimeofday = timeofday; /* pretend everything is ok the first time.. */
|
||||
if (mytdiff(timeofday, oldtimeofday) < NEGATIVE_SHIFT_WARN) {
|
||||
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)",
|
||||
@@ -1749,7 +1697,7 @@ void SocketLoop(void *dummy)
|
||||
fix_timers();
|
||||
nextfdlistcheck = 0;
|
||||
} else
|
||||
if (mytdiff(timeofday, oldtimeofday) > POSITIVE_SHIFT_WARN) /* do not set too low or you get false positives */
|
||||
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;
|
||||
|
||||
@@ -16,7 +16,6 @@
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
#include <stdio.h>
|
||||
#if !defined(USE_SSL)
|
||||
|
||||
#include <string.h>
|
||||
@@ -70,9 +69,9 @@
|
||||
* This processes one or more 64-byte data blocks, but does NOT update
|
||||
* the bit counters. There're no alignment requirements.
|
||||
*/
|
||||
static const void *body(MD5_CTX *ctx, const void *data, unsigned long size)
|
||||
static void *body(MD5_CTX *ctx, void *data, unsigned long size)
|
||||
{
|
||||
const unsigned char *ptr;
|
||||
unsigned char *ptr;
|
||||
MD5_u32plus a, b, c, d;
|
||||
MD5_u32plus saved_a, saved_b, saved_c, saved_d;
|
||||
|
||||
@@ -188,7 +187,7 @@ void MD5_Init(MD5_CTX *ctx)
|
||||
ctx->hi = 0;
|
||||
}
|
||||
|
||||
void MD5_Update(MD5_CTX *ctx, const void *data, unsigned long size)
|
||||
void MD5_Update(MD5_CTX *ctx, void *data, unsigned long size)
|
||||
{
|
||||
MD5_u32plus saved_lo;
|
||||
unsigned long used, free;
|
||||
@@ -285,7 +284,7 @@ void MD5_Final(unsigned char *result, MD5_CTX *ctx)
|
||||
* @param src[in] The input data used to generate the checksum.
|
||||
* @param n[in] Length of data.
|
||||
*/
|
||||
void DoMD5(unsigned char *mdout, const unsigned char *src, unsigned long n)
|
||||
void DoMD5(unsigned char *mdout, unsigned char *src, unsigned long n)
|
||||
{
|
||||
MD5_CTX hash;
|
||||
|
||||
@@ -293,20 +292,3 @@ MD5_CTX hash;
|
||||
MD5_Update(&hash, src, n);
|
||||
MD5_Final(mdout, &hash);
|
||||
}
|
||||
|
||||
/** Generates an MD5 checksum - ASCII printable string (0011223344..etc..).
|
||||
* @param dst[out] Buffer to store result in, this will be the result will be
|
||||
* 32 characters + nul terminator, so needs to be at least 33 characters.
|
||||
* @param src[in] The input data used to generate the checksum.
|
||||
* @param n[in] Length of data.
|
||||
*/
|
||||
char *md5hash(unsigned char *dst, const unsigned char *src, unsigned long n)
|
||||
{
|
||||
unsigned char tmp[16];
|
||||
|
||||
DoMD5(tmp, src, n);
|
||||
sprintf(dst, "%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x",
|
||||
tmp[0], tmp[1], tmp[2], tmp[3], tmp[4], tmp[5], tmp[6], tmp[7], tmp[8],
|
||||
tmp[9], tmp[10], tmp[11], tmp[12], tmp[13], tmp[14], tmp[15]);
|
||||
return dst;
|
||||
}
|
||||
|
||||
+9
-13
@@ -116,9 +116,6 @@ 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);
|
||||
void (*send_protoctl_servers)(aClient *sptr, int response);
|
||||
int (*verify_link)(aClient *cptr, aClient *sptr, char *servername, ConfigItem_link **link_out);
|
||||
void (*send_server_message)(aClient *sptr);
|
||||
|
||||
static const EfunctionsList efunction_table[MAXEFUNCTIONS] = {
|
||||
/* 00 */ {NULL, NULL},
|
||||
@@ -156,10 +153,7 @@ static const EfunctionsList efunction_table[MAXEFUNCTIONS] = {
|
||||
/* 32 */ {"StripControlCodes", (void *)&StripControlCodes},
|
||||
/* 33 */ {"spamfilter_build_user_string", (void *)&spamfilter_build_user_string},
|
||||
/* 34 */ {"is_silenced", (void *)&is_silenced},
|
||||
/* 35 */ {"send_protoctl_servers", (void *)&send_protoctl_servers},
|
||||
/* 36 */ {"verify_link", (void *)&verify_link},
|
||||
/* 37 */ {"send_server_message", (void *)&send_server_message},
|
||||
/* 38 */ {NULL, NULL}
|
||||
/* 35 */ {NULL, NULL}
|
||||
};
|
||||
|
||||
|
||||
@@ -348,11 +342,14 @@ char *Module_Create(char *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
|
||||
* EDIT (2009): Looks like Linux got smart too, from now on we always copy....
|
||||
*/
|
||||
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.");
|
||||
@@ -386,7 +383,7 @@ char *Module_Create(char *path_)
|
||||
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 its modules by doing a 'make clean; ./Config -quick && make'.",
|
||||
"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);
|
||||
@@ -1637,6 +1634,9 @@ int i;
|
||||
#else
|
||||
config_error("ERROR: No cloaking module loaded. (hint: you probably want to load modules\\cloak.dll)");
|
||||
#endif
|
||||
/* TEMPORARY! */
|
||||
config_error("If you are upgrading from 3.2 (or any older version), be sure to read the release notes "
|
||||
"or www.vulnscan.org/tmp/newcloak.txt regarding the cloaking change!");
|
||||
return -1;
|
||||
}
|
||||
|
||||
@@ -1751,10 +1751,6 @@ const char *our_dlerror(void)
|
||||
DWORD err = GetLastError();
|
||||
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_IGNORE_INSERTS, NULL, err,
|
||||
0, errbuf, 512, NULL);
|
||||
if (err == 126) /* FIXME: find the correct code for 126 */
|
||||
strlcat(errbuf, " This could be because the DLL depends on another DLL, for example if you "
|
||||
"are trying to load a 3rd party module which was compiled with a different compiler version.",
|
||||
sizeof(errbuf));
|
||||
return errbuf;
|
||||
}
|
||||
#endif
|
||||
|
||||
+4
-28
@@ -25,7 +25,7 @@ INCLUDES = ../include/auth.h ../include/badwords.h ../include/channel.h \
|
||||
../include/dynconf.h ../include/events.h ../include/fdlist.h ../include/h.h \
|
||||
../include/hash.h ../include/inet.h ../include/ircsprintf.h \
|
||||
../include/license.h ../include/macros.h ../include/md5.h \
|
||||
../include/modules.h ../include/modversion.h ../include/msg.h \
|
||||
../include/modules.h ../include/modversion.h ../include/msg.h ../include/nameser.h \
|
||||
../include/numeric.h ../include/proto.h ../include/res.h \
|
||||
../include/resource.h ../include/setup.h ../include/sjoin.h \
|
||||
../include/sock.h ../include/ssl.h ../include/struct.h ../include/sys.h \
|
||||
@@ -54,7 +54,7 @@ R_MODULES= \
|
||||
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 m_names.so m_svsnolag.so m_addmotd.so \
|
||||
m_svslusers.so m_starttls.so m_nopost.so m_issecure.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 \
|
||||
@@ -69,21 +69,18 @@ COMMANDS=m_sethost.o m_chghost.o m_chgident.o m_setname.o m_setident.o \
|
||||
m_svssno.o m_sajoin.o m_sapart.o m_samode.o m_kick.o m_topic.o \
|
||||
m_invite.o m_list.o m_time.o m_svskill.o m_sjoin.o \
|
||||
m_pass.o m_userhost.o m_ison.o m_silence.o m_knock.o m_umode2.o \
|
||||
m_squit.o m_protoctl.o m_addmotd.o m_addomotd.o \
|
||||
m_squit.o m_protoctl.o m_addline.o m_addmotd.o m_addomotd.o \
|
||||
m_wallops.o m_admin.o m_globops.o m_locops.o m_chatops.o \
|
||||
m_trace.o m_netinfo.o m_links.o m_help.o m_rules.o \
|
||||
m_close.o m_map.o m_eos.o m_server.o m_stats.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_names.o m_svsnolag.o m_starttls.o \
|
||||
m_nopost.o m_issecure.o
|
||||
m_botmotd.o m_lusers.o m_names.o m_svsnolag.o
|
||||
|
||||
|
||||
MODULES=commands.so cloak.so $(R_MODULES)
|
||||
MODULEFLAGS=@MODULEFLAGS@
|
||||
CC=@CC@
|
||||
RM=@RM@
|
||||
|
||||
all: build
|
||||
|
||||
@@ -410,15 +407,6 @@ m_names.o: m_names.c $(INCLUDES)
|
||||
m_svsnolag.o: m_svsnolag.c $(INCLUDES)
|
||||
$(CC) $(CFLAGS) $(MODULEFLAGS) -c m_svsnolag.c
|
||||
|
||||
m_starttls.o: m_starttls.c $(INCLUDES)
|
||||
$(CC) $(CFLAGS) $(MODULEFLAGS) -c m_starttls.c
|
||||
|
||||
m_nopost.o: m_nopost.c $(INCLUDES)
|
||||
$(CC) $(CFLAGS) $(MODULEFLAGS) -c m_nopost.c
|
||||
|
||||
m_issecure.o: m_issecure.c $(INCLUDES)
|
||||
$(CC) $(CFLAGS) $(MODULEFLAGS) -c m_issecure.c
|
||||
|
||||
#############################################################################
|
||||
# .so's section
|
||||
#############################################################################
|
||||
@@ -831,18 +819,6 @@ m_svsnolag.so: m_svsnolag.c $(INCLUDES)
|
||||
$(CC) $(CFLAGS) $(MODULEFLAGS) -DDYNAMIC_LINKING \
|
||||
-o m_svsnolag.so m_svsnolag.c
|
||||
|
||||
m_starttls.so: m_starttls.c $(INCLUDES)
|
||||
$(CC) $(CFLAGS) $(MODULEFLAGS) -DDYNAMIC_LINKING \
|
||||
-o m_starttls.so m_starttls.c
|
||||
|
||||
m_nopost.so: m_nopost.c $(INCLUDES)
|
||||
$(CC) $(CFLAGS) $(MODULEFLAGS) -DDYNAMIC_LINKING \
|
||||
-o m_nopost.so m_nopost.c
|
||||
|
||||
m_issecure.so: m_issecure.c $(INCLUDES)
|
||||
$(CC) $(CFLAGS) $(MODULEFLAGS) -DDYNAMIC_LINKING \
|
||||
-o m_issecure.so m_issecure.c
|
||||
|
||||
#############################################################################
|
||||
# and now the remaining modules...
|
||||
#############################################################################
|
||||
|
||||
@@ -75,8 +75,7 @@ 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), m_list_Test(ModuleInfo *modinfo);
|
||||
extern int m_message_Test(ModuleInfo *modinfo), m_server_Test(ModuleInfo *modinfo);
|
||||
extern int m_nopost_Test(ModuleInfo *modinfo), m_issecure_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);
|
||||
@@ -104,7 +103,7 @@ extern int m_pass_Init(ModuleInfo *modinfo), m_userhost_Init(ModuleInfo *modinfo
|
||||
extern int m_ison_Init(ModuleInfo *modinfo), m_silence_Init(ModuleInfo *modinfo);
|
||||
extern int m_knock_Init(ModuleInfo *modinfo), m_umode2_Init(ModuleInfo *modinfo);
|
||||
extern int m_squit_Init(ModuleInfo *modinfo), m_protoctl_Init(ModuleInfo *modinfo);
|
||||
extern int m_addmotd_Init(ModuleInfo *modinfo);
|
||||
extern int m_addline_Init(ModuleInfo *modinfo), m_addmotd_Init(ModuleInfo *modinfo);
|
||||
extern int m_addomotd_Init(ModuleInfo *modinfo), m_wallops_Init(ModuleInfo *modinfo);
|
||||
extern int m_admin_Init(ModuleInfo *modinfo), m_globops_Init(ModuleInfo *modinfo);
|
||||
extern int m_locops_Init(ModuleInfo *modinfo), m_chatops_Init(ModuleInfo *modinfo);
|
||||
@@ -123,9 +122,6 @@ 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);
|
||||
extern int m_starttls_Init(ModuleInfo *modinfo);
|
||||
extern int m_nopost_Init(ModuleInfo *modinfo);
|
||||
extern int m_issecure_Init(ModuleInfo *modinfo);
|
||||
#ifdef GUEST
|
||||
extern int m_guest_Init(ModuleInfo *modinfo);
|
||||
#endif
|
||||
@@ -156,7 +152,7 @@ extern int m_pass_Load(int module_load), m_userhost_Load(int module_load);
|
||||
extern int m_ison_Load(int module_load), m_silence_Load(int module_load);
|
||||
extern int m_knock_Load(int module_load), m_umode2_Load(int module_load);
|
||||
extern int m_squit_Load(int module_load), m_protoctl_Load(int module_load);
|
||||
extern int m_addmotd_Load(int module_load);
|
||||
extern int m_addline_Load(int module_load), m_addmotd_Load(int module_load);
|
||||
extern int m_addomotd_Load(int module_load), m_wallops_Load(int module_load);
|
||||
extern int m_admin_Load(int module_load), m_globops_Load(int module_load);
|
||||
extern int m_locops_Load(int module_load), m_chatops_Load(int module_load);
|
||||
@@ -175,9 +171,6 @@ 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);
|
||||
extern int m_starttls_Load(int module_load);
|
||||
extern int m_nopost_Load(int module_load);
|
||||
extern int m_issecure_Load(int module_load);
|
||||
#ifdef GUEST
|
||||
extern int m_guest_Load(int module_load);
|
||||
#endif
|
||||
@@ -199,10 +192,9 @@ 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();
|
||||
extern int m_addmotd_Unload();
|
||||
extern int m_addomotd_Unload();
|
||||
extern int m_pass_Unload(), m_userhost_Unload(), m_knock_Unload();
|
||||
extern int m_ison_Unload(), m_silence_Unload();
|
||||
extern int m_addline_Unload(), m_addmotd_Unload(), m_addomotd_Unload();
|
||||
extern int m_wallops_Unload(), m_admin_Unload(), m_globops_Unload();
|
||||
extern int m_locops_Unload(), m_chatops_Unload(), m_trace_Unload();
|
||||
extern int m_netinfo_Unload(), m_links_Unload(), m_help_Unload();
|
||||
@@ -214,9 +206,6 @@ 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(), m_names_Unload(), m_svsnolag_Unload();
|
||||
extern int m_starttls_Unload();
|
||||
extern int m_nopost_Unload();
|
||||
extern int m_issecure_Unload();
|
||||
#ifdef GUEST
|
||||
extern int m_guest_Unload();
|
||||
#endif
|
||||
@@ -239,8 +228,6 @@ int l_commands_Test(ModuleInfo *modinfo)
|
||||
m_tkl_Test(ModCmdsInfo);
|
||||
m_list_Test(ModCmdsInfo);
|
||||
m_message_Test(ModCmdsInfo);
|
||||
m_server_Test(ModCmdsInfo);
|
||||
m_nopost_Test(ModCmdsInfo);
|
||||
return MOD_SUCCESS;
|
||||
}
|
||||
|
||||
@@ -323,6 +310,7 @@ int l_commands_Init(ModuleInfo *modinfo)
|
||||
m_umode2_Init(ModCmdsInfo);
|
||||
m_squit_Init(ModCmdsInfo);
|
||||
m_protoctl_Init(ModCmdsInfo);
|
||||
m_addline_Init(ModCmdsInfo);
|
||||
m_addmotd_Init(ModCmdsInfo);
|
||||
m_addomotd_Init(ModCmdsInfo);
|
||||
m_wallops_Init(ModCmdsInfo);
|
||||
@@ -359,9 +347,6 @@ int l_commands_Init(ModuleInfo *modinfo)
|
||||
m_lusers_Init(ModCmdsInfo);
|
||||
m_names_Init(ModCmdsInfo);
|
||||
m_svsnolag_Init(ModCmdsInfo);
|
||||
m_starttls_Init(ModCmdsInfo);
|
||||
m_nopost_Init(ModCmdsInfo);
|
||||
m_issecure_Init(ModCmdsInfo);
|
||||
#ifdef GUEST
|
||||
m_guest_Init(ModCmdsInfo);
|
||||
#endif
|
||||
@@ -438,6 +423,7 @@ int l_commands_Load(int module_load)
|
||||
m_umode2_Load(module_load);
|
||||
m_squit_Load(module_load);
|
||||
m_protoctl_Load(module_load);
|
||||
m_addline_Load(module_load);
|
||||
m_addmotd_Load(module_load);
|
||||
m_addomotd_Load(module_load);
|
||||
m_wallops_Load(module_load);
|
||||
@@ -474,9 +460,6 @@ int l_commands_Load(int module_load)
|
||||
m_lusers_Load(module_load);
|
||||
m_names_Load(module_load);
|
||||
m_svsnolag_Load(module_load);
|
||||
m_starttls_Load(module_load);
|
||||
m_nopost_Load(module_load);
|
||||
m_issecure_Load(module_load);
|
||||
#ifdef GUEST
|
||||
m_guest_Load(module_load);
|
||||
#endif
|
||||
@@ -553,6 +536,7 @@ int l_commands_Unload(int module_unload)
|
||||
m_umode2_Unload();
|
||||
m_squit_Unload();
|
||||
m_protoctl_Unload();
|
||||
m_addline_Unload();
|
||||
m_addmotd_Unload();
|
||||
m_addomotd_Unload();
|
||||
m_wallops_Unload();
|
||||
@@ -589,9 +573,6 @@ int l_commands_Unload(int module_unload)
|
||||
m_lusers_Unload();
|
||||
m_names_Unload();
|
||||
m_svsnolag_Unload();
|
||||
m_starttls_Unload();
|
||||
m_nopost_Unload();
|
||||
m_issecure_Unload();
|
||||
#ifdef GUEST
|
||||
m_guest_Unload();
|
||||
#endif
|
||||
|
||||
@@ -106,7 +106,7 @@ DLLFUNC CMD_FUNC(m_addomotd)
|
||||
me.name, parv[0], "ADDMOTD");
|
||||
return 0;
|
||||
}
|
||||
conf = fopen(conf_files->opermotd_file, "a");
|
||||
conf = fopen(OPATH, "a");
|
||||
if (conf == NULL)
|
||||
{
|
||||
return 0;
|
||||
|
||||
+17
-13
@@ -80,8 +80,8 @@ DLLFUNC int MOD_UNLOAD(m_botmotd)(int module_unload)
|
||||
*/
|
||||
DLLFUNC CMD_FUNC(m_botmotd)
|
||||
{
|
||||
aMotdLine *motdline;
|
||||
ConfigItem_tld *tld;
|
||||
aMotd *temp;
|
||||
ConfigItem_tld *ptr;
|
||||
char userhost[HOSTLEN + USERLEN + 6];
|
||||
|
||||
if (hunt_server_token(cptr, sptr, MSG_BOTMOTD, TOK_BOTMOTD, ":%s", 1, parc,
|
||||
@@ -91,16 +91,20 @@ DLLFUNC CMD_FUNC(m_botmotd)
|
||||
if (!IsPerson(sptr))
|
||||
return 0;
|
||||
|
||||
strlcpy(userhost, make_user_host(sptr->user->username, sptr->user->realhost), sizeof(userhost));
|
||||
tld = Find_tld(sptr, userhost);
|
||||
strlcpy(userhost,make_user_host(sptr->user->username, sptr->user->realhost), sizeof userhost);
|
||||
ptr = Find_tld(sptr, userhost);
|
||||
|
||||
motdline = NULL;
|
||||
if (tld)
|
||||
motdline = tld->botmotd.lines;
|
||||
if (!motdline)
|
||||
motdline = botmotd.lines;
|
||||
if (ptr)
|
||||
{
|
||||
if (ptr->botmotd)
|
||||
temp = ptr->botmotd;
|
||||
else
|
||||
temp = botmotd;
|
||||
}
|
||||
else
|
||||
temp = botmotd;
|
||||
|
||||
if (!motdline)
|
||||
if (!temp)
|
||||
{
|
||||
sendto_one(sptr, ":%s NOTICE %s :BOTMOTD File not found",
|
||||
me.name, sptr->name);
|
||||
@@ -109,10 +113,10 @@ DLLFUNC CMD_FUNC(m_botmotd)
|
||||
sendto_one(sptr, ":%s NOTICE %s :- %s Bot Message of the Day - ",
|
||||
me.name, sptr->name, me.name);
|
||||
|
||||
while (motdline)
|
||||
while (temp)
|
||||
{
|
||||
sendto_one(sptr, ":%s NOTICE %s :- %s", me.name, sptr->name, motdline->line);
|
||||
motdline = motdline->next;
|
||||
sendto_one(sptr, ":%s NOTICE %s :- %s", me.name, sptr->name, temp->line);
|
||||
temp = temp->next;
|
||||
}
|
||||
sendto_one(sptr, ":%s NOTICE %s :End of /BOTMOTD command.", me.name, sptr->name);
|
||||
return 0;
|
||||
|
||||
@@ -249,6 +249,11 @@ DLLFUNC CMD_FUNC(m_invite)
|
||||
/* Logging implementation added by XeRXeS */
|
||||
ircd_log(LOG_OVERRIDE,"OVERRIDE: %s (%s@%s) invited him/herself into %s (Overriding Secure Mode)",
|
||||
sptr->name, sptr->user->username, sptr->user->realhost, chptr->chname);
|
||||
|
||||
sendto_one(sptr, ":%s NOTICE %s :The channel is +z and you are trying to OperOverride, "
|
||||
"you'll have to override explicitly after this invite with the command '/join %s override'"
|
||||
" (use override as a key) this will set the channel -z and then join you",
|
||||
me.name, sptr->name, chptr->chname);
|
||||
}
|
||||
else if (is_banned(sptr, chptr, BANCHK_JOIN))
|
||||
{
|
||||
|
||||
@@ -1,262 +0,0 @@
|
||||
/*
|
||||
* Channel Is Secure UnrealIRCd module (Channel Mode +Z)
|
||||
* (C) Copyright 2010 Bram Matthys (Syzop) and the UnrealIRCd team
|
||||
*
|
||||
* This module will indicate if a channel is secure, and if so will set +Z.
|
||||
* Secure is defined as: all users on the channel are connected through SSL/TLS
|
||||
* Additionally, the channel has to be +z (only allow secure users to join).
|
||||
* Suggested on http://bugs.unrealircd.org/view.php?id=3720
|
||||
* Thanks go to fez for pushing us for some kind of method to indicate
|
||||
* this 'secure channel state', and to Stealth for suggesting this method.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 1, or (at your option)
|
||||
* any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
#include "struct.h"
|
||||
#include "common.h"
|
||||
#include "sys.h"
|
||||
#include "numeric.h"
|
||||
#include "msg.h"
|
||||
#include "proto.h"
|
||||
#include "channel.h"
|
||||
#include <time.h>
|
||||
#include <sys/stat.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#ifdef _WIN32
|
||||
#include <io.h>
|
||||
#endif
|
||||
#include <fcntl.h>
|
||||
#include "h.h"
|
||||
#ifdef STRIPBADWORDS
|
||||
#include "badwords.h"
|
||||
#endif
|
||||
#ifdef _WIN32
|
||||
#include "version.h"
|
||||
#endif
|
||||
|
||||
DLLFUNC CMD_FUNC(m_issecure);
|
||||
|
||||
ModuleHeader MOD_HEADER(m_issecure)
|
||||
= {
|
||||
"m_issecure",
|
||||
"$Id$",
|
||||
"Channel Mode +Z",
|
||||
"3.2-b8-1",
|
||||
NULL
|
||||
};
|
||||
|
||||
Cmode_t EXTCMODE_ISSECURE;
|
||||
|
||||
#define IsSecureJoin(chptr) (chptr->mode.mode & MODE_ONLYSECURE)
|
||||
#define IsSecureChanIndicated(chptr) (chptr->mode.extmode & EXTCMODE_ISSECURE)
|
||||
|
||||
|
||||
int modeZ_is_ok(aClient *sptr, aChannel *chptr, char *para, int checkt, int what);
|
||||
DLLFUNC int issecure_join(aClient *cptr, aClient *sptr, aChannel *chptr, char *parv[]);
|
||||
DLLFUNC int issecure_part(aClient *cptr, aClient *sptr, aChannel *chptr, char *comment);
|
||||
DLLFUNC int issecure_quit(aClient *acptr, char *comment);
|
||||
DLLFUNC int issecure_kick(aClient *cptr, aClient *sptr, aClient *acptr, aChannel *chptr, char *comment);
|
||||
DLLFUNC int issecure_chanmode(aClient *cptr, aClient *sptr, aChannel *chptr,
|
||||
char *modebuf, char *parabuf, int sendts, int samode);
|
||||
|
||||
|
||||
DLLFUNC int MOD_TEST(m_issecure)(ModuleInfo *modinfo)
|
||||
{
|
||||
return MOD_SUCCESS;
|
||||
}
|
||||
|
||||
DLLFUNC int MOD_INIT(m_issecure)(ModuleInfo *modinfo)
|
||||
{
|
||||
CmodeInfo req;
|
||||
|
||||
/* Channel mode */
|
||||
memset(&req, 0, sizeof(req));
|
||||
req.paracount = 0;
|
||||
req.is_ok = modeZ_is_ok;
|
||||
req.flag = 'Z';
|
||||
req.local = 1; /* local channel mode */
|
||||
CmodeAdd(modinfo->handle, req, &EXTCMODE_ISSECURE);
|
||||
|
||||
HookAddEx(modinfo->handle, HOOKTYPE_LOCAL_JOIN, issecure_join);
|
||||
HookAddEx(modinfo->handle, HOOKTYPE_REMOTE_JOIN, issecure_join);
|
||||
HookAddEx(modinfo->handle, HOOKTYPE_LOCAL_PART, issecure_part);
|
||||
HookAddEx(modinfo->handle, HOOKTYPE_REMOTE_PART, issecure_part);
|
||||
HookAddEx(modinfo->handle, HOOKTYPE_LOCAL_QUIT, issecure_quit);
|
||||
HookAddEx(modinfo->handle, HOOKTYPE_REMOTE_QUIT, issecure_quit);
|
||||
HookAddEx(modinfo->handle, HOOKTYPE_LOCAL_KICK, issecure_kick);
|
||||
HookAddEx(modinfo->handle, HOOKTYPE_REMOTE_KICK, issecure_kick);
|
||||
HookAddEx(modinfo->handle, HOOKTYPE_LOCAL_CHANMODE, issecure_chanmode);
|
||||
HookAddEx(modinfo->handle, HOOKTYPE_REMOTE_CHANMODE, issecure_chanmode);
|
||||
|
||||
MARK_AS_OFFICIAL_MODULE(modinfo);
|
||||
return MOD_SUCCESS;
|
||||
}
|
||||
|
||||
DLLFUNC int MOD_LOAD(m_issecure)(int module_load)
|
||||
{
|
||||
return MOD_SUCCESS;
|
||||
}
|
||||
|
||||
DLLFUNC int MOD_UNLOAD(m_issecure)(int module_unload)
|
||||
{
|
||||
return MOD_SUCCESS;
|
||||
}
|
||||
|
||||
int modeZ_is_ok(aClient *sptr, aChannel *chptr, char *para, int checkt, int what)
|
||||
{
|
||||
/* Reject any attempt to set or unset our mode. Even to IRCOps */
|
||||
return EX_ALWAYS_DENY;
|
||||
}
|
||||
|
||||
int channel_has_insecure_users_butone(aChannel *chptr, aClient *skip)
|
||||
{
|
||||
Member *member;
|
||||
|
||||
for (member = chptr->members; member; member = member->next)
|
||||
{
|
||||
if (member->cptr == skip)
|
||||
continue;
|
||||
if (IsULine(member->cptr))
|
||||
continue;
|
||||
if (!IsSecureConnect(member->cptr))
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
#define channel_has_insecure_users(x) channel_has_insecure_users_butone(x, NULL)
|
||||
|
||||
/* Set channel status of 'chptr' to be no longer secure (-Z) due to 'sptr'.
|
||||
* sptr MAY be null!
|
||||
*/
|
||||
void issecure_unset(aChannel *chptr, aClient *sptr, int notice)
|
||||
{
|
||||
if (notice)
|
||||
{
|
||||
if (chptr->mode.mode & MODE_AUDITORIUM)
|
||||
sendto_channel_butserv(chptr, &me, ":%s NOTICE %s :User joined and is not connected through SSL, setting channel -Z (insecure)",
|
||||
me.name, chptr->chname);
|
||||
else
|
||||
sendto_channel_butserv(chptr, &me, ":%s NOTICE %s :User '%s' joined and is not connected through SSL, setting channel -Z (insecure)",
|
||||
me.name, chptr->chname, sptr->name);
|
||||
}
|
||||
|
||||
chptr->mode.extmode &= ~EXTCMODE_ISSECURE;
|
||||
sendto_channel_butserv(chptr, &me, ":%s MODE %s -Z", me.name, chptr->chname);
|
||||
}
|
||||
|
||||
|
||||
/* Set channel status of 'chptr' to be secure (+Z).
|
||||
* Channel might have been insecure (or might not have been +z) and is
|
||||
* now considered secure. If 'sptr' is non-NULL then we are now secure
|
||||
* thanks to this user leaving the chat.
|
||||
*/
|
||||
void issecure_set(aChannel *chptr, aClient *sptr, int notice)
|
||||
{
|
||||
if (notice && sptr)
|
||||
{
|
||||
/* note that we have to skip 'sptr', since when this call is being made
|
||||
* he is still considered a member of this channel.
|
||||
*/
|
||||
sendto_channel_butserv_butone(chptr, &me, sptr, ":%s NOTICE %s :Now all users in the channel are connected through SSL, setting channel +Z (secure)",
|
||||
me.name, chptr->chname);
|
||||
} else if (notice)
|
||||
{
|
||||
/* note the missing word 'now' in next line */
|
||||
sendto_channel_butserv(chptr, &me, ":%s NOTICE %s :All users in the channel are connected through SSL, setting channel +Z (secure)",
|
||||
me.name, chptr->chname);
|
||||
}
|
||||
chptr->mode.extmode |= EXTCMODE_ISSECURE;
|
||||
sendto_channel_butserv_butone(chptr, &me, sptr, ":%s MODE %s +Z", me.name, chptr->chname);
|
||||
}
|
||||
|
||||
/* Note: the routines below (notably the 'if's) are written with speed in mind,
|
||||
* so while they can be written shorter, they would only take longer to execute!
|
||||
*/
|
||||
|
||||
DLLFUNC int issecure_join(aClient *cptr, aClient *sptr, aChannel *chptr, char *parv[])
|
||||
{
|
||||
/* Only care if chan already +zZ and the user joining is insecure (no need to count) */
|
||||
if (IsSecureJoin(chptr) && IsSecureChanIndicated(chptr) && !IsSecureConnect(sptr) && !IsULine(sptr))
|
||||
issecure_unset(chptr, sptr, 1);
|
||||
return 0;
|
||||
}
|
||||
|
||||
DLLFUNC int issecure_part(aClient *cptr, aClient *sptr, aChannel *chptr, char *comment)
|
||||
{
|
||||
/* Only care if chan is +z-Z and the user leaving is insecure, then count */
|
||||
if (IsSecureJoin(chptr) && !IsSecureChanIndicated(chptr) && !IsSecureConnect(sptr) &&
|
||||
!channel_has_insecure_users_butone(chptr, sptr))
|
||||
issecure_set(chptr, sptr, 1);
|
||||
return 0;
|
||||
}
|
||||
|
||||
DLLFUNC int issecure_quit(aClient *sptr, char *comment)
|
||||
{
|
||||
Membership *membership;
|
||||
aChannel *chptr;
|
||||
|
||||
for (membership = sptr->user->channel; membership; membership=membership->next)
|
||||
{
|
||||
chptr = membership->chptr;
|
||||
/* Identical to part */
|
||||
if (IsSecureJoin(chptr) && !IsSecureChanIndicated(chptr) &&
|
||||
!IsSecureConnect(sptr) && !channel_has_insecure_users_butone(chptr, sptr))
|
||||
issecure_set(chptr, sptr, 1);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
DLLFUNC int issecure_kick(aClient *cptr, aClient *sptr, aClient *victim, aChannel *chptr, char *comment)
|
||||
{
|
||||
/* Identical to part&quit, except we care about 'victim' and not 'sptr' */
|
||||
if (IsSecureJoin(chptr) && !IsSecureChanIndicated(chptr) &&
|
||||
!IsSecureConnect(victim) && !channel_has_insecure_users_butone(chptr, victim))
|
||||
issecure_set(chptr, victim, 1);
|
||||
return 0;
|
||||
}
|
||||
|
||||
DLLFUNC int issecure_chanmode(aClient *cptr, aClient *sptr, aChannel *chptr,
|
||||
char *modebuf, char *parabuf, int sendts, int samode)
|
||||
{
|
||||
if (!strchr(modebuf, 'z'))
|
||||
return 0; /* don't care */
|
||||
|
||||
if (IsSecureJoin(chptr))
|
||||
{
|
||||
/* +z is set, check if we need to +Z
|
||||
* Note that we need to be careful as there is a possibility that we got here
|
||||
* but the channel is ALREADY +z. Due to server2server MODE's.
|
||||
*/
|
||||
if (channel_has_insecure_users(chptr))
|
||||
{
|
||||
/* Should be -Z, if not already */
|
||||
if (IsSecureChanIndicated(chptr))
|
||||
issecure_unset(chptr, NULL, 0); /* would be odd if we got here ;) */
|
||||
} else {
|
||||
/* Should be +Z, but check if it isn't already.. */
|
||||
if (!IsSecureChanIndicated(chptr))
|
||||
issecure_set(chptr, NULL, 0);
|
||||
}
|
||||
} else {
|
||||
/* there was a -z, check if the channel is currently +Z and if so, set it -Z */
|
||||
if (IsSecureChanIndicated(chptr))
|
||||
issecure_unset(chptr, NULL, 0);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
+13
-37
@@ -154,17 +154,10 @@ Ban *banned;
|
||||
|
||||
if ((chptr->mode.mode & MODE_ONLYSECURE) && !(sptr->umodes & UMODE_SECURE))
|
||||
{
|
||||
if (IsAnOper(sptr))
|
||||
{
|
||||
/* Yeah yeah.. duplicate code..
|
||||
* Anyway: if the channel is +z we still allow an ircop to bypass it
|
||||
* if they are invited.
|
||||
*/
|
||||
for (lp = sptr->user->invited; lp; lp = lp->next)
|
||||
if (lp->value.chptr == chptr)
|
||||
return 0;
|
||||
}
|
||||
return (ERR_SECUREONLYCHAN);
|
||||
if (!extended_operoverride(sptr, chptr, key, MODE_ONLYSECURE, 'z'))
|
||||
return (ERR_SECUREONLYCHAN);
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
if ((chptr->mode.mode & MODE_OPERONLY) && !IsAnOper(sptr))
|
||||
@@ -376,7 +369,7 @@ DLLFUNC void _join_channel(aChannel *chptr, aClient *cptr, aClient *sptr, int fl
|
||||
if ((MyClient(sptr) && !(flags & CHFL_CHANOP)) || !MyClient(sptr))
|
||||
sendto_serv_butone_token_opt(cptr, OPT_SJ3, sptr->name, MSG_JOIN,
|
||||
TOK_JOIN, "%s", chptr->chname);
|
||||
if (flags && !(flags & CHFL_DEOPPED))
|
||||
if (flags & CHFL_CHANOP)
|
||||
{
|
||||
#endif
|
||||
/* I _know_ that the "@%s " look a bit wierd
|
||||
@@ -385,11 +378,11 @@ DLLFUNC void _join_channel(aChannel *chptr, aClient *cptr, aClient *sptr, int fl
|
||||
sendto_serv_butone_token_opt(cptr, OPT_SJ3|OPT_SJB64,
|
||||
me.name, MSG_SJOIN, TOK_SJOIN,
|
||||
"%B %s :%s%s ", (long)chptr->creationtime,
|
||||
chptr->chname, chfl_to_sjoin_symbol(flags), sptr->name);
|
||||
chptr->chname, flags & CHFL_CHANOP ? "@" : "", sptr->name);
|
||||
sendto_serv_butone_token_opt(cptr, OPT_SJ3|OPT_NOT_SJB64,
|
||||
me.name, MSG_SJOIN, TOK_SJOIN,
|
||||
"%li %s :%s%s ", chptr->creationtime,
|
||||
chptr->chname, chfl_to_sjoin_symbol(flags), sptr->name);
|
||||
chptr->chname, flags & CHFL_CHANOP ? "@" : "", sptr->name);
|
||||
#ifdef JOIN_INSTEAD_OF_SJOIN_ON_REMOTEJOIN
|
||||
}
|
||||
#endif
|
||||
@@ -409,29 +402,12 @@ DLLFUNC void _join_channel(aChannel *chptr, aClient *cptr, aClient *sptr, int fl
|
||||
chptr->chname, chptr->creationtime);
|
||||
}
|
||||
del_invite(sptr, chptr);
|
||||
if (flags && !(flags & CHFL_DEOPPED))
|
||||
{
|
||||
#ifndef PREFIX_AQ
|
||||
if ((flags & CHFL_CHANOWNER) || (flags & CHFL_CHANPROT))
|
||||
{
|
||||
/* +ao / +qo for when PREFIX_AQ is off */
|
||||
sendto_serv_butone_token_opt(cptr, OPT_NOT_SJ3,
|
||||
me.name,
|
||||
MSG_MODE, TOK_MODE, "%s +o%c %s %s %lu",
|
||||
chptr->chname, chfl_to_chanmode(flags), sptr->name, sptr->name,
|
||||
chptr->creationtime);
|
||||
} else {
|
||||
#endif
|
||||
/* +v/+h/+o (and +a/+q if PREFIX_AQ is on) */
|
||||
sendto_serv_butone_token_opt(cptr, OPT_NOT_SJ3,
|
||||
me.name,
|
||||
MSG_MODE, TOK_MODE, "%s +%c %s %lu",
|
||||
chptr->chname, chfl_to_chanmode(flags), sptr->name,
|
||||
chptr->creationtime);
|
||||
#ifndef PREFIX_AQ
|
||||
}
|
||||
#endif
|
||||
}
|
||||
if (flags & CHFL_CHANOP)
|
||||
sendto_serv_butone_token_opt(cptr, OPT_NOT_SJ3,
|
||||
me.name,
|
||||
MSG_MODE, TOK_MODE, "%s +o %s %lu",
|
||||
chptr->chname, sptr->name,
|
||||
chptr->creationtime);
|
||||
if (chptr->topic)
|
||||
{
|
||||
sendto_one(sptr, rpl_str(RPL_TOPIC),
|
||||
|
||||
+24
-105
@@ -68,7 +68,6 @@ void make_mode_str(aChannel *chptr, long oldm, long oldl, int pcount,
|
||||
char pvar[MAXMODEPARAMS][MODEBUFLEN + 3], char *mode_buf, char *para_buf, char bounce);
|
||||
#endif
|
||||
static void mode_cutoff(char *s);
|
||||
static void mode_cutoff2(aClient *sptr, aChannel *chptr, int *parc_out, char *parv[]);
|
||||
|
||||
static int samode_in_progress = 0;
|
||||
|
||||
@@ -338,10 +337,7 @@ CMD_FUNC(m_mode)
|
||||
|
||||
/* This is to prevent excess +<whatever> modes. -- Syzop */
|
||||
if (MyClient(sptr) && parv[2])
|
||||
{
|
||||
mode_cutoff(parv[2]);
|
||||
mode_cutoff2(sptr, chptr, &parc, parv);
|
||||
}
|
||||
|
||||
/* Filter out the unprivileged FIRST. *
|
||||
* Now, we can actually do the mode. */
|
||||
@@ -366,66 +362,6 @@ unsigned short modesleft = MAXMODEPARAMS * 2; /* be generous... */
|
||||
*s = '\0';
|
||||
}
|
||||
|
||||
/** Another mode cutoff routine - this one for the server-side
|
||||
* amplification/enlargement problem that happens with bans/exempts/invex
|
||||
* as explained in #2837. -- Syzop
|
||||
*/
|
||||
static void mode_cutoff2(aClient *sptr, aChannel *chptr, int *parc_out, char *parv[])
|
||||
{
|
||||
int modes = 0;
|
||||
char *s;
|
||||
int len, i;
|
||||
int parc = *parc_out;
|
||||
|
||||
if (parc-2 <= 3)
|
||||
return; /* Less than 3 mode parameters? Then we don't even have to check */
|
||||
|
||||
/* Calculate length of MODE if it would go through fully as-is */
|
||||
/* :nick!user@host MODE #channel +something param1 param2 etc... */
|
||||
len = strlen(sptr->name) + strlen(sptr->user->username) + strlen(GetHost(sptr)) +
|
||||
strlen(chptr->chname) + 11;
|
||||
|
||||
len += strlen(parv[2]);
|
||||
|
||||
if (*parv[2] != '+' && *parv[2] != '-')
|
||||
len++;
|
||||
|
||||
for (i = 3; parv[i]; i++)
|
||||
{
|
||||
len += strlen(parv[i]) + 1; /* (+1 for the space character) */
|
||||
/* +4 is another potential amplification (per-param).
|
||||
* If we were smart we would only check this for b/e/I and only for
|
||||
* relevant cases (not for all extended), but this routine is dumb,
|
||||
* so we just +4 for any case where the full mask is missing.
|
||||
* It's better than assuming +4 for all cases, though...
|
||||
*/
|
||||
if (match("*!*@*", parv[i]))
|
||||
len += 4;
|
||||
}
|
||||
|
||||
/* Now check if the result is acceptable... */
|
||||
if (len < 510)
|
||||
return; /* Ok, no problem there... */
|
||||
|
||||
/* Ok, we have a potential problem...
|
||||
* we just dump the last parameter... check how much space we saved...
|
||||
* and try again if that did not help
|
||||
*/
|
||||
for (i = parc-1; parv[i] && (i > 3); i--)
|
||||
{
|
||||
len -= strlen(parv[i]);
|
||||
if (match("*!*@*", parv[i]))
|
||||
len -= 4; /* must adjust accordingly.. */
|
||||
parv[i] = NULL;
|
||||
*parc_out--;
|
||||
if (len < 510)
|
||||
break;
|
||||
}
|
||||
/* This may be reached if like the first parameter is really insane long..
|
||||
* which is no problem, as other layers (eg: ban) takes care of that.
|
||||
* We're done...
|
||||
*/
|
||||
}
|
||||
|
||||
/* bounce_mode -- written by binary
|
||||
* User or server is NOT authorized to change the mode. This takes care
|
||||
@@ -481,15 +417,14 @@ DLLFUNC void _do_mode(aChannel *chptr, aClient *cptr, aClient *sptr, int parc, c
|
||||
sendto_snomask(SNO_EYES, "*** TS fix for %s - %lu(ours) %lu(theirs)",
|
||||
chptr->chname, chptr->creationtime, sendts);
|
||||
*/
|
||||
chptr->creationtime = sendts;
|
||||
chptr->
|
||||
creationtime = sendts;
|
||||
#if 0
|
||||
if (sendts < 750000)
|
||||
{
|
||||
sendto_realops(
|
||||
"Warning! Possible desynch: MODE for channel %s ('%s %s') has fishy timestamp (%ld) (from %s/%s)",
|
||||
"Warning! Possible desynch: MODE for channel %s ('%s %s') has fishy timestamp (%ld) (from %s/%s)"
|
||||
chptr->chname, modebuf, parabuf, sendts, cptr->name, sptr->name);
|
||||
ircd_log(LOG_ERROR, "Possible desynch: MODE for channel %s ('%s %s') has fishy timestamp (%ld) (from %s/%s)",
|
||||
chptr->chname, modebuf, parabuf, sendts, cptr->name, sptr->name);
|
||||
}
|
||||
#endif
|
||||
/* new chan or our timestamp is wrong */
|
||||
/* now works for double-bounce prevention */
|
||||
|
||||
@@ -841,10 +776,6 @@ int do_mode_char(aChannel *chptr, long modetype, char modechar, char *param,
|
||||
chptr->chname);
|
||||
break;
|
||||
}
|
||||
if (op_can_override(cptr) && !is_chanowner(cptr, chptr))
|
||||
{
|
||||
opermode = 1;
|
||||
}
|
||||
|
||||
auditorium_ok:
|
||||
goto setthephuckingmode;
|
||||
@@ -896,6 +827,25 @@ int do_mode_char(aChannel *chptr, long modetype, char modechar, char *param,
|
||||
}
|
||||
goto setthephuckingmode;
|
||||
case MODE_ONLYSECURE:
|
||||
notsecure = 0;
|
||||
if (what == MODE_ADD && modetype == MODE_ONLYSECURE && !(IsServer(cptr) || IsULine(cptr)))
|
||||
{
|
||||
for (member = chptr->members; member; member = member->next)
|
||||
{
|
||||
if (!IsSecureConnect(member->cptr) && !IsULine(member->cptr))
|
||||
{
|
||||
sendto_one(cptr, err_str(ERR_CANNOTCHANGECHANMODE),
|
||||
me.name, cptr->name, 'z',
|
||||
"all members must be connected via SSL");
|
||||
notsecure = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
member = NULL;
|
||||
/* first break nailed the for loop, this one nails switch() */
|
||||
if (notsecure == 1) break;
|
||||
}
|
||||
goto setthephuckingmode;
|
||||
case MODE_NOCTCP:
|
||||
case MODE_NONICKCHANGE:
|
||||
case MODE_NOINVITE:
|
||||
@@ -1286,29 +1236,6 @@ int do_mode_char(aChannel *chptr, long modetype, char modechar, char *param,
|
||||
tmpstr = clean_ban_mask(param, what, cptr);
|
||||
if (BadPtr(tmpstr))
|
||||
break; /* ignore except, but eat param */
|
||||
if ((tmpstr[0] == '~') && MyClient(cptr) && !bounce)
|
||||
{
|
||||
/* extban: check access if needed */
|
||||
Extban *p = findmod_by_bantype(tmpstr[1]);
|
||||
if (p)
|
||||
{
|
||||
if (!(p->options & EXTBOPT_INVEX))
|
||||
break; /* this extended ban type does not support INVEX */
|
||||
|
||||
if (p->is_ok && !p->is_ok(cptr, chptr, tmpstr, EXBCHK_ACCESS, what, EXBTYPE_EXCEPT))
|
||||
{
|
||||
if (IsAnOper(cptr))
|
||||
{
|
||||
/* TODO: send operoverride notice */
|
||||
} else {
|
||||
p->is_ok(cptr, chptr, tmpstr, EXBCHK_ACCESS_ERR, what, EXBTYPE_EXCEPT);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (p->is_ok && !p->is_ok(cptr, chptr, tmpstr, EXBCHK_PARAM, what, EXBTYPE_EXCEPT))
|
||||
break;
|
||||
}
|
||||
}
|
||||
/* For bounce, we don't really need to worry whether
|
||||
* or not it exists on our server. We'll just always
|
||||
* bounce it. */
|
||||
@@ -1403,10 +1330,6 @@ int do_mode_char(aChannel *chptr, long modetype, char modechar, char *param,
|
||||
strcpy(chptr->mode.link, "");
|
||||
}
|
||||
}
|
||||
if (!IsULine(cptr) && IsPerson(cptr) && op_can_override(cptr) && !is_chanowner(cptr, chptr))
|
||||
{
|
||||
opermode = 1;
|
||||
}
|
||||
retval = 1;
|
||||
|
||||
(void)ircsprintf(pvar[*pcount], "%cL%s",
|
||||
@@ -1798,10 +1721,6 @@ int x;
|
||||
if (paracnt && (!param || (*pcount >= MAXMODEPARAMS)))
|
||||
return 0;
|
||||
|
||||
/* Prevent remote users from setting local channel modes */
|
||||
if ((Channelmode_Table[modeindex].local) && !MyClient(cptr))
|
||||
return paracnt;
|
||||
|
||||
if (MyClient(cptr))
|
||||
{
|
||||
x = Channelmode_Table[modeindex].is_ok(cptr, chptr, param, EXCHK_ACCESS, what);
|
||||
|
||||
+24
-31
@@ -82,12 +82,11 @@ DLLFUNC int MOD_UNLOAD(m_motd)(int module_unload)
|
||||
DLLFUNC CMD_FUNC(m_motd)
|
||||
{
|
||||
ConfigItem_tld *ptr;
|
||||
aMotdFile *themotd;
|
||||
aMotdLine *motdline;
|
||||
aMotd *temp, *temp2;
|
||||
struct tm *tm = &motd_tm;
|
||||
int svsnofile = 0;
|
||||
char userhost[HOSTLEN + USERLEN + 6];
|
||||
|
||||
|
||||
if (IsServer(sptr))
|
||||
return 0;
|
||||
if (hunt_server_token(cptr, sptr, MSG_MOTD, TOK_MOTD, ":%s", 1, parc, parv) !=
|
||||
@@ -96,58 +95,52 @@ HUNTED_ISME)
|
||||
#ifndef TLINE_Remote
|
||||
if (!MyConnect(sptr))
|
||||
{
|
||||
themotd = &motd;
|
||||
temp = motd;
|
||||
goto playmotd;
|
||||
}
|
||||
#endif
|
||||
strlcpy(userhost, make_user_host(cptr->user->username, cptr->user->realhost), sizeof(userhost));
|
||||
strlcpy(userhost,make_user_host(cptr->user->username, cptr->user->realhost), sizeof userhost);
|
||||
ptr = Find_tld(sptr, userhost);
|
||||
|
||||
if (ptr)
|
||||
themotd = &ptr->motd;
|
||||
{
|
||||
temp = ptr->motd;
|
||||
tm = &ptr->motd_tm;
|
||||
}
|
||||
else
|
||||
themotd = &motd;
|
||||
temp = motd;
|
||||
|
||||
playmotd:
|
||||
if (themotd == NULL || themotd->lines == NULL)
|
||||
if (temp == NULL)
|
||||
{
|
||||
sendto_one(sptr, err_str(ERR_NOMOTD), me.name, parv[0]);
|
||||
svsnofile = 1;
|
||||
goto svsmotd;
|
||||
|
||||
}
|
||||
|
||||
sendto_one(sptr, rpl_str(RPL_MOTDSTART), me.name, parv[0],
|
||||
me.name);
|
||||
|
||||
/* tm_year should be zero only if the struct is zero-ed */
|
||||
if (themotd && themotd->lines && themotd->last_modified.tm_year)
|
||||
if (tm)
|
||||
{
|
||||
sendto_one(sptr, ":%s %d %s :- %d/%d/%d %d:%02d",
|
||||
me.name, RPL_MOTD, parv[0],
|
||||
themotd->last_modified.tm_mday,
|
||||
themotd->last_modified.tm_mon + 1,
|
||||
themotd->last_modified.tm_year + 1900,
|
||||
themotd->last_modified.tm_hour,
|
||||
themotd->last_modified.tm_min);
|
||||
sendto_one(sptr, rpl_str(RPL_MOTDSTART), me.name, parv[0],
|
||||
me.name);
|
||||
sendto_one(sptr, ":%s %d %s :- %d/%d/%d %d:%02d", me.name,
|
||||
RPL_MOTD, parv[0], tm->tm_mday, tm->tm_mon + 1,
|
||||
1900 + tm->tm_year, tm->tm_hour, tm->tm_min);
|
||||
}
|
||||
|
||||
motdline = NULL;
|
||||
if(themotd)
|
||||
motdline = themotd->lines;
|
||||
while (motdline)
|
||||
while (temp)
|
||||
{
|
||||
sendto_one(sptr, rpl_str(RPL_MOTD), me.name, parv[0],
|
||||
motdline->line);
|
||||
motdline = motdline->next;
|
||||
temp->line);
|
||||
temp = temp->next;
|
||||
}
|
||||
svsmotd:
|
||||
|
||||
motdline = svsmotd.lines;
|
||||
while (motdline)
|
||||
temp2 = svsmotd;
|
||||
while (temp2)
|
||||
{
|
||||
sendto_one(sptr, rpl_str(RPL_MOTD), me.name, parv[0],
|
||||
motdline->line);
|
||||
motdline = motdline->next;
|
||||
temp2->line);
|
||||
temp2 = temp2->next;
|
||||
}
|
||||
if (svsnofile == 0)
|
||||
sendto_one(sptr, rpl_str(RPL_ENDOFMOTD), me.name, parv[0]);
|
||||
|
||||
@@ -883,15 +883,14 @@ int _register_user(aClient *cptr, aClient *sptr, char *nick, char *username, cha
|
||||
|
||||
if (sptr->hostp)
|
||||
{
|
||||
/* reject ASCII < 32 and ASCII >= 127 (note: upper resolver might be even more strict). */
|
||||
/* reject ascci < 32 and ascii >= 127 (note: upper resolver might be even more strict) */
|
||||
for (tmpstr = sptr->sockhost; *tmpstr > ' ' && *tmpstr < 127; tmpstr++);
|
||||
|
||||
/* if host contained invalid ASCII _OR_ the DNS reply is an IP-like reply
|
||||
* (like: 1.2.3.4 or ::ffff:1.2.3.4), then reject it and use IP instead.
|
||||
* (like: 1.2.3.4), then reject it and use IP instead.
|
||||
*/
|
||||
if (*tmpstr || !*user->realhost || (isdigit(*sptr->sockhost) && (sptr->sockhost > tmpstr && isdigit(*(tmpstr - 1))) )
|
||||
|| (sptr->sockhost[0] == ':'))
|
||||
strncpyzt(sptr->sockhost, Inet_ia2p(&sptr->ip), sizeof(sptr->sockhost));
|
||||
if (*tmpstr || !*user->realhost || (isdigit(*sptr->sockhost) && isdigit(*tmpstr - 1)))
|
||||
strncpyzt(sptr->sockhost, (char *)Inet_ia2p((struct IN_ADDR*)&sptr->ip), sizeof(sptr->sockhost));
|
||||
}
|
||||
strncpyzt(user->realhost, sptr->sockhost, sizeof(sptr->sockhost)); /* SET HOSTNAME */
|
||||
|
||||
|
||||
@@ -1,257 +0,0 @@
|
||||
/*
|
||||
* Nopost UnrealIRCd module, (C) Copyright 2004-2010 Bram Matthys (Syzop)
|
||||
*
|
||||
* This module will kill any clients issuing POST's during pre-connect stage.
|
||||
* It protects against the 'Firefox XPS IRC Attack' (and variations thereof).
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 1, or (at your option)
|
||||
* any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
#include "struct.h"
|
||||
#include "common.h"
|
||||
#include "sys.h"
|
||||
#include "numeric.h"
|
||||
#include "msg.h"
|
||||
#include "proto.h"
|
||||
#include "channel.h"
|
||||
#include <time.h>
|
||||
#include <sys/stat.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#ifdef _WIN32
|
||||
#include <io.h>
|
||||
#endif
|
||||
#include <fcntl.h>
|
||||
#include "h.h"
|
||||
#ifdef STRIPBADWORDS
|
||||
#include "badwords.h"
|
||||
#endif
|
||||
#ifdef _WIN32
|
||||
#include "version.h"
|
||||
#endif
|
||||
|
||||
DLLFUNC CMD_FUNC(m_nopost);
|
||||
|
||||
ModuleHeader MOD_HEADER(m_nopost)
|
||||
= {
|
||||
"m_nopost",
|
||||
"v1.1",
|
||||
"Ban GET/POST/PUT commands",
|
||||
"3.2-b8-1",
|
||||
NULL
|
||||
};
|
||||
|
||||
typedef struct _dynlist DynList;
|
||||
struct _dynlist {
|
||||
DynList *prev, *next;
|
||||
char *entry;
|
||||
};
|
||||
|
||||
struct {
|
||||
int ban_action;
|
||||
char *ban_reason;
|
||||
long ban_time;
|
||||
DynList *except_hosts;
|
||||
} cfg;
|
||||
|
||||
static void free_config(void);
|
||||
static void init_config(void);
|
||||
DLLFUNC int m_nopost_config_test(ConfigFile *, ConfigEntry *, int, int *);
|
||||
DLLFUNC int m_nopost_config_run(ConfigFile *, ConfigEntry *, int);
|
||||
static int is_except_host(aClient *sptr);
|
||||
|
||||
DLLFUNC int MOD_TEST(m_nopost)(ModuleInfo *modinfo)
|
||||
{
|
||||
HookAddEx(modinfo->handle, HOOKTYPE_CONFIGTEST, m_nopost_config_test);
|
||||
return MOD_SUCCESS;
|
||||
}
|
||||
|
||||
DLLFUNC int MOD_INIT(m_nopost)(ModuleInfo *modinfo)
|
||||
{
|
||||
CommandAdd(modinfo->handle, "GET", NULL, m_nopost, MAXPARA, M_UNREGISTERED);
|
||||
CommandAdd(modinfo->handle, "POST", NULL, m_nopost, MAXPARA, M_UNREGISTERED);
|
||||
CommandAdd(modinfo->handle, "PUT", NULL, m_nopost, MAXPARA, M_UNREGISTERED);
|
||||
HookAddEx(modinfo->handle, HOOKTYPE_CONFIGRUN, m_nopost_config_run);
|
||||
MARK_AS_OFFICIAL_MODULE(modinfo);
|
||||
init_config();
|
||||
return MOD_SUCCESS;
|
||||
}
|
||||
|
||||
DLLFUNC int MOD_LOAD(m_nopost)(int module_load)
|
||||
{
|
||||
return MOD_SUCCESS;
|
||||
}
|
||||
|
||||
DLLFUNC int MOD_UNLOAD(m_nopost)(int module_unload)
|
||||
{
|
||||
free_config();
|
||||
return MOD_SUCCESS;
|
||||
}
|
||||
|
||||
static void init_config(void)
|
||||
{
|
||||
memset(&cfg, 0, sizeof(cfg));
|
||||
/* Default values */
|
||||
cfg.ban_reason = strdup("HTTP command from IRC connection (ATTACK?)");
|
||||
cfg.ban_action = BAN_ACT_KILL;
|
||||
cfg.ban_time = 60 * 60 * 4;
|
||||
}
|
||||
static void free_config(void)
|
||||
{
|
||||
DynList *d, *d_next;
|
||||
|
||||
if (cfg.ban_reason)
|
||||
MyFree(cfg.ban_reason);
|
||||
for (d=cfg.except_hosts; d; d=d_next)
|
||||
{
|
||||
d_next = d->next;
|
||||
MyFree(d->entry);
|
||||
MyFree(d);
|
||||
}
|
||||
|
||||
memset(&cfg, 0, sizeof(cfg)); /* needed! */
|
||||
}
|
||||
|
||||
DLLFUNC int m_nopost_config_test(ConfigFile *cf, ConfigEntry *ce, int type, int *errs)
|
||||
{
|
||||
int errors = 0;
|
||||
ConfigEntry *cep;
|
||||
|
||||
if (type != CONFIG_SET)
|
||||
return 0;
|
||||
|
||||
/* We are only interrested in set::nopost... */
|
||||
if (!ce || !ce->ce_varname || strcmp(ce->ce_varname, "nopost"))
|
||||
return 0;
|
||||
|
||||
for (cep = ce->ce_entries; cep; cep = cep->ce_next)
|
||||
{
|
||||
if (!cep->ce_varname)
|
||||
{
|
||||
config_error("%s:%i: blank set::nopost item",
|
||||
cep->ce_fileptr->cf_filename, cep->ce_varlinenum);
|
||||
errors++;
|
||||
} else
|
||||
if (!strcmp(cep->ce_varname, "except-hosts"))
|
||||
{
|
||||
} else
|
||||
if (!cep->ce_vardata)
|
||||
{
|
||||
config_error("%s:%i: set::nopost::%s with no value",
|
||||
cep->ce_fileptr->cf_filename, cep->ce_varlinenum, cep->ce_varname);
|
||||
errors++;
|
||||
} else
|
||||
if (!strcmp(cep->ce_varname, "ban-action"))
|
||||
{
|
||||
if (!banact_stringtoval(cep->ce_vardata))
|
||||
{
|
||||
config_error("%s:%i: set::nopost::ban-action: unknown action '%s'",
|
||||
cep->ce_fileptr->cf_filename, cep->ce_varlinenum, cep->ce_vardata);
|
||||
errors++;
|
||||
}
|
||||
} else
|
||||
if (!strcmp(cep->ce_varname, "ban-reason"))
|
||||
{
|
||||
} else
|
||||
if (!strcmp(cep->ce_varname, "ban-time"))
|
||||
{
|
||||
} else
|
||||
{
|
||||
config_error("%s:%i: unknown directive set::nopost::%s",
|
||||
cep->ce_fileptr->cf_filename, cep->ce_varlinenum, cep->ce_varname);
|
||||
errors++;
|
||||
}
|
||||
}
|
||||
*errs = errors;
|
||||
return errors ? -1 : 1;
|
||||
}
|
||||
|
||||
DLLFUNC int m_nopost_config_run(ConfigFile *cf, ConfigEntry *ce, int type)
|
||||
{
|
||||
ConfigEntry *cep, *cep2;
|
||||
DynList *d;
|
||||
|
||||
if (type != CONFIG_SET)
|
||||
return 0;
|
||||
|
||||
/* We are only interrested in set::nopost... */
|
||||
if (!ce || !ce->ce_varname || strcmp(ce->ce_varname, "nopost"))
|
||||
return 0;
|
||||
|
||||
for (cep = ce->ce_entries; cep; cep = cep->ce_next)
|
||||
{
|
||||
if (!strcmp(cep->ce_varname, "except-hosts"))
|
||||
{
|
||||
for (cep2 = cep->ce_entries; cep2; cep2 = cep2->ce_next)
|
||||
{
|
||||
d = MyMallocEx(sizeof(DynList));
|
||||
d->entry = strdup(cep2->ce_varname);
|
||||
AddListItem(d, cfg.except_hosts);
|
||||
}
|
||||
} else
|
||||
if (!strcmp(cep->ce_varname, "ban-action"))
|
||||
{
|
||||
cfg.ban_action = banact_stringtoval(cep->ce_vardata);
|
||||
} else
|
||||
if (!strcmp(cep->ce_varname, "ban-reason"))
|
||||
{
|
||||
if (cfg.ban_reason)
|
||||
MyFree(cfg.ban_reason);
|
||||
cfg.ban_reason = strdup(cep->ce_vardata);
|
||||
} else
|
||||
if (!strcmp(cep->ce_varname, "ban-time"))
|
||||
{
|
||||
cfg.ban_time = config_checkval(cep->ce_vardata, CFG_TIME);
|
||||
}
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
/** Finds out if the host is on the except list. 1 if yes, 0 if no */
|
||||
static int is_except_host(aClient *sptr)
|
||||
{
|
||||
char *host, *ip;
|
||||
DynList *d;
|
||||
|
||||
if (!cfg.except_hosts)
|
||||
return 0; /* quick return */
|
||||
|
||||
host = sptr->user ? sptr->user->realhost : "???";
|
||||
ip = GetIP(sptr) ? GetIP(sptr) : "???";
|
||||
|
||||
for (d=cfg.except_hosts; d; d=d->next)
|
||||
if (!match(d->entry, host) || !match(d->entry, ip))
|
||||
return 1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
DLLFUNC CMD_FUNC(m_nopost)
|
||||
{
|
||||
if (MyConnect(sptr) && !is_except_host(sptr))
|
||||
{
|
||||
/* We send a message to the ircops if the action is KILL, because otherwise
|
||||
* you won't even notice it. This is not necessary for *LINE/SHUN/etc as
|
||||
* ircops see them being added.
|
||||
*/
|
||||
if (cfg.ban_action == BAN_ACT_KILL)
|
||||
sendto_realops("[m_nopost] Killed connection from %s", GetIP(sptr));
|
||||
return place_host_ban(sptr, cfg.ban_action, cfg.ban_reason, cfg.ban_time);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user