Initial commit
This commit is contained in:
commit
62da4c26fa
3
README.md
Normal file
3
README.md
Normal file
@ -0,0 +1,3 @@
|
||||
# ircd-ratbox
|
||||
Mirror of the latest ratbox source because ratbox.org is gay and blocks
|
||||
VPNs.
|
BIN
ircd-ratbox-3.0.10.tar.bz2
Normal file
BIN
ircd-ratbox-3.0.10.tar.bz2
Normal file
Binary file not shown.
17
ircd-ratbox-3.0.10.tar.bz2.asc
Normal file
17
ircd-ratbox-3.0.10.tar.bz2.asc
Normal file
@ -0,0 +1,17 @@
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
Version: GnuPG v1.4.12 (GNU/Linux)
|
||||
|
||||
iQIcBAABAgAGBQJWlqjhAAoJEGk+LSMgH/V+RNEP+gOe5C879xWj9Bp+beW0tqLs
|
||||
QxwIkQj+r1QlHfWtYmERcEk87PZXWacOYlvTMuUhvIzyXc3Kl2t3W3JN/yAinbxC
|
||||
yUzkkOoejcHTXHx/mSlNek/HtpLoluNnKSVPVa91nBFYn8agphAJ1Xhz05N46FGE
|
||||
uWpDWXWVCEAmubEPB4wjCHKtdGd38oWmgqfI70yJ+GaiBrXZn59L9/yJZ0XDzMqF
|
||||
Z3fGpq7tsqsnYw5dHduUvSUalpqCP+FNtad3hMpLch3MVf69laK4uBOiT70KMqTk
|
||||
O3gr+qOYX5Uyn4MRN+DU/oXc4zDfSjtoBnjzWYRebo+ZGmT2CFOarvpNhwTWaWwW
|
||||
0W8wC2cVMOFMvpjJ0uAIvDeXF7/x7QS3Kq8JnkjNVQ6W/eAyRjXebl8Hyt5QO0Cb
|
||||
8PZFGTn8dxjVmX9B++knilIS5Un1dUkPUK1WWEV0wm6ptlTwE6yhn2SkCVM8Mtsw
|
||||
1oEmKmLKUUteldj2RmsIEDEttaV92MjkvsY9D9c5PUZmz1iRR1OxvNjWM7fzOpBY
|
||||
xEr6Ye2FqreaAcNXyZAoy9ei4KsV99guwj8lHJdQVxjYcStctXJHmfCNBGt5L3vv
|
||||
dS4NQuBnvS/QeSfXYri1JM6uffW1SNZnYYcI9ozL14gExniN8OybqGhgAwHKZcgi
|
||||
js0owvQ6TC/j/41VLFZR
|
||||
=N2bF
|
||||
-----END PGP SIGNATURE-----
|
2
ircd-ratbox-3.0.10/.indent.pro
vendored
Normal file
2
ircd-ratbox-3.0.10/.indent.pro
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
-i8 -bli0 -ut -nsai -l100 -npcs -nprs -ncs -nsaf -nsai -nsaw -T uint64_t -T uint32_t -T uint8_t -T int64_t -T int32_t -T int8_t -T uintptr_t -T rb_bh -T size_t -T rb_fde_t -T rb_helper -T rb_prefix_t -T rb_dlink_node -T rb_dlink_list -T rb_patricia_node_t -T rb_patricia_tree_t -T rb_bh_usage_cb
|
||||
|
30
ircd-ratbox-3.0.10/BUGS
Normal file
30
ircd-ratbox-3.0.10/BUGS
Normal file
@ -0,0 +1,30 @@
|
||||
Known Bugs worthy of a mention:
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
1. /MODUNLOAD causes cores:
|
||||
- If a module is modified before being unloaded, /MODUNLOAD (and
|
||||
therefore /MODRELOAD) may cause a core.
|
||||
|
||||
This problem is caused by the behaviour of the OS, which treats
|
||||
shared libraries differently to executables (modifying the ircd
|
||||
binary whilst it is running would also cause a core, but is denied
|
||||
by the OS). There is no way to fix this at the application level,
|
||||
and fixing the OS to do the right thing is also difficult.
|
||||
|
||||
A workaround to avoid coring is possible however. To install new
|
||||
modules, first remove or rename the old module, then copy/move the
|
||||
new file into place. /MODUNLOAD will then work successfully.
|
||||
|
||||
Alternatively, running ./configure with the --disable-shared-modules
|
||||
argument will link all the commands statically, losing the advantages
|
||||
of upgrading at runtime, but reducing the chances of accidentally
|
||||
coring your server.
|
||||
|
||||
BUG REPORTS: If you run this code and encounter problems, you must report
|
||||
the bug in by E-MAIL to ircd-ratbox@lists.ratbox.org
|
||||
|
||||
Please include a gdb backtrace and keep your binaries, modules and core file
|
||||
in case the developers need more information.
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
$Id: BUGS 23020 2006-09-01 18:20:19Z androsyn $
|
20
ircd-ratbox-3.0.10/CREDITS
Normal file
20
ircd-ratbox-3.0.10/CREDITS
Normal file
@ -0,0 +1,20 @@
|
||||
$Id: CREDITS 27348 2012-01-16 22:05:21Z androsyn $
|
||||
|
||||
ircd-ratbox is an evolution where ircd-hybrid left off around version 7-rc1.
|
||||
Currently the ircd-ratbox team consists of the following developers:
|
||||
|
||||
AndroSyn, Aaron Sethman <androsyn -at- ratbox.org>
|
||||
anfl, Lee Hardy <lee -at- leeh.co.uk>
|
||||
jilles, Jilles Tjoelker <jilles -at- stack.nl>
|
||||
|
||||
Special thanks for support, code and ideas to:
|
||||
|
||||
dubkat, Daniel Reidy <dubkat -at- gmail.com>
|
||||
Hwy, W. Campbell <wcampbel -at- botbay.net>
|
||||
larne, Edward Brocklesby <ejb -at- sdf.lonestar.org>
|
||||
|
||||
Of course our work is based on the work of many, many others over the past
|
||||
10 or so years since irc has existed, including the work done by the Hybrid
|
||||
team, our thanks goes to them.
|
||||
|
||||
|
884
ircd-ratbox-3.0.10/ChangeLog
Normal file
884
ircd-ratbox-3.0.10/ChangeLog
Normal file
@ -0,0 +1,884 @@
|
||||
androsyn 2016/01/13 19:33:49 UTC (20160113_12-29315)
|
||||
Log:
|
||||
tag ircd-ratbox RATBOX_3_0_10
|
||||
|
||||
Modified:
|
||||
ircd-ratbox/tags/RATBOX_3_0_10/ (File Added)
|
||||
|
||||
|
||||
androsyn 2016/01/13 19:14:52 UTC (20160113_11-29311)
|
||||
Log:
|
||||
force commit
|
||||
|
||||
Modified:
|
||||
ircd-ratbox/branches/RATBOX_3_0/libltdl/config-h.in (File Modified)
|
||||
|
||||
|
||||
androsyn 2016/01/13 19:00:10 UTC (20160113_10-29309)
|
||||
Log:
|
||||
disable dependency tracking for libltdl
|
||||
|
||||
Modified:
|
||||
ircd-ratbox/branches/RATBOX_3_0/libltdl/Makefile.in (File Modified)
|
||||
|
||||
|
||||
androsyn 2016/01/13 18:59:05 UTC (20160113_9-29307)
|
||||
Log:
|
||||
blah..i hate this autoconf crap
|
||||
|
||||
Modified:
|
||||
ircd-ratbox/branches/RATBOX_3_0/configure (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/include/setup.h.in (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/libltdl/Makefile.in (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/libltdl/aclocal.m4 (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/libltdl/configure (File Modified)
|
||||
|
||||
|
||||
androsyn 2016/01/13 18:50:25 UTC (20160113_8-29305)
|
||||
Log:
|
||||
rebuild automake with automake 1.11
|
||||
|
||||
Modified:
|
||||
ircd-ratbox/branches/RATBOX_3_0/Makefile.in (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/RELNOTES (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/aclocal.m4 (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/bandb/Makefile.in (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/bandb/sqlite3/Makefile.in (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/contrib/Makefile.in (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/help/Makefile.in (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/include/patchlevel.h (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/modules/Makefile.in (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/resolver/Makefile.in (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/src/Makefile.in (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/ssld/Makefile.in (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/tools/Makefile.in (File Modified)
|
||||
|
||||
|
||||
androsyn 2016/01/13 18:48:24 UTC (20160113_7-29303)
|
||||
Log:
|
||||
i hate autotools
|
||||
|
||||
Modified:
|
||||
ircd-ratbox/branches/RATBOX_3_0/libltdl/Makefile.in (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/libltdl/aclocal.m4 (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/libltdl/configure (File Modified)
|
||||
|
||||
|
||||
androsyn 2016/01/13 18:37:34 UTC (20160113_6-29301)
|
||||
Log:
|
||||
update svn:keywords
|
||||
|
||||
Modified:
|
||||
ircd-ratbox/branches/RATBOX_3_0/libltdl/aclocal.m4 (Property Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/libltdl/argz.c (Property Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/libltdl/argz_.h (Property Modified)
|
||||
|
||||
|
||||
androsyn 2016/01/13 18:34:48 UTC (20160113_5-29299)
|
||||
Log:
|
||||
rerun libtoolize etc
|
||||
|
||||
Modified:
|
||||
ircd-ratbox/branches/RATBOX_3_0/libltdl/Makefile.in (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/libltdl/aclocal.m4 (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/libltdl/configure (File Modified)
|
||||
|
||||
|
||||
androsyn 2016/01/13 18:27:07 UTC (20160113_4-29297)
|
||||
Log:
|
||||
rerun autotools
|
||||
|
||||
Modified:
|
||||
ircd-ratbox/branches/RATBOX_3_0/libltdl/Makefile.in (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/libltdl/aclocal.m4 (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/libltdl/configure (File Modified)
|
||||
|
||||
|
||||
androsyn 2016/01/13 18:23:43 UTC (20160113_3-29295)
|
||||
Log:
|
||||
update sqlite amalgamation
|
||||
|
||||
Modified:
|
||||
ircd-ratbox/branches/RATBOX_3_0/bandb/sqlite3/shell.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/bandb/sqlite3/sqlite3.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/bandb/sqlite3/sqlite3.h (File Modified)
|
||||
|
||||
|
||||
androsyn 2016/01/13 18:07:49 UTC (20160113_2-29291)
|
||||
Log:
|
||||
change the ordering of the ssl_cert setup, this allows the server to work without dhparam amongst other things
|
||||
|
||||
Modified:
|
||||
ircd-ratbox/branches/RATBOX_3_0/src/newconf.c (File Modified)
|
||||
|
||||
|
||||
androsyn 2016/01/13 18:07:13 UTC (20160113_1-29289)
|
||||
Log:
|
||||
correctly clear our ServerInfo. This fixes rehashing for ssl related parameters
|
||||
|
||||
Modified:
|
||||
ircd-ratbox/branches/RATBOX_3_0/src/s_conf.c (File Modified)
|
||||
|
||||
|
||||
androsyn 2016/01/13 18:01:32 UTC (20160113_0-29287)
|
||||
Log:
|
||||
log to stderr if -foreground is passed
|
||||
|
||||
Modified:
|
||||
ircd-ratbox/branches/RATBOX_3_0/src/s_log.c (File Modified)
|
||||
|
||||
|
||||
androsyn 2015/12/29 02:38:25 UTC (20151229_0-29271)
|
||||
Log:
|
||||
sigh...make monitor, you know, work
|
||||
|
||||
Modified:
|
||||
ircd-ratbox/branches/RATBOX_3_0/modules/core/m_nick.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/modules/m_info.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/modules/m_services.c (File Modified)
|
||||
|
||||
|
||||
androsyn 2015/12/20 04:35:39 UTC (20151220_0-29265)
|
||||
Log:
|
||||
backport signal handling fixes
|
||||
|
||||
Modified:
|
||||
ircd-ratbox/branches/RATBOX_3_0/bandb/bandb.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/resolver/resolver.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/src/ircd_signal.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/ssld/ssld.c (File Modified)
|
||||
|
||||
|
||||
androsyn 2015/12/18 17:15:54 UTC (20151218_1-29251)
|
||||
Log:
|
||||
update the echo to say 2048 bits as well
|
||||
|
||||
Modified:
|
||||
ircd-ratbox/branches/RATBOX_3_0/doc/genssl.sh (File Modified)
|
||||
|
||||
|
||||
androsyn 2015/12/18 00:07:15 UTC (20151218_0-29235)
|
||||
Log:
|
||||
change default key sizes to 2048 bits and self sign using sha256
|
||||
|
||||
Modified:
|
||||
ircd-ratbox/branches/RATBOX_3_0/doc/genssl.sh (File Modified)
|
||||
|
||||
|
||||
androsyn 2015/12/15 19:47:49 UTC (20151215_0-29233)
|
||||
Log:
|
||||
rerun autotools
|
||||
|
||||
Modified:
|
||||
ircd-ratbox/branches/RATBOX_3_0/libltdl/Makefile.in (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/libltdl/aclocal.m4 (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/libltdl/configure (File Modified)
|
||||
|
||||
|
||||
androsyn 2015/12/10 20:14:50 UTC (20151210_5-29223)
|
||||
Log:
|
||||
rebuild ircd_parser.c,h
|
||||
|
||||
Modified:
|
||||
ircd-ratbox/branches/RATBOX_3_0/src/ircd_parser.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/src/ircd_parser.h (File Modified)
|
||||
|
||||
|
||||
androsyn 2015/12/10 19:54:15 UTC (20151210_4-29221)
|
||||
Log:
|
||||
call rb_setselect to handle res_readreply rather than calling it directly to avoid a minor race condition, backported from trunk
|
||||
|
||||
Modified:
|
||||
ircd-ratbox/branches/RATBOX_3_0/resolver/res.c (File Modified)
|
||||
|
||||
|
||||
androsyn 2015/12/10 18:35:59 UTC (20151210_3-29219)
|
||||
Log:
|
||||
remove fprintf
|
||||
|
||||
Modified:
|
||||
ircd-ratbox/branches/RATBOX_3_0/src/newconf.c (File Modified)
|
||||
|
||||
|
||||
androsyn 2015/12/10 14:02:24 UTC (20151210_2-29217)
|
||||
Log:
|
||||
don't add hub/leaf masks to the hubleaf list until after the connect block is ended. Also cleanup remote_confs correctly
|
||||
|
||||
Modified:
|
||||
ircd-ratbox/branches/RATBOX_3_0/src/newconf.c (File Modified)
|
||||
|
||||
|
||||
androsyn 2015/12/10 13:57:05 UTC (20151210_1-29215)
|
||||
Log:
|
||||
remove exempts on rehash...
|
||||
|
||||
Modified:
|
||||
ircd-ratbox/branches/RATBOX_3_0/include/reject.h (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/src/reject.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/src/s_conf.c (File Modified)
|
||||
|
||||
|
||||
androsyn 2015/12/10 13:48:53 UTC (20151210_0-29213)
|
||||
Log:
|
||||
first batch of backports for various memory leaks from trunk
|
||||
|
||||
Modified:
|
||||
ircd-ratbox/branches/RATBOX_3_0/include/patchlevel.h (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/modules/m_stats.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/src/ircd.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/src/ircd_parser.y (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/src/newconf.c (File Modified)
|
||||
|
||||
|
||||
androsyn 2015/12/04 20:30:15 UTC (20151204_0-29191)
|
||||
Log:
|
||||
don't remove dlines while walking the patricia trie or corruption will result
|
||||
|
||||
Modified:
|
||||
ircd-ratbox/branches/RATBOX_3_0/src/reject.c (File Modified)
|
||||
|
||||
|
||||
androsyn 2015/10/13 15:05:40 UTC (20151013_7-28763)
|
||||
Log:
|
||||
update RELNOTES
|
||||
|
||||
Modified:
|
||||
ircd-ratbox/branches/RATBOX_3_0/RELNOTES (File Modified)
|
||||
|
||||
|
||||
androsyn 2015/10/13 15:04:20 UTC (20151013_6-28761)
|
||||
Log:
|
||||
update relnotes and patchlevel still not quite ready though..
|
||||
|
||||
Modified:
|
||||
ircd-ratbox/branches/RATBOX_3_0/include/patchlevel.h (File Modified)
|
||||
|
||||
|
||||
androsyn 2015/10/13 15:00:04 UTC (20151013_5-28759)
|
||||
Log:
|
||||
yay autotools
|
||||
|
||||
Modified:
|
||||
ircd-ratbox/branches/RATBOX_3_0/Makefile.in (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/aclocal.m4 (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/bandb/Makefile.in (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/bandb/sqlite3/Makefile.in (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/configure (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/contrib/Makefile.in (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/help/Makefile.in (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/include/setup.h.in (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/libltdl/config/compile (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/libltdl/config/depcomp (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/libltdl/config/install-sh (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/libltdl/config/missing (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/libltdl/config/ylwrap (File Modified) (Property Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/modules/Makefile.in (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/resolver/Makefile.in (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/src/Makefile.in (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/ssld/Makefile.in (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/tools/Makefile.in (File Modified)
|
||||
|
||||
|
||||
androsyn 2015/10/13 14:55:16 UTC (20151013_4-28757)
|
||||
Log:
|
||||
remove some old support code for gcc 3.3, we don't support that anymore i don't think
|
||||
|
||||
Modified:
|
||||
ircd-ratbox/branches/RATBOX_3_0/src/ircd_lexer.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/src/ircd_lexer.l (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/src/ircd_parser.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/src/ircd_parser.h (File Modified)
|
||||
|
||||
|
||||
androsyn 2015/10/13 14:48:47 UTC (20151013_3-28755)
|
||||
Log:
|
||||
remove the rest of EGD
|
||||
|
||||
Modified:
|
||||
ircd-ratbox/branches/RATBOX_3_0/include/s_conf.h (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/src/ircd.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/src/newconf.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/src/s_conf.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/src/sslproc.c (File Modified)
|
||||
|
||||
|
||||
androsyn 2015/10/13 14:47:21 UTC (20151013_2-28753)
|
||||
Log:
|
||||
keep signedness on this shift
|
||||
|
||||
Modified:
|
||||
ircd-ratbox/branches/RATBOX_3_0/ssld/ssld.c (File Modified)
|
||||
|
||||
|
||||
androsyn 2015/10/13 14:46:54 UTC (20151013_1-28751)
|
||||
Log:
|
||||
keep signedness on this shift
|
||||
|
||||
Modified:
|
||||
ircd-ratbox/branches/RATBOX_3_0/bandb/bandb.c (File Modified)
|
||||
|
||||
|
||||
androsyn 2015/10/13 14:41:38 UTC (20151013_0-28749)
|
||||
Log:
|
||||
initialize arglen
|
||||
|
||||
Modified:
|
||||
ircd-ratbox/branches/RATBOX_3_0/src/channel.c (File Modified)
|
||||
|
||||
|
||||
androsyn 2015/10/12 15:49:10 UTC (20151012_1-28739)
|
||||
Log:
|
||||
unconditionally send MAP isupport
|
||||
|
||||
Modified:
|
||||
ircd-ratbox/branches/RATBOX_3_0/src/supported.c (File Modified)
|
||||
|
||||
|
||||
androsyn 2015/10/12 14:09:49 UTC (20151012_0-28737)
|
||||
Log:
|
||||
add ACCEPT/MAP supported strings
|
||||
|
||||
Modified:
|
||||
ircd-ratbox/branches/RATBOX_3_0/src/supported.c (File Modified)
|
||||
|
||||
|
||||
androsyn 2015/10/11 13:56:06 UTC (20151011_0-28735)
|
||||
Log:
|
||||
actually free_monitor on delete
|
||||
|
||||
Modified:
|
||||
ircd-ratbox/branches/RATBOX_3_0/modules/m_monitor.c (File Modified)
|
||||
|
||||
|
||||
androsyn 2015/10/06 18:41:56 UTC (20151006_2-28725)
|
||||
Log:
|
||||
use relative paths for libratbox svn:external
|
||||
|
||||
Modified:
|
||||
ircd-ratbox/branches/RATBOX_3_0/ (Property Modified)
|
||||
|
||||
|
||||
androsyn 2015/10/06 18:40:21 UTC (20151006_1-28723)
|
||||
Log:
|
||||
more updates to RELNOTES
|
||||
|
||||
Modified:
|
||||
ircd-ratbox/branches/RATBOX_3_0/RELNOTES (File Modified)
|
||||
|
||||
|
||||
androsyn 2015/10/06 18:39:36 UTC (20151006_0-28721)
|
||||
Log:
|
||||
use relative paths for libratbox svn:external
|
||||
|
||||
Modified:
|
||||
ircd-ratbox/branches/RATBOX_3_0/ (Property Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/RELNOTES (File Modified)
|
||||
|
||||
|
||||
androsyn 2015/10/02 20:57:42 UTC (20151002_1-28697)
|
||||
Log:
|
||||
backport trunk monitor changes
|
||||
|
||||
Modified:
|
||||
ircd-ratbox/branches/RATBOX_3_0/Makefile.in (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/bandb/Makefile.in (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/bandb/sqlite3/Makefile.in (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/contrib/Makefile.in (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/help/Makefile.in (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/include/monitor.h (File Added)
|
||||
ircd-ratbox/branches/RATBOX_3_0/include/s_conf.h (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/include/send.h (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/include/struct.h (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/libltdl/config/ylwrap (File Added)
|
||||
ircd-ratbox/branches/RATBOX_3_0/modules/Makefile.am (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/modules/Makefile.in (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/modules/m_monitor.c (File Added)
|
||||
ircd-ratbox/branches/RATBOX_3_0/resolver/Makefile.in (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/src/Makefile.am (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/src/Makefile.in (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/src/client.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/src/monitor.c (File Added)
|
||||
ircd-ratbox/branches/RATBOX_3_0/src/newconf.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/src/s_conf.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/src/s_user.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/src/send.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/src/supported.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/ssld/Makefile.in (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/tools/Makefile.in (File Modified)
|
||||
|
||||
|
||||
androsyn 2015/10/02 16:49:39 UTC (20151002_0-28681)
|
||||
Log:
|
||||
use libratbox functions
|
||||
|
||||
Modified:
|
||||
ircd-ratbox/branches/RATBOX_3_0/contrib/m_flags.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/contrib/m_mkpasswd.c (File Modified)
|
||||
|
||||
|
||||
androsyn 2015/09/29 18:04:32 UTC (20150929_4-28679)
|
||||
Log:
|
||||
update libltdl
|
||||
|
||||
Modified:
|
||||
ircd-ratbox/branches/RATBOX_3_0/libltdl/COPYING.LIB (File Added)
|
||||
ircd-ratbox/branches/RATBOX_3_0/libltdl/Makefile.in (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/libltdl/aclocal.m4 (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/libltdl/argz.c (File Added)
|
||||
ircd-ratbox/branches/RATBOX_3_0/libltdl/argz_.h (File Added)
|
||||
ircd-ratbox/branches/RATBOX_3_0/libltdl/config/ (File Added)
|
||||
ircd-ratbox/branches/RATBOX_3_0/libltdl/config/compile (File Added)
|
||||
ircd-ratbox/branches/RATBOX_3_0/libltdl/config/config.guess (File Added)
|
||||
ircd-ratbox/branches/RATBOX_3_0/libltdl/config/config.sub (File Added)
|
||||
ircd-ratbox/branches/RATBOX_3_0/libltdl/config/depcomp (File Added)
|
||||
ircd-ratbox/branches/RATBOX_3_0/libltdl/config/install-sh (File Added)
|
||||
ircd-ratbox/branches/RATBOX_3_0/libltdl/config/ltmain.sh (File Added)
|
||||
ircd-ratbox/branches/RATBOX_3_0/libltdl/config/missing (File Added)
|
||||
ircd-ratbox/branches/RATBOX_3_0/libltdl/configure (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/libltdl/libltdl/ (File Added)
|
||||
ircd-ratbox/branches/RATBOX_3_0/libltdl/libltdl/lt__alloc.h (File Added)
|
||||
ircd-ratbox/branches/RATBOX_3_0/libltdl/libltdl/lt__dirent.h (File Added)
|
||||
ircd-ratbox/branches/RATBOX_3_0/libltdl/libltdl/lt__glibc.h (File Added)
|
||||
ircd-ratbox/branches/RATBOX_3_0/libltdl/libltdl/lt__private.h (File Added)
|
||||
ircd-ratbox/branches/RATBOX_3_0/libltdl/libltdl/lt__strl.h (File Added)
|
||||
ircd-ratbox/branches/RATBOX_3_0/libltdl/libltdl/lt_dlloader.h (File Added)
|
||||
ircd-ratbox/branches/RATBOX_3_0/libltdl/libltdl/lt_error.h (File Added)
|
||||
ircd-ratbox/branches/RATBOX_3_0/libltdl/libltdl/lt_system.h (File Added)
|
||||
ircd-ratbox/branches/RATBOX_3_0/libltdl/libltdl/slist.h (File Added)
|
||||
ircd-ratbox/branches/RATBOX_3_0/libltdl/loaders/ (File Added)
|
||||
ircd-ratbox/branches/RATBOX_3_0/libltdl/loaders/dld_link.c (File Added)
|
||||
ircd-ratbox/branches/RATBOX_3_0/libltdl/loaders/dlopen.c (File Added)
|
||||
ircd-ratbox/branches/RATBOX_3_0/libltdl/loaders/dyld.c (File Added)
|
||||
ircd-ratbox/branches/RATBOX_3_0/libltdl/loaders/load_add_on.c (File Added)
|
||||
ircd-ratbox/branches/RATBOX_3_0/libltdl/loaders/loadlibrary.c (File Added)
|
||||
ircd-ratbox/branches/RATBOX_3_0/libltdl/loaders/preopen.c (File Added)
|
||||
ircd-ratbox/branches/RATBOX_3_0/libltdl/loaders/shl_load.c (File Added)
|
||||
ircd-ratbox/branches/RATBOX_3_0/libltdl/lt__alloc.c (File Added)
|
||||
ircd-ratbox/branches/RATBOX_3_0/libltdl/lt__dirent.c (File Added)
|
||||
ircd-ratbox/branches/RATBOX_3_0/libltdl/lt__strl.c (File Added)
|
||||
ircd-ratbox/branches/RATBOX_3_0/libltdl/lt_dlloader.c (File Added)
|
||||
ircd-ratbox/branches/RATBOX_3_0/libltdl/lt_error.c (File Added)
|
||||
ircd-ratbox/branches/RATBOX_3_0/libltdl/m4/ (File Added)
|
||||
ircd-ratbox/branches/RATBOX_3_0/libltdl/m4/argz.m4 (File Added)
|
||||
ircd-ratbox/branches/RATBOX_3_0/libltdl/m4/libtool.m4 (File Added)
|
||||
ircd-ratbox/branches/RATBOX_3_0/libltdl/m4/ltdl.m4 (File Added)
|
||||
ircd-ratbox/branches/RATBOX_3_0/libltdl/m4/ltoptions.m4 (File Added)
|
||||
ircd-ratbox/branches/RATBOX_3_0/libltdl/m4/ltsugar.m4 (File Added)
|
||||
ircd-ratbox/branches/RATBOX_3_0/libltdl/m4/ltversion.m4 (File Added)
|
||||
ircd-ratbox/branches/RATBOX_3_0/libltdl/m4/lt~obsolete.m4 (File Added)
|
||||
ircd-ratbox/branches/RATBOX_3_0/libltdl/slist.c (File Added)
|
||||
|
||||
|
||||
androsyn 2015/09/29 17:51:20 UTC (20150929_3-28677)
|
||||
Log:
|
||||
fix the time_t 64bit on 32bit openbsd mess
|
||||
|
||||
Modified:
|
||||
ircd-ratbox/branches/RATBOX_3_0/modules/core/m_join.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/modules/core/m_mode.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/modules/core/m_nick.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/modules/core/m_server.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/modules/m_services.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/modules/m_stats.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/modules/m_svinfo.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/modules/m_tb.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/src/bandbi.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/src/channel.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/src/client.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/src/s_conf.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/src/s_user.c (File Modified)
|
||||
|
||||
|
||||
androsyn 2015/09/29 17:09:18 UTC (20150929_2-28675)
|
||||
Log:
|
||||
check for sizeof(time_t) and setup format specifiers
|
||||
|
||||
Modified:
|
||||
ircd-ratbox/branches/RATBOX_3_0/configure (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/configure.ac (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/include/setup.h.in (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/include/stdinc.h (File Modified)
|
||||
|
||||
|
||||
androsyn 2015/09/29 17:06:09 UTC (20150929_1-28673)
|
||||
Log:
|
||||
Fix autoconf/libtool/libltdl crap. libltdl will only be built if needed, it will try to use the system libltdl by default. Backported from trunk
|
||||
|
||||
|
||||
|
||||
Modified:
|
||||
ircd-ratbox/branches/RATBOX_3_0/Makefile.am (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/Makefile.in (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/aclocal.m4 (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/bandb/Makefile.in (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/bandb/sqlite3/Makefile.in (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/configure (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/configure.ac (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/contrib/Makefile.in (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/help/Makefile.in (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/include/setup.h.in (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/libltdl/Makefile.am (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/libltdl/Makefile.in (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/libltdl/README (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/libltdl/aclocal.m4 (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/libltdl/config-h.in (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/libltdl/config.guess (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/libltdl/config.sub (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/libltdl/configure (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/libltdl/configure.ac (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/libltdl/install-sh (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/libltdl/ltdl.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/libltdl/ltdl.h (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/libltdl/ltmain.sh (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/libltdl/missing (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/modules/Makefile.in (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/resolver/Makefile.in (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/src/Makefile.in (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/ssld/Makefile.in (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/tools/Makefile.in (File Modified)
|
||||
|
||||
|
||||
androsyn 2015/09/29 15:09:55 UTC (20150929_0-28671)
|
||||
Log:
|
||||
remove mostly unused monitor code
|
||||
|
||||
Modified:
|
||||
ircd-ratbox/branches/RATBOX_3_0/Makefile.in (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/aclocal.m4 (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/bandb/Makefile.in (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/bandb/sqlite3/Makefile.in (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/contrib/Makefile.in (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/doc/example.conf (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/help/Makefile.in (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/include/monitor.h (File Deleted)
|
||||
ircd-ratbox/branches/RATBOX_3_0/include/s_conf.h (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/include/send.h (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/include/struct.h (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/modules/Makefile.am (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/modules/Makefile.in (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/modules/core/m_nick.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/modules/m_info.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/modules/m_monitor.c (File Deleted)
|
||||
ircd-ratbox/branches/RATBOX_3_0/modules/m_services.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/modules/static_modules.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/resolver/Makefile.in (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/src/Makefile.am (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/src/Makefile.in (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/src/client.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/src/ircd.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/src/monitor.c (File Deleted)
|
||||
ircd-ratbox/branches/RATBOX_3_0/src/newconf.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/src/s_conf.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/src/s_user.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/src/send.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/src/supported.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/ssld/Makefile.in (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/tools/Makefile.in (File Modified)
|
||||
|
||||
|
||||
androsyn 2015/08/10 18:23:42 UTC (20150810_0-28529)
|
||||
Log:
|
||||
fix overlapping memcpy with memmove, recent variants of glibc will crash on modrestart
|
||||
|
||||
Modified:
|
||||
ircd-ratbox/branches/RATBOX_3_0/src/modules.c (File Modified)
|
||||
|
||||
|
||||
androsyn 2014/08/04 17:31:18 UTC (20140804_0-27478)
|
||||
Log:
|
||||
fix notice
|
||||
|
||||
Modified:
|
||||
ircd-ratbox/branches/RATBOX_3_0/modules/core/m_die.c (File Modified)
|
||||
|
||||
|
||||
androsyn 2013/01/28 23:38:59 UTC (20130128_0-27433)
|
||||
Log:
|
||||
Reject cidr masks that are too large to make sense, assume they are nonsense and skip cidr checking for these
|
||||
|
||||
|
||||
Modified:
|
||||
ircd-ratbox/branches/RATBOX_3_0/src/match.c (File Modified)
|
||||
|
||||
|
||||
androsyn 2012/12/31 21:34:15 UTC (20121231_1-27414)
|
||||
Log:
|
||||
update release version
|
||||
|
||||
Modified:
|
||||
ircd-ratbox/branches/RATBOX_3_0/INSTALL (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/include/patchlevel.h (File Modified)
|
||||
|
||||
|
||||
androsyn 2012/12/31 21:31:20 UTC (20121231_0-27412)
|
||||
Log:
|
||||
update relnotes
|
||||
|
||||
Modified:
|
||||
ircd-ratbox/branches/RATBOX_3_0/RELNOTES (File Modified)
|
||||
|
||||
|
||||
jilles 2012/05/27 13:09:42 UTC (20120527_0-27399)
|
||||
Log:
|
||||
Backport trunk r27397: Fix typo, reported by Scott MacDonald.
|
||||
|
||||
|
||||
Modified:
|
||||
ircd-ratbox/branches/RATBOX_3_0/src/ircd.c (File Modified)
|
||||
|
||||
|
||||
androsyn 2012/04/15 21:41:07 UTC (20120415_0-27391)
|
||||
Log:
|
||||
Fix another case of sizeof() returning the pointer size instead of the variable size
|
||||
|
||||
Modified:
|
||||
ircd-ratbox/branches/RATBOX_3_0/resolver/resolver.c (File Modified)
|
||||
|
||||
|
||||
dubkat 2012/03/16 23:10:29 UTC (20120316_2-27381)
|
||||
Log:
|
||||
more copyright changes
|
||||
|
||||
Modified:
|
||||
ircd-ratbox/branches/RATBOX_3_0/contrib/m_clearchan.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/contrib/m_force.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/contrib/m_ojoin.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/contrib/m_okick.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/contrib/m_olist.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/doc/server-version-info (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/src/version.c.SH (File Modified)
|
||||
|
||||
|
||||
dubkat 2012/03/16 05:33:15 UTC (20120316_1-27371)
|
||||
Log:
|
||||
House cleaning - update our copyright notices
|
||||
|
||||
Modified:
|
||||
ircd-ratbox/branches/RATBOX_3_0/bandb/bandb.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/bandb/bantool.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/bandb/rsdb_sqlite3.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/contrib/ircd-shortcut.pl (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/contrib/m_opme.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/contrib/m_webirc.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/doc/challenge.txt (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/doc/example.conf (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/doc/example.efnet.conf (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/doc/genssl.sh (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/doc/ircd_crontab.sh (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/include/channel.h (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/include/class.h (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/include/client.h (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/include/common.h (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/include/config.h (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/include/config.h.dist (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/include/defaults.h (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/include/dns.h (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/include/hash.h (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/include/hook.h (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/include/hostmask.h (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/include/ircd.h (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/include/ircd_defs.h (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/include/ircd_getopt.h (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/include/ircd_signal.h (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/include/listener.h (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/include/match.h (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/include/modules.h (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/include/monitor.h (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/include/numeric.h (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/include/packet.h (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/include/parse.h (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/include/patchlevel.h (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/include/reject.h (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/include/restart.h (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/include/s_auth.h (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/include/s_conf.h (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/include/s_gline.h (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/include/s_log.h (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/include/s_newconf.h (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/include/s_serv.h (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/include/s_stats.h (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/include/s_user.h (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/include/scache.h (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/include/send.h (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/include/sslproc.h (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/include/struct.h (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/include/whowas.h (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/main.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/modules/core/m_die.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/modules/core/m_error.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/modules/core/m_join.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/modules/core/m_kick.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/modules/core/m_kill.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/modules/core/m_message.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/modules/core/m_mode.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/modules/core/m_nick.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/modules/core/m_part.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/modules/core/m_quit.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/modules/core/m_server.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/modules/core/m_squit.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/modules/m_accept.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/modules/m_admin.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/modules/m_adminwall.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/modules/m_away.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/modules/m_cap.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/modules/m_capab.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/modules/m_close.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/modules/m_cmessage.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/modules/m_connect.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/modules/m_dline.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/modules/m_encap.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/modules/m_gline.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/modules/m_gungline.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/modules/m_help.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/modules/m_info.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/modules/m_invite.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/modules/m_ison.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/modules/m_kline.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/modules/m_knock.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/modules/m_links.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/modules/m_list.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/modules/m_locops.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/modules/m_lusers.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/modules/m_monitor.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/modules/m_motd.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/modules/m_names.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/modules/m_oper.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/modules/m_operspy.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/modules/m_pass.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/modules/m_ping.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/modules/m_pong.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/modules/m_post.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/modules/m_rehash.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/modules/m_restart.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/modules/m_resv.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/modules/m_services.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/modules/m_set.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/modules/m_stats.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/modules/m_svinfo.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/modules/m_tb.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/modules/m_testline.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/modules/m_time.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/modules/m_topic.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/modules/m_trace.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/modules/m_unreject.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/modules/m_user.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/modules/m_userhost.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/modules/m_version.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/modules/m_wallops.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/modules/m_who.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/modules/m_whois.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/modules/m_whowas.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/modules/m_xline.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/resolver/res.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/resolver/reslist.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/resolver/resolver.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/src/bandbi.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/src/cache.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/src/channel.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/src/class.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/src/client.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/src/dns.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/src/getopt.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/src/hash.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/src/hook.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/src/hostmask.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/src/ircd.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/src/listener.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/src/modules.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/src/monitor.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/src/newconf.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/src/numeric.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/src/operhash.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/src/packet.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/src/parse.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/src/reject.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/src/restart.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/src/s_auth.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/src/s_conf.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/src/s_log.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/src/s_newconf.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/src/s_serv.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/src/s_user.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/src/scache.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/src/send.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/src/sslproc.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/src/supported.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/src/whowas.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/ssld/ssld.c (File Modified)
|
||||
|
||||
|
||||
dubkat 2012/03/16 03:49:19 UTC (20120316_0-27369)
|
||||
Log:
|
||||
Add additional documentation instructing the user that issuing a --prefix to configure is highly advised.
|
||||
|
||||
Modified:
|
||||
ircd-ratbox/branches/RATBOX_3_0/INSTALL (File Modified)
|
||||
|
||||
|
||||
androsyn 2012/03/11 00:34:21 UTC (20120311_1-27357)
|
||||
Log:
|
||||
Rerun autoconf/libtoolize again...
|
||||
|
||||
|
||||
Modified:
|
||||
ircd-ratbox/branches/RATBOX_3_0/configure (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/configure.ac (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/ltmain.sh (File Modified)
|
||||
|
||||
|
||||
androsyn 2012/03/11 00:12:06 UTC (20120311_0-27353)
|
||||
Log:
|
||||
Rerun autoreconf...
|
||||
|
||||
|
||||
Modified:
|
||||
ircd-ratbox/branches/RATBOX_3_0/Makefile.in (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/aclocal.m4 (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/bandb/Makefile.in (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/bandb/sqlite3/Makefile.in (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/configure (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/contrib/Makefile.in (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/help/Makefile.in (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/libltdl/Makefile.in (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/libltdl/aclocal.m4 (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/libltdl/configure (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/modules/Makefile.in (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/resolver/Makefile.in (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/src/Makefile.in (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/ssld/Makefile.in (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/tools/Makefile.in (File Modified)
|
||||
|
||||
|
||||
androsyn 2012/01/16 22:05:21 UTC (20120116_2-27348)
|
||||
Log:
|
||||
test
|
||||
|
||||
Modified:
|
||||
ircd-ratbox/branches/RATBOX_3_0/CREDITS (File Modified)
|
||||
|
||||
|
||||
dubkat 2012/01/16 21:35:50 UTC (20120116_1-27345)
|
||||
Log:
|
||||
Update SQLite to 3.7.10. release information can be read at: http://www.sqlite.org/releaselog/3_7_10.html
|
||||
|
||||
|
||||
|
||||
Modified:
|
||||
ircd-ratbox/branches/RATBOX_3_0/bandb/sqlite3/shell.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/bandb/sqlite3/sqlite3.c (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/bandb/sqlite3/sqlite3.h (File Modified)
|
||||
|
||||
|
||||
dubkat 2012/01/16 05:43:30 UTC (20120116_0-27341)
|
||||
Log:
|
||||
fix typo in example.conf and example.efnet.conf
|
||||
|
||||
reported by Brad Smith <brad@comstyle.com>
|
||||
|
||||
|
||||
|
||||
Modified:
|
||||
ircd-ratbox/branches/RATBOX_3_0/doc/example.conf (File Modified)
|
||||
ircd-ratbox/branches/RATBOX_3_0/doc/example.efnet.conf (File Modified)
|
||||
|
||||
|
BIN
ircd-ratbox-3.0.10/ChangeLog.1.bz2
Normal file
BIN
ircd-ratbox-3.0.10/ChangeLog.1.bz2
Normal file
Binary file not shown.
BIN
ircd-ratbox-3.0.10/ChangeLog.2.bz2
Normal file
BIN
ircd-ratbox-3.0.10/ChangeLog.2.bz2
Normal file
Binary file not shown.
217
ircd-ratbox-3.0.10/INSTALL
Normal file
217
ircd-ratbox-3.0.10/INSTALL
Normal file
@ -0,0 +1,217 @@
|
||||
ircd-ratbox INSTALL Document
|
||||
|
||||
$Id: INSTALL 27414 2012-12-31 21:34:15Z androsyn $
|
||||
|
||||
Copyright (c) 2001 by ircd-hybrid team
|
||||
Copyright (c) 2002-2012 ircd-ratbox development team
|
||||
|
||||
----------------------------------------------------------------------
|
||||
|
||||
__ __ __ __
|
||||
|__|.----.----.--| |___.----.---.-.| |_| |--.-----.--.--.
|
||||
| || _| __| _ |___| _| _ || _| _ | _ |_ _|
|
||||
|__||__| |____|_____| |__| |___._||____|_____|_____|__.__|
|
||||
|
||||
|
||||
+--------------------------------------------------------------------+
|
||||
| IMPORTANT: for those who don't bother reading docs... |
|
||||
| If you are upgrading from ANY VERSION of ircd-ratbox, see the |
|
||||
| instructions under UPGRADING, #3. YES, THIS MEANS YOU! |
|
||||
` ------------------------------------------------------------------ '
|
||||
|
||||
Read the ChangeLog file to find out about the exciting
|
||||
new features in this version. Other good reads are
|
||||
doc/whats-new.txt, BUGS, doc/example.conf, and README.FIRST.
|
||||
|
||||
An example.conf for EFnet is in doc/ with the values "approved"
|
||||
on 12 December 2001.
|
||||
|
||||
|
||||
|
||||
> QUICK START
|
||||
|
||||
1. Configure (see below under CONFIGURE OPTIONS for more details):
|
||||
|
||||
* IMPORTANT:
|
||||
* At a minimum, you really ought to use the --prefix=/some/place option.
|
||||
* By default, configure will select /usr/local/ircd -- YOU DO *NOT* WANT THAT!
|
||||
* You may *NOT* run the ircd as root, and the ircd user needs to be able to write to
|
||||
* it's own directories. You have been warned.
|
||||
|
||||
I. Large networks (with thousands of users):
|
||||
./configure --prefix=/home/user/ircd
|
||||
|
||||
II. Small networks (with only a few hundred users or less):
|
||||
./configure --prefix=/home/user/ircd --enable-small-net
|
||||
|
||||
III. Configure ircd-ratbox for running with minimal resources
|
||||
on a 64bit VPS (Virtual Private Server). This creates
|
||||
a 32bit IRCD which takes up less memory:
|
||||
CFLAGS="-m32" ./configure --prefix=/home/user/ircd \
|
||||
--enable-small-net
|
||||
|
||||
2. Build:
|
||||
|
||||
I. On linux systems: make
|
||||
II. On *BSD systems: gmake
|
||||
|
||||
|
||||
3. Install:
|
||||
|
||||
I. make install (or gmake install on *BSD)
|
||||
II. make install-strip (strips out debugging code for smaller
|
||||
binaries and modules)
|
||||
|
||||
DO NOT SUBMIT BUGS IF YOU HAVE STRIPPED THE IRCD OF DEBUGGING
|
||||
SYMBOLS. WE WILL NOT BE ABLE TO HELP YOU.
|
||||
|
||||
|
||||
|
||||
|
||||
> ADDITIONAL CONFIGURE OPTIONS
|
||||
|
||||
Note: There are some special optional parameters to the configure
|
||||
script that some admins may wish to use.
|
||||
|
||||
* --enable-kqueue
|
||||
Use the superior kqueue(2) system call as opposed to
|
||||
the default poll(2). This is currently only available
|
||||
on FreeBSD 4.1 or higher, and should be auto-detected.
|
||||
|
||||
* --enable-devpoll
|
||||
Enable the superior /dev/poll support on Solaris.
|
||||
Linux /dev/poll is broken and will not work with this
|
||||
option. Do not use this unless you comprehend the implications.
|
||||
|
||||
* --enable-openssl
|
||||
Enable the openssl dependent crypto functions.
|
||||
This will allow CHALLENGE to work and encrypted links.
|
||||
On systems where the configure script can automatically
|
||||
detect OpenSSL, this option is not necessary.
|
||||
If configure cannot find OpenSSL, you must specify a
|
||||
path with this option.
|
||||
(--enable-openssl=/path/to/openssl)
|
||||
|
||||
If you plan on using SSL encrypted client connections,
|
||||
or encrypted links, you may wish to run
|
||||
/path/to/ircd/bin/genssl.sh to generate self-signed
|
||||
certificates.
|
||||
|
||||
* --enable-ipv6
|
||||
Enable IPv6 support. This should be auto-detected.
|
||||
|
||||
* --enable-static
|
||||
Enable a static-linked ircd. You will not be able to unload,
|
||||
or reload modules. You probably don't want this.
|
||||
|
||||
* --enable-assert
|
||||
Enable some of the debugging code. This should NOT be used
|
||||
on production servers. Doing so is a performance hit,
|
||||
and can cause cores from things that shouldn't normally happen.
|
||||
|
||||
* --enable-small-net
|
||||
Tunes the server for smaller networks by reducing the
|
||||
startup memory footprint. This should really only be used
|
||||
for *small* networks, as this tends to be a performance hit
|
||||
on larger networks.
|
||||
|
||||
* --with-nicklen
|
||||
Sets the maximum NICK length. Note that this MUST be
|
||||
consistant across your entire network.
|
||||
|
||||
* --enable-services
|
||||
If your network runs ratbox-services, this enables extra
|
||||
code to actually make it useful on your ircd.
|
||||
Please read doc/services.txt for more information.
|
||||
|
||||
|
||||
|
||||
> UPGRADING
|
||||
|
||||
1. If this is a clean install of ircd-ratbox, you may skip this section.
|
||||
|
||||
2. Upgrading from ircd-ratbox-2.x, ircd-hybrid-7.x
|
||||
|
||||
If you have an older version of ircd-ratbox or ircd-hybrid, and
|
||||
you have klines, dlines, resvs, and xline config files, keep
|
||||
reading.
|
||||
|
||||
ircd-ratbox no longer uses flat-file based configs for these
|
||||
types of entries, instead they are stored in a database. To
|
||||
prevent accidental clobbering, or leaving behind old, unsupported
|
||||
modules it would be best to install ratbox into a clean location.
|
||||
|
||||
After you have finished installing the ircd, you will likey wish
|
||||
to import your old ban files. ircd-ratbox-3 includes a tool
|
||||
to manage the database. Importing, backing up, error checking,
|
||||
and reclaiming lost space are all supported. For more information,
|
||||
run /path/to/ircd/bin/bantool with no arguments.
|
||||
|
||||
I. import old ban configs (pretend mode):
|
||||
/path/to/ircd/bin/bantool -i -d -p /path/to/oldircd/etc
|
||||
|
||||
If everything looks good, you will want to actually let
|
||||
bantool do the import.
|
||||
|
||||
II. import old ban configs:
|
||||
/path/to/ircd/bin/bantool -i -d /path/to/oldircd/etc
|
||||
|
||||
|
||||
3. Upgrading from another version ircd-ratbox-3.x
|
||||
|
||||
* IMPORTANT: EVERY TIME YOU UPGRADE ircd-ratbox-3 YOU NEED TO
|
||||
ISSUE THIS COMMAND. FAILURE TO DO SO CAN CAUSE YOUR IRCD TO CORE!
|
||||
|
||||
I. /path/to/ircd/bin/bantool -u
|
||||
|
||||
|
||||
|
||||
|
||||
> HOW TO GET HELP
|
||||
|
||||
Send Check or Money Order to... just kidding!
|
||||
(However free beer is always appreciated)
|
||||
|
||||
* For Bug Reports, visit: http://bugs.ratbox.org
|
||||
|
||||
* For General Question, you may ask your question
|
||||
on #ratbox on EFnet.
|
||||
|
||||
If you do fix anything, however, please post a context or unified
|
||||
diff on http://bugs.ratbox.org so the fixes can be incorporated into
|
||||
the next release of ircd-ratbox.
|
||||
|
||||
If ratbox crashes on you, please submit a bug report, and include the
|
||||
gdb backtrace or corefile on http://bugs.ratbox.org
|
||||
|
||||
DISCUSSION: There is a low-volume mailing list for discussion of
|
||||
ratbox issues, To subscribe, visit:
|
||||
http://lists.ratbox.org/cgi-bin/mailman/listinfo/ircd-ratbox
|
||||
|
||||
----------------------------------------------------------------------
|
||||
|
||||
> NOTES
|
||||
|
||||
The best way to get a backtrace of the core is to follow this sequence of
|
||||
instructions:
|
||||
|
||||
1. Change to the directory containing the core file
|
||||
|
||||
2. Run gdb on the binary and the core file. With an unmodified
|
||||
ircd-ratbox installation, an example command line is below
|
||||
(in the /path/to/ircd directory). This will be useless
|
||||
if you used 'make install-strip'.
|
||||
|
||||
$ gdb bin/ircd ircd.core
|
||||
|
||||
3. At the "(gdb)" prompt, enter the command "bt"
|
||||
|
||||
4. Save the output of the backtrace command and submit it to
|
||||
http://bugs.ratbox.org
|
||||
|
||||
5. Be sure to save the ircd binary, the modules, and the core file
|
||||
in a safe place in case the developers need to look deeper
|
||||
than a backtrace provides.
|
||||
|
||||
|
||||
|
340
ircd-ratbox-3.0.10/LICENSE
Normal file
340
ircd-ratbox-3.0.10/LICENSE
Normal file
@ -0,0 +1,340 @@
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 2, June 1991
|
||||
|
||||
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The licenses for most software are designed to take away your
|
||||
freedom to share and change it. By contrast, the GNU General Public
|
||||
License is intended to guarantee your freedom to share and change free
|
||||
software--to make sure the software is free for all its users. This
|
||||
General Public License applies to most of the Free Software
|
||||
Foundation's software and to any other program whose authors commit to
|
||||
using it. (Some other Free Software Foundation software is covered by
|
||||
the GNU Lesser General Public License instead.) You can apply it to
|
||||
your programs, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
have the freedom to distribute copies of free software (and charge for
|
||||
this service if you wish), that you receive source code or can get it
|
||||
if you want it, that you can change the software or use pieces of it
|
||||
in new free programs; and that you know you can do these things.
|
||||
|
||||
To protect your rights, we need to make restrictions that forbid
|
||||
anyone to deny you these rights or to ask you to surrender the rights.
|
||||
These restrictions translate to certain responsibilities for you if you
|
||||
distribute copies of the software, or if you modify it.
|
||||
|
||||
For example, if you distribute copies of such a program, whether
|
||||
gratis or for a fee, you must give the recipients all the rights that
|
||||
you have. You must make sure that they, too, receive or can get the
|
||||
source code. And you must show them these terms so they know their
|
||||
rights.
|
||||
|
||||
We protect your rights with two steps: (1) copyright the software, and
|
||||
(2) offer you this license which gives you legal permission to copy,
|
||||
distribute and/or modify the software.
|
||||
|
||||
Also, for each author's protection and ours, we want to make certain
|
||||
that everyone understands that there is no warranty for this free
|
||||
software. If the software is modified by someone else and passed on, we
|
||||
want its recipients to know that what they have is not the original, so
|
||||
that any problems introduced by others will not reflect on the original
|
||||
authors' reputations.
|
||||
|
||||
Finally, any free program is threatened constantly by software
|
||||
patents. We wish to avoid the danger that redistributors of a free
|
||||
program will individually obtain patent licenses, in effect making the
|
||||
program proprietary. To prevent this, we have made it clear that any
|
||||
patent must be licensed for everyone's free use or not licensed at all.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
0. This License applies to any program or other work which contains
|
||||
a notice placed by the copyright holder saying it may be distributed
|
||||
under the terms of this General Public License. The "Program", below,
|
||||
refers to any such program or work, and a "work based on the Program"
|
||||
means either the Program or any derivative work under copyright law:
|
||||
that is to say, a work containing the Program or a portion of it,
|
||||
either verbatim or with modifications and/or translated into another
|
||||
language. (Hereinafter, translation is included without limitation in
|
||||
the term "modification".) Each licensee is addressed as "you".
|
||||
|
||||
Activities other than copying, distribution and modification are not
|
||||
covered by this License; they are outside its scope. The act of
|
||||
running the Program is not restricted, and the output from the Program
|
||||
is covered only if its contents constitute a work based on the
|
||||
Program (independent of having been made by running the Program).
|
||||
Whether that is true depends on what the Program does.
|
||||
|
||||
1. You may copy and distribute verbatim copies of the Program's
|
||||
source code as you receive it, in any medium, provided that you
|
||||
conspicuously and appropriately publish on each copy an appropriate
|
||||
copyright notice and disclaimer of warranty; keep intact all the
|
||||
notices that refer to this License and to the absence of any warranty;
|
||||
and give any other recipients of the Program a copy of this License
|
||||
along with the Program.
|
||||
|
||||
You may charge a fee for the physical act of transferring a copy, and
|
||||
you may at your option offer warranty protection in exchange for a fee.
|
||||
|
||||
2. You may modify your copy or copies of the Program or any portion
|
||||
of it, thus forming a work based on the Program, and copy and
|
||||
distribute such modifications or work under the terms of Section 1
|
||||
above, provided that you also meet all of these conditions:
|
||||
|
||||
a) You must cause the modified files to carry prominent notices
|
||||
stating that you changed the files and the date of any change.
|
||||
|
||||
b) You must cause any work that you distribute or publish, that in
|
||||
whole or in part contains or is derived from the Program or any
|
||||
part thereof, to be licensed as a whole at no charge to all third
|
||||
parties under the terms of this License.
|
||||
|
||||
c) If the modified program normally reads commands interactively
|
||||
when run, you must cause it, when started running for such
|
||||
interactive use in the most ordinary way, to print or display an
|
||||
announcement including an appropriate copyright notice and a
|
||||
notice that there is no warranty (or else, saying that you provide
|
||||
a warranty) and that users may redistribute the program under
|
||||
these conditions, and telling the user how to view a copy of this
|
||||
License. (Exception: if the Program itself is interactive but
|
||||
does not normally print such an announcement, your work based on
|
||||
the Program is not required to print an announcement.)
|
||||
|
||||
These requirements apply to the modified work as a whole. If
|
||||
identifiable sections of that work are not derived from the Program,
|
||||
and can be reasonably considered independent and separate works in
|
||||
themselves, then this License, and its terms, do not apply to those
|
||||
sections when you distribute them as separate works. But when you
|
||||
distribute the same sections as part of a whole which is a work based
|
||||
on the Program, the distribution of the whole must be on the terms of
|
||||
this License, whose permissions for other licensees extend to the
|
||||
entire whole, and thus to each and every part regardless of who wrote it.
|
||||
|
||||
Thus, it is not the intent of this section to claim rights or contest
|
||||
your rights to work written entirely by you; rather, the intent is to
|
||||
exercise the right to control the distribution of derivative or
|
||||
collective works based on the Program.
|
||||
|
||||
In addition, mere aggregation of another work not based on the Program
|
||||
with the Program (or with a work based on the Program) on a volume of
|
||||
a storage or distribution medium does not bring the other work under
|
||||
the scope of this License.
|
||||
|
||||
3. You may copy and distribute the Program (or a work based on it,
|
||||
under Section 2) in object code or executable form under the terms of
|
||||
Sections 1 and 2 above provided that you also do one of the following:
|
||||
|
||||
a) Accompany it with the complete corresponding machine-readable
|
||||
source code, which must be distributed under the terms of Sections
|
||||
1 and 2 above on a medium customarily used for software interchange; or,
|
||||
|
||||
b) Accompany it with a written offer, valid for at least three
|
||||
years, to give any third party, for a charge no more than your
|
||||
cost of physically performing source distribution, a complete
|
||||
machine-readable copy of the corresponding source code, to be
|
||||
distributed under the terms of Sections 1 and 2 above on a medium
|
||||
customarily used for software interchange; or,
|
||||
|
||||
c) Accompany it with the information you received as to the offer
|
||||
to distribute corresponding source code. (This alternative is
|
||||
allowed only for noncommercial distribution and only if you
|
||||
received the program in object code or executable form with such
|
||||
an offer, in accord with Subsection b above.)
|
||||
|
||||
The source code for a work means the preferred form of the work for
|
||||
making modifications to it. For an executable work, complete source
|
||||
code means all the source code for all modules it contains, plus any
|
||||
associated interface definition files, plus the scripts used to
|
||||
control compilation and installation of the executable. However, as a
|
||||
special exception, the source code distributed need not include
|
||||
anything that is normally distributed (in either source or binary
|
||||
form) with the major components (compiler, kernel, and so on) of the
|
||||
operating system on which the executable runs, unless that component
|
||||
itself accompanies the executable.
|
||||
|
||||
If distribution of executable or object code is made by offering
|
||||
access to copy from a designated place, then offering equivalent
|
||||
access to copy the source code from the same place counts as
|
||||
distribution of the source code, even though third parties are not
|
||||
compelled to copy the source along with the object code.
|
||||
|
||||
4. You may not copy, modify, sublicense, or distribute the Program
|
||||
except as expressly provided under this License. Any attempt
|
||||
otherwise to copy, modify, sublicense or distribute the Program is
|
||||
void, and will automatically terminate your rights under this License.
|
||||
However, parties who have received copies, or rights, from you under
|
||||
this License will not have their licenses terminated so long as such
|
||||
parties remain in full compliance.
|
||||
|
||||
5. You are not required to accept this License, since you have not
|
||||
signed it. However, nothing else grants you permission to modify or
|
||||
distribute the Program or its derivative works. These actions are
|
||||
prohibited by law if you do not accept this License. Therefore, by
|
||||
modifying or distributing the Program (or any work based on the
|
||||
Program), you indicate your acceptance of this License to do so, and
|
||||
all its terms and conditions for copying, distributing or modifying
|
||||
the Program or works based on it.
|
||||
|
||||
6. Each time you redistribute the Program (or any work based on the
|
||||
Program), the recipient automatically receives a license from the
|
||||
original licensor to copy, distribute or modify the Program subject to
|
||||
these terms and conditions. You may not impose any further
|
||||
restrictions on the recipients' exercise of the rights granted herein.
|
||||
You are not responsible for enforcing compliance by third parties to
|
||||
this License.
|
||||
|
||||
7. If, as a consequence of a court judgment or allegation of patent
|
||||
infringement or for any other reason (not limited to patent issues),
|
||||
conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot
|
||||
distribute so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you
|
||||
may not distribute the Program at all. For example, if a patent
|
||||
license would not permit royalty-free redistribution of the Program by
|
||||
all those who receive copies directly or indirectly through you, then
|
||||
the only way you could satisfy both it and this License would be to
|
||||
refrain entirely from distribution of the Program.
|
||||
|
||||
If any portion of this section is held invalid or unenforceable under
|
||||
any particular circumstance, the balance of the section is intended to
|
||||
apply and the section as a whole is intended to apply in other
|
||||
circumstances.
|
||||
|
||||
It is not the purpose of this section to induce you to infringe any
|
||||
patents or other property right claims or to contest validity of any
|
||||
such claims; this section has the sole purpose of protecting the
|
||||
integrity of the free software distribution system, which is
|
||||
implemented by public license practices. Many people have made
|
||||
generous contributions to the wide range of software distributed
|
||||
through that system in reliance on consistent application of that
|
||||
system; it is up to the author/donor to decide if he or she is willing
|
||||
to distribute software through any other system and a licensee cannot
|
||||
impose that choice.
|
||||
|
||||
This section is intended to make thoroughly clear what is believed to
|
||||
be a consequence of the rest of this License.
|
||||
|
||||
8. If the distribution and/or use of the Program is restricted in
|
||||
certain countries either by patents or by copyrighted interfaces, the
|
||||
original copyright holder who places the Program under this License
|
||||
may add an explicit geographical distribution limitation excluding
|
||||
those countries, so that distribution is permitted only in or among
|
||||
countries not thus excluded. In such case, this License incorporates
|
||||
the limitation as if written in the body of this License.
|
||||
|
||||
9. The Free Software Foundation may publish revised and/or new versions
|
||||
of the General Public License from time to time. Such new versions will
|
||||
be similar in spirit to the present version, but may differ in detail to
|
||||
address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the Program
|
||||
specifies a version number of this License which applies to it and "any
|
||||
later version", you have the option of following the terms and conditions
|
||||
either of that version or of any later version published by the Free
|
||||
Software Foundation. If the Program does not specify a version number of
|
||||
this License, you may choose any version ever published by the Free Software
|
||||
Foundation.
|
||||
|
||||
10. If you wish to incorporate parts of the Program into other free
|
||||
programs whose distribution conditions are different, write to the author
|
||||
to ask for permission. For software which is copyrighted by the Free
|
||||
Software Foundation, write to the Free Software Foundation; we sometimes
|
||||
make exceptions for this. Our decision will be guided by the two goals
|
||||
of preserving the free status of all derivatives of our free software and
|
||||
of promoting the sharing and reuse of software generally.
|
||||
|
||||
NO WARRANTY
|
||||
|
||||
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
|
||||
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
|
||||
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
|
||||
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
|
||||
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
|
||||
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
|
||||
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
|
||||
REPAIR OR CORRECTION.
|
||||
|
||||
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
|
||||
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
|
||||
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
|
||||
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
|
||||
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
|
||||
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGES.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest
|
||||
possible use to the public, the best way to achieve this is to make it
|
||||
free software which everyone can redistribute and change under these terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest
|
||||
to attach them to the start of each source file to most effectively
|
||||
convey the exclusion of warranty; and each file should have at least
|
||||
the "copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the program's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If the program is interactive, make it output a short notice like this
|
||||
when it starts in an interactive mode:
|
||||
|
||||
Gnomovision version 69, Copyright (C) year name of author
|
||||
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||
This is free software, and you are welcome to redistribute it
|
||||
under certain conditions; type `show c' for details.
|
||||
|
||||
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||
parts of the General Public License. Of course, the commands you use may
|
||||
be called something other than `show w' and `show c'; they could even be
|
||||
mouse-clicks or menu items--whatever suits your program.
|
||||
|
||||
You should also get your employer (if you work as a programmer) or your
|
||||
school, if any, to sign a "copyright disclaimer" for the program, if
|
||||
necessary. Here is a sample; alter the names:
|
||||
|
||||
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
|
||||
`Gnomovision' (which makes passes at compilers) written by James Hacker.
|
||||
|
||||
<signature of Ty Coon>, 1 April 1989
|
||||
Ty Coon, President of Vice
|
||||
|
||||
This General Public License does not permit incorporating your program into
|
||||
proprietary programs. If your program is a subroutine library, you may
|
||||
consider it more useful to permit linking proprietary applications with the
|
||||
library. If this is what you want to do, use the GNU Lesser General
|
||||
Public License instead of this License.
|
51
ircd-ratbox-3.0.10/Makefile.am
Normal file
51
ircd-ratbox-3.0.10/Makefile.am
Normal file
@ -0,0 +1,51 @@
|
||||
# $Id: Makefile.am 28673 2015-09-29 17:06:09Z androsyn $
|
||||
#
|
||||
# okay so i've flattened out the build stuff here.
|
||||
# this is really for the best since so many things depend
|
||||
# on each other now..
|
||||
|
||||
AUTOMAKE_OPTIONS = foreign subdir-objects
|
||||
|
||||
prefix = @prefix@
|
||||
libcoredir = @libdir@
|
||||
modulesdir = @moduledir@/autoload
|
||||
coredir = @moduledir@
|
||||
servicesdir = @moduledir@/autoload
|
||||
|
||||
|
||||
AM_CFLAGS = $(WARNFLAGS)
|
||||
|
||||
ircd_SOURCES = main.c
|
||||
bin_PROGRAMS = ircd
|
||||
|
||||
if MINGW
|
||||
EXTRA_FLAGS = -no-undefined -Wl,--enable-runtime-pseudo-reloc -export-symbols-regex '*'
|
||||
endif
|
||||
|
||||
if !STATIC_MODULES
|
||||
|
||||
SUBDIRS = @LTDL_SUBDIR@ libratbox src modules tools doc help bandb ssld resolver
|
||||
|
||||
ircd_LDADD = libratbox/src/libratbox.la src/libcore.la $(LIBLTDL)
|
||||
ircd_LDFLAGS = $(EXTRA_FLAGS) -dlopen self
|
||||
|
||||
else
|
||||
|
||||
SUBDIRS = @LTDL_SUBDIR@ libratbox modules src tools doc help bandb ssld resolver
|
||||
ircd_LDADD = libratbox/src/libratbox.la modules/libmodules.la src/libcore.la modules/static_modules.o $(LIBLTDL) $(DLOPEN)
|
||||
|
||||
|
||||
endif
|
||||
|
||||
build_contrib:
|
||||
cd contrib && $(MAKE)
|
||||
|
||||
install_contrib: build_contrib
|
||||
cd contrib && $(MAKE) install
|
||||
|
||||
install_data-local:
|
||||
-@if test ! -d @logdir@; then mkdir @logdir@;fi
|
||||
|
||||
contrib: build_contrib
|
||||
|
||||
|
966
ircd-ratbox-3.0.10/Makefile.in
Normal file
966
ircd-ratbox-3.0.10/Makefile.in
Normal file
@ -0,0 +1,966 @@
|
||||
# Makefile.in generated by automake 1.11.6 from Makefile.am.
|
||||
# @configure_input@
|
||||
|
||||
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
|
||||
# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
|
||||
# Foundation, Inc.
|
||||
# This Makefile.in is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
||||
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
# PARTICULAR PURPOSE.
|
||||
|
||||
@SET_MAKE@
|
||||
|
||||
# $Id: Makefile.in 29305 2016-01-13 18:50:25Z androsyn $
|
||||
#
|
||||
# okay so i've flattened out the build stuff here.
|
||||
# this is really for the best since so many things depend
|
||||
# on each other now..
|
||||
|
||||
VPATH = @srcdir@
|
||||
am__make_dryrun = \
|
||||
{ \
|
||||
am__dry=no; \
|
||||
case $$MAKEFLAGS in \
|
||||
*\\[\ \ ]*) \
|
||||
echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \
|
||||
| grep '^AM OK$$' >/dev/null || am__dry=yes;; \
|
||||
*) \
|
||||
for am__flg in $$MAKEFLAGS; do \
|
||||
case $$am__flg in \
|
||||
*=*|--*) ;; \
|
||||
*n*) am__dry=yes; break;; \
|
||||
esac; \
|
||||
done;; \
|
||||
esac; \
|
||||
test $$am__dry = yes; \
|
||||
}
|
||||
pkgdatadir = $(datadir)/@PACKAGE@
|
||||
pkgincludedir = $(includedir)/@PACKAGE@
|
||||
pkglibdir = $(libdir)/@PACKAGE@
|
||||
pkglibexecdir = $(libexecdir)/@PACKAGE@
|
||||
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
|
||||
install_sh_DATA = $(install_sh) -c -m 644
|
||||
install_sh_PROGRAM = $(install_sh) -c
|
||||
install_sh_SCRIPT = $(install_sh) -c
|
||||
INSTALL_HEADER = $(INSTALL_DATA)
|
||||
transform = $(program_transform_name)
|
||||
NORMAL_INSTALL = :
|
||||
PRE_INSTALL = :
|
||||
POST_INSTALL = :
|
||||
NORMAL_UNINSTALL = :
|
||||
PRE_UNINSTALL = :
|
||||
POST_UNINSTALL = :
|
||||
build_triplet = @build@
|
||||
host_triplet = @host@
|
||||
bin_PROGRAMS = ircd$(EXEEXT)
|
||||
subdir = .
|
||||
DIST_COMMON = $(am__configure_deps) $(srcdir)/Makefile.am \
|
||||
$(srcdir)/Makefile.in $(srcdir)/install-mod.sh.in \
|
||||
$(top_srcdir)/configure $(top_srcdir)/doc/Makefile.in \
|
||||
$(top_srcdir)/include/setup.h.in ChangeLog INSTALL compile \
|
||||
config.guess config.sub depcomp install-sh \
|
||||
libltdl/config/compile libltdl/config/config.guess \
|
||||
libltdl/config/config.sub libltdl/config/depcomp \
|
||||
libltdl/config/install-sh libltdl/config/ltmain.sh \
|
||||
libltdl/config/missing libltdl/config/ylwrap ltmain.sh missing \
|
||||
mkinstalldirs ylwrap
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
|
||||
$(top_srcdir)/configure.ac
|
||||
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
||||
$(ACLOCAL_M4)
|
||||
am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
|
||||
configure.lineno config.status.lineno
|
||||
mkinstalldirs = $(install_sh) -d
|
||||
CONFIG_HEADER = $(top_builddir)/include/setup.h
|
||||
CONFIG_CLEAN_FILES = doc/Makefile install-mod.sh
|
||||
CONFIG_CLEAN_VPATH_FILES =
|
||||
am__installdirs = "$(DESTDIR)$(bindir)"
|
||||
PROGRAMS = $(bin_PROGRAMS)
|
||||
am_ircd_OBJECTS = main.$(OBJEXT)
|
||||
ircd_OBJECTS = $(am_ircd_OBJECTS)
|
||||
am__DEPENDENCIES_1 =
|
||||
@STATIC_MODULES_FALSE@ircd_DEPENDENCIES = libratbox/src/libratbox.la \
|
||||
@STATIC_MODULES_FALSE@ src/libcore.la $(am__DEPENDENCIES_1)
|
||||
@STATIC_MODULES_TRUE@ircd_DEPENDENCIES = libratbox/src/libratbox.la \
|
||||
@STATIC_MODULES_TRUE@ modules/libmodules.la src/libcore.la \
|
||||
@STATIC_MODULES_TRUE@ modules/static_modules.o \
|
||||
@STATIC_MODULES_TRUE@ $(am__DEPENDENCIES_1)
|
||||
ircd_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
|
||||
--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(ircd_LDFLAGS) \
|
||||
$(LDFLAGS) -o $@
|
||||
DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include
|
||||
depcomp = $(SHELL) $(top_srcdir)/libltdl/config/depcomp
|
||||
am__depfiles_maybe = depfiles
|
||||
am__mv = mv -f
|
||||
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
|
||||
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
|
||||
LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
|
||||
--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
|
||||
$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
|
||||
CCLD = $(CC)
|
||||
LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
|
||||
--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
|
||||
$(LDFLAGS) -o $@
|
||||
SOURCES = $(ircd_SOURCES)
|
||||
DIST_SOURCES = $(ircd_SOURCES)
|
||||
RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
|
||||
html-recursive info-recursive install-data-recursive \
|
||||
install-dvi-recursive install-exec-recursive \
|
||||
install-html-recursive install-info-recursive \
|
||||
install-pdf-recursive install-ps-recursive install-recursive \
|
||||
installcheck-recursive installdirs-recursive pdf-recursive \
|
||||
ps-recursive uninstall-recursive
|
||||
am__can_run_installinfo = \
|
||||
case $$AM_UPDATE_INFO_DIR in \
|
||||
n|no|NO) false;; \
|
||||
*) (install-info --version) >/dev/null 2>&1;; \
|
||||
esac
|
||||
RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
|
||||
distclean-recursive maintainer-clean-recursive
|
||||
AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
|
||||
$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
|
||||
distdir dist dist-all distcheck
|
||||
ETAGS = etags
|
||||
CTAGS = ctags
|
||||
DIST_SUBDIRS = @LTDL_SUBDIR@ libratbox src modules tools doc help \
|
||||
bandb ssld resolver
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
distdir = $(PACKAGE)-$(VERSION)
|
||||
top_distdir = $(distdir)
|
||||
am__remove_distdir = \
|
||||
if test -d "$(distdir)"; then \
|
||||
find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
|
||||
&& rm -rf "$(distdir)" \
|
||||
|| { sleep 5 && rm -rf "$(distdir)"; }; \
|
||||
else :; fi
|
||||
am__relativize = \
|
||||
dir0=`pwd`; \
|
||||
sed_first='s,^\([^/]*\)/.*$$,\1,'; \
|
||||
sed_rest='s,^[^/]*/*,,'; \
|
||||
sed_last='s,^.*/\([^/]*\)$$,\1,'; \
|
||||
sed_butlast='s,/*[^/]*$$,,'; \
|
||||
while test -n "$$dir1"; do \
|
||||
first=`echo "$$dir1" | sed -e "$$sed_first"`; \
|
||||
if test "$$first" != "."; then \
|
||||
if test "$$first" = ".."; then \
|
||||
dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
|
||||
dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
|
||||
else \
|
||||
first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
|
||||
if test "$$first2" = "$$first"; then \
|
||||
dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
|
||||
else \
|
||||
dir2="../$$dir2"; \
|
||||
fi; \
|
||||
dir0="$$dir0"/"$$first"; \
|
||||
fi; \
|
||||
fi; \
|
||||
dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
|
||||
done; \
|
||||
reldir="$$dir2"
|
||||
DIST_ARCHIVES = $(distdir).tar.gz
|
||||
GZIP_ENV = --best
|
||||
distuninstallcheck_listfiles = find . -type f -print
|
||||
am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \
|
||||
| sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$'
|
||||
distcleancheck_listfiles = find . -type f -print
|
||||
ACLOCAL = @ACLOCAL@
|
||||
ALLOCA = @ALLOCA@
|
||||
AMTAR = @AMTAR@
|
||||
AR = @AR@
|
||||
ARGZ_H = @ARGZ_H@
|
||||
AUTOCONF = @AUTOCONF@
|
||||
AUTOHEADER = @AUTOHEADER@
|
||||
AUTOMAKE = @AUTOMAKE@
|
||||
AWK = @AWK@
|
||||
CC = @CC@
|
||||
CCDEPMODE = @CCDEPMODE@
|
||||
CFLAGS = @CFLAGS@
|
||||
CP = @CP@
|
||||
CPP = @CPP@
|
||||
CPPFLAGS = @CPPFLAGS@
|
||||
CYGPATH_W = @CYGPATH_W@
|
||||
DEFS = @DEFS@
|
||||
DEPDIR = @DEPDIR@
|
||||
DLLTOOL = @DLLTOOL@
|
||||
DSYMUTIL = @DSYMUTIL@
|
||||
DUMPBIN = @DUMPBIN@
|
||||
ECHO_C = @ECHO_C@
|
||||
ECHO_N = @ECHO_N@
|
||||
ECHO_T = @ECHO_T@
|
||||
EGREP = @EGREP@
|
||||
ETC_DIR = @ETC_DIR@
|
||||
EXEEXT = @EXEEXT@
|
||||
FGREP = @FGREP@
|
||||
GREP = @GREP@
|
||||
HELP_DIR = @HELP_DIR@
|
||||
INCLTDL = @INCLTDL@
|
||||
INSTALL = @INSTALL@
|
||||
INSTALL_DATA = @INSTALL_DATA@
|
||||
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
||||
IRCD_PREFIX = @IRCD_PREFIX@
|
||||
LD = @LD@
|
||||
LDFLAGS = @LDFLAGS@
|
||||
LEX = @LEX@
|
||||
LEXLIB = @LEXLIB@
|
||||
LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
|
||||
LIBADD_DL = @LIBADD_DL@
|
||||
LIBADD_DLD_LINK = @LIBADD_DLD_LINK@
|
||||
LIBADD_DLOPEN = @LIBADD_DLOPEN@
|
||||
LIBADD_SHL_LOAD = @LIBADD_SHL_LOAD@
|
||||
LIBEXEC_DIR = @LIBEXEC_DIR@
|
||||
LIBLTDL = @LIBLTDL@
|
||||
LIBOBJS = @LIBOBJS@
|
||||
LIBS = @LIBS@
|
||||
LIBTOOL = @LIBTOOL@
|
||||
LIPO = @LIPO@
|
||||
LN_S = @LN_S@
|
||||
LOG_DIR = @LOG_DIR@
|
||||
LTDLDEPS = @LTDLDEPS@
|
||||
LTDLINCL = @LTDLINCL@
|
||||
LTDLOPEN = @LTDLOPEN@
|
||||
LTDL_SUBDIR = @LTDL_SUBDIR@
|
||||
LTLIBOBJS = @LTLIBOBJS@
|
||||
LT_CONFIG_H = @LT_CONFIG_H@
|
||||
LT_DLLOADERS = @LT_DLLOADERS@
|
||||
LT_DLPREOPEN = @LT_DLPREOPEN@
|
||||
LT_OBJDIR = @LT_OBJDIR@
|
||||
MAINT = @MAINT@
|
||||
MAKEINFO = @MAKEINFO@
|
||||
MANIFEST_TOOL = @MANIFEST_TOOL@
|
||||
MKDIR_P = @MKDIR_P@
|
||||
MODULE_DIR = @MODULE_DIR@
|
||||
MV = @MV@
|
||||
NM = @NM@
|
||||
NMEDIT = @NMEDIT@
|
||||
OBJDUMP = @OBJDUMP@
|
||||
OBJEXT = @OBJEXT@
|
||||
OTOOL = @OTOOL@
|
||||
OTOOL64 = @OTOOL64@
|
||||
PACKAGE = @PACKAGE@
|
||||
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
|
||||
PACKAGE_NAME = @PACKAGE_NAME@
|
||||
PACKAGE_STRING = @PACKAGE_STRING@
|
||||
PACKAGE_TARNAME = @PACKAGE_TARNAME@
|
||||
PACKAGE_URL = @PACKAGE_URL@
|
||||
PACKAGE_VERSION = @PACKAGE_VERSION@
|
||||
PATH_SEPARATOR = @PATH_SEPARATOR@
|
||||
PICFLAGS = @PICFLAGS@
|
||||
RANLIB = @RANLIB@
|
||||
RB_RM = @RB_RM@
|
||||
SED = @SED@
|
||||
SEDOBJ = @SEDOBJ@
|
||||
SET_MAKE = @SET_MAKE@
|
||||
SHELL = @SHELL@
|
||||
SHLIBEXT = @SHLIBEXT@
|
||||
SQLITE3_CFLAGS = @SQLITE3_CFLAGS@
|
||||
SQLITE3_LIBS = @SQLITE3_LIBS@
|
||||
SQLITE_SUBDIR = @SQLITE_SUBDIR@
|
||||
SSL_INCLUDES = @SSL_INCLUDES@
|
||||
SSL_LIBS = @SSL_LIBS@
|
||||
STRIP = @STRIP@
|
||||
VERSION = @VERSION@
|
||||
WARNFLAGS = @WARNFLAGS@
|
||||
YACC = @YACC@
|
||||
YFLAGS = @YFLAGS@
|
||||
ZLIB_LD = @ZLIB_LD@
|
||||
abs_builddir = @abs_builddir@
|
||||
abs_srcdir = @abs_srcdir@
|
||||
abs_top_builddir = @abs_top_builddir@
|
||||
abs_top_srcdir = @abs_top_srcdir@
|
||||
ac_ct_AR = @ac_ct_AR@
|
||||
ac_ct_CC = @ac_ct_CC@
|
||||
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
|
||||
am__include = @am__include@
|
||||
am__leading_dot = @am__leading_dot@
|
||||
am__quote = @am__quote@
|
||||
am__tar = @am__tar@
|
||||
am__untar = @am__untar@
|
||||
bindir = @bindir@
|
||||
build = @build@
|
||||
build_alias = @build_alias@
|
||||
build_cpu = @build_cpu@
|
||||
build_os = @build_os@
|
||||
build_vendor = @build_vendor@
|
||||
builddir = @builddir@
|
||||
confdir = @confdir@
|
||||
datadir = @datadir@
|
||||
datarootdir = @datarootdir@
|
||||
docdir = @docdir@
|
||||
dvidir = @dvidir@
|
||||
exec_prefix = @exec_prefix@
|
||||
helpdir = @helpdir@
|
||||
host = @host@
|
||||
host_alias = @host_alias@
|
||||
host_cpu = @host_cpu@
|
||||
host_os = @host_os@
|
||||
host_vendor = @host_vendor@
|
||||
htmldir = @htmldir@
|
||||
includedir = @includedir@
|
||||
infodir = @infodir@
|
||||
install_sh = @install_sh@
|
||||
libdir = @libdir@
|
||||
libexecdir = @libexecdir@
|
||||
localedir = @localedir@
|
||||
localstatedir = @localstatedir@
|
||||
logdir = @logdir@
|
||||
ltdl_LIBOBJS = @ltdl_LIBOBJS@
|
||||
ltdl_LTLIBOBJS = @ltdl_LTLIBOBJS@
|
||||
mandir = @mandir@
|
||||
mkdir_p = @mkdir_p@
|
||||
moduledir = @moduledir@
|
||||
oldincludedir = @oldincludedir@
|
||||
pdfdir = @pdfdir@
|
||||
prefix = @prefix@
|
||||
program_transform_name = @program_transform_name@
|
||||
psdir = @psdir@
|
||||
runstatedir = @runstatedir@
|
||||
sbindir = @sbindir@
|
||||
sharedstatedir = @sharedstatedir@
|
||||
srcdir = @srcdir@
|
||||
subdirs = @subdirs@
|
||||
sys_symbol_underscore = @sys_symbol_underscore@
|
||||
sysconfdir = @sysconfdir@
|
||||
target_alias = @target_alias@
|
||||
top_build_prefix = @top_build_prefix@
|
||||
top_builddir = @top_builddir@
|
||||
top_srcdir = @top_srcdir@
|
||||
AUTOMAKE_OPTIONS = foreign subdir-objects
|
||||
libcoredir = @libdir@
|
||||
modulesdir = @moduledir@/autoload
|
||||
coredir = @moduledir@
|
||||
servicesdir = @moduledir@/autoload
|
||||
AM_CFLAGS = $(WARNFLAGS)
|
||||
ircd_SOURCES = main.c
|
||||
@MINGW_TRUE@EXTRA_FLAGS = -no-undefined -Wl,--enable-runtime-pseudo-reloc -export-symbols-regex '*'
|
||||
@STATIC_MODULES_FALSE@SUBDIRS = @LTDL_SUBDIR@ libratbox src modules tools doc help bandb ssld resolver
|
||||
@STATIC_MODULES_TRUE@SUBDIRS = @LTDL_SUBDIR@ libratbox modules src tools doc help bandb ssld resolver
|
||||
@STATIC_MODULES_FALSE@ircd_LDADD = libratbox/src/libratbox.la src/libcore.la $(LIBLTDL)
|
||||
@STATIC_MODULES_TRUE@ircd_LDADD = libratbox/src/libratbox.la modules/libmodules.la src/libcore.la modules/static_modules.o $(LIBLTDL) $(DLOPEN)
|
||||
@STATIC_MODULES_FALSE@ircd_LDFLAGS = $(EXTRA_FLAGS) -dlopen self
|
||||
all: all-recursive
|
||||
|
||||
.SUFFIXES:
|
||||
.SUFFIXES: .c .lo .o .obj
|
||||
am--refresh: Makefile
|
||||
@:
|
||||
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
|
||||
@for dep in $?; do \
|
||||
case '$(am__configure_deps)' in \
|
||||
*$$dep*) \
|
||||
echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \
|
||||
$(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \
|
||||
&& exit 0; \
|
||||
exit 1;; \
|
||||
esac; \
|
||||
done; \
|
||||
echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \
|
||||
$(am__cd) $(top_srcdir) && \
|
||||
$(AUTOMAKE) --foreign Makefile
|
||||
.PRECIOUS: Makefile
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
@case '$?' in \
|
||||
*config.status*) \
|
||||
echo ' $(SHELL) ./config.status'; \
|
||||
$(SHELL) ./config.status;; \
|
||||
*) \
|
||||
echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
|
||||
cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
|
||||
esac;
|
||||
|
||||
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
|
||||
$(SHELL) ./config.status --recheck
|
||||
|
||||
$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
|
||||
$(am__cd) $(srcdir) && $(AUTOCONF)
|
||||
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
|
||||
$(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
|
||||
$(am__aclocal_m4_deps):
|
||||
|
||||
include/setup.h: include/stamp-h1
|
||||
@if test ! -f $@; then rm -f include/stamp-h1; else :; fi
|
||||
@if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) include/stamp-h1; else :; fi
|
||||
|
||||
include/stamp-h1: $(top_srcdir)/include/setup.h.in $(top_builddir)/config.status
|
||||
@rm -f include/stamp-h1
|
||||
cd $(top_builddir) && $(SHELL) ./config.status include/setup.h
|
||||
$(top_srcdir)/include/setup.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
|
||||
($(am__cd) $(top_srcdir) && $(AUTOHEADER))
|
||||
rm -f include/stamp-h1
|
||||
touch $@
|
||||
|
||||
distclean-hdr:
|
||||
-rm -f include/setup.h include/stamp-h1
|
||||
doc/Makefile: $(top_builddir)/config.status $(top_srcdir)/doc/Makefile.in
|
||||
cd $(top_builddir) && $(SHELL) ./config.status $@
|
||||
install-mod.sh: $(top_builddir)/config.status $(srcdir)/install-mod.sh.in
|
||||
cd $(top_builddir) && $(SHELL) ./config.status $@
|
||||
install-binPROGRAMS: $(bin_PROGRAMS)
|
||||
@$(NORMAL_INSTALL)
|
||||
@list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
|
||||
if test -n "$$list"; then \
|
||||
echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \
|
||||
$(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \
|
||||
fi; \
|
||||
for p in $$list; do echo "$$p $$p"; done | \
|
||||
sed 's/$(EXEEXT)$$//' | \
|
||||
while read p p1; do if test -f $$p || test -f $$p1; \
|
||||
then echo "$$p"; echo "$$p"; else :; fi; \
|
||||
done | \
|
||||
sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \
|
||||
-e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
|
||||
sed 'N;N;N;s,\n, ,g' | \
|
||||
$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
|
||||
{ d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
|
||||
if ($$2 == $$4) files[d] = files[d] " " $$1; \
|
||||
else { print "f", $$3 "/" $$4, $$1; } } \
|
||||
END { for (d in files) print "f", d, files[d] }' | \
|
||||
while read type dir files; do \
|
||||
if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
|
||||
test -z "$$files" || { \
|
||||
echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \
|
||||
$(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \
|
||||
} \
|
||||
; done
|
||||
|
||||
uninstall-binPROGRAMS:
|
||||
@$(NORMAL_UNINSTALL)
|
||||
@list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
|
||||
files=`for p in $$list; do echo "$$p"; done | \
|
||||
sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
|
||||
-e 's/$$/$(EXEEXT)/' `; \
|
||||
test -n "$$list" || exit 0; \
|
||||
echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \
|
||||
cd "$(DESTDIR)$(bindir)" && rm -f $$files
|
||||
|
||||
clean-binPROGRAMS:
|
||||
@list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \
|
||||
echo " rm -f" $$list; \
|
||||
rm -f $$list || exit $$?; \
|
||||
test -n "$(EXEEXT)" || exit 0; \
|
||||
list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
|
||||
echo " rm -f" $$list; \
|
||||
rm -f $$list
|
||||
ircd$(EXEEXT): $(ircd_OBJECTS) $(ircd_DEPENDENCIES) $(EXTRA_ircd_DEPENDENCIES)
|
||||
@rm -f ircd$(EXEEXT)
|
||||
$(ircd_LINK) $(ircd_OBJECTS) $(ircd_LDADD) $(LIBS)
|
||||
|
||||
mostlyclean-compile:
|
||||
-rm -f *.$(OBJEXT)
|
||||
|
||||
distclean-compile:
|
||||
-rm -f *.tab.c
|
||||
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@
|
||||
|
||||
.c.o:
|
||||
@am__fastdepCC_TRUE@ depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
|
||||
@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
|
||||
@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(COMPILE) -c -o $@ $<
|
||||
|
||||
.c.obj:
|
||||
@am__fastdepCC_TRUE@ depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
|
||||
@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\
|
||||
@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
|
||||
|
||||
.c.lo:
|
||||
@am__fastdepCC_TRUE@ depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\
|
||||
@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
|
||||
@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
|
||||
|
||||
mostlyclean-libtool:
|
||||
-rm -f *.lo
|
||||
|
||||
clean-libtool:
|
||||
-rm -rf .libs _libs
|
||||
|
||||
distclean-libtool:
|
||||
-rm -f libtool config.lt
|
||||
|
||||
# This directory's subdirectories are mostly independent; you can cd
|
||||
# into them and run `make' without going through this Makefile.
|
||||
# To change the values of `make' variables: instead of editing Makefiles,
|
||||
# (1) if the variable is set in `config.status', edit `config.status'
|
||||
# (which will cause the Makefiles to be regenerated when you run `make');
|
||||
# (2) otherwise, pass the desired values on the `make' command line.
|
||||
$(RECURSIVE_TARGETS):
|
||||
@fail= failcom='exit 1'; \
|
||||
for f in x $$MAKEFLAGS; do \
|
||||
case $$f in \
|
||||
*=* | --[!k]*);; \
|
||||
*k*) failcom='fail=yes';; \
|
||||
esac; \
|
||||
done; \
|
||||
dot_seen=no; \
|
||||
target=`echo $@ | sed s/-recursive//`; \
|
||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||
echo "Making $$target in $$subdir"; \
|
||||
if test "$$subdir" = "."; then \
|
||||
dot_seen=yes; \
|
||||
local_target="$$target-am"; \
|
||||
else \
|
||||
local_target="$$target"; \
|
||||
fi; \
|
||||
($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|
||||
|| eval $$failcom; \
|
||||
done; \
|
||||
if test "$$dot_seen" = "no"; then \
|
||||
$(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
|
||||
fi; test -z "$$fail"
|
||||
|
||||
$(RECURSIVE_CLEAN_TARGETS):
|
||||
@fail= failcom='exit 1'; \
|
||||
for f in x $$MAKEFLAGS; do \
|
||||
case $$f in \
|
||||
*=* | --[!k]*);; \
|
||||
*k*) failcom='fail=yes';; \
|
||||
esac; \
|
||||
done; \
|
||||
dot_seen=no; \
|
||||
case "$@" in \
|
||||
distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
|
||||
*) list='$(SUBDIRS)' ;; \
|
||||
esac; \
|
||||
rev=''; for subdir in $$list; do \
|
||||
if test "$$subdir" = "."; then :; else \
|
||||
rev="$$subdir $$rev"; \
|
||||
fi; \
|
||||
done; \
|
||||
rev="$$rev ."; \
|
||||
target=`echo $@ | sed s/-recursive//`; \
|
||||
for subdir in $$rev; do \
|
||||
echo "Making $$target in $$subdir"; \
|
||||
if test "$$subdir" = "."; then \
|
||||
local_target="$$target-am"; \
|
||||
else \
|
||||
local_target="$$target"; \
|
||||
fi; \
|
||||
($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|
||||
|| eval $$failcom; \
|
||||
done && test -z "$$fail"
|
||||
tags-recursive:
|
||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||
test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
|
||||
done
|
||||
ctags-recursive:
|
||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||
test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
|
||||
done
|
||||
|
||||
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
|
||||
END { if (nonempty) { for (i in files) print i; }; }'`; \
|
||||
mkid -fID $$unique
|
||||
tags: TAGS
|
||||
|
||||
TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
set x; \
|
||||
here=`pwd`; \
|
||||
if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
|
||||
include_option=--etags-include; \
|
||||
empty_fix=.; \
|
||||
else \
|
||||
include_option=--include; \
|
||||
empty_fix=; \
|
||||
fi; \
|
||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||
if test "$$subdir" = .; then :; else \
|
||||
test ! -f $$subdir/TAGS || \
|
||||
set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
|
||||
fi; \
|
||||
done; \
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
|
||||
END { if (nonempty) { for (i in files) print i; }; }'`; \
|
||||
shift; \
|
||||
if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
|
||||
test -n "$$unique" || unique=$$empty_fix; \
|
||||
if test $$# -gt 0; then \
|
||||
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
||||
"$$@" $$unique; \
|
||||
else \
|
||||
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
||||
$$unique; \
|
||||
fi; \
|
||||
fi
|
||||
ctags: CTAGS
|
||||
CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
|
||||
END { if (nonempty) { for (i in files) print i; }; }'`; \
|
||||
test -z "$(CTAGS_ARGS)$$unique" \
|
||||
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
|
||||
$$unique
|
||||
|
||||
GTAGS:
|
||||
here=`$(am__cd) $(top_builddir) && pwd` \
|
||||
&& $(am__cd) $(top_srcdir) \
|
||||
&& gtags -i $(GTAGS_ARGS) "$$here"
|
||||
|
||||
distclean-tags:
|
||||
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
|
||||
|
||||
distdir: $(DISTFILES)
|
||||
$(am__remove_distdir)
|
||||
test -d "$(distdir)" || mkdir "$(distdir)"
|
||||
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
|
||||
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
|
||||
list='$(DISTFILES)'; \
|
||||
dist_files=`for file in $$list; do echo $$file; done | \
|
||||
sed -e "s|^$$srcdirstrip/||;t" \
|
||||
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
|
||||
case $$dist_files in \
|
||||
*/*) $(MKDIR_P) `echo "$$dist_files" | \
|
||||
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
|
||||
sort -u` ;; \
|
||||
esac; \
|
||||
for file in $$dist_files; do \
|
||||
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
|
||||
if test -d $$d/$$file; then \
|
||||
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
|
||||
if test -d "$(distdir)/$$file"; then \
|
||||
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
|
||||
fi; \
|
||||
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
|
||||
cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
|
||||
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
|
||||
fi; \
|
||||
cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
|
||||
else \
|
||||
test -f "$(distdir)/$$file" \
|
||||
|| cp -p $$d/$$file "$(distdir)/$$file" \
|
||||
|| exit 1; \
|
||||
fi; \
|
||||
done
|
||||
@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
|
||||
if test "$$subdir" = .; then :; else \
|
||||
$(am__make_dryrun) \
|
||||
|| test -d "$(distdir)/$$subdir" \
|
||||
|| $(MKDIR_P) "$(distdir)/$$subdir" \
|
||||
|| exit 1; \
|
||||
dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
|
||||
$(am__relativize); \
|
||||
new_distdir=$$reldir; \
|
||||
dir1=$$subdir; dir2="$(top_distdir)"; \
|
||||
$(am__relativize); \
|
||||
new_top_distdir=$$reldir; \
|
||||
echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
|
||||
echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
|
||||
($(am__cd) $$subdir && \
|
||||
$(MAKE) $(AM_MAKEFLAGS) \
|
||||
top_distdir="$$new_top_distdir" \
|
||||
distdir="$$new_distdir" \
|
||||
am__remove_distdir=: \
|
||||
am__skip_length_check=: \
|
||||
am__skip_mode_fix=: \
|
||||
distdir) \
|
||||
|| exit 1; \
|
||||
fi; \
|
||||
done
|
||||
-test -n "$(am__skip_mode_fix)" \
|
||||
|| find "$(distdir)" -type d ! -perm -755 \
|
||||
-exec chmod u+rwx,go+rx {} \; -o \
|
||||
! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
|
||||
! -type d ! -perm -400 -exec chmod a+r {} \; -o \
|
||||
! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
|
||||
|| chmod -R a+r "$(distdir)"
|
||||
dist-gzip: distdir
|
||||
tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
|
||||
$(am__remove_distdir)
|
||||
|
||||
dist-bzip2: distdir
|
||||
tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2
|
||||
$(am__remove_distdir)
|
||||
|
||||
dist-lzip: distdir
|
||||
tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz
|
||||
$(am__remove_distdir)
|
||||
|
||||
dist-lzma: distdir
|
||||
tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma
|
||||
$(am__remove_distdir)
|
||||
|
||||
dist-xz: distdir
|
||||
tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz
|
||||
$(am__remove_distdir)
|
||||
|
||||
dist-tarZ: distdir
|
||||
tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
|
||||
$(am__remove_distdir)
|
||||
|
||||
dist-shar: distdir
|
||||
shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
|
||||
$(am__remove_distdir)
|
||||
|
||||
dist-zip: distdir
|
||||
-rm -f $(distdir).zip
|
||||
zip -rq $(distdir).zip $(distdir)
|
||||
$(am__remove_distdir)
|
||||
|
||||
dist dist-all: distdir
|
||||
tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
|
||||
$(am__remove_distdir)
|
||||
|
||||
# This target untars the dist file and tries a VPATH configuration. Then
|
||||
# it guarantees that the distribution is self-contained by making another
|
||||
# tarfile.
|
||||
distcheck: dist
|
||||
case '$(DIST_ARCHIVES)' in \
|
||||
*.tar.gz*) \
|
||||
GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\
|
||||
*.tar.bz2*) \
|
||||
bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
|
||||
*.tar.lzma*) \
|
||||
lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\
|
||||
*.tar.lz*) \
|
||||
lzip -dc $(distdir).tar.lz | $(am__untar) ;;\
|
||||
*.tar.xz*) \
|
||||
xz -dc $(distdir).tar.xz | $(am__untar) ;;\
|
||||
*.tar.Z*) \
|
||||
uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
|
||||
*.shar.gz*) \
|
||||
GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\
|
||||
*.zip*) \
|
||||
unzip $(distdir).zip ;;\
|
||||
esac
|
||||
chmod -R a-w $(distdir); chmod u+w $(distdir)
|
||||
mkdir $(distdir)/_build
|
||||
mkdir $(distdir)/_inst
|
||||
chmod a-w $(distdir)
|
||||
test -d $(distdir)/_build || exit 0; \
|
||||
dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
|
||||
&& dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
|
||||
&& am__cwd=`pwd` \
|
||||
&& $(am__cd) $(distdir)/_build \
|
||||
&& ../configure --srcdir=.. --prefix="$$dc_install_base" \
|
||||
$(AM_DISTCHECK_CONFIGURE_FLAGS) \
|
||||
$(DISTCHECK_CONFIGURE_FLAGS) \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) dvi \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) check \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) install \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) installcheck \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) uninstall \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
|
||||
distuninstallcheck \
|
||||
&& chmod -R a-w "$$dc_install_base" \
|
||||
&& ({ \
|
||||
(cd ../.. && umask 077 && mkdir "$$dc_destdir") \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
|
||||
distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
|
||||
} || { rm -rf "$$dc_destdir"; exit 1; }) \
|
||||
&& rm -rf "$$dc_destdir" \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) dist \
|
||||
&& rm -rf $(DIST_ARCHIVES) \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) distcleancheck \
|
||||
&& cd "$$am__cwd" \
|
||||
|| exit 1
|
||||
$(am__remove_distdir)
|
||||
@(echo "$(distdir) archives ready for distribution: "; \
|
||||
list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
|
||||
sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
|
||||
distuninstallcheck:
|
||||
@test -n '$(distuninstallcheck_dir)' || { \
|
||||
echo 'ERROR: trying to run $@ with an empty' \
|
||||
'$$(distuninstallcheck_dir)' >&2; \
|
||||
exit 1; \
|
||||
}; \
|
||||
$(am__cd) '$(distuninstallcheck_dir)' || { \
|
||||
echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \
|
||||
exit 1; \
|
||||
}; \
|
||||
test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \
|
||||
|| { echo "ERROR: files left after uninstall:" ; \
|
||||
if test -n "$(DESTDIR)"; then \
|
||||
echo " (check DESTDIR support)"; \
|
||||
fi ; \
|
||||
$(distuninstallcheck_listfiles) ; \
|
||||
exit 1; } >&2
|
||||
distcleancheck: distclean
|
||||
@if test '$(srcdir)' = . ; then \
|
||||
echo "ERROR: distcleancheck can only run from a VPATH build" ; \
|
||||
exit 1 ; \
|
||||
fi
|
||||
@test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
|
||||
|| { echo "ERROR: files left in build directory after distclean:" ; \
|
||||
$(distcleancheck_listfiles) ; \
|
||||
exit 1; } >&2
|
||||
check-am: all-am
|
||||
check: check-recursive
|
||||
all-am: Makefile $(PROGRAMS)
|
||||
installdirs: installdirs-recursive
|
||||
installdirs-am:
|
||||
for dir in "$(DESTDIR)$(bindir)"; do \
|
||||
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
|
||||
done
|
||||
install: install-recursive
|
||||
install-exec: install-exec-recursive
|
||||
install-data: install-data-recursive
|
||||
uninstall: uninstall-recursive
|
||||
|
||||
install-am: all-am
|
||||
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
|
||||
|
||||
installcheck: installcheck-recursive
|
||||
install-strip:
|
||||
if test -z '$(STRIP)'; then \
|
||||
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
||||
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
|
||||
install; \
|
||||
else \
|
||||
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
||||
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
|
||||
"INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
|
||||
fi
|
||||
mostlyclean-generic:
|
||||
|
||||
clean-generic:
|
||||
|
||||
distclean-generic:
|
||||
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
||||
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
|
||||
|
||||
maintainer-clean-generic:
|
||||
@echo "This command is intended for maintainers to use"
|
||||
@echo "it deletes files that may require special tools to rebuild."
|
||||
clean: clean-recursive
|
||||
|
||||
clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am
|
||||
|
||||
distclean: distclean-recursive
|
||||
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
|
||||
-rm -rf ./$(DEPDIR)
|
||||
-rm -f Makefile
|
||||
distclean-am: clean-am distclean-compile distclean-generic \
|
||||
distclean-hdr distclean-libtool distclean-tags
|
||||
|
||||
dvi: dvi-recursive
|
||||
|
||||
dvi-am:
|
||||
|
||||
html: html-recursive
|
||||
|
||||
html-am:
|
||||
|
||||
info: info-recursive
|
||||
|
||||
info-am:
|
||||
|
||||
install-data-am:
|
||||
|
||||
install-dvi: install-dvi-recursive
|
||||
|
||||
install-dvi-am:
|
||||
|
||||
install-exec-am: install-binPROGRAMS
|
||||
|
||||
install-html: install-html-recursive
|
||||
|
||||
install-html-am:
|
||||
|
||||
install-info: install-info-recursive
|
||||
|
||||
install-info-am:
|
||||
|
||||
install-man:
|
||||
|
||||
install-pdf: install-pdf-recursive
|
||||
|
||||
install-pdf-am:
|
||||
|
||||
install-ps: install-ps-recursive
|
||||
|
||||
install-ps-am:
|
||||
|
||||
installcheck-am:
|
||||
|
||||
maintainer-clean: maintainer-clean-recursive
|
||||
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
|
||||
-rm -rf $(top_srcdir)/autom4te.cache
|
||||
-rm -rf ./$(DEPDIR)
|
||||
-rm -f Makefile
|
||||
maintainer-clean-am: distclean-am maintainer-clean-generic
|
||||
|
||||
mostlyclean: mostlyclean-recursive
|
||||
|
||||
mostlyclean-am: mostlyclean-compile mostlyclean-generic \
|
||||
mostlyclean-libtool
|
||||
|
||||
pdf: pdf-recursive
|
||||
|
||||
pdf-am:
|
||||
|
||||
ps: ps-recursive
|
||||
|
||||
ps-am:
|
||||
|
||||
uninstall-am: uninstall-binPROGRAMS
|
||||
|
||||
.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
|
||||
install-am install-strip tags-recursive
|
||||
|
||||
.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
|
||||
all all-am am--refresh check check-am clean clean-binPROGRAMS \
|
||||
clean-generic clean-libtool ctags ctags-recursive dist \
|
||||
dist-all dist-bzip2 dist-gzip dist-lzip dist-lzma dist-shar \
|
||||
dist-tarZ dist-xz dist-zip distcheck distclean \
|
||||
distclean-compile distclean-generic distclean-hdr \
|
||||
distclean-libtool distclean-tags distcleancheck distdir \
|
||||
distuninstallcheck dvi dvi-am html html-am info info-am \
|
||||
install install-am install-binPROGRAMS install-data \
|
||||
install-data-am install-dvi install-dvi-am install-exec \
|
||||
install-exec-am install-html install-html-am install-info \
|
||||
install-info-am install-man install-pdf install-pdf-am \
|
||||
install-ps install-ps-am install-strip installcheck \
|
||||
installcheck-am installdirs installdirs-am maintainer-clean \
|
||||
maintainer-clean-generic mostlyclean mostlyclean-compile \
|
||||
mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
|
||||
tags tags-recursive uninstall uninstall-am \
|
||||
uninstall-binPROGRAMS
|
||||
|
||||
|
||||
build_contrib:
|
||||
cd contrib && $(MAKE)
|
||||
|
||||
install_contrib: build_contrib
|
||||
cd contrib && $(MAKE) install
|
||||
|
||||
install_data-local:
|
||||
-@if test ! -d @logdir@; then mkdir @logdir@;fi
|
||||
|
||||
contrib: build_contrib
|
||||
|
||||
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
||||
# Otherwise a system limit (for SysV at least) may be exceeded.
|
||||
.NOEXPORT:
|
126
ircd-ratbox-3.0.10/README.FIRST
Normal file
126
ircd-ratbox-3.0.10/README.FIRST
Normal file
@ -0,0 +1,126 @@
|
||||
If you don't read this first, we won't help you.
|
||||
:-)
|
||||
|
||||
******************************* IMPORTANT *************************************
|
||||
|
||||
*********** Note for those who dont bother reading docs *****************
|
||||
* - Reading INSTALL is now a must, as the old DPATH is now specified *
|
||||
* when configure is run. *
|
||||
* You now need to ./configure --prefix="/path/to/install/it" *
|
||||
* - The old config format WILL NOT WORK. Please see doc/example.conf ! *
|
||||
* - The old kline format WILL NOT WORK. Please use bantool which *
|
||||
* will be installed with your ircd! *
|
||||
*************************************************************************
|
||||
|
||||
ALSO, IF YOU ARE UPGRADING YOUR CURRENT SOURCE TREE, AND YOU TRY TO BUILD
|
||||
IN IT WITHOUT PERFORMING AT LEAST 'make clean', THINGS _WILL_ BREAK. IT IS
|
||||
RECOMMENDED THAT YOU RUN 'make distclean' AND THEN RERUN './configure'!
|
||||
|
||||
******************************* REQUIREMENTS **********************************
|
||||
|
||||
New Features - A short introduction:
|
||||
- ircd-ratbox-3.x now has several major changes over previous version that you
|
||||
will notice right away.
|
||||
o Storage of bans in a database, versus the old flat-files.
|
||||
o SSL Client support.
|
||||
o SSL Only Channel support.
|
||||
o Adminwall (think Operwall, but for admins only).
|
||||
o Force Nick Change (FNC).
|
||||
o Support for global CIDR limits.
|
||||
o Connection Throttling.
|
||||
|
||||
- Please see doc/whats-new-3.0.txt for more detailed changes.
|
||||
|
||||
|
||||
Necessary Requirements:
|
||||
|
||||
- A supported platform (look below)
|
||||
|
||||
- A working dynamic load library, unless
|
||||
compiling as static, without module
|
||||
support.
|
||||
|
||||
- A working lex. Solaris /usr/ccs/bin/lex
|
||||
appears to be broken, on this system flex
|
||||
should be used.
|
||||
|
||||
|
||||
Feature Specific Requirements:
|
||||
|
||||
- For SSL Clients, SSL Challenge controlled OPER feature, and encrypted server links,
|
||||
a working OpenSSL library
|
||||
|
||||
- For encrypted oper and (optional) server passwords, a working DES, MD5, or SHA library.
|
||||
|
||||
*******************************************************************************
|
||||
|
||||
- To report bugs in ircd-ratbox, send the bug report to ircd-ratbox@lists.ratbox.org
|
||||
|
||||
- Known bugs are listed in the BUGS file
|
||||
|
||||
- See the INSTALL document for info on configuring and compiling
|
||||
ircd-ratbox.
|
||||
|
||||
- Please read doc/index.txt to get an overview of the current documentation.
|
||||
|
||||
- Old Hybrid 5/6 configuration files are no longer supported. Config files from
|
||||
previous ircd-ratbox versions will need some changes. The ircd -conftest option
|
||||
is your friend here. Old kline/xline/dline.conf files will have to be converted to
|
||||
the new database format. A config import utility is provided and installed
|
||||
as bin/bantool.
|
||||
|
||||
- If you are wondering why config.h is practically empty, its because many
|
||||
things that were once in config.h are now specified in the 'general'
|
||||
block of ircd.conf. Look at example.conf for more information about
|
||||
these options.
|
||||
|
||||
- The files, /etc/services, /etc/protocols, and /etc/resolv.conf, MUST be
|
||||
readable by the user running the server in order for ircd to start.
|
||||
Errors from adns causing the ircd to refuse to start up are often related
|
||||
to permission problems on these files.
|
||||
|
||||
- There is a mailing list for ircd-ratbox. To subscribe to this list
|
||||
visit http://lists.ratbox.org/cgi-bin/mailman/listinfo/ircd-ratbox
|
||||
Note that this list also gets the commit emails from the CVS server.
|
||||
|
||||
- FREEBSD USERS: if you are compiling with ipv6 you may experience
|
||||
problems with ipv4 due to the way the socket code is written. To
|
||||
fix this you must: "sysctl net.inet6.ip6.v6only=0"
|
||||
|
||||
- SOLARIS USERS: this code appears to tickle a bug in older gcc and
|
||||
egcs ONLY on 64-bit Solaris7. gcc-2.95 and SunPro C on 64bit should
|
||||
work fine, and any gcc or SunPro compiled on 32bit.
|
||||
|
||||
- DARWIN AND MACOS X USERS: You must be using at least the December 2001
|
||||
Development Tools from Apple to build ircd-ratbox with shared modules.
|
||||
Before then you MUST disable shared modules, as we do not have the proper
|
||||
flags for cc(1) prior to that point to produce shared modules.
|
||||
|
||||
- SUPPORTED PLATFORMS: this code should compile without any warnings on:
|
||||
FreeBSD 6.x/7.x/8.x/9.x
|
||||
Gentoo & Gentoo Hardened (stable archs)
|
||||
CentOS / Redhat Enterprise 5/6
|
||||
openSUSE (stable/tumbleweed/evergreen)
|
||||
Debian Etch,
|
||||
OpenSolaris 2008.x?
|
||||
Solaris 10 sparc.
|
||||
|
||||
Please let us know if you find otherwise.
|
||||
It probably does not compile on AIX, IRIX or libc5 Linux.
|
||||
|
||||
- TESTED PLATFORMS: The code has been tested on the following platforms, and
|
||||
is known to run properly.
|
||||
FreeBSD 6.x/7.x
|
||||
Linux glibc-2.6, glibc-2.7
|
||||
Solaris 2.6/7/8
|
||||
OpenBSD 2.8
|
||||
NetBSD 1.4
|
||||
Cygwin 1.3+ (static modules, no servlink)
|
||||
OpenVMS/Alpha 7.2 (static modules, no servlink)
|
||||
|
||||
- Please read doc/whats-new-3.0.txt for information about what is in this release
|
||||
|
||||
- Other files recommended for reading: BUGS, INSTALL
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
$Id: README.FIRST 27449 2013-03-16 08:57:07Z dubkat $
|
264
ircd-ratbox-3.0.10/RELNOTES
Normal file
264
ircd-ratbox-3.0.10/RELNOTES
Normal file
@ -0,0 +1,264 @@
|
||||
|
||||
Please note as of this release, the 3.0 branch is now marked as 'stable'.
|
||||
The 2.2 branch will no longer be maintained.
|
||||
|
||||
This is the current release version of the 'stable' tree of ircd-ratbox.
|
||||
|
||||
If you are upgrading from 2.2, you must read doc/whats-new-3.0.txt
|
||||
If you are upgrading from 2.1, you must read doc/whats-new-2.2.txt
|
||||
If you are upgrading from 2.0, you must also read doc/whats-new-2.1.txt
|
||||
If you are upgrading from 1.x, you must also read doc/whats-new-2.0.txt
|
||||
|
||||
-- ircd-ratbox-3.0.10
|
||||
- Fix various minor memory leaks on REHASH
|
||||
- Update genssl.sh script to use 2048 bit RSA keys by default
|
||||
- Disable SSLv3
|
||||
- Enable support for ECDHE TLS ciphers - prime256v1 is the hard coded
|
||||
curve selection
|
||||
- Fix rehashing ssl related configuration options
|
||||
- Make MONITOR actually work again
|
||||
|
||||
|
||||
-- ircd-ratbox-3.0.9
|
||||
- Fix minor memory leak in MONITOR (fixes CVE 2015-5290)
|
||||
- Fix MODRESTART crash on newer versions of glibc
|
||||
- Ignore non-sense CIDR masks
|
||||
- Fix 64bit time_t on 32 bit operating systems(OpenBSD in particular)
|
||||
- Disable kevent timer support, this seems to be the cause of a few crashes
|
||||
|
||||
-- ircd-ratbox-3.0.8
|
||||
- fix embarrassing CAPAB crash - All admins should upgrade immediately
|
||||
- various doc cleanups
|
||||
|
||||
-- ircd-ratbox-3.0.7
|
||||
- remove sigio code. its buggyness makes it more trouble than its worth
|
||||
- stop logging to files when they are commented out in the ircd.conf
|
||||
- add help for GUNGLINE
|
||||
- make cross compiles work again
|
||||
- fix error handling with GNUTLS
|
||||
- update included sqlite3 code to something recent
|
||||
- documentation cleanups/updates
|
||||
|
||||
-- ircd-ratbox-3.0.6
|
||||
- fix a user-triggerable crash in /links handling when flatten_links is
|
||||
disabled
|
||||
-- ircd-ratbox-3.0.5
|
||||
- fix a bug with reading help files
|
||||
- add debugging in for dealing with a kline removal bug
|
||||
- fix /rehash tdlines and /rehash bans so they actually do something with
|
||||
dlines
|
||||
- compute the number of file descriptors passed correctly on freebsd/amd64
|
||||
(and probably others)
|
||||
- check for compiler support for various warning flags and add them
|
||||
- add -fno-strict-aliasing as this is now needed for gcc 4.4
|
||||
- GNUTLS code now picks up new keys/certificates on rehash
|
||||
|
||||
-- ircd-ratbox-3.0.4
|
||||
- Actually release from the right branch. Oops.
|
||||
|
||||
-- ircd-ratbox-3.0.3
|
||||
- fix forward dns resolution, only used by connect::host with hostnames
|
||||
- check return values on rb_socketpair that can cause a crash if
|
||||
socketpair fails
|
||||
- add autoconf checks for -fstack-protector
|
||||
- add warnings for certain functions who's return values should always
|
||||
be checked
|
||||
- fix a CHALLENGE related core dump
|
||||
|
||||
-- ircd-ratbox-3.0.2
|
||||
- fix ssl+zip close detection
|
||||
- fix openssl detection when openssl is a static library
|
||||
- add gungline support
|
||||
- fix a problem with ssl connections not being accepted on solaris
|
||||
and perhaps other platforms as well
|
||||
- attempt to report the real network errors on ssl connections a bit better
|
||||
- actually update the internal timekeeping when using sigio
|
||||
- fix an off by one error in ziplink stats processing
|
||||
|
||||
-- ircd-ratbox-3.0.1
|
||||
- call rb_helper_close on bandb errors to kill off old bandb processes
|
||||
- report correct files/line numbers for spoof warnings
|
||||
- sid in the serverinfo struct should be 4 bytes, not 3
|
||||
- rebuild the included ircd_lexer.c
|
||||
- fix ports and /dev/poll on solaris
|
||||
- report libratbox version on -version and /info
|
||||
- libratbox version info includes ssl info
|
||||
- fix installing when using install-sh
|
||||
- reenable ziplinks + ssl
|
||||
- fix a gnutls related core dump
|
||||
- add support for a serverinfo::bandb setting for the ban database
|
||||
- report adding throttles when an oper is set umode +r
|
||||
- report throttle stats in /stats T
|
||||
|
||||
-- ircd-ratbox-3.0.0
|
||||
- fix a crash with the the global cidr code
|
||||
- fix a core dump in bantool if bantool cannot open the database
|
||||
- report failure to open logfiles in a more useful way
|
||||
- check to see if we have both read and write access to the ban database
|
||||
- fix a build error on OS X Leopard
|
||||
|
||||
-- ircd-ratbox-3.0.0rc3
|
||||
- fix a leak that would cause the ircd to leak 128 bytes per connection
|
||||
- a few minor cleanups of cases where malloc/free were used instead of
|
||||
rb_malloc/rb_free
|
||||
- keep people from passing absurd non-numeric values to --with-nicklen
|
||||
- have stats T report cumulative connection times as a 64bit integer
|
||||
and keep track of those values as a 64bit integer as well so they do
|
||||
not wrap
|
||||
|
||||
-- ircd-ratbox-3.0.0rc2
|
||||
- log ERROR commands to file regardless of hide_error_messages setting
|
||||
- restrict JOIN 0 to only allow 0 by itself, no multiple zeros or zeros
|
||||
before or after commas
|
||||
- honor -logfile command line option
|
||||
- fix timerfd_create check
|
||||
|
||||
-- ircd-ratbox-3.0.0rc1
|
||||
- fix a bug in comment parsing in the config file
|
||||
- have bandb honor -basedir option
|
||||
- if ssld to work on win32 should you ever desire such a thing and a
|
||||
few other minor win32 fixes
|
||||
- fix up a few things so that the source code builds with gcc -pedantic
|
||||
- do not abort configure if the AC_CHECK_SQLITE3 check fails
|
||||
- drop configure option for ssl only channels, this is now controlled by
|
||||
channel {} use_sslonly option
|
||||
- attempt to override FD_SETSIZE when using select, and if this cannot
|
||||
be overriden, lower maxconnections
|
||||
- fix signalfd code on 32bit platforms
|
||||
- add support for timerfd_create event handling on linux systems with
|
||||
new enough kernels and glibc
|
||||
- fix our fake rb_sockaddr_storage so that it actually compiles
|
||||
- Add some work arounds to avoid OPENSSL_applink on some platforms
|
||||
|
||||
|
||||
-- ircd-ratbox-3.0.0beta12
|
||||
- add support for ssl only oper and auth blocks
|
||||
- do not show whowas ip info if the ip is 0
|
||||
- fix admindline to actually work
|
||||
- fix a compile error with vhost6_dns when no ipv6 exists
|
||||
- fix a logic inversion with duplicate dline checking
|
||||
- fix a minor buffer overrun in the identd checking code
|
||||
- default bursting of who set topics to on
|
||||
- tidy up some of the identd checking code
|
||||
- don't try to release a closed connection
|
||||
- change a few instances where localtime was being used instead of
|
||||
UTC
|
||||
- do not bother logging ERROR commands from non-servers
|
||||
- fix a crash in bantool
|
||||
- fix an issue in libratbox with storing event names incorrectly
|
||||
- put a bit of sanity checking in rb_vsnprintf_append
|
||||
- some portability cleanups
|
||||
|
||||
-- ircd-ratbox-3.0.0beta11
|
||||
- remove the remains of servlink_path from the config file parser
|
||||
- userlog now logs the users IP address as well as their hostname
|
||||
- whowas now supports showing the users IP address as well as
|
||||
hostname. the same rules apply to showing the whowas IP as
|
||||
apply to showing whois_actually and uses the same numeric.
|
||||
- double the size of the whowas array for large networks. this
|
||||
comes at a hit of about 2MB or so of memory.
|
||||
- really, really fix the block heap garbage collection code
|
||||
|
||||
|
||||
-- ircd-ratbox-3.0.0beta10
|
||||
- fix a case a passing a NULL to match()
|
||||
- properly fix a crash in the block heap garbage collection code
|
||||
|
||||
-- ircd-ratbox-3.0.0beta9
|
||||
- fix a hang with the resolver using epoll
|
||||
- add dns source port randomization
|
||||
- add a vhost_dns/vhost6_dns option to control which IP addresses the
|
||||
resolver binds to
|
||||
- make /stats A work again
|
||||
- cleanup some remains of the old ident helper
|
||||
- work around a core dump in libratbox with accepting sockets that
|
||||
appear to be open in the fd hash and log this condition
|
||||
- fix a buffer overrun in the arc4random code when there is no ssl
|
||||
library
|
||||
- fix a memory alignment issue on sparc where the ircd would crash
|
||||
with a SIGBUS accessing long long variables that were allocated
|
||||
via the block allocator
|
||||
|
||||
|
||||
-- ircd-ratbox-3.0.0beta8
|
||||
- some cleanups in the checksplit code
|
||||
- some cleanups in the /trace code
|
||||
- show reasons for failed outbound SSL handshakes to opers
|
||||
- log ssl errors for servers and handshakes in serverlog
|
||||
- make sqlite3 checking more robust
|
||||
- change the resolver to use the code from charybdis instead of adns
|
||||
- fix identd checking so it works again
|
||||
- fix a bug where the ircd could stop reading from the client on the CAP
|
||||
command
|
||||
- add some functions for random number generation for the nossl case in
|
||||
libratbox
|
||||
|
||||
-- ircd-ratbox-3.0.0beta7
|
||||
- my release building script manage to not include libratbox, oops
|
||||
|
||||
-- ircd-ratbox-3.0.0beta6
|
||||
- change -lock klines and friends to now be ADMINKLINE etc
|
||||
- default to only supporting TS6
|
||||
- fix remote kline reasons
|
||||
- have sqlite3 checking use pkg-config when possible
|
||||
- move identd checking back into the ircd, this seems to have been more
|
||||
problematic than what it was worth
|
||||
- add experimental gnutls support - note that CHALLENGE does not work when using just
|
||||
gnutls
|
||||
- some helpfile cleanups
|
||||
- fix compile error when zlib is not found
|
||||
- remove some restrictions on k/d/x/resv reasons that are no longer needed
|
||||
|
||||
-- ircd-ratbox-3.0.0beta5
|
||||
- fix things so that --enable-assert=soft compiles again
|
||||
- fix a typo in mkpasswd
|
||||
- add admin only -lock klines, doing KLINE -lock will allow admins to
|
||||
add klines that normal opers cannot remove.
|
||||
- modify bantool to have a -u option that updates the database schema.
|
||||
if upgrading from previous betas, this needs to be run to support
|
||||
the -lock kline changes.
|
||||
- fix cidr klines so they work again
|
||||
- update included sqlite3 to the latest revision
|
||||
- allow kline/unkline of a bare host or address, this gets treated as
|
||||
*@host
|
||||
- report when an invalid kline is passed, instead of silently ignoring
|
||||
- fix --enable-assert=soft
|
||||
- fix libratbox build on OS X and others
|
||||
|
||||
-- ircd-ratbox-3.0.0beta4
|
||||
- some configure/makefile changes that are useful for package maintainers
|
||||
- various bantool fixes
|
||||
- fix a bug with the command hash that could cause the ircd to crash
|
||||
- fix an ident checking bug that would sometimes cause users to get the
|
||||
wrong ident
|
||||
- fix an ssld crash due to mangling connection ids incorrectly
|
||||
- fix matching of cidr masks where the bit length was 0
|
||||
- implement throttling of ssl connection handshake flooding
|
||||
- fix build on bsd platforms that lack EVFILT_TIMER
|
||||
- fix kqueue from sometimes dropping updates
|
||||
- fix a possible crash with ssl connections closing quickly
|
||||
- perserve errno so that connect failures report the correct error
|
||||
|
||||
-- ircd-ratbox-3.0.0beta3
|
||||
- fix an issue with CAP END releasing clients before it should
|
||||
- report bandb errors in a useful fashion
|
||||
- strip tabs when reading from help/motd etc
|
||||
- override default_max_clients if it is == 0
|
||||
- fix ssl issue with wanting reads/writes
|
||||
- fix some cases where /list can freeze a client
|
||||
- stop libltdl from installing an empty include directory
|
||||
- improve SIGCHLD handling in the ircd
|
||||
|
||||
-- ircd-ratbox-3.0.0beta2
|
||||
- honor global_cidr setting
|
||||
- fix a bug in bantool that improperly parsed X-lines with spaces them
|
||||
- fix user@host spoofs
|
||||
- fix default maxclients to work correctly
|
||||
- fix libratbox build with openssl disabled
|
||||
- don't spin on openssl accepts when there is no data
|
||||
|
||||
-- ircd-ratbox-3.0.0beta1
|
||||
- No release notes, see doc/whats-new-3.0.txt
|
||||
|
||||
$Id: RELNOTES 29305 2016-01-13 18:50:25Z androsyn $
|
||||
|
30
ircd-ratbox-3.0.10/SVN-Access
Normal file
30
ircd-ratbox-3.0.10/SVN-Access
Normal file
@ -0,0 +1,30 @@
|
||||
$Id: SVN-Access 27235 2011-10-14 03:58:24Z dubkat $
|
||||
|
||||
So, we've gone and switched to subversion.
|
||||
|
||||
The ircd-ratbox subversion repository is available for anonymous access.
|
||||
|
||||
One can checkout the stable tree(currently 2.2.x) as follows:
|
||||
|
||||
svn co http://svn.ratbox.org/svnroot/ircd-ratbox/branches/RATBOX_2_2
|
||||
|
||||
Or the testing tree(3.0.x):
|
||||
|
||||
svn co http://svn.ratbox.org/svnroot/ircd-ratbox/branches/RATBOX_3_0
|
||||
|
||||
Or if you prefer the bleeding edge stuff:
|
||||
|
||||
svn co http://svn.ratbox.org/svnroot/ircd-ratbox/trunk
|
||||
|
||||
Of course at any given time the SVN tree could be broken. If you are
|
||||
planning on using the SVN tree you very well may want to be on the mailing
|
||||
list, you can subscribe at:
|
||||
|
||||
http://lists.ratbox.org/cgi-bin/mailman/listinfo/ircd-ratbox
|
||||
|
||||
Direct bug reports to: http://bugs.ratbox.org
|
||||
|
||||
|
||||
|
||||
|
||||
|
216
ircd-ratbox-3.0.10/acinclude.m4
Normal file
216
ircd-ratbox-3.0.10/acinclude.m4
Normal file
@ -0,0 +1,216 @@
|
||||
# $Id: acinclude.m4 26529 2009-05-13 15:37:11Z androsyn $ - aclocal.m4 - Autoconf fun...
|
||||
AC_DEFUN([AC_DEFINE_DIR], [
|
||||
test "x$prefix" = xNONE && prefix="$ac_default_prefix"
|
||||
test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
|
||||
ac_define_dir=`eval echo [$]$2`
|
||||
ac_define_dir=`eval echo [$]ac_define_dir`
|
||||
$1="$ac_define_dir"
|
||||
AC_SUBST($1)
|
||||
ifelse($3, ,
|
||||
AC_DEFINE_UNQUOTED($1, "$ac_define_dir"),
|
||||
AC_DEFINE_UNQUOTED($1, "$ac_define_dir", $3))
|
||||
])
|
||||
|
||||
AC_DEFUN([AC_SUBST_DIR], [
|
||||
ifelse($2,,,$1="[$]$2")
|
||||
$1=`(
|
||||
test "x$prefix" = xNONE && prefix="$ac_default_prefix"
|
||||
test "x$exec_prefix" = xNONE && exec_prefix="${prefix}"
|
||||
eval echo \""[$]$1"\"
|
||||
)`
|
||||
AC_SUBST($1)
|
||||
])
|
||||
|
||||
dnl Check for libsqlite3, based on version found at libdbi-drivers.sf.net (GPLv2-licensed)
|
||||
|
||||
AC_DEFUN([AC_FIND_FILE], [
|
||||
$3=no
|
||||
for i in $2; do
|
||||
for j in $1; do
|
||||
if test -r "$i/$j"; then
|
||||
$3=$i
|
||||
break 2
|
||||
fi
|
||||
done
|
||||
done ])
|
||||
|
||||
AC_DEFUN([AC_CHECK_SQLITE3], [
|
||||
have_sqlite3="no"
|
||||
ac_sqlite3="no"
|
||||
ac_sqlite3_incdir="no"
|
||||
ac_sqlite3_libdir="no"
|
||||
|
||||
# exported variables
|
||||
SQLITE3_LIBS=""
|
||||
SQLITE3_CFLAGS=""
|
||||
|
||||
AC_ARG_WITH(sqlite3, AC_HELP_STRING([--with-sqlite3[=dir]], [Compile with libsqlite3 at given dir]),
|
||||
[ ac_sqlite3="$withval"
|
||||
if test "x$withval" != "xno" -a "x$withval" != "xyes"; then
|
||||
ac_sqlite3="yes"
|
||||
ac_sqlite3_incdir="$withval"/include
|
||||
ac_sqlite3_libdir="$withval"/lib
|
||||
fi ],
|
||||
[ ac_sqlite3="auto" ] )
|
||||
AC_ARG_WITH(sqlite3-incdir, AC_HELP_STRING([--with-sqlite3-incdir], [Specifies where the SQLite3 include files are.]),
|
||||
[ ac_sqlite3_incdir="$withval" ] )
|
||||
AC_ARG_WITH(sqlite3-libdir, AC_HELP_STRING([--with-sqlite3-libdir], [Specifies where the SQLite3 libraries are.]),
|
||||
[ ac_sqlite3_libdir="$withval" ] )
|
||||
|
||||
AC_MSG_CHECKING([for SQLite3])
|
||||
|
||||
# Try to automagically find SQLite, either with pkg-config, or without.
|
||||
if test "x$ac_sqlite3" = "xauto"; then
|
||||
if test "x$PKG_CONFIG" != "xno"; then
|
||||
SQLITE3_LIBS=`$PKG_CONFIG --libs sqlite3 2>/dev/null`
|
||||
SQLITE3_CFLAGS=`$PKG_CONFIG --cflags sqlite3 2>/dev/null`
|
||||
if test "x$SQLITE3_LIBS" = "x" -a "x$SQLITE3_CFLAGS" = "x"; then
|
||||
AC_CHECK_LIB([sqlite3], [sqlite3_open], [ac_sqlite3="yes"], [ac_sqlite3="no"])
|
||||
else
|
||||
ac_sqlite3="yes"
|
||||
fi
|
||||
else
|
||||
AC_CHECK_LIB([sqlite3], [sqlite3_open], [ac_sqlite3="yes"], [ac_sqlite3="no"])
|
||||
fi
|
||||
fi
|
||||
|
||||
if test "x$ac_sqlite3" = "xyes"; then
|
||||
if test "$ac_sqlite3_incdir" = "no"; then
|
||||
sqlite3_incdirs="/usr/include /usr/local/include /usr/include/sqlite /usr/local/include/sqlite /usr/local/sqlite/include /opt/sqlite/include"
|
||||
AC_FIND_FILE(sqlite3.h, $sqlite3_incdirs, ac_sqlite3_incdir)
|
||||
if test "$ac_sqlite3_incdir" = "no"; then
|
||||
AC_MSG_WARN([Invalid SQLite directory - include files not found.])
|
||||
sqlite3_missing=yes
|
||||
ac_sqlite3=no
|
||||
fi
|
||||
fi
|
||||
if test "$ac_sqlite3_libdir" = "no"; then
|
||||
sqlite3_libdirs="/usr/lib64 /usr/lib /usr/local/lib64 /usr/local/lib /usr/lib/sqlite usr/lib64/sqlite /usr/local/lib/sqlite /usr/local/sqlite/lib /opt/sqlite/lib"
|
||||
sqlite3_libs="libsqlite3.so libsqlite3.dylib libsqlite3.a"
|
||||
AC_FIND_FILE($sqlite3_libs, $sqlite3_libdirs, ac_sqlite3_libdir)
|
||||
if test "$ac_sqlite3_libdir" = "no"; then
|
||||
AC_MSG_WARN([Invalid SQLite directory - libraries not found.])
|
||||
sqlite3_missing=yes
|
||||
ac_sqlite3=no
|
||||
fi
|
||||
fi
|
||||
if test x"$sqlite3_missing" != "xyes"; then
|
||||
have_sqlite3="yes"
|
||||
|
||||
if test x"$ac_sqlite3_libdir" = xno; then
|
||||
test "x$SQLITE3_LIBS" = "x" && SQLITE3_LIBS="-lsqlite3"
|
||||
else
|
||||
test "x$SQLITE3_LIBS" = "x" && SQLITE3_LIBS="-L$ac_sqlite3_libdir -lsqlite3"
|
||||
fi
|
||||
test x"$ac_sqlite3_incdir" != xno && test "x$SQLITE3_CFLAGS" = "x" && SQLITE3_CFLAGS=-I$ac_sqlite3_incdir
|
||||
|
||||
AC_SUBST(SQLITE3_LIBS)
|
||||
AC_SUBST(SQLITE3_CFLAGS)
|
||||
else
|
||||
ac_sqlite3=no
|
||||
fi
|
||||
fi
|
||||
|
||||
AC_MSG_RESULT([$ac_sqlite3])
|
||||
])
|
||||
|
||||
|
||||
dnl
|
||||
dnl Useful macros for autoconf to check for ssp-patched gcc
|
||||
dnl 1.0 - September 2003 - Tiago Sousa <mirage@kaotik.org>
|
||||
dnl 1.1 - August 2006 - Ted Percival <ted@midg3t.net>
|
||||
dnl * Stricter language checking (C or C++)
|
||||
dnl * Adds GCC_STACK_PROTECT_LIB to add -lssp to LDFLAGS as necessary
|
||||
dnl * Caches all results
|
||||
dnl * Uses macros to ensure correct ouput in quiet/silent mode
|
||||
dnl 1.2 - April 2007 - Ted Percival <ted@midg3t.net>
|
||||
dnl * Added GCC_STACK_PROTECTOR macro for simpler (one-line) invocation
|
||||
dnl * GCC_STACK_PROTECT_LIB now adds -lssp to LIBS rather than LDFLAGS
|
||||
dnl
|
||||
dnl About ssp:
|
||||
dnl GCC extension for protecting applications from stack-smashing attacks
|
||||
dnl http://www.research.ibm.com/trl/projects/security/ssp/
|
||||
dnl
|
||||
dnl Usage:
|
||||
dnl Most people will simply call GCC_STACK_PROTECTOR.
|
||||
dnl If you only use one of C or C++, you can save time by only calling the
|
||||
dnl macro appropriate for that language. In that case you should also call
|
||||
dnl GCC_STACK_PROTECT_LIB first.
|
||||
dnl
|
||||
dnl GCC_STACK_PROTECTOR
|
||||
dnl Tries to turn on stack protection for C and C++ by calling the following
|
||||
dnl three macros with the right languages.
|
||||
dnl
|
||||
dnl GCC_STACK_PROTECT_CC
|
||||
dnl checks -fstack-protector with the C compiler, if it exists then updates
|
||||
dnl CFLAGS and defines ENABLE_SSP_CC
|
||||
dnl
|
||||
dnl GCC_STACK_PROTECT_CXX
|
||||
dnl checks -fstack-protector with the C++ compiler, if it exists then updates
|
||||
dnl CXXFLAGS and defines ENABLE_SSP_CXX
|
||||
dnl
|
||||
dnl GCC_STACK_PROTECT_LIB
|
||||
dnl adds -lssp to LIBS if it is available
|
||||
dnl ssp is usually provided as part of libc, but was previously a separate lib
|
||||
dnl It does not hurt to add -lssp even if libc provides SSP - in that case
|
||||
dnl libssp will simply be ignored.
|
||||
dnl
|
||||
|
||||
AC_DEFUN([GCC_STACK_PROTECT_LIB],[
|
||||
AC_CACHE_CHECK([whether libssp exists], ssp_cv_lib,
|
||||
[ssp_old_libs="$LIBS"
|
||||
LIBS="$LIBS -lssp"
|
||||
AC_TRY_LINK(,, ssp_cv_lib=yes, ssp_cv_lib=no)
|
||||
LIBS="$ssp_old_libs"
|
||||
])
|
||||
if test $ssp_cv_lib = yes; then
|
||||
LIBS="$LIBS -lssp"
|
||||
fi
|
||||
])
|
||||
|
||||
AC_DEFUN([GCC_STACK_PROTECT_CC],[
|
||||
AC_LANG_ASSERT(C)
|
||||
if test "X$CC" != "X"; then
|
||||
AC_CACHE_CHECK([whether ${CC} accepts -fstack-protector],
|
||||
ssp_cv_cc,
|
||||
[ssp_old_cflags="$CFLAGS"
|
||||
CFLAGS="$CFLAGS -fstack-protector"
|
||||
AC_TRY_COMPILE(,, ssp_cv_cc=yes, ssp_cv_cc=no)
|
||||
CFLAGS="$ssp_old_cflags"
|
||||
])
|
||||
if test $ssp_cv_cc = yes; then
|
||||
CFLAGS="$CFLAGS -fstack-protector"
|
||||
AC_DEFINE([ENABLE_SSP_CC], 1, [Define if SSP C support is enabled.])
|
||||
fi
|
||||
fi
|
||||
])
|
||||
|
||||
AC_DEFUN([GCC_STACK_PROTECT_CXX],[
|
||||
AC_LANG_ASSERT(C++)
|
||||
if test "X$CXX" != "X"; then
|
||||
AC_CACHE_CHECK([whether ${CXX} accepts -fstack-protector],
|
||||
ssp_cv_cxx,
|
||||
[ssp_old_cxxflags="$CXXFLAGS"
|
||||
CXXFLAGS="$CXXFLAGS -fstack-protector"
|
||||
AC_TRY_COMPILE(,, ssp_cv_cxx=yes, ssp_cv_cxx=no)
|
||||
CXXFLAGS="$ssp_old_cxxflags"
|
||||
])
|
||||
if test $ssp_cv_cxx = yes; then
|
||||
CXXFLAGS="$CXXFLAGS -fstack-protector"
|
||||
AC_DEFINE([ENABLE_SSP_CXX], 1, [Define if SSP C++ support is enabled.])
|
||||
fi
|
||||
fi
|
||||
])
|
||||
|
||||
AC_DEFUN([GCC_STACK_PROTECTOR],[
|
||||
GCC_STACK_PROTECT_LIB
|
||||
|
||||
AC_LANG_PUSH([C])
|
||||
GCC_STACK_PROTECT_CC
|
||||
AC_LANG_POP([C])
|
||||
|
||||
AC_LANG_PUSH([C++])
|
||||
GCC_STACK_PROTECT_CXX
|
||||
AC_LANG_POP([C++])
|
||||
])
|
||||
|
10580
ircd-ratbox-3.0.10/aclocal.m4
vendored
Normal file
10580
ircd-ratbox-3.0.10/aclocal.m4
vendored
Normal file
File diff suppressed because it is too large
Load Diff
23
ircd-ratbox-3.0.10/bandb/Makefile.am
Normal file
23
ircd-ratbox-3.0.10/bandb/Makefile.am
Normal file
@ -0,0 +1,23 @@
|
||||
#
|
||||
# $Id: Makefile.am 25554 2008-06-19 15:06:52Z androsyn $
|
||||
#
|
||||
AUTOMAKE_OPTIONS = foreign subdir-objects
|
||||
|
||||
if BUILD_SQLITE
|
||||
SUBDIRS = sqlite3
|
||||
endif
|
||||
|
||||
libexec_PROGRAMS = bandb
|
||||
bin_PROGRAMS = bantool
|
||||
AM_CFLAGS=$(WARNFLAGS)
|
||||
|
||||
INCLUDES = -I../include -I../libratbox/include @SQLITE3_CFLAGS@
|
||||
|
||||
|
||||
bandb_SOURCES = bandb.c rsdb_sqlite3.c rsdb_snprintf.c
|
||||
|
||||
bandb_LDADD = ../libratbox/src/libratbox.la @SQLITE3_LIBS@
|
||||
|
||||
bantool_SOURCES = bantool.c rsdb_sqlite3.c rsdb_snprintf.c
|
||||
bantool_LDADD = ../libratbox/src/libratbox.la @SQLITE3_LIBS@
|
||||
|
809
ircd-ratbox-3.0.10/bandb/Makefile.in
Normal file
809
ircd-ratbox-3.0.10/bandb/Makefile.in
Normal file
@ -0,0 +1,809 @@
|
||||
# Makefile.in generated by automake 1.11.6 from Makefile.am.
|
||||
# @configure_input@
|
||||
|
||||
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
|
||||
# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
|
||||
# Foundation, Inc.
|
||||
# This Makefile.in is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
||||
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
# PARTICULAR PURPOSE.
|
||||
|
||||
@SET_MAKE@
|
||||
|
||||
VPATH = @srcdir@
|
||||
am__make_dryrun = \
|
||||
{ \
|
||||
am__dry=no; \
|
||||
case $$MAKEFLAGS in \
|
||||
*\\[\ \ ]*) \
|
||||
echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \
|
||||
| grep '^AM OK$$' >/dev/null || am__dry=yes;; \
|
||||
*) \
|
||||
for am__flg in $$MAKEFLAGS; do \
|
||||
case $$am__flg in \
|
||||
*=*|--*) ;; \
|
||||
*n*) am__dry=yes; break;; \
|
||||
esac; \
|
||||
done;; \
|
||||
esac; \
|
||||
test $$am__dry = yes; \
|
||||
}
|
||||
pkgdatadir = $(datadir)/@PACKAGE@
|
||||
pkgincludedir = $(includedir)/@PACKAGE@
|
||||
pkglibdir = $(libdir)/@PACKAGE@
|
||||
pkglibexecdir = $(libexecdir)/@PACKAGE@
|
||||
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
|
||||
install_sh_DATA = $(install_sh) -c -m 644
|
||||
install_sh_PROGRAM = $(install_sh) -c
|
||||
install_sh_SCRIPT = $(install_sh) -c
|
||||
INSTALL_HEADER = $(INSTALL_DATA)
|
||||
transform = $(program_transform_name)
|
||||
NORMAL_INSTALL = :
|
||||
PRE_INSTALL = :
|
||||
POST_INSTALL = :
|
||||
NORMAL_UNINSTALL = :
|
||||
PRE_UNINSTALL = :
|
||||
POST_UNINSTALL = :
|
||||
build_triplet = @build@
|
||||
host_triplet = @host@
|
||||
libexec_PROGRAMS = bandb$(EXEEXT)
|
||||
bin_PROGRAMS = bantool$(EXEEXT)
|
||||
subdir = bandb
|
||||
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
|
||||
$(top_srcdir)/configure.ac
|
||||
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
||||
$(ACLOCAL_M4)
|
||||
mkinstalldirs = $(install_sh) -d
|
||||
CONFIG_HEADER = $(top_builddir)/include/setup.h
|
||||
CONFIG_CLEAN_FILES =
|
||||
CONFIG_CLEAN_VPATH_FILES =
|
||||
am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(libexecdir)"
|
||||
PROGRAMS = $(bin_PROGRAMS) $(libexec_PROGRAMS)
|
||||
am_bandb_OBJECTS = bandb.$(OBJEXT) rsdb_sqlite3.$(OBJEXT) \
|
||||
rsdb_snprintf.$(OBJEXT)
|
||||
bandb_OBJECTS = $(am_bandb_OBJECTS)
|
||||
bandb_DEPENDENCIES = ../libratbox/src/libratbox.la
|
||||
am_bantool_OBJECTS = bantool.$(OBJEXT) rsdb_sqlite3.$(OBJEXT) \
|
||||
rsdb_snprintf.$(OBJEXT)
|
||||
bantool_OBJECTS = $(am_bantool_OBJECTS)
|
||||
bantool_DEPENDENCIES = ../libratbox/src/libratbox.la
|
||||
DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include
|
||||
depcomp = $(SHELL) $(top_srcdir)/libltdl/config/depcomp
|
||||
am__depfiles_maybe = depfiles
|
||||
am__mv = mv -f
|
||||
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
|
||||
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
|
||||
LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
|
||||
--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
|
||||
$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
|
||||
CCLD = $(CC)
|
||||
LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
|
||||
--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
|
||||
$(LDFLAGS) -o $@
|
||||
SOURCES = $(bandb_SOURCES) $(bantool_SOURCES)
|
||||
DIST_SOURCES = $(bandb_SOURCES) $(bantool_SOURCES)
|
||||
RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
|
||||
html-recursive info-recursive install-data-recursive \
|
||||
install-dvi-recursive install-exec-recursive \
|
||||
install-html-recursive install-info-recursive \
|
||||
install-pdf-recursive install-ps-recursive install-recursive \
|
||||
installcheck-recursive installdirs-recursive pdf-recursive \
|
||||
ps-recursive uninstall-recursive
|
||||
am__can_run_installinfo = \
|
||||
case $$AM_UPDATE_INFO_DIR in \
|
||||
n|no|NO) false;; \
|
||||
*) (install-info --version) >/dev/null 2>&1;; \
|
||||
esac
|
||||
RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
|
||||
distclean-recursive maintainer-clean-recursive
|
||||
AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
|
||||
$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
|
||||
distdir
|
||||
ETAGS = etags
|
||||
CTAGS = ctags
|
||||
DIST_SUBDIRS = sqlite3
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
am__relativize = \
|
||||
dir0=`pwd`; \
|
||||
sed_first='s,^\([^/]*\)/.*$$,\1,'; \
|
||||
sed_rest='s,^[^/]*/*,,'; \
|
||||
sed_last='s,^.*/\([^/]*\)$$,\1,'; \
|
||||
sed_butlast='s,/*[^/]*$$,,'; \
|
||||
while test -n "$$dir1"; do \
|
||||
first=`echo "$$dir1" | sed -e "$$sed_first"`; \
|
||||
if test "$$first" != "."; then \
|
||||
if test "$$first" = ".."; then \
|
||||
dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
|
||||
dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
|
||||
else \
|
||||
first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
|
||||
if test "$$first2" = "$$first"; then \
|
||||
dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
|
||||
else \
|
||||
dir2="../$$dir2"; \
|
||||
fi; \
|
||||
dir0="$$dir0"/"$$first"; \
|
||||
fi; \
|
||||
fi; \
|
||||
dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
|
||||
done; \
|
||||
reldir="$$dir2"
|
||||
ACLOCAL = @ACLOCAL@
|
||||
ALLOCA = @ALLOCA@
|
||||
AMTAR = @AMTAR@
|
||||
AR = @AR@
|
||||
ARGZ_H = @ARGZ_H@
|
||||
AUTOCONF = @AUTOCONF@
|
||||
AUTOHEADER = @AUTOHEADER@
|
||||
AUTOMAKE = @AUTOMAKE@
|
||||
AWK = @AWK@
|
||||
CC = @CC@
|
||||
CCDEPMODE = @CCDEPMODE@
|
||||
CFLAGS = @CFLAGS@
|
||||
CP = @CP@
|
||||
CPP = @CPP@
|
||||
CPPFLAGS = @CPPFLAGS@
|
||||
CYGPATH_W = @CYGPATH_W@
|
||||
DEFS = @DEFS@
|
||||
DEPDIR = @DEPDIR@
|
||||
DLLTOOL = @DLLTOOL@
|
||||
DSYMUTIL = @DSYMUTIL@
|
||||
DUMPBIN = @DUMPBIN@
|
||||
ECHO_C = @ECHO_C@
|
||||
ECHO_N = @ECHO_N@
|
||||
ECHO_T = @ECHO_T@
|
||||
EGREP = @EGREP@
|
||||
ETC_DIR = @ETC_DIR@
|
||||
EXEEXT = @EXEEXT@
|
||||
FGREP = @FGREP@
|
||||
GREP = @GREP@
|
||||
HELP_DIR = @HELP_DIR@
|
||||
INCLTDL = @INCLTDL@
|
||||
INSTALL = @INSTALL@
|
||||
INSTALL_DATA = @INSTALL_DATA@
|
||||
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
||||
IRCD_PREFIX = @IRCD_PREFIX@
|
||||
LD = @LD@
|
||||
LDFLAGS = @LDFLAGS@
|
||||
LEX = @LEX@
|
||||
LEXLIB = @LEXLIB@
|
||||
LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
|
||||
LIBADD_DL = @LIBADD_DL@
|
||||
LIBADD_DLD_LINK = @LIBADD_DLD_LINK@
|
||||
LIBADD_DLOPEN = @LIBADD_DLOPEN@
|
||||
LIBADD_SHL_LOAD = @LIBADD_SHL_LOAD@
|
||||
LIBEXEC_DIR = @LIBEXEC_DIR@
|
||||
LIBLTDL = @LIBLTDL@
|
||||
LIBOBJS = @LIBOBJS@
|
||||
LIBS = @LIBS@
|
||||
LIBTOOL = @LIBTOOL@
|
||||
LIPO = @LIPO@
|
||||
LN_S = @LN_S@
|
||||
LOG_DIR = @LOG_DIR@
|
||||
LTDLDEPS = @LTDLDEPS@
|
||||
LTDLINCL = @LTDLINCL@
|
||||
LTDLOPEN = @LTDLOPEN@
|
||||
LTDL_SUBDIR = @LTDL_SUBDIR@
|
||||
LTLIBOBJS = @LTLIBOBJS@
|
||||
LT_CONFIG_H = @LT_CONFIG_H@
|
||||
LT_DLLOADERS = @LT_DLLOADERS@
|
||||
LT_DLPREOPEN = @LT_DLPREOPEN@
|
||||
LT_OBJDIR = @LT_OBJDIR@
|
||||
MAINT = @MAINT@
|
||||
MAKEINFO = @MAKEINFO@
|
||||
MANIFEST_TOOL = @MANIFEST_TOOL@
|
||||
MKDIR_P = @MKDIR_P@
|
||||
MODULE_DIR = @MODULE_DIR@
|
||||
MV = @MV@
|
||||
NM = @NM@
|
||||
NMEDIT = @NMEDIT@
|
||||
OBJDUMP = @OBJDUMP@
|
||||
OBJEXT = @OBJEXT@
|
||||
OTOOL = @OTOOL@
|
||||
OTOOL64 = @OTOOL64@
|
||||
PACKAGE = @PACKAGE@
|
||||
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
|
||||
PACKAGE_NAME = @PACKAGE_NAME@
|
||||
PACKAGE_STRING = @PACKAGE_STRING@
|
||||
PACKAGE_TARNAME = @PACKAGE_TARNAME@
|
||||
PACKAGE_URL = @PACKAGE_URL@
|
||||
PACKAGE_VERSION = @PACKAGE_VERSION@
|
||||
PATH_SEPARATOR = @PATH_SEPARATOR@
|
||||
PICFLAGS = @PICFLAGS@
|
||||
RANLIB = @RANLIB@
|
||||
RB_RM = @RB_RM@
|
||||
SED = @SED@
|
||||
SEDOBJ = @SEDOBJ@
|
||||
SET_MAKE = @SET_MAKE@
|
||||
SHELL = @SHELL@
|
||||
SHLIBEXT = @SHLIBEXT@
|
||||
SQLITE3_CFLAGS = @SQLITE3_CFLAGS@
|
||||
SQLITE3_LIBS = @SQLITE3_LIBS@
|
||||
SQLITE_SUBDIR = @SQLITE_SUBDIR@
|
||||
SSL_INCLUDES = @SSL_INCLUDES@
|
||||
SSL_LIBS = @SSL_LIBS@
|
||||
STRIP = @STRIP@
|
||||
VERSION = @VERSION@
|
||||
WARNFLAGS = @WARNFLAGS@
|
||||
YACC = @YACC@
|
||||
YFLAGS = @YFLAGS@
|
||||
ZLIB_LD = @ZLIB_LD@
|
||||
abs_builddir = @abs_builddir@
|
||||
abs_srcdir = @abs_srcdir@
|
||||
abs_top_builddir = @abs_top_builddir@
|
||||
abs_top_srcdir = @abs_top_srcdir@
|
||||
ac_ct_AR = @ac_ct_AR@
|
||||
ac_ct_CC = @ac_ct_CC@
|
||||
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
|
||||
am__include = @am__include@
|
||||
am__leading_dot = @am__leading_dot@
|
||||
am__quote = @am__quote@
|
||||
am__tar = @am__tar@
|
||||
am__untar = @am__untar@
|
||||
bindir = @bindir@
|
||||
build = @build@
|
||||
build_alias = @build_alias@
|
||||
build_cpu = @build_cpu@
|
||||
build_os = @build_os@
|
||||
build_vendor = @build_vendor@
|
||||
builddir = @builddir@
|
||||
confdir = @confdir@
|
||||
datadir = @datadir@
|
||||
datarootdir = @datarootdir@
|
||||
docdir = @docdir@
|
||||
dvidir = @dvidir@
|
||||
exec_prefix = @exec_prefix@
|
||||
helpdir = @helpdir@
|
||||
host = @host@
|
||||
host_alias = @host_alias@
|
||||
host_cpu = @host_cpu@
|
||||
host_os = @host_os@
|
||||
host_vendor = @host_vendor@
|
||||
htmldir = @htmldir@
|
||||
includedir = @includedir@
|
||||
infodir = @infodir@
|
||||
install_sh = @install_sh@
|
||||
libdir = @libdir@
|
||||
libexecdir = @libexecdir@
|
||||
localedir = @localedir@
|
||||
localstatedir = @localstatedir@
|
||||
logdir = @logdir@
|
||||
ltdl_LIBOBJS = @ltdl_LIBOBJS@
|
||||
ltdl_LTLIBOBJS = @ltdl_LTLIBOBJS@
|
||||
mandir = @mandir@
|
||||
mkdir_p = @mkdir_p@
|
||||
moduledir = @moduledir@
|
||||
oldincludedir = @oldincludedir@
|
||||
pdfdir = @pdfdir@
|
||||
prefix = @prefix@
|
||||
program_transform_name = @program_transform_name@
|
||||
psdir = @psdir@
|
||||
runstatedir = @runstatedir@
|
||||
sbindir = @sbindir@
|
||||
sharedstatedir = @sharedstatedir@
|
||||
srcdir = @srcdir@
|
||||
subdirs = @subdirs@
|
||||
sys_symbol_underscore = @sys_symbol_underscore@
|
||||
sysconfdir = @sysconfdir@
|
||||
target_alias = @target_alias@
|
||||
top_build_prefix = @top_build_prefix@
|
||||
top_builddir = @top_builddir@
|
||||
top_srcdir = @top_srcdir@
|
||||
|
||||
#
|
||||
# $Id: Makefile.in 29305 2016-01-13 18:50:25Z androsyn $
|
||||
#
|
||||
AUTOMAKE_OPTIONS = foreign subdir-objects
|
||||
@BUILD_SQLITE_TRUE@SUBDIRS = sqlite3
|
||||
AM_CFLAGS = $(WARNFLAGS)
|
||||
INCLUDES = -I../include -I../libratbox/include @SQLITE3_CFLAGS@
|
||||
bandb_SOURCES = bandb.c rsdb_sqlite3.c rsdb_snprintf.c
|
||||
bandb_LDADD = ../libratbox/src/libratbox.la @SQLITE3_LIBS@
|
||||
bantool_SOURCES = bantool.c rsdb_sqlite3.c rsdb_snprintf.c
|
||||
bantool_LDADD = ../libratbox/src/libratbox.la @SQLITE3_LIBS@
|
||||
all: all-recursive
|
||||
|
||||
.SUFFIXES:
|
||||
.SUFFIXES: .c .lo .o .obj
|
||||
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
|
||||
@for dep in $?; do \
|
||||
case '$(am__configure_deps)' in \
|
||||
*$$dep*) \
|
||||
( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
|
||||
&& { if test -f $@; then exit 0; else break; fi; }; \
|
||||
exit 1;; \
|
||||
esac; \
|
||||
done; \
|
||||
echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign bandb/Makefile'; \
|
||||
$(am__cd) $(top_srcdir) && \
|
||||
$(AUTOMAKE) --foreign bandb/Makefile
|
||||
.PRECIOUS: Makefile
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
@case '$?' in \
|
||||
*config.status*) \
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
|
||||
*) \
|
||||
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
|
||||
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
|
||||
esac;
|
||||
|
||||
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
|
||||
$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
$(am__aclocal_m4_deps):
|
||||
install-binPROGRAMS: $(bin_PROGRAMS)
|
||||
@$(NORMAL_INSTALL)
|
||||
@list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
|
||||
if test -n "$$list"; then \
|
||||
echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \
|
||||
$(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \
|
||||
fi; \
|
||||
for p in $$list; do echo "$$p $$p"; done | \
|
||||
sed 's/$(EXEEXT)$$//' | \
|
||||
while read p p1; do if test -f $$p || test -f $$p1; \
|
||||
then echo "$$p"; echo "$$p"; else :; fi; \
|
||||
done | \
|
||||
sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \
|
||||
-e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
|
||||
sed 'N;N;N;s,\n, ,g' | \
|
||||
$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
|
||||
{ d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
|
||||
if ($$2 == $$4) files[d] = files[d] " " $$1; \
|
||||
else { print "f", $$3 "/" $$4, $$1; } } \
|
||||
END { for (d in files) print "f", d, files[d] }' | \
|
||||
while read type dir files; do \
|
||||
if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
|
||||
test -z "$$files" || { \
|
||||
echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \
|
||||
$(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \
|
||||
} \
|
||||
; done
|
||||
|
||||
uninstall-binPROGRAMS:
|
||||
@$(NORMAL_UNINSTALL)
|
||||
@list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
|
||||
files=`for p in $$list; do echo "$$p"; done | \
|
||||
sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
|
||||
-e 's/$$/$(EXEEXT)/' `; \
|
||||
test -n "$$list" || exit 0; \
|
||||
echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \
|
||||
cd "$(DESTDIR)$(bindir)" && rm -f $$files
|
||||
|
||||
clean-binPROGRAMS:
|
||||
@list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \
|
||||
echo " rm -f" $$list; \
|
||||
rm -f $$list || exit $$?; \
|
||||
test -n "$(EXEEXT)" || exit 0; \
|
||||
list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
|
||||
echo " rm -f" $$list; \
|
||||
rm -f $$list
|
||||
install-libexecPROGRAMS: $(libexec_PROGRAMS)
|
||||
@$(NORMAL_INSTALL)
|
||||
@list='$(libexec_PROGRAMS)'; test -n "$(libexecdir)" || list=; \
|
||||
if test -n "$$list"; then \
|
||||
echo " $(MKDIR_P) '$(DESTDIR)$(libexecdir)'"; \
|
||||
$(MKDIR_P) "$(DESTDIR)$(libexecdir)" || exit 1; \
|
||||
fi; \
|
||||
for p in $$list; do echo "$$p $$p"; done | \
|
||||
sed 's/$(EXEEXT)$$//' | \
|
||||
while read p p1; do if test -f $$p || test -f $$p1; \
|
||||
then echo "$$p"; echo "$$p"; else :; fi; \
|
||||
done | \
|
||||
sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \
|
||||
-e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
|
||||
sed 'N;N;N;s,\n, ,g' | \
|
||||
$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
|
||||
{ d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
|
||||
if ($$2 == $$4) files[d] = files[d] " " $$1; \
|
||||
else { print "f", $$3 "/" $$4, $$1; } } \
|
||||
END { for (d in files) print "f", d, files[d] }' | \
|
||||
while read type dir files; do \
|
||||
if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
|
||||
test -z "$$files" || { \
|
||||
echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(libexecdir)$$dir'"; \
|
||||
$(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(libexecdir)$$dir" || exit $$?; \
|
||||
} \
|
||||
; done
|
||||
|
||||
uninstall-libexecPROGRAMS:
|
||||
@$(NORMAL_UNINSTALL)
|
||||
@list='$(libexec_PROGRAMS)'; test -n "$(libexecdir)" || list=; \
|
||||
files=`for p in $$list; do echo "$$p"; done | \
|
||||
sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
|
||||
-e 's/$$/$(EXEEXT)/' `; \
|
||||
test -n "$$list" || exit 0; \
|
||||
echo " ( cd '$(DESTDIR)$(libexecdir)' && rm -f" $$files ")"; \
|
||||
cd "$(DESTDIR)$(libexecdir)" && rm -f $$files
|
||||
|
||||
clean-libexecPROGRAMS:
|
||||
@list='$(libexec_PROGRAMS)'; test -n "$$list" || exit 0; \
|
||||
echo " rm -f" $$list; \
|
||||
rm -f $$list || exit $$?; \
|
||||
test -n "$(EXEEXT)" || exit 0; \
|
||||
list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
|
||||
echo " rm -f" $$list; \
|
||||
rm -f $$list
|
||||
bandb$(EXEEXT): $(bandb_OBJECTS) $(bandb_DEPENDENCIES) $(EXTRA_bandb_DEPENDENCIES)
|
||||
@rm -f bandb$(EXEEXT)
|
||||
$(LINK) $(bandb_OBJECTS) $(bandb_LDADD) $(LIBS)
|
||||
bantool$(EXEEXT): $(bantool_OBJECTS) $(bantool_DEPENDENCIES) $(EXTRA_bantool_DEPENDENCIES)
|
||||
@rm -f bantool$(EXEEXT)
|
||||
$(LINK) $(bantool_OBJECTS) $(bantool_LDADD) $(LIBS)
|
||||
|
||||
mostlyclean-compile:
|
||||
-rm -f *.$(OBJEXT)
|
||||
|
||||
distclean-compile:
|
||||
-rm -f *.tab.c
|
||||
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bandb.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bantool.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rsdb_snprintf.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rsdb_sqlite3.Po@am__quote@
|
||||
|
||||
.c.o:
|
||||
@am__fastdepCC_TRUE@ depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
|
||||
@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
|
||||
@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(COMPILE) -c -o $@ $<
|
||||
|
||||
.c.obj:
|
||||
@am__fastdepCC_TRUE@ depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
|
||||
@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\
|
||||
@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
|
||||
|
||||
.c.lo:
|
||||
@am__fastdepCC_TRUE@ depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\
|
||||
@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
|
||||
@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
|
||||
|
||||
mostlyclean-libtool:
|
||||
-rm -f *.lo
|
||||
|
||||
clean-libtool:
|
||||
-rm -rf .libs _libs
|
||||
|
||||
# This directory's subdirectories are mostly independent; you can cd
|
||||
# into them and run `make' without going through this Makefile.
|
||||
# To change the values of `make' variables: instead of editing Makefiles,
|
||||
# (1) if the variable is set in `config.status', edit `config.status'
|
||||
# (which will cause the Makefiles to be regenerated when you run `make');
|
||||
# (2) otherwise, pass the desired values on the `make' command line.
|
||||
$(RECURSIVE_TARGETS):
|
||||
@fail= failcom='exit 1'; \
|
||||
for f in x $$MAKEFLAGS; do \
|
||||
case $$f in \
|
||||
*=* | --[!k]*);; \
|
||||
*k*) failcom='fail=yes';; \
|
||||
esac; \
|
||||
done; \
|
||||
dot_seen=no; \
|
||||
target=`echo $@ | sed s/-recursive//`; \
|
||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||
echo "Making $$target in $$subdir"; \
|
||||
if test "$$subdir" = "."; then \
|
||||
dot_seen=yes; \
|
||||
local_target="$$target-am"; \
|
||||
else \
|
||||
local_target="$$target"; \
|
||||
fi; \
|
||||
($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|
||||
|| eval $$failcom; \
|
||||
done; \
|
||||
if test "$$dot_seen" = "no"; then \
|
||||
$(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
|
||||
fi; test -z "$$fail"
|
||||
|
||||
$(RECURSIVE_CLEAN_TARGETS):
|
||||
@fail= failcom='exit 1'; \
|
||||
for f in x $$MAKEFLAGS; do \
|
||||
case $$f in \
|
||||
*=* | --[!k]*);; \
|
||||
*k*) failcom='fail=yes';; \
|
||||
esac; \
|
||||
done; \
|
||||
dot_seen=no; \
|
||||
case "$@" in \
|
||||
distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
|
||||
*) list='$(SUBDIRS)' ;; \
|
||||
esac; \
|
||||
rev=''; for subdir in $$list; do \
|
||||
if test "$$subdir" = "."; then :; else \
|
||||
rev="$$subdir $$rev"; \
|
||||
fi; \
|
||||
done; \
|
||||
rev="$$rev ."; \
|
||||
target=`echo $@ | sed s/-recursive//`; \
|
||||
for subdir in $$rev; do \
|
||||
echo "Making $$target in $$subdir"; \
|
||||
if test "$$subdir" = "."; then \
|
||||
local_target="$$target-am"; \
|
||||
else \
|
||||
local_target="$$target"; \
|
||||
fi; \
|
||||
($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|
||||
|| eval $$failcom; \
|
||||
done && test -z "$$fail"
|
||||
tags-recursive:
|
||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||
test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
|
||||
done
|
||||
ctags-recursive:
|
||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||
test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
|
||||
done
|
||||
|
||||
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
|
||||
END { if (nonempty) { for (i in files) print i; }; }'`; \
|
||||
mkid -fID $$unique
|
||||
tags: TAGS
|
||||
|
||||
TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
set x; \
|
||||
here=`pwd`; \
|
||||
if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
|
||||
include_option=--etags-include; \
|
||||
empty_fix=.; \
|
||||
else \
|
||||
include_option=--include; \
|
||||
empty_fix=; \
|
||||
fi; \
|
||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||
if test "$$subdir" = .; then :; else \
|
||||
test ! -f $$subdir/TAGS || \
|
||||
set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
|
||||
fi; \
|
||||
done; \
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
|
||||
END { if (nonempty) { for (i in files) print i; }; }'`; \
|
||||
shift; \
|
||||
if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
|
||||
test -n "$$unique" || unique=$$empty_fix; \
|
||||
if test $$# -gt 0; then \
|
||||
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
||||
"$$@" $$unique; \
|
||||
else \
|
||||
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
||||
$$unique; \
|
||||
fi; \
|
||||
fi
|
||||
ctags: CTAGS
|
||||
CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
|
||||
END { if (nonempty) { for (i in files) print i; }; }'`; \
|
||||
test -z "$(CTAGS_ARGS)$$unique" \
|
||||
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
|
||||
$$unique
|
||||
|
||||
GTAGS:
|
||||
here=`$(am__cd) $(top_builddir) && pwd` \
|
||||
&& $(am__cd) $(top_srcdir) \
|
||||
&& gtags -i $(GTAGS_ARGS) "$$here"
|
||||
|
||||
distclean-tags:
|
||||
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
|
||||
|
||||
distdir: $(DISTFILES)
|
||||
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
|
||||
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
|
||||
list='$(DISTFILES)'; \
|
||||
dist_files=`for file in $$list; do echo $$file; done | \
|
||||
sed -e "s|^$$srcdirstrip/||;t" \
|
||||
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
|
||||
case $$dist_files in \
|
||||
*/*) $(MKDIR_P) `echo "$$dist_files" | \
|
||||
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
|
||||
sort -u` ;; \
|
||||
esac; \
|
||||
for file in $$dist_files; do \
|
||||
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
|
||||
if test -d $$d/$$file; then \
|
||||
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
|
||||
if test -d "$(distdir)/$$file"; then \
|
||||
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
|
||||
fi; \
|
||||
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
|
||||
cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
|
||||
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
|
||||
fi; \
|
||||
cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
|
||||
else \
|
||||
test -f "$(distdir)/$$file" \
|
||||
|| cp -p $$d/$$file "$(distdir)/$$file" \
|
||||
|| exit 1; \
|
||||
fi; \
|
||||
done
|
||||
@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
|
||||
if test "$$subdir" = .; then :; else \
|
||||
$(am__make_dryrun) \
|
||||
|| test -d "$(distdir)/$$subdir" \
|
||||
|| $(MKDIR_P) "$(distdir)/$$subdir" \
|
||||
|| exit 1; \
|
||||
dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
|
||||
$(am__relativize); \
|
||||
new_distdir=$$reldir; \
|
||||
dir1=$$subdir; dir2="$(top_distdir)"; \
|
||||
$(am__relativize); \
|
||||
new_top_distdir=$$reldir; \
|
||||
echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
|
||||
echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
|
||||
($(am__cd) $$subdir && \
|
||||
$(MAKE) $(AM_MAKEFLAGS) \
|
||||
top_distdir="$$new_top_distdir" \
|
||||
distdir="$$new_distdir" \
|
||||
am__remove_distdir=: \
|
||||
am__skip_length_check=: \
|
||||
am__skip_mode_fix=: \
|
||||
distdir) \
|
||||
|| exit 1; \
|
||||
fi; \
|
||||
done
|
||||
check-am: all-am
|
||||
check: check-recursive
|
||||
all-am: Makefile $(PROGRAMS)
|
||||
installdirs: installdirs-recursive
|
||||
installdirs-am:
|
||||
for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(libexecdir)"; do \
|
||||
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
|
||||
done
|
||||
install: install-recursive
|
||||
install-exec: install-exec-recursive
|
||||
install-data: install-data-recursive
|
||||
uninstall: uninstall-recursive
|
||||
|
||||
install-am: all-am
|
||||
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
|
||||
|
||||
installcheck: installcheck-recursive
|
||||
install-strip:
|
||||
if test -z '$(STRIP)'; then \
|
||||
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
||||
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
|
||||
install; \
|
||||
else \
|
||||
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
||||
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
|
||||
"INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
|
||||
fi
|
||||
mostlyclean-generic:
|
||||
|
||||
clean-generic:
|
||||
|
||||
distclean-generic:
|
||||
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
||||
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
|
||||
|
||||
maintainer-clean-generic:
|
||||
@echo "This command is intended for maintainers to use"
|
||||
@echo "it deletes files that may require special tools to rebuild."
|
||||
clean: clean-recursive
|
||||
|
||||
clean-am: clean-binPROGRAMS clean-generic clean-libexecPROGRAMS \
|
||||
clean-libtool mostlyclean-am
|
||||
|
||||
distclean: distclean-recursive
|
||||
-rm -rf ./$(DEPDIR)
|
||||
-rm -f Makefile
|
||||
distclean-am: clean-am distclean-compile distclean-generic \
|
||||
distclean-tags
|
||||
|
||||
dvi: dvi-recursive
|
||||
|
||||
dvi-am:
|
||||
|
||||
html: html-recursive
|
||||
|
||||
html-am:
|
||||
|
||||
info: info-recursive
|
||||
|
||||
info-am:
|
||||
|
||||
install-data-am:
|
||||
|
||||
install-dvi: install-dvi-recursive
|
||||
|
||||
install-dvi-am:
|
||||
|
||||
install-exec-am: install-binPROGRAMS install-libexecPROGRAMS
|
||||
|
||||
install-html: install-html-recursive
|
||||
|
||||
install-html-am:
|
||||
|
||||
install-info: install-info-recursive
|
||||
|
||||
install-info-am:
|
||||
|
||||
install-man:
|
||||
|
||||
install-pdf: install-pdf-recursive
|
||||
|
||||
install-pdf-am:
|
||||
|
||||
install-ps: install-ps-recursive
|
||||
|
||||
install-ps-am:
|
||||
|
||||
installcheck-am:
|
||||
|
||||
maintainer-clean: maintainer-clean-recursive
|
||||
-rm -rf ./$(DEPDIR)
|
||||
-rm -f Makefile
|
||||
maintainer-clean-am: distclean-am maintainer-clean-generic
|
||||
|
||||
mostlyclean: mostlyclean-recursive
|
||||
|
||||
mostlyclean-am: mostlyclean-compile mostlyclean-generic \
|
||||
mostlyclean-libtool
|
||||
|
||||
pdf: pdf-recursive
|
||||
|
||||
pdf-am:
|
||||
|
||||
ps: ps-recursive
|
||||
|
||||
ps-am:
|
||||
|
||||
uninstall-am: uninstall-binPROGRAMS uninstall-libexecPROGRAMS
|
||||
|
||||
.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
|
||||
install-am install-strip tags-recursive
|
||||
|
||||
.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
|
||||
all all-am check check-am clean clean-binPROGRAMS \
|
||||
clean-generic clean-libexecPROGRAMS clean-libtool ctags \
|
||||
ctags-recursive distclean distclean-compile distclean-generic \
|
||||
distclean-libtool distclean-tags distdir dvi dvi-am html \
|
||||
html-am info info-am install install-am install-binPROGRAMS \
|
||||
install-data install-data-am install-dvi install-dvi-am \
|
||||
install-exec install-exec-am install-html install-html-am \
|
||||
install-info install-info-am install-libexecPROGRAMS \
|
||||
install-man install-pdf install-pdf-am install-ps \
|
||||
install-ps-am install-strip installcheck installcheck-am \
|
||||
installdirs installdirs-am maintainer-clean \
|
||||
maintainer-clean-generic mostlyclean mostlyclean-compile \
|
||||
mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
|
||||
tags tags-recursive uninstall uninstall-am \
|
||||
uninstall-binPROGRAMS uninstall-libexecPROGRAMS
|
||||
|
||||
|
||||
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
||||
# Otherwise a system limit (for SysV at least) may be exceeded.
|
||||
.NOEXPORT:
|
304
ircd-ratbox-3.0.10/bandb/bandb.c
Normal file
304
ircd-ratbox-3.0.10/bandb/bandb.c
Normal file
@ -0,0 +1,304 @@
|
||||
/* bandb/bandb.c
|
||||
*
|
||||
* Copyright (C) 2006 Lee Hardy <lee -at- leeh.co.uk>
|
||||
* Copyright (C) 2006-2012 ircd-ratbox development team
|
||||
*
|
||||
* 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.The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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.
|
||||
*
|
||||
* $Id: bandb.c 29265 2015-12-20 04:35:39Z androsyn $
|
||||
*/
|
||||
#include "setup.h"
|
||||
#include <ratbox_lib.h>
|
||||
#include "config.h"
|
||||
#include "rsdb.h"
|
||||
#include "common.h"
|
||||
|
||||
|
||||
#define MAXPARA 10
|
||||
|
||||
typedef enum
|
||||
{
|
||||
BANDB_KLINE,
|
||||
BANDB_DLINE,
|
||||
BANDB_XLINE,
|
||||
BANDB_RESV,
|
||||
LAST_BANDB_TYPE
|
||||
} bandb_type;
|
||||
|
||||
static char bandb_letter[LAST_BANDB_TYPE] = {
|
||||
'K', 'D', 'X', 'R'
|
||||
};
|
||||
|
||||
static const char *bandb_table[LAST_BANDB_TYPE] = {
|
||||
"kline", "dline", "xline", "resv"
|
||||
};
|
||||
|
||||
|
||||
static rb_helper *bandb_helper;
|
||||
|
||||
static void check_schema(void);
|
||||
|
||||
static void
|
||||
parse_ban(bandb_type type, char *parv[], int parc)
|
||||
{
|
||||
const char *mask1 = NULL;
|
||||
const char *mask2 = NULL;
|
||||
const char *oper = NULL;
|
||||
const char *curtime = NULL;
|
||||
const char *reason = NULL;
|
||||
const char *perm = NULL;
|
||||
int para = 1;
|
||||
|
||||
if(type == BANDB_KLINE)
|
||||
{
|
||||
if(parc != 7)
|
||||
return;
|
||||
}
|
||||
else if(parc != 6)
|
||||
return;
|
||||
|
||||
mask1 = parv[para++];
|
||||
|
||||
if(type == BANDB_KLINE)
|
||||
mask2 = parv[para++];
|
||||
|
||||
oper = parv[para++];
|
||||
curtime = parv[para++];
|
||||
perm = parv[para++];
|
||||
reason = parv[para++];
|
||||
|
||||
rsdb_exec(NULL,
|
||||
"INSERT INTO %s (mask1, mask2, oper, time, perm, reason) VALUES('%Q', '%Q', '%Q', %s, %s, '%Q')",
|
||||
bandb_table[type], mask1, mask2 ? mask2 : "", oper, curtime, perm, reason);
|
||||
}
|
||||
|
||||
static void
|
||||
parse_unban(bandb_type type, char *parv[], int parc)
|
||||
{
|
||||
const char *mask1 = NULL;
|
||||
const char *mask2 = NULL;
|
||||
|
||||
if(type == BANDB_KLINE)
|
||||
{
|
||||
if(parc != 3)
|
||||
return;
|
||||
}
|
||||
else if(parc != 2)
|
||||
return;
|
||||
|
||||
mask1 = parv[1];
|
||||
|
||||
if(type == BANDB_KLINE)
|
||||
mask2 = parv[2];
|
||||
|
||||
rsdb_exec(NULL, "DELETE FROM %s WHERE mask1='%Q' AND mask2='%Q'",
|
||||
bandb_table[type], mask1, mask2 ? mask2 : "");
|
||||
}
|
||||
|
||||
static void
|
||||
list_bans(void)
|
||||
{
|
||||
static char buf[512];
|
||||
struct rsdb_table table;
|
||||
int i, j;
|
||||
|
||||
/* schedule a clear of anything already pending */
|
||||
rb_helper_write_queue(bandb_helper, "C");
|
||||
|
||||
for(i = 0; i < LAST_BANDB_TYPE; i++)
|
||||
{
|
||||
rsdb_exec_fetch(&table, "SELECT mask1,mask2,oper,reason FROM %s WHERE 1",
|
||||
bandb_table[i]);
|
||||
|
||||
for(j = 0; j < table.row_count; j++)
|
||||
{
|
||||
if(i == BANDB_KLINE)
|
||||
rb_snprintf(buf, sizeof(buf), "%c %s %s %s :%s",
|
||||
bandb_letter[i], table.row[j][0],
|
||||
table.row[j][1], table.row[j][2], table.row[j][3]);
|
||||
else
|
||||
rb_snprintf(buf, sizeof(buf), "%c %s %s :%s",
|
||||
bandb_letter[i], table.row[j][0],
|
||||
table.row[j][2], table.row[j][3]);
|
||||
|
||||
rb_helper_write_queue(bandb_helper, "%s", buf);
|
||||
}
|
||||
|
||||
rsdb_exec_fetch_end(&table);
|
||||
}
|
||||
|
||||
rb_helper_write(bandb_helper, "F");
|
||||
}
|
||||
|
||||
static void
|
||||
parse_request(rb_helper *helper)
|
||||
{
|
||||
static char *parv[MAXPARA + 1];
|
||||
static char readbuf[READBUF_SIZE];
|
||||
int parc;
|
||||
int len;
|
||||
|
||||
|
||||
while((len = rb_helper_read(helper, readbuf, sizeof(readbuf))) > 0)
|
||||
{
|
||||
parc = rb_string_to_array(readbuf, parv, MAXPARA);
|
||||
|
||||
if(parc < 1)
|
||||
continue;
|
||||
|
||||
switch (parv[0][0])
|
||||
{
|
||||
case 'K':
|
||||
parse_ban(BANDB_KLINE, parv, parc);
|
||||
break;
|
||||
|
||||
case 'D':
|
||||
parse_ban(BANDB_DLINE, parv, parc);
|
||||
break;
|
||||
|
||||
case 'X':
|
||||
parse_ban(BANDB_XLINE, parv, parc);
|
||||
break;
|
||||
|
||||
case 'R':
|
||||
parse_ban(BANDB_RESV, parv, parc);
|
||||
break;
|
||||
|
||||
case 'k':
|
||||
parse_unban(BANDB_KLINE, parv, parc);
|
||||
break;
|
||||
|
||||
case 'd':
|
||||
parse_unban(BANDB_DLINE, parv, parc);
|
||||
break;
|
||||
|
||||
case 'x':
|
||||
parse_unban(BANDB_XLINE, parv, parc);
|
||||
break;
|
||||
|
||||
case 'r':
|
||||
parse_unban(BANDB_RESV, parv, parc);
|
||||
break;
|
||||
|
||||
case 'L':
|
||||
list_bans();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
error_cb(rb_helper *helper)
|
||||
{
|
||||
exit(1);
|
||||
}
|
||||
|
||||
static void
|
||||
setup_signals()
|
||||
{
|
||||
#ifndef WINDOWS
|
||||
struct sigaction act;
|
||||
|
||||
act.sa_flags = 0;
|
||||
act.sa_handler = SIG_IGN;
|
||||
sigemptyset(&act.sa_mask);
|
||||
sigaddset(&act.sa_mask, SIGPIPE);
|
||||
sigaction(SIGPIPE, &act, 0);
|
||||
sigaddset(&act.sa_mask, SIGINT);
|
||||
sigaction(SIGINT, &act, 0);
|
||||
sigaddset(&act.sa_mask, SIGALRM);
|
||||
sigaction(SIGALRM, &act, 0);
|
||||
#ifdef SIGTRAP
|
||||
sigaddset(&act.sa_mask, SIGTRAP);
|
||||
sigaction(SIGTRAP, &act, 0);
|
||||
#endif
|
||||
|
||||
#ifdef SIGWINCH
|
||||
sigaddset(&act.sa_mask, SIGWINCH);
|
||||
sigaction(SIGWINCH, &act, 0);
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
db_error_cb(const char *errstr)
|
||||
{
|
||||
char buf[256];
|
||||
rb_snprintf(buf, sizeof(buf), "! :%s", errstr);
|
||||
rb_helper_write(bandb_helper, "%s", buf);
|
||||
rb_sleep(2 << 29, 0);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
int
|
||||
main(int argc, char *argv[])
|
||||
{
|
||||
const char *dbpath;
|
||||
setup_signals();
|
||||
bandb_helper = rb_helper_child(parse_request, error_cb, NULL, NULL, NULL, 256, 256, 256, 256); /* XXX fix me */
|
||||
if(bandb_helper == NULL)
|
||||
{
|
||||
fprintf(stderr,
|
||||
"This is ircd-ratbox bandb. You aren't supposed to run me directly. Maybe you want bantool?\n");
|
||||
fprintf(stderr,
|
||||
"However I will print my Id tag $Id: bandb.c 29265 2015-12-20 04:35:39Z androsyn $\n");
|
||||
fprintf(stderr, "Have a nice day\n");
|
||||
exit(1);
|
||||
}
|
||||
dbpath = getenv("BANDB_DPATH");
|
||||
if(dbpath == NULL)
|
||||
dbpath = DBPATH;
|
||||
|
||||
rsdb_init(dbpath, db_error_cb);
|
||||
check_schema();
|
||||
rb_helper_loop(bandb_helper, 0);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
check_schema(void)
|
||||
{
|
||||
struct rsdb_table table;
|
||||
int i;
|
||||
|
||||
for(i = 0; i < LAST_BANDB_TYPE; i++)
|
||||
{
|
||||
rsdb_exec_fetch(&table,
|
||||
"SELECT name FROM sqlite_master WHERE type='table' AND name='%s'",
|
||||
bandb_table[i]);
|
||||
|
||||
rsdb_exec_fetch_end(&table);
|
||||
|
||||
if(!table.row_count)
|
||||
rsdb_exec(NULL,
|
||||
"CREATE TABLE %s (mask1 TEXT, mask2 TEXT, oper TEXT, time INTEGER, perm INTEGER, reason TEXT)",
|
||||
bandb_table[i]);
|
||||
}
|
||||
}
|
899
ircd-ratbox-3.0.10/bandb/bantool.c
Normal file
899
ircd-ratbox-3.0.10/bandb/bantool.c
Normal file
@ -0,0 +1,899 @@
|
||||
/**
|
||||
* ircd-ratbox: A slightly useful ircd.
|
||||
* bantool.c: The ircd-ratbox database managment tool.
|
||||
*
|
||||
* Copyright (C) 1990 Jarkko Oikarinen and University of Oulu, Co Center
|
||||
* Copyright (C) 1996-2002 Hybrid Development Team
|
||||
* Copyright (C) 2002-2012 ircd-ratbox development team
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
|
||||
* USA
|
||||
*
|
||||
* The following server admins have either contributed various configs to test against,
|
||||
* or helped with debugging and feature requests. Many thanks to them.
|
||||
* stevoo / efnet.port80.se
|
||||
* AndroSyn / irc2.choopa.net, irc.igs.ca
|
||||
* Salvation / irc.blessed.net
|
||||
* JamesOff / efnet.demon.co.uk
|
||||
*
|
||||
* $Id: bantool.c 27371 2012-03-16 05:33:15Z dubkat $
|
||||
*
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <time.h>
|
||||
|
||||
#include "serno.h"
|
||||
#include "patchlevel.h"
|
||||
#include "stdinc.h"
|
||||
#include "rsdb.h"
|
||||
|
||||
#define EmptyString(x) ((x == NULL) || (*(x) == '\0'))
|
||||
#define CheckEmpty(x) EmptyString(x) ? "" : x
|
||||
|
||||
typedef enum
|
||||
{
|
||||
BANDB_KLINE,
|
||||
BANDB_KLINE_PERM,
|
||||
BANDB_DLINE,
|
||||
BANDB_DLINE_PERM,
|
||||
BANDB_XLINE,
|
||||
BANDB_XLINE_PERM,
|
||||
BANDB_RESV,
|
||||
BANDB_RESV_PERM,
|
||||
LAST_BANDB_TYPE
|
||||
} bandb_type;
|
||||
|
||||
|
||||
static char bandb_letter[LAST_BANDB_TYPE] = {
|
||||
'K', 'K', 'D', 'D', 'X', 'X', 'R', 'R'
|
||||
};
|
||||
|
||||
static const char *bandb_table[LAST_BANDB_TYPE] = {
|
||||
"kline", "kline", "dline", "dline", "xline", "xline", "resv", "resv"
|
||||
};
|
||||
|
||||
static const char *bandb_suffix[LAST_BANDB_TYPE] = {
|
||||
"", ".perm",
|
||||
"", ".perm",
|
||||
"", ".perm",
|
||||
"", ".perm"
|
||||
};
|
||||
|
||||
static char me[PATH_MAX];
|
||||
|
||||
/* *INDENT-OFF* */
|
||||
/* report counters */
|
||||
struct counter
|
||||
{
|
||||
unsigned int klines;
|
||||
unsigned int dlines;
|
||||
unsigned int xlines;
|
||||
unsigned int resvs;
|
||||
unsigned int error;
|
||||
} count = {0, 0, 0, 0, 0};
|
||||
|
||||
/* flags set by command line options */
|
||||
struct flags
|
||||
{
|
||||
int none;
|
||||
int export;
|
||||
int import;
|
||||
int verify;
|
||||
int vacuum;
|
||||
int pretend;
|
||||
int verbose;
|
||||
int wipe;
|
||||
int dupes_ok;
|
||||
char *path;
|
||||
} flag = {YES, NO, NO, NO, NO, NO, NO, NO, NO, NULL};
|
||||
/* *INDENT-ON* */
|
||||
|
||||
static int table_has_rows(const char *table);
|
||||
static int table_exists(const char *table);
|
||||
|
||||
static const char *clean_gecos_field(const char *gecos);
|
||||
static char *smalldate(const char *string);
|
||||
static char *getfield(char *newline);
|
||||
static char *strip_quotes(const char *string);
|
||||
static char *mangle_reason(const char *string);
|
||||
static char *escape_quotes(const char *string);
|
||||
|
||||
static void db_error_cb(const char *errstr);
|
||||
static void db_reclaim_slack(void);
|
||||
static void export_config(const char *conf, int id);
|
||||
static void import_config(const char *conf, int id);
|
||||
static void check_schema(void);
|
||||
static void print_help(int i_exit);
|
||||
static void wipe_schema(void);
|
||||
static void drop_dupes(const char *user, const char *host, const char *t);
|
||||
|
||||
/**
|
||||
* swing your pants
|
||||
*/
|
||||
int
|
||||
main(int argc, char *argv[])
|
||||
{
|
||||
char etc[PATH_MAX];
|
||||
char conf[PATH_MAX];
|
||||
int opt;
|
||||
int i;
|
||||
|
||||
rb_strlcpy(me, argv[0], sizeof(me));
|
||||
|
||||
while((opt = getopt(argc, argv, "hieuspvwdf:")) != -1)
|
||||
{
|
||||
switch (opt)
|
||||
{
|
||||
case 'h':
|
||||
print_help(EXIT_SUCCESS);
|
||||
break;
|
||||
case 'i':
|
||||
flag.none = NO;
|
||||
flag.import = YES;
|
||||
break;
|
||||
case 'e':
|
||||
flag.none = NO;
|
||||
flag.export = YES;
|
||||
break;
|
||||
case 'u':
|
||||
flag.none = NO;
|
||||
flag.verify = YES;
|
||||
break;
|
||||
case 's':
|
||||
flag.none = NO;
|
||||
flag.vacuum = YES;
|
||||
break;
|
||||
case 'p':
|
||||
flag.pretend = YES;
|
||||
break;
|
||||
case 'v':
|
||||
flag.verbose = YES;
|
||||
break;
|
||||
case 'w':
|
||||
flag.wipe = YES;
|
||||
break;
|
||||
case 'd':
|
||||
flag.dupes_ok = YES;
|
||||
break;
|
||||
case 'f':
|
||||
flag.path = rb_strdup(optarg);
|
||||
fprintf(stderr, "flag.path: %s\n", flag.path);
|
||||
break;
|
||||
default: /* '?' */
|
||||
print_help(EXIT_FAILURE);
|
||||
}
|
||||
}
|
||||
/* they should really read the help. */
|
||||
if(flag.none)
|
||||
print_help(EXIT_FAILURE);
|
||||
|
||||
if(flag.path == NULL)
|
||||
flag.path = rb_strdup(DBPATH);
|
||||
|
||||
if((flag.import && flag.export) || (flag.export && flag.wipe)
|
||||
|| (flag.verify && flag.pretend) || (flag.export && flag.pretend))
|
||||
{
|
||||
fprintf(stderr, "* Error: Conflicting flags.\n");
|
||||
if(flag.export && flag.pretend)
|
||||
fprintf(stderr, "* There is nothing to 'pretend' when exporting.\n");
|
||||
|
||||
fprintf(stderr, "* For an explination of commands, run: %s -h\n", me);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
if(argv[optind] != NULL)
|
||||
rb_strlcpy(etc, argv[optind], sizeof(etc));
|
||||
else
|
||||
rb_strlcpy(etc, ETCPATH, sizeof(ETCPATH));
|
||||
|
||||
fprintf(stdout,
|
||||
"* bantool v.%s built for %s ($Id: bantool.c 27371 2012-03-16 05:33:15Z dubkat $)\n",
|
||||
SERIALNUM, PATCHLEVEL);
|
||||
|
||||
if(flag.pretend == NO)
|
||||
{
|
||||
if(rsdb_init(flag.path, db_error_cb) == -1)
|
||||
{
|
||||
fprintf(stderr, "* Error: Unable to open database\n");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
check_schema();
|
||||
|
||||
if(flag.vacuum)
|
||||
db_reclaim_slack();
|
||||
|
||||
if(flag.import && flag.wipe)
|
||||
{
|
||||
flag.dupes_ok = YES; /* dont check for dupes if we are wiping the db clean */
|
||||
for(i = 0; i < 3; i++)
|
||||
fprintf(stdout,
|
||||
"* WARNING: YOU ARE ABOUT TO WIPE YOUR DATABASE!\n");
|
||||
|
||||
fprintf(stdout, "* Press ^C to abort! ");
|
||||
fflush(stdout);
|
||||
rb_sleep(10, 0);
|
||||
fprintf(stdout, "Carrying on...\n");
|
||||
wipe_schema();
|
||||
}
|
||||
}
|
||||
if(flag.verbose && flag.dupes_ok == YES)
|
||||
fprintf(stdout, "* Allowing duplicate bans...\n");
|
||||
|
||||
/* checking for our files to import or export */
|
||||
for(i = 0; i < LAST_BANDB_TYPE; i++)
|
||||
{
|
||||
rb_snprintf(conf, sizeof(conf), "%s/%s.conf%s",
|
||||
etc, bandb_table[i], bandb_suffix[i]);
|
||||
|
||||
if(flag.import && flag.pretend == NO)
|
||||
rsdb_transaction(RSDB_TRANS_START);
|
||||
|
||||
if(flag.import)
|
||||
import_config(conf, i);
|
||||
|
||||
if(flag.export)
|
||||
export_config(conf, i);
|
||||
|
||||
if(flag.import && flag.pretend == NO)
|
||||
rsdb_transaction(RSDB_TRANS_END);
|
||||
}
|
||||
|
||||
if(flag.import)
|
||||
{
|
||||
if(count.error && flag.verbose)
|
||||
fprintf(stderr, "* I was unable to locate %i config files to import.\n",
|
||||
count.error);
|
||||
|
||||
fprintf(stdout, "* Import Stats: Klines: %i, Dlines: %i, Xlines: %i, Resvs: %i \n",
|
||||
count.klines, count.dlines, count.xlines, count.resvs);
|
||||
|
||||
fprintf(stdout,
|
||||
"*\n* If your IRC server is currently running, newly imported bans \n* will not take effect until you issue the command: /quote rehash bans\n");
|
||||
|
||||
if(flag.pretend)
|
||||
fprintf(stdout,
|
||||
"* Pretend mode engaged. Nothing was actually entered into the database.\n");
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* export the database to old-style flat files
|
||||
*/
|
||||
static void
|
||||
export_config(const char *conf, int id)
|
||||
{
|
||||
struct rsdb_table table;
|
||||
static char sql[BUFSIZE * 2];
|
||||
static char buf[512];
|
||||
FILE *fd = NULL;
|
||||
int j;
|
||||
|
||||
/* for sanity sake */
|
||||
const int mask1 = 0;
|
||||
const int mask2 = 1;
|
||||
const int reason = 2;
|
||||
const int oper = 3;
|
||||
const int ts = 4;
|
||||
/* const int perm = 5; */
|
||||
|
||||
if(!table_has_rows(bandb_table[id]))
|
||||
return;
|
||||
|
||||
if(strstr(conf, ".perm") != 0)
|
||||
rb_snprintf(sql, sizeof(sql),
|
||||
"SELECT DISTINCT mask1,mask2,reason,oper,time FROM %s WHERE perm = 1 ORDER BY time",
|
||||
bandb_table[id]);
|
||||
else
|
||||
rb_snprintf(sql, sizeof(sql),
|
||||
"SELECT DISTINCT mask1,mask2,reason,oper,time FROM %s WHERE perm = 0 ORDER BY time",
|
||||
bandb_table[id]);
|
||||
|
||||
rsdb_exec_fetch(&table, sql);
|
||||
if(table.row_count <= 0)
|
||||
{
|
||||
rsdb_exec_fetch_end(&table);
|
||||
return;
|
||||
}
|
||||
|
||||
if(flag.verbose)
|
||||
fprintf(stdout, "* checking for %s: ", conf); /* debug */
|
||||
|
||||
/* open config for reading, or skip to the next */
|
||||
if(!(fd = fopen(conf, "w")))
|
||||
{
|
||||
if(flag.verbose)
|
||||
fprintf(stdout, "\tmissing.\n");
|
||||
count.error++;
|
||||
return;
|
||||
}
|
||||
|
||||
for(j = 0; j < table.row_count; j++)
|
||||
{
|
||||
switch (id)
|
||||
{
|
||||
case BANDB_DLINE:
|
||||
case BANDB_DLINE_PERM:
|
||||
rb_snprintf(buf, sizeof(buf),
|
||||
"\"%s\",\"%s\",\"\",\"%s\",\"%s\",%s\n",
|
||||
table.row[j][mask1],
|
||||
mangle_reason(table.row[j][reason]),
|
||||
smalldate(table.row[j][ts]),
|
||||
table.row[j][oper], table.row[j][ts]);
|
||||
break;
|
||||
|
||||
case BANDB_XLINE:
|
||||
case BANDB_XLINE_PERM:
|
||||
rb_snprintf(buf, sizeof(buf),
|
||||
"\"%s\",\"0\",\"%s\",\"%s\",%s\n",
|
||||
escape_quotes(table.row[j][mask1]),
|
||||
mangle_reason(table.row[j][reason]),
|
||||
table.row[j][oper], table.row[j][ts]);
|
||||
break;
|
||||
|
||||
case BANDB_RESV:
|
||||
case BANDB_RESV_PERM:
|
||||
rb_snprintf(buf, sizeof(buf),
|
||||
"\"%s\",\"%s\",\"%s\",%s\n",
|
||||
table.row[j][mask1],
|
||||
mangle_reason(table.row[j][reason]),
|
||||
table.row[j][oper], table.row[j][ts]);
|
||||
break;
|
||||
|
||||
|
||||
default: /* Klines */
|
||||
rb_snprintf(buf, sizeof(buf),
|
||||
"\"%s\",\"%s\",\"%s\",\"\",\"%s\",\"%s\",%s\n",
|
||||
table.row[j][mask1], table.row[j][mask2],
|
||||
mangle_reason(table.row[j][reason]),
|
||||
smalldate(table.row[j][ts]), table.row[j][oper],
|
||||
table.row[j][ts]);
|
||||
break;
|
||||
}
|
||||
|
||||
fprintf(fd, "%s", buf);
|
||||
}
|
||||
|
||||
rsdb_exec_fetch_end(&table);
|
||||
if(flag.verbose)
|
||||
fprintf(stdout, "\twritten.\n");
|
||||
fclose(fd);
|
||||
}
|
||||
|
||||
/**
|
||||
* attempt to condense the individual conf functions into one
|
||||
*/
|
||||
static void
|
||||
import_config(const char *conf, int id)
|
||||
{
|
||||
FILE *fd;
|
||||
|
||||
char line[BUFSIZE];
|
||||
char *p;
|
||||
int i = 0;
|
||||
|
||||
char f_perm = 0;
|
||||
char *f_mask1 = NULL;
|
||||
char *f_mask2 = NULL;
|
||||
char *f_oper = NULL;
|
||||
char *f_time = NULL;
|
||||
char *f_reason = NULL;
|
||||
char *f_oreason = NULL;
|
||||
char newreason[REASONLEN];
|
||||
|
||||
if(flag.verbose)
|
||||
fprintf(stdout, "* checking for %s: ", conf); /* debug */
|
||||
|
||||
/* open config for reading, or skip to the next */
|
||||
if(!(fd = fopen(conf, "r")))
|
||||
{
|
||||
if(flag.verbose)
|
||||
fprintf(stdout, "%*s", strlen(bandb_suffix[id]) > 0 ? 10 : 15,
|
||||
"missing.\n");
|
||||
count.error++;
|
||||
return;
|
||||
}
|
||||
|
||||
if(strstr(conf, ".perm") != 0)
|
||||
f_perm = 1;
|
||||
|
||||
|
||||
/* xline
|
||||
* "SYSTEM","0","banned","stevoo!stevoo@efnet.port80.se{stevoo}",1111080437
|
||||
* resv
|
||||
* "OseK","banned nickname","stevoo!stevoo@efnet.port80.se{stevoo}",1111031619
|
||||
* dline
|
||||
* "194.158.192.0/19","laptop scammers","","2005/3/17 05.33","stevoo!stevoo@efnet.port80.se{stevoo}",1111033988
|
||||
*/
|
||||
while(fgets(line, sizeof(line), fd))
|
||||
{
|
||||
if((p = strpbrk(line, "\r\n")) != NULL)
|
||||
*p = '\0';
|
||||
|
||||
if((*line == '\0') || (*line == '#'))
|
||||
continue;
|
||||
|
||||
/* mask1 */
|
||||
f_mask1 = getfield(line);
|
||||
|
||||
if(EmptyString(f_mask1))
|
||||
continue;
|
||||
|
||||
/* mask2 */
|
||||
switch (id)
|
||||
{
|
||||
case BANDB_XLINE:
|
||||
case BANDB_XLINE_PERM:
|
||||
f_mask1 = escape_quotes(clean_gecos_field(f_mask1));
|
||||
getfield(NULL); /* empty field */
|
||||
break;
|
||||
|
||||
case BANDB_RESV:
|
||||
case BANDB_RESV_PERM:
|
||||
case BANDB_DLINE:
|
||||
case BANDB_DLINE_PERM:
|
||||
break;
|
||||
|
||||
default:
|
||||
f_mask2 = getfield(NULL);
|
||||
if(EmptyString(f_mask2))
|
||||
continue;
|
||||
break;
|
||||
}
|
||||
|
||||
/* reason */
|
||||
f_reason = getfield(NULL);
|
||||
if(EmptyString(f_reason))
|
||||
continue;
|
||||
|
||||
/* oper comment */
|
||||
switch (id)
|
||||
{
|
||||
case BANDB_KLINE:
|
||||
case BANDB_KLINE_PERM:
|
||||
case BANDB_DLINE:
|
||||
case BANDB_DLINE_PERM:
|
||||
f_oreason = getfield(NULL);
|
||||
getfield(NULL);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
f_oper = getfield(NULL);
|
||||
f_time = strip_quotes(f_oper + strlen(f_oper) + 2);
|
||||
|
||||
/* meh */
|
||||
if(id == BANDB_KLINE || id == BANDB_KLINE_PERM)
|
||||
{
|
||||
if(strstr(f_mask1, "!") != NULL)
|
||||
{
|
||||
fprintf(stderr,
|
||||
"* SKIPPING INVALID KLINE %s@%s set by %s\n",
|
||||
f_mask1, f_mask2, f_oper);
|
||||
fprintf(stderr, " You may wish to re-apply it correctly.\n");
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
/* append operreason_field to reason_field */
|
||||
if(!EmptyString(f_oreason))
|
||||
rb_snprintf(newreason, sizeof(newreason), "%s | %s", f_reason, f_oreason);
|
||||
else
|
||||
rb_snprintf(newreason, sizeof(newreason), "%s", f_reason);
|
||||
|
||||
if(flag.pretend == NO)
|
||||
{
|
||||
if(flag.dupes_ok == NO)
|
||||
drop_dupes(f_mask1, f_mask2, bandb_table[id]);
|
||||
|
||||
rsdb_exec(NULL,
|
||||
"INSERT INTO %s (mask1, mask2, oper, time, perm, reason) VALUES('%Q','%Q','%Q','%Q','%d','%Q')",
|
||||
bandb_table[id], f_mask1, f_mask2, f_oper, f_time, f_perm,
|
||||
newreason);
|
||||
}
|
||||
|
||||
if(flag.pretend && flag.verbose)
|
||||
fprintf(stdout,
|
||||
"%s: perm(%d) mask1(%s) mask2(%s) oper(%s) reason(%s) time(%s)\n",
|
||||
bandb_table[id], f_perm, f_mask1, f_mask2, f_oper, newreason,
|
||||
f_time);
|
||||
|
||||
i++;
|
||||
}
|
||||
|
||||
switch (bandb_letter[id])
|
||||
{
|
||||
case 'K':
|
||||
count.klines += i;
|
||||
break;
|
||||
case 'D':
|
||||
count.dlines += i;
|
||||
break;
|
||||
case 'X':
|
||||
count.xlines += i;
|
||||
break;
|
||||
case 'R':
|
||||
count.resvs += i;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if(flag.verbose)
|
||||
fprintf(stdout, "%*s\n", strlen(bandb_suffix[id]) > 0 ? 10 : 15, "imported.");
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
/**
|
||||
* getfield
|
||||
*
|
||||
* inputs - input buffer
|
||||
* output - next field
|
||||
* side effects - field breakup for ircd.conf file.
|
||||
*/
|
||||
char *
|
||||
getfield(char *newline)
|
||||
{
|
||||
static char *line = NULL;
|
||||
char *end, *field;
|
||||
|
||||
if(newline != NULL)
|
||||
line = newline;
|
||||
|
||||
if(line == NULL)
|
||||
return (NULL);
|
||||
|
||||
field = line;
|
||||
|
||||
/* XXX make this skip to first " if present */
|
||||
if(*field == '"')
|
||||
field++;
|
||||
else
|
||||
return (NULL); /* mal-formed field */
|
||||
|
||||
end = strchr(line, ',');
|
||||
|
||||
while(1)
|
||||
{
|
||||
/* no trailing , - last field */
|
||||
if(end == NULL)
|
||||
{
|
||||
end = line + strlen(line);
|
||||
line = NULL;
|
||||
|
||||
if(*end == '"')
|
||||
{
|
||||
*end = '\0';
|
||||
return field;
|
||||
}
|
||||
else
|
||||
return NULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* look for a ", to mark the end of a field.. */
|
||||
if(*(end - 1) == '"')
|
||||
{
|
||||
line = end + 1;
|
||||
end--;
|
||||
*end = '\0';
|
||||
return field;
|
||||
}
|
||||
|
||||
/* search for the next ',' */
|
||||
end++;
|
||||
end = strchr(end, ',');
|
||||
}
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
* strip away "quotes" from around strings
|
||||
*/
|
||||
static char *
|
||||
strip_quotes(const char *string)
|
||||
{
|
||||
static char buf[14]; /* int(11) + 2 + \0 */
|
||||
char *str = buf;
|
||||
|
||||
if(string == NULL)
|
||||
return NULL;
|
||||
|
||||
while(*string)
|
||||
{
|
||||
if(*string != '"')
|
||||
{
|
||||
*str++ = *string;
|
||||
}
|
||||
string++;
|
||||
}
|
||||
*str = '\0';
|
||||
return buf;
|
||||
}
|
||||
|
||||
/**
|
||||
* escape quotes in a string
|
||||
*/
|
||||
static char *
|
||||
escape_quotes(const char *string)
|
||||
{
|
||||
static char buf[BUFSIZE * 2];
|
||||
char *str = buf;
|
||||
|
||||
if(string == NULL)
|
||||
return NULL;
|
||||
|
||||
while(*string)
|
||||
{
|
||||
if(*string == '"')
|
||||
{
|
||||
*str++ = '\\';
|
||||
*str++ = '"';
|
||||
}
|
||||
else
|
||||
{
|
||||
*str++ = *string;
|
||||
}
|
||||
string++;
|
||||
}
|
||||
*str = '\0';
|
||||
return buf;
|
||||
}
|
||||
|
||||
|
||||
static char *
|
||||
mangle_reason(const char *string)
|
||||
{
|
||||
static char buf[BUFSIZE * 2];
|
||||
char *str = buf;
|
||||
|
||||
if(string == NULL)
|
||||
return NULL;
|
||||
|
||||
while(*string)
|
||||
{
|
||||
switch (*string)
|
||||
{
|
||||
case '"':
|
||||
*str = '\'';
|
||||
break;
|
||||
case ':':
|
||||
*str = ' ';
|
||||
break;
|
||||
default:
|
||||
*str = *string;
|
||||
}
|
||||
string++;
|
||||
str++;
|
||||
|
||||
}
|
||||
*str = '\0';
|
||||
return buf;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* change spaces to \s in gecos field
|
||||
*/
|
||||
static const char *
|
||||
clean_gecos_field(const char *gecos)
|
||||
{
|
||||
static char buf[BUFSIZE * 2];
|
||||
char *str = buf;
|
||||
|
||||
if(gecos == NULL)
|
||||
return NULL;
|
||||
|
||||
while(*gecos)
|
||||
{
|
||||
if(*gecos == ' ')
|
||||
{
|
||||
*str++ = '\\';
|
||||
*str++ = 's';
|
||||
}
|
||||
else
|
||||
*str++ = *gecos;
|
||||
gecos++;
|
||||
}
|
||||
*str = '\0';
|
||||
return buf;
|
||||
}
|
||||
|
||||
/**
|
||||
* verify the database integrity, and if necessary create apropriate tables
|
||||
*/
|
||||
static void
|
||||
check_schema(void)
|
||||
{
|
||||
int i, j;
|
||||
char type[8]; /* longest string is 'INTEGER\0' */
|
||||
|
||||
if(flag.verify || flag.verbose)
|
||||
fprintf(stdout, "* Verifying database.\n");
|
||||
|
||||
const char *columns[] = {
|
||||
"perm",
|
||||
"mask1",
|
||||
"mask2",
|
||||
"oper",
|
||||
"time",
|
||||
"reason",
|
||||
NULL
|
||||
};
|
||||
|
||||
for(i = 0; i < LAST_BANDB_TYPE; i++)
|
||||
{
|
||||
if(!table_exists(bandb_table[i]))
|
||||
{
|
||||
rsdb_exec(NULL,
|
||||
"CREATE TABLE %s (mask1 TEXT, mask2 TEXT, oper TEXT, time INTEGER, perm INTEGER, reason TEXT)",
|
||||
bandb_table[i]);
|
||||
}
|
||||
|
||||
/*
|
||||
* i can't think of any better way to do this, other then attempt to
|
||||
* force the creation of column that may, or may not already exist. --dubkat
|
||||
*/
|
||||
else
|
||||
{
|
||||
for(j = 0; columns[j] != NULL; j++)
|
||||
{
|
||||
if(!strcmp(columns[j], "time") && !strcmp(columns[j], "perm"))
|
||||
rb_strlcpy(type, "INTEGER", sizeof(type));
|
||||
else
|
||||
rb_strlcpy(type, "TEXT", sizeof(type));
|
||||
|
||||
/* attempt to add a column with extreme prejudice, errors are ignored */
|
||||
rsdb_exec(NULL, "ALTER TABLE %s ADD COLUMN %s %s", bandb_table[i],
|
||||
columns[j], type);
|
||||
}
|
||||
}
|
||||
|
||||
i++; /* skip over .perm */
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
db_reclaim_slack(void)
|
||||
{
|
||||
fprintf(stdout, "* Reclaiming free space.\n");
|
||||
rsdb_exec(NULL, "VACUUM");
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* check that appropriate tables exist.
|
||||
*/
|
||||
static int
|
||||
table_exists(const char *dbtab)
|
||||
{
|
||||
struct rsdb_table table;
|
||||
rsdb_exec_fetch(&table, "SELECT name FROM sqlite_master WHERE type='table' AND name='%s'",
|
||||
dbtab);
|
||||
rsdb_exec_fetch_end(&table);
|
||||
return table.row_count;
|
||||
}
|
||||
|
||||
/**
|
||||
* check that there are actual entries in a table
|
||||
*/
|
||||
static int
|
||||
table_has_rows(const char *dbtab)
|
||||
{
|
||||
struct rsdb_table table;
|
||||
rsdb_exec_fetch(&table, "SELECT * FROM %s", dbtab);
|
||||
rsdb_exec_fetch_end(&table);
|
||||
return table.row_count;
|
||||
}
|
||||
|
||||
/**
|
||||
* completly wipes out an existing ban.db of all entries.
|
||||
*/
|
||||
static void
|
||||
wipe_schema(void)
|
||||
{
|
||||
int i;
|
||||
rsdb_transaction(RSDB_TRANS_START);
|
||||
for(i = 0; i < LAST_BANDB_TYPE; i++)
|
||||
{
|
||||
rsdb_exec(NULL, "DROP TABLE %s", bandb_table[i]);
|
||||
i++; /* double increment to skip over .perm */
|
||||
}
|
||||
rsdb_transaction(RSDB_TRANS_END);
|
||||
|
||||
check_schema();
|
||||
}
|
||||
|
||||
/**
|
||||
* remove pre-existing duplicate bans from the database.
|
||||
* we favor the new, imported ban over the one in the database
|
||||
*/
|
||||
void
|
||||
drop_dupes(const char *user, const char *host, const char *t)
|
||||
{
|
||||
rsdb_exec(NULL, "DELETE FROM %s WHERE mask1='%Q' AND mask2='%Q'", t, user, host);
|
||||
}
|
||||
|
||||
static void
|
||||
db_error_cb(const char *errstr)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* convert unix timestamp to human readable (small) date
|
||||
*/
|
||||
static char *
|
||||
smalldate(const char *string)
|
||||
{
|
||||
static char buf[MAX_DATE_STRING];
|
||||
struct tm *lt;
|
||||
time_t t;
|
||||
t = strtol(string, NULL, 10);
|
||||
lt = gmtime(&t);
|
||||
if(lt == NULL)
|
||||
return NULL;
|
||||
rb_snprintf(buf, sizeof(buf), "%d/%d/%d %02d.%02d",
|
||||
lt->tm_year + 1900, lt->tm_mon + 1, lt->tm_mday, lt->tm_hour, lt->tm_min);
|
||||
return buf;
|
||||
}
|
||||
|
||||
/**
|
||||
* you are here ->.
|
||||
*/
|
||||
void
|
||||
print_help(int i_exit)
|
||||
{
|
||||
/* *INDENT-OFF* */
|
||||
fprintf(stderr, "bantool v.%s - the %s database tool.\n", SERIALNUM, PATCHLEVEL);
|
||||
fprintf(stderr, "Copyright (C) 2008-2012 ircd-ratbox development team\n");
|
||||
fprintf(stderr, "$Id: bantool.c 27371 2012-03-16 05:33:15Z dubkat $\n\n");
|
||||
fprintf(stderr, "This program is distributed in the hope that it will be useful,\n"
|
||||
"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
|
||||
"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
|
||||
"GNU General Public License for more details.\n\n");
|
||||
|
||||
|
||||
fprintf(stderr, "Usage: %s [-f databasename] <-i|-e> [-p] [-v] [-h] [-d] [-w] [path]\n", me);
|
||||
fprintf(stderr, " -h : Display some slightly useful help.\n");
|
||||
fprintf(stderr, " -f : Path to the ban database, default is %s\n", DBPATH);
|
||||
fprintf(stderr, " -i : Actually import configs into your database.\n");
|
||||
fprintf(stderr, " -e : Export your database to old-style flat files.\n");
|
||||
fprintf(stderr, " This is suitable for redistrubuting your banlists, or creating backups.\n");
|
||||
fprintf(stderr, " -s : Reclaim empty slack space the database may be taking up.\n");
|
||||
fprintf(stderr, " -u : Update the database tables to support any new features.\n");
|
||||
fprintf(stderr, " This is automaticlly done if you are importing or exporting\n");
|
||||
fprintf(stderr, " but should be run whenever you upgrade the ircd.\n");
|
||||
fprintf(stderr, " -p : pretend, checks for the configs, and parses them, then tells you some data...\n");
|
||||
fprintf(stderr, " but does not touch your database.\n");
|
||||
fprintf(stderr, " -v : Be verbose... and it *is* very verbose! (intended for debugging)\n");
|
||||
fprintf(stderr, " -d : Enable checking for redunant entries.\n");
|
||||
fprintf(stderr, " -w : Completly wipe your database clean. May be used with -i \n");
|
||||
fprintf(stderr, " path : An optional directory containing old ratbox configs for import, or export.\n");
|
||||
fprintf(stderr, " If not specified, it looks in %s.\n", ETCPATH);
|
||||
/* *INDENT-ON* */
|
||||
|
||||
exit(i_exit);
|
||||
}
|
42
ircd-ratbox-3.0.10/bandb/rsdb.h
Normal file
42
ircd-ratbox-3.0.10/bandb/rsdb.h
Normal file
@ -0,0 +1,42 @@
|
||||
/* $Id: rsdb.h 26308 2008-12-16 15:55:10Z androsyn $ */
|
||||
#ifndef INCLUDED_rsdb_h
|
||||
#define INCLUDED_rsdb_h
|
||||
|
||||
/* error handler callback */
|
||||
typedef void rsdb_error_cb(const char *);
|
||||
|
||||
typedef int (*rsdb_callback) (int, const char **);
|
||||
|
||||
typedef enum rsdb_transtype
|
||||
{
|
||||
RSDB_TRANS_START,
|
||||
RSDB_TRANS_END
|
||||
}
|
||||
rsdb_transtype;
|
||||
|
||||
struct rsdb_table
|
||||
{
|
||||
char ***row;
|
||||
int row_count;
|
||||
int col_count;
|
||||
void *arg;
|
||||
};
|
||||
|
||||
int rsdb_init(const char *path, rsdb_error_cb *);
|
||||
void rsdb_shutdown(void);
|
||||
|
||||
const char *rsdb_quote(const char *src);
|
||||
|
||||
void rsdb_exec(rsdb_callback cb, const char *format, ...);
|
||||
|
||||
void rsdb_exec_fetch(struct rsdb_table *data, const char *format, ...);
|
||||
void rsdb_exec_fetch_end(struct rsdb_table *data);
|
||||
|
||||
void rsdb_transaction(rsdb_transtype type);
|
||||
/* rsdb_snprintf.c */
|
||||
|
||||
int rs_vsnprintf(char *dest, const size_t bytes, const char *format, va_list args);
|
||||
int rs_snprintf(char *dest, const size_t bytes, const char *format, ...);
|
||||
|
||||
|
||||
#endif
|
628
ircd-ratbox-3.0.10/bandb/rsdb_snprintf.c
Normal file
628
ircd-ratbox-3.0.10/bandb/rsdb_snprintf.c
Normal file
@ -0,0 +1,628 @@
|
||||
/*
|
||||
* libString, Copyright (C) 1999 Patrick Alken
|
||||
* This library comes with absolutely NO WARRANTY
|
||||
*
|
||||
* Should you choose to use and/or modify this source code, please
|
||||
* do so under the terms of the GNU General Public License under which
|
||||
* this library is distributed.
|
||||
*
|
||||
* $Id: rsdb_snprintf.c 26094 2008-09-19 15:33:46Z androsyn $
|
||||
*/
|
||||
#include "stdinc.h"
|
||||
#include "rsdb.h"
|
||||
|
||||
/*
|
||||
* This table is arranged in chronological order from 0-999,
|
||||
* however the numbers are written backwards, so the number 100
|
||||
* is expressed in this table as "001".
|
||||
* It's purpose is to ensure fast conversions from integers to
|
||||
* ASCII strings. When an integer variable is encountered, a
|
||||
* simple hash algorithm is used to determine where to look
|
||||
* in this array for the corresponding string.
|
||||
* This outperforms continually dividing by 10 and using the
|
||||
* digit obtained as a character, because we can now divide by
|
||||
* 1000 and use the remainder directly, thus cutting down on
|
||||
* the number of costly divisions needed. For an integer's worst
|
||||
* case, 2 divisions are needed because it can only go up to
|
||||
* 32767, so after 2 divisions by 1000, and some algebra, we will
|
||||
* be left with 327 which we can get from this table. This is much
|
||||
* better than the 5 divisions by 10 that we would need if we did
|
||||
* it the conventional way. Of course, if we made this table go
|
||||
* from 0-9999, only 1 division would be needed.
|
||||
* Longs and unsigned ints of course, are another matter :-).
|
||||
*
|
||||
* Patrick Alken <wnder@underworld.net>
|
||||
*/
|
||||
|
||||
/*
|
||||
* Set this to the number of indices (numbers) in our table
|
||||
*/
|
||||
#define TABLE_MAX 1000
|
||||
|
||||
static const char *IntTable[] = {
|
||||
"000", "100", "200", "300", "400",
|
||||
"500", "600", "700", "800", "900",
|
||||
"010", "110", "210", "310", "410",
|
||||
"510", "610", "710", "810", "910",
|
||||
"020", "120", "220", "320", "420",
|
||||
"520", "620", "720", "820", "920",
|
||||
"030", "130", "230", "330", "430",
|
||||
"530", "630", "730", "830", "930",
|
||||
"040", "140", "240", "340", "440",
|
||||
"540", "640", "740", "840", "940",
|
||||
"050", "150", "250", "350", "450",
|
||||
"550", "650", "750", "850", "950",
|
||||
"060", "160", "260", "360", "460",
|
||||
"560", "660", "760", "860", "960",
|
||||
"070", "170", "270", "370", "470",
|
||||
"570", "670", "770", "870", "970",
|
||||
"080", "180", "280", "380", "480",
|
||||
"580", "680", "780", "880", "980",
|
||||
"090", "190", "290", "390", "490",
|
||||
"590", "690", "790", "890", "990",
|
||||
"001", "101", "201", "301", "401",
|
||||
"501", "601", "701", "801", "901",
|
||||
"011", "111", "211", "311", "411",
|
||||
"511", "611", "711", "811", "911",
|
||||
"021", "121", "221", "321", "421",
|
||||
"521", "621", "721", "821", "921",
|
||||
"031", "131", "231", "331", "431",
|
||||
"531", "631", "731", "831", "931",
|
||||
"041", "141", "241", "341", "441",
|
||||
"541", "641", "741", "841", "941",
|
||||
"051", "151", "251", "351", "451",
|
||||
"551", "651", "751", "851", "951",
|
||||
"061", "161", "261", "361", "461",
|
||||
"561", "661", "761", "861", "961",
|
||||
"071", "171", "271", "371", "471",
|
||||
"571", "671", "771", "871", "971",
|
||||
"081", "181", "281", "381", "481",
|
||||
"581", "681", "781", "881", "981",
|
||||
"091", "191", "291", "391", "491",
|
||||
"591", "691", "791", "891", "991",
|
||||
"002", "102", "202", "302", "402",
|
||||
"502", "602", "702", "802", "902",
|
||||
"012", "112", "212", "312", "412",
|
||||
"512", "612", "712", "812", "912",
|
||||
"022", "122", "222", "322", "422",
|
||||
"522", "622", "722", "822", "922",
|
||||
"032", "132", "232", "332", "432",
|
||||
"532", "632", "732", "832", "932",
|
||||
"042", "142", "242", "342", "442",
|
||||
"542", "642", "742", "842", "942",
|
||||
"052", "152", "252", "352", "452",
|
||||
"552", "652", "752", "852", "952",
|
||||
"062", "162", "262", "362", "462",
|
||||
"562", "662", "762", "862", "962",
|
||||
"072", "172", "272", "372", "472",
|
||||
"572", "672", "772", "872", "972",
|
||||
"082", "182", "282", "382", "482",
|
||||
"582", "682", "782", "882", "982",
|
||||
"092", "192", "292", "392", "492",
|
||||
"592", "692", "792", "892", "992",
|
||||
"003", "103", "203", "303", "403",
|
||||
"503", "603", "703", "803", "903",
|
||||
"013", "113", "213", "313", "413",
|
||||
"513", "613", "713", "813", "913",
|
||||
"023", "123", "223", "323", "423",
|
||||
"523", "623", "723", "823", "923",
|
||||
"033", "133", "233", "333", "433",
|
||||
"533", "633", "733", "833", "933",
|
||||
"043", "143", "243", "343", "443",
|
||||
"543", "643", "743", "843", "943",
|
||||
"053", "153", "253", "353", "453",
|
||||
"553", "653", "753", "853", "953",
|
||||
"063", "163", "263", "363", "463",
|
||||
"563", "663", "763", "863", "963",
|
||||
"073", "173", "273", "373", "473",
|
||||
"573", "673", "773", "873", "973",
|
||||
"083", "183", "283", "383", "483",
|
||||
"583", "683", "783", "883", "983",
|
||||
"093", "193", "293", "393", "493",
|
||||
"593", "693", "793", "893", "993",
|
||||
"004", "104", "204", "304", "404",
|
||||
"504", "604", "704", "804", "904",
|
||||
"014", "114", "214", "314", "414",
|
||||
"514", "614", "714", "814", "914",
|
||||
"024", "124", "224", "324", "424",
|
||||
"524", "624", "724", "824", "924",
|
||||
"034", "134", "234", "334", "434",
|
||||
"534", "634", "734", "834", "934",
|
||||
"044", "144", "244", "344", "444",
|
||||
"544", "644", "744", "844", "944",
|
||||
"054", "154", "254", "354", "454",
|
||||
"554", "654", "754", "854", "954",
|
||||
"064", "164", "264", "364", "464",
|
||||
"564", "664", "764", "864", "964",
|
||||
"074", "174", "274", "374", "474",
|
||||
"574", "674", "774", "874", "974",
|
||||
"084", "184", "284", "384", "484",
|
||||
"584", "684", "784", "884", "984",
|
||||
"094", "194", "294", "394", "494",
|
||||
"594", "694", "794", "894", "994",
|
||||
"005", "105", "205", "305", "405",
|
||||
"505", "605", "705", "805", "905",
|
||||
"015", "115", "215", "315", "415",
|
||||
"515", "615", "715", "815", "915",
|
||||
"025", "125", "225", "325", "425",
|
||||
"525", "625", "725", "825", "925",
|
||||
"035", "135", "235", "335", "435",
|
||||
"535", "635", "735", "835", "935",
|
||||
"045", "145", "245", "345", "445",
|
||||
"545", "645", "745", "845", "945",
|
||||
"055", "155", "255", "355", "455",
|
||||
"555", "655", "755", "855", "955",
|
||||
"065", "165", "265", "365", "465",
|
||||
"565", "665", "765", "865", "965",
|
||||
"075", "175", "275", "375", "475",
|
||||
"575", "675", "775", "875", "975",
|
||||
"085", "185", "285", "385", "485",
|
||||
"585", "685", "785", "885", "985",
|
||||
"095", "195", "295", "395", "495",
|
||||
"595", "695", "795", "895", "995",
|
||||
"006", "106", "206", "306", "406",
|
||||
"506", "606", "706", "806", "906",
|
||||
"016", "116", "216", "316", "416",
|
||||
"516", "616", "716", "816", "916",
|
||||
"026", "126", "226", "326", "426",
|
||||
"526", "626", "726", "826", "926",
|
||||
"036", "136", "236", "336", "436",
|
||||
"536", "636", "736", "836", "936",
|
||||
"046", "146", "246", "346", "446",
|
||||
"546", "646", "746", "846", "946",
|
||||
"056", "156", "256", "356", "456",
|
||||
"556", "656", "756", "856", "956",
|
||||
"066", "166", "266", "366", "466",
|
||||
"566", "666", "766", "866", "966",
|
||||
"076", "176", "276", "376", "476",
|
||||
"576", "676", "776", "876", "976",
|
||||
"086", "186", "286", "386", "486",
|
||||
"586", "686", "786", "886", "986",
|
||||
"096", "196", "296", "396", "496",
|
||||
"596", "696", "796", "896", "996",
|
||||
"007", "107", "207", "307", "407",
|
||||
"507", "607", "707", "807", "907",
|
||||
"017", "117", "217", "317", "417",
|
||||
"517", "617", "717", "817", "917",
|
||||
"027", "127", "227", "327", "427",
|
||||
"527", "627", "727", "827", "927",
|
||||
"037", "137", "237", "337", "437",
|
||||
"537", "637", "737", "837", "937",
|
||||
"047", "147", "247", "347", "447",
|
||||
"547", "647", "747", "847", "947",
|
||||
"057", "157", "257", "357", "457",
|
||||
"557", "657", "757", "857", "957",
|
||||
"067", "167", "267", "367", "467",
|
||||
"567", "667", "767", "867", "967",
|
||||
"077", "177", "277", "377", "477",
|
||||
"577", "677", "777", "877", "977",
|
||||
"087", "187", "287", "387", "487",
|
||||
"587", "687", "787", "887", "987",
|
||||
"097", "197", "297", "397", "497",
|
||||
"597", "697", "797", "897", "997",
|
||||
"008", "108", "208", "308", "408",
|
||||
"508", "608", "708", "808", "908",
|
||||
"018", "118", "218", "318", "418",
|
||||
"518", "618", "718", "818", "918",
|
||||
"028", "128", "228", "328", "428",
|
||||
"528", "628", "728", "828", "928",
|
||||
"038", "138", "238", "338", "438",
|
||||
"538", "638", "738", "838", "938",
|
||||
"048", "148", "248", "348", "448",
|
||||
"548", "648", "748", "848", "948",
|
||||
"058", "158", "258", "358", "458",
|
||||
"558", "658", "758", "858", "958",
|
||||
"068", "168", "268", "368", "468",
|
||||
"568", "668", "768", "868", "968",
|
||||
"078", "178", "278", "378", "478",
|
||||
"578", "678", "778", "878", "978",
|
||||
"088", "188", "288", "388", "488",
|
||||
"588", "688", "788", "888", "988",
|
||||
"098", "198", "298", "398", "498",
|
||||
"598", "698", "798", "898", "998",
|
||||
"009", "109", "209", "309", "409",
|
||||
"509", "609", "709", "809", "909",
|
||||
"019", "119", "219", "319", "419",
|
||||
"519", "619", "719", "819", "919",
|
||||
"029", "129", "229", "329", "429",
|
||||
"529", "629", "729", "829", "929",
|
||||
"039", "139", "239", "339", "439",
|
||||
"539", "639", "739", "839", "939",
|
||||
"049", "149", "249", "349", "449",
|
||||
"549", "649", "749", "849", "949",
|
||||
"059", "159", "259", "359", "459",
|
||||
"559", "659", "759", "859", "959",
|
||||
"069", "169", "269", "369", "469",
|
||||
"569", "669", "769", "869", "969",
|
||||
"079", "179", "279", "379", "479",
|
||||
"579", "679", "779", "879", "979",
|
||||
"089", "189", "289", "389", "489",
|
||||
"589", "689", "789", "889", "989",
|
||||
"099", "199", "299", "399", "499",
|
||||
"599", "699", "799", "899", "999"
|
||||
};
|
||||
|
||||
/*
|
||||
* Since we calculate the right-most digits for %d %u etc first,
|
||||
* we need a temporary buffer to store them in until we get
|
||||
* to the left-most digits
|
||||
*/
|
||||
|
||||
#define TEMPBUF_MAX 20
|
||||
|
||||
static char TempBuffer[TEMPBUF_MAX];
|
||||
|
||||
/*
|
||||
vSnprintf()
|
||||
Backend to Snprintf() - performs the construction of 'dest'
|
||||
using the string 'format' and the given arguments. Also makes sure
|
||||
not more than 'bytes' characters are copied to 'dest'
|
||||
|
||||
We always allow room for a terminating \0 character, so at most,
|
||||
bytes - 1 characters will be written to dest.
|
||||
|
||||
Return: Number of characters written, NOT including the terminating
|
||||
\0 character which is *always* placed at the end of the string
|
||||
|
||||
NOTE: This function handles the following flags only:
|
||||
%s %d %c %u %ld %lu
|
||||
In addition, this function performs *NO* precision, padding,
|
||||
or width formatting. If it receives an unknown % character,
|
||||
it will call vsprintf() to complete the remainder of the
|
||||
string.
|
||||
*/
|
||||
|
||||
int
|
||||
rs_vsnprintf(char *dest, const size_t bytes, const char *format, va_list args)
|
||||
{
|
||||
char ch;
|
||||
int written = 0; /* bytes written so far */
|
||||
int maxbytes = bytes - 1;
|
||||
|
||||
while((ch = *format++) && (written < maxbytes))
|
||||
{
|
||||
if(ch == '%')
|
||||
{
|
||||
/*
|
||||
* Advance past the %
|
||||
*/
|
||||
ch = *format++;
|
||||
|
||||
/*
|
||||
* Put the most common cases first - %s %d etc
|
||||
*/
|
||||
|
||||
if(ch == 's')
|
||||
{
|
||||
const char *str = va_arg(args, const char *);
|
||||
|
||||
while((*dest = *str))
|
||||
{
|
||||
++dest;
|
||||
++str;
|
||||
|
||||
if(++written >= maxbytes)
|
||||
break;
|
||||
}
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
if(ch == 'd')
|
||||
{
|
||||
int num = va_arg(args, int);
|
||||
int quotient;
|
||||
const char *str;
|
||||
char *digitptr = TempBuffer;
|
||||
|
||||
/*
|
||||
* We have to special-case "0" unfortunately
|
||||
*/
|
||||
if(num == 0)
|
||||
{
|
||||
*dest++ = '0';
|
||||
++written;
|
||||
continue;
|
||||
}
|
||||
|
||||
if(num < 0)
|
||||
{
|
||||
*dest++ = '-';
|
||||
if(++written >= maxbytes)
|
||||
continue;
|
||||
|
||||
num = -num;
|
||||
}
|
||||
|
||||
do
|
||||
{
|
||||
quotient = num / TABLE_MAX;
|
||||
|
||||
/*
|
||||
* We'll start with the right-most digits of 'num'.
|
||||
* Dividing by TABLE_MAX cuts off all but the X
|
||||
* right-most digits, where X is such that:
|
||||
*
|
||||
* 10^X = TABLE_MAX
|
||||
*
|
||||
* For example, if num = 1200, and TABLE_MAX = 1000,
|
||||
* quotient will be 1. Multiplying this by 1000 and
|
||||
* subtracting from 1200 gives: 1200 - (1 * 1000) = 200.
|
||||
* We then go right to slot 200 in our array and behold!
|
||||
* The string "002" (200 backwards) is conveniently
|
||||
* waiting for us. Then repeat the process with the
|
||||
* digits left.
|
||||
*
|
||||
* The reason we need to have the integers written
|
||||
* backwards, is because we don't know how many digits
|
||||
* there are. If we want to express the number 12130
|
||||
* for example, our first pass would leave us with 130,
|
||||
* whose slot in the array yields "031", which we
|
||||
* plug into our TempBuffer[]. The next pass gives us
|
||||
* 12, whose slot yields "21" which we append to
|
||||
* TempBuffer[], leaving us with "03121". This is the
|
||||
* exact number we want, only backwards, so it is
|
||||
* a simple matter to reverse the string. If we used
|
||||
* straightfoward numbers, we would have a TempBuffer
|
||||
* looking like this: "13012" which would be a nightmare
|
||||
* to deal with.
|
||||
*/
|
||||
|
||||
str = IntTable[num - (quotient * TABLE_MAX)];
|
||||
|
||||
while((*digitptr = *str))
|
||||
{
|
||||
++digitptr;
|
||||
++str;
|
||||
}
|
||||
}
|
||||
while((num = quotient) != 0);
|
||||
|
||||
/*
|
||||
* If the last quotient was a 1 or 2 digit number, there
|
||||
* will be one or more leading zeroes in TempBuffer[] -
|
||||
* get rid of them.
|
||||
*/
|
||||
while(*(digitptr - 1) == '0')
|
||||
--digitptr;
|
||||
|
||||
while(digitptr != TempBuffer)
|
||||
{
|
||||
*dest++ = *--digitptr;
|
||||
if(++written >= maxbytes)
|
||||
break;
|
||||
}
|
||||
|
||||
continue;
|
||||
} /* if (ch == 'd') */
|
||||
|
||||
if(ch == 'c')
|
||||
{
|
||||
*dest++ = va_arg(args, int);
|
||||
|
||||
++written;
|
||||
|
||||
continue;
|
||||
} /* if (ch == 'c') */
|
||||
|
||||
if(ch == 'u')
|
||||
{
|
||||
unsigned int num = va_arg(args, unsigned int);
|
||||
unsigned int quotient;
|
||||
const char *str;
|
||||
char *digitptr = TempBuffer;
|
||||
|
||||
if(num == 0)
|
||||
{
|
||||
*dest++ = '0';
|
||||
++written;
|
||||
continue;
|
||||
}
|
||||
|
||||
do
|
||||
{
|
||||
quotient = num / TABLE_MAX;
|
||||
|
||||
/*
|
||||
* Very similar to case 'd'
|
||||
*/
|
||||
|
||||
str = IntTable[num - (quotient * TABLE_MAX)];
|
||||
|
||||
while((*digitptr = *str))
|
||||
{
|
||||
++digitptr;
|
||||
++str;
|
||||
}
|
||||
}
|
||||
while((num = quotient) != 0);
|
||||
|
||||
while(*(digitptr - 1) == '0')
|
||||
--digitptr;
|
||||
|
||||
while(digitptr != TempBuffer)
|
||||
{
|
||||
*dest++ = *--digitptr;
|
||||
if(++written >= maxbytes)
|
||||
break;
|
||||
}
|
||||
|
||||
continue;
|
||||
} /* if (ch == 'u') */
|
||||
|
||||
if(ch == 'Q')
|
||||
{
|
||||
const char *arg = va_arg(args, const char *);
|
||||
|
||||
if(arg == NULL)
|
||||
continue;
|
||||
|
||||
const char *str = rsdb_quote(arg);
|
||||
|
||||
while((*dest = *str))
|
||||
{
|
||||
++dest;
|
||||
++str;
|
||||
|
||||
if(++written >= maxbytes)
|
||||
break;
|
||||
}
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
if(ch == 'l')
|
||||
{
|
||||
if(*format == 'u')
|
||||
{
|
||||
unsigned long num = va_arg(args, unsigned long);
|
||||
unsigned long quotient;
|
||||
const char *str;
|
||||
char *digitptr = TempBuffer;
|
||||
|
||||
++format;
|
||||
|
||||
if(num == 0)
|
||||
{
|
||||
*dest++ = '0';
|
||||
++written;
|
||||
continue;
|
||||
}
|
||||
|
||||
do
|
||||
{
|
||||
quotient = num / TABLE_MAX;
|
||||
|
||||
/*
|
||||
* Very similar to case 'u'
|
||||
*/
|
||||
|
||||
str = IntTable[num - (quotient * TABLE_MAX)];
|
||||
|
||||
while((*digitptr = *str))
|
||||
{
|
||||
++digitptr;
|
||||
++str;
|
||||
}
|
||||
}
|
||||
while((num = quotient) != 0);
|
||||
|
||||
while(*(digitptr - 1) == '0')
|
||||
--digitptr;
|
||||
|
||||
while(digitptr != TempBuffer)
|
||||
{
|
||||
*dest++ = *--digitptr;
|
||||
if(++written >= maxbytes)
|
||||
break;
|
||||
}
|
||||
|
||||
continue;
|
||||
}
|
||||
else
|
||||
/* if (*format == 'u') */ if(*format == 'd')
|
||||
{
|
||||
long num = va_arg(args, long);
|
||||
long quotient;
|
||||
const char *str;
|
||||
char *digitptr = TempBuffer;
|
||||
|
||||
++format;
|
||||
|
||||
if(num == 0)
|
||||
{
|
||||
*dest++ = '0';
|
||||
++written;
|
||||
continue;
|
||||
}
|
||||
|
||||
if(num < 0)
|
||||
{
|
||||
*dest++ = '-';
|
||||
if(++written >= maxbytes)
|
||||
continue;
|
||||
|
||||
num = -num;
|
||||
}
|
||||
|
||||
do
|
||||
{
|
||||
quotient = num / TABLE_MAX;
|
||||
|
||||
str = IntTable[num - (quotient * TABLE_MAX)];
|
||||
|
||||
while((*digitptr = *str))
|
||||
{
|
||||
++digitptr;
|
||||
++str;
|
||||
}
|
||||
}
|
||||
while((num = quotient) != 0);
|
||||
|
||||
while(*(digitptr - 1) == '0')
|
||||
--digitptr;
|
||||
|
||||
while(digitptr != TempBuffer)
|
||||
{
|
||||
*dest++ = *--digitptr;
|
||||
if(++written >= maxbytes)
|
||||
break;
|
||||
}
|
||||
|
||||
continue;
|
||||
}
|
||||
else /* if (*format == 'd') */
|
||||
{
|
||||
/* XXX error */
|
||||
exit(1);
|
||||
}
|
||||
|
||||
|
||||
} /* if (ch == 'l') */
|
||||
|
||||
if(ch != '%')
|
||||
{
|
||||
/* XXX error */
|
||||
exit(1);
|
||||
} /* if (ch != '%') */
|
||||
} /* if (ch == '%') */
|
||||
|
||||
*dest++ = ch;
|
||||
++written;
|
||||
} /* while ((ch = *format++) && (written < maxbytes)) */
|
||||
|
||||
/*
|
||||
* Terminate the destination buffer with a \0
|
||||
*/
|
||||
*dest = '\0';
|
||||
|
||||
return (written);
|
||||
} /* vSnprintf() */
|
||||
|
||||
/*
|
||||
rs_snprintf()
|
||||
Optimized version of snprintf().
|
||||
|
||||
Inputs: dest - destination string
|
||||
bytes - number of bytes to copy
|
||||
format - formatted string
|
||||
args - args to 'format'
|
||||
|
||||
Return: number of characters copied, NOT including the terminating
|
||||
NULL which is always placed at the end of the string
|
||||
*/
|
||||
|
||||
int
|
||||
rs_snprintf(char *dest, const size_t bytes, const char *format, ...)
|
||||
{
|
||||
va_list args;
|
||||
int count;
|
||||
|
||||
va_start(args, format);
|
||||
|
||||
count = rs_vsnprintf(dest, bytes, format, args);
|
||||
|
||||
va_end(args);
|
||||
|
||||
return (count);
|
||||
} /* Snprintf() */
|
255
ircd-ratbox-3.0.10/bandb/rsdb_sqlite3.c
Normal file
255
ircd-ratbox-3.0.10/bandb/rsdb_sqlite3.c
Normal file
@ -0,0 +1,255 @@
|
||||
/* src/rsdb_sqlite.h
|
||||
* Contains the code for the sqlite database backend.
|
||||
*
|
||||
* Copyright (C) 2003-2006 Lee Hardy <leeh@leeh.co.uk>
|
||||
* Copyright (C) 2003-2012 ircd-ratbox development team
|
||||
*
|
||||
* 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.The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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.
|
||||
*
|
||||
* $Id: rsdb_sqlite3.c 27371 2012-03-16 05:33:15Z dubkat $
|
||||
*/
|
||||
#include "stdinc.h"
|
||||
#include "rsdb.h"
|
||||
|
||||
#include <sqlite3.h>
|
||||
|
||||
struct sqlite3 *rb_bandb;
|
||||
|
||||
rsdb_error_cb *error_cb;
|
||||
|
||||
static void
|
||||
mlog(const char *errstr, ...)
|
||||
{
|
||||
if(error_cb != NULL)
|
||||
{
|
||||
char buf[256];
|
||||
va_list ap;
|
||||
va_start(ap, errstr);
|
||||
rb_vsnprintf(buf, sizeof(buf), errstr, ap);
|
||||
va_end(ap);
|
||||
error_cb(buf);
|
||||
}
|
||||
else
|
||||
exit(1);
|
||||
}
|
||||
|
||||
int
|
||||
rsdb_init(const char *dbpath, rsdb_error_cb * ecb)
|
||||
{
|
||||
char errbuf[128];
|
||||
error_cb = ecb;
|
||||
|
||||
if(sqlite3_open(dbpath, &rb_bandb) != SQLITE_OK)
|
||||
{
|
||||
rb_snprintf(errbuf, sizeof(errbuf), "Unable to open sqlite database: %s",
|
||||
sqlite3_errmsg(rb_bandb));
|
||||
mlog(errbuf);
|
||||
return -1;
|
||||
}
|
||||
if(access(dbpath, W_OK))
|
||||
{
|
||||
rb_snprintf(errbuf, sizeof(errbuf), "Unable to open sqlite database for write: %s", strerror(errno));
|
||||
mlog(errbuf);
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void
|
||||
rsdb_shutdown(void)
|
||||
{
|
||||
if(rb_bandb)
|
||||
sqlite3_close(rb_bandb);
|
||||
}
|
||||
|
||||
const char *
|
||||
rsdb_quote(const char *src)
|
||||
{
|
||||
static char buf[BUFSIZE * 4];
|
||||
char *p = buf;
|
||||
|
||||
/* cheap and dirty length check.. */
|
||||
if(strlen(src) >= (sizeof(buf) / 2))
|
||||
return NULL;
|
||||
|
||||
while(*src)
|
||||
{
|
||||
if(*src == '\'')
|
||||
*p++ = '\'';
|
||||
|
||||
*p++ = *src++;
|
||||
}
|
||||
|
||||
*p = '\0';
|
||||
return buf;
|
||||
}
|
||||
|
||||
static int
|
||||
rsdb_callback_func(void *cbfunc, int argc, char **argv, char **colnames)
|
||||
{
|
||||
rsdb_callback cb = (rsdb_callback)((uintptr_t)cbfunc);
|
||||
(cb) (argc, (const char **)argv);
|
||||
return 0;
|
||||
}
|
||||
|
||||
void
|
||||
rsdb_exec(rsdb_callback cb, const char *format, ...)
|
||||
{
|
||||
static char buf[BUFSIZE * 4];
|
||||
va_list args;
|
||||
char *errmsg;
|
||||
unsigned int i;
|
||||
int j;
|
||||
|
||||
va_start(args, format);
|
||||
i = rs_vsnprintf(buf, sizeof(buf), format, args);
|
||||
va_end(args);
|
||||
|
||||
if(i >= sizeof(buf))
|
||||
{
|
||||
mlog("fatal error: length problem with compiling sql");
|
||||
}
|
||||
|
||||
if((i = sqlite3_exec(rb_bandb, buf, (cb ? rsdb_callback_func : NULL), (void *)((uintptr_t)cb), &errmsg)))
|
||||
{
|
||||
switch (i)
|
||||
{
|
||||
case SQLITE_BUSY:
|
||||
for(j = 0; j < 5; j++)
|
||||
{
|
||||
rb_sleep(0, 500000);
|
||||
if(!sqlite3_exec
|
||||
(rb_bandb, buf, (cb ? rsdb_callback_func : NULL), (void *)((uintptr_t)cb), &errmsg))
|
||||
return;
|
||||
}
|
||||
|
||||
/* failed, fall through to default */
|
||||
mlog("fatal error: problem with db file: %s", errmsg);
|
||||
break;
|
||||
|
||||
default:
|
||||
mlog("fatal error: problem with db file: %s", errmsg);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
rsdb_exec_fetch(struct rsdb_table *table, const char *format, ...)
|
||||
{
|
||||
static char buf[BUFSIZE * 4];
|
||||
va_list args;
|
||||
char *errmsg;
|
||||
char **data;
|
||||
int pos;
|
||||
unsigned int retval;
|
||||
int i, j;
|
||||
|
||||
va_start(args, format);
|
||||
retval = rs_vsnprintf(buf, sizeof(buf), format, args);
|
||||
va_end(args);
|
||||
|
||||
if(retval >= sizeof(buf))
|
||||
{
|
||||
mlog("fatal error: length problem with compiling sql");
|
||||
}
|
||||
|
||||
if((retval =
|
||||
sqlite3_get_table(rb_bandb, buf, &data, &table->row_count, &table->col_count, &errmsg)))
|
||||
{
|
||||
int success = 0;
|
||||
|
||||
switch (retval)
|
||||
{
|
||||
case SQLITE_BUSY:
|
||||
for(i = 0; i < 5; i++)
|
||||
{
|
||||
rb_sleep(0, 500000);
|
||||
if(!sqlite3_get_table
|
||||
(rb_bandb, buf, &data, &table->row_count, &table->col_count,
|
||||
&errmsg))
|
||||
{
|
||||
success++;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(success)
|
||||
break;
|
||||
|
||||
mlog("fatal error: problem with db file: %s", errmsg);
|
||||
break;
|
||||
|
||||
default:
|
||||
mlog("fatal error: problem with db file: %s", errmsg);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* we need to be able to free data afterward */
|
||||
table->arg = data;
|
||||
|
||||
if(table->row_count == 0)
|
||||
{
|
||||
table->row = NULL;
|
||||
return;
|
||||
}
|
||||
|
||||
/* sqlite puts the column names as the first row */
|
||||
pos = table->col_count;
|
||||
table->row = rb_malloc(sizeof(char **) * table->row_count);
|
||||
for(i = 0; i < table->row_count; i++)
|
||||
{
|
||||
table->row[i] = rb_malloc(sizeof(char *) * table->col_count);
|
||||
|
||||
for(j = 0; j < table->col_count; j++)
|
||||
{
|
||||
table->row[i][j] = data[pos++];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
rsdb_exec_fetch_end(struct rsdb_table *table)
|
||||
{
|
||||
int i;
|
||||
|
||||
for(i = 0; i < table->row_count; i++)
|
||||
{
|
||||
rb_free(table->row[i]);
|
||||
}
|
||||
rb_free(table->row);
|
||||
|
||||
sqlite3_free_table((char **)table->arg);
|
||||
}
|
||||
|
||||
void
|
||||
rsdb_transaction(rsdb_transtype type)
|
||||
{
|
||||
if(type == RSDB_TRANS_START)
|
||||
rsdb_exec(NULL, "BEGIN TRANSACTION");
|
||||
else if(type == RSDB_TRANS_END)
|
||||
rsdb_exec(NULL, "COMMIT TRANSACTION");
|
||||
}
|
20
ircd-ratbox-3.0.10/bandb/sqlite3/Makefile.am
Normal file
20
ircd-ratbox-3.0.10/bandb/sqlite3/Makefile.am
Normal file
@ -0,0 +1,20 @@
|
||||
|
||||
|
||||
SOURCES = sqlite3.c
|
||||
bin_PROGRAMS = ratbox-sqlite3
|
||||
AM_CFLAGS = -DSQLITE_THREADSAFE=0 -DSQLITE_OMIT_LOAD_EXTENSION=1
|
||||
ratbox_sqlite3_SOURCES = shell.c
|
||||
ratbox_sqlite3_LDADD = libsqlite3.a
|
||||
|
||||
|
||||
.c.lo:
|
||||
$(LIBTOOL) --mode=compile $(CC) $(CFLAGS) $(AM_CFLAGS) -prefer-pic -I../include -I. -c $< -o $@
|
||||
|
||||
S_OBJS= $(SOURCES:.c=.lo)
|
||||
|
||||
|
||||
|
||||
libsqlite3.a: $(S_OBJS)
|
||||
$(LIBTOOL) --mode=link $(CC) -all-static -o libsqlite3.a $(S_OBJS)
|
||||
|
||||
all: libsqlite3.a
|
591
ircd-ratbox-3.0.10/bandb/sqlite3/Makefile.in
Normal file
591
ircd-ratbox-3.0.10/bandb/sqlite3/Makefile.in
Normal file
@ -0,0 +1,591 @@
|
||||
# Makefile.in generated by automake 1.11.6 from Makefile.am.
|
||||
# @configure_input@
|
||||
|
||||
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
|
||||
# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
|
||||
# Foundation, Inc.
|
||||
# This Makefile.in is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
||||
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
# PARTICULAR PURPOSE.
|
||||
|
||||
@SET_MAKE@
|
||||
|
||||
VPATH = @srcdir@
|
||||
am__make_dryrun = \
|
||||
{ \
|
||||
am__dry=no; \
|
||||
case $$MAKEFLAGS in \
|
||||
*\\[\ \ ]*) \
|
||||
echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \
|
||||
| grep '^AM OK$$' >/dev/null || am__dry=yes;; \
|
||||
*) \
|
||||
for am__flg in $$MAKEFLAGS; do \
|
||||
case $$am__flg in \
|
||||
*=*|--*) ;; \
|
||||
*n*) am__dry=yes; break;; \
|
||||
esac; \
|
||||
done;; \
|
||||
esac; \
|
||||
test $$am__dry = yes; \
|
||||
}
|
||||
pkgdatadir = $(datadir)/@PACKAGE@
|
||||
pkgincludedir = $(includedir)/@PACKAGE@
|
||||
pkglibdir = $(libdir)/@PACKAGE@
|
||||
pkglibexecdir = $(libexecdir)/@PACKAGE@
|
||||
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
|
||||
install_sh_DATA = $(install_sh) -c -m 644
|
||||
install_sh_PROGRAM = $(install_sh) -c
|
||||
install_sh_SCRIPT = $(install_sh) -c
|
||||
INSTALL_HEADER = $(INSTALL_DATA)
|
||||
transform = $(program_transform_name)
|
||||
NORMAL_INSTALL = :
|
||||
PRE_INSTALL = :
|
||||
POST_INSTALL = :
|
||||
NORMAL_UNINSTALL = :
|
||||
PRE_UNINSTALL = :
|
||||
POST_UNINSTALL = :
|
||||
build_triplet = @build@
|
||||
host_triplet = @host@
|
||||
bin_PROGRAMS = ratbox-sqlite3$(EXEEXT)
|
||||
subdir = bandb/sqlite3
|
||||
DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
|
||||
$(top_srcdir)/configure.ac
|
||||
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
||||
$(ACLOCAL_M4)
|
||||
mkinstalldirs = $(install_sh) -d
|
||||
CONFIG_HEADER = $(top_builddir)/include/setup.h
|
||||
CONFIG_CLEAN_FILES =
|
||||
CONFIG_CLEAN_VPATH_FILES =
|
||||
am__installdirs = "$(DESTDIR)$(bindir)"
|
||||
PROGRAMS = $(bin_PROGRAMS)
|
||||
am_ratbox_sqlite3_OBJECTS = shell.$(OBJEXT)
|
||||
ratbox_sqlite3_OBJECTS = $(am_ratbox_sqlite3_OBJECTS)
|
||||
ratbox_sqlite3_DEPENDENCIES = libsqlite3.a
|
||||
DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include
|
||||
depcomp = $(SHELL) $(top_srcdir)/libltdl/config/depcomp
|
||||
am__depfiles_maybe = depfiles
|
||||
am__mv = mv -f
|
||||
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
|
||||
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
|
||||
LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
|
||||
--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
|
||||
$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
|
||||
CCLD = $(CC)
|
||||
LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
|
||||
--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
|
||||
$(LDFLAGS) -o $@
|
||||
DIST_SOURCES = $(ratbox_sqlite3_SOURCES)
|
||||
am__can_run_installinfo = \
|
||||
case $$AM_UPDATE_INFO_DIR in \
|
||||
n|no|NO) false;; \
|
||||
*) (install-info --version) >/dev/null 2>&1;; \
|
||||
esac
|
||||
ETAGS = etags
|
||||
CTAGS = ctags
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
ACLOCAL = @ACLOCAL@
|
||||
ALLOCA = @ALLOCA@
|
||||
AMTAR = @AMTAR@
|
||||
AR = @AR@
|
||||
ARGZ_H = @ARGZ_H@
|
||||
AUTOCONF = @AUTOCONF@
|
||||
AUTOHEADER = @AUTOHEADER@
|
||||
AUTOMAKE = @AUTOMAKE@
|
||||
AWK = @AWK@
|
||||
CC = @CC@
|
||||
CCDEPMODE = @CCDEPMODE@
|
||||
CFLAGS = @CFLAGS@
|
||||
CP = @CP@
|
||||
CPP = @CPP@
|
||||
CPPFLAGS = @CPPFLAGS@
|
||||
CYGPATH_W = @CYGPATH_W@
|
||||
DEFS = @DEFS@
|
||||
DEPDIR = @DEPDIR@
|
||||
DLLTOOL = @DLLTOOL@
|
||||
DSYMUTIL = @DSYMUTIL@
|
||||
DUMPBIN = @DUMPBIN@
|
||||
ECHO_C = @ECHO_C@
|
||||
ECHO_N = @ECHO_N@
|
||||
ECHO_T = @ECHO_T@
|
||||
EGREP = @EGREP@
|
||||
ETC_DIR = @ETC_DIR@
|
||||
EXEEXT = @EXEEXT@
|
||||
FGREP = @FGREP@
|
||||
GREP = @GREP@
|
||||
HELP_DIR = @HELP_DIR@
|
||||
INCLTDL = @INCLTDL@
|
||||
INSTALL = @INSTALL@
|
||||
INSTALL_DATA = @INSTALL_DATA@
|
||||
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
||||
IRCD_PREFIX = @IRCD_PREFIX@
|
||||
LD = @LD@
|
||||
LDFLAGS = @LDFLAGS@
|
||||
LEX = @LEX@
|
||||
LEXLIB = @LEXLIB@
|
||||
LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
|
||||
LIBADD_DL = @LIBADD_DL@
|
||||
LIBADD_DLD_LINK = @LIBADD_DLD_LINK@
|
||||
LIBADD_DLOPEN = @LIBADD_DLOPEN@
|
||||
LIBADD_SHL_LOAD = @LIBADD_SHL_LOAD@
|
||||
LIBEXEC_DIR = @LIBEXEC_DIR@
|
||||
LIBLTDL = @LIBLTDL@
|
||||
LIBOBJS = @LIBOBJS@
|
||||
LIBS = @LIBS@
|
||||
LIBTOOL = @LIBTOOL@
|
||||
LIPO = @LIPO@
|
||||
LN_S = @LN_S@
|
||||
LOG_DIR = @LOG_DIR@
|
||||
LTDLDEPS = @LTDLDEPS@
|
||||
LTDLINCL = @LTDLINCL@
|
||||
LTDLOPEN = @LTDLOPEN@
|
||||
LTDL_SUBDIR = @LTDL_SUBDIR@
|
||||
LTLIBOBJS = @LTLIBOBJS@
|
||||
LT_CONFIG_H = @LT_CONFIG_H@
|
||||
LT_DLLOADERS = @LT_DLLOADERS@
|
||||
LT_DLPREOPEN = @LT_DLPREOPEN@
|
||||
LT_OBJDIR = @LT_OBJDIR@
|
||||
MAINT = @MAINT@
|
||||
MAKEINFO = @MAKEINFO@
|
||||
MANIFEST_TOOL = @MANIFEST_TOOL@
|
||||
MKDIR_P = @MKDIR_P@
|
||||
MODULE_DIR = @MODULE_DIR@
|
||||
MV = @MV@
|
||||
NM = @NM@
|
||||
NMEDIT = @NMEDIT@
|
||||
OBJDUMP = @OBJDUMP@
|
||||
OBJEXT = @OBJEXT@
|
||||
OTOOL = @OTOOL@
|
||||
OTOOL64 = @OTOOL64@
|
||||
PACKAGE = @PACKAGE@
|
||||
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
|
||||
PACKAGE_NAME = @PACKAGE_NAME@
|
||||
PACKAGE_STRING = @PACKAGE_STRING@
|
||||
PACKAGE_TARNAME = @PACKAGE_TARNAME@
|
||||
PACKAGE_URL = @PACKAGE_URL@
|
||||
PACKAGE_VERSION = @PACKAGE_VERSION@
|
||||
PATH_SEPARATOR = @PATH_SEPARATOR@
|
||||
PICFLAGS = @PICFLAGS@
|
||||
RANLIB = @RANLIB@
|
||||
RB_RM = @RB_RM@
|
||||
SED = @SED@
|
||||
SEDOBJ = @SEDOBJ@
|
||||
SET_MAKE = @SET_MAKE@
|
||||
SHELL = @SHELL@
|
||||
SHLIBEXT = @SHLIBEXT@
|
||||
SQLITE3_CFLAGS = @SQLITE3_CFLAGS@
|
||||
SQLITE3_LIBS = @SQLITE3_LIBS@
|
||||
SQLITE_SUBDIR = @SQLITE_SUBDIR@
|
||||
SSL_INCLUDES = @SSL_INCLUDES@
|
||||
SSL_LIBS = @SSL_LIBS@
|
||||
STRIP = @STRIP@
|
||||
VERSION = @VERSION@
|
||||
WARNFLAGS = @WARNFLAGS@
|
||||
YACC = @YACC@
|
||||
YFLAGS = @YFLAGS@
|
||||
ZLIB_LD = @ZLIB_LD@
|
||||
abs_builddir = @abs_builddir@
|
||||
abs_srcdir = @abs_srcdir@
|
||||
abs_top_builddir = @abs_top_builddir@
|
||||
abs_top_srcdir = @abs_top_srcdir@
|
||||
ac_ct_AR = @ac_ct_AR@
|
||||
ac_ct_CC = @ac_ct_CC@
|
||||
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
|
||||
am__include = @am__include@
|
||||
am__leading_dot = @am__leading_dot@
|
||||
am__quote = @am__quote@
|
||||
am__tar = @am__tar@
|
||||
am__untar = @am__untar@
|
||||
bindir = @bindir@
|
||||
build = @build@
|
||||
build_alias = @build_alias@
|
||||
build_cpu = @build_cpu@
|
||||
build_os = @build_os@
|
||||
build_vendor = @build_vendor@
|
||||
builddir = @builddir@
|
||||
confdir = @confdir@
|
||||
datadir = @datadir@
|
||||
datarootdir = @datarootdir@
|
||||
docdir = @docdir@
|
||||
dvidir = @dvidir@
|
||||
exec_prefix = @exec_prefix@
|
||||
helpdir = @helpdir@
|
||||
host = @host@
|
||||
host_alias = @host_alias@
|
||||
host_cpu = @host_cpu@
|
||||
host_os = @host_os@
|
||||
host_vendor = @host_vendor@
|
||||
htmldir = @htmldir@
|
||||
includedir = @includedir@
|
||||
infodir = @infodir@
|
||||
install_sh = @install_sh@
|
||||
libdir = @libdir@
|
||||
libexecdir = @libexecdir@
|
||||
localedir = @localedir@
|
||||
localstatedir = @localstatedir@
|
||||
logdir = @logdir@
|
||||
ltdl_LIBOBJS = @ltdl_LIBOBJS@
|
||||
ltdl_LTLIBOBJS = @ltdl_LTLIBOBJS@
|
||||
mandir = @mandir@
|
||||
mkdir_p = @mkdir_p@
|
||||
moduledir = @moduledir@
|
||||
oldincludedir = @oldincludedir@
|
||||
pdfdir = @pdfdir@
|
||||
prefix = @prefix@
|
||||
program_transform_name = @program_transform_name@
|
||||
psdir = @psdir@
|
||||
runstatedir = @runstatedir@
|
||||
sbindir = @sbindir@
|
||||
sharedstatedir = @sharedstatedir@
|
||||
srcdir = @srcdir@
|
||||
subdirs = @subdirs@
|
||||
sys_symbol_underscore = @sys_symbol_underscore@
|
||||
sysconfdir = @sysconfdir@
|
||||
target_alias = @target_alias@
|
||||
top_build_prefix = @top_build_prefix@
|
||||
top_builddir = @top_builddir@
|
||||
top_srcdir = @top_srcdir@
|
||||
SOURCES = sqlite3.c
|
||||
AM_CFLAGS = -DSQLITE_THREADSAFE=0 -DSQLITE_OMIT_LOAD_EXTENSION=1
|
||||
ratbox_sqlite3_SOURCES = shell.c
|
||||
ratbox_sqlite3_LDADD = libsqlite3.a
|
||||
S_OBJS = $(SOURCES:.c=.lo)
|
||||
all: all-am
|
||||
|
||||
.SUFFIXES:
|
||||
.SUFFIXES: .c .lo .o .obj
|
||||
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
|
||||
@for dep in $?; do \
|
||||
case '$(am__configure_deps)' in \
|
||||
*$$dep*) \
|
||||
( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
|
||||
&& { if test -f $@; then exit 0; else break; fi; }; \
|
||||
exit 1;; \
|
||||
esac; \
|
||||
done; \
|
||||
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu bandb/sqlite3/Makefile'; \
|
||||
$(am__cd) $(top_srcdir) && \
|
||||
$(AUTOMAKE) --gnu bandb/sqlite3/Makefile
|
||||
.PRECIOUS: Makefile
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
@case '$?' in \
|
||||
*config.status*) \
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
|
||||
*) \
|
||||
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
|
||||
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
|
||||
esac;
|
||||
|
||||
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
|
||||
$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
$(am__aclocal_m4_deps):
|
||||
install-binPROGRAMS: $(bin_PROGRAMS)
|
||||
@$(NORMAL_INSTALL)
|
||||
@list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
|
||||
if test -n "$$list"; then \
|
||||
echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \
|
||||
$(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \
|
||||
fi; \
|
||||
for p in $$list; do echo "$$p $$p"; done | \
|
||||
sed 's/$(EXEEXT)$$//' | \
|
||||
while read p p1; do if test -f $$p || test -f $$p1; \
|
||||
then echo "$$p"; echo "$$p"; else :; fi; \
|
||||
done | \
|
||||
sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \
|
||||
-e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
|
||||
sed 'N;N;N;s,\n, ,g' | \
|
||||
$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
|
||||
{ d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
|
||||
if ($$2 == $$4) files[d] = files[d] " " $$1; \
|
||||
else { print "f", $$3 "/" $$4, $$1; } } \
|
||||
END { for (d in files) print "f", d, files[d] }' | \
|
||||
while read type dir files; do \
|
||||
if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
|
||||
test -z "$$files" || { \
|
||||
echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \
|
||||
$(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \
|
||||
} \
|
||||
; done
|
||||
|
||||
uninstall-binPROGRAMS:
|
||||
@$(NORMAL_UNINSTALL)
|
||||
@list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
|
||||
files=`for p in $$list; do echo "$$p"; done | \
|
||||
sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
|
||||
-e 's/$$/$(EXEEXT)/' `; \
|
||||
test -n "$$list" || exit 0; \
|
||||
echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \
|
||||
cd "$(DESTDIR)$(bindir)" && rm -f $$files
|
||||
|
||||
clean-binPROGRAMS:
|
||||
@list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \
|
||||
echo " rm -f" $$list; \
|
||||
rm -f $$list || exit $$?; \
|
||||
test -n "$(EXEEXT)" || exit 0; \
|
||||
list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
|
||||
echo " rm -f" $$list; \
|
||||
rm -f $$list
|
||||
ratbox-sqlite3$(EXEEXT): $(ratbox_sqlite3_OBJECTS) $(ratbox_sqlite3_DEPENDENCIES) $(EXTRA_ratbox_sqlite3_DEPENDENCIES)
|
||||
@rm -f ratbox-sqlite3$(EXEEXT)
|
||||
$(LINK) $(ratbox_sqlite3_OBJECTS) $(ratbox_sqlite3_LDADD) $(LIBS)
|
||||
|
||||
mostlyclean-compile:
|
||||
-rm -f *.$(OBJEXT)
|
||||
|
||||
distclean-compile:
|
||||
-rm -f *.tab.c
|
||||
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/shell.Po@am__quote@
|
||||
|
||||
.c.o:
|
||||
@am__fastdepCC_TRUE@ depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
|
||||
@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
|
||||
@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(COMPILE) -c -o $@ $<
|
||||
|
||||
.c.obj:
|
||||
@am__fastdepCC_TRUE@ depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
|
||||
@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\
|
||||
@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
|
||||
|
||||
mostlyclean-libtool:
|
||||
-rm -f *.lo
|
||||
|
||||
clean-libtool:
|
||||
-rm -rf .libs _libs
|
||||
|
||||
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
|
||||
END { if (nonempty) { for (i in files) print i; }; }'`; \
|
||||
mkid -fID $$unique
|
||||
tags: TAGS
|
||||
|
||||
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
set x; \
|
||||
here=`pwd`; \
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
|
||||
END { if (nonempty) { for (i in files) print i; }; }'`; \
|
||||
shift; \
|
||||
if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
|
||||
test -n "$$unique" || unique=$$empty_fix; \
|
||||
if test $$# -gt 0; then \
|
||||
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
||||
"$$@" $$unique; \
|
||||
else \
|
||||
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
||||
$$unique; \
|
||||
fi; \
|
||||
fi
|
||||
ctags: CTAGS
|
||||
CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
|
||||
END { if (nonempty) { for (i in files) print i; }; }'`; \
|
||||
test -z "$(CTAGS_ARGS)$$unique" \
|
||||
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
|
||||
$$unique
|
||||
|
||||
GTAGS:
|
||||
here=`$(am__cd) $(top_builddir) && pwd` \
|
||||
&& $(am__cd) $(top_srcdir) \
|
||||
&& gtags -i $(GTAGS_ARGS) "$$here"
|
||||
|
||||
distclean-tags:
|
||||
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
|
||||
|
||||
distdir: $(DISTFILES)
|
||||
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
|
||||
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
|
||||
list='$(DISTFILES)'; \
|
||||
dist_files=`for file in $$list; do echo $$file; done | \
|
||||
sed -e "s|^$$srcdirstrip/||;t" \
|
||||
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
|
||||
case $$dist_files in \
|
||||
*/*) $(MKDIR_P) `echo "$$dist_files" | \
|
||||
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
|
||||
sort -u` ;; \
|
||||
esac; \
|
||||
for file in $$dist_files; do \
|
||||
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
|
||||
if test -d $$d/$$file; then \
|
||||
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
|
||||
if test -d "$(distdir)/$$file"; then \
|
||||
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
|
||||
fi; \
|
||||
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
|
||||
cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
|
||||
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
|
||||
fi; \
|
||||
cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
|
||||
else \
|
||||
test -f "$(distdir)/$$file" \
|
||||
|| cp -p $$d/$$file "$(distdir)/$$file" \
|
||||
|| exit 1; \
|
||||
fi; \
|
||||
done
|
||||
check-am: all-am
|
||||
check: check-am
|
||||
all-am: Makefile $(PROGRAMS)
|
||||
installdirs:
|
||||
for dir in "$(DESTDIR)$(bindir)"; do \
|
||||
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
|
||||
done
|
||||
install: install-am
|
||||
install-exec: install-exec-am
|
||||
install-data: install-data-am
|
||||
uninstall: uninstall-am
|
||||
|
||||
install-am: all-am
|
||||
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
|
||||
|
||||
installcheck: installcheck-am
|
||||
install-strip:
|
||||
if test -z '$(STRIP)'; then \
|
||||
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
||||
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
|
||||
install; \
|
||||
else \
|
||||
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
||||
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
|
||||
"INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
|
||||
fi
|
||||
mostlyclean-generic:
|
||||
|
||||
clean-generic:
|
||||
|
||||
distclean-generic:
|
||||
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
||||
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
|
||||
|
||||
maintainer-clean-generic:
|
||||
@echo "This command is intended for maintainers to use"
|
||||
@echo "it deletes files that may require special tools to rebuild."
|
||||
clean: clean-am
|
||||
|
||||
clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am
|
||||
|
||||
distclean: distclean-am
|
||||
-rm -rf ./$(DEPDIR)
|
||||
-rm -f Makefile
|
||||
distclean-am: clean-am distclean-compile distclean-generic \
|
||||
distclean-tags
|
||||
|
||||
dvi: dvi-am
|
||||
|
||||
dvi-am:
|
||||
|
||||
html: html-am
|
||||
|
||||
html-am:
|
||||
|
||||
info: info-am
|
||||
|
||||
info-am:
|
||||
|
||||
install-data-am:
|
||||
|
||||
install-dvi: install-dvi-am
|
||||
|
||||
install-dvi-am:
|
||||
|
||||
install-exec-am: install-binPROGRAMS
|
||||
|
||||
install-html: install-html-am
|
||||
|
||||
install-html-am:
|
||||
|
||||
install-info: install-info-am
|
||||
|
||||
install-info-am:
|
||||
|
||||
install-man:
|
||||
|
||||
install-pdf: install-pdf-am
|
||||
|
||||
install-pdf-am:
|
||||
|
||||
install-ps: install-ps-am
|
||||
|
||||
install-ps-am:
|
||||
|
||||
installcheck-am:
|
||||
|
||||
maintainer-clean: maintainer-clean-am
|
||||
-rm -rf ./$(DEPDIR)
|
||||
-rm -f Makefile
|
||||
maintainer-clean-am: distclean-am maintainer-clean-generic
|
||||
|
||||
mostlyclean: mostlyclean-am
|
||||
|
||||
mostlyclean-am: mostlyclean-compile mostlyclean-generic \
|
||||
mostlyclean-libtool
|
||||
|
||||
pdf: pdf-am
|
||||
|
||||
pdf-am:
|
||||
|
||||
ps: ps-am
|
||||
|
||||
ps-am:
|
||||
|
||||
uninstall-am: uninstall-binPROGRAMS
|
||||
|
||||
.MAKE: install-am install-strip
|
||||
|
||||
.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \
|
||||
clean-generic clean-libtool ctags distclean distclean-compile \
|
||||
distclean-generic distclean-libtool distclean-tags distdir dvi \
|
||||
dvi-am html html-am info info-am install install-am \
|
||||
install-binPROGRAMS install-data install-data-am install-dvi \
|
||||
install-dvi-am install-exec install-exec-am install-html \
|
||||
install-html-am install-info install-info-am install-man \
|
||||
install-pdf install-pdf-am install-ps install-ps-am \
|
||||
install-strip installcheck installcheck-am installdirs \
|
||||
maintainer-clean maintainer-clean-generic mostlyclean \
|
||||
mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
|
||||
pdf pdf-am ps ps-am tags uninstall uninstall-am \
|
||||
uninstall-binPROGRAMS
|
||||
|
||||
|
||||
.c.lo:
|
||||
$(LIBTOOL) --mode=compile $(CC) $(CFLAGS) $(AM_CFLAGS) -prefer-pic -I../include -I. -c $< -o $@
|
||||
|
||||
libsqlite3.a: $(S_OBJS)
|
||||
$(LIBTOOL) --mode=link $(CC) -all-static -o libsqlite3.a $(S_OBJS)
|
||||
|
||||
all: libsqlite3.a
|
||||
|
||||
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
||||
# Otherwise a system limit (for SysV at least) may be exceeded.
|
||||
.NOEXPORT:
|
35
ircd-ratbox-3.0.10/bandb/sqlite3/README
Normal file
35
ircd-ratbox-3.0.10/bandb/sqlite3/README
Normal file
@ -0,0 +1,35 @@
|
||||
This directory contains source code to
|
||||
|
||||
SQLite: An Embeddable SQL Database Engine
|
||||
|
||||
To compile the project, first create a directory in which to place
|
||||
the build products. It is recommended, but not required, that the
|
||||
build directory be separate from the source directory. Cd into the
|
||||
build directory and then from the build directory run the configure
|
||||
script found at the root of the source tree. Then run "make".
|
||||
|
||||
For example:
|
||||
|
||||
tar xzf sqlite.tar.gz ;# Unpack the source tree into "sqlite"
|
||||
mkdir bld ;# Build will occur in a sibling directory
|
||||
cd bld ;# Change to the build directory
|
||||
../sqlite/configure ;# Run the configure script
|
||||
make ;# Run the makefile.
|
||||
make install ;# (Optional) Install the build products
|
||||
|
||||
The configure script uses autoconf 2.50 and libtool. If the configure
|
||||
script does not work out for you, there is a generic makefile named
|
||||
"Makefile.linux-gcc" in the top directory of the source tree that you
|
||||
can copy and edit to suite your needs. Comments on the generic makefile
|
||||
show what changes are needed.
|
||||
|
||||
The linux binaries on the website are created using the generic makefile,
|
||||
not the configure script. The configure script is unmaintained. (You
|
||||
can volunteer to take over maintenance of the configure script, if you want!)
|
||||
The windows binaries on the website are created using MinGW32 configured
|
||||
as a cross-compiler running under Linux. For details, see the ./publish.sh
|
||||
script at the top-level of the source tree.
|
||||
|
||||
Contacts:
|
||||
|
||||
http://www.sqlite.org/
|
4958
ircd-ratbox-3.0.10/bandb/sqlite3/shell.c
Normal file
4958
ircd-ratbox-3.0.10/bandb/sqlite3/shell.c
Normal file
File diff suppressed because it is too large
Load Diff
186006
ircd-ratbox-3.0.10/bandb/sqlite3/sqlite3.c
Normal file
186006
ircd-ratbox-3.0.10/bandb/sqlite3/sqlite3.c
Normal file
File diff suppressed because it is too large
Load Diff
8624
ircd-ratbox-3.0.10/bandb/sqlite3/sqlite3.h
Normal file
8624
ircd-ratbox-3.0.10/bandb/sqlite3/sqlite3.h
Normal file
File diff suppressed because it is too large
Load Diff
136
ircd-ratbox-3.0.10/compile
Normal file
136
ircd-ratbox-3.0.10/compile
Normal file
@ -0,0 +1,136 @@
|
||||
#! /bin/sh
|
||||
# Wrapper for compilers which do not understand `-c -o'.
|
||||
# $Id: compile 23020 2006-09-01 18:20:19Z androsyn $
|
||||
scriptversion=2003-11-09.00
|
||||
|
||||
# Copyright (C) 1999, 2000, 2003 Free Software Foundation, Inc.
|
||||
# Written by Tom Tromey <tromey@cygnus.com>.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2, or (at your option)
|
||||
# any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
# As a special exception to the GNU General Public License, if you
|
||||
# distribute this file as part of a program that contains a
|
||||
# configuration script generated by Autoconf, you may include it under
|
||||
# the same distribution terms that you use for the rest of that program.
|
||||
|
||||
# This file is maintained in Automake, please report
|
||||
# bugs to <bug-automake@gnu.org> or send patches to
|
||||
# <automake-patches@gnu.org>.
|
||||
|
||||
case $1 in
|
||||
'')
|
||||
echo "$0: No command. Try \`$0 --help' for more information." 1>&2
|
||||
exit 1;
|
||||
;;
|
||||
-h | --h*)
|
||||
cat <<\EOF
|
||||
Usage: compile [--help] [--version] PROGRAM [ARGS]
|
||||
|
||||
Wrapper for compilers which do not understand `-c -o'.
|
||||
Remove `-o dest.o' from ARGS, run PROGRAM with the remaining
|
||||
arguments, and rename the output as expected.
|
||||
|
||||
If you are trying to build a whole package this is not the
|
||||
right script to run: please start by reading the file `INSTALL'.
|
||||
|
||||
Report bugs to <bug-automake@gnu.org>.
|
||||
EOF
|
||||
exit 0
|
||||
;;
|
||||
-v | --v*)
|
||||
echo "compile $scriptversion"
|
||||
exit 0
|
||||
;;
|
||||
esac
|
||||
|
||||
|
||||
prog=$1
|
||||
shift
|
||||
|
||||
ofile=
|
||||
cfile=
|
||||
args=
|
||||
while test $# -gt 0; do
|
||||
case "$1" in
|
||||
-o)
|
||||
# configure might choose to run compile as `compile cc -o foo foo.c'.
|
||||
# So we do something ugly here.
|
||||
ofile=$2
|
||||
shift
|
||||
case "$ofile" in
|
||||
*.o | *.obj)
|
||||
;;
|
||||
*)
|
||||
args="$args -o $ofile"
|
||||
ofile=
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
*.c)
|
||||
cfile=$1
|
||||
args="$args $1"
|
||||
;;
|
||||
*)
|
||||
args="$args $1"
|
||||
;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
|
||||
if test -z "$ofile" || test -z "$cfile"; then
|
||||
# If no `-o' option was seen then we might have been invoked from a
|
||||
# pattern rule where we don't need one. That is ok -- this is a
|
||||
# normal compilation that the losing compiler can handle. If no
|
||||
# `.c' file was seen then we are probably linking. That is also
|
||||
# ok.
|
||||
exec "$prog" $args
|
||||
fi
|
||||
|
||||
# Name of file we expect compiler to create.
|
||||
cofile=`echo $cfile | sed -e 's|^.*/||' -e 's/\.c$/.o/'`
|
||||
|
||||
# Create the lock directory.
|
||||
# Note: use `[/.-]' here to ensure that we don't use the same name
|
||||
# that we are using for the .o file. Also, base the name on the expected
|
||||
# object file name, since that is what matters with a parallel build.
|
||||
lockdir=`echo $cofile | sed -e 's|[/.-]|_|g'`.d
|
||||
while true; do
|
||||
if mkdir $lockdir > /dev/null 2>&1; then
|
||||
break
|
||||
fi
|
||||
sleep 1
|
||||
done
|
||||
# FIXME: race condition here if user kills between mkdir and trap.
|
||||
trap "rmdir $lockdir; exit 1" 1 2 15
|
||||
|
||||
# Run the compile.
|
||||
"$prog" $args
|
||||
status=$?
|
||||
|
||||
if test -f "$cofile"; then
|
||||
mv "$cofile" "$ofile"
|
||||
fi
|
||||
|
||||
rmdir $lockdir
|
||||
exit $status
|
||||
|
||||
# Local Variables:
|
||||
# mode: shell-script
|
||||
# sh-indentation: 2
|
||||
# eval: (add-hook 'write-file-hooks 'time-stamp)
|
||||
# time-stamp-start: "scriptversion="
|
||||
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
||||
# time-stamp-end: "$"
|
||||
# End:
|
1533
ircd-ratbox-3.0.10/config.guess
vendored
Executable file
1533
ircd-ratbox-3.0.10/config.guess
vendored
Executable file
File diff suppressed because it is too large
Load Diff
1693
ircd-ratbox-3.0.10/config.sub
vendored
Executable file
1693
ircd-ratbox-3.0.10/config.sub
vendored
Executable file
File diff suppressed because it is too large
Load Diff
18634
ircd-ratbox-3.0.10/configure
vendored
Executable file
18634
ircd-ratbox-3.0.10/configure
vendored
Executable file
File diff suppressed because it is too large
Load Diff
649
ircd-ratbox-3.0.10/configure.ac
Normal file
649
ircd-ratbox-3.0.10/configure.ac
Normal file
@ -0,0 +1,649 @@
|
||||
dnl $Id: configure.ac 28675 2015-09-29 17:09:18Z androsyn $
|
||||
dnl Process this file with autoconf to produce a configure script.
|
||||
|
||||
dnl TODO: clean up all the OpenSSL and shared module checking stuff;
|
||||
dnl the most major changes have already been made and it looks like
|
||||
dnl said functions need to be just about as complex as they already are.
|
||||
|
||||
AC_PREREQ(2.63)
|
||||
AUTOMAKE_OPTIONS = 1.10
|
||||
dnl Sneaky way to get an Id tag into the configure script
|
||||
AC_COPYRIGHT([$Id: configure.ac 28675 2015-09-29 17:09:18Z androsyn $])
|
||||
AC_INIT([ircd-ratbox],[stable])
|
||||
AC_CONFIG_AUX_DIR([libltdl/config])
|
||||
AC_CONFIG_MACRO_DIR([libltdl/m4])
|
||||
|
||||
AM_INIT_AUTOMAKE([subdir-objects])
|
||||
|
||||
AM_CONFIG_HEADER(include/setup.h)
|
||||
|
||||
AC_PREFIX_DEFAULT(/usr/local/ircd)
|
||||
AC_GNU_SOURCE
|
||||
|
||||
dnl Checks for programs.
|
||||
AC_PATH_PROG(CP, cp)
|
||||
AC_PATH_PROG(MV, mv)
|
||||
AC_PATH_PROG(RB_RM, rm)
|
||||
|
||||
AC_PROG_CC_C99
|
||||
|
||||
if test x"$ac_cv_prog_cc_c99" = "xno"; then
|
||||
AC_ERROR([ircd-ratbox requires a C99 capable compiler])
|
||||
fi
|
||||
|
||||
|
||||
AM_PROG_LEX
|
||||
|
||||
AC_PROG_INSTALL
|
||||
AC_PROG_EGREP
|
||||
if test "$enable_static" = "yes"; then
|
||||
AM_DISABLE_SHARED
|
||||
AM_ENABLE_STATIC
|
||||
AC_DEFINE([STATIC_MODULES], 1, [Define to 1 if dynamic modules cant be used.])
|
||||
else
|
||||
enable_static="no"
|
||||
fi
|
||||
|
||||
F77=no
|
||||
GCJ=no
|
||||
|
||||
AM_PROG_CC_C_O
|
||||
AM_DISABLE_STATIC
|
||||
AM_ENABLE_SHARED
|
||||
AM_MAINTAINER_MODE
|
||||
|
||||
AC_ISC_POSIX
|
||||
AC_C_INLINE
|
||||
AC_PROG_GCC_TRADITIONAL
|
||||
AC_PROG_MAKE_SET
|
||||
AC_PROG_INSTALL
|
||||
|
||||
srcpwd=`cd ${srcdir} ; ${PWDCMD-pwd}`
|
||||
|
||||
# We pase INSTALL explicitly to sub-makes. Make sure that it is not
|
||||
# a relative path.
|
||||
if test "$INSTALL" = "${srcdir}/install-sh -c"; then
|
||||
INSTALL="${srcpwd}/install-sh -c"
|
||||
fi
|
||||
|
||||
AC_PROG_YACC
|
||||
AC_LANG(C)
|
||||
|
||||
AM_CONDITIONAL([STATIC_MODULES], test "$enable_static" = "yes")
|
||||
|
||||
GCC_STACK_PROTECT_CC
|
||||
|
||||
cc_accepts_flag()
|
||||
{
|
||||
cc_accepts_flag_CFLAGS="$CFLAGS"
|
||||
CFLAGS="$*"
|
||||
AC_MSG_CHECKING([whether $CC accepts $@])
|
||||
AC_COMPILE_IFELSE([AC_LANG_SOURCE([int main(){return 0;}])] ,
|
||||
[RC=0; AC_MSG_RESULT([yes])],
|
||||
[RC=1; AC_MSG_RESULT([no])])
|
||||
CFLAGS="$cc_accepts_flag_CFLAGS"
|
||||
return $RC
|
||||
}
|
||||
|
||||
|
||||
if cc_accepts_flag -fno-strict-aliasing; then
|
||||
CFLAGS="$CFLAGS -fno-strict-aliasing"
|
||||
fi
|
||||
|
||||
WARNLIST="
|
||||
all
|
||||
cast-qual
|
||||
missing-declarations
|
||||
missing-prototypes
|
||||
nested-externs
|
||||
shadow
|
||||
write-strings
|
||||
no-unused
|
||||
unused-function
|
||||
unused-variable"
|
||||
|
||||
for x in $WARNLIST; do
|
||||
if cc_accepts_flag -W$x; then
|
||||
WARNFLAGS="$WARNFLAGS -W$x";
|
||||
fi
|
||||
done
|
||||
|
||||
LT_INIT([dlopen], [convenience])
|
||||
LT_CONFIG_LTDL_DIR([libltdl])
|
||||
LTDL_INIT
|
||||
|
||||
|
||||
|
||||
if test xyes = x"$with_included_ltdl"; then
|
||||
|
||||
AC_SUBST(LTDL_SUBDIR, libltdl)
|
||||
else
|
||||
AC_SUBST(LTDL_SUBDIR, '')
|
||||
fi
|
||||
|
||||
LIBTOOL="$LIBTOOL --silent"
|
||||
|
||||
AC_CONFIG_SUBDIRS(libratbox)
|
||||
|
||||
case "$host_os" in
|
||||
*cygwin*)
|
||||
AC_DEFINE_UNQUOTED(CYGWIN,1,[This is a Cygwin system])
|
||||
AC_DEFINE_UNQUOTED(WINDOWS,1,[This is a Windows system])
|
||||
;;
|
||||
*mingw*)
|
||||
AC_DEFINE_UNQUOTED(MINGW,1,[This is a MinGW system])
|
||||
AC_DEFINE_UNQUOTED(WINDOWS,1,[This is a Windows system])
|
||||
AC_CHECK_HEADER(winsock2.h, , [AC_MSG_ERROR([** MinGW and no winsock2.h. I give up.])])
|
||||
LIBS="$LIBS -lws2_32 -liphlpapi"
|
||||
is_mingw="yes"
|
||||
;;
|
||||
*)
|
||||
;;
|
||||
esac
|
||||
|
||||
AM_CONDITIONAL([MINGW], [test "$is_mingw" = "yes"])
|
||||
|
||||
if test "$LEX" != flex; then
|
||||
LEX="$SHELL $missing_dir/missing flex"
|
||||
AC_SUBST(LEX_OUTPUT_ROOT, lex.yy)
|
||||
AC_SUBST(LEXLIB, '')
|
||||
fi
|
||||
|
||||
# backwards support for IRC_CFLAGS
|
||||
CFLAGS="$IRC_CFLAGS $CFLAGS"
|
||||
|
||||
dnl Checks for header files.
|
||||
AC_HEADER_STDC
|
||||
|
||||
AC_HEADER_SYS_WAIT
|
||||
AC_HEADER_DIRENT
|
||||
|
||||
AC_CHECK_HEADERS([sys/types.h sys/resource.h sys/param.h sys/stat.h sys/socket.h netinet/in.h arpa/inet.h errno.h stddef.h ])
|
||||
AC_HEADER_TIME
|
||||
|
||||
AC_CHECK_FUNCS([snprintf lstat stat])
|
||||
|
||||
dnl Networking Functions
|
||||
dnl ====================
|
||||
|
||||
AC_SEARCH_LIBS(socket, [socket],,)
|
||||
|
||||
dnl this gets passed on to the libratbox configure
|
||||
AC_ARG_ENABLE(ipv6,AC_HELP_STRING([--disable-ipv6],[Disable IPv6 support (not recommended)]),[ipv6=$enableval],[ipv6=yes])
|
||||
|
||||
|
||||
dnl See whether we can include both string.h and strings.h.
|
||||
AC_CACHE_CHECK([whether string.h and strings.h may both be included],
|
||||
gcc_cv_header_string,
|
||||
[
|
||||
AC_COMPILE_IFELSE(
|
||||
[#include <string.h>
|
||||
#include <strings.h>],
|
||||
[gcc_cv_header_string=yes],
|
||||
[gcc_cv_header_string=no])
|
||||
])
|
||||
|
||||
if test "$gcc_cv_header_string" = "yes"; then
|
||||
AC_DEFINE(STRING_WITH_STRINGS, 1, [Define to 1 if string.h may be included along with strings.h])
|
||||
fi
|
||||
|
||||
AC_C_BIGENDIAN
|
||||
|
||||
dnl Check for stdarg.h - if we can't find it, halt configure
|
||||
AC_CHECK_HEADER(stdarg.h, , [AC_MSG_ERROR([** stdarg.h could not be found - ircd-ratbox will not compile without it **])])
|
||||
|
||||
AC_FUNC_ALLOCA
|
||||
|
||||
AC_CHECK_SIZEOF(time_t,,[
|
||||
AC_INCLUDES_DEFAULT
|
||||
#ifdef TIME_WITH_SYS_TIME
|
||||
# include <sys/time.h>
|
||||
# include <time.h>
|
||||
#else
|
||||
# ifdef HAVE_SYS_TIME_H
|
||||
# include <sys/time.h>
|
||||
# else
|
||||
# include <time.h>
|
||||
# endif
|
||||
#endif
|
||||
])
|
||||
|
||||
AC_CHECK_SIZEOF(long)
|
||||
|
||||
|
||||
dnl Specialized functions checks
|
||||
dnl ============================
|
||||
|
||||
|
||||
dnl OpenSSL support
|
||||
AC_MSG_CHECKING(for OpenSSL)
|
||||
AC_ARG_ENABLE(openssl,
|
||||
[AC_HELP_STRING([--enable-openssl[=DIR]],[Enable OpenSSL support (DIR optional).])
|
||||
AC_HELP_STRING([--disable-openssl],[Disable OpenSSL support.])],
|
||||
[cf_enable_openssl=$enableval],
|
||||
[cf_enable_openssl="auto"])
|
||||
|
||||
if test "$cf_enable_openssl" != "no" ; then
|
||||
cf_openssl_basedir=""
|
||||
if test "$cf_enable_openssl" != "auto" &&
|
||||
test "$cf_enable_openssl" != "yes" ; then
|
||||
dnl Support for --enable-openssl=/some/place
|
||||
cf_openssl_basedir="`echo ${cf_enable_openssl} | sed 's/\/$//'`"
|
||||
else
|
||||
dnl Do the auto-probe here. Check some common directory paths.
|
||||
for dirs in /usr/local/ssl /usr/pkg /usr/local \
|
||||
/usr/local/openssl ; do
|
||||
if test -f "${dirs}/include/openssl/opensslv.h" ; then
|
||||
cf_openssl_basedir="${dirs}"
|
||||
break
|
||||
fi
|
||||
done
|
||||
unset dirs
|
||||
fi
|
||||
dnl Now check cf_openssl_found to see if we found anything.
|
||||
if test ! -z "$cf_openssl_basedir"; then
|
||||
if test -f "${cf_openssl_basedir}/include/openssl/opensslv.h" ; then
|
||||
SSL_INCLUDES="-I${cf_openssl_basedir}/include"
|
||||
SSL_LIBS="-L${cf_openssl_basedir}/lib $lt_cv_dlopen_libs"
|
||||
else
|
||||
dnl OpenSSL wasn't found in the directory specified. Naughty
|
||||
dnl administrator...
|
||||
cf_openssl_basedir=""
|
||||
fi
|
||||
else
|
||||
dnl Check for stock FreeBSD 4.x and 5.x systems, since their files
|
||||
dnl are in /usr/include and /usr/lib. In this case, we don't want to
|
||||
dnl change INCLUDES or LIBS, but still want to enable OpenSSL.
|
||||
dnl We can't do this check above, because some people want two versions
|
||||
dnl of OpenSSL installed (stock FreeBSD 4.x/5.x and /usr/local/ssl)
|
||||
dnl and they want /usr/local/ssl to have preference.
|
||||
if test -f "/usr/include/openssl/opensslv.h" ; then
|
||||
cf_openssl_basedir="/usr"
|
||||
fi
|
||||
fi
|
||||
|
||||
dnl If we have a basedir defined, then everything is okay. Otherwise,
|
||||
dnl we have a problem.
|
||||
if test ! -z "$cf_openssl_basedir"; then
|
||||
AC_MSG_RESULT($cf_openssl_basedir)
|
||||
cf_enable_openssl="yes"
|
||||
else
|
||||
AC_MSG_RESULT([not found. Specify a correct path?])
|
||||
cf_enable_openssl="no"
|
||||
fi
|
||||
unset cf_openssl_basedir
|
||||
else
|
||||
dnl If --disable-openssl was specified
|
||||
AC_MSG_RESULT(disabled)
|
||||
fi
|
||||
|
||||
save_CPPFLAGS="$CPPFLAGS"
|
||||
CPPFLAGS="$CPPFLAGS $SSL_INCLUDES"
|
||||
save_LIBS="$LIBS"
|
||||
LIBS="$LIBS $SSL_LIBS"
|
||||
|
||||
|
||||
|
||||
|
||||
CPPFLAGS="$CPPFLAGS $SSL_LIBS"
|
||||
AC_CHECK_LIB(crypto, RSA_free,
|
||||
[SSL_LIBS="$SSL_LIBS -lcrypto $lt_cv_dlopen_libs"],
|
||||
[cf_enable_openssl=no]
|
||||
)
|
||||
|
||||
if test "$cf_enable_openssl" != no; then
|
||||
AC_DEFINE(USE_CHALLENGE, 1, [Define to enable CHALLENGE support, requires OpenSSL])
|
||||
fi
|
||||
|
||||
CPPFLAGS="$save_CPPFLAGS"
|
||||
LIBS="$save_LIBS"
|
||||
|
||||
dnl End OpenSSL detection
|
||||
|
||||
ac_cv_build_sqlite3=no
|
||||
|
||||
AC_CHECK_SQLITE3
|
||||
|
||||
|
||||
if test x"$ac_sqlite3" != xyes; then
|
||||
ac_cv_build_sqlite3=yes
|
||||
SQLITE_SUBDIR=sqlite3
|
||||
AC_SUBST(SQLITE_SUBDIR)
|
||||
SQLITE3_CFLAGS="-Isqlite3"
|
||||
save_LIBS=$LIBS
|
||||
AC_SEARCH_LIBS(fdatasync, [rt],,)
|
||||
FDATASYNCLIB=$ac_cv_search_fdatasync
|
||||
LIBS=$save_LIBS
|
||||
|
||||
if test "$FDATASYNCLIB" = "none required"; then
|
||||
unset FDATASYNCLIB
|
||||
fi
|
||||
|
||||
if test "$FDATASYNCLIB" = "no"; then
|
||||
unset FDATASYNCLIB
|
||||
fi
|
||||
|
||||
SQLITE3_LIBS="$FDATASYNCLIB sqlite3/libsqlite3.a"
|
||||
AC_SUBST(SQLITE3_LIBS, $SQLITE3_LIBS)
|
||||
|
||||
fi
|
||||
|
||||
dnl AC_SUBST(SQLITE3_LIBS, $SQLITE3_LIBS)
|
||||
dnl AC_SUBST(SQLITE3_CFLAGS, $SQLITE3_CFLAGS)
|
||||
|
||||
AM_CONDITIONAL([BUILD_SQLITE], [test "$ac_cv_build_sqlite3" = yes])
|
||||
|
||||
|
||||
|
||||
dnl Specialized functions and libraries
|
||||
dnl ===================================
|
||||
|
||||
AC_ARG_WITH(zlib-path,
|
||||
AC_HELP_STRING([--with-zlib-path=DIR],[Path to libz.so for ziplinks support.]),
|
||||
[LIBS="$LIBS -L$withval"],)
|
||||
|
||||
AC_ARG_ENABLE(zlib,
|
||||
AC_HELP_STRING([--disable-zlib],[Disable ziplinks support]),
|
||||
[zlib=$enableval],[zlib=yes])
|
||||
|
||||
if test "$zlib" = yes; then
|
||||
|
||||
AC_CHECK_HEADER(zlib.h, [
|
||||
AC_CHECK_LIB(z, zlibVersion,
|
||||
[
|
||||
AC_SUBST(ZLIB_LD, -lz)
|
||||
AC_DEFINE(HAVE_ZLIB, 1, [Define to 1 if zlib (-lz) is available.])
|
||||
], zlib=no)
|
||||
], zlib=no)
|
||||
|
||||
fi
|
||||
|
||||
dnl **********************************************************************
|
||||
dnl Check for --with-confdir
|
||||
dnl **********************************************************************
|
||||
|
||||
AC_MSG_CHECKING([whether to modify confdir])
|
||||
AC_ARG_WITH(confdir,
|
||||
AC_HELP_STRING([--with-confdir=DIR],
|
||||
[Directory to install config files.]),
|
||||
[ confdir=`echo $withval | sed 's/\/$//'`
|
||||
AC_MSG_RESULT(yes)
|
||||
AC_DEFINE_DIR(ETC_DIR, confdir, [Prefix where config files are installed.])
|
||||
AC_SUBST_DIR([confdir]) ],
|
||||
[ confdir='${prefix}/etc'
|
||||
AC_MSG_RESULT(no)
|
||||
AC_DEFINE_DIR(ETC_DIR, confdir, [Prefix where config files are installed.])
|
||||
AC_SUBST_DIR([confdir])]
|
||||
)
|
||||
|
||||
dnl **********************************************************************
|
||||
dnl Check for --with-logdir
|
||||
dnl **********************************************************************
|
||||
|
||||
AC_MSG_CHECKING([whether to modify logdir])
|
||||
AC_ARG_WITH(logdir,
|
||||
AC_HELP_STRING([--with-logdir=DIR],
|
||||
[Directory where to write logfiles.]),
|
||||
[ logdir=`echo $withval | sed 's/\/$//'`
|
||||
AC_MSG_RESULT(yes)
|
||||
AC_DEFINE_DIR(LOG_DIR, logdir, [Prefix where to write logfiles.])
|
||||
AC_SUBST_DIR([logdir]) ],
|
||||
[ logdir='${prefix}/logs'
|
||||
AC_MSG_RESULT(no)
|
||||
AC_DEFINE_DIR(LOG_DIR, logdir, [Prefix where to write logfiles.])
|
||||
AC_SUBST_DIR([logdir])]
|
||||
)
|
||||
|
||||
dnl **********************************************************************
|
||||
dnl Check for --with-helpdir
|
||||
dnl **********************************************************************
|
||||
|
||||
AC_MSG_CHECKING([whether to modify helpdir])
|
||||
AC_ARG_WITH(helpdir,
|
||||
AC_HELP_STRING([--with-helpdir=DIR],
|
||||
[Directory to install help files.]),
|
||||
[ helpdir=`echo $withval | sed 's/\/$//'`
|
||||
AC_MSG_RESULT(yes)
|
||||
AC_DEFINE_DIR(HELP_DIR, helpdir, [Prefix where help files are installed.])
|
||||
AC_SUBST_DIR([helpdir]) ],
|
||||
[ helpdir='${prefix}/help'
|
||||
AC_MSG_RESULT(no)
|
||||
AC_DEFINE_DIR(HELP_DIR, helpdir, [Prefix where help file are installed.])
|
||||
AC_SUBST_DIR([helpdir])]
|
||||
)
|
||||
|
||||
dnl **********************************************************************
|
||||
dnl Check for --with-moduledir
|
||||
dnl **********************************************************************
|
||||
|
||||
AC_MSG_CHECKING([whether to modify moduledir])
|
||||
AC_ARG_WITH(moduledir,
|
||||
AC_HELP_STRING([--with-moduledir=DIR],
|
||||
[Directory to install modules.]),
|
||||
[ moduledir=`echo $withval | sed 's/\/$//'`
|
||||
AC_MSG_RESULT(yes)
|
||||
AC_DEFINE_DIR(MODULE_DIR, moduledir, [Prefix where modules are installed.])
|
||||
AC_SUBST_DIR([moduledir]) ],
|
||||
[ moduledir='${prefix}/modules'
|
||||
AC_MSG_RESULT(no)
|
||||
AC_DEFINE_DIR(MODULE_DIR, moduledir, [Prefix where modules are installed.])
|
||||
AC_SUBST_DIR([moduledir])]
|
||||
)
|
||||
|
||||
dnl Debug-related options
|
||||
dnl =====================
|
||||
|
||||
AC_ARG_ENABLE(assert,
|
||||
AC_HELP_STRING([--enable-assert],[Enable assert(). Choose between soft(warnings) and hard(aborts the daemon)]),
|
||||
[assert=$enableval], [assert=no])
|
||||
|
||||
if test "$assert" = no; then
|
||||
AC_DEFINE(NDEBUG, 1, [Define this to disable debugging support.])
|
||||
elif test "$assert" = soft; then
|
||||
AC_DEFINE(SOFT_ASSERT, 1, [Define this to enable soft asserts.])
|
||||
AC_DEFINE(NDEBUG, 1, [Define this to disable debugging support.])
|
||||
elif test "$assert" = yes; then
|
||||
assert = "hard";
|
||||
fi
|
||||
|
||||
AC_MSG_CHECKING(if you want IO Debugging hooks)
|
||||
AC_ARG_ENABLE(iodebug,
|
||||
AC_HELP_STRING([--enable-iodebug],[Enable IO Debugging hooks]),
|
||||
[iodebug=$enableval], [iodebug=no])
|
||||
|
||||
if test "$iodebug" = yes; then
|
||||
AC_DEFINE(USE_IODEBUG_HOOKS, 1, [Define this to enable IO Debug hooks.])
|
||||
AC_MSG_RESULT(yes)
|
||||
else
|
||||
AC_MSG_RESULT(no)
|
||||
fi
|
||||
|
||||
|
||||
AC_MSG_CHECKING(if you want to do a profile build)
|
||||
AC_ARG_ENABLE(profile,
|
||||
AC_HELP_STRING([--enable-profile],[Enable profiling]),
|
||||
[profile=$enableval], [profile=no])
|
||||
|
||||
if test "$profile" = yes; then
|
||||
if test "$ac_cv_c_compiler_gnu" = yes; then
|
||||
CFLAGS="$CFLAGS -pg -static"
|
||||
AC_MSG_RESULT([yes, adding -pg -static])
|
||||
AC_DEFINE(RATBOX_PROFILE, 1, [Defined to mark profiling is enabled])
|
||||
else
|
||||
AC_MSG_RESULT([no, profile builds only work with gcc])
|
||||
fi
|
||||
else
|
||||
AC_MSG_RESULT(no)
|
||||
fi
|
||||
|
||||
dnl Server Tweaks
|
||||
dnl =============
|
||||
|
||||
AC_ARG_ENABLE(services,
|
||||
AC_HELP_STRING([--enable-services],[Enable ratbox-services compatibility code.]),
|
||||
[ratbox_services=$enableval], [ratbox_services=no])
|
||||
|
||||
M_SERVICES=""
|
||||
|
||||
if test "x$ratbox_services" = "xyes"; then
|
||||
AC_DEFINE([ENABLE_SERVICES], 1, [ratbox-services compatibility code])
|
||||
M_SERVICES="m_services.la"
|
||||
fi
|
||||
|
||||
AM_CONDITIONAL([ENABLE_SERVICES], [test x"$M_SERVICES" != "x"])
|
||||
|
||||
AC_ARG_ENABLE(small-net,
|
||||
AC_HELP_STRING([--enable-small-net],[Enable small network support.]),
|
||||
[small_net=$enableval], [small_net=no])
|
||||
|
||||
if test "$small_net" = yes; then
|
||||
dnl AC_DEFINE([HASHSIZE], 4096, [Max number of buckets in hash tables.])
|
||||
AC_DEFINE([NICKNAMEHISTORYLENGTH], 1500, [Size of the WHOWAS array.])
|
||||
AC_DEFINE([CHANNEL_HEAP_SIZE], 256, [Size of the channel heap.])
|
||||
AC_DEFINE([BAN_HEAP_SIZE], 128, [Size of the ban heap.])
|
||||
AC_DEFINE([CLIENT_HEAP_SIZE], 256, [Size of the client heap.])
|
||||
AC_DEFINE([LCLIENT_HEAP_SIZE], 128, [Size of the local client heap.])
|
||||
AC_DEFINE([USER_HEAP_SIZE], 128, [Size of the user heap.])
|
||||
AC_DEFINE([DNODE_HEAP_SIZE], 512, [Size of the dlink_node heap.])
|
||||
AC_DEFINE([TOPIC_HEAP_SIZE], 256, [Size of the topic heap.])
|
||||
AC_DEFINE([LINEBUF_HEAP_SIZE], 128, [Size of the linebuf heap.])
|
||||
AC_DEFINE([MEMBER_HEAP_SIZE], 256, [Sizeof member heap.])
|
||||
AC_DEFINE([ND_HEAP_SIZE], 128, [Size of the nick delay heap.])
|
||||
AC_DEFINE([CONFITEM_HEAP_SIZE], 128, [Size of the confitem heap.])
|
||||
AC_DEFINE([MONITOR_HEAP_SIZE], 128, [Size of the monitor heap.])
|
||||
AC_DEFINE([AUTH_HEAP_SIZE], 128, [Size of the auth heap.])
|
||||
AC_DEFINE([FD_HEAP_SIZE], 128, [Size of fd heap.])
|
||||
AC_DEFINE([AWAY_HEAP_SIZE], 128, [Size of away heap.])
|
||||
else
|
||||
dnl These settings are for a large network like efnet..they will use lots of memory
|
||||
dnl so enable small net unless you really need this much support
|
||||
AC_DEFINE([NICKNAMEHISTORYLENGTH], 30000, [Size of the WHOWAS array.])
|
||||
AC_DEFINE([CHANNEL_HEAP_SIZE], 8192, [Size of the channel heap.])
|
||||
AC_DEFINE([BAN_HEAP_SIZE], 4096, [Size of the ban heap.])
|
||||
AC_DEFINE([CLIENT_HEAP_SIZE], 8192, [Size of the client heap.])
|
||||
AC_DEFINE([LCLIENT_HEAP_SIZE], 1024, [Size of the local client heap.])
|
||||
AC_DEFINE([USER_HEAP_SIZE], 8192, [Size of the user heap.])
|
||||
AC_DEFINE([DNODE_HEAP_SIZE], 8192, [Size of the dlink_node heap.])
|
||||
AC_DEFINE([TOPIC_HEAP_SIZE], 4096, [Size of the topic heap.])
|
||||
AC_DEFINE([LINEBUF_HEAP_SIZE], 2048, [Size of the linebuf heap.])
|
||||
AC_DEFINE([MEMBER_HEAP_SIZE], 32768, [Sizeof member heap.])
|
||||
AC_DEFINE([ND_HEAP_SIZE], 512, [Size of the nick delay heap.])
|
||||
AC_DEFINE([CONFITEM_HEAP_SIZE], 1024, [Size of the confitem heap.])
|
||||
AC_DEFINE([MONITOR_HEAP_SIZE], 1024, [Size of the monitor heap.])
|
||||
AC_DEFINE([AUTH_HEAP_SIZE], 256, [Size of the auth heap.])
|
||||
AC_DEFINE([FD_HEAP_SIZE], 1024, [Size of fd heap.])
|
||||
AC_DEFINE([AWAY_HEAP_SIZE], 512, [Size of away heap.])
|
||||
|
||||
fi
|
||||
|
||||
AC_ARG_WITH(nicklen,
|
||||
AC_HELP_STRING([--with-nicklen=LENGTH],[Set the nick length to LENGTH (default 9, max 50)]),
|
||||
[
|
||||
if ! expr "$withval" + 0 >/dev/null 2>&1; then
|
||||
AC_ERROR([NICKLEN must be a numeric value])
|
||||
fi
|
||||
if test $withval -ge 50; then
|
||||
NICKLEN=50
|
||||
AC_MSG_WARN([NICKLEN has a hard limit of 50. Setting NICKLEN=50])
|
||||
else
|
||||
NICKLEN="$withval"
|
||||
fi
|
||||
], [NICKLEN=9])
|
||||
|
||||
AC_DEFINE_UNQUOTED(NICKLEN, (${NICKLEN}+1), [Nickname length])
|
||||
AC_DEFINE_UNQUOTED(RATBOX_CONFIGURE_OPTS, "$ac_configure_args", [configure arguments])
|
||||
|
||||
|
||||
AC_SUBST(SSL_INCLUDES)
|
||||
AC_SUBST(SSL_LIBS)
|
||||
|
||||
AC_SUBST(LDFLAGS)
|
||||
AC_SUBST(PICFLAGS)
|
||||
AC_SUBST(CFLAGS)
|
||||
AC_SUBST(SEDOBJ)
|
||||
AC_SUBST(WARNFLAGS)
|
||||
|
||||
if test "$prefix" = "NONE"; then
|
||||
AC_DEFINE_UNQUOTED(IRCD_PREFIX, "$ac_default_prefix", [Prefix where the ircd is installed.])
|
||||
|
||||
else
|
||||
|
||||
dnl Don't get bitten by Cygwin's stupidity if the user specified
|
||||
dnl a custom prefix with a trailing slash
|
||||
|
||||
prefix=`echo $prefix | sed 's/\/$//'`
|
||||
AC_DEFINE_UNQUOTED(IRCD_PREFIX, "$prefix", [Prefix where the ircd is installed.])
|
||||
|
||||
fi
|
||||
|
||||
if test "x$libexecdir" = "xNONE"; then
|
||||
rb_cv_libexecdir=$ac_default_libexecdir
|
||||
else
|
||||
rb_cv_libexecdir=$libexecdir
|
||||
fi
|
||||
|
||||
libexecdir=`eval "echo ${rb_cv_libexecdir}/ircd-ratbox"`
|
||||
AC_DEFINE_DIR(LIBEXEC_DIR, libexecdir, [Prefix where to install non-user executables.])
|
||||
|
||||
dnl lets see what libtool thinks our suffix is...
|
||||
AC_MSG_CHECKING([for shared library suffix])
|
||||
dnl this whole thing is a big hack...
|
||||
module=yes
|
||||
eval SHLIBEXT=\"$shrext_cmds\"
|
||||
AC_MSG_RESULT($SHLIBEXT)
|
||||
AC_SUBST(SHLIBEXT,$SHLIBEXT)
|
||||
AC_SUBST(LT_OBJDIR,$lt_cv_objdir)
|
||||
AC_DEFINE_UNQUOTED(SHLIBEXT,"$SHLIBEXT", [Extension that shared libs use])
|
||||
|
||||
AC_SUBST(IRCD_PREFIX)
|
||||
|
||||
disable_backups=n
|
||||
AC_ARG_ENABLE(backups,,disable_backups=y)
|
||||
AM_CONDITIONAL([DISABLE_BACKUPS], [test x"$disable_backups" = "xy"])
|
||||
|
||||
|
||||
AC_CONFIG_FILES( \
|
||||
Makefile \
|
||||
bandb/Makefile \
|
||||
bandb/sqlite3/Makefile \
|
||||
ssld/Makefile \
|
||||
resolver/Makefile \
|
||||
contrib/Makefile \
|
||||
tools/Makefile \
|
||||
doc/Makefile \
|
||||
help/Makefile \
|
||||
modules/Makefile \
|
||||
src/Makefile \
|
||||
install-mod.sh
|
||||
)
|
||||
|
||||
AC_OUTPUT
|
||||
|
||||
dnl Make it look sexay!
|
||||
|
||||
echo
|
||||
echo "Compiling $PACKAGE_NAME $PACKAGE_VERSION"
|
||||
echo
|
||||
|
||||
echo "Installing into: $prefix"
|
||||
|
||||
echo "Ziplinks ....................... $zlib"
|
||||
|
||||
echo "OpenSSL ........................ $cf_enable_openssl"
|
||||
|
||||
tmpresult=shared
|
||||
|
||||
if test "x$enable_static" = "xyes"; then
|
||||
tmpresult=static
|
||||
fi
|
||||
|
||||
echo "Modules ........................ $tmpresult"
|
||||
echo "IO Debugging hooks ............. $iodebug"
|
||||
echo "Assert debugging ............... $assert"
|
||||
echo "Small network .................. $small_net"
|
||||
echo "ratbox-services compatibility .. $ratbox_services"
|
||||
echo
|
||||
echo "Configured limits:"
|
||||
echo "NICKLEN ................. $NICKLEN"
|
||||
echo
|
||||
|
1
ircd-ratbox-3.0.10/contrib/.indent.pro
vendored
Normal file
1
ircd-ratbox-3.0.10/contrib/.indent.pro
vendored
Normal file
@ -0,0 +1 @@
|
||||
-i8 -bli0 -cs -ut -nsai -nsaw -nsaf -npcs -nprs -l100
|
68
ircd-ratbox-3.0.10/contrib/Makefile.am
Normal file
68
ircd-ratbox-3.0.10/contrib/Makefile.am
Normal file
@ -0,0 +1,68 @@
|
||||
prefix = @prefix@
|
||||
libcoredir = @libdir@
|
||||
modulesdir = @moduledir@/autoload
|
||||
coredir = @moduledir@
|
||||
servicesdir = @moduledir@/autoload
|
||||
libmodulesdir = @moduledir@
|
||||
contribdir = @moduledir@/contrib
|
||||
|
||||
INCLUDES = -I../include -I../libratbox/include $(INCLTDL)
|
||||
AM_CFLAGS=$(WARNFLAGS)
|
||||
|
||||
SRCS = \
|
||||
example_module.c \
|
||||
m_42.c \
|
||||
m_clearchan.c \
|
||||
m_flags.c \
|
||||
m_force.c \
|
||||
m_mkpasswd.c \
|
||||
m_ojoin.c \
|
||||
m_okick.c \
|
||||
m_olist.c \
|
||||
m_opme.c \
|
||||
spy_admin_notice.c \
|
||||
spy_info_notice.c \
|
||||
spy_links_notice.c \
|
||||
spy_motd_notice.c \
|
||||
spy_stats_notice.c \
|
||||
spy_stats_p_notice.c \
|
||||
spy_whois_notice.c \
|
||||
spy_whois_notice_global.c
|
||||
|
||||
ALL_SRCS = $(SRCS)
|
||||
S_OBJS = $(ALL_SRCS:.c=.la)
|
||||
S_CORE_OBJS = $(CORE_SRCS:.c=.la)
|
||||
ST_OBJS = $(ALL_SRCS:.c=.lo) $(CORE_SRCS:.c=.lo)
|
||||
SUFFIXES = .c .so .lo .la
|
||||
|
||||
.c.lo:
|
||||
$(LIBTOOL) --mode=compile $(CC) -prefer-pic -DHAVE_CONFIG_H $(INCLUDES) $(AM_CPPFLAGS) $(CFLAGS) -c $< -o $@
|
||||
|
||||
.lo.la:
|
||||
$(LIBTOOL) --mode=link $(CC) -rpath $(moduledir) -module -avoid-version $(CFLAGS) -o $@ $< $(LIBS) $(LDFLAGS)
|
||||
|
||||
all: $(S_OBJS) $(S_CORE_OBJS)
|
||||
|
||||
clean-generic:
|
||||
$(LIBTOOL) --mode=clean $(RB_RM) -f $(S_OBJS) $(S_CORE_OBJS) $(ST_OBJS)
|
||||
|
||||
install_modules: $(S_OBJS)
|
||||
-@@$(MKDIR_P) $(DESTDIR)$(contribdir); \
|
||||
for x in $(S_OBJS); do $(SHELL) ../install-mod.sh $$x $(DESTDIR)$(contribdir);done
|
||||
|
||||
#install-mkdirs:
|
||||
# @echo "ircd: setting up modular directory structure"
|
||||
# -@if test ! -d $(DESTDIR)$(moduledir); then \
|
||||
# mkdir $(DESTDIR)$(moduledir); \
|
||||
# fi
|
||||
# -@if test -d $(DESTDIR)$(moduledir)-old; then \
|
||||
# rm -rf $(DESTDIR)$(moduledir)-old; \
|
||||
# fi
|
||||
# -@if test -d $(DESTDIR)$(moduledir); then \
|
||||
# echo "ircd: backing up modules"; \
|
||||
# mv $(DESTDIR)$(moduledir) $(DESTDIR)$(moduledir)-old; \
|
||||
# fi
|
||||
#
|
||||
# @mkdir -p -m 755 $(DESTDIR)$(moduledir)
|
||||
|
||||
install: install_modules
|
490
ircd-ratbox-3.0.10/contrib/Makefile.in
Normal file
490
ircd-ratbox-3.0.10/contrib/Makefile.in
Normal file
@ -0,0 +1,490 @@
|
||||
# Makefile.in generated by automake 1.11.6 from Makefile.am.
|
||||
# @configure_input@
|
||||
|
||||
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
|
||||
# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
|
||||
# Foundation, Inc.
|
||||
# This Makefile.in is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
||||
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
# PARTICULAR PURPOSE.
|
||||
|
||||
@SET_MAKE@
|
||||
VPATH = @srcdir@
|
||||
am__make_dryrun = \
|
||||
{ \
|
||||
am__dry=no; \
|
||||
case $$MAKEFLAGS in \
|
||||
*\\[\ \ ]*) \
|
||||
echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \
|
||||
| grep '^AM OK$$' >/dev/null || am__dry=yes;; \
|
||||
*) \
|
||||
for am__flg in $$MAKEFLAGS; do \
|
||||
case $$am__flg in \
|
||||
*=*|--*) ;; \
|
||||
*n*) am__dry=yes; break;; \
|
||||
esac; \
|
||||
done;; \
|
||||
esac; \
|
||||
test $$am__dry = yes; \
|
||||
}
|
||||
pkgdatadir = $(datadir)/@PACKAGE@
|
||||
pkgincludedir = $(includedir)/@PACKAGE@
|
||||
pkglibdir = $(libdir)/@PACKAGE@
|
||||
pkglibexecdir = $(libexecdir)/@PACKAGE@
|
||||
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
|
||||
install_sh_DATA = $(install_sh) -c -m 644
|
||||
install_sh_PROGRAM = $(install_sh) -c
|
||||
install_sh_SCRIPT = $(install_sh) -c
|
||||
INSTALL_HEADER = $(INSTALL_DATA)
|
||||
transform = $(program_transform_name)
|
||||
NORMAL_INSTALL = :
|
||||
PRE_INSTALL = :
|
||||
POST_INSTALL = :
|
||||
NORMAL_UNINSTALL = :
|
||||
PRE_UNINSTALL = :
|
||||
POST_UNINSTALL = :
|
||||
build_triplet = @build@
|
||||
host_triplet = @host@
|
||||
subdir = contrib
|
||||
DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
|
||||
$(top_srcdir)/configure.ac
|
||||
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
||||
$(ACLOCAL_M4)
|
||||
mkinstalldirs = $(install_sh) -d
|
||||
CONFIG_HEADER = $(top_builddir)/include/setup.h
|
||||
CONFIG_CLEAN_FILES =
|
||||
CONFIG_CLEAN_VPATH_FILES =
|
||||
SOURCES =
|
||||
DIST_SOURCES =
|
||||
am__can_run_installinfo = \
|
||||
case $$AM_UPDATE_INFO_DIR in \
|
||||
n|no|NO) false;; \
|
||||
*) (install-info --version) >/dev/null 2>&1;; \
|
||||
esac
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
ACLOCAL = @ACLOCAL@
|
||||
ALLOCA = @ALLOCA@
|
||||
AMTAR = @AMTAR@
|
||||
AR = @AR@
|
||||
ARGZ_H = @ARGZ_H@
|
||||
AUTOCONF = @AUTOCONF@
|
||||
AUTOHEADER = @AUTOHEADER@
|
||||
AUTOMAKE = @AUTOMAKE@
|
||||
AWK = @AWK@
|
||||
CC = @CC@
|
||||
CCDEPMODE = @CCDEPMODE@
|
||||
CFLAGS = @CFLAGS@
|
||||
CP = @CP@
|
||||
CPP = @CPP@
|
||||
CPPFLAGS = @CPPFLAGS@
|
||||
CYGPATH_W = @CYGPATH_W@
|
||||
DEFS = @DEFS@
|
||||
DEPDIR = @DEPDIR@
|
||||
DLLTOOL = @DLLTOOL@
|
||||
DSYMUTIL = @DSYMUTIL@
|
||||
DUMPBIN = @DUMPBIN@
|
||||
ECHO_C = @ECHO_C@
|
||||
ECHO_N = @ECHO_N@
|
||||
ECHO_T = @ECHO_T@
|
||||
EGREP = @EGREP@
|
||||
ETC_DIR = @ETC_DIR@
|
||||
EXEEXT = @EXEEXT@
|
||||
FGREP = @FGREP@
|
||||
GREP = @GREP@
|
||||
HELP_DIR = @HELP_DIR@
|
||||
INCLTDL = @INCLTDL@
|
||||
INSTALL = @INSTALL@
|
||||
INSTALL_DATA = @INSTALL_DATA@
|
||||
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
||||
IRCD_PREFIX = @IRCD_PREFIX@
|
||||
LD = @LD@
|
||||
LDFLAGS = @LDFLAGS@
|
||||
LEX = @LEX@
|
||||
LEXLIB = @LEXLIB@
|
||||
LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
|
||||
LIBADD_DL = @LIBADD_DL@
|
||||
LIBADD_DLD_LINK = @LIBADD_DLD_LINK@
|
||||
LIBADD_DLOPEN = @LIBADD_DLOPEN@
|
||||
LIBADD_SHL_LOAD = @LIBADD_SHL_LOAD@
|
||||
LIBEXEC_DIR = @LIBEXEC_DIR@
|
||||
LIBLTDL = @LIBLTDL@
|
||||
LIBOBJS = @LIBOBJS@
|
||||
LIBS = @LIBS@
|
||||
LIBTOOL = @LIBTOOL@
|
||||
LIPO = @LIPO@
|
||||
LN_S = @LN_S@
|
||||
LOG_DIR = @LOG_DIR@
|
||||
LTDLDEPS = @LTDLDEPS@
|
||||
LTDLINCL = @LTDLINCL@
|
||||
LTDLOPEN = @LTDLOPEN@
|
||||
LTDL_SUBDIR = @LTDL_SUBDIR@
|
||||
LTLIBOBJS = @LTLIBOBJS@
|
||||
LT_CONFIG_H = @LT_CONFIG_H@
|
||||
LT_DLLOADERS = @LT_DLLOADERS@
|
||||
LT_DLPREOPEN = @LT_DLPREOPEN@
|
||||
LT_OBJDIR = @LT_OBJDIR@
|
||||
MAINT = @MAINT@
|
||||
MAKEINFO = @MAKEINFO@
|
||||
MANIFEST_TOOL = @MANIFEST_TOOL@
|
||||
MKDIR_P = @MKDIR_P@
|
||||
MODULE_DIR = @MODULE_DIR@
|
||||
MV = @MV@
|
||||
NM = @NM@
|
||||
NMEDIT = @NMEDIT@
|
||||
OBJDUMP = @OBJDUMP@
|
||||
OBJEXT = @OBJEXT@
|
||||
OTOOL = @OTOOL@
|
||||
OTOOL64 = @OTOOL64@
|
||||
PACKAGE = @PACKAGE@
|
||||
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
|
||||
PACKAGE_NAME = @PACKAGE_NAME@
|
||||
PACKAGE_STRING = @PACKAGE_STRING@
|
||||
PACKAGE_TARNAME = @PACKAGE_TARNAME@
|
||||
PACKAGE_URL = @PACKAGE_URL@
|
||||
PACKAGE_VERSION = @PACKAGE_VERSION@
|
||||
PATH_SEPARATOR = @PATH_SEPARATOR@
|
||||
PICFLAGS = @PICFLAGS@
|
||||
RANLIB = @RANLIB@
|
||||
RB_RM = @RB_RM@
|
||||
SED = @SED@
|
||||
SEDOBJ = @SEDOBJ@
|
||||
SET_MAKE = @SET_MAKE@
|
||||
SHELL = @SHELL@
|
||||
SHLIBEXT = @SHLIBEXT@
|
||||
SQLITE3_CFLAGS = @SQLITE3_CFLAGS@
|
||||
SQLITE3_LIBS = @SQLITE3_LIBS@
|
||||
SQLITE_SUBDIR = @SQLITE_SUBDIR@
|
||||
SSL_INCLUDES = @SSL_INCLUDES@
|
||||
SSL_LIBS = @SSL_LIBS@
|
||||
STRIP = @STRIP@
|
||||
VERSION = @VERSION@
|
||||
WARNFLAGS = @WARNFLAGS@
|
||||
YACC = @YACC@
|
||||
YFLAGS = @YFLAGS@
|
||||
ZLIB_LD = @ZLIB_LD@
|
||||
abs_builddir = @abs_builddir@
|
||||
abs_srcdir = @abs_srcdir@
|
||||
abs_top_builddir = @abs_top_builddir@
|
||||
abs_top_srcdir = @abs_top_srcdir@
|
||||
ac_ct_AR = @ac_ct_AR@
|
||||
ac_ct_CC = @ac_ct_CC@
|
||||
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
|
||||
am__include = @am__include@
|
||||
am__leading_dot = @am__leading_dot@
|
||||
am__quote = @am__quote@
|
||||
am__tar = @am__tar@
|
||||
am__untar = @am__untar@
|
||||
bindir = @bindir@
|
||||
build = @build@
|
||||
build_alias = @build_alias@
|
||||
build_cpu = @build_cpu@
|
||||
build_os = @build_os@
|
||||
build_vendor = @build_vendor@
|
||||
builddir = @builddir@
|
||||
confdir = @confdir@
|
||||
datadir = @datadir@
|
||||
datarootdir = @datarootdir@
|
||||
docdir = @docdir@
|
||||
dvidir = @dvidir@
|
||||
exec_prefix = @exec_prefix@
|
||||
helpdir = @helpdir@
|
||||
host = @host@
|
||||
host_alias = @host_alias@
|
||||
host_cpu = @host_cpu@
|
||||
host_os = @host_os@
|
||||
host_vendor = @host_vendor@
|
||||
htmldir = @htmldir@
|
||||
includedir = @includedir@
|
||||
infodir = @infodir@
|
||||
install_sh = @install_sh@
|
||||
libdir = @libdir@
|
||||
libexecdir = @libexecdir@
|
||||
localedir = @localedir@
|
||||
localstatedir = @localstatedir@
|
||||
logdir = @logdir@
|
||||
ltdl_LIBOBJS = @ltdl_LIBOBJS@
|
||||
ltdl_LTLIBOBJS = @ltdl_LTLIBOBJS@
|
||||
mandir = @mandir@
|
||||
mkdir_p = @mkdir_p@
|
||||
moduledir = @moduledir@
|
||||
oldincludedir = @oldincludedir@
|
||||
pdfdir = @pdfdir@
|
||||
prefix = @prefix@
|
||||
program_transform_name = @program_transform_name@
|
||||
psdir = @psdir@
|
||||
runstatedir = @runstatedir@
|
||||
sbindir = @sbindir@
|
||||
sharedstatedir = @sharedstatedir@
|
||||
srcdir = @srcdir@
|
||||
subdirs = @subdirs@
|
||||
sys_symbol_underscore = @sys_symbol_underscore@
|
||||
sysconfdir = @sysconfdir@
|
||||
target_alias = @target_alias@
|
||||
top_build_prefix = @top_build_prefix@
|
||||
top_builddir = @top_builddir@
|
||||
top_srcdir = @top_srcdir@
|
||||
libcoredir = @libdir@
|
||||
modulesdir = @moduledir@/autoload
|
||||
coredir = @moduledir@
|
||||
servicesdir = @moduledir@/autoload
|
||||
libmodulesdir = @moduledir@
|
||||
contribdir = @moduledir@/contrib
|
||||
INCLUDES = -I../include -I../libratbox/include $(INCLTDL)
|
||||
AM_CFLAGS = $(WARNFLAGS)
|
||||
SRCS = \
|
||||
example_module.c \
|
||||
m_42.c \
|
||||
m_clearchan.c \
|
||||
m_flags.c \
|
||||
m_force.c \
|
||||
m_mkpasswd.c \
|
||||
m_ojoin.c \
|
||||
m_okick.c \
|
||||
m_olist.c \
|
||||
m_opme.c \
|
||||
spy_admin_notice.c \
|
||||
spy_info_notice.c \
|
||||
spy_links_notice.c \
|
||||
spy_motd_notice.c \
|
||||
spy_stats_notice.c \
|
||||
spy_stats_p_notice.c \
|
||||
spy_whois_notice.c \
|
||||
spy_whois_notice_global.c
|
||||
|
||||
ALL_SRCS = $(SRCS)
|
||||
S_OBJS = $(ALL_SRCS:.c=.la)
|
||||
S_CORE_OBJS = $(CORE_SRCS:.c=.la)
|
||||
ST_OBJS = $(ALL_SRCS:.c=.lo) $(CORE_SRCS:.c=.lo)
|
||||
SUFFIXES = .c .so .lo .la
|
||||
all: all-am
|
||||
|
||||
.SUFFIXES:
|
||||
.SUFFIXES: .c .so .lo .la
|
||||
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
|
||||
@for dep in $?; do \
|
||||
case '$(am__configure_deps)' in \
|
||||
*$$dep*) \
|
||||
( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
|
||||
&& { if test -f $@; then exit 0; else break; fi; }; \
|
||||
exit 1;; \
|
||||
esac; \
|
||||
done; \
|
||||
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu contrib/Makefile'; \
|
||||
$(am__cd) $(top_srcdir) && \
|
||||
$(AUTOMAKE) --gnu contrib/Makefile
|
||||
.PRECIOUS: Makefile
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
@case '$?' in \
|
||||
*config.status*) \
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
|
||||
*) \
|
||||
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
|
||||
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
|
||||
esac;
|
||||
|
||||
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
|
||||
$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
$(am__aclocal_m4_deps):
|
||||
|
||||
mostlyclean-libtool:
|
||||
-rm -f *.lo
|
||||
|
||||
clean-libtool:
|
||||
-rm -rf .libs _libs
|
||||
tags: TAGS
|
||||
TAGS:
|
||||
|
||||
ctags: CTAGS
|
||||
CTAGS:
|
||||
|
||||
|
||||
distdir: $(DISTFILES)
|
||||
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
|
||||
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
|
||||
list='$(DISTFILES)'; \
|
||||
dist_files=`for file in $$list; do echo $$file; done | \
|
||||
sed -e "s|^$$srcdirstrip/||;t" \
|
||||
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
|
||||
case $$dist_files in \
|
||||
*/*) $(MKDIR_P) `echo "$$dist_files" | \
|
||||
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
|
||||
sort -u` ;; \
|
||||
esac; \
|
||||
for file in $$dist_files; do \
|
||||
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
|
||||
if test -d $$d/$$file; then \
|
||||
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
|
||||
if test -d "$(distdir)/$$file"; then \
|
||||
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
|
||||
fi; \
|
||||
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
|
||||
cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
|
||||
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
|
||||
fi; \
|
||||
cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
|
||||
else \
|
||||
test -f "$(distdir)/$$file" \
|
||||
|| cp -p $$d/$$file "$(distdir)/$$file" \
|
||||
|| exit 1; \
|
||||
fi; \
|
||||
done
|
||||
check-am: all-am
|
||||
check: check-am
|
||||
all-am: Makefile
|
||||
installdirs:
|
||||
install-exec: install-exec-am
|
||||
install-data: install-data-am
|
||||
uninstall: uninstall-am
|
||||
|
||||
install-am: all-am
|
||||
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
|
||||
|
||||
installcheck: installcheck-am
|
||||
install-strip:
|
||||
if test -z '$(STRIP)'; then \
|
||||
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
||||
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
|
||||
install; \
|
||||
else \
|
||||
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
||||
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
|
||||
"INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
|
||||
fi
|
||||
mostlyclean-generic:
|
||||
|
||||
distclean-generic:
|
||||
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
||||
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
|
||||
|
||||
maintainer-clean-generic:
|
||||
@echo "This command is intended for maintainers to use"
|
||||
@echo "it deletes files that may require special tools to rebuild."
|
||||
clean: clean-am
|
||||
|
||||
clean-am: clean-generic clean-libtool mostlyclean-am
|
||||
|
||||
distclean: distclean-am
|
||||
-rm -f Makefile
|
||||
distclean-am: clean-am distclean-generic
|
||||
|
||||
dvi: dvi-am
|
||||
|
||||
dvi-am:
|
||||
|
||||
html: html-am
|
||||
|
||||
html-am:
|
||||
|
||||
info: info-am
|
||||
|
||||
info-am:
|
||||
|
||||
install-data-am:
|
||||
|
||||
install-dvi: install-dvi-am
|
||||
|
||||
install-dvi-am:
|
||||
|
||||
install-exec-am:
|
||||
|
||||
install-html: install-html-am
|
||||
|
||||
install-html-am:
|
||||
|
||||
install-info: install-info-am
|
||||
|
||||
install-info-am:
|
||||
|
||||
install-man:
|
||||
|
||||
install-pdf: install-pdf-am
|
||||
|
||||
install-pdf-am:
|
||||
|
||||
install-ps: install-ps-am
|
||||
|
||||
install-ps-am:
|
||||
|
||||
installcheck-am:
|
||||
|
||||
maintainer-clean: maintainer-clean-am
|
||||
-rm -f Makefile
|
||||
maintainer-clean-am: distclean-am maintainer-clean-generic
|
||||
|
||||
mostlyclean: mostlyclean-am
|
||||
|
||||
mostlyclean-am: mostlyclean-generic mostlyclean-libtool
|
||||
|
||||
pdf: pdf-am
|
||||
|
||||
pdf-am:
|
||||
|
||||
ps: ps-am
|
||||
|
||||
ps-am:
|
||||
|
||||
uninstall-am:
|
||||
|
||||
.MAKE: install-am install-strip
|
||||
|
||||
.PHONY: all all-am check check-am clean clean-generic clean-libtool \
|
||||
distclean distclean-generic distclean-libtool distdir dvi \
|
||||
dvi-am html html-am info info-am install install-am \
|
||||
install-data install-data-am install-dvi install-dvi-am \
|
||||
install-exec install-exec-am install-html install-html-am \
|
||||
install-info install-info-am install-man install-pdf \
|
||||
install-pdf-am install-ps install-ps-am install-strip \
|
||||
installcheck installcheck-am installdirs maintainer-clean \
|
||||
maintainer-clean-generic mostlyclean mostlyclean-generic \
|
||||
mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am
|
||||
|
||||
|
||||
.c.lo:
|
||||
$(LIBTOOL) --mode=compile $(CC) -prefer-pic -DHAVE_CONFIG_H $(INCLUDES) $(AM_CPPFLAGS) $(CFLAGS) -c $< -o $@
|
||||
|
||||
.lo.la:
|
||||
$(LIBTOOL) --mode=link $(CC) -rpath $(moduledir) -module -avoid-version $(CFLAGS) -o $@ $< $(LIBS) $(LDFLAGS)
|
||||
|
||||
all: $(S_OBJS) $(S_CORE_OBJS)
|
||||
|
||||
clean-generic:
|
||||
$(LIBTOOL) --mode=clean $(RB_RM) -f $(S_OBJS) $(S_CORE_OBJS) $(ST_OBJS)
|
||||
|
||||
install_modules: $(S_OBJS)
|
||||
-@@$(MKDIR_P) $(DESTDIR)$(contribdir); \
|
||||
for x in $(S_OBJS); do $(SHELL) ../install-mod.sh $$x $(DESTDIR)$(contribdir);done
|
||||
|
||||
#install-mkdirs:
|
||||
# @echo "ircd: setting up modular directory structure"
|
||||
# -@if test ! -d $(DESTDIR)$(moduledir); then \
|
||||
# mkdir $(DESTDIR)$(moduledir); \
|
||||
# fi
|
||||
# -@if test -d $(DESTDIR)$(moduledir)-old; then \
|
||||
# rm -rf $(DESTDIR)$(moduledir)-old; \
|
||||
# fi
|
||||
# -@if test -d $(DESTDIR)$(moduledir); then \
|
||||
# echo "ircd: backing up modules"; \
|
||||
# mv $(DESTDIR)$(moduledir) $(DESTDIR)$(moduledir)-old; \
|
||||
# fi
|
||||
#
|
||||
# @mkdir -p -m 755 $(DESTDIR)$(moduledir)
|
||||
|
||||
install: install_modules
|
||||
|
||||
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
||||
# Otherwise a system limit (for SysV at least) may be exceeded.
|
||||
.NOEXPORT:
|
80
ircd-ratbox-3.0.10/contrib/README
Normal file
80
ircd-ratbox-3.0.10/contrib/README
Normal file
@ -0,0 +1,80 @@
|
||||
$Id: README 27287 2011-10-31 16:11:37Z androsyn $
|
||||
|
||||
This directory contains modules and patches that have been contributed
|
||||
by other people, or aren't suitable for including into the
|
||||
ircd-ratbox tree. The coding team do not officially support the contrib/
|
||||
modules, or guarantee any of them will actually work.
|
||||
|
||||
|
||||
Modules
|
||||
-------
|
||||
|
||||
m_clearchan.c - CLEARCHAN - clears all users out of a channel and joins person
|
||||
issuing command
|
||||
Syntax: CLEARCHAN <channel>
|
||||
|
||||
m_flags.c - FLAGS - csircd like support of changing usermodes
|
||||
Syntax: FLAGS :+OWALLOPS -SWALLOPS
|
||||
|
||||
m_force.c - FORCE - forces a user to either part or join a channel with
|
||||
an optional status (@%+)
|
||||
Syntax: FORCEJOIN <nick> [status]<channel>
|
||||
FORCEPART <nick> <channel>
|
||||
|
||||
m_jupe.c - JUPE - Server juping command
|
||||
Syntax: JUPE juped.server.name :Reason
|
||||
|
||||
m_ltrace.c - LTRACE - Limited trace. Similar to TRACE except only reports
|
||||
current opers and servers.
|
||||
Syntax: LTRACE [nick|mask [server]]
|
||||
|
||||
m_map.c - MAP - Display the server routing graph in a visually pleasing
|
||||
format
|
||||
Syntax: MAP
|
||||
|
||||
m_mkpasswd.c - MKPASSWD - generate a DES or MD5 encryption of a password
|
||||
Syntax: MKPASSWD <plaintext> [MD5|DES]
|
||||
|
||||
m_ojoin.c - OJOIN - Join a channel through any modes or limits with
|
||||
an optional status (@%+)
|
||||
Syntax: OJOIN [status]<channel>
|
||||
|
||||
m_olist.c - OLIST - Lists channels like LIST, but shows hidden
|
||||
channels. Oper only of course.
|
||||
|
||||
m_opme.c - OPME - Allows an admin to op themselves in an opless channel
|
||||
Syntax: OPME <channel>
|
||||
|
||||
m_owho.c - OWHO - Just like WHO but doesn't hide things from opers
|
||||
|
||||
m_owhois.c - OWHOIS - Allows an oper to do a whois on any user and see
|
||||
all channels they are in. The syntax is the same
|
||||
as WHOIS
|
||||
|
||||
m_tburst.c - TBURST - module that will make servers send channel topics
|
||||
to each other after a netsplit/restart.
|
||||
|
||||
m_42.c - 42 - The Answer to Life, the Universe, and Everything.
|
||||
|
||||
example_module.c - An example module to be used for creating your own.
|
||||
Syntax: TEST
|
||||
|
||||
|
||||
Spy Modules
|
||||
-----------
|
||||
|
||||
The following are the 'spy' parts, accessible via the +y usermode
|
||||
|
||||
spy_admin_notice.c - Spy on clients doing ADMIN
|
||||
spy_info_notice.c - Spy on clients doing INFO
|
||||
spy_links_notice.c - Spy on clients doing LINKS
|
||||
spy_motd_notice.c - Spy on clients doing MOTD
|
||||
spy_stats_notice.c - Spy on clients doing all STATS
|
||||
spy_stats_p_notice.c - Spy on clients doing STATS p only
|
||||
spy_whois_notice.c - Spy on local clients who WHOIS you.
|
||||
spy_whois_notice_global.c - Spy on remote clients who WHOIS you.
|
||||
|
||||
Note: if you have both spy_stats_notice.c and spy_stats_p_notice.c loaded
|
||||
you will get two messages.
|
||||
|
||||
Kilroy says hello
|
289
ircd-ratbox-3.0.10/contrib/example_module.c
Normal file
289
ircd-ratbox-3.0.10/contrib/example_module.c
Normal file
@ -0,0 +1,289 @@
|
||||
/************************************************************************
|
||||
* IRC - Internet Relay Chat, doc/example_module.c
|
||||
* Copyright (C) 2001 Hybrid Development Team
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 1, or (at your option)
|
||||
* any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*
|
||||
* $Id: example_module.c 26094 2008-09-19 15:33:46Z androsyn $
|
||||
*/
|
||||
|
||||
/* List of ircd includes from ../include/ */
|
||||
#include "stdinc.h"
|
||||
#include "ratbox_lib.h"
|
||||
#include "struct.h"
|
||||
#include "modules.h"
|
||||
#include "parse.h"
|
||||
#include "hook.h"
|
||||
#include "client.h"
|
||||
#include "ircd.h"
|
||||
#include "send.h"
|
||||
|
||||
/* Declare the void's initially up here, as modules dont have an
|
||||
* include file, we will normally have client_p, source_p, parc
|
||||
* and parv[] where:
|
||||
*
|
||||
* client_p == client issuing command
|
||||
* source_p == where the command came from
|
||||
* parc == the number of parameters
|
||||
* parv == an array of the parameters
|
||||
*/
|
||||
|
||||
static int munreg_test(struct Client *client_p, struct Client *source_p, int parc,
|
||||
const char *parv[]);
|
||||
static int mclient_test(struct Client *client_p, struct Client *source_p, int parc,
|
||||
const char *parv[]);
|
||||
static int mserver_test(struct Client *client_p, struct Client *source_p, int parc,
|
||||
const char *parv[]);
|
||||
static int mrclient_test(struct Client *client_p, struct Client *source_p, int parc,
|
||||
const char *parv[]);
|
||||
static int moper_test(struct Client *client_p, struct Client *source_p, int parc,
|
||||
const char *parv[]);
|
||||
|
||||
/* Show the commands this module can handle in a msgtab
|
||||
* and give the msgtab a name, here its test_msgtab
|
||||
*/
|
||||
|
||||
struct Message test_msgtab = {
|
||||
"TEST", /* the /COMMAND you want */
|
||||
0, /* SET TO ZERO -- number of times command used by clients */
|
||||
0, /* SET TO ZERO -- number of times command used by clients */
|
||||
0, /* SET TO ZERO -- number of times command used by clients */
|
||||
MFLG_SLOW, /* ALWAYS SET TO MFLG_SLOW */
|
||||
|
||||
/* the functions to call for each handler. If not using the generic
|
||||
* handlers, the first param is the function to call, the second is the
|
||||
* required number of parameters. NOTE: If you specify a min para of 2,
|
||||
* then parv[1] must *also* be non-empty.
|
||||
*/
|
||||
{
|
||||
{munreg_test, 0}, /* function call for unregistered clients, 0 parms required */
|
||||
{mclient_test, 0}, /* function call for local clients, 0 parms required */
|
||||
{mrclient_test, 0}, /* function call for remote clients, 0 parms required */
|
||||
{mserver_test, 0}, /* function call for servers, 0 parms required */
|
||||
mg_ignore, /* function call for ENCAP, unused in this test */
|
||||
{moper_test, 0} /* function call for operators, 0 parms required */
|
||||
}
|
||||
};
|
||||
|
||||
/*
|
||||
* There are also some macros for the above function calls and parameter counts.
|
||||
* Here's a list:
|
||||
*
|
||||
* mg_ignore: ignore the command when it comes from certain types
|
||||
* mg_not_oper: tell the client it requires being an operator
|
||||
* mg_reg: prevent the client using this if registered
|
||||
* mg_unreg: prevent the client using this if unregistered
|
||||
*
|
||||
* These macros assume a parameter count of zero; you do not set it.
|
||||
* For further details, see include/msg.h
|
||||
*/
|
||||
|
||||
|
||||
/* The mapi_clist_av1 indicates which commands (struct Message)
|
||||
* should be loaded from the module. The list should be terminated
|
||||
* by a NULL.
|
||||
*/
|
||||
mapi_clist_av1 test_clist[] = { &test_msgtab, NULL };
|
||||
|
||||
/* The mapi_hlist_av1 indicates which hook functions we need to be able to
|
||||
* call. We need to declare an integer, then add the name of the hook
|
||||
* function to call and a pointer to this integer. The list should be
|
||||
* terminated with NULLs.
|
||||
*/
|
||||
int doing_example_hook;
|
||||
mapi_hlist_av1 test_hlist[] = {
|
||||
{"doing_example_hook", &doing_example_hook,},
|
||||
{NULL, NULL}
|
||||
};
|
||||
|
||||
/* The mapi_hfn_list_av1 declares the hook functions which other modules can
|
||||
* call. The first parameter is the name of the hook, the second is a void
|
||||
* returning function, with arbitrary parameters casted to (hookfn). This
|
||||
* list must be terminated with NULLs.
|
||||
*/
|
||||
static void show_example_hook(void *unused);
|
||||
|
||||
mapi_hfn_list_av1 test_hfnlist[] = {
|
||||
{"doing_example_hook", (hookfn) show_example_hook},
|
||||
{NULL, NULL}
|
||||
};
|
||||
|
||||
/* Here we tell it what to do when the module is loaded */
|
||||
static int
|
||||
modinit(void)
|
||||
{
|
||||
/* Nothing to do for the example module. */
|
||||
/* The init function should return -1 on failure,
|
||||
which will cause the module to be unloaded,
|
||||
otherwise 0 to indicate success. */
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* here we tell it what to do when the module is unloaded */
|
||||
static void
|
||||
moddeinit(void)
|
||||
{
|
||||
/* Again, nothing to do. */
|
||||
}
|
||||
|
||||
/* DECLARE_MODULE_AV1() actually declare the MAPI header. */
|
||||
DECLARE_MODULE_AV1(
|
||||
/* The first argument is the name */
|
||||
example,
|
||||
/* The second argument is the function to call on load */
|
||||
modinit,
|
||||
/* And the function to call on unload */
|
||||
moddeinit,
|
||||
/* Then the MAPI command list */
|
||||
test_clist,
|
||||
/* Next the hook list, if we have one. */
|
||||
test_hlist,
|
||||
/* Then the hook function list, if we have one */
|
||||
test_hfnlist,
|
||||
/* And finally the version number of this module. */
|
||||
"$Revision: 26094 $");
|
||||
|
||||
/* Any of the above arguments can be NULL to indicate they aren't used. */
|
||||
|
||||
|
||||
/*
|
||||
* mr_test
|
||||
* parv[0] = sender prefix
|
||||
* parv[1] = parameter
|
||||
*/
|
||||
|
||||
/* Here we have the functions themselves that we declared above,
|
||||
* and the fairly normal C coding
|
||||
*/
|
||||
static int
|
||||
munreg_test(struct Client *client_p, struct Client *source_p, int parc, const char *parv[])
|
||||
{
|
||||
if(parc < 2)
|
||||
{
|
||||
sendto_one(source_p, ":%s NOTICE %s :You are unregistered and sent no parameters",
|
||||
me.name, source_p->name);
|
||||
}
|
||||
else
|
||||
{
|
||||
sendto_one(source_p, ":%s NOTICE %s :You are unregistered and sent parameter: %s",
|
||||
me.name, source_p->name, parv[1]);
|
||||
}
|
||||
|
||||
/* illustration of how to call a hook function */
|
||||
call_hook(doing_example_hook, NULL);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* mclient_test
|
||||
* parv[0] = sender prefix
|
||||
* parv[1] = parameter
|
||||
*/
|
||||
static int
|
||||
mclient_test(struct Client *client_p, struct Client *source_p, int parc, const char *parv[])
|
||||
{
|
||||
if(parc < 2)
|
||||
{
|
||||
sendto_one(source_p, ":%s NOTICE %s :You are a normal user, and sent no parameters",
|
||||
me.name, source_p->name);
|
||||
}
|
||||
else
|
||||
{
|
||||
sendto_one(source_p,
|
||||
":%s NOTICE %s :You are a normal user, and send parameters: %s", me.name,
|
||||
source_p->name, parv[1]);
|
||||
}
|
||||
|
||||
/* illustration of how to call a hook function */
|
||||
call_hook(doing_example_hook, NULL);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* mrclient_test
|
||||
* parv[0] = sender prefix
|
||||
* parv[1] = parameter
|
||||
*/
|
||||
static int
|
||||
mrclient_test(struct Client *client_p, struct Client *source_p, int parc, const char *parv[])
|
||||
{
|
||||
if(parc < 2)
|
||||
{
|
||||
sendto_one(source_p,
|
||||
":%s NOTICE %s :You are a remote client, and sent no parameters",
|
||||
me.name, source_p->name);
|
||||
}
|
||||
else
|
||||
{
|
||||
sendto_one(source_p,
|
||||
":%s NOTICE %s :You are a remote client, and sent parameters: %s",
|
||||
me.name, source_p->name, parv[1]);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* mserver_test
|
||||
* parv[0] = sender prefix
|
||||
* parv[1] = parameter
|
||||
*/
|
||||
static int
|
||||
mserver_test(struct Client *client_p, struct Client *source_p, int parc, const char *parv[])
|
||||
{
|
||||
if(parc < 2)
|
||||
{
|
||||
sendto_one(source_p,
|
||||
":%s NOTICE %s :You are a server, and sent no parameters",
|
||||
me.name, source_p->name);
|
||||
}
|
||||
else
|
||||
{
|
||||
sendto_one(source_p,
|
||||
":%s NOTICE %s :You are a server, and sent parameters: %s",
|
||||
me.name, source_p->name, parv[1]);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* moper_test
|
||||
* parv[0] = sender prefix
|
||||
* parv[1] = parameter
|
||||
*/
|
||||
static int
|
||||
moper_test(struct Client *client_p, struct Client *source_p, int parc, const char *parv[])
|
||||
{
|
||||
if(parc < 2)
|
||||
{
|
||||
sendto_one(source_p, ":%s NOTICE %s :You are an operator, and sent no parameters",
|
||||
me.name, source_p->name);
|
||||
}
|
||||
else
|
||||
{
|
||||
sendto_one(source_p, ":%s NOTICE %s :You are an operator, and sent parameters: %s",
|
||||
me.name, source_p->name, parv[1]);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
show_example_hook(void *unused)
|
||||
{
|
||||
sendto_realops_flags(UMODE_ALL, L_ALL, "Called example hook!");
|
||||
}
|
||||
|
||||
/* END OF EXAMPLE MODULE */
|
159
ircd-ratbox-3.0.10/contrib/ircd-shortcut.pl
Executable file
159
ircd-ratbox-3.0.10/contrib/ircd-shortcut.pl
Executable file
@ -0,0 +1,159 @@
|
||||
#!/usr/bin/perl
|
||||
#
|
||||
# ircd-shortcut.pl
|
||||
# This script generates ircd command shortcuts for use with
|
||||
# ratbox-services. These are notably safer to use than users simply
|
||||
# messaging the service nicknames, as they cannot be intercepted
|
||||
# by other users when services is split.
|
||||
#
|
||||
# This file will output to m_rsshortcut.c, which can then be compiled
|
||||
# as an ircd module and installed. The module generated is for use
|
||||
# with ircd-ratbox-2.1.x.
|
||||
#
|
||||
# Copyright (C) 2005 Lee Hardy <lee -at- leeh.co.uk>
|
||||
# Copyright (C) 2005-2012 ircd-ratbox development team
|
||||
#
|
||||
# $Id: ircd-shortcut.pl 20411 2005-05-18 14:31:19Z leeh $
|
||||
|
||||
#####################################
|
||||
##### -- BEGIN CONFIGURATION -- #####
|
||||
#####################################
|
||||
|
||||
# The servername of your services as it appears on IRC.
|
||||
#
|
||||
my $servername = "services.ircd-ratbox.org";
|
||||
|
||||
# The list of services you wish to generate shortcuts for.
|
||||
# This list must be the actual nicknames, as they appear on IRC
|
||||
# of each service.
|
||||
#
|
||||
my @services = ("USERSERV", "CHANSERV", "NICKSERV", "ALIS",
|
||||
"OPERBOT", "OPERSERV", "JUPESERV", "GLOBAL");
|
||||
|
||||
|
||||
######################################
|
||||
##### -- END OF CONFIGURATION -- #####
|
||||
######################################
|
||||
|
||||
|
||||
open(FILE, '>', 'm_rsshortcut.c');
|
||||
|
||||
print FILE <<".EOF.";
|
||||
/* m_rsshortcut.c
|
||||
* Contains the code for command shortcuts for ratbox-services
|
||||
*
|
||||
* Copyright (C) 2005 Lee Hardy <lee -at- leeh.co.uk>
|
||||
* Copyright (C) 2005-2012 ircd-ratbox development team
|
||||
*
|
||||
* 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.The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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.
|
||||
*/
|
||||
#include "stdinc.h"
|
||||
#include "ratbox_lib.h"
|
||||
#include "struct.h"
|
||||
#include "modules.h"
|
||||
#include "parse.h"
|
||||
#include "hook.h"
|
||||
#include "client.h"
|
||||
#include "ircd.h"
|
||||
#include "send.h"
|
||||
#include "s_serv.h"
|
||||
#include "hash.h"
|
||||
.EOF.
|
||||
|
||||
# generating function names with capital letters is ugly
|
||||
foreach my $sname (@services) {
|
||||
$sname =~ tr/A-Z/a-z/;
|
||||
}
|
||||
|
||||
foreach my $sname (@services) {
|
||||
print FILE "static int m_$sname(struct Client *, struct Client *, int, const char **);\n";
|
||||
}
|
||||
|
||||
print FILE "\n";
|
||||
|
||||
foreach my $sname (@services) {
|
||||
# the command name needs to be in capitals
|
||||
my $snamecaps = $sname;
|
||||
$snamecaps =~ tr/a-z/A-Z/;
|
||||
print FILE "struct Message " . $sname . "_msgtab = {\n";
|
||||
print FILE "\t\"$snamecaps\", 0, 0, 0, MFLG_SLOW,\n";
|
||||
print FILE "\t{mg_ignore, {m_$sname, 2}, mg_ignore, mg_ignore, mg_ignore, {m_$sname, 2}}\n";
|
||||
print FILE "};\n";
|
||||
};
|
||||
|
||||
print FILE "mapi_clist_av1 rsshortcut_clist[] = {\n";
|
||||
|
||||
foreach my $sname (@services) {
|
||||
print FILE "\t\&" . $sname . "_msgtab,\n";
|
||||
}
|
||||
|
||||
print FILE "\tNULL\n};\n\n";
|
||||
print FILE "DECLARE_MODULE_AV1(rsshortcut, NULL, NULL, rsshortcut_clist, NULL, NULL, \"1.0\");\n\n";
|
||||
|
||||
foreach my $sname (@services) {
|
||||
print FILE << ".EOF.";
|
||||
|
||||
static int
|
||||
m_$sname(struct Client *client_p, struct Client *source_p,
|
||||
int parc, const char *parv[])
|
||||
{
|
||||
char buf[BUFSIZE];
|
||||
int i = 1;
|
||||
|
||||
if(find_server(NULL, "$servername") == NULL)
|
||||
{
|
||||
sendto_one(source_p,
|
||||
":%s 440 %s $sname :Services are currently unavailable",
|
||||
me.name, source_p->name);
|
||||
return 0;
|
||||
}
|
||||
|
||||
buf[0] = '\\0';
|
||||
|
||||
while(i < parc)
|
||||
{
|
||||
rb_strlcat(buf, parv[i], sizeof(buf));
|
||||
rb_strlcat(buf, " ", sizeof(buf));
|
||||
i++;
|
||||
}
|
||||
|
||||
sendto_match_servs(client_p, "$servername", CAP_ENCAP, NOCAPS,
|
||||
"ENCAP $servername RSMSG $sname %s",
|
||||
buf);
|
||||
return 0;
|
||||
}
|
||||
.EOF.
|
||||
|
||||
}
|
||||
|
||||
close(FILE);
|
||||
|
||||
print <<".EOF.";
|
||||
|
||||
Output generated to m_rsshortcut.c
|
||||
1. Run make m_rsshortcut.la from the contrib directory
|
||||
2. Run sh ../install-mod.sh m_rsshortcut.la PREFIX/modules/autoload
|
||||
3. On irc: /quote modrestart
|
||||
.EOF.
|
62
ircd-ratbox-3.0.10/contrib/m_42.c
Normal file
62
ircd-ratbox-3.0.10/contrib/m_42.c
Normal file
@ -0,0 +1,62 @@
|
||||
/*
|
||||
* Copyright (C) infinity-infinity God <God@Heaven>
|
||||
*
|
||||
* Bob was here
|
||||
* $Id: m_42.c 26094 2008-09-19 15:33:46Z androsyn $
|
||||
*/
|
||||
|
||||
#include "stdinc.h"
|
||||
#include "ratbox_lib.h"
|
||||
#include "struct.h"
|
||||
#include "parse.h"
|
||||
#include "modules.h"
|
||||
#include "client.h"
|
||||
#include "ircd.h"
|
||||
#include "send.h"
|
||||
|
||||
static int mclient_42(struct Client *client_p, struct Client *source_p, int parc,
|
||||
const char *parv[]);
|
||||
static int mclient_kilroy(struct Client *client_p, struct Client *source_p, int parc,
|
||||
const char *parv[]);
|
||||
|
||||
struct Message hgtg_msgtab = {
|
||||
"42", 0, 0, 0, MFLG_SLOW,
|
||||
{mg_ignore, {mclient_42, 0}, mg_ignore, mg_ignore, mg_ignore, {mclient_42, 0}
|
||||
}
|
||||
};
|
||||
|
||||
struct Message kilroy_msgtab = {
|
||||
"KILROY", 0, 0, 0, MFLG_SLOW,
|
||||
{mg_ignore, {mclient_kilroy, 0}, mg_ignore, mg_ignore, mg_ignore, {mclient_kilroy, 0}
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
mapi_clist_av1 hgtg_clist[] = { &hgtg_msgtab, &kilroy_msgtab, NULL };
|
||||
|
||||
|
||||
DECLARE_MODULE_AV1(42, NULL, NULL, hgtg_clist, NULL, NULL, "Revision 0.42");
|
||||
|
||||
|
||||
static int
|
||||
mclient_42(struct Client *client_p, struct Client *source_p, int parc, const char *parv[])
|
||||
{
|
||||
sendto_one(source_p, ":%s NOTICE %s :The Answer to Life, the Universe, and Everything.",
|
||||
me.name, source_p->name);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
mclient_kilroy(struct Client *client_p, struct Client *source_p, int parc, const char *parv[])
|
||||
{
|
||||
SetCork(source_p);
|
||||
sendto_one(source_p, ":%s NOTICE %s : ___ ", me.name,
|
||||
source_p->name);
|
||||
sendto_one(source_p, ":%s NOTICE %s :___________mm__(O O)__mm_________", me.name,
|
||||
source_p->name);
|
||||
sendto_one(source_p, ":%s NOTICE %s : \"\" U \"\" ", me.name,
|
||||
source_p->name);
|
||||
ClearCork(source_p);
|
||||
sendto_one(source_p, ":%s NOTICE %s :Kilroy was here", me.name, source_p->name);
|
||||
return 0;
|
||||
}
|
157
ircd-ratbox-3.0.10/contrib/m_clearchan.c
Normal file
157
ircd-ratbox-3.0.10/contrib/m_clearchan.c
Normal file
@ -0,0 +1,157 @@
|
||||
/*
|
||||
* IRC - Internet Relay Chat, contrib/m_clearchan.c
|
||||
* Copyright (C) 2002 Hybrid Development Team
|
||||
* Copyright (C) 2004-2012 ircd-ratbox Development Team
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 1, or (at your option)
|
||||
* any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*
|
||||
* $Id: m_clearchan.c 27381 2012-03-16 23:10:29Z dubkat $
|
||||
*/
|
||||
#include "stdinc.h"
|
||||
#include "ratbox_lib.h"
|
||||
#include "struct.h"
|
||||
#include "channel.h"
|
||||
#include "client.h"
|
||||
#include "hash.h"
|
||||
#include "match.h"
|
||||
#include "ircd.h"
|
||||
#include "numeric.h"
|
||||
#include "s_user.h"
|
||||
#include "s_conf.h"
|
||||
#include "s_newconf.h"
|
||||
#include "send.h"
|
||||
#include "s_log.h"
|
||||
#include "parse.h"
|
||||
#include "modules.h"
|
||||
#include "packet.h"
|
||||
|
||||
static int mo_clearchan(struct Client *client_p, struct Client *source_p,
|
||||
int parc, const char *parv[]);
|
||||
|
||||
struct Message clearchan_msgtab = {
|
||||
"CLEARCHAN", 0, 0, 0, MFLG_SLOW,
|
||||
{mg_unreg, mg_not_oper, mg_ignore, mg_ignore, mg_ignore, {mo_clearchan, 2}}
|
||||
};
|
||||
|
||||
mapi_clist_av1 clearchan_clist[] = { &clearchan_msgtab, NULL };
|
||||
|
||||
DECLARE_MODULE_AV1(clearchan, NULL, NULL, clearchan_clist, NULL, NULL, "$Revision: 27381 $");
|
||||
|
||||
/*
|
||||
** mo_clearchan
|
||||
** parv[0] = sender prefix
|
||||
** parv[1] = channel
|
||||
*/
|
||||
static int
|
||||
mo_clearchan(struct Client *client_p, struct Client *source_p, int parc, const char *parv[])
|
||||
{
|
||||
struct Channel *chptr;
|
||||
struct membership *msptr;
|
||||
struct Client *target_p;
|
||||
rb_dlink_node *ptr;
|
||||
rb_dlink_node *next_ptr;
|
||||
|
||||
/* admins only */
|
||||
if(!IsOperAdmin(source_p))
|
||||
{
|
||||
sendto_one(source_p, ":%s NOTICE %s :You have no A flag", me.name, parv[0]);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
if((chptr = find_channel(parv[1])) == NULL)
|
||||
{
|
||||
sendto_one_numeric(source_p, ERR_NOSUCHCHANNEL,
|
||||
form_str(ERR_NOSUCHCHANNEL), parv[1]);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if(IsMember(source_p, chptr))
|
||||
{
|
||||
sendto_one(source_p, ":%s NOTICE %s :*** Please part %s before using CLEARCHAN",
|
||||
me.name, source_p->name, parv[1]);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* quickly make everyone a peon.. */
|
||||
RB_DLINK_FOREACH(ptr, chptr->members.head)
|
||||
{
|
||||
msptr = ptr->data;
|
||||
msptr->flags &= ~CHFL_CHANOP | CHFL_VOICE;
|
||||
}
|
||||
|
||||
sendto_wallops_flags(UMODE_WALLOP, &me,
|
||||
"CLEARCHAN called for [%s] by %s!%s@%s",
|
||||
parv[1], source_p->name, source_p->username, source_p->host);
|
||||
ilog(L_MAIN, "CLEARCHAN called for [%s] by %s!%s@%s",
|
||||
parv[1], source_p->name, source_p->username, source_p->host);
|
||||
|
||||
if(*chptr->chname != '&')
|
||||
{
|
||||
sendto_server(NULL, NULL, NOCAPS, NOCAPS,
|
||||
":%s WALLOPS :CLEARCHAN called for [%s] by %s!%s@%s",
|
||||
me.name, parv[1], source_p->name, source_p->username, source_p->host);
|
||||
|
||||
/* SJOIN the user to give them ops, and lock the channel */
|
||||
sendto_server(client_p, chptr, NOCAPS, NOCAPS,
|
||||
":%s SJOIN %ld %s +ntsi :@%s",
|
||||
me.name, (long)(chptr->channelts - 1), chptr->chname, source_p->name);
|
||||
}
|
||||
|
||||
sendto_channel_local(ALL_MEMBERS, chptr, ":%s!%s@%s JOIN %s",
|
||||
source_p->name, source_p->username, source_p->host, chptr->chname);
|
||||
sendto_channel_local(ALL_MEMBERS, chptr, ":%s MODE %s +o %s",
|
||||
me.name, chptr->chname, source_p->name);
|
||||
|
||||
add_user_to_channel(chptr, source_p, CHFL_CHANOP);
|
||||
|
||||
/* Take the TS down by 1, so we don't see the channel taken over
|
||||
* again. */
|
||||
if(chptr->channelts)
|
||||
chptr->channelts--;
|
||||
|
||||
chptr->mode.mode = MODE_SECRET | MODE_TOPICLIMIT | MODE_INVITEONLY | MODE_NOPRIVMSGS;
|
||||
chptr->mode.key[0] = '\0';
|
||||
|
||||
RB_DLINK_FOREACH_SAFE(ptr, next_ptr, chptr->members.head)
|
||||
{
|
||||
msptr = ptr->data;
|
||||
target_p = msptr->client_p;
|
||||
|
||||
/* skip the person we just added.. */
|
||||
if(is_chanop(msptr))
|
||||
continue;
|
||||
|
||||
sendto_channel_local(ALL_MEMBERS, chptr,
|
||||
":%s KICK %s %s :CLEARCHAN",
|
||||
source_p->name, chptr->chname, target_p->name);
|
||||
|
||||
if(*chptr->chname != '&')
|
||||
sendto_server(NULL, chptr, NOCAPS, NOCAPS,
|
||||
":%s KICK %s %s :CLEARCHAN",
|
||||
source_p->name, chptr->chname, target_p->name);
|
||||
|
||||
remove_user_from_channel(msptr);
|
||||
}
|
||||
|
||||
/* Join the user themselves to the channel down here, so they dont see a nicklist
|
||||
* or people being kicked */
|
||||
sendto_one(source_p, ":%s!%s@%s JOIN %s",
|
||||
source_p->name, source_p->username, source_p->host, chptr->chname);
|
||||
|
||||
channel_member_names(chptr, source_p, 1);
|
||||
|
||||
return 0;
|
||||
}
|
458
ircd-ratbox-3.0.10/contrib/m_flags.c
Normal file
458
ircd-ratbox-3.0.10/contrib/m_flags.c
Normal file
@ -0,0 +1,458 @@
|
||||
/*
|
||||
* m_flags.c: Implements comstud-style mode flags.
|
||||
*
|
||||
* Copyright 2002 by W. Campbell and the ircd-hybrid development team
|
||||
*
|
||||
* 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.The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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.
|
||||
*
|
||||
* $Id: m_flags.c 28681 2015-10-02 16:49:39Z androsyn $
|
||||
*/
|
||||
|
||||
/* List of ircd includes from ../include/ */
|
||||
#include "stdinc.h"
|
||||
#include "ratbox_lib.h"
|
||||
#include "struct.h"
|
||||
#include "client.h"
|
||||
#include "common.h"
|
||||
#include "ircd.h"
|
||||
#include "match.h"
|
||||
#include "numeric.h"
|
||||
#include "s_conf.h"
|
||||
#include "s_log.h"
|
||||
#include "s_serv.h"
|
||||
#include "send.h"
|
||||
#include "parse.h"
|
||||
#include "modules.h"
|
||||
#include "s_user.h" /* send_umode_out() */
|
||||
#include "s_newconf.h"
|
||||
|
||||
static int m_flags(struct Client *client_p, struct Client *source_p, int parc, const char *parv[]);
|
||||
static int mo_flags(struct Client *client_p, struct Client *source_p, int parc, const char *parv[]);
|
||||
|
||||
static char *set_flags_to_string(struct Client *client_p);
|
||||
static char *unset_flags_to_string(struct Client *client_p);
|
||||
|
||||
|
||||
struct Message test_msgtab = {
|
||||
"FLAGS", 0, 0, 0, MFLG_SLOW,
|
||||
{mg_unreg, {m_flags, 0}, {m_flags, 0}, mg_ignore, mg_ignore, {mo_flags, 0}}
|
||||
};
|
||||
|
||||
|
||||
mapi_clist_av1 test_clist[] = { &test_msgtab, NULL };
|
||||
|
||||
DECLARE_MODULE_AV1(test, NULL, NULL, test_clist, NULL, NULL, "$Revision: 28681 $");
|
||||
|
||||
|
||||
/* FLAGS requires it's own mini parser, since the last parameter in it can
|
||||
** contain a number of FLAGS. CS handles FLAGS mode1 mode2 OR
|
||||
** FLAGS :mode1 mode2, but not both mixed.
|
||||
**
|
||||
** The best way to match a flag to a mode is with a simple table
|
||||
*/
|
||||
|
||||
struct FlagTable
|
||||
{
|
||||
const char *name;
|
||||
int mode;
|
||||
int oper;
|
||||
};
|
||||
|
||||
/* *INDENT-OFF* */
|
||||
static struct FlagTable flag_table[] = {
|
||||
/* name mode it represents oper only? */
|
||||
#if 0
|
||||
/* This one is special...controlled via an oper block option */
|
||||
{ "OWALLOPS", UMODE_OPERWALL, 1 },
|
||||
#endif
|
||||
{ "SWALLOPS", UMODE_WALLOP, 0 },
|
||||
{ "STATSNOTICES", UMODE_SPY, 1 },
|
||||
/* We don't have a separate OKILL and SKILL modes */
|
||||
{ "OKILLS", UMODE_SERVNOTICE, 0 },
|
||||
{ "SKILLS", UMODE_SKILL, 0 },
|
||||
{ "SNOTICES", UMODE_SERVNOTICE, 0 },
|
||||
/* We don't have separate client connect and disconnect modes */
|
||||
{ "CLICONNECTS", UMODE_CCONN, 1 },
|
||||
{ "CLIDISCONNECTS", UMODE_CCONN, 1 },
|
||||
/* I'm taking a wild guess here... */
|
||||
{ "THROTTLES", UMODE_REJ, 1 },
|
||||
#if 0
|
||||
/* This one is special...controlled via an oper block option */
|
||||
{ "NICKCHANGES", UMODE_NCHANGE, 1 },
|
||||
/* NICKCHANGES must be checked for separately */
|
||||
#endif
|
||||
/* I'm assuming this is correct... */
|
||||
{ "IPMISMATCHES", UMODE_UNAUTH, 1 },
|
||||
{ "LWALLOPS", UMODE_LOCOPS, 1 },
|
||||
/* These aren't separate on Hybrid */
|
||||
{ "CONNECTS", UMODE_EXTERNAL, 1 },
|
||||
{ "SQUITS", UMODE_EXTERNAL, 1 },
|
||||
/* Now we have our Hybrid specific flags */
|
||||
{ "FULL", UMODE_FULL, 1 },
|
||||
/* Not in CS, but we might as well put it here */
|
||||
{ "INVISIBLE", UMODE_INVISIBLE, 0 },
|
||||
{ "BOTS", UMODE_BOTS, 1 },
|
||||
{ "CALLERID", UMODE_CALLERID, 0 },
|
||||
{ "UNAUTH", UMODE_UNAUTH, 1 },
|
||||
{ "DEBUG", UMODE_DEBUG, 1 },
|
||||
{ NULL, 0, 0}
|
||||
};
|
||||
/* *INDENT-ON* */
|
||||
|
||||
/* We won't control CALLERID or INVISIBLE in here */
|
||||
|
||||
#define FL_ALL_USER_FLAGS (UMODE_WALLOP | UMODE_SKILL | UMODE_SERVNOTICE )
|
||||
|
||||
/* and we don't control NCHANGES here either */
|
||||
|
||||
#define FL_ALL_OPER_FLAGS (FL_ALL_USER_FLAGS | UMODE_CCONN | UMODE_REJ |\
|
||||
UMODE_FULL | UMODE_SPY | UMODE_DEBUG |\
|
||||
UMODE_BOTS | UMODE_EXTERNAL |\
|
||||
UMODE_UNAUTH | UMODE_LOCOPS )
|
||||
|
||||
/*
|
||||
** m_flags
|
||||
** parv[0] = sender prefix
|
||||
** parv[1] = parameter
|
||||
*/
|
||||
static int
|
||||
m_flags(struct Client *client_p, struct Client *source_p, int parc, const char *parv[])
|
||||
{
|
||||
int i, j;
|
||||
int isadd;
|
||||
int setflags;
|
||||
int isgood;
|
||||
char *p;
|
||||
char *flag;
|
||||
|
||||
if(parc < 2)
|
||||
{
|
||||
/* Generate a list of what flags you have and what you are missing,
|
||||
** and send it to the user
|
||||
*/
|
||||
sendto_one(source_p, ":%s NOTICE %s :Current flags:%s",
|
||||
me.name, parv[0], set_flags_to_string(source_p));
|
||||
sendto_one(source_p, ":%s NOTICE %s :Current missing flags:%s",
|
||||
me.name, parv[0], unset_flags_to_string(source_p));
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* Preserve the current flags */
|
||||
setflags = source_p->umodes;
|
||||
|
||||
/* XXX - change this to support a multiple last parameter like ISON */
|
||||
|
||||
for(i = 1; i < parc; i++)
|
||||
{
|
||||
char *s = LOCAL_COPY(parv[i]);
|
||||
for(flag = rb_strtok_r(s, " ", &p); flag; flag = rb_strtok_r(NULL, " ", &p))
|
||||
{
|
||||
/* We default to being in ADD mode */
|
||||
isadd = 1;
|
||||
|
||||
/* We default to being in BAD mode */
|
||||
isgood = 0;
|
||||
|
||||
if(!isalpha(flag[0]))
|
||||
{
|
||||
if(flag[0] == '-')
|
||||
isadd = 0;
|
||||
else if(flag[0] == '+')
|
||||
isadd = 1;
|
||||
flag++;
|
||||
}
|
||||
|
||||
/* support ALL here */
|
||||
if(!irccmp(flag, "ALL"))
|
||||
{
|
||||
if(isadd)
|
||||
source_p->umodes |= FL_ALL_USER_FLAGS;
|
||||
else
|
||||
source_p->umodes &= ~FL_ALL_USER_FLAGS;
|
||||
sendto_one(source_p, ":%s NOTICE %s :Current flags:%s",
|
||||
me.name, parv[0], set_flags_to_string(source_p));
|
||||
sendto_one(source_p, ":%s NOTICE %s :Current missing flags:%s",
|
||||
me.name, parv[0], unset_flags_to_string(source_p));
|
||||
send_umode_out(client_p, source_p, setflags);
|
||||
return 1;
|
||||
}
|
||||
|
||||
for(j = 0; flag_table[j].name; j++)
|
||||
{
|
||||
if(!flag_table[j].oper && !irccmp(flag, flag_table[j].name))
|
||||
{
|
||||
if(isadd)
|
||||
source_p->umodes |= flag_table[j].mode;
|
||||
else
|
||||
source_p->umodes &= ~(flag_table[j].mode);
|
||||
isgood = 1;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
/* This for ended without matching a valid FLAG, here is where
|
||||
** I want to operate differently than ircd-comstud, and just ignore
|
||||
** the invalid flag, send a warning and go on.
|
||||
*/
|
||||
if(!isgood)
|
||||
sendto_one(source_p, ":%s NOTICE %s :Invalid FLAGS: %s (IGNORING)",
|
||||
me.name, parv[0], flag);
|
||||
}
|
||||
}
|
||||
|
||||
/* All done setting the flags, print the notices out to the user
|
||||
** telling what flags they have and what flags they are missing
|
||||
*/
|
||||
sendto_one(source_p, ":%s NOTICE %s :Current flags:%s",
|
||||
me.name, parv[0], set_flags_to_string(source_p));
|
||||
sendto_one(source_p, ":%s NOTICE %s :Current missing flags:%s",
|
||||
me.name, parv[0], unset_flags_to_string(source_p));
|
||||
|
||||
send_umode_out(client_p, source_p, setflags);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
** mo_flags
|
||||
** parv[0] = sender prefix
|
||||
** parv[1] = parameter
|
||||
*/
|
||||
static int
|
||||
mo_flags(struct Client *client_p, struct Client *source_p, int parc, const char *parv[])
|
||||
{
|
||||
int i, j;
|
||||
int isadd;
|
||||
int setflags;
|
||||
int isgood;
|
||||
char *p;
|
||||
char *flag;
|
||||
|
||||
if(parc < 2)
|
||||
{
|
||||
/* Generate a list of what flags you have and what you are missing,
|
||||
** and send it to the user
|
||||
*/
|
||||
sendto_one(source_p, ":%s NOTICE %s :Current flags:%s",
|
||||
me.name, parv[0], set_flags_to_string(source_p));
|
||||
sendto_one(source_p, ":%s NOTICE %s :Current missing flags:%s",
|
||||
me.name, parv[0], unset_flags_to_string(source_p));
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* Preserve the current flags */
|
||||
setflags = source_p->umodes;
|
||||
|
||||
/* XXX - change this to support a multiple last parameter like ISON */
|
||||
|
||||
for(i = 1; i < parc; i++)
|
||||
{
|
||||
char *s = LOCAL_COPY(parv[i]);
|
||||
for(flag = rb_strtok_r(s, " ", &p); flag; flag = rb_strtok_r(NULL, " ", &p))
|
||||
{
|
||||
/* We default to being in ADD mode */
|
||||
isadd = 1;
|
||||
|
||||
/* We default to being in BAD mode */
|
||||
isgood = 0;
|
||||
|
||||
if(!isalpha(flag[0]))
|
||||
{
|
||||
if(flag[0] == '-')
|
||||
isadd = 0;
|
||||
else if(flag[0] == '+')
|
||||
isadd = 1;
|
||||
flag++;
|
||||
}
|
||||
|
||||
/* support ALL here */
|
||||
if(!irccmp(flag, "ALL"))
|
||||
{
|
||||
if(isadd)
|
||||
source_p->umodes |= FL_ALL_OPER_FLAGS;
|
||||
else
|
||||
source_p->umodes &= ~FL_ALL_OPER_FLAGS;
|
||||
sendto_one(source_p, ":%s NOTICE %s :Current flags:%s",
|
||||
me.name, parv[0], set_flags_to_string(source_p));
|
||||
sendto_one(source_p, ":%s NOTICE %s :Current missing flags:%s",
|
||||
me.name, parv[0], unset_flags_to_string(source_p));
|
||||
send_umode_out(client_p, source_p, setflags);
|
||||
return 1;
|
||||
}
|
||||
|
||||
if(!irccmp(flag, "NICKCHANGES"))
|
||||
{
|
||||
if(!IsOperN(source_p))
|
||||
{
|
||||
sendto_one(source_p,
|
||||
":%s NOTICE %s :*** You need oper and N flag for +n",
|
||||
me.name, parv[0]);
|
||||
continue;
|
||||
}
|
||||
if(isadd)
|
||||
source_p->umodes |= UMODE_NCHANGE;
|
||||
else
|
||||
source_p->umodes &= ~UMODE_NCHANGE;
|
||||
isgood = 1;
|
||||
continue;
|
||||
}
|
||||
if(!irccmp(flag, "OWALLOPS"))
|
||||
{
|
||||
if(!IsOperOperwall(source_p))
|
||||
{
|
||||
sendto_one(source_p,
|
||||
":%s NOTICE %s :*** You need oper and operwall flag for +z",
|
||||
me.name, parv[0]);
|
||||
continue;
|
||||
}
|
||||
if(isadd)
|
||||
source_p->umodes |= UMODE_OPERWALL;
|
||||
else
|
||||
source_p->umodes &= ~UMODE_OPERWALL;
|
||||
isgood = 1;
|
||||
continue;
|
||||
}
|
||||
|
||||
for(j = 0; flag_table[j].name; j++)
|
||||
{
|
||||
if(!irccmp(flag, flag_table[j].name))
|
||||
{
|
||||
if(isadd)
|
||||
source_p->umodes |= flag_table[j].mode;
|
||||
else
|
||||
source_p->umodes &= ~(flag_table[j].mode);
|
||||
isgood = 1;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
/* This for ended without matching a valid FLAG, here is where
|
||||
** I want to operate differently than ircd-comstud, and just ignore
|
||||
** the invalid flag, send a warning and go on.
|
||||
*/
|
||||
if(!isgood)
|
||||
sendto_one(source_p, ":%s NOTICE %s :Invalid FLAGS: %s (IGNORING)",
|
||||
me.name, parv[0], flag);
|
||||
}
|
||||
}
|
||||
|
||||
/* All done setting the flags, print the notices out to the user
|
||||
** telling what flags they have and what flags they are missing
|
||||
*/
|
||||
sendto_one(source_p, ":%s NOTICE %s :Current flags:%s",
|
||||
me.name, parv[0], set_flags_to_string(source_p));
|
||||
sendto_one(source_p, ":%s NOTICE %s :Current missing flags:%s",
|
||||
me.name, parv[0], unset_flags_to_string(source_p));
|
||||
|
||||
send_umode_out(client_p, source_p, setflags);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static char *
|
||||
set_flags_to_string(struct Client *client_p)
|
||||
{
|
||||
/* XXX - list all flags that we have set on the client */
|
||||
static char setflags[BUFSIZE + 1];
|
||||
int i;
|
||||
|
||||
/* Clear it to begin with, we'll be doing a lot of rb_sprintf's */
|
||||
setflags[0] = '\0';
|
||||
|
||||
/* Unlike unset_flags_to_string(), we don't have to care about oper
|
||||
** flags and not showing them
|
||||
*/
|
||||
|
||||
if(client_p->umodes & UMODE_OPERWALL)
|
||||
{
|
||||
rb_sprintf(setflags, "%s %s", setflags, "OWALLOPS");
|
||||
}
|
||||
|
||||
for(i = 0; flag_table[i].name; i++)
|
||||
{
|
||||
if(client_p->umodes & flag_table[i].mode)
|
||||
{
|
||||
rb_sprintf(setflags, "%s %s", setflags, flag_table[i].name);
|
||||
}
|
||||
}
|
||||
|
||||
#if 0
|
||||
if(IsOper(client_p) && IsOperN(client_p))
|
||||
{
|
||||
#endif
|
||||
/* You can only be set +NICKCHANGES if you are an oper and
|
||||
** IsOperN(client_p) is true
|
||||
*/
|
||||
if(client_p->umodes & UMODE_NCHANGE)
|
||||
{
|
||||
rb_sprintf(setflags, "%s %s", setflags, "NICKCHANGES");
|
||||
}
|
||||
#if 0
|
||||
}
|
||||
#endif
|
||||
|
||||
return setflags;
|
||||
}
|
||||
|
||||
static char *
|
||||
unset_flags_to_string(struct Client *client_p)
|
||||
{
|
||||
/* Inverse of above */
|
||||
/* XXX - list all flags that we do NOT have set on the client */
|
||||
static char setflags[BUFSIZE + 1];
|
||||
int i, isoper;
|
||||
|
||||
/* Clear it to begin with, we'll be doing a lot of rb_sprintf's */
|
||||
setflags[0] = '\0';
|
||||
|
||||
if(IsOper(client_p))
|
||||
isoper = 1;
|
||||
else
|
||||
isoper = 0;
|
||||
|
||||
if(IsOper(client_p) && IsOperOperwall(client_p))
|
||||
{
|
||||
if(!(client_p->umodes & UMODE_OPERWALL))
|
||||
{
|
||||
rb_sprintf(setflags, "%s %s", setflags, "OWALLOPS");
|
||||
}
|
||||
}
|
||||
|
||||
for(i = 0; flag_table[i].name; i++)
|
||||
{
|
||||
if(!(client_p->umodes & flag_table[i].mode))
|
||||
{
|
||||
if(!isoper && flag_table[i].oper)
|
||||
continue;
|
||||
rb_sprintf(setflags, "%s %s", setflags, flag_table[i].name);
|
||||
}
|
||||
}
|
||||
|
||||
if(IsOper(client_p) && IsOperN(client_p))
|
||||
{
|
||||
if(!(client_p->umodes & UMODE_NCHANGE))
|
||||
{
|
||||
rb_sprintf(setflags, "%s %s", setflags, "NICKCHANGES");
|
||||
}
|
||||
}
|
||||
|
||||
return setflags;
|
||||
}
|
276
ircd-ratbox-3.0.10/contrib/m_force.c
Normal file
276
ircd-ratbox-3.0.10/contrib/m_force.c
Normal file
@ -0,0 +1,276 @@
|
||||
/* contrib/m_force.c
|
||||
* Copyright (C) 1996-2002 Hybrid Development Team
|
||||
* Copyright (C) 2004-2012 ircd-ratbox Development Team
|
||||
*
|
||||
* 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.The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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.
|
||||
*
|
||||
* $Id: m_force.c 27381 2012-03-16 23:10:29Z dubkat $
|
||||
*/
|
||||
|
||||
#include "stdinc.h"
|
||||
#include "ratbox_lib.h"
|
||||
#include "struct.h"
|
||||
#include "channel.h"
|
||||
#include "class.h"
|
||||
#include "client.h"
|
||||
#include "common.h"
|
||||
#include "match.h"
|
||||
#include "ircd.h"
|
||||
#include "hostmask.h"
|
||||
#include "numeric.h"
|
||||
#include "s_conf.h"
|
||||
#include "s_newconf.h"
|
||||
#include "s_log.h"
|
||||
#include "send.h"
|
||||
#include "hash.h"
|
||||
#include "s_serv.h"
|
||||
#include "parse.h"
|
||||
#include "modules.h"
|
||||
|
||||
|
||||
static int mo_forcejoin(struct Client *client_p, struct Client *source_p,
|
||||
int parc, const char *parv[]);
|
||||
static int mo_forcepart(struct Client *client_p, struct Client *source_p,
|
||||
int parc, const char *parv[]);
|
||||
|
||||
struct Message forcejoin_msgtab = {
|
||||
"FORCEJOIN", 0, 0, 0, MFLG_SLOW,
|
||||
{mg_unreg, mg_not_oper, mg_ignore, mg_ignore, mg_ignore, {mo_forcejoin, 3}}
|
||||
};
|
||||
|
||||
struct Message forcepart_msgtab = {
|
||||
"FORCEPART", 0, 0, 0, MFLG_SLOW,
|
||||
{mg_unreg, mg_not_oper, mg_ignore, mg_ignore, mg_ignore, {mo_forcepart, 3}}
|
||||
};
|
||||
|
||||
mapi_clist_av1 force_clist[] = { &forcejoin_msgtab, &forcepart_msgtab, NULL };
|
||||
|
||||
DECLARE_MODULE_AV1(force, NULL, NULL, force_clist, NULL, NULL, "$Revision: 27381 $");
|
||||
|
||||
/*
|
||||
* m_forcejoin
|
||||
* parv[0] = sender prefix
|
||||
* parv[1] = user to force
|
||||
* parv[2] = channel to force them into
|
||||
*/
|
||||
static int
|
||||
mo_forcejoin(struct Client *client_p, struct Client *source_p, int parc, const char *parv[])
|
||||
{
|
||||
struct Client *target_p;
|
||||
struct Channel *chptr;
|
||||
int type;
|
||||
char mode;
|
||||
char sjmode;
|
||||
char *newch;
|
||||
|
||||
if(!IsOperAdmin(source_p))
|
||||
{
|
||||
sendto_one(source_p, form_str(ERR_NOPRIVS), me.name, source_p->name, "forcejoin");
|
||||
return 0;
|
||||
}
|
||||
|
||||
if((hunt_server(client_p, source_p, ":%s FORCEJOIN %s %s", 1, parc, parv)) != HUNTED_ISME)
|
||||
return 0;
|
||||
|
||||
/* if target_p is not existant, print message
|
||||
* to source_p and bail - scuzzy
|
||||
*/
|
||||
if((target_p = find_client(parv[1])) == NULL)
|
||||
{
|
||||
sendto_one(source_p, form_str(ERR_NOSUCHNICK), me.name, source_p->name, parv[1]);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if(!IsClient(target_p))
|
||||
return 0;
|
||||
|
||||
/* select our modes from parv[2] if they exist... (chanop) */
|
||||
if(*parv[2] == '@')
|
||||
{
|
||||
type = CHFL_CHANOP;
|
||||
mode = 'o';
|
||||
sjmode = '@';
|
||||
}
|
||||
else if(*parv[2] == '+')
|
||||
{
|
||||
type = CHFL_VOICE;
|
||||
mode = 'v';
|
||||
sjmode = '+';
|
||||
}
|
||||
else
|
||||
{
|
||||
type = CHFL_PEON;
|
||||
mode = sjmode = '\0';
|
||||
}
|
||||
|
||||
if(mode != '\0')
|
||||
parv[2]++;
|
||||
|
||||
if((chptr = find_channel(parv[2])) != NULL)
|
||||
{
|
||||
if(IsMember(target_p, chptr))
|
||||
{
|
||||
/* debugging is fun... */
|
||||
sendto_one(source_p, ":%s NOTICE %s :*** Notice -- %s is already in %s",
|
||||
me.name, source_p->name, target_p->name, chptr->chname);
|
||||
return 0;
|
||||
}
|
||||
|
||||
add_user_to_channel(chptr, target_p, type);
|
||||
|
||||
sendto_server(target_p, chptr, NOCAPS, NOCAPS,
|
||||
":%s SJOIN %ld %s + :%c%s",
|
||||
me.name, (long)chptr->channelts,
|
||||
chptr->chname, type ? sjmode : ' ', target_p->name);
|
||||
|
||||
sendto_channel_local(ALL_MEMBERS, chptr, ":%s!%s@%s JOIN :%s",
|
||||
target_p->name, target_p->username,
|
||||
target_p->host, chptr->chname);
|
||||
|
||||
if(type)
|
||||
sendto_channel_local(ALL_MEMBERS, chptr, ":%s MODE %s +%c %s",
|
||||
me.name, chptr->chname, mode, target_p->name);
|
||||
|
||||
if(chptr->topic != NULL)
|
||||
{
|
||||
sendto_one(target_p, form_str(RPL_TOPIC), me.name,
|
||||
target_p->name, chptr->chname, chptr->topic->topic);
|
||||
sendto_one(target_p, form_str(RPL_TOPICWHOTIME),
|
||||
me.name, source_p->name, chptr->chname,
|
||||
chptr->topic->topic_info, chptr->topic->topic_time);
|
||||
}
|
||||
|
||||
channel_member_names(chptr, target_p, 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
newch = LOCAL_COPY(parv[2]);
|
||||
if(!check_channel_name(newch))
|
||||
{
|
||||
sendto_one(source_p, form_str(ERR_BADCHANNAME), me.name,
|
||||
source_p->name, (unsigned char *)newch);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* channel name must begin with & or # */
|
||||
if(!IsChannelName(newch))
|
||||
{
|
||||
sendto_one(source_p, form_str(ERR_BADCHANNAME), me.name,
|
||||
source_p->name, (unsigned char *)newch);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* newch can't be longer than CHANNELLEN */
|
||||
if(strlen(newch) > CHANNELLEN)
|
||||
{
|
||||
sendto_one(source_p, ":%s NOTICE %s :Channel name is too long", me.name,
|
||||
source_p->name);
|
||||
return 0;
|
||||
}
|
||||
|
||||
chptr = get_or_create_channel(target_p, newch, NULL);
|
||||
add_user_to_channel(chptr, target_p, CHFL_CHANOP);
|
||||
|
||||
/* send out a join, make target_p join chptr */
|
||||
sendto_server(target_p, chptr, NOCAPS, NOCAPS,
|
||||
":%s SJOIN %ld %s +nt :@%s", me.name,
|
||||
(long)chptr->channelts, chptr->chname, target_p->name);
|
||||
|
||||
sendto_channel_local(ALL_MEMBERS, chptr, ":%s!%s@%s JOIN :%s",
|
||||
target_p->name, target_p->username,
|
||||
target_p->host, chptr->chname);
|
||||
|
||||
chptr->mode.mode |= MODE_TOPICLIMIT;
|
||||
chptr->mode.mode |= MODE_NOPRIVMSGS;
|
||||
|
||||
sendto_channel_local(ALL_MEMBERS, chptr, ":%s MODE %s +nt", me.name, chptr->chname);
|
||||
|
||||
target_p->localClient->last_join_time = rb_current_time();
|
||||
channel_member_names(chptr, target_p, 1);
|
||||
|
||||
/* we do this to let the oper know that a channel was created, this will be
|
||||
* seen from the server handling the command instead of the server that
|
||||
* the oper is on.
|
||||
*/
|
||||
sendto_one(source_p, ":%s NOTICE %s :*** Notice -- Creating channel %s", me.name,
|
||||
source_p->name, chptr->chname);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
static int
|
||||
mo_forcepart(struct Client *client_p, struct Client *source_p, int parc, const char *parv[])
|
||||
{
|
||||
struct Client *target_p;
|
||||
struct Channel *chptr;
|
||||
struct membership *msptr;
|
||||
|
||||
if(!IsOperAdmin(source_p))
|
||||
{
|
||||
sendto_one(source_p, form_str(ERR_NOPRIVS), me.name, source_p->name, "forcepart");
|
||||
return 0;
|
||||
}
|
||||
|
||||
if((hunt_server(client_p, source_p, ":%s FORCEPART %s %s", 1, parc, parv)) != HUNTED_ISME)
|
||||
return 0;
|
||||
|
||||
/* if target_p == NULL then let the oper know */
|
||||
if((target_p = find_client(parv[1])) == NULL)
|
||||
{
|
||||
sendto_one(source_p, form_str(ERR_NOSUCHNICK), me.name, source_p->name, parv[1]);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if(!IsClient(target_p))
|
||||
return 0;
|
||||
|
||||
|
||||
if((chptr = find_channel(parv[2])) == NULL)
|
||||
{
|
||||
sendto_one_numeric(source_p, ERR_NOSUCHCHANNEL,
|
||||
form_str(ERR_NOSUCHCHANNEL), parv[1]);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if((msptr = find_channel_membership(chptr, target_p)) == NULL)
|
||||
{
|
||||
sendto_one(source_p, form_str(ERR_USERNOTINCHANNEL),
|
||||
me.name, parv[0], parv[1], parv[2]);
|
||||
return 0;
|
||||
}
|
||||
|
||||
sendto_server(target_p, chptr, NOCAPS, NOCAPS,
|
||||
":%s PART %s :%s", target_p->name, chptr->chname, target_p->name);
|
||||
|
||||
sendto_channel_local(ALL_MEMBERS, chptr, ":%s!%s@%s PART %s :%s",
|
||||
target_p->name, target_p->username,
|
||||
target_p->host, chptr->chname, target_p->name);
|
||||
|
||||
|
||||
remove_user_from_channel(msptr);
|
||||
|
||||
return 0;
|
||||
}
|
169
ircd-ratbox-3.0.10/contrib/m_mkpasswd.c
Normal file
169
ircd-ratbox-3.0.10/contrib/m_mkpasswd.c
Normal file
@ -0,0 +1,169 @@
|
||||
/*
|
||||
* m_mkpasswd.c: Encrypts a password online, DES or MD5.
|
||||
*
|
||||
* Copyright 2002 W. Campbell and the ircd-ratbox development team
|
||||
* Based on mkpasswd.c, originally by Nelson Minar (minar@reed.edu)
|
||||
*
|
||||
* You can use this code in any way as long as these names remain.
|
||||
*
|
||||
* $Id: m_mkpasswd.c 28681 2015-10-02 16:49:39Z androsyn $
|
||||
*/
|
||||
|
||||
/* List of ircd includes from ../include/ */
|
||||
#include "stdinc.h"
|
||||
#include "ratbox_lib.h"
|
||||
#include "struct.h"
|
||||
#include "client.h"
|
||||
#include "common.h"
|
||||
#include "ircd.h"
|
||||
#include "match.h"
|
||||
#include "numeric.h"
|
||||
#include "s_newconf.h"
|
||||
#include "s_conf.h"
|
||||
#include "s_log.h"
|
||||
#include "s_serv.h"
|
||||
#include "send.h"
|
||||
#include "parse.h"
|
||||
#include "modules.h"
|
||||
|
||||
#include <string.h>
|
||||
|
||||
extern char *crypt();
|
||||
|
||||
static int m_mkpasswd(struct Client *client_p, struct Client *source_p,
|
||||
int parc, const char *parv[]);
|
||||
static int mo_mkpasswd(struct Client *client_p, struct Client *source_p,
|
||||
int parc, const char *parv[]);
|
||||
static char *make_salt(void);
|
||||
static char *make_md5_salt(void);
|
||||
|
||||
static char saltChars[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789./";
|
||||
|
||||
|
||||
struct Message mkpasswd_msgtab = {
|
||||
"MKPASSWD", 0, 0, 0, MFLG_SLOW,
|
||||
{mg_unreg, {m_mkpasswd, 2}, mg_ignore, mg_ignore, mg_ignore, {mo_mkpasswd, 2}}
|
||||
};
|
||||
|
||||
mapi_clist_av1 mkpasswd_clist[] = { &mkpasswd_msgtab, NULL };
|
||||
|
||||
DECLARE_MODULE_AV1(mkpasswd, NULL, NULL, mkpasswd_clist, NULL, NULL, "$Revision: 28681 $");
|
||||
|
||||
|
||||
static int
|
||||
m_mkpasswd(struct Client *client_p, struct Client *source_p, int parc, const char *parv[])
|
||||
{
|
||||
static time_t last_used = 0;
|
||||
int is_md5 = 0;
|
||||
|
||||
if((last_used + ConfigFileEntry.pace_wait) > rb_current_time())
|
||||
{
|
||||
/* safe enough to give this on a local connect only */
|
||||
sendto_one(source_p, form_str(RPL_LOAD2HI), me.name, parv[0], "MKPASSWD");
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
last_used = rb_current_time();
|
||||
}
|
||||
|
||||
if(parc == 3)
|
||||
{
|
||||
if(!irccmp(parv[2], "MD5"))
|
||||
{
|
||||
is_md5 = 1;
|
||||
}
|
||||
else if(!irccmp(parv[2], "DES"))
|
||||
{
|
||||
/* Not really needed, but we may want to have a default encryption
|
||||
* setting somewhere down the road
|
||||
*/
|
||||
is_md5 = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
sendto_one(source_p,
|
||||
":%s NOTICE %s :MKPASSWD syntax error: MKPASSWD pass [DES|MD5]",
|
||||
me.name, parv[0]);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
if(parc == 1)
|
||||
sendto_one(source_p, form_str(ERR_NEEDMOREPARAMS), me.name, parv[0], "MKPASSWD");
|
||||
else
|
||||
sendto_one(source_p, ":%s NOTICE %s :Encryption for [%s]: %s",
|
||||
me.name, parv[0], parv[1], crypt(parv[1],
|
||||
is_md5 ? make_md5_salt() :
|
||||
make_salt()));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
** mo_test
|
||||
** parv[0] = sender prefix
|
||||
** parv[1] = parameter
|
||||
*/
|
||||
static int
|
||||
mo_mkpasswd(struct Client *client_p, struct Client *source_p, int parc, const char *parv[])
|
||||
{
|
||||
int is_md5 = 0;
|
||||
|
||||
if(parc == 3)
|
||||
{
|
||||
if(!irccmp(parv[2], "MD5"))
|
||||
{
|
||||
is_md5 = 1;
|
||||
}
|
||||
else if(!irccmp(parv[2], "DES"))
|
||||
{
|
||||
/* Not really needed, but we may want to have a default encryption
|
||||
* setting somewhere down the road
|
||||
*/
|
||||
is_md5 = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
sendto_one(source_p,
|
||||
":%s NOTICE %s :MKPASSWD syntax error: MKPASSWD pass [DES|MD5]",
|
||||
me.name, parv[0]);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
if(parc == 1)
|
||||
sendto_one(source_p, form_str(ERR_NEEDMOREPARAMS), me.name, parv[0], "MKPASSWD");
|
||||
else
|
||||
sendto_one(source_p, ":%s NOTICE %s :Encryption for [%s]: %s",
|
||||
me.name, parv[0], parv[1], crypt(parv[1],
|
||||
is_md5 ? make_md5_salt() :
|
||||
make_salt()));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static char *
|
||||
make_salt(void)
|
||||
{
|
||||
static char salt[3];
|
||||
salt[0] = saltChars[rb_random() % 64];
|
||||
salt[1] = saltChars[rb_random() % 64];
|
||||
salt[2] = '\0';
|
||||
return salt;
|
||||
}
|
||||
|
||||
static char *
|
||||
make_md5_salt(void)
|
||||
{
|
||||
static char salt[13];
|
||||
int i;
|
||||
salt[0] = '$';
|
||||
salt[1] = '1';
|
||||
salt[2] = '$';
|
||||
for(i = 3; i < 11; i++)
|
||||
salt[i] = saltChars[rb_random() % 64];
|
||||
salt[11] = '$';
|
||||
salt[12] = '\0';
|
||||
return salt;
|
||||
}
|
146
ircd-ratbox-3.0.10/contrib/m_ojoin.c
Normal file
146
ircd-ratbox-3.0.10/contrib/m_ojoin.c
Normal file
@ -0,0 +1,146 @@
|
||||
/* contrib/m_ojoin.c
|
||||
* Copyright (C) 2002 Hybrid Development Team
|
||||
* Copyright (C) 2004-2012 ircd-ratbox Development Team
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 1, or (at your option)
|
||||
* any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*
|
||||
* $Id: m_ojoin.c 27381 2012-03-16 23:10:29Z dubkat $
|
||||
*/
|
||||
|
||||
#include "stdinc.h"
|
||||
#include "ratbox_lib.h"
|
||||
#include "struct.h"
|
||||
#include "channel.h"
|
||||
#include "client.h"
|
||||
#include "ircd.h"
|
||||
#include "numeric.h"
|
||||
#include "s_log.h"
|
||||
#include "s_serv.h"
|
||||
#include "s_newconf.h"
|
||||
#include "send.h"
|
||||
#include "whowas.h"
|
||||
#include "match.h"
|
||||
#include "hash.h"
|
||||
#include "parse.h"
|
||||
#include "modules.h"
|
||||
|
||||
|
||||
static int mo_ojoin(struct Client *client_p, struct Client *source_p, int parc, const char *parv[]);
|
||||
|
||||
|
||||
struct Message ojoin_msgtab = {
|
||||
"OJOIN", 0, 0, 0, MFLG_SLOW,
|
||||
{mg_unreg, mg_not_oper, mg_ignore, mg_ignore, mg_ignore, {mo_ojoin, 2}}
|
||||
};
|
||||
|
||||
mapi_clist_av1 ojoin_clist[] = { &ojoin_msgtab, NULL };
|
||||
|
||||
DECLARE_MODULE_AV1(ojoin, NULL, NULL, ojoin_clist, NULL, NULL, "$Revision: 27381 $");
|
||||
|
||||
/*
|
||||
** mo_ojoin
|
||||
** parv[0] = sender prefix
|
||||
** parv[1] = channel
|
||||
*/
|
||||
static int
|
||||
mo_ojoin(struct Client *client_p, struct Client *source_p, int parc, const char *parv[])
|
||||
{
|
||||
struct Channel *chptr;
|
||||
int move_me = 0;
|
||||
|
||||
/* admins only */
|
||||
if(!IsOperAdmin(source_p))
|
||||
{
|
||||
sendto_one(source_p, form_str(ERR_NOPRIVS), me.name, source_p->name, "ojoin");
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* XXX - we might not have CBURSTed this channel if we are a lazylink
|
||||
* yet. */
|
||||
|
||||
if(*parv[1] == '@' || *parv[1] == '%' || *parv[1] == '+')
|
||||
{
|
||||
parv[1]++;
|
||||
move_me = 1;
|
||||
}
|
||||
|
||||
if((chptr = find_channel(parv[1])) == NULL)
|
||||
{
|
||||
sendto_one_numeric(source_p, ERR_NOSUCHCHANNEL,
|
||||
form_str(ERR_NOSUCHCHANNEL), parv[1]);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if(IsMember(source_p, chptr))
|
||||
{
|
||||
sendto_one(source_p, ":%s NOTICE %s :Please part %s before using OJOIN",
|
||||
me.name, source_p->name, parv[1]);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if(move_me == 1)
|
||||
parv[1]--;
|
||||
|
||||
if(*parv[1] == '@')
|
||||
{
|
||||
add_user_to_channel(chptr, source_p, CHFL_CHANOP);
|
||||
sendto_server(client_p, chptr, NOCAPS, NOCAPS,
|
||||
":%s SJOIN %ld %s + :@%s",
|
||||
me.name, (long)chptr->channelts, chptr->chname, source_p->name);
|
||||
sendto_channel_local(ALL_MEMBERS, chptr, ":%s!%s@%s JOIN %s",
|
||||
source_p->name,
|
||||
source_p->username, source_p->host, chptr->chname);
|
||||
sendto_channel_local(ALL_MEMBERS, chptr, ":%s MODE %s +o %s",
|
||||
me.name, chptr->chname, source_p->name);
|
||||
|
||||
}
|
||||
else if(*parv[1] == '+')
|
||||
{
|
||||
add_user_to_channel(chptr, source_p, CHFL_VOICE);
|
||||
sendto_server(client_p, chptr, NOCAPS, NOCAPS,
|
||||
":%s SJOIN %ld %s + :+%s",
|
||||
me.name, (long)chptr->channelts, chptr->chname, source_p->name);
|
||||
sendto_channel_local(ALL_MEMBERS, chptr, ":%s!%s@%s JOIN %s",
|
||||
source_p->name,
|
||||
source_p->username, source_p->host, chptr->chname);
|
||||
sendto_channel_local(ALL_MEMBERS, chptr, ":%s MODE %s +v %s",
|
||||
me.name, chptr->chname, source_p->name);
|
||||
}
|
||||
else
|
||||
{
|
||||
add_user_to_channel(chptr, source_p, CHFL_PEON);
|
||||
sendto_server(client_p, chptr, NOCAPS, NOCAPS,
|
||||
":%s SJOIN %ld %s + :%s",
|
||||
me.name, (long)chptr->channelts, chptr->chname, source_p->name);
|
||||
sendto_channel_local(ALL_MEMBERS, chptr, ":%s!%s@%s JOIN %s",
|
||||
source_p->name,
|
||||
source_p->username, source_p->host, chptr->chname);
|
||||
}
|
||||
|
||||
/* send the topic... */
|
||||
if(chptr->topic != NULL)
|
||||
{
|
||||
sendto_one(source_p, form_str(RPL_TOPIC), me.name,
|
||||
source_p->name, chptr->chname, chptr->topic->topic);
|
||||
sendto_one(source_p, form_str(RPL_TOPICWHOTIME), me.name,
|
||||
source_p->name, chptr->chname, chptr->topic->topic_info,
|
||||
chptr->topic->topic_time);
|
||||
}
|
||||
|
||||
source_p->localClient->last_join_time = rb_current_time();
|
||||
channel_member_names(chptr, source_p, 1);
|
||||
|
||||
return 0;
|
||||
}
|
128
ircd-ratbox-3.0.10/contrib/m_okick.c
Normal file
128
ircd-ratbox-3.0.10/contrib/m_okick.c
Normal file
@ -0,0 +1,128 @@
|
||||
/*
|
||||
* ircd-ratbox: A slightly useful ircd.
|
||||
* m_okick.c: Kicks a user from a channel with much prejudice.
|
||||
*
|
||||
* Copyright (C) 2002 by the past and present ircd coders, and others.
|
||||
* Copyright (C) 2004-2012 ircd-ratbox Development Team
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
|
||||
* USA
|
||||
*
|
||||
* $Id: m_okick.c 27381 2012-03-16 23:10:29Z dubkat $
|
||||
*/
|
||||
|
||||
#include "stdinc.h"
|
||||
#include "ratbox_lib.h"
|
||||
#include "struct.h"
|
||||
#include "channel.h"
|
||||
#include "client.h"
|
||||
#include "match.h"
|
||||
#include "ircd.h"
|
||||
#include "numeric.h"
|
||||
#include "send.h"
|
||||
#include "modules.h"
|
||||
#include "parse.h"
|
||||
#include "hash.h"
|
||||
#include "packet.h"
|
||||
#include "s_serv.h"
|
||||
|
||||
static int mo_okick(struct Client *client_p, struct Client *source_p, int parc, const char *parv[]);
|
||||
|
||||
|
||||
struct Message okick_msgtab = {
|
||||
"OKICK", 0, 0, 0, MFLG_SLOW,
|
||||
{mg_unreg, mg_not_oper, mg_ignore, mg_ignore, mg_ignore, {mo_okick, 4}}
|
||||
};
|
||||
|
||||
mapi_clist_av1 okick_clist[] = { &okick_msgtab, NULL };
|
||||
|
||||
DECLARE_MODULE_AV1(okick, NULL, NULL, okick_clist, NULL, NULL, "$Revision: 27381 $");
|
||||
|
||||
/*
|
||||
** m_okick
|
||||
** parv[0] = sender prefix
|
||||
** parv[1] = channel
|
||||
** parv[2] = client to kick
|
||||
** parv[3] = kick comment
|
||||
*/
|
||||
static int
|
||||
mo_okick(struct Client *client_p, struct Client *source_p, int parc, const char *parv[])
|
||||
{
|
||||
struct Client *who;
|
||||
struct Client *target_p;
|
||||
struct Channel *chptr;
|
||||
struct membership *msptr;
|
||||
int chasing = 0;
|
||||
char *comment;
|
||||
char *name;
|
||||
char *p = NULL;
|
||||
char *user;
|
||||
static char buf[BUFSIZE];
|
||||
|
||||
if(*parv[2] == '\0')
|
||||
{
|
||||
sendto_one(source_p, form_str(ERR_NEEDMOREPARAMS), me.name, parv[0], "KICK");
|
||||
return 0;
|
||||
}
|
||||
|
||||
if(MyClient(source_p) && !IsFloodDone(source_p))
|
||||
flood_endgrace(source_p);
|
||||
|
||||
comment = (EmptyString(LOCAL_COPY(parv[3]))) ? LOCAL_COPY(parv[2]) : LOCAL_COPY(parv[3]);
|
||||
if(strlen(comment) > (size_t)REASONLEN)
|
||||
comment[REASONLEN] = '\0';
|
||||
|
||||
*buf = '\0';
|
||||
if((p = strchr(parv[1], ',')))
|
||||
*p = '\0';
|
||||
|
||||
name = LOCAL_COPY(parv[1]);
|
||||
|
||||
chptr = find_channel(name);
|
||||
if(!chptr)
|
||||
{
|
||||
sendto_one_numeric(source_p, ERR_NOSUCHCHANNEL, form_str(ERR_NOSUCHCHANNEL), name);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
if((p = strchr(parv[2], ',')))
|
||||
*p = '\0';
|
||||
user = LOCAL_COPY(parv[2]); // strtoken(&p2, parv[2], ",");
|
||||
if(!(who = find_chasing(source_p, user, &chasing)))
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
if((target_p = find_client(user)) == NULL)
|
||||
{
|
||||
sendto_one(source_p, form_str(ERR_NOSUCHNICK), me.name, parv[0], user);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if((msptr = find_channel_membership(chptr, target_p)) == NULL)
|
||||
{
|
||||
sendto_one(source_p, form_str(ERR_USERNOTINCHANNEL),
|
||||
me.name, parv[0], parv[1], parv[2]);
|
||||
return 0;
|
||||
}
|
||||
|
||||
sendto_channel_local(ALL_MEMBERS, chptr, ":%s KICK %s %s :%s",
|
||||
me.name, chptr->chname, who->name, comment);
|
||||
sendto_server(&me, chptr, NOCAPS, NOCAPS,
|
||||
":%s KICK %s %s :%s", me.name, chptr->chname, who->name, comment);
|
||||
remove_user_from_channel(msptr);
|
||||
return 0;
|
||||
}
|
148
ircd-ratbox-3.0.10/contrib/m_olist.c
Normal file
148
ircd-ratbox-3.0.10/contrib/m_olist.c
Normal file
@ -0,0 +1,148 @@
|
||||
/*
|
||||
* ircd-ratbox: A slightly useful ircd.
|
||||
* m_olist.c: List channels. olist is an oper only command
|
||||
* that shows channels regardless of modes. This
|
||||
* is kinda evil, and might be morally wrong, but
|
||||
* somebody will likely need it.
|
||||
*
|
||||
* Copyright (C) 2002 by the past and present ircd coders, and others.
|
||||
* Copyright (C) 2004-2012 ircd-ratbox Development Team
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
|
||||
* USA
|
||||
*
|
||||
* $Id: m_olist.c 27381 2012-03-16 23:10:29Z dubkat $
|
||||
*/
|
||||
|
||||
#include "stdinc.h"
|
||||
#include "ratbox_lib.h"
|
||||
#include "struct.h"
|
||||
#include "channel.h"
|
||||
#include "client.h"
|
||||
#include "ircd.h"
|
||||
#include "numeric.h"
|
||||
#include "s_log.h"
|
||||
#include "s_serv.h"
|
||||
#include "send.h"
|
||||
#include "whowas.h"
|
||||
#include "match.h"
|
||||
#include "hash.h"
|
||||
#include "parse.h"
|
||||
#include "modules.h"
|
||||
#include "s_newconf.h"
|
||||
|
||||
static int mo_olist(struct Client *, struct Client *, int parc, const char *parv[]);
|
||||
|
||||
#ifndef STATIC_MODULES
|
||||
|
||||
struct Message olist_msgtab = {
|
||||
"OLIST", 0, 0, 0, MFLG_SLOW,
|
||||
{mg_unreg, mg_not_oper, mg_ignore, mg_ignore, mg_ignore, {mo_olist, 1}}
|
||||
};
|
||||
|
||||
mapi_clist_av1 olist_clist[] = { &olist_msgtab, NULL };
|
||||
|
||||
DECLARE_MODULE_AV1(okick, NULL, NULL, olist_clist, NULL, NULL, "$Revision: 27381 $");
|
||||
|
||||
#endif
|
||||
|
||||
static void list_all_channels(struct Client *source_p);
|
||||
static void list_named_channel(struct Client *source_p, const char *name);
|
||||
|
||||
/*
|
||||
** mo_olist
|
||||
** parv[0] = sender prefix
|
||||
** parv[1] = channel
|
||||
*/
|
||||
static int
|
||||
mo_olist(struct Client *client_p, struct Client *source_p, int parc, const char *parv[])
|
||||
{
|
||||
if(IsOperSpy(source_p))
|
||||
{
|
||||
/* If no arg, do all channels *whee*, else just one channel */
|
||||
if(parc < 2 || EmptyString(parv[1]))
|
||||
{
|
||||
report_operspy(source_p, "LIST", NULL);
|
||||
list_all_channels(source_p);
|
||||
}
|
||||
else
|
||||
{
|
||||
report_operspy(source_p, "LIST", parv[1]);
|
||||
list_named_channel(source_p, parv[1]);
|
||||
}
|
||||
}
|
||||
|
||||
sendto_one(source_p, form_str(RPL_LISTEND), me.name, source_p->name);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* list_all_channels
|
||||
* inputs - pointer to client requesting list
|
||||
* output - 0/1
|
||||
* side effects - list all channels to source_p
|
||||
*/
|
||||
static void
|
||||
list_all_channels(struct Client *source_p)
|
||||
{
|
||||
struct Channel *chptr;
|
||||
rb_dlink_node *ptr;
|
||||
sendto_one(source_p, form_str(RPL_LISTSTART), me.name, source_p->name);
|
||||
|
||||
RB_DLINK_FOREACH(ptr, global_channel_list.head)
|
||||
{
|
||||
chptr = ptr->data;
|
||||
|
||||
sendto_one(source_p, form_str(RPL_LIST),
|
||||
me.name, source_p->name, chptr->chname,
|
||||
rb_dlink_list_length(&chptr->members),
|
||||
chptr->topic == NULL ? "" : chptr->topic->topic);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* list_named_channel
|
||||
* inputs - pointer to client requesting list
|
||||
* output - 0/1
|
||||
* side effects - list all channels to source_p
|
||||
*/
|
||||
static void
|
||||
list_named_channel(struct Client *source_p, const char *name)
|
||||
{
|
||||
struct Channel *chptr;
|
||||
char *p;
|
||||
char *n = LOCAL_COPY(name);
|
||||
|
||||
sendto_one(source_p, form_str(RPL_LISTSTART), me.name, source_p->name);
|
||||
|
||||
if((p = strchr(n, ',')))
|
||||
*p = '\0';
|
||||
|
||||
if(EmptyString(n))
|
||||
{
|
||||
sendto_one_numeric(source_p, ERR_NOSUCHCHANNEL, form_str(ERR_NOSUCHCHANNEL), n);
|
||||
return;
|
||||
}
|
||||
|
||||
if((chptr = find_channel(n)) == NULL)
|
||||
sendto_one_numeric(source_p, ERR_NOSUCHCHANNEL, form_str(ERR_NOSUCHCHANNEL), n);
|
||||
else
|
||||
sendto_one(source_p, form_str(RPL_LIST), me.name, source_p->name,
|
||||
chptr->chname, rb_dlink_list_length(&chptr->members),
|
||||
chptr->topic ? chptr->topic->topic : "");
|
||||
}
|
117
ircd-ratbox-3.0.10/contrib/m_opme.c
Normal file
117
ircd-ratbox-3.0.10/contrib/m_opme.c
Normal file
@ -0,0 +1,117 @@
|
||||
/* contrib/m_opme.c
|
||||
* Copyright (C) 2002 Hybrid Development Team
|
||||
* Copyright (C) 2004-2012 ircd-ratbox development team
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 1, or (at your option)
|
||||
* any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*
|
||||
* $Id: m_opme.c 27371 2012-03-16 05:33:15Z dubkat $
|
||||
*/
|
||||
#include "stdinc.h"
|
||||
#include "ratbox_lib.h"
|
||||
#include "struct.h"
|
||||
#include "channel.h"
|
||||
#include "client.h"
|
||||
#include "ircd.h"
|
||||
#include "numeric.h"
|
||||
#include "s_log.h"
|
||||
#include "s_serv.h"
|
||||
#include "send.h"
|
||||
#include "whowas.h"
|
||||
#include "match.h"
|
||||
#include "hash.h"
|
||||
#include "parse.h"
|
||||
#include "modules.h"
|
||||
#include "s_newconf.h"
|
||||
|
||||
static int mo_opme(struct Client *client_p, struct Client *source_p, int parc, const char *parv[]);
|
||||
|
||||
struct Message opme_msgtab = {
|
||||
"OPME", 0, 0, 0, MFLG_SLOW,
|
||||
{mg_unreg, mg_not_oper, mg_ignore, mg_ignore, mg_ignore, {mo_opme, 2}}
|
||||
};
|
||||
|
||||
mapi_clist_av1 opme_clist[] = { &opme_msgtab, NULL };
|
||||
|
||||
DECLARE_MODULE_AV1(opme, NULL, NULL, opme_clist, NULL, NULL, "$Revision: 27371 $");
|
||||
|
||||
|
||||
/*
|
||||
** mo_opme
|
||||
** parv[0] = sender prefix
|
||||
** parv[1] = channel
|
||||
*/
|
||||
static int
|
||||
mo_opme(struct Client *client_p, struct Client *source_p, int parc, const char *parv[])
|
||||
{
|
||||
struct Channel *chptr;
|
||||
struct membership *msptr;
|
||||
rb_dlink_node *ptr;
|
||||
|
||||
/* admins only */
|
||||
if(!IsOperAdmin(source_p))
|
||||
{
|
||||
sendto_one(source_p, form_str(ERR_NOPRIVS), me.name, source_p->name, "opme");
|
||||
return 0;
|
||||
}
|
||||
|
||||
if((chptr = find_channel(parv[1])) == NULL)
|
||||
{
|
||||
sendto_one_numeric(source_p, ERR_NOSUCHCHANNEL,
|
||||
form_str(ERR_NOSUCHCHANNEL), parv[1]);
|
||||
return 0;
|
||||
}
|
||||
|
||||
RB_DLINK_FOREACH(ptr, chptr->members.head)
|
||||
{
|
||||
msptr = ptr->data;
|
||||
|
||||
if(is_chanop(msptr))
|
||||
{
|
||||
sendto_one(source_p, ":%s NOTICE %s :%s Channel is not opless",
|
||||
me.name, parv[0], parv[1]);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
msptr = find_channel_membership(chptr, source_p);
|
||||
|
||||
if(msptr == NULL)
|
||||
return 0;
|
||||
|
||||
msptr->flags |= CHFL_CHANOP;
|
||||
|
||||
sendto_wallops_flags(UMODE_WALLOP, &me,
|
||||
"OPME called for [%s] by %s!%s@%s",
|
||||
parv[1], source_p->name, source_p->username, source_p->host);
|
||||
ilog(L_MAIN, "OPME called for [%s] by %s!%s@%s",
|
||||
parv[1], source_p->name, source_p->username, source_p->host);
|
||||
|
||||
/* dont send stuff for local channels remotely. */
|
||||
if(*chptr->chname != '&')
|
||||
{
|
||||
sendto_server(NULL, NULL, NOCAPS, NOCAPS,
|
||||
":%s WALLOPS :OPME called for [%s] by %s!%s@%s",
|
||||
me.name, parv[1], source_p->name, source_p->username, source_p->host);
|
||||
sendto_server(NULL, chptr, NOCAPS, NOCAPS, ":%s PART %s", source_p->name, parv[1]);
|
||||
sendto_server(NULL, chptr, NOCAPS, NOCAPS,
|
||||
":%s SJOIN %ld %s + :@%s",
|
||||
me.name, (long)chptr->channelts, parv[1], source_p->name);
|
||||
}
|
||||
|
||||
sendto_channel_local(ALL_MEMBERS, chptr,
|
||||
":%s MODE %s +o %s", me.name, parv[1], source_p->name);
|
||||
|
||||
return 0;
|
||||
}
|
142
ircd-ratbox-3.0.10/contrib/m_webirc.c
Normal file
142
ircd-ratbox-3.0.10/contrib/m_webirc.c
Normal file
@ -0,0 +1,142 @@
|
||||
/*
|
||||
* ircd-ratbox: A slightly useful ircd.
|
||||
* m_webirc.c: Makes CGI:IRC users appear as coming from their real host
|
||||
*
|
||||
* Copyright (C) 1990 Jarkko Oikarinen and University of Oulu, Co Center
|
||||
* Copyright (C) 1996-2002 Hybrid Development Team
|
||||
* Copyright (C) 2002-2012 ircd-ratbox development team
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
|
||||
* USA
|
||||
*
|
||||
* $Id: m_webirc.c 27371 2012-03-16 05:33:15Z dubkat $
|
||||
*/
|
||||
/* Usage:
|
||||
* auth {
|
||||
* user = "webirc@<cgiirc ip>"; # if identd used, put ident username instead
|
||||
* password = "<password>"; # encryption possible
|
||||
* spoof = "webirc."
|
||||
* class = "users";
|
||||
* };
|
||||
* Possible flags:
|
||||
* encrypted - password is encrypted (recommended)
|
||||
* kline_exempt - k/g lines on the cgiirc ip are ignored
|
||||
* gline_exempt - glines on the cgiirc ip are ignored
|
||||
* dlines are checked on the cgiirc ip (of course).
|
||||
* k/d/g/x lines, auth blocks, user limits, etc are checked using the
|
||||
* real host/ip.
|
||||
* The password should be specified unencrypted in webirc_password in
|
||||
* cgiirc.config
|
||||
*/
|
||||
|
||||
#include "stdinc.h"
|
||||
#include "ratbox_lib.h"
|
||||
#include "struct.h"
|
||||
#include "client.h" /* client struct */
|
||||
#include "hostmask.h"
|
||||
#include "reject.h"
|
||||
#include "send.h" /* sendto_one */
|
||||
#include "numeric.h" /* ERR_xxx */
|
||||
#include "ircd.h" /* me */
|
||||
#include "parse.h"
|
||||
#include "match.h"
|
||||
#include "modules.h"
|
||||
#include "s_serv.h"
|
||||
#include "hash.h"
|
||||
#include "s_conf.h"
|
||||
|
||||
static int mr_webirc(struct Client *, struct Client *, int, const char **);
|
||||
|
||||
struct Message webirc_msgtab = {
|
||||
"WEBIRC", 0, 0, 0, MFLG_SLOW | MFLG_UNREG,
|
||||
{{mr_webirc, 5}, mg_reg, mg_ignore, mg_ignore, mg_ignore, mg_reg}
|
||||
};
|
||||
|
||||
mapi_clist_av1 webirc_clist[] = { &webirc_msgtab, NULL };
|
||||
|
||||
DECLARE_MODULE_AV1(webirc, NULL, NULL, webirc_clist, NULL, NULL, "$Revision: 27371 $");
|
||||
|
||||
/*
|
||||
* mr_webirc - webirc message handler
|
||||
* parv[0] = sender prefix
|
||||
* parv[1] = password
|
||||
* parv[2] = fake username (we ignore this)
|
||||
* parv[3] = fake hostname
|
||||
* parv[4] = fake ip
|
||||
*/
|
||||
static int
|
||||
mr_webirc(struct Client *client_p, struct Client *source_p, int parc, const char *parv[])
|
||||
{
|
||||
struct ConfItem *aconf;
|
||||
const char *encr;
|
||||
|
||||
if(!strchr(parv[4], '.') && !strchr(parv[4], ':'))
|
||||
{
|
||||
sendto_one(source_p, "NOTICE * :Invalid IP");
|
||||
return 0;
|
||||
}
|
||||
|
||||
aconf = find_address_conf(client_p->host, client_p->sockhost,
|
||||
IsGotId(client_p) ? client_p->username : "webirc",
|
||||
(struct sockaddr *)&client_p->localClient->ip,
|
||||
client_p->localClient->ip.ss_family);
|
||||
if(aconf == NULL || !(aconf->status & CONF_CLIENT))
|
||||
return 0;
|
||||
if(!IsConfDoSpoofIp(aconf) || irccmp(aconf->info.name, "webirc."))
|
||||
{
|
||||
/* XXX */
|
||||
sendto_one(source_p, "NOTICE * :Not a CGI:IRC auth block");
|
||||
return 0;
|
||||
}
|
||||
if(EmptyString(aconf->passwd))
|
||||
{
|
||||
sendto_one(source_p, "NOTICE * :CGI:IRC auth blocks must have a password");
|
||||
return 0;
|
||||
}
|
||||
|
||||
if(EmptyString(parv[1]))
|
||||
encr = "";
|
||||
else if(IsConfEncrypted(aconf))
|
||||
encr = crypt(parv[1], aconf->passwd);
|
||||
else
|
||||
encr = parv[1];
|
||||
|
||||
if(strcmp(encr, aconf->passwd))
|
||||
{
|
||||
sendto_one(source_p, "NOTICE * :CGI:IRC password incorrect");
|
||||
return 0;
|
||||
}
|
||||
|
||||
rb_strlcpy(source_p->sockhost, parv[4], sizeof(source_p->sockhost));
|
||||
if(strlen(parv[3]) <= HOSTLEN)
|
||||
rb_strlcpy(source_p->host, parv[3], sizeof(source_p->host));
|
||||
else
|
||||
rb_strlcpy(source_p->host, source_p->sockhost, sizeof(source_p->host));
|
||||
|
||||
rb_inet_pton_sock(parv[4], (struct sockaddr *)&source_p->localClient->ip);
|
||||
|
||||
/* Check dlines now, k/glines will be checked on registration */
|
||||
if((aconf = find_dline((struct sockaddr *)&source_p->localClient->ip)))
|
||||
{
|
||||
if(!(aconf->status & CONF_EXEMPTDLINE))
|
||||
{
|
||||
exit_client(client_p, source_p, &me, "D-lined");
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
sendto_one(source_p, "NOTICE * :CGI:IRC host/IP set to %s %s", parv[3], parv[4]);
|
||||
return 0;
|
||||
}
|
49
ircd-ratbox-3.0.10/contrib/spy_admin_notice.c
Normal file
49
ircd-ratbox-3.0.10/contrib/spy_admin_notice.c
Normal file
@ -0,0 +1,49 @@
|
||||
/*
|
||||
* ircd-ratbox: A slightly useful ircd.
|
||||
* spy_admin_notice.c: Sends a notice when someone uses ADMIN.
|
||||
*
|
||||
* Copyright (C) 2002 by the past and present ircd coders, and others.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
|
||||
* USA
|
||||
*
|
||||
* $Id: spy_admin_notice.c 26094 2008-09-19 15:33:46Z androsyn $
|
||||
*/
|
||||
#include "stdinc.h"
|
||||
#include "ratbox_lib.h"
|
||||
#include "struct.h"
|
||||
#include "modules.h"
|
||||
#include "hook.h"
|
||||
#include "client.h"
|
||||
#include "ircd.h"
|
||||
#include "send.h"
|
||||
|
||||
void show_admin(hook_data *);
|
||||
|
||||
mapi_hfn_list_av1 admin_hfnlist[] = {
|
||||
{"doing_admin", (hookfn) show_admin},
|
||||
{NULL, NULL}
|
||||
};
|
||||
|
||||
DECLARE_MODULE_AV1(admin_spy, NULL, NULL, NULL, NULL, admin_hfnlist, "$Revision: 26094 $");
|
||||
|
||||
void
|
||||
show_admin(hook_data * data)
|
||||
{
|
||||
sendto_realops_flags(UMODE_SPY, L_ALL,
|
||||
"admin requested by %s (%s@%s) [%s]",
|
||||
data->client->name, data->client->username,
|
||||
data->client->host, data->client->servptr->name);
|
||||
}
|
49
ircd-ratbox-3.0.10/contrib/spy_info_notice.c
Normal file
49
ircd-ratbox-3.0.10/contrib/spy_info_notice.c
Normal file
@ -0,0 +1,49 @@
|
||||
/*
|
||||
* ircd-ratbox: A slightly useful ircd.
|
||||
* spy_info_notice.c: Sends a notice when someone uses INFO.
|
||||
*
|
||||
* Copyright (C) 2002 by the past and present ircd coders, and others.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
|
||||
* USA
|
||||
*
|
||||
* $Id: spy_info_notice.c 26094 2008-09-19 15:33:46Z androsyn $
|
||||
*/
|
||||
#include "stdinc.h"
|
||||
#include "ratbox_lib.h"
|
||||
#include "struct.h"
|
||||
#include "modules.h"
|
||||
#include "hook.h"
|
||||
#include "client.h"
|
||||
#include "ircd.h"
|
||||
#include "send.h"
|
||||
|
||||
void show_info(hook_data *);
|
||||
|
||||
mapi_hfn_list_av1 info_hfnlist[] = {
|
||||
{"doing_info", (hookfn) show_info},
|
||||
{NULL, NULL}
|
||||
};
|
||||
|
||||
DECLARE_MODULE_AV1(info_spy, NULL, NULL, NULL, NULL, info_hfnlist, "$Revision: 26094 $");
|
||||
|
||||
void
|
||||
show_info(hook_data * data)
|
||||
{
|
||||
sendto_realops_flags(UMODE_SPY, L_ALL,
|
||||
"info requested by %s (%s@%s) [%s]",
|
||||
data->client->name, data->client->username,
|
||||
data->client->host, data->client->servptr->name);
|
||||
}
|
51
ircd-ratbox-3.0.10/contrib/spy_links_notice.c
Normal file
51
ircd-ratbox-3.0.10/contrib/spy_links_notice.c
Normal file
@ -0,0 +1,51 @@
|
||||
/*
|
||||
* ircd-ratbox: A slightly useful ircd.
|
||||
* spy_links_notice.c: Sends a notice when someone uses LINKS.
|
||||
*
|
||||
* Copyright (C) 2002 by the past and present ircd coders, and others.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
|
||||
* USA
|
||||
*
|
||||
* $Id: spy_links_notice.c 26094 2008-09-19 15:33:46Z androsyn $
|
||||
*/
|
||||
#include "stdinc.h"
|
||||
#include "ratbox_lib.h"
|
||||
#include "struct.h"
|
||||
#include "modules.h"
|
||||
#include "hook.h"
|
||||
#include "client.h"
|
||||
#include "ircd.h"
|
||||
#include "send.h"
|
||||
|
||||
void show_links(hook_data *);
|
||||
|
||||
mapi_hfn_list_av1 links_hfnlist[] = {
|
||||
{"doing_links", (hookfn) show_links},
|
||||
{NULL, NULL}
|
||||
};
|
||||
|
||||
DECLARE_MODULE_AV1(links_spy, NULL, NULL, NULL, NULL, links_hfnlist, "$Revision: 26094 $");
|
||||
|
||||
void
|
||||
show_links(hook_data * data)
|
||||
{
|
||||
const char *mask = data->arg1;
|
||||
|
||||
sendto_realops_flags(UMODE_SPY, L_ALL,
|
||||
"LINKS '%s' requested by %s (%s@%s) [%s]",
|
||||
mask, data->client->name, data->client->username,
|
||||
data->client->host, data->client->servptr->name);
|
||||
}
|
49
ircd-ratbox-3.0.10/contrib/spy_motd_notice.c
Normal file
49
ircd-ratbox-3.0.10/contrib/spy_motd_notice.c
Normal file
@ -0,0 +1,49 @@
|
||||
/*
|
||||
* ircd-ratbox: A slightly useful ircd.
|
||||
* spy_motd_notice.c: Sends a notice when someone uses MOTD.
|
||||
*
|
||||
* Copyright (C) 2002 by the past and present ircd coders, and others.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
|
||||
* USA
|
||||
*
|
||||
* $Id: spy_motd_notice.c 26094 2008-09-19 15:33:46Z androsyn $
|
||||
*/
|
||||
#include "stdinc.h"
|
||||
#include "ratbox_lib.h"
|
||||
#include "struct.h"
|
||||
#include "modules.h"
|
||||
#include "hook.h"
|
||||
#include "client.h"
|
||||
#include "ircd.h"
|
||||
#include "send.h"
|
||||
|
||||
void show_motd(hook_data *);
|
||||
|
||||
mapi_hfn_list_av1 motd_hfnlist[] = {
|
||||
{"doing_motd", (hookfn) show_motd},
|
||||
{NULL, NULL}
|
||||
};
|
||||
|
||||
DECLARE_MODULE_AV1(motd_spy, NULL, NULL, NULL, NULL, motd_hfnlist, "$Revision: 26094 $");
|
||||
|
||||
void
|
||||
show_motd(hook_data * data)
|
||||
{
|
||||
sendto_realops_flags(UMODE_SPY, L_ALL,
|
||||
"motd requested by %s (%s@%s) [%s]",
|
||||
data->client->name, data->client->username,
|
||||
data->client->host, data->client->servptr->name);
|
||||
}
|
72
ircd-ratbox-3.0.10/contrib/spy_stats_notice.c
Normal file
72
ircd-ratbox-3.0.10/contrib/spy_stats_notice.c
Normal file
@ -0,0 +1,72 @@
|
||||
/*
|
||||
* ircd-ratbox: A slightly useful ircd.
|
||||
* spy_stats_notice.c: Sends a notice when someone uses STATS.
|
||||
*
|
||||
* Copyright (C) 2002 by the past and present ircd coders, and others.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
|
||||
* USA
|
||||
*
|
||||
* $Id: spy_stats_notice.c 26094 2008-09-19 15:33:46Z androsyn $
|
||||
*/
|
||||
#include "stdinc.h"
|
||||
#include "ratbox_lib.h"
|
||||
#include "struct.h"
|
||||
#include "match.h"
|
||||
#include "modules.h"
|
||||
#include "hook.h"
|
||||
#include "client.h"
|
||||
#include "ircd.h"
|
||||
#include "send.h"
|
||||
|
||||
void show_stats(hook_data_int *);
|
||||
|
||||
mapi_hfn_list_av1 stats_hfnlist[] = {
|
||||
{"doing_stats", (hookfn) show_stats},
|
||||
{NULL, NULL}
|
||||
};
|
||||
|
||||
DECLARE_MODULE_AV1(stats_spy, NULL, NULL, NULL, NULL, stats_hfnlist, "$Revision: 26094 $");
|
||||
|
||||
void
|
||||
show_stats(hook_data_int * data)
|
||||
{
|
||||
char statchar = (char)data->arg2;
|
||||
|
||||
if(statchar == 'L' || statchar == 'l')
|
||||
{
|
||||
const char *name = data->arg1;
|
||||
|
||||
if(!EmptyString(name))
|
||||
sendto_realops_flags(UMODE_SPY, L_ALL,
|
||||
"STATS %c requested by %s (%s@%s) [%s] on %s",
|
||||
statchar, data->client->name,
|
||||
data->client->username,
|
||||
data->client->host, data->client->servptr->name, name);
|
||||
else
|
||||
sendto_realops_flags(UMODE_SPY, L_ALL,
|
||||
"STATS %c requested by %s (%s@%s) [%s]",
|
||||
statchar, data->client->name,
|
||||
data->client->username,
|
||||
data->client->host, data->client->servptr->name);
|
||||
}
|
||||
else
|
||||
{
|
||||
sendto_realops_flags(UMODE_SPY, L_ALL,
|
||||
"STATS %c requested by %s (%s@%s) [%s]",
|
||||
statchar, data->client->name, data->client->username,
|
||||
data->client->host, data->client->servptr->name);
|
||||
}
|
||||
}
|
49
ircd-ratbox-3.0.10/contrib/spy_stats_p_notice.c
Normal file
49
ircd-ratbox-3.0.10/contrib/spy_stats_p_notice.c
Normal file
@ -0,0 +1,49 @@
|
||||
/*
|
||||
* ircd-ratbox: A slightly useful ircd.
|
||||
* spy_stats_p_notice.c: Sends a notice when someone uses STATS p.
|
||||
*
|
||||
* Copyright (C) 2002 by the past and present ircd coders, and others.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
|
||||
* USA
|
||||
*
|
||||
* $Id: spy_stats_p_notice.c 26094 2008-09-19 15:33:46Z androsyn $
|
||||
*/
|
||||
#include "stdinc.h"
|
||||
#include "ratbox_lib.h"
|
||||
#include "struct.h"
|
||||
#include "modules.h"
|
||||
#include "hook.h"
|
||||
#include "client.h"
|
||||
#include "ircd.h"
|
||||
#include "send.h"
|
||||
|
||||
void show_stats_p(hook_data *);
|
||||
|
||||
mapi_hfn_list_av1 stats_p_hfnlist[] = {
|
||||
{"doing_stats_p", (hookfn) show_stats_p},
|
||||
{NULL, NULL}
|
||||
};
|
||||
|
||||
DECLARE_MODULE_AV1(stats_p_spy, NULL, NULL, NULL, NULL, stats_p_hfnlist, "$Revision: 26094 $");
|
||||
|
||||
void
|
||||
show_stats_p(hook_data * data)
|
||||
{
|
||||
sendto_realops_flags(UMODE_SPY, L_ALL,
|
||||
"STATS p requested by %s (%s@%s) [%s]",
|
||||
data->client->name, data->client->username,
|
||||
data->client->host, data->client->servptr->name);
|
||||
}
|
57
ircd-ratbox-3.0.10/contrib/spy_whois_notice.c
Normal file
57
ircd-ratbox-3.0.10/contrib/spy_whois_notice.c
Normal file
@ -0,0 +1,57 @@
|
||||
/*
|
||||
* ircd-ratbox: A slightly useful ircd.
|
||||
* spy_whois_notice.c: Sends a notice when someone uses WHOIS.
|
||||
*
|
||||
* Copyright (C) 2002 by the past and present ircd coders, and others.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
|
||||
* USA
|
||||
*
|
||||
* $Id: spy_whois_notice.c 26094 2008-09-19 15:33:46Z androsyn $
|
||||
*/
|
||||
#include "stdinc.h"
|
||||
#include "ratbox_lib.h"
|
||||
#include "struct.h"
|
||||
#include "modules.h"
|
||||
#include "hook.h"
|
||||
#include "client.h"
|
||||
#include "ircd.h"
|
||||
#include "send.h"
|
||||
|
||||
void show_whois(hook_data_client *);
|
||||
|
||||
mapi_hfn_list_av1 whois_hfnlist[] = {
|
||||
{"doing_whois", (hookfn) show_whois},
|
||||
{NULL, NULL}
|
||||
};
|
||||
|
||||
DECLARE_MODULE_AV1(whois_spy, NULL, NULL, NULL, NULL, whois_hfnlist, "$Revision: 26094 $");
|
||||
|
||||
void
|
||||
show_whois(hook_data_client * data)
|
||||
{
|
||||
struct Client *source_p = data->client;
|
||||
struct Client *target_p = data->target;
|
||||
|
||||
/* source being MyConnect() is implicit here from m_whois.c --fl */
|
||||
if(MyClient(target_p) && IsOper(target_p) && (source_p != target_p) &&
|
||||
(target_p->umodes & UMODE_SPY))
|
||||
{
|
||||
sendto_one(target_p,
|
||||
":%s NOTICE %s :*** Notice -- %s (%s@%s) is doing a whois on you [%s]",
|
||||
me.name, target_p->name, source_p->name,
|
||||
source_p->username, source_p->host, source_p->servptr->name);
|
||||
}
|
||||
}
|
57
ircd-ratbox-3.0.10/contrib/spy_whois_notice_global.c
Normal file
57
ircd-ratbox-3.0.10/contrib/spy_whois_notice_global.c
Normal file
@ -0,0 +1,57 @@
|
||||
/*
|
||||
* ircd-ratbox: A slightly useful ircd.
|
||||
* spy_whois_notice.c: Sends a notice when someone uses WHOIS.
|
||||
*
|
||||
* Copyright (C) 2002 by the past and present ircd coders, and others.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
|
||||
* USA
|
||||
*
|
||||
* $Id: spy_whois_notice_global.c 26094 2008-09-19 15:33:46Z androsyn $
|
||||
*/
|
||||
#include "stdinc.h"
|
||||
#include "ratbox_lib.h"
|
||||
#include "struct.h"
|
||||
#include "modules.h"
|
||||
#include "hook.h"
|
||||
#include "client.h"
|
||||
#include "ircd.h"
|
||||
#include "send.h"
|
||||
|
||||
void show_whois_global(hook_data_client *);
|
||||
|
||||
mapi_hfn_list_av1 whois_global_hfnlist[] = {
|
||||
{"doing_whois_global", (hookfn) show_whois_global},
|
||||
{NULL, NULL}
|
||||
};
|
||||
|
||||
DECLARE_MODULE_AV1(whois_global_spy, NULL, NULL, NULL, NULL, whois_global_hfnlist,
|
||||
"$Revision: 26094 $");
|
||||
|
||||
void
|
||||
show_whois_global(hook_data_client * data)
|
||||
{
|
||||
struct Client *source_p = data->client;
|
||||
struct Client *target_p = data->target;
|
||||
|
||||
if(MyClient(target_p) && IsOper(target_p) && (source_p != target_p) &&
|
||||
(target_p->umodes & UMODE_SPY))
|
||||
{
|
||||
sendto_one(target_p,
|
||||
":%s NOTICE %s :*** Notice -- %s (%s@%s) is doing a whois on you [%s]",
|
||||
me.name, target_p->name, source_p->name,
|
||||
source_p->username, source_p->host, source_p->servptr->name);
|
||||
}
|
||||
}
|
526
ircd-ratbox-3.0.10/depcomp
Executable file
526
ircd-ratbox-3.0.10/depcomp
Executable file
@ -0,0 +1,526 @@
|
||||
#! /bin/sh
|
||||
# depcomp - compile a program generating dependencies as side-effects
|
||||
|
||||
scriptversion=2004-04-25.13
|
||||
|
||||
# Copyright (C) 1999, 2000, 2003, 2004 Free Software Foundation, Inc.
|
||||
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2, or (at your option)
|
||||
# any later version.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
||||
# 02111-1307, USA.
|
||||
|
||||
# As a special exception to the GNU General Public License, if you
|
||||
# distribute this file as part of a program that contains a
|
||||
# configuration script generated by Autoconf, you may include it under
|
||||
# the same distribution terms that you use for the rest of that program.
|
||||
|
||||
# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
|
||||
|
||||
case $1 in
|
||||
'')
|
||||
echo "$0: No command. Try \`$0 --help' for more information." 1>&2
|
||||
exit 1;
|
||||
;;
|
||||
-h | --h*)
|
||||
cat <<\EOF
|
||||
Usage: depcomp [--help] [--version] PROGRAM [ARGS]
|
||||
|
||||
Run PROGRAMS ARGS to compile a file, generating dependencies
|
||||
as side-effects.
|
||||
|
||||
Environment variables:
|
||||
depmode Dependency tracking mode.
|
||||
source Source file read by `PROGRAMS ARGS'.
|
||||
object Object file output by `PROGRAMS ARGS'.
|
||||
depfile Dependency file to output.
|
||||
tmpdepfile Temporary file to use when outputing dependencies.
|
||||
libtool Whether libtool is used (yes/no).
|
||||
|
||||
Report bugs to <bug-automake@gnu.org>.
|
||||
EOF
|
||||
exit 0
|
||||
;;
|
||||
-v | --v*)
|
||||
echo "depcomp $scriptversion"
|
||||
exit 0
|
||||
;;
|
||||
esac
|
||||
|
||||
if test -z "$depmode" || test -z "$source" || test -z "$object"; then
|
||||
echo "depcomp: Variables source, object and depmode must be set" 1>&2
|
||||
exit 1
|
||||
fi
|
||||
# `libtool' can also be set to `yes' or `no'.
|
||||
|
||||
if test -z "$depfile"; then
|
||||
base=`echo "$object" | sed -e 's,^.*/,,' -e 's,\.\([^.]*\)$,.P\1,'`
|
||||
dir=`echo "$object" | sed 's,/.*$,/,'`
|
||||
if test "$dir" = "$object"; then
|
||||
dir=
|
||||
fi
|
||||
# FIXME: should be _deps on DOS.
|
||||
depfile="$dir.deps/$base"
|
||||
fi
|
||||
|
||||
tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
|
||||
|
||||
rm -f "$tmpdepfile"
|
||||
|
||||
# Some modes work just like other modes, but use different flags. We
|
||||
# parameterize here, but still list the modes in the big case below,
|
||||
# to make depend.m4 easier to write. Note that we *cannot* use a case
|
||||
# here, because this file can only contain one case statement.
|
||||
if test "$depmode" = hp; then
|
||||
# HP compiler uses -M and no extra arg.
|
||||
gccflag=-M
|
||||
depmode=gcc
|
||||
fi
|
||||
|
||||
if test "$depmode" = dashXmstdout; then
|
||||
# This is just like dashmstdout with a different argument.
|
||||
dashmflag=-xM
|
||||
depmode=dashmstdout
|
||||
fi
|
||||
|
||||
case "$depmode" in
|
||||
gcc3)
|
||||
## gcc 3 implements dependency tracking that does exactly what
|
||||
## we want. Yay! Note: for some reason libtool 1.4 doesn't like
|
||||
## it if -MD -MP comes after the -MF stuff. Hmm.
|
||||
"$@" -MT "$object" -MD -MP -MF "$tmpdepfile"
|
||||
stat=$?
|
||||
if test $stat -eq 0; then :
|
||||
else
|
||||
rm -f "$tmpdepfile"
|
||||
exit $stat
|
||||
fi
|
||||
mv "$tmpdepfile" "$depfile"
|
||||
;;
|
||||
|
||||
gcc)
|
||||
## There are various ways to get dependency output from gcc. Here's
|
||||
## why we pick this rather obscure method:
|
||||
## - Don't want to use -MD because we'd like the dependencies to end
|
||||
## up in a subdir. Having to rename by hand is ugly.
|
||||
## (We might end up doing this anyway to support other compilers.)
|
||||
## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
|
||||
## -MM, not -M (despite what the docs say).
|
||||
## - Using -M directly means running the compiler twice (even worse
|
||||
## than renaming).
|
||||
if test -z "$gccflag"; then
|
||||
gccflag=-MD,
|
||||
fi
|
||||
"$@" -Wp,"$gccflag$tmpdepfile"
|
||||
stat=$?
|
||||
if test $stat -eq 0; then :
|
||||
else
|
||||
rm -f "$tmpdepfile"
|
||||
exit $stat
|
||||
fi
|
||||
rm -f "$depfile"
|
||||
echo "$object : \\" > "$depfile"
|
||||
alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
|
||||
## The second -e expression handles DOS-style file names with drive letters.
|
||||
sed -e 's/^[^:]*: / /' \
|
||||
-e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
|
||||
## This next piece of magic avoids the `deleted header file' problem.
|
||||
## The problem is that when a header file which appears in a .P file
|
||||
## is deleted, the dependency causes make to die (because there is
|
||||
## typically no way to rebuild the header). We avoid this by adding
|
||||
## dummy dependencies for each header file. Too bad gcc doesn't do
|
||||
## this for us directly.
|
||||
tr ' ' '
|
||||
' < "$tmpdepfile" |
|
||||
## Some versions of gcc put a space before the `:'. On the theory
|
||||
## that the space means something, we add a space to the output as
|
||||
## well.
|
||||
## Some versions of the HPUX 10.20 sed can't process this invocation
|
||||
## correctly. Breaking it into two sed invocations is a workaround.
|
||||
sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
|
||||
rm -f "$tmpdepfile"
|
||||
;;
|
||||
|
||||
hp)
|
||||
# This case exists only to let depend.m4 do its work. It works by
|
||||
# looking at the text of this script. This case will never be run,
|
||||
# since it is checked for above.
|
||||
exit 1
|
||||
;;
|
||||
|
||||
sgi)
|
||||
if test "$libtool" = yes; then
|
||||
"$@" "-Wp,-MDupdate,$tmpdepfile"
|
||||
else
|
||||
"$@" -MDupdate "$tmpdepfile"
|
||||
fi
|
||||
stat=$?
|
||||
if test $stat -eq 0; then :
|
||||
else
|
||||
rm -f "$tmpdepfile"
|
||||
exit $stat
|
||||
fi
|
||||
rm -f "$depfile"
|
||||
|
||||
if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files
|
||||
echo "$object : \\" > "$depfile"
|
||||
|
||||
# Clip off the initial element (the dependent). Don't try to be
|
||||
# clever and replace this with sed code, as IRIX sed won't handle
|
||||
# lines with more than a fixed number of characters (4096 in
|
||||
# IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines;
|
||||
# the IRIX cc adds comments like `#:fec' to the end of the
|
||||
# dependency line.
|
||||
tr ' ' '
|
||||
' < "$tmpdepfile" \
|
||||
| sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
|
||||
tr '
|
||||
' ' ' >> $depfile
|
||||
echo >> $depfile
|
||||
|
||||
# The second pass generates a dummy entry for each header file.
|
||||
tr ' ' '
|
||||
' < "$tmpdepfile" \
|
||||
| sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
|
||||
>> $depfile
|
||||
else
|
||||
# The sourcefile does not contain any dependencies, so just
|
||||
# store a dummy comment line, to avoid errors with the Makefile
|
||||
# "include basename.Plo" scheme.
|
||||
echo "#dummy" > "$depfile"
|
||||
fi
|
||||
rm -f "$tmpdepfile"
|
||||
;;
|
||||
|
||||
aix)
|
||||
# The C for AIX Compiler uses -M and outputs the dependencies
|
||||
# in a .u file. In older versions, this file always lives in the
|
||||
# current directory. Also, the AIX compiler puts `$object:' at the
|
||||
# start of each line; $object doesn't have directory information.
|
||||
# Version 6 uses the directory in both cases.
|
||||
stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'`
|
||||
tmpdepfile="$stripped.u"
|
||||
if test "$libtool" = yes; then
|
||||
"$@" -Wc,-M
|
||||
else
|
||||
"$@" -M
|
||||
fi
|
||||
stat=$?
|
||||
|
||||
if test -f "$tmpdepfile"; then :
|
||||
else
|
||||
stripped=`echo "$stripped" | sed 's,^.*/,,'`
|
||||
tmpdepfile="$stripped.u"
|
||||
fi
|
||||
|
||||
if test $stat -eq 0; then :
|
||||
else
|
||||
rm -f "$tmpdepfile"
|
||||
exit $stat
|
||||
fi
|
||||
|
||||
if test -f "$tmpdepfile"; then
|
||||
outname="$stripped.o"
|
||||
# Each line is of the form `foo.o: dependent.h'.
|
||||
# Do two passes, one to just change these to
|
||||
# `$object: dependent.h' and one to simply `dependent.h:'.
|
||||
sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile"
|
||||
sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile"
|
||||
else
|
||||
# The sourcefile does not contain any dependencies, so just
|
||||
# store a dummy comment line, to avoid errors with the Makefile
|
||||
# "include basename.Plo" scheme.
|
||||
echo "#dummy" > "$depfile"
|
||||
fi
|
||||
rm -f "$tmpdepfile"
|
||||
;;
|
||||
|
||||
icc)
|
||||
# Intel's C compiler understands `-MD -MF file'. However on
|
||||
# icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
|
||||
# ICC 7.0 will fill foo.d with something like
|
||||
# foo.o: sub/foo.c
|
||||
# foo.o: sub/foo.h
|
||||
# which is wrong. We want:
|
||||
# sub/foo.o: sub/foo.c
|
||||
# sub/foo.o: sub/foo.h
|
||||
# sub/foo.c:
|
||||
# sub/foo.h:
|
||||
# ICC 7.1 will output
|
||||
# foo.o: sub/foo.c sub/foo.h
|
||||
# and will wrap long lines using \ :
|
||||
# foo.o: sub/foo.c ... \
|
||||
# sub/foo.h ... \
|
||||
# ...
|
||||
|
||||
"$@" -MD -MF "$tmpdepfile"
|
||||
stat=$?
|
||||
if test $stat -eq 0; then :
|
||||
else
|
||||
rm -f "$tmpdepfile"
|
||||
exit $stat
|
||||
fi
|
||||
rm -f "$depfile"
|
||||
# Each line is of the form `foo.o: dependent.h',
|
||||
# or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
|
||||
# Do two passes, one to just change these to
|
||||
# `$object: dependent.h' and one to simply `dependent.h:'.
|
||||
sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
|
||||
# Some versions of the HPUX 10.20 sed can't process this invocation
|
||||
# correctly. Breaking it into two sed invocations is a workaround.
|
||||
sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
|
||||
sed -e 's/$/ :/' >> "$depfile"
|
||||
rm -f "$tmpdepfile"
|
||||
;;
|
||||
|
||||
tru64)
|
||||
# The Tru64 compiler uses -MD to generate dependencies as a side
|
||||
# effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
|
||||
# At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
|
||||
# dependencies in `foo.d' instead, so we check for that too.
|
||||
# Subdirectories are respected.
|
||||
dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
|
||||
test "x$dir" = "x$object" && dir=
|
||||
base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
|
||||
|
||||
if test "$libtool" = yes; then
|
||||
# Dependencies are output in .lo.d with libtool 1.4.
|
||||
# They are output in .o.d with libtool 1.5.
|
||||
tmpdepfile1="$dir.libs/$base.lo.d"
|
||||
tmpdepfile2="$dir.libs/$base.o.d"
|
||||
tmpdepfile3="$dir.libs/$base.d"
|
||||
"$@" -Wc,-MD
|
||||
else
|
||||
tmpdepfile1="$dir$base.o.d"
|
||||
tmpdepfile2="$dir$base.d"
|
||||
tmpdepfile3="$dir$base.d"
|
||||
"$@" -MD
|
||||
fi
|
||||
|
||||
stat=$?
|
||||
if test $stat -eq 0; then :
|
||||
else
|
||||
rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
|
||||
exit $stat
|
||||
fi
|
||||
|
||||
if test -f "$tmpdepfile1"; then
|
||||
tmpdepfile="$tmpdepfile1"
|
||||
elif test -f "$tmpdepfile2"; then
|
||||
tmpdepfile="$tmpdepfile2"
|
||||
else
|
||||
tmpdepfile="$tmpdepfile3"
|
||||
fi
|
||||
if test -f "$tmpdepfile"; then
|
||||
sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
|
||||
# That's a tab and a space in the [].
|
||||
sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
|
||||
else
|
||||
echo "#dummy" > "$depfile"
|
||||
fi
|
||||
rm -f "$tmpdepfile"
|
||||
;;
|
||||
|
||||
#nosideeffect)
|
||||
# This comment above is used by automake to tell side-effect
|
||||
# dependency tracking mechanisms from slower ones.
|
||||
|
||||
dashmstdout)
|
||||
# Important note: in order to support this mode, a compiler *must*
|
||||
# always write the preprocessed file to stdout, regardless of -o.
|
||||
"$@" || exit $?
|
||||
|
||||
# Remove the call to Libtool.
|
||||
if test "$libtool" = yes; then
|
||||
while test $1 != '--mode=compile'; do
|
||||
shift
|
||||
done
|
||||
shift
|
||||
fi
|
||||
|
||||
# Remove `-o $object'.
|
||||
IFS=" "
|
||||
for arg
|
||||
do
|
||||
case $arg in
|
||||
-o)
|
||||
shift
|
||||
;;
|
||||
$object)
|
||||
shift
|
||||
;;
|
||||
*)
|
||||
set fnord "$@" "$arg"
|
||||
shift # fnord
|
||||
shift # $arg
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
test -z "$dashmflag" && dashmflag=-M
|
||||
# Require at least two characters before searching for `:'
|
||||
# in the target name. This is to cope with DOS-style filenames:
|
||||
# a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
|
||||
"$@" $dashmflag |
|
||||
sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile"
|
||||
rm -f "$depfile"
|
||||
cat < "$tmpdepfile" > "$depfile"
|
||||
tr ' ' '
|
||||
' < "$tmpdepfile" | \
|
||||
## Some versions of the HPUX 10.20 sed can't process this invocation
|
||||
## correctly. Breaking it into two sed invocations is a workaround.
|
||||
sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
|
||||
rm -f "$tmpdepfile"
|
||||
;;
|
||||
|
||||
dashXmstdout)
|
||||
# This case only exists to satisfy depend.m4. It is never actually
|
||||
# run, as this mode is specially recognized in the preamble.
|
||||
exit 1
|
||||
;;
|
||||
|
||||
makedepend)
|
||||
"$@" || exit $?
|
||||
# Remove any Libtool call
|
||||
if test "$libtool" = yes; then
|
||||
while test $1 != '--mode=compile'; do
|
||||
shift
|
||||
done
|
||||
shift
|
||||
fi
|
||||
# X makedepend
|
||||
shift
|
||||
cleared=no
|
||||
for arg in "$@"; do
|
||||
case $cleared in
|
||||
no)
|
||||
set ""; shift
|
||||
cleared=yes ;;
|
||||
esac
|
||||
case "$arg" in
|
||||
-D*|-I*)
|
||||
set fnord "$@" "$arg"; shift ;;
|
||||
# Strip any option that makedepend may not understand. Remove
|
||||
# the object too, otherwise makedepend will parse it as a source file.
|
||||
-*|$object)
|
||||
;;
|
||||
*)
|
||||
set fnord "$@" "$arg"; shift ;;
|
||||
esac
|
||||
done
|
||||
obj_suffix="`echo $object | sed 's/^.*\././'`"
|
||||
touch "$tmpdepfile"
|
||||
${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
|
||||
rm -f "$depfile"
|
||||
cat < "$tmpdepfile" > "$depfile"
|
||||
sed '1,2d' "$tmpdepfile" | tr ' ' '
|
||||
' | \
|
||||
## Some versions of the HPUX 10.20 sed can't process this invocation
|
||||
## correctly. Breaking it into two sed invocations is a workaround.
|
||||
sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
|
||||
rm -f "$tmpdepfile" "$tmpdepfile".bak
|
||||
;;
|
||||
|
||||
cpp)
|
||||
# Important note: in order to support this mode, a compiler *must*
|
||||
# always write the preprocessed file to stdout.
|
||||
"$@" || exit $?
|
||||
|
||||
# Remove the call to Libtool.
|
||||
if test "$libtool" = yes; then
|
||||
while test $1 != '--mode=compile'; do
|
||||
shift
|
||||
done
|
||||
shift
|
||||
fi
|
||||
|
||||
# Remove `-o $object'.
|
||||
IFS=" "
|
||||
for arg
|
||||
do
|
||||
case $arg in
|
||||
-o)
|
||||
shift
|
||||
;;
|
||||
$object)
|
||||
shift
|
||||
;;
|
||||
*)
|
||||
set fnord "$@" "$arg"
|
||||
shift # fnord
|
||||
shift # $arg
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
"$@" -E |
|
||||
sed -n '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
|
||||
sed '$ s: \\$::' > "$tmpdepfile"
|
||||
rm -f "$depfile"
|
||||
echo "$object : \\" > "$depfile"
|
||||
cat < "$tmpdepfile" >> "$depfile"
|
||||
sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
|
||||
rm -f "$tmpdepfile"
|
||||
;;
|
||||
|
||||
msvisualcpp)
|
||||
# Important note: in order to support this mode, a compiler *must*
|
||||
# always write the preprocessed file to stdout, regardless of -o,
|
||||
# because we must use -o when running libtool.
|
||||
"$@" || exit $?
|
||||
IFS=" "
|
||||
for arg
|
||||
do
|
||||
case "$arg" in
|
||||
"-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
|
||||
set fnord "$@"
|
||||
shift
|
||||
shift
|
||||
;;
|
||||
*)
|
||||
set fnord "$@" "$arg"
|
||||
shift
|
||||
shift
|
||||
;;
|
||||
esac
|
||||
done
|
||||
"$@" -E |
|
||||
sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
|
||||
rm -f "$depfile"
|
||||
echo "$object : \\" > "$depfile"
|
||||
. "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile"
|
||||
echo " " >> "$depfile"
|
||||
. "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"
|
||||
rm -f "$tmpdepfile"
|
||||
;;
|
||||
|
||||
none)
|
||||
exec "$@"
|
||||
;;
|
||||
|
||||
*)
|
||||
echo "Unknown depmode $depmode" 1>&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
exit 0
|
||||
|
||||
# Local Variables:
|
||||
# mode: shell-script
|
||||
# sh-indentation: 2
|
||||
# eval: (add-hook 'write-file-hooks 'time-stamp)
|
||||
# time-stamp-start: "scriptversion="
|
||||
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
||||
# time-stamp-end: "$"
|
||||
# End:
|
316
ircd-ratbox-3.0.10/doc/CIDR.txt
Normal file
316
ircd-ratbox-3.0.10/doc/CIDR.txt
Normal file
@ -0,0 +1,316 @@
|
||||
$Id: CIDR.txt 23020 2006-09-01 18:20:19Z androsyn $
|
||||
|
||||
CIDR Information
|
||||
----------------
|
||||
Presently, we all use IPv4. The format of IPv4 is the following:
|
||||
|
||||
A.B.C.D
|
||||
|
||||
Where letters 'A' through 'D' are 8-bit values. In English, this
|
||||
means each digit can have a value of 0 to 255. Example:
|
||||
|
||||
129.56.4.234
|
||||
|
||||
Digits are called octets. Oct meaning 8, hence 8-bit values. An
|
||||
octet cannot be greater than 255, and cannot be less than 0 (eg. a
|
||||
negative number).
|
||||
|
||||
CIDR stands for "classless inter domain routing", details covered
|
||||
in RFC's 1518 and 1519. It was introduced mainly due to waste within
|
||||
A and B classes space. The goal was to make it possible to use
|
||||
smaller nets than it would seem from (above) IP classes, for instance
|
||||
by dividing one B class into 256 "C like" classes. The other goal was
|
||||
to allow aggregation of routing information, so that routers could use
|
||||
one aggregated route (like 194.145.96.0/20) instead of
|
||||
advertising 16 C classes.
|
||||
|
||||
Class A are all these addresses which first bit is "0",
|
||||
bitmap: 0nnnnnnn.hhhhhhhh.hhhhhhhh.hhhhhhhh (n=net, h=host)
|
||||
IP range is 0.0.0.0 - 127.255.255.255
|
||||
|
||||
Class B are all these addresses which first two bits are "10",
|
||||
bitmap: 10nnnnnn.nnnnnnnn.hhhhhhhh.hhhhhhhh (n=net, h=host)
|
||||
IP range is 128.0.0.0 - 191.255.255.255
|
||||
|
||||
Class C are all these addresses which first three bits are "110",
|
||||
bitmap: 110nnnnn.nnnnnnnn.nnnnnnnn.hhhhhhhh (n=net, h=host)
|
||||
IP range is 192.0.0.0 - 223.255.255.255
|
||||
|
||||
Class D are all these addresses which first four bits are "1110",
|
||||
this is multicast class and net/host bitmap doesn't apply here
|
||||
IP range is 224.0.0.0 - 239.255.255.255
|
||||
I bet they will never IRC, unless someone creates multicast IRC :)
|
||||
|
||||
Class E are all these addresses which first five bits are "11110",
|
||||
this class is reserved for future use
|
||||
IP range is 240.0.0.0 - 247.255.255.255
|
||||
|
||||
So, here is how CIDR notation comes into play.
|
||||
|
||||
For those of you who have real basic exposure to how networks are
|
||||
set up, you should be aware of the term "netmask." Basically, this
|
||||
is a IPv4 value which specifies the "size" of a network. You can
|
||||
assume the word "size" means "range" if you want.
|
||||
|
||||
A chart describing the different classes in CIDR format and their
|
||||
wildcard equivalents would probably help at this point:
|
||||
|
||||
CIDR version dot notation (netmask) Wildcard equivalent
|
||||
-----------------------------------------------------------------
|
||||
A.0.0.0/8 A.0.0.0/255.0.0.0 A.*.*.* or A.*
|
||||
A.B.0.0/16 A.B.0.0/255.255.0.0 A.B.*.* or A.B.*
|
||||
A.B.C.0/24 A.B.C.0/255.255.255.0 A.B.C.* or A.B.C.*
|
||||
A.B.C.D/32 A.B.C.D/255.255.255.255 A.B.C.D
|
||||
|
||||
|
||||
The question on any newbies mind at this point is "So what do all
|
||||
of those values & numbers actually mean?"
|
||||
|
||||
Everything relating to computers is based on binary values (1s and
|
||||
zeros). Binary plays a *tremendous* role in CIDR notation. Let's
|
||||
break it down to the following table:
|
||||
|
||||
A B C D
|
||||
-------- -------- -------- --------
|
||||
/8 == 11111111 . 00000000 . 00000000 . 00000000 == 255.0.0.0
|
||||
/16 == 11111111 . 11111111 . 00000000 . 00000000 == 255.255.0.0
|
||||
/24 == 11111111 . 11111111 . 11111111 . 00000000 == 255.255.255.0
|
||||
/32 == 11111111 . 11111111 . 11111111 . 11111111 == 255.255.255.255
|
||||
|
||||
The above is basically a binary table for the most common netblock
|
||||
sizes. The "1"s you see above are the 8-bit values for each octet.
|
||||
If you split an 8-bit value into each of it's bits, you find the
|
||||
following:
|
||||
|
||||
00000000
|
||||
^^^^^^^^_ 1sts place (1)
|
||||
|||||||__ 2nds place (2)
|
||||
||||||___ 3rds place (4)
|
||||
|||||____ 4ths place (8)
|
||||
||||_____ 5ths place (16)
|
||||
|||______ 6ths place (32)
|
||||
||_______ 7ths place (64)
|
||||
|________ 8ths place (128)
|
||||
|
||||
Now, since computers consider zero a number, you pretty much have
|
||||
to subtract one (so-to-speak; this is not really how its done, but
|
||||
just assume it's -1 :-) ) from all the values possible. Some
|
||||
examples of decimal values in binary:
|
||||
|
||||
15 == 00001111 (from left to right: 8+4+2+1)
|
||||
16 == 00010000 (from left to right: 16)
|
||||
53 == 00110101 (from left to right: 32+16+4+1)
|
||||
79 == 01001111 (from left to right: 64+8+4+1)
|
||||
254 == 11111110 (from left to right: 128+64+32+16+8+4+2)
|
||||
|
||||
So, with 8 bits, the range (as I said before) is zero to 255.
|
||||
|
||||
If none of this is making sense to you at this point, you should
|
||||
back up and re-read all of the above. I realize it's a lot, but
|
||||
it'll do you some good to re-read it until you understand :-).
|
||||
|
||||
So, let's modify the original table a bit by providing CIDR info
|
||||
for /1 through /8:
|
||||
|
||||
A B C D
|
||||
-------- -------- -------- --------
|
||||
/1 == 10000000 . 00000000 . 00000000 . 00000000 == 128.0.0.0
|
||||
/2 == 11000000 . 00000000 . 00000000 . 00000000 == 192.0.0.0
|
||||
/3 == 11100000 . 00000000 . 00000000 . 00000000 == 224.0.0.0
|
||||
/4 == 11110000 . 00000000 . 00000000 . 00000000 == 240.0.0.0
|
||||
/5 == 11111000 . 00000000 . 00000000 . 00000000 == 248.0.0.0
|
||||
/6 == 11111100 . 00000000 . 00000000 . 00000000 == 252.0.0.0
|
||||
/7 == 11111110 . 00000000 . 00000000 . 00000000 == 254.0.0.0
|
||||
/8 == 11111111 . 00000000 . 00000000 . 00000000 == 255.0.0.0
|
||||
|
||||
At this point, all of this should making a lot of sense, and you
|
||||
should be able to see the precision that you can get by using CIDR
|
||||
at this point. If not, well, I guess the best way to put it would
|
||||
be that wildcards always assume /8, /16, or /24 (yes hello Piotr,
|
||||
we can argue this later: I am referring to IPs *ONLY*, not domains
|
||||
or FQDNs :-) ).
|
||||
|
||||
This table will provide a reference to all of the IPv4 CIDR values
|
||||
|
||||
cidr|netmask (dot notation)
|
||||
----+---------------------
|
||||
/1 | 128.0.0.0
|
||||
/2 | 192.0.0.0
|
||||
/3 | 224.0.0.0
|
||||
/4 | 240.0.0.0
|
||||
/5 | 248.0.0.0
|
||||
/6 | 252.0.0.0
|
||||
/7 | 254.0.0.0
|
||||
/8 | 255.0.0.0
|
||||
/9 | 255.128.0.0
|
||||
/10 | 255.192.0.0
|
||||
/11 | 255.224.0.0
|
||||
/12 | 255.240.0.0
|
||||
/13 | 255.248.0.0
|
||||
/14 | 255.252.0.0
|
||||
/15 | 255.254.0.0
|
||||
/16 | 255.255.0.0
|
||||
/17 | 255.255.128.0
|
||||
/18 | 255.255.192.0
|
||||
/19 | 255.255.224.0
|
||||
/20 | 255.255.240.0
|
||||
/21 | 255.255.248.0
|
||||
/22 | 255.255.252.0
|
||||
/23 | 255.255.254.0
|
||||
/24 | 255.255.255.0
|
||||
/25 | 255.255.255.128
|
||||
/26 | 255.255.255.192
|
||||
/27 | 255.255.255.224
|
||||
/28 | 255.255.255.240
|
||||
/29 | 255.255.255.248
|
||||
/30 | 255.255.255.252
|
||||
/31 | 255.255.255.254
|
||||
/32 | 255.255.255.255
|
||||
|
||||
So, let's take all of the information above, and apply it to a
|
||||
present-day situation on IRC.
|
||||
|
||||
Let's say you have a set of flooding clients who all show up from
|
||||
the following hosts. For lack-of a better example, I'll use a
|
||||
subnet here at Best:
|
||||
|
||||
nick1 (xyz@shell9.ba.best.com) [206.184.139.140]
|
||||
nick2 (abc@shell8.ba.best.com) [206.184.139.139]
|
||||
nick3 (foo@shell12.ba.best.com) [206.184.139.143]
|
||||
|
||||
Most people will assume the they were all in the same class C
|
||||
(206.184.139.0/24 or 206.184.139.*).
|
||||
|
||||
This, as a matter of fact, is not true. Now, the reason *I* know
|
||||
this is solely because I work on the network here; those IPs are
|
||||
not delegated to a class C, but two portions of a class C (128 IPs
|
||||
each). That means the class C is actually split into these two
|
||||
portions:
|
||||
|
||||
Netblock IP range
|
||||
-------- --------
|
||||
206.184.139.0/25 206.184.139.0 to 206.184.139.127
|
||||
206.184.139.128/25 206.184.139.128 to 206.184.139.255
|
||||
|
||||
For the record, 206.184.139.0 and 206.184.139.128 are both known as
|
||||
"network addresses" (not to be confused with "netblocks" or "Ethernet
|
||||
hardware addresses" or "MAC addresses"). Network addresses are
|
||||
*ALWAYS EVEN*.
|
||||
|
||||
206.184.139.127 and 206.184.139.255 are what are known as broadcast
|
||||
addresses. Broadcast addresses are *ALWAYS ODD*.
|
||||
|
||||
Now, the aforementioned list of clients are in the 2nd subnet shown
|
||||
above, not the first. The reason for this should be obvious.
|
||||
|
||||
The remaining question is, "Well that's nice, you know what the netblock
|
||||
is for Best. What about us? We don't know that!"
|
||||
|
||||
Believe it or not, you can find out the network block size by using
|
||||
whois -h WHOIS.ARIN.NET on the IP in question. ARIN keeps a list of
|
||||
all network blocks and who owns them -- quite useful, trust me. I
|
||||
think I use ARIN 5 or 6 times a day, especially when dealing with
|
||||
D-lines. Example:
|
||||
|
||||
$ whois -h whois.arin.net 206.184.139.140
|
||||
Best Internet Communications, Inc. (NETBLK-NBN-206-184-BEST)
|
||||
345 East Middlefield Road
|
||||
Mountain View, CA 94043
|
||||
|
||||
Netname: NBN-206-184-BEST
|
||||
Netblock: 206.184.0.0 - 206.184.255.255
|
||||
Maintainer: BEST
|
||||
|
||||
Does this mean you should D-line 206.184.0.0/16? Probably not.
|
||||
That's an entire class B-sized block, while you're only trying
|
||||
to deny access to a subnetted class C.
|
||||
|
||||
So then how do you get the *real* info? Well, truth is, you don't.
|
||||
You have to pretty much take a guess at what it is, if ARIN reports
|
||||
something that's overly vague. Best, for example, was assigned the
|
||||
above class B-sized block. We can subnet it however we want without
|
||||
reporting back to ARIN how we have it subnetted. We own the block,
|
||||
and that's all that matters (to ARIN).
|
||||
|
||||
Not all subnets are like this, however. Smaller subnets you may
|
||||
find partitioned and listed on ARIN; I've seen /29 blocks for DSL
|
||||
customers show up in ARIN before.
|
||||
|
||||
So, use ARIN any chance you get. The more precision the better!
|
||||
|
||||
Now, there is a small issue I want to address regarding use of CIDR
|
||||
notation. Let's say you D-line the following in CIDR format (hi
|
||||
sion ;-) ):
|
||||
|
||||
205.100.132.18/24
|
||||
|
||||
Entries like this really makes my blood boil, solely because it adds
|
||||
excessive confusion and is just basically pointless. If you
|
||||
examine the above, you'll see the /24 is specifying an entire
|
||||
class C -- so then what's the purpose of using .18 versus .0?
|
||||
|
||||
There IS no purpose. The netmask itself will mask out the .18 and
|
||||
continue to successfully use 205.100.132.0/24.
|
||||
|
||||
Doing things this way just adds confusion, especially on non-octet-
|
||||
aligned subnets (such as /8, /16, /24, or /32). Seeing that on a
|
||||
/27 or a /19 might make people go "wtf?"
|
||||
|
||||
I know for a fact this doc lacks a lot of necessary information,
|
||||
like how the actual netmask/CIDR value play a role in "masking out"
|
||||
the correct size, and what to do is WHOIS.ARIN.NET returns no
|
||||
netblock information but instead a few different company names with
|
||||
NIC handles. I'm sure you can figure this stuff out on your own,
|
||||
or just ask an administrator friend of yours who DOES know. A lot
|
||||
of us admins are BOFH types, but if you ask us the right questions,
|
||||
you'll benefit from the answer quite thoroughly.
|
||||
|
||||
Oh, I almost forgot. Most Linux systems use a different version of
|
||||
"whois" than FreeBSD does. The syntax for whois on Linux is
|
||||
"whois <INFO>@whois.arin.net", while under FreeBSD it is
|
||||
"whois -h whois.arin.net <INFO>" Debian uses yet another version
|
||||
of whois that is incompatible with the above syntax options.
|
||||
|
||||
Note that the FreeBSD whois client has shortcuts for the most commonly
|
||||
used whois servers. "whois -a <INFO>" is the shortcut for ARIN.
|
||||
|
||||
Also note that ARIN is not authoritative for all IP blocks on the
|
||||
Internet. Take for example 212.158.123.66. A whois query to ARIN
|
||||
will return the following information:
|
||||
|
||||
$ whois -h whois.arin.net 212.158.123.66
|
||||
European Regional Internet Registry/RIPE NCC (NET-RIPE-NCC-)
|
||||
These addresses have been further assigned to European users.
|
||||
Contact information can be found in the RIPE database, via the
|
||||
WHOIS and TELNET servers at whois.ripe.net, and at
|
||||
http://www.ripe.net/db/whois.html
|
||||
|
||||
Netname: RIPE-NCC-212
|
||||
Netblock: 212.0.0.0 - 212.255.255.255
|
||||
Maintainer: RIPE
|
||||
|
||||
This query tells us that it is a European IP block, and is further
|
||||
handled by RIPE's whois server. We must then query whois.ripe.net
|
||||
to get more information.
|
||||
|
||||
$ whois -h whois.ripe.net 212.158.123.66
|
||||
|
||||
% Rights restricted by copyright. See
|
||||
http://www.ripe.net/ripencc/pub-services/db/copyright.html
|
||||
|
||||
inetnum: 212.158.120.0 - 212.158.123.255
|
||||
netname: INSNET-P2P
|
||||
descr: Point to Point Links for for London Nodes
|
||||
country: GB
|
||||
--snip--
|
||||
|
||||
This tells us the actual IP block that the query was a part of.
|
||||
|
||||
Other whois servers that you may see blocks referred to are:
|
||||
whois.ripn.net for Russia, whois.apnic.net for Asia, Australia, and
|
||||
the Pacific, and whois.6bone.net for IPv6 blocks.
|
||||
|
||||
Contributed by Jeremy Chadwick <jdc@best.net>
|
||||
Piotr Kucharski <chopin@sgh.waw.pl>
|
||||
W. Campbell <wcampbel@botbay.net> and
|
||||
Ariel Biener <ariel@fireball.tau.ac.il>
|
58
ircd-ratbox-3.0.10/doc/Hybrid-team
Normal file
58
ircd-ratbox-3.0.10/doc/Hybrid-team
Normal file
@ -0,0 +1,58 @@
|
||||
$Id: Hybrid-team 23287 2006-11-26 00:54:54Z jilles $
|
||||
|
||||
The hybrid team is a group of ircd coders who were frustrated
|
||||
with the instability and all-out "dirtiness" of the EFnet ircd's
|
||||
available. "hybrid" is the name for the collective efforts of a group
|
||||
of people, all of us.
|
||||
|
||||
Anyone is welcome to contribute to this effort. You are encouraged
|
||||
to participate in the Hybrid mailing list. To subscribe to the
|
||||
Hybrid List, send email to listmanager@the-project.org with the
|
||||
subject "subscribe hybrid".
|
||||
|
||||
The core team as, of this major release:
|
||||
|
||||
A1kmm, Andrew Miller <a1kmm@mware.virtualave.net>
|
||||
adrian, Adrian Chadd <adrian@creative.net.au>
|
||||
AndroSyn, Aaron Sethman <androsyn@ratbox.org>
|
||||
billy-jon, Bill Jonus <bill@mu.org>
|
||||
cosine, Patrick Alken <wnder@uwns.underworld.net>
|
||||
David-T, David Taylor <davidt@yadt.co.uk>
|
||||
Dianora, Diane Bruce <db@db.net>
|
||||
einride, Erik S. Johansen, <einride@einride.org>
|
||||
fl, Lee Hardy <lee@leeh.co.uk>
|
||||
Hwy101, W. Campbell <wcampbel@botbay.net>
|
||||
larne, Edward Brocklesby <ejb@sdf.lonestar.org>
|
||||
isomer, Perry Lorier <perry@coders.net>
|
||||
jmallett, Juli Mallett <jmallett@FreeBSD.org>
|
||||
k9, Jeremy Chadwick <yoshi@parodius.com>
|
||||
Rodder, Jon Lusky <lusky@blown.net>
|
||||
toot, Toby Verrall <to7@antipope.fsnet.co.uk>
|
||||
Wohali, Joan Touzet <joant@ieee.org>
|
||||
xyst, Greg Prosser <gnp@arrogant.org>
|
||||
|
||||
The following people have contributed blood, sweat, and/or code to
|
||||
this release of hybrid, in nick alphabetical order:
|
||||
|
||||
adx, Piotr Nizynski <adx@crashnet.pl>
|
||||
bysin, Ben Kittridge <bkittridge@cfl.rr.com>
|
||||
desrt, Ryan Lortie <desertangel@mindless.com>
|
||||
Habeeb, David Supuran <habeeb@cfl.rr.com>
|
||||
jv, Jakub Vlasek <jv@pilsedu.cz>
|
||||
kre, Dinko Korunic <kreator@fly.srk.fer.hr>
|
||||
madmax, Paul Lomax <madmax@efnet.org>
|
||||
Neph|l|m, Adel Mezibra <adel@cybercable.fr>
|
||||
Riedel, Dennis Vink, <vink@vuurwerk.nl>
|
||||
Robert Alan Byer <byer@mail.ourservers.net>
|
||||
scuzzy, David Todd <scuzzy@aniverse.net>
|
||||
spookey, David Colburn <spookey@spookey.org>
|
||||
vulture, Sean Stanek <vulture@cs.iastate.edu>
|
||||
vx0, Mark Miller <mark@oc768.net>
|
||||
zb^3, Alfred Perlstein <alfred@freebsd.org>
|
||||
|
||||
Others are welcome. Always. And if we left anyone off the above list,
|
||||
be sure to let us know that too. Many others have contributed to
|
||||
previous versions of this ircd and it's ancestors, too many to list
|
||||
here.
|
||||
|
||||
Send bug fixes/complaints/rotten tomatoes to ircd-hybrid@the-project.org.
|
58
ircd-ratbox-3.0.10/doc/Makefile.in
Normal file
58
ircd-ratbox-3.0.10/doc/Makefile.in
Normal file
@ -0,0 +1,58 @@
|
||||
# $Id: Makefile.in 26636 2009-07-28 15:01:11Z androsyn $
|
||||
CC = @CC@
|
||||
INSTALL = @INSTALL@
|
||||
INSTALL_BIN = @INSTALL_PROGRAM@
|
||||
INSTALL_DATA = @INSTALL_DATA@
|
||||
INSTALL_SUID = @INSTALL_PROGRAM@ -o root -m 4755
|
||||
MV = @MV@
|
||||
RM = @RB_RM@
|
||||
CP = @CP@
|
||||
TOUCH = @TOUCH@
|
||||
|
||||
prefix = @prefix@
|
||||
exec_prefix = @exec_prefix@
|
||||
exec_suffix = @exec_suffix@
|
||||
bindir = @bindir@
|
||||
libexecdir = @libexecdir@
|
||||
confdir = @confdir@
|
||||
localstatedir = @localstatedir@
|
||||
|
||||
CONFS = example.conf example.efnet.conf
|
||||
|
||||
install-mkdirs:
|
||||
-@if test ! -d $(DESTDIR)$(confdir); then \
|
||||
echo "mkdir -p $(confdir)"; \
|
||||
mkdir $(DESTDIR)$(confdir); \
|
||||
fi
|
||||
|
||||
install: install-mkdirs build
|
||||
@echo "ircd: installing example config files ($(CONFS))"
|
||||
@for i in $(CONFS); do \
|
||||
if test -f $(DESTDIR)$(confdir)/$$i; then \
|
||||
$(MV) $(DESTDIR)$(confdir)/$$i $(DESTDIR)$(confdir)/$$i.old; \
|
||||
fi; \
|
||||
$(INSTALL_DATA) $$i $(DESTDIR)$(confdir); \
|
||||
done
|
||||
|
||||
-@if test ! -f $(DESTDIR)$(confdir)/ircd.motd; then \
|
||||
echo "ircd: installing motd file (ircd.motd)"; \
|
||||
$(INSTALL_DATA) ircd.motd $(DESTDIR)$(confdir); \
|
||||
fi
|
||||
|
||||
$(INSTALL_BIN) genssl.sh $(DESTDIR)$(confdir)
|
||||
|
||||
-@if test -f $(DESTDIR)$(confdir)/links.txt; then \
|
||||
$(RM) $(DESTDIR)$(confdir)/links.txt; \
|
||||
fi
|
||||
|
||||
all:
|
||||
build:
|
||||
|
||||
clean:
|
||||
|
||||
depend:
|
||||
|
||||
lint:
|
||||
|
||||
distclean:
|
||||
$(RM) -f Makefile
|
17
ircd-ratbox-3.0.10/doc/README.cidr_bans
Normal file
17
ircd-ratbox-3.0.10/doc/README.cidr_bans
Normal file
@ -0,0 +1,17 @@
|
||||
$Id: README.cidr_bans 23020 2006-09-01 18:20:19Z androsyn $
|
||||
|
||||
|
||||
Basically what this patch does is allow for users to use cidr masks when
|
||||
setting bans, exceptions, and invite invex(modes beI respectively). This
|
||||
works for both IPv4 and IPv6 addresses.
|
||||
|
||||
I won't go into details of how cidr works here, but to use them, you could
|
||||
do something like:
|
||||
|
||||
/mode #foo +b *!*@10.0.0.0/8
|
||||
/mode #foo +e *!*@10.0.10.0/24
|
||||
|
||||
Aaron Sethman <androsyn@ratbox.org>
|
||||
August 06, 2002
|
||||
|
||||
|
272
ircd-ratbox-3.0.10/doc/Tao-of-IRC.940110
Normal file
272
ircd-ratbox-3.0.10/doc/Tao-of-IRC.940110
Normal file
@ -0,0 +1,272 @@
|
||||
|
||||
The Tao of Internet Relay Chat
|
||||
Copyright (C) Ove Ruben R Olsen 1994
|
||||
Version of 940110
|
||||
Contributing masters: Master ScottM
|
||||
|
||||
-----
|
||||
Something is formed by the electrons, born in the silent cable. Shaping
|
||||
and growing and ungrowing. It is there yet not there. It is the source of
|
||||
Internet Relay Chat. I do not know the name, thus I will call it the Tao
|
||||
of Internet Relay Chat.
|
||||
|
||||
If the Tao is great, then the IRC is running ceaselessly. If the IRC is
|
||||
great then the server is running without ever stoping. If the server is
|
||||
great then the client will always be the server. The luser is then pleased
|
||||
and there is Chat in the world.
|
||||
|
||||
The Tao of IRC squits far away and connects on returning.
|
||||
|
||||
|
||||
-----
|
||||
The genetic potential of birth, a lot to know, yet unknown.
|
||||
|
||||
In the begining there was nothing.
|
||||
|
||||
Out of nothing the Tao gave birth to tolsun.oulu.fi. tolsun gave birth to
|
||||
OuluBox.
|
||||
|
||||
OuluBox gave birth to rmsg.
|
||||
|
||||
rmsg was not Tao, so MUT gave birth to IRC.
|
||||
|
||||
No one knows when IRC came into existance, the mighty master WiZ have it
|
||||
to be at the end of the eight month in the year of the Dragon.
|
||||
|
||||
|
||||
-----
|
||||
Each channel has its purpose, however humble. Each channel is the Yin and
|
||||
Yang of IRC. Each channels has it's place within the IRC.
|
||||
|
||||
In the beginning there was only channel 0, thus channel 0 is the soil of
|
||||
IRC.
|
||||
|
||||
Channel 1 to channel 10 then was open as the sea. Channel 11 to 999 was the
|
||||
trees and forests of IRC. Channels above 999 should not be mentioned, and
|
||||
channels below 0 were unborn and contained many secrets.
|
||||
|
||||
This was not the right Tao, so IRC gave birth to +channels.
|
||||
|
||||
+channels had the yin and yang. Mode does not.
|
||||
|
||||
This was not the right Tao still, so IRC gave birth to #channels.
|
||||
|
||||
#channels have the yin and yang.
|
||||
|
||||
Only channel 0 is the right path to Tao, but avoid speaking on channel 0.
|
||||
|
||||
|
||||
-----
|
||||
There was a great dispute among the Broom-Walkers of the Relay. Some of them
|
||||
wanted neither yin nor yang. Out of this Eris came into existance. Some of the
|
||||
Broom-Walkers then created Eris Free-net.
|
||||
|
||||
This was the right Tao.
|
||||
|
||||
Kind Gentle and Boring Net was another wrong path to the Tao of Internet Relay
|
||||
Chat.
|
||||
|
||||
Some time later there was a quantity of some lusers who wanted to be
|
||||
Broom-Walkers also. The Eris Free Broom-Walkers did not agree with them,
|
||||
thus a new IRC was born. This IRC is called the Undernet.
|
||||
|
||||
But this is not the right Tao, either.
|
||||
|
||||
|
||||
-----
|
||||
There will always be disputes among the Broom-Walkers of Internet Relay Chat.
|
||||
|
||||
This is the very nature of the IRC.
|
||||
|
||||
|
||||
-----
|
||||
Lusers that do not understand the Tao is always using the yang of Mode on
|
||||
their channels. Lusers that do understand the Tao are always using Ignore
|
||||
on their channels.
|
||||
|
||||
How could this not be so ?
|
||||
|
||||
|
||||
-----
|
||||
The wise sage luser is told about the Chat and uses it. The luser is told
|
||||
about the IRC and is looking for it. The flock are told about the Tao and
|
||||
make a fool of the IRC.
|
||||
|
||||
If there was no laughter, there would be no Tao.
|
||||
|
||||
|
||||
-----
|
||||
The master says:
|
||||
"Without the Tao of Internet Relay Chat, life becomes meaningless."
|
||||
|
||||
The Relay of the old time was mysterious and sacred. We can neither imagine
|
||||
its thoughts nor path; we are left but to describe.
|
||||
|
||||
|
||||
-----
|
||||
The sage luser must be aware like a frog crossing the highway.
|
||||
|
||||
|
||||
-----
|
||||
The great master Wumpus once dreamed that he was an automaton. When he awoke
|
||||
he exclaimed:
|
||||
"I don't know whether I am Wumpus dreaming that I am a client,
|
||||
or a client dreaming that I am Wumpus!"
|
||||
|
||||
So was the first Automata born.
|
||||
|
||||
The master Nap then said:
|
||||
"Any automata should not speak unless spoken to.
|
||||
Any automata shall only whisper when spoken to."
|
||||
|
||||
Thus replied the master Gnarfer:
|
||||
"The lusers shall keep in mind that a automata can be either good or
|
||||
bad. Create good automata, and the IRC will hail you and you will
|
||||
gain fame and fortune. Create bad automata and people will start to
|
||||
hate you, and finaly you will be /KILLed to ethernal damnation"
|
||||
|
||||
Many lusers have fallen into the clutches of ethernal damnation. They where
|
||||
not following the Tao.
|
||||
|
||||
|
||||
-----
|
||||
There once was a luser who went to #BotSex. Each day he saw the automatons.
|
||||
The luser decided that he also would have such a automata.
|
||||
He asked another luser for his automata. The other luser gave his automata
|
||||
away.
|
||||
|
||||
The luser was not within the Tao, so he just started the automata. The automata
|
||||
had only Yang inside so all the lusers files where deleted.
|
||||
|
||||
Some moons laither the same luser then had become a sage luser, and did create
|
||||
his automata from the very grounds with materials found inside the IRC.
|
||||
The luser was now within the Tao and his automata lived happily ever after.
|
||||
|
||||
|
||||
-----
|
||||
There once was a master who wrote automatons without the help of master Phone.
|
||||
A novice luser, seeking to imitate him, began with the help of master Phone.
|
||||
When the novice luser asked the master to evaluate his automata the master
|
||||
replied: "What is a working automata for the master is not for the luser.
|
||||
You must must BE the IRC before automating."
|
||||
|
||||
|
||||
-----
|
||||
Master BigCheese gave birth to master Troy; his duty clear. Master Troy gave
|
||||
birth to master Phone, for the Tao of Irc must be eternal and must flow as the
|
||||
ceaseless river of Time itself.
|
||||
|
||||
|
||||
-----
|
||||
Master Phone once said about the ircII client:
|
||||
"public_msg is for a message from someone NOT on the channel
|
||||
public_other is for a message on a channel that doesn't belong to
|
||||
a window. public is for a message on a channel that belongs to a
|
||||
window!"
|
||||
|
||||
Out of this raised the mighty chaos.
|
||||
|
||||
|
||||
-----
|
||||
The sage luser came to the master who wrote automata without the help of
|
||||
master Phone. The sage luser asked the master who wrote automata: "Which is
|
||||
easiest to make. A automata with the help of master Phone or an automata
|
||||
made with the help of a language ?"
|
||||
|
||||
The master who wrote automata then replied:
|
||||
"With the help of a language."
|
||||
|
||||
The sage luser was disapointed and exclaimed: "But, with master Phone you
|
||||
do not need to know anything about the soil of IRC. Is not that the easiet
|
||||
way ?"
|
||||
|
||||
"Not really" said the master who wrote automata, "when using master Phone
|
||||
you are closed inside a box. For sure, it is a great box for the lusers,
|
||||
but the master will need more power, thus a language is the only path to go.
|
||||
With the language the master will never have to limit himself. When using
|
||||
such a language the master will seek the best between the need and the
|
||||
availibility."
|
||||
|
||||
"I see", said the sage luser.
|
||||
|
||||
This is the essence of Tao of IRC automatas.
|
||||
|
||||
|
||||
-----
|
||||
A client should be light and be used for communication. The spirit of a good
|
||||
client is that it should be very convinient for the luser to use, but hard
|
||||
for the luser who want to create automata.
|
||||
There should never ever be too many functions or too few functions.
|
||||
|
||||
There should always be a ignore.
|
||||
|
||||
Without ignore the client is not within the Tao of Chating.
|
||||
|
||||
The client should always respond the luser with messages that will not
|
||||
astnonish him too much. The server likewise. If the server does not, then it
|
||||
is the clients job to explain what the server says.
|
||||
|
||||
A client which fails this, will be useless and cause confusion for the lusers.
|
||||
The only way to correct this is to use another client or to write a new one.
|
||||
|
||||
|
||||
-----
|
||||
A luser asked the masters on #IrcHelp: "My client does not work".
|
||||
The masters replied: "Upgrade your client".
|
||||
The luser then wondered why the master knew. The master then told him about
|
||||
the Protocol.
|
||||
|
||||
"Your client does not work beaucse it does not understand the server. Why
|
||||
should it always work ? Only a fool would expect such. But, clients are made
|
||||
by humans, and humans are not perfect. Only Tao is.
|
||||
|
||||
The IRC is solid. The IRC is floating, and will always be dynamic. Live with
|
||||
that or /quit."
|
||||
|
||||
|
||||
-----
|
||||
The luser came to the masters of #IrcHelp, asking about the Tao of IRC within
|
||||
the client.
|
||||
The masters then said that the Tao of IRC always lies inside the client
|
||||
regardless of how the client connects to the server.
|
||||
|
||||
"Is the Tao in irc ?" asked the luser.
|
||||
"It so is" replied the masters of #IrcHelp.
|
||||
"Is the Tao in the ircII, Kiwi, rxirc, vms, rockers and msa ?" asked the
|
||||
luser.
|
||||
"In all of them and in the TPC, irchat, zenirc, zircon X11-irc and even the
|
||||
dos irc has the Tao" said the master quietly.
|
||||
"Is the Tao in a telnet connection directly to the server ?"
|
||||
|
||||
The master then was quiet for a long time and said. "Please leave, such
|
||||
questions are not within the Tao of IRC".
|
||||
|
||||
|
||||
-----
|
||||
The master says: "Without the Protocol of TCP the messages will not travel.
|
||||
Without the client, the server is useless."
|
||||
|
||||
|
||||
-----
|
||||
There once was a luser who used the ircII client. "ircII can do anything I
|
||||
ever need for using IRC" said the emacs client user, "I have /ON's, I have
|
||||
assignments, I have aliasing. Why don't you use this instead of the huge
|
||||
emacs client, which also has a messy screen?"
|
||||
The emacs client user then replied by saying that "it is better to have a
|
||||
scripting language that is the client instead of have a client that has
|
||||
a scripting language." Upon hearing this, the ircII client luser fell silent.
|
||||
|
||||
|
||||
-----
|
||||
The master Wumpus said: "Time for you to leave. I did, now I'm happy."
|
||||
The master Gnarfer replied: "Use, but never overuse IRC, then you will also
|
||||
be happy within IRC"
|
||||
|
||||
|
||||
-----
|
||||
A luser came unto the masters of #EU-Opers and asked, "How can I be, yet not
|
||||
be, a user@host within the IRC?"
|
||||
The masters of #EU-Opers replied: "To be Tao is to be ones true self. To hide
|
||||
ones self is not Tao, and is not IRC, you have much to learn before you shall
|
||||
be at rest within the Flow of Irc. Please leave"
|
||||
|
86
ircd-ratbox-3.0.10/doc/challenge.txt
Normal file
86
ircd-ratbox-3.0.10/doc/challenge.txt
Normal file
@ -0,0 +1,86 @@
|
||||
------------------------------------------------------
|
||||
- Oper Challenge/Response System Documentation -
|
||||
- Copyright (C) 2006 Lee Hardy <lee -at- leeh.co.uk> -
|
||||
- Copyright (C) 2006-2012 ircd-ratbox development team -
|
||||
------------------------------------------------------
|
||||
|
||||
The challenge/response system allows the ability to oper though public key
|
||||
authentication, without the insecurity of oper passwords.
|
||||
|
||||
The challenge system documented here was redesigned in ircd-ratbox-2.2 and
|
||||
is not compatible with earlier versions.
|
||||
|
||||
This document does not describe the technical details of the challenge
|
||||
system. If you are reading this as part of the ircd distribution, the
|
||||
programs referred to are contained in ratbox-respond, see
|
||||
http://respond.ircd-ratbox.org for more information and downloads.
|
||||
|
||||
|
||||
- Challenge basics -
|
||||
--------------------
|
||||
When a user requests a challenge to oper up, the ircd takes some random
|
||||
data, encodes it using the opers public key, encodes this output in base64
|
||||
and sends it to the user as a challenge. The server then stores a hash of
|
||||
the original random data.
|
||||
|
||||
The user must then decrypt the data using their private key and generate a
|
||||
hash of the decrypted data. Then the hash is base64 encoded and sent back
|
||||
to the server.
|
||||
|
||||
If the stored hash the server has matches the reply from the client, they
|
||||
are opered up.
|
||||
|
||||
|
||||
- Generating a public/private keypair -
|
||||
---------------------------------------
|
||||
The first step is to use the makekeypair script to generate a public and
|
||||
private key. The public key is set in the ircd config (operator {};
|
||||
rsa_public_key_file) instead of a password, and the private key should
|
||||
be kept secret. It is highly recommended that the key is generated with
|
||||
a secure password. Generating keys without a password is fundamentally
|
||||
insecure.
|
||||
|
||||
|
||||
The commands used in makekeypair to generate keys are as follows:
|
||||
openssl genrsa -out private.key -aes256 2048
|
||||
openssl rsa -in private.key -out public.key -pubout
|
||||
|
||||
If aes256 is not available, the following is used instead:
|
||||
openssl genrsa -out private.key -des3 2048
|
||||
|
||||
|
||||
- Building ratbox-respond -
|
||||
---------------------------
|
||||
If you are using the unix based ratbox-respond this must be built. For the
|
||||
windows version, ratbox-winrespond, please see http://respond.ircd-ratbox.org
|
||||
|
||||
ratbox-respond takes the challenge from the server, and together with your
|
||||
private key file generates a response to be sent back. ratbox-respond
|
||||
requires the openssl headers (ie, development files) and openssl libraries
|
||||
are installed for compilation.
|
||||
|
||||
Change into the ratbox-respond directory, and run:
|
||||
./configure
|
||||
make
|
||||
|
||||
This will generate a 'ratbox-respond' binary, which you may place wherever
|
||||
you like. If configure does not detect your openssl installation, you may
|
||||
pass it the directory where it is installed to via --enable-openssl, this
|
||||
should be the base directory which has lib/ and include/openssl/ within it:
|
||||
./configure --enable-openssl=/path/to/opensslbase
|
||||
|
||||
|
||||
- Opering up -
|
||||
--------------
|
||||
Once you have your public key set in ircd and built ratbox-respond, you oper
|
||||
up by issuing "/challenge <opername>". You should then run:
|
||||
/path/to/ratbox-respond /path/to/private.key
|
||||
and input the challenge. This will give you a response to paste back to the
|
||||
server. The ratbox-respond binary also accepts piped input, see
|
||||
ratbox-respond/README for more information.
|
||||
|
||||
A number of scripts for clients have already been written to automate this
|
||||
process, see client-scripts/README for more information.
|
||||
|
||||
--
|
||||
$Id: challenge.txt 27371 2012-03-16 05:33:15Z dubkat $
|
49
ircd-ratbox-3.0.10/doc/collision_fnc.txt
Normal file
49
ircd-ratbox-3.0.10/doc/collision_fnc.txt
Normal file
@ -0,0 +1,49 @@
|
||||
Nick collision FNC
|
||||
Jilles Tjoelker <jilles -at- stack.nl>
|
||||
--------------------------------------
|
||||
|
||||
Nick collision FNC performs a forced nick change to the user's UID instead
|
||||
of a kill. The criteria for which user may keep the nick are the same as
|
||||
before. Server notices will say the clients are being "saved" instead of
|
||||
"killed". The client will get a 043 numeric, like this:
|
||||
|
||||
:<server> 043 <nick> <uid> :Nick collision, forcing nick change to your unique ID
|
||||
|
||||
The following conditions must be fulfilled:
|
||||
|
||||
- All servers on the network must allow remote nicks starting with a digit.
|
||||
This is not checked; if this is not fulfilled, users will be killed right
|
||||
after being FNCed.
|
||||
|
||||
- All servers on the path between the two clients must support TS6 and
|
||||
nick collision FNC (SAVE capab). If this is not fulfilled, the collision is
|
||||
resolved with kills as before. (This uses the ENCAP GCAP data for remotes.)
|
||||
|
||||
- The general::collision_fnc option must be enabled on the server(s) that
|
||||
detect the collision.
|
||||
|
||||
Technical details:
|
||||
|
||||
The following message is used to propagate the nick change coming from the
|
||||
server that detected the collision:
|
||||
|
||||
:<sid> SAVE <uid> <ts>
|
||||
|
||||
The TS is compared to the current nick TS for the user; if it is not equal,
|
||||
the message is dropped. This prevents nick desyncs if the user changed their
|
||||
nick after being collided. A SAVE message also generates a server notice to
|
||||
+k.
|
||||
|
||||
The SAVE message is used for propagation to the target's server, and also
|
||||
in several other cases if the destination supports SAVE. In other cases, a
|
||||
normal nick change or introduction with the UID as nick is sent.
|
||||
|
||||
If the SAVETS_100 capab is also present, the TS of the UID nick is 100. This is
|
||||
necessary to ensure nick TS is always the same on all servers for each
|
||||
nick-user pair, also if a user with a UID nick changes their nick but is
|
||||
collided again (the server detecting the collision will not propagate the nick
|
||||
change further). If the SAVETS_100 capab is not present, this document leaves
|
||||
the TS of the UID nick undefined; warnings will be given about this.
|
||||
|
||||
--
|
||||
$Id: collision_fnc.txt 24738 2007-12-18 19:48:01Z jilles $
|
1025
ircd-ratbox-3.0.10/doc/example.conf
Executable file
1025
ircd-ratbox-3.0.10/doc/example.conf
Executable file
File diff suppressed because it is too large
Load Diff
1046
ircd-ratbox-3.0.10/doc/example.efnet.conf
Normal file
1046
ircd-ratbox-3.0.10/doc/example.efnet.conf
Normal file
File diff suppressed because it is too large
Load Diff
46
ircd-ratbox-3.0.10/doc/genssl.sh
Executable file
46
ircd-ratbox-3.0.10/doc/genssl.sh
Executable file
@ -0,0 +1,46 @@
|
||||
#!/bin/sh
|
||||
# Simple and straight forward openssl cert generator for ircd-ratbox
|
||||
# Copyright (C) 2008-2012 ircd-ratbox development team
|
||||
# $Id: genssl.sh 29251 2015-12-18 17:15:54Z androsyn $
|
||||
|
||||
if [ $# -eq 0 ]; then
|
||||
echo
|
||||
echo "usage: $0 <IRC_SERVER_NAME> [<LENGTH_IN_DAYS_KEYS_ARE_VALID>]"
|
||||
echo " default lenth of time keys are valid is 365 days."
|
||||
echo
|
||||
exit 1;
|
||||
fi
|
||||
|
||||
SERVER="$1"
|
||||
DAYS_VALID="$2"
|
||||
|
||||
SSL_DAYS_VALID="365"
|
||||
if [ "$DAYS_VALID" -gt "365" ]; then
|
||||
SSL_DAYS_VALID="$DAYS_VALID"
|
||||
fi
|
||||
|
||||
echo
|
||||
echo "Generating 2048-bit self-signed RSA key for ${SERVER}... "
|
||||
openssl req -new -newkey rsa:2048 -sha256 -days ${SSL_DAYS_VALID} -nodes -x509 -keyout ${SERVER}.pem -out ${SERVER}.pem
|
||||
echo "Done creating self-signed cert"
|
||||
|
||||
echo -n "Generating DH parameters file... "
|
||||
openssl dhparam -out dh.pem 2048
|
||||
echo "Done."
|
||||
|
||||
echo
|
||||
echo "Your SSL keys for ${SERVER} are valid for ${SSL_DAYS_VALID} days."
|
||||
echo "If you wish to increase the number of days, run:"
|
||||
echo " $0 ${SERVER} <NUMBER_OF_DAYS>"
|
||||
echo
|
||||
echo "Move ${SERVER}.pem and dh.pem to your ircd config directory if necessary."
|
||||
echo "Adjust ircd.conf to reflect any changes."
|
||||
echo "Your serverinfo {} block should contain the following (adjust paths accordingly)"
|
||||
echo
|
||||
echo "ssl_private_key = \"`pwd`/${SERVER}.pem\";"
|
||||
echo "ssl_cert = \"`pwd`/${SERVER}.pem\";"
|
||||
echo "ssl_dh_params = \"`pwd`/dh.pem\";"
|
||||
|
||||
echo
|
||||
exit 0
|
||||
|
92
ircd-ratbox-3.0.10/doc/hooks.txt
Normal file
92
ircd-ratbox-3.0.10/doc/hooks.txt
Normal file
@ -0,0 +1,92 @@
|
||||
Hook documentation - <lee -at- leeh.co.uk>
|
||||
------------------------------------------
|
||||
|
||||
Documentation on how to actually develop code to use hooks is contained in
|
||||
contrib/example_module.c, this document simply describes which hooks are
|
||||
available.
|
||||
|
||||
There are various hook structures available that may be passed to hooks:
|
||||
hook_data - struct Client *client; const void *arg1;
|
||||
const void *arg2;
|
||||
hook_data_int - struct Client *client; const void *arg1; int arg2;
|
||||
hook_data_client - struct Client *client; struct Client *target;
|
||||
hook_data_channel - struct Client *client; struct Channel *chptr;
|
||||
|
||||
|
||||
Spy Hooks
|
||||
---------
|
||||
The following spy hooks are called only when the request is handled by the
|
||||
local server. They will not be called if the command is being sent remotely
|
||||
for another server to handle:
|
||||
"doing_admin" - Passes hook_data:
|
||||
hdata->client = client requesting ADMIN
|
||||
|
||||
"doing_info" - Passes hook_data:
|
||||
hdata->client = client requesting INFO
|
||||
|
||||
"doing_links" - Passes hook_data:
|
||||
hdata->client = client doing LINKS
|
||||
(const char *) hdata->arg1 = optional mask
|
||||
|
||||
"doing_motd" - Passes hook_data:
|
||||
hdata->client = client doing MOTD
|
||||
|
||||
"doing_stats" - Passes hook_data_int:
|
||||
hdata->client = client doing STATS
|
||||
(const char *) hdata->arg1 = optional stats l target
|
||||
(char) hdata->arg2 = statchar being requested
|
||||
|
||||
"doing_stats_p" - Passes hook_data:
|
||||
hdata->client = client doing STATS p
|
||||
|
||||
"doing_trace" - Passes hook_data_client:
|
||||
hdata->client = client doing TRACE
|
||||
hdata->target = optional target of TRACE
|
||||
|
||||
"doing_whois" - Passes hook_data_client:
|
||||
hdata->client = local client doing WHOIS
|
||||
hdata->target = target of WHOIS
|
||||
|
||||
"doing_whois_global" - Passes hook_data_client:
|
||||
hdata->client = remote client doing WHOIS
|
||||
hdata->target = target of WHOIS
|
||||
|
||||
|
||||
Netburst Hooks
|
||||
--------------
|
||||
The following burst hooks are called when we are sending a netburst to a
|
||||
server.
|
||||
|
||||
"burst_client" - Sent after we have just burst a user.
|
||||
Passes hook_data_client:
|
||||
hdata->client = server we are bursting to
|
||||
hdata->target = user we have just burst
|
||||
|
||||
"burst_channel" - Sent after we have just burst a channel.
|
||||
Passes hook_data_channel:
|
||||
hdata->client = server we are bursting to
|
||||
hdata->chptr = channel we have just burst
|
||||
|
||||
"burst_finished" - Sent after we have just finished bursting users/chans
|
||||
Passes hook_data_client:
|
||||
hdata->client = server we are bursting to
|
||||
|
||||
|
||||
Server Hooks
|
||||
------------
|
||||
The following hooks are called during server connects/exits.
|
||||
|
||||
"server_introduced" - Sent after a server is introduced to the network,
|
||||
local or remote.
|
||||
Passes hook_data_client:
|
||||
hdata->client = uplink server (&me if local)
|
||||
hdata->target = server being introduced
|
||||
|
||||
The following are for debugging and take struct hook_io_data for arguments.
|
||||
These can be used for a variety of purposes, but are aimed at the developer
|
||||
community.
|
||||
"iosend"
|
||||
"iorecv"
|
||||
"iorecvctrl"
|
||||
|
||||
$Id: hooks.txt 23020 2006-09-01 18:20:19Z androsyn $
|
29
ircd-ratbox-3.0.10/doc/index.txt
Normal file
29
ircd-ratbox-3.0.10/doc/index.txt
Normal file
@ -0,0 +1,29 @@
|
||||
|
||||
# $Id: index.txt 23020 2006-09-01 18:20:19Z androsyn $
|
||||
Here is the overview of the documents in the doc/ directory.
|
||||
|
||||
CIDR.txt - Description of CIDR in IPv4
|
||||
Tao-of-IRC.940110 - No comment...
|
||||
challenge.txt - Overview of the challenge/response system for
|
||||
obtaining operator status
|
||||
example.conf - An example ircd.conf file describing most of the
|
||||
user settable options
|
||||
guidelines.txt - Documentation guidelines
|
||||
hooks.txt - Overview of the hooks available
|
||||
index.txt - This file
|
||||
ircd.8 - The new revised manpage, read with the following
|
||||
commands in the prefix directory:
|
||||
man -M . ircd
|
||||
ircd.motd - A default ircd.motd used by make install
|
||||
logfiles.txt - Description of formatting of some logfiles
|
||||
modeg.txt - An in depth description of the server side silence
|
||||
user mode (+g)
|
||||
modes.txt - A list of all user and channel modes
|
||||
operguide.txt - EFnet operator's guide
|
||||
opermyth.txt - Oper myth's, describes what opers can and cannot do
|
||||
server-version-info - Overview of the flags shown in /version
|
||||
whats-new.txt - What new features are available
|
||||
|
||||
Also in the contrib/ directory you will find:
|
||||
example_module.c - An example module, detailing what the code in a module
|
||||
does. Useful for building your own modules.
|
2
ircd-ratbox-3.0.10/doc/ircd.motd
Normal file
2
ircd-ratbox-3.0.10/doc/ircd.motd
Normal file
@ -0,0 +1,2 @@
|
||||
This is ircd-ratbox MOTD you might replace it, but if not your friends will
|
||||
laugh at you.
|
38
ircd-ratbox-3.0.10/doc/ircd_crontab.sh
Normal file
38
ircd-ratbox-3.0.10/doc/ircd_crontab.sh
Normal file
@ -0,0 +1,38 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# IRCD-RATBOX Crontab Script
|
||||
# Copyright (C) 2009-2012 ircd-ratbox development team
|
||||
# $Id: ircd_crontab.sh 27371 2012-03-16 05:33:15Z dubkat $
|
||||
|
||||
# You will want to change this to the root directory your IRCD runs from
|
||||
IRCD_PATH="/home/user/ircd"
|
||||
|
||||
# The location of your pid file, relative to IRCD_PATH (you can probably leave this alone)
|
||||
PID_FILE="etc/ircd.pid"
|
||||
|
||||
|
||||
# run: crontab -e
|
||||
#
|
||||
# To have the script run every minute, type this:
|
||||
#
|
||||
# * * * * * /path/to/ircd_crontab.sh
|
||||
#
|
||||
# To have the script run every 5 minutes, type this:
|
||||
# */5 * * * * ~/path/to/ircd_crontab.sh
|
||||
#
|
||||
|
||||
|
||||
# Leave the rest alone.
|
||||
|
||||
test -x "${IRCD_PATH}/bin/ircd" || exit 1
|
||||
|
||||
if [ -f "${IRCD_PATH}/${PID_FILE}" ] ; then
|
||||
PID=`cat "${IRCD_PATH}/${PID_FILE}"`
|
||||
if kill -0 $PID >/dev/null 2>&1 ; then
|
||||
exit 0;
|
||||
fi
|
||||
rm -f "${IRCD_PATH}/${PID_FILE}"
|
||||
fi
|
||||
|
||||
${IRCD_PATH}/bin/ircd -conftest &>/dev/null && ${IRCD_PATH}/bin/ircd
|
||||
exit $?;
|
36
ircd-ratbox-3.0.10/doc/logfiles.txt
Normal file
36
ircd-ratbox-3.0.10/doc/logfiles.txt
Normal file
@ -0,0 +1,36 @@
|
||||
ircd-ratbox logfiles - Lee H <lee -at- leeh.co.uk>
|
||||
$Id: logfiles.txt 23020 2006-09-01 18:20:19Z androsyn $
|
||||
---------------------------
|
||||
|
||||
fname_killlog
|
||||
-------------
|
||||
<date> <time> <token> <source> <target> <targets server> <reason>
|
||||
|
||||
Where token is one of:
|
||||
L = local oper, local target
|
||||
G = local oper, remote target
|
||||
R = remote oper, remote target
|
||||
O = remote oper, local target
|
||||
S = server
|
||||
|
||||
fname_glinelog
|
||||
--------------
|
||||
<date> <time> <token> <src nick> <src username> <src host> <src server> <user> <host> <reason>
|
||||
|
||||
Where token is one of:
|
||||
R = gline request
|
||||
T = gline trigger, always by previous three requests
|
||||
|
||||
fname_klinelog
|
||||
--------------
|
||||
<date> <time> [U]<token> <source> <time> <info> <reason>[|<oper_reason>]
|
||||
|
||||
Time is always in minutes, 0 for permanent
|
||||
|
||||
|
||||
If 'U' is specified before token, it is a removal rather than an addition.
|
||||
Token is one of:
|
||||
K = kline
|
||||
D = dline
|
||||
X = xline
|
||||
R = resv
|
140
ircd-ratbox-3.0.10/doc/modeg.txt
Normal file
140
ircd-ratbox-3.0.10/doc/modeg.txt
Normal file
@ -0,0 +1,140 @@
|
||||
User Mode +g Documentation
|
||||
|
||||
Hybrid 7 includes a new and power feature that all users can take advantage
|
||||
of to help prevent flooding and unwanted messages. This new feature is
|
||||
invoked by setting user mode +g. When a client is set +g, that user will
|
||||
be in "Caller ID" mode. Any user that messages a +g client will receive
|
||||
a notice saying that they are in +g (server side ignore) mode. The target
|
||||
client (who is set +g) will also receive a notice saying that so and so
|
||||
messaged them, and that they are in +g mode.
|
||||
|
||||
The target of the message will only receive one notification per minute, from
|
||||
any client, in order to help prevent flooding. The sender will NOT have the
|
||||
rate limit, and will receive a notice saying the target is in +g mode every
|
||||
time they send a message. Note that this behavior is similar to the way AWAY
|
||||
messages are done.
|
||||
|
||||
There are numerous benefits for both opers and regular users, including the
|
||||
ability to stop spambot messages from ever reaching your client, stopping
|
||||
private message and CTCP floods, and being able to sit on IRC in privacy.
|
||||
|
||||
One question that arises is how to message specific users, while blocking
|
||||
out everyone else. The command ACCEPT is your answer. To add a user to
|
||||
your accept list, issue the raw command ACCEPT <nick>,<nick>,<nick>,...
|
||||
|
||||
You will not receive a reply from the ACCEPT command if it is succesful,
|
||||
only if an error has occured. There are three possible errors, shown by
|
||||
numerics:
|
||||
|
||||
ERR_ACCEPTFULL (456): :irc.server 456 client :Accept list is full
|
||||
- This is sent when an accept list is full.
|
||||
ERR_ACCEPTEXIST (457): :irc.server 457 client target :already exists
|
||||
- This is sent when a client tries to add a user to the accept list
|
||||
that already exists there
|
||||
ERR_ACCEPTNOT (458): :irc.server 458 client target :doesnt exist
|
||||
- This is sent when a client tries to remove a user from their accept
|
||||
list who is not on the accept list.
|
||||
|
||||
That user will now be able to send messages to your client until the
|
||||
association is broken.
|
||||
|
||||
Associations break in one of the following situations: when an accepted user
|
||||
QUIT's (or is on the other side of a split), you QUIT, or the accepted user
|
||||
changes their nick. The reason why a remote user's nick change will remove
|
||||
them from your accept list is so that you cannot track a user after they
|
||||
changed their nick.
|
||||
|
||||
Viewing the accept list is also very easy. Issue the raw command ACCEPT *.
|
||||
Removing a user from your accept list is also simple. Issue the command
|
||||
ACCEPT -<nick>.
|
||||
|
||||
Sample Session
|
||||
|
||||
The easiest way to see how this works is by experiencing it. Seeing a sample
|
||||
session can help understand what goes on though.
|
||||
|
||||
Client Hwy-LL is set +g initially.
|
||||
Client Hwy101 wants to message Hwy-LL
|
||||
|
||||
Note that some clients may have to use /quote ACCEPT instead of /accept.
|
||||
|
||||
--
|
||||
|
||||
Client Hwy101: /msg Hwy-LL hi
|
||||
Hwy101 will see: -Hwy-LL- *** I'm in +g mode (server side ignore).
|
||||
-Hwy-LL- *** I've been informed you messaged me.
|
||||
|
||||
Hwy-LL will see: Client Hwy101 [wcampbel@admin.irc.monkie.org] is messaging
|
||||
you and you are +g
|
||||
|
||||
The sender will receive the NOTICE from the target of the message, while
|
||||
the recipient will receive the NOTICE from the server.
|
||||
|
||||
--
|
||||
|
||||
If Hwy101 sends another message to Hwy-LL (before the minute expires), he will
|
||||
see: -Hwy-LL- *** I'm in +g mode (server side ignore).
|
||||
and will not receive the second notice
|
||||
|
||||
Hwy-LL will NOT see any notice.
|
||||
|
||||
--
|
||||
|
||||
Hwy-LL now wishes to see messages from Hwy101 and SpamBot
|
||||
|
||||
Client Hwy-LL: /accept Hwy101,SpamBot
|
||||
|
||||
Neither side will be told of the change in the accept list, Hwy-LL should
|
||||
presume that the accept was succesful if no error occurs.
|
||||
|
||||
Now Hwy-LL can see messages from Hwy101 and SpamBot without any blockage.
|
||||
If Hwy101 was also set +g, then he would have to issue /accept Hwy-LL
|
||||
before he would be able to see messages from Hwy-LL.
|
||||
|
||||
--
|
||||
|
||||
Hwy-LL now wants to see who is on his accept list.
|
||||
|
||||
Client Hwy-LL: /accept *
|
||||
|
||||
Hwy-LL will see:
|
||||
irc.server 281 Hwy-LL Hwy101 SpamBot
|
||||
irc.server 282 Hwy-LL :End of /ACCEPT list
|
||||
|
||||
The replies are in numeric form to help parsing by scripts.
|
||||
--
|
||||
|
||||
Hwy-LL realises he added a spambot to his list, and wants to remove it, and
|
||||
allow messages from services
|
||||
|
||||
Client Hwy-LL: /accept -SpamBot,services
|
||||
|
||||
Hwy-LL will now only accept messages from Hwy101 and services.
|
||||
|
||||
--
|
||||
|
||||
The nicks to be added can be in ANY order, however you cannot add or remove
|
||||
AND list.
|
||||
/ACCEPT x,y,-z,f,-a would be acceptable.
|
||||
/ACCEPT x,y,-z,* would ignore the * and generate an invalid nick
|
||||
response.
|
||||
|
||||
Like Dalnet and Undernet's SILENCE system, the accept list only exists while
|
||||
you are connected to IRC. In order for you to have the same accept list
|
||||
every time you come onto IRC, you must put the accept commands into your
|
||||
client's auto-perform, or manually issue the commands each time.
|
||||
|
||||
This system may seem similar to the SILENCE system, but it is actually a
|
||||
reverse SILENCE. SILENCE ignores certain users and allows the rest. Mode
|
||||
+g ignores all users except certain ones (on your accept list.) Both systems
|
||||
have their place, but the mode +g in Hybrid 7 is what the developers thought
|
||||
would be most useful for clients.
|
||||
|
||||
The goals of this user mode is to provide protection from flooding and
|
||||
spamming, and to provide users with a means to keep their privacy.
|
||||
|
||||
We hope that these goals are obtained.
|
||||
|
||||
--
|
||||
W. Campbell
|
||||
$Id: modeg.txt 23020 2006-09-01 18:20:19Z androsyn $
|
57
ircd-ratbox-3.0.10/doc/modes.txt
Normal file
57
ircd-ratbox-3.0.10/doc/modes.txt
Normal file
@ -0,0 +1,57 @@
|
||||
irc.corefailure.com hybrid-7beta5 oiwszcerkfydnxbaugl biklmnopstveIha bkloveIh
|
||||
|
||||
User Modes:
|
||||
|
||||
+a - admin - Admin status. Shown as an admin in WHOIS, able to
|
||||
load and unload modules, and see IP's in STATS c
|
||||
+b - bots - See bot and drone flooding notices
|
||||
+c - cconn - Client connection/quit notices
|
||||
+d - debug - See debugging notices
|
||||
+f - full - See I: line full notices
|
||||
+g - callerid - Server Side Ignore
|
||||
+i - invisible - Not shown in NAMES or WHO unless you share a
|
||||
a channel
|
||||
+k - skill - See server generated KILL messages
|
||||
+l - locops - See LOCOPS messages
|
||||
+n - nchange - See client nick changes
|
||||
+o - oper - Operator status
|
||||
+r - rej - See rejected client notices
|
||||
+s - servnotice - See general server notices
|
||||
+u - unauth - See unauthorised client notices
|
||||
+w - wallop - See server generated WALLOPS
|
||||
+x - external - See remote server connection and split notices
|
||||
+y - spy - See LINKS, STATS (if configured), TRACE notices
|
||||
+z - operwall - See oper generated WALLOPS
|
||||
+D - deaf - Ignore all PRIVMSG's sent to channels
|
||||
+Z - operspy - See operspy notices
|
||||
|
||||
Channel Modes:
|
||||
|
||||
+b - ban - Channel ban on nick!user@host
|
||||
+e - exempt - Exemption from bans
|
||||
+I - invex - Invite exceptions, nick!user@host does not need to be
|
||||
explicitly INVITE'd into the channel before being able
|
||||
JOIN
|
||||
+i - invite - Invite only
|
||||
+k - key - Key/password for the channel.
|
||||
+l - limit - Limit the number of users in a channel
|
||||
+m - moderated - Users without +v/h/o cannot send text to the channel
|
||||
+n - noexternal - Users must be in the channel to send text to it
|
||||
+o - chanop - Full operator status
|
||||
+p - private - Private is obsolete, this now restricts KNOCK, and can be
|
||||
set at the same time as +s.
|
||||
+r - registered - Users must be registered with services to JOIN (enabled only
|
||||
if compiled with --enable-services)
|
||||
+s - secret - The channel does not show up on NAMES or LIST or in the
|
||||
WHOIS channel list unless you are a member of the channel
|
||||
+t - topic - Only chanops can change the topic
|
||||
+v - voice - Can speak in a moderated channel, and is exempt from flood
|
||||
restrictions
|
||||
+S - ssl only - Requires SSL/TLS connections to join
|
||||
The third part of the 004 numeric lists channel modes that require arguments.
|
||||
Currently these are bkloveIh.
|
||||
|
||||
Note that most of the channel modes can be disabled in the conf file for
|
||||
networks that do not wish to support them.
|
||||
|
||||
# $Id: modes.txt 25103 2008-03-10 16:52:47Z androsyn $
|
117
ircd-ratbox-3.0.10/doc/monitor.txt
Normal file
117
ircd-ratbox-3.0.10/doc/monitor.txt
Normal file
@ -0,0 +1,117 @@
|
||||
MONITOR - Protocol for notification of when clients become online/offline
|
||||
Lee Hardy <lee -at- leeh.co.uk>
|
||||
$Id: monitor.txt 23973 2007-06-30 22:28:55Z jilles $
|
||||
-------------------------------------------------------------------------
|
||||
|
||||
Currently, ISON requests by clients use a large amount of bandwidth. It is
|
||||
expected that it is more efficient for this to be done by the server at the
|
||||
expense of cpu cycles. The WATCH implementation that was designed to counter
|
||||
this is (in my opinion) severely flawed. This protocol was designed to
|
||||
provide a cleaner implementation.
|
||||
|
||||
The command used throughout this specification is "MONITOR".
|
||||
|
||||
Each use of the MONITOR command takes a special modifier, indicating
|
||||
the operation being performed. The client MUST NOT attempt to specify
|
||||
more than one modifier. Only one special modifier may be used per MONITOR
|
||||
command.
|
||||
|
||||
Thus it is impossible to combine additions to the list with removals from
|
||||
the list -- these MUST be done with two seperate commands.
|
||||
|
||||
A client MUST NOT issue the MONITOR command more than once per second.
|
||||
Any attempts to do so will generate an error.
|
||||
|
||||
In commands and numerics where multiple nicknames may occur, the length of
|
||||
the nickname list is limited only by the buffer size of 512 chars, as
|
||||
defined in RFC1459.
|
||||
|
||||
Support of this specification is indicated by the MONITOR token in
|
||||
RPL_ISUPPORT (005). This token takes an optional parameter, of the maximum
|
||||
amount of nicknames a client may have in their monitor list. If no
|
||||
parameter is specified, there is no limit. A typical token would be:
|
||||
MONITOR=100
|
||||
|
||||
MONITOR + nick[,nick2]*
|
||||
-----------------------
|
||||
Adds the given list of nicknames to the list of nicknames being monitored.
|
||||
|
||||
If any of the nicknames being added are online, the server will generate
|
||||
RPL_MONONLINE numerics listing those nicknames that are online.
|
||||
|
||||
If any of the nicknames being added are offline, the server will generate
|
||||
RPL_MONOFFLINE numerics listing those nicknames that are offline.
|
||||
|
||||
MONITOR - nick[,nick2]*
|
||||
-----------------------
|
||||
Removes the given list of nicknames from the list of nicknames being
|
||||
monitored. No output will be returned for use of this command.
|
||||
|
||||
MONITOR C
|
||||
---------
|
||||
Clears the list of nicknames being monitored. No output will be returned
|
||||
for use of this command.
|
||||
|
||||
MONITOR L
|
||||
---------
|
||||
Outputs the current list of nicknames being monitored. All output will use
|
||||
RPL_MONLIST, and the output will be terminated with RPL_ENDOFMONLIST
|
||||
|
||||
MONITOR S
|
||||
---------
|
||||
Outputs for each nickname in the list being monitored, whether the client is
|
||||
online or offline. All nicks that are online will be sent using
|
||||
RPL_MONONLINE, all nicks that are offline will be sent using RPL_MONOFFLINE.
|
||||
The list will be terminated with RPL_ENDOFMONLIST.
|
||||
|
||||
|
||||
Numeric replies
|
||||
---------------
|
||||
|
||||
730 - RPL_MONONLINE
|
||||
-------------------
|
||||
:<server> 730 <nick> :nick!user@host[,nick!user@host]*
|
||||
|
||||
This numeric is used to indicate to a client that either a nickname has just
|
||||
become online, or that a nickname they have added to their monitor list is
|
||||
online.
|
||||
|
||||
The server may send "*" instead of the target nick (<nick>). (This makes it
|
||||
possible to send the exact same message to all clients monitoring a certain
|
||||
nick.)
|
||||
|
||||
731 - RPL_MONOFFLINE
|
||||
--------------------
|
||||
:<server> 731 <nick> :nick[,nick1]*
|
||||
|
||||
This numeric is used to indicate to a client that either a nickname has just
|
||||
left the irc network, or that a nickname they have added to their monitor
|
||||
list is offline.
|
||||
|
||||
The argument is a chained list of nicknames that are offline.
|
||||
|
||||
As with 730 the server may send "*" instead of the target nick.
|
||||
|
||||
732 - RPL_MONLIST
|
||||
-----------------
|
||||
:<server> 732 <nick> :nick[,nick1]*
|
||||
|
||||
This numeric is used to indicate to a client the list of nicknames they have
|
||||
in their monitor list.
|
||||
|
||||
733 - RPL_ENDOFMONLIST
|
||||
------------------------
|
||||
:<server> 733 <nick> :End of MONITOR list
|
||||
|
||||
This numeric is used to indicate to a client the end of a monitor list.
|
||||
|
||||
734 - ERR_MONLISTFULL
|
||||
---------------------
|
||||
:<server> 734 <nick> <limit> <nicks> :Monitor list is full.
|
||||
|
||||
This numeric is used to indicate to a client that their monitor list is
|
||||
full, so the command failed. The <limit> parameter is the maximum number of
|
||||
nicknames a client may have in their list, the <nicks> parameter is the list
|
||||
of nicknames, as the client sent them, that cannot be added.
|
||||
|
||||
|
137
ircd-ratbox-3.0.10/doc/old/Authors
Normal file
137
ircd-ratbox-3.0.10/doc/old/Authors
Normal file
@ -0,0 +1,137 @@
|
||||
/************************************************************************
|
||||
* IRC - Internet Relay Chat, doc/AUTHORS
|
||||
* Copyright (C) 1990
|
||||
*
|
||||
* AUTHORS FILE:
|
||||
* This file attempts to remember all contributors to the IRC
|
||||
* developement. Names can be only added this file, no name
|
||||
* should never be removed. This file must be included into all
|
||||
* distributions of IRC and derived works.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 1, or (at your option)
|
||||
* any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
IRC was conceived of and written by Jarkko Oikarinen <jto@tolsun.oulu.fi>.
|
||||
IRC was originally written in University of Oulu, Computing Center.
|
||||
Jan 1991 - IRC 2.6 jto@tolsun.oulu.fi
|
||||
- Multiple Channels and protocol changes
|
||||
|
||||
Contributions were made by a cast of dozens, including the following:
|
||||
|
||||
Markku Jarvinen <mta@tut.fi>: Emacs-like editing facility for the client
|
||||
|
||||
Kimmo Suominen <kim@kannel.lut.fi>: HP-UX port
|
||||
|
||||
Jeff Trim <jtrim@orion.cair.du.edu>: enhancements and advice
|
||||
|
||||
Vijay Subramaniam <vijay@lll-winken.llnl.gov>: advice and ruthless publicity
|
||||
|
||||
Karl Kleinpaste <karl@cis.ohio-state.edu>: user's manual
|
||||
|
||||
Greg Lindahl <gl8f@virginia.edu>: AUTOMATON code, the Wumpus GM automaton,
|
||||
myriad bug fixes
|
||||
|
||||
Bill Wisner <wisner@hayes.fai.alaska.edu>: numerous bug fixes and code
|
||||
enhancements
|
||||
|
||||
Tom Davis <conslt16@zeus.unl.edu> and Tim Russell <russell@zeus.unl.edu>:
|
||||
VMS modifications
|
||||
|
||||
Markku Savela <msa@tel4.tel.vtt.fi>: advice, support, and being the
|
||||
incentive to do some of our *own* coding. :)
|
||||
|
||||
Tom Hopkins <hoppie@buengf.bu.edu>: bug fixes, quarantine lines,
|
||||
consolidation of various patches.
|
||||
|
||||
Christopher Davis <ckd@cs.bu.edu>: EFnet/Anet gateway coding,
|
||||
many automata ;), documentation fixing.
|
||||
|
||||
Helen Rose <hrose@cs.bu.edu>: documentation updating, and fixing.
|
||||
|
||||
Tom Hinds <rocker@bucsf.bu.edu>: emacs client updating.
|
||||
|
||||
Tim Miller <cerebus@bu-pub.bu.edu>: various server and client-breaking
|
||||
features.
|
||||
|
||||
Darren Reed <avalon@coombs.anu.edu.au>: various bug fixes and enhancements.
|
||||
Introduced nickname and channelname hash tables into the server.
|
||||
|
||||
The version 2.2 release was coordinated by Mike Bolotski
|
||||
<mikeb@salmon.ee.ubc.ca>.
|
||||
|
||||
The version 2.4 release was coordinated by Markku Savela and
|
||||
Chelsea Ashley Dyerman
|
||||
|
||||
The version 2.5.2 release was coordinated by Christopher Davis, Helen Rose,
|
||||
and Tom Hopkins.
|
||||
|
||||
The versions 2.6.2, 2.7 and 2.8 releases were coordinated by Darren Reed.
|
||||
|
||||
Contributions for the 2.8 release from the following people:
|
||||
Matthew Green <phone@coombs.anu.edu.au>
|
||||
Chuck Kane <ckane@ece.uiuc.edu>
|
||||
Matt Lyle <matt@oc.com>
|
||||
Vesa Ruokonen <ruokonen@lut.fi>
|
||||
|
||||
Markku Savela <Markku.Savela@vtt.fi> / April 1990
|
||||
Fixed various bugs in 2.2PL1 release server (2.2msa.4) and changed
|
||||
sockets to use non-blocking mode (2.2msa.9). [I have absolutely
|
||||
nothing to do with clients :-]
|
||||
|
||||
Chelsea Ashley Dyerman <chelsea@earth.cchem.berkeley.edu> / April 1990
|
||||
Rewrote the Makefiles, restructuring of source tree. Added libIrcd.a to
|
||||
the Makefile macros, numerous reformatting of server text messages, and
|
||||
added mkversion.sh to keep track of compilation statistics. Numerous
|
||||
bug fixes and enhancements, and co-coordinator of the 2.4 release.
|
||||
|
||||
jarlek@ifi.uio.no added mail functions to irc.
|
||||
|
||||
Armin Gruner <gruner@informatik.tu-muenchen.de> / May, June 1990:
|
||||
* Patched KILL-line feature for ircd.conf, works now.
|
||||
Enhancement: Time intervals can be specified in passwd-field.
|
||||
Result: KILL-Line is only active during these intervals
|
||||
* Patched PRIVMSG handling, now OPER can specify masks for sending
|
||||
private messages, advantage: msg to all at a specified server or host.
|
||||
* Little tests on irc 2.5 alpha, fixed some little typos in client code.
|
||||
Change: common/debug.c has been moved to ircd/s_debug.c, and a
|
||||
irc/c_debug.c has been created, for the benefit that wrong server msg
|
||||
are displayed if client does not recognize them. (strange, if a server
|
||||
sends an 'unknown command', isn't it?)
|
||||
|
||||
Tom Hopkins <hoppie@buengf.bu.edu> / September, October 1990:
|
||||
* Patched msa's K lines for servers (Q lines).
|
||||
* Consolidated several patches, including Stealth's logging patch.
|
||||
* Fixed several minor bugs.
|
||||
* Has done lots of other stuff that I can't seem to remember, but he
|
||||
always works on code, so he has to have done alot more than three
|
||||
lines worth. :)
|
||||
|
||||
Thanks go to those persons not mentioned here who have added their advice,
|
||||
opinions, and code to IRC.
|
||||
|
||||
Various modifications, bugreports, cleanups and testing by:
|
||||
|
||||
Hugo Calendar <hugo@ucscb.ucsc.edu>
|
||||
Bo Adler <adler@csvax.cs.caltech.edu>
|
||||
Michael Sandrof <ms5n+@andrew.cmu.edu>
|
||||
Jon Solomon <jsol@cs.bu.edu>
|
||||
Jan Peterson <jlp@hamblin.math.byu.edu>
|
||||
Nathan Glasser <nathan@brokaw.lcs.mit.edu>
|
||||
Helen Rose <hrose@eff.org>
|
||||
Mike Pelletier <stealth@caen.engin.umich.edu>
|
||||
Basalat Ali Raja <gwydion@tavi.rice.edu>
|
||||
Eric P. Scott <eps@toaster.sfsu.edu>
|
||||
Dan Goodwin <fornax@wpi.wpi.edu>
|
||||
Noah Friedman <friedman@ai.mit.edu>
|
368
ircd-ratbox-3.0.10/doc/operguide.txt
Normal file
368
ircd-ratbox-3.0.10/doc/operguide.txt
Normal file
@ -0,0 +1,368 @@
|
||||
|
||||
EFnet Oper Guide
|
||||
Last update: 02-21-2002
|
||||
Written and maintained by Riedel
|
||||
E-Mail: dennisv@vuurwerk.nl
|
||||
|
||||
1. Commands you should know about
|
||||
2. The client of your choice
|
||||
3. Your primary responsibilities
|
||||
4. Re-routing
|
||||
4.1 Re-routing other servers and remote connects
|
||||
5. Kills and klines
|
||||
6. Kill and K-Line requests
|
||||
7. Happy birthday!
|
||||
8. Security
|
||||
9. Know who your friends are
|
||||
10. The TCM bot
|
||||
11. Services
|
||||
12. G-Lines
|
||||
|
||||
|
||||
1. Commands you should know about
|
||||
|
||||
This is no longer covered here. IRCD-hybrid is changing too rapidly, so
|
||||
this section would be outdated in no time ;) For an up-to-date version,
|
||||
please download the latest hybrid at www.ircd-hybrid.org.
|
||||
|
||||
|
||||
2. The client of your choice
|
||||
|
||||
There are many IRC clients around for a wide variety of operating systems.
|
||||
Being an IRC Operator doesn't *require* you to use a UNIX client, however
|
||||
I personally prefer UNIX-based clients. If you're familiar with UNIX and
|
||||
use UNIX for opering, I suggest ircII / epic. There are a lot of scripts
|
||||
available for those two clients, and it's not that hard to write scripts
|
||||
yourself to suite your needs. It is important that you know how to operate
|
||||
your client, and familiarize yourself with the options and features. For
|
||||
whatever client you chose this goes for any of them: You should be in
|
||||
control of your client, instead of the client being in control of you.
|
||||
|
||||
Resources :
|
||||
|
||||
www.mirc.co.uk - mIRC (MS-Windows)
|
||||
www.irchelp.org - a variety of clients and scripts
|
||||
ftp.blackened.com - several UNIX based clients available
|
||||
|
||||
|
||||
3. Your primary responsibilities
|
||||
|
||||
As an IRC Operator, you're responsible for maintaining the server on a
|
||||
real-time basis. You represent your server, and you represent the network.
|
||||
Irresponsible / rude / offensive / stupid behavior may discredit your server
|
||||
and the network. You should focus on the task you were chosen for...
|
||||
maintainance. Sounds simple, no? It means getting rid of users that abuse
|
||||
the service, enforcing the server's policy and keeping the server linked.
|
||||
Users will ask you questions, and expect you to know all the answers.. after
|
||||
all, you're the oper!
|
||||
|
||||
Be prepared for users trying to fool you, sweet talk you into things you
|
||||
don't want, lie and deceive. Most users are handling in good faith...
|
||||
however, the abusers have learned how to manipulate opers. They have studied
|
||||
the alien creature 'oper' for ages like biologists study animals. Be
|
||||
paranoid, be curious and be suspicious. I can't stress the importancy of that
|
||||
often enough.
|
||||
|
||||
Second priority has the network. You were not chosen to maintain the network
|
||||
but you were chosen to maintain the server. However, you may want to be able
|
||||
to reroute servers. If you see something broken, don't be afraid to fix it.
|
||||
If you do, be sure you fix things and don't make it worse. Before you
|
||||
step into routing, be sure you've familiarized yourself with the network's
|
||||
topology, and be confident enough to perform such actions. (re)routing is
|
||||
covered in the next chapter.
|
||||
|
||||
Opers on the network depend on a trusting relationship. You can usually take
|
||||
the word from an oper. Other opers are considered -trusted-, however, there
|
||||
are exceptions. Sometimes even opers lie to opers to get things done. Don't
|
||||
be afraid to ask for proof of a certain statement, such as logs.
|
||||
This doesn't mean you distrust the oper in question, but -you- and you alone
|
||||
are responsible for your actions. You call the shots on your server, unless
|
||||
your admin says otherwise.
|
||||
|
||||
|
||||
4. Re-routing
|
||||
|
||||
Re-routing is not hard, and it's not scary but it is important that you do it
|
||||
right. The commands you'll use are SQUIT and CONNECT. First, a very simple
|
||||
example. Let's say your server, irc.yourserver.com is lagged to it's uplink,
|
||||
irc.uplink.com and you want to reroute your server. You have to think about
|
||||
where you want your server to be linked, and you have to time your reroute.
|
||||
An example topology :
|
||||
|
||||
irc.yourserver.com ---- irc.uplink.com
|
||||
| | \
|
||||
B C D
|
||||
/ \
|
||||
E F
|
||||
/ \
|
||||
G H --- O
|
||||
/ | \ | \
|
||||
I J K L M
|
||||
\
|
||||
N
|
||||
|
||||
In this case, you're uplinked by irc.uplink.com
|
||||
irc.uplink.com also hubs B, C and D. Server B functions as hub for E and F;
|
||||
F hubs G and H; H hubs L, M and O. G hubs I, J and K. M hubs N.
|
||||
Your server is allowed to connect to server B, F and G. So you consider the
|
||||
servers you're able to connect to. Is the lag caused by a server that uplinks
|
||||
irc.uplink.com ? Use /stats ? irc.uplink.com to determine lag to the other
|
||||
servers. If irc.uplink.com does not respond, the lag is to your uplink. If
|
||||
so, you cannot be sure about the state of the other uplinks, so you'd have to
|
||||
get on a remote server and determine lag by using /stats ? and /trace. For
|
||||
example, you could connect to server N, and /trace yournick. Yournick, being
|
||||
the nick on your server. You'll see which route it takes, and what the
|
||||
problem server is. Example /trace output :
|
||||
|
||||
S:[SERVER-N ] V:[2.8/hybrid] U:[SERVER-M ]
|
||||
S:[SERVER-M ] V:[2.8/hybrid] U:[SERVER-H ]
|
||||
S:[SERVER-H ] V:[2.8/hybrid] U:[SERVER-F ]
|
||||
S:[SERVER-F ] V:[2.8/hybrid] U:[SERVER-B ]
|
||||
S:[SERVER-B ] V:[2.8/hybrid] U:[irc.uplink.com ]
|
||||
S:[irc.uplink.com ] V:[2.8/hybrid] U:[irc.yourserver.com ]
|
||||
|
||||
The trace doesn't complete... server-b announces irc.uplink.com, and
|
||||
irc.uplink.com announces your server. Your server should return something
|
||||
like :
|
||||
|
||||
S:[irc.yourserver.] OPER [yournick!user@yourhost]
|
||||
|
||||
If it doesn't, we know the lag is only between yourserver and uplink.
|
||||
Usually if there is lag between your server and your uplink, the send-queue
|
||||
rises. This is not always the case. Sometimes your server can write perfectly
|
||||
to your uplink, but not reverse. That is called one sided lag.
|
||||
|
||||
We pick server B to link to. It means we have to SQUIT and CONNECT.
|
||||
To unlink from irc.uplink.com and connect to SERVER_B we'd type:
|
||||
/quote SQUIT irc.uplink.com :reroute
|
||||
/connect SERVER_B
|
||||
|
||||
we *DON'T* SQUIT irc.yourserver.com... and I'll try to explain why:
|
||||
If we wanted to remove hub M from the network, and with it N, we'd issue
|
||||
a SQUIT M. An SQUIT follows a path, relays the SQUIT request to each server
|
||||
in that path. Finally it reaches server H, which is the hub for M. Server H
|
||||
sees the SQUIT and drops the link to M.
|
||||
|
||||
Now a different situation, we want to separate yourserver, uplink, C and D
|
||||
from the rest of the network, in order to reroute. We'd have to SQUIT server
|
||||
B, since we want the -uplink- of server B (being irc.uplink.com) to drop the
|
||||
link to server B.
|
||||
|
||||
If you'd SQUIT irc.yourserver.com, you ask yourserver.com to drop the link to
|
||||
itself, which is impossible. If you SQUIT irc.uplink.com, you ask yourserver
|
||||
to drop the link to uplink, which is what we want to do.
|
||||
|
||||
After the SQUIT and CONNECT, the new situation looks like this :
|
||||
|
||||
irc.uplink.com
|
||||
| | \
|
||||
irc.yourserver.com -- B C D
|
||||
/ \
|
||||
E F
|
||||
/ \
|
||||
G H --- O
|
||||
/ | \ | \
|
||||
I J K L M
|
||||
\
|
||||
N
|
||||
|
||||
If yourserver is a Hub, it makes the situation more complex, since your
|
||||
actions have more impact.
|
||||
|
||||
|
||||
4.1 - Re-routing other servers and remote connects
|
||||
|
||||
Example topology :
|
||||
|
||||
irc.uplink.com
|
||||
| | \
|
||||
irc.yourserver.com -- B C D
|
||||
/ \
|
||||
E F
|
||||
/ \
|
||||
G H --- O
|
||||
/ | \ | \
|
||||
I J K L M
|
||||
\
|
||||
N
|
||||
|
||||
Let's say, hub H is way lagged to F, but G to F is fine... we want to reroute
|
||||
H, and stick H to G.
|
||||
|
||||
We'd do :
|
||||
|
||||
/quote SQUIT serverh :re-routing you babe
|
||||
/connect serverh 6667 serverg
|
||||
|
||||
A global wallops will be sent :
|
||||
!serverg! Remote CONNECT serverh 6667 from ItsMe
|
||||
|
||||
When re-routing, always give the server some time to prevent nick collides.
|
||||
When there is lag, people will connect to another server. When you SQUIT and
|
||||
CONNECT to fast, a lot of those clients will be collided. Also, stick to your
|
||||
territory. How enthusiastic you may be, you cannot route the world. If you're
|
||||
an oper on the US side, stick to the US side when re-routing. Needless to
|
||||
say, if you're EU, keep it to EU ;)
|
||||
|
||||
|
||||
5. Kills and klines
|
||||
|
||||
As an oper, you're given the incredible power *cough* of KILL and KLINE.
|
||||
/kill nick reason disconnects a client from IRC with the specified reason.
|
||||
A /quote kline *evil@*.dude.org :reason here bans the user from your server.
|
||||
Abusive kills and klines may draw attacks to your server, so always consider
|
||||
if a kline or kill is deserved. If the server gets attacked after a valid
|
||||
kill or kline, well.. tough luck. You should never be 'afraid' to kline
|
||||
anyone on your server. If it's a good reason, make it so. Even if you know
|
||||
it may cause the server to be attacked. Maybe good to think about is this:
|
||||
- if /ignore solves the problem rather than a kick, /ignore
|
||||
- kick if a ban is unneeded
|
||||
- ban if a /kill is unwarranted for
|
||||
- kill rather than kline if that solves the problem
|
||||
- kline when a server ban is really needed.
|
||||
|
||||
You kline a user when you absolutely don't want this user to use the service
|
||||
your server is providing.
|
||||
|
||||
Crosskills (killing users on another server) are another issue. Some admins
|
||||
don't care if users get /kill'ed off their server, for any reason or no
|
||||
reason at all... and other admins are very anal about it. A good way to go
|
||||
(IMO) is to issue a KILL if there is an absolute need for the target user to
|
||||
be disconnected. If there are active opers on that server, let them handle
|
||||
it. They'll be upset if you /kill a user off their server, without
|
||||
contacting them. /stats p irc.server.here shows the active opers on a
|
||||
particular server. Some opers have multiple o-lines and are not watching all
|
||||
sessions. If you can't find an active oper on a server, you can
|
||||
/quote operwall a request for opers from that server.
|
||||
|
||||
Ghost KILLs are another story, an often misunderstood one.
|
||||
When you see a /KILL from an oper with the reason 'ghosted' they usually
|
||||
KILL a client that's about to ping timeout. That is not what a ghost is!
|
||||
To quote Dianora: "a ghost happens because a client misses being killed when
|
||||
it should be. Its a race condition due to nick chasing". In other words,
|
||||
Server X thinks client A has been KILLed, while server Y missed the KILL
|
||||
for that client.
|
||||
|
||||
|
||||
6. Kill and K-Line requests
|
||||
|
||||
As previously mentioned, if an oper from another server contacts you and
|
||||
requests a kill or a kline for a local client with a good reason, you can
|
||||
usually trust this request. Opers depend on a trusting relationship. However,
|
||||
since you're responsible for the kill or kline, it is not rude to ask for
|
||||
proof. It depends on the oper making the request how thats interpreted, but
|
||||
the way they respond to asking for proof tells more about them than about
|
||||
you.
|
||||
|
||||
The more and longer you oper, how better you get to know the other opers.
|
||||
You know who is honest, you'll know who are lying and deceiving. Before
|
||||
you acquire this knowledge, you can merely rely on common sense and
|
||||
instincts. You'll probably make mistakes occasionally, and thats nothing to
|
||||
be ashamed of. Opers are - despite contrary believes - human.
|
||||
|
||||
Users occasionally will ask you to kill or kline a user/bot too. Some
|
||||
requests are straight-forward and clear, others require you to be cautious. I
|
||||
recommend to always investigate such requests, and when you're confident the
|
||||
request is valid, issue the kill or kline.
|
||||
|
||||
|
||||
7. Happy birthday!
|
||||
|
||||
It is a custom on EFnet to birthday /kill opers of whom it is his/her
|
||||
birthday. Not all opers like this, but typically those opers don't let
|
||||
others know about their birthday. You'll notice that the KILLS say a lot
|
||||
about who likes who and who is friends with who. Whether you want to
|
||||
participate, is entirely up to you.
|
||||
|
||||
|
||||
8. Security
|
||||
|
||||
As with any privilege, you have to handle it cautiously and responsibly.
|
||||
Be sure that your o/O line doesn't get compromised! Oper only from secure
|
||||
hosts. You and only you should know your password. Don't share your oper
|
||||
account, and make your oper password a UNIQUE one. If your o/O line gets
|
||||
compromised, nasty things may/will happen. Imagine an oper with crosskill
|
||||
capabilities who's operline gets 'hacked'... the results are often
|
||||
disastrous and you will lose respect and trust from others. It can cause
|
||||
your oper privileges to be revoked, or even the server to be (temporarily)
|
||||
delinked.
|
||||
|
||||
|
||||
9. Know who your friends are
|
||||
|
||||
As an oper you will get a lot of users that want to be 'friends' with you.
|
||||
Users offer you free* access to their *nix servers, ops in channels,
|
||||
unlimited leech access to the biggest and fastest warez sites *gasp* and
|
||||
more. They want favors in return. They say they don't but they truly want
|
||||
something in return. They -expect- something in return. You could either
|
||||
don't respond to such offers, or use them. The last option creates an even
|
||||
more distorted image of opers and doesn't do any good for the user <-> oper
|
||||
relationship. Your *real* friends are usually the persons who were your
|
||||
friends _before_ you acquired the extra privileges.
|
||||
|
||||
|
||||
10. The TCM Bot
|
||||
|
||||
A TCM bot can be a valuable tool for opers. It keeps record of all connected
|
||||
clients, flags clients with multiple connections and has all sorts of other
|
||||
useful commands. There are three different kind of TCM's in use on EFnet,
|
||||
being OOMon, TCM-Dianora and TCM-Hybrid. Every one of them requires you to
|
||||
log in to be able to access the privileged commands. On OOMon you DCC chat
|
||||
the TCM bot and do '.auth yournick yourpass' where yournick is your oper
|
||||
name in your o/O line. In TCM-Dianora and TCM-Hybrid you register with:
|
||||
'.register yourpass', where yourpass is your password ;)
|
||||
All TCM commands start with a period. If you forget the period, the text goes
|
||||
into the 'partyline', where it is echoed to all connected opers.
|
||||
|
||||
Resources : http://toast.blackened.com/oomon/help
|
||||
http://www.db.net/~db/tcm.html
|
||||
|
||||
|
||||
11. Services
|
||||
|
||||
A recent addition to EFNet is Channel Fixer, aka ChanFix. This is an
|
||||
automated service that re-ops clients on opless channels. There are a few
|
||||
restrictions. First, the channel has to be of significant size for ChanFix
|
||||
to store it in its database. Second, it only logs static addresses.
|
||||
|
||||
How does it work? Periodically it stores information about the channel state
|
||||
in its database, for every channel in there. On every 'run', a channel
|
||||
operator gets one point. These scores make a top-5 of 'most frequent opped
|
||||
clients'. When a channel becomes opless, ChanFix will join and op the top-5
|
||||
opped clients CURRENTLY IN THE CHANNEL.
|
||||
|
||||
Chanfix can be invoked manually by server administrators. /msg ChanFix
|
||||
chanfix #channel is the command to do it. ChanFix will join, and treat the
|
||||
channel as if it were opless. It lowers TS by one (resulting in a deop of
|
||||
the entire channel) and re-ops the top-5 clients currently in the channel.
|
||||
The Channel Fixer won't log or actively fix channels when there's a split of
|
||||
significant size. Needless to say, the chanfix command must be used with
|
||||
caution.
|
||||
|
||||
|
||||
12. G-Lines
|
||||
|
||||
Oh yes! A G-Line section. Currently, a part of EFNet (EU-EFnet) has G-Lines
|
||||
enabled. This was decided by the EU admin community and is now mandatory
|
||||
within EU-EFnet. In order for a G-Line to be activated, three opers from
|
||||
three different servers need to issue the _exact_ same G-Line. The reason
|
||||
is not counted.
|
||||
|
||||
G-Lines work best when the EU side of EFNet is not fragmented. G-Lines
|
||||
will, however, propogate through a Hybrid 6 hub (but not a CSr hub) even
|
||||
if the hub server has G-Lines disabled. This propogation allows two halves
|
||||
of EU-EFnet to have concurrent G-Lines set even when split by US hub servers.
|
||||
|
||||
|
||||
Questions / Comments / Suggestions are welcome.
|
||||
You can e-mail me: dennisv@vuurwerk.nl
|
||||
|
||||
Best regards,
|
||||
--
|
||||
Dennis "Riedel" Vink ___~___ Email - dennisv@vuurwerk.nl
|
||||
Unix System Administrator \ | / Phone - +31 23 5111111
|
||||
Vuurwerk Internet '|.|' PGP - 0xD68A7AAB
|
||||
|
||||
And on the seventh day, He exited from append mode.
|
||||
|
||||
# $Id: operguide.txt 23020 2006-09-01 18:20:19Z androsyn $
|
47
ircd-ratbox-3.0.10/doc/server-version-info
Normal file
47
ircd-ratbox-3.0.10/doc/server-version-info
Normal file
@ -0,0 +1,47 @@
|
||||
Server VERSION Info
|
||||
|
||||
$Id: server-version-info 27381 2012-03-16 23:10:29Z dubkat $
|
||||
|
||||
Copyright (c) 2001 by ircd-hybrid team
|
||||
Copyright (c) 2002-2012 ircd-ratbox development team
|
||||
|
||||
----------------------------------------------------------------------
|
||||
|
||||
When you type /version, you will often see something like this:
|
||||
|
||||
ircd-ratbox-1.0rc7(20021120_0). embers.lan egGHIKMpZ6 TS5ow
|
||||
|
||||
Ever wondered what those funny chars mean after the version number? Well
|
||||
here they are:
|
||||
|
||||
+----------------------------+
|
||||
| 'e' | USE_EXCEPT |
|
||||
|------+---------------------|
|
||||
| 'g' | NO_FAKE_GLINES |
|
||||
|------+---------------------|
|
||||
| 'G' | GLINES |
|
||||
|------+---------------------|
|
||||
| 'H' | HUB |
|
||||
|------+---------------------|
|
||||
| 'I' | USE_INVEX |
|
||||
|------+---------------------|
|
||||
| 'K' | USE_KNOCK |
|
||||
|------+---------------------|
|
||||
| 'M' | IDLE_FROM_MSG |
|
||||
|------+---------------------|
|
||||
| 'p' | CRYPT_OPER_PASSWORD |
|
||||
|------+---------------------|
|
||||
| 'Z' | ZIPLINKS |
|
||||
|------+---------------------|
|
||||
| '6' | IPv6 |
|
||||
|------+---------------------|
|
||||
| | |
|
||||
|------+---------------------|
|
||||
| 'TS' | Supports TS |
|
||||
|------+---------------------|
|
||||
| '5' | TS Version 5 |
|
||||
|------+---------------------|
|
||||
| 'o' | TS Only |
|
||||
|------+---------------------|
|
||||
| 'w' | TS Warnings |
|
||||
+----------------------------+
|
55
ircd-ratbox-3.0.10/doc/services.txt
Normal file
55
ircd-ratbox-3.0.10/doc/services.txt
Normal file
@ -0,0 +1,55 @@
|
||||
- ratbox-services compatibility documentation - Lee H <lee -at- leeh.co.uk> -
|
||||
-----------------------------------------------------------------------------
|
||||
|
||||
Compatibility with ratbox-services can be enabled by passing the
|
||||
'--enable-services' flag to configure. It will add the following features
|
||||
to ircd:
|
||||
|
||||
- Channel mode +r -
|
||||
|
||||
A simple mode taking no parameters, will require users are logged in
|
||||
with user services before they may join the channel.
|
||||
|
||||
Gives numeric 477 to users who arent logged in:
|
||||
:<server> 477 <nick> <channel> :Cannot join channel (+r)
|
||||
|
||||
- service block to ircd.conf -
|
||||
|
||||
Ability to specify the names of services servers in ircd.conf:
|
||||
service {
|
||||
name = "services.ircd-ratbox.org";
|
||||
name = "backup-services.ircd-ratbox.org";
|
||||
};
|
||||
|
||||
These must be specified for certain features to work. You may specify as
|
||||
many name entries as you wish, however you must define only one service
|
||||
block.
|
||||
|
||||
Entries will be listed in stats U with the flag 's'.
|
||||
|
||||
- Services protection -
|
||||
|
||||
Services will be protected from being deopped or kicked from a channel.
|
||||
|
||||
- Username tracking through netsplits -
|
||||
|
||||
When users are logged in, the username they are logged in with will be
|
||||
preserved on a netsplit, so users will not have to relogin when the
|
||||
network merges together.
|
||||
|
||||
- Username given on WHOIS -
|
||||
|
||||
When users are logged in, WHOIS will also give numeric 330:
|
||||
:<server> 330 <yournick> <targetnick> <loginname> :is logged in as
|
||||
|
||||
Note this needs to be a remote whois to work when the target is
|
||||
on a different server.
|
||||
|
||||
- Forced nick change -
|
||||
|
||||
When using nickname services and a client requests they regain a
|
||||
nickname, services can perform a forced nick change on the client.
|
||||
This forcibly changes the clients nickname to the one they requested
|
||||
they regain, ensuring they can always regain their nickname.
|
||||
|
||||
# $Id: services.txt 23020 2006-09-01 18:20:19Z androsyn $
|
330
ircd-ratbox-3.0.10/doc/technical/README.TSora
Normal file
330
ircd-ratbox-3.0.10/doc/technical/README.TSora
Normal file
@ -0,0 +1,330 @@
|
||||
Protocol changes for +TSora
|
||||
---------------------------
|
||||
|
||||
|
||||
Note:
|
||||
|
||||
The protocols described here implement TimeStamps on IRC channels and
|
||||
nicks. The idea of IRC TimeStamps was started on Undernet, and first
|
||||
implemented by Run <carlo@runaway.xs4all.nl>. The protocols used here
|
||||
are not exactly the same as the ones used on Undernet; the nick-kill
|
||||
handling is very similar and must be credited to Run, while the
|
||||
"TimeStamped channel description" protocol is quite different.
|
||||
|
||||
|
||||
|
||||
TSora servers keep track of which version of the TS protocol (if any)
|
||||
their neighboring servers are using, and take it into account when
|
||||
sending messages to them. This allows for seamless integration of TS
|
||||
servers into a non-TS net, and for upgrades of the protocol.
|
||||
|
||||
Each server knows which is the lowest and the highest version of the
|
||||
TS protocol it can interact with; currently both of these are set to 1:
|
||||
|
||||
#define TS_CURRENT 1 /* the highest TS ver we can do */
|
||||
#define TS_MIN 1 /* the lowest TS ver we can do */
|
||||
|
||||
|
||||
Timings and TS versions:
|
||||
========================
|
||||
|
||||
. Keep a 'delta' value to be added to the result of all calls to time(),
|
||||
initially 0.
|
||||
|
||||
. Send a second argument to the PASS command, ending in the 'TS' string.
|
||||
|
||||
. Send a
|
||||
|
||||
SVINFO <TS_CURRENT> <TS_MIN> <STANDALONE> :<UTC-TIME>
|
||||
|
||||
just after "SERVER", where <STANDALONE> is 1 if we're connected to
|
||||
more TSora servers, and 0 if not, and <UTC-TIME> is our idea of the
|
||||
current UTC time, fixed with the delta.
|
||||
|
||||
. When we receive a "SVINFO <x> <y> <z> :<t>" line from a connecting
|
||||
server, we ignore it if TS_CURRENT<y or x<TS_MIN, otherwise we
|
||||
set a flag remembering that that server is TS-aware, remember the TS
|
||||
version to use with it (min(TS_CURRENT, x)). Additionally, if this is
|
||||
our first connected TS server, we set our delta to t-<OUR_UTC> if
|
||||
z==0, and to (t-<OUR_UTC>)/2 if z!=0. The SVINFO data is kept around
|
||||
until the server has effectively registered with SERVER, and used
|
||||
*after* sending our own SVINFO to that server.
|
||||
|
||||
|
||||
Explanations:
|
||||
|
||||
Servers will always know which of their directly-linked servers can do
|
||||
TS, and will use the TS protocol only with servers that do understand
|
||||
it. This makes it possible to switch to full TS in just one
|
||||
code-replacement step, without incompatibilities.
|
||||
|
||||
As long as not all servers are TS-aware, the net will be divided into
|
||||
"zones" of linked TS-aware servers. Channel modes will be kept
|
||||
synchronized at least within the zone in which the channel was
|
||||
created, and nick collisions between servers in the same zone will
|
||||
result in only one client being killed.
|
||||
|
||||
Time synchronization ensures that servers have the same idea of the
|
||||
current time, and achieves this purpose as long as TS servers are
|
||||
introduced one by one within the same 'zone'. The merging of two zones
|
||||
cannot synchronize them completely, but it is to be expected that
|
||||
within each zone the effective time will be very close to the real
|
||||
time.
|
||||
|
||||
By sending TSINFO after SERVER rather than before, we avoid the extra
|
||||
lag created by the identd check on the server. To be able to send
|
||||
immediately a connect burst of either type (TS or not), we need to
|
||||
know before that if the server does TS or not, so we send that
|
||||
information with PASS as an extra argument. And to avoid being
|
||||
incompatible with 2.9 servers, which check that this second argument
|
||||
begins with "2.9", we check that it *ends* with "TS".
|
||||
|
||||
The current time is only used when setting a TS on a new channel or
|
||||
nick, and once such a TS is set, it is never modified because of
|
||||
synchronization, as it is much more important that the TS for a
|
||||
channel or nick stays the same across all servers than that it is
|
||||
accurate to the second.
|
||||
|
||||
Note that Undernet's 2.8.x servers have no time synchronization at
|
||||
all, and have had no problems because of it - all of this is more to
|
||||
catch the occasional server with a way-off clock than anything.
|
||||
|
||||
|
||||
NICK handling patches (anti-nick-collide + shorter connect burst):
|
||||
==================================================================
|
||||
|
||||
. For each nick, store a TS value = the TS value received if any, or our
|
||||
UTC+delta at the time we first heard of the nick. TS's are propagated
|
||||
to TS-aware servers whenever sending a NICK command.
|
||||
|
||||
. Nick changes reset the TS to the current time.
|
||||
|
||||
. When sending a connect burst to another TS server, replace the
|
||||
NICK/USER pair with only one NICK command containing the nick, the
|
||||
hopcount, the TS, the umode, and all the USER information.
|
||||
|
||||
The format for a full NICK line is:
|
||||
NICK <nick> <hops> <TS> <umode> <user> <host> <server> :<ircname>
|
||||
|
||||
The umode is a + followed by any applying usermodes.
|
||||
|
||||
The format for a nick-change NICK line is:
|
||||
:<oldnick> NICK <newnick> :<TS>
|
||||
|
||||
. When a NICK is received from a TS server, that conflicts with an
|
||||
existing nick:
|
||||
+ if the userhosts differ or one is not known:
|
||||
* if the timestamps are equal, kill ours and the old one if it
|
||||
was a nick change
|
||||
* if the incoming timestamp is older than ours, kill ours and
|
||||
propagate the new one
|
||||
* if the incoming timestamp is younger, ignore the line, but kill
|
||||
the old nick if it was a nick change
|
||||
+ if the userhosts are the same:
|
||||
* if the timestamps are equal, kill ours and the old one if it
|
||||
was a nick change
|
||||
* if the incoming timestamp is younger, kill ours and propagate
|
||||
the new one
|
||||
* if the incoming timestamp is older, ignore the line but kill
|
||||
the old nick if it was a nick change
|
||||
|
||||
. When a NICK is received from a non-TS server that conflicts with
|
||||
an existing nick, kill both.
|
||||
|
||||
. Do not send "Fake Prefix" kills in response to lines coming from TS
|
||||
servers; the sanitization works anyway, and this allows the "newer
|
||||
nick overruled" case to work.
|
||||
|
||||
Explanations:
|
||||
|
||||
The modified nick-introduction syntax allows for a slightly shorter
|
||||
connect-burst, and most importantly lets the server compare
|
||||
user@host's when determining which nick to kill: if the user@host
|
||||
is the same, then the older nick must be killed rather than the
|
||||
newer.
|
||||
|
||||
When talking to a non-TS server, we need to behave exactly like one
|
||||
because it expects us to. When talkign to a TS server, we don't kill
|
||||
the nicks it's introducing, as we know it'll be smart enough to do it
|
||||
itself when seeing our own introduced nick.
|
||||
|
||||
When we see a nick arriving from a non-TS server, it won't have a TS,
|
||||
but it's safe enough to give it the current time rather than keeping
|
||||
it 0; such TS's won't be the same all across the network (as long as
|
||||
there is more than one TS zone), and when there's a collision, the TS
|
||||
used will be the one in the zone the collision occurs in.
|
||||
|
||||
Also, it is important to note that by the time a server sees (and
|
||||
chooses to ignore) a nick introduction, the introducing server has
|
||||
also had the time to put umode changes for that nick on its queue, so
|
||||
we must ignore them too... so we need to ignore fake-prefix lines
|
||||
rather than sending kills for them. This is safe enough, as the rest
|
||||
of the protocol ensures that they'll get killed anyway (and the
|
||||
Undernet does it too, so it's been more than enough tested). Just for
|
||||
an extra bit of compatibility, we still kill fake prefixes coming from
|
||||
non-TS servers.
|
||||
|
||||
This part of the TS protocol is almost exactly the same as the
|
||||
Undernet's .anc (anti-nick-collide) patches, except that Undernet
|
||||
servers don't add usermodes to the NICK line.
|
||||
|
||||
|
||||
TimeStamped channel descriptions (avoiding hacked ops and desynchs):
|
||||
====================================================================
|
||||
|
||||
. For each channel, keep a timestamp, set to the current time when the
|
||||
channel is created by a client on the local server, or to the received
|
||||
value if the channel has been propagated from a TS server, or to 0
|
||||
otherwise. This value will have the semantics of "the time of creation
|
||||
of the current ops on the channel", and 0 will mean that the channel
|
||||
is in non-TS mode.
|
||||
|
||||
A new server protocol command is introduced, SJOIN, which introduces
|
||||
a full channel description: a timestamp, all the modes (except bans),
|
||||
and the list of channel members with their ops and voices. This
|
||||
command will be used instead of JOIN and of (most) MODEs both in
|
||||
connect bursts and when propagating channel creations among TS
|
||||
servers. SJOIN will never be accepted from or sent to users.
|
||||
|
||||
The syntax for the command is:
|
||||
|
||||
SJOIN <TS> #<channel> <modes> :[@][+]<nick_1> ... [@][+]<nick_n>
|
||||
|
||||
The fields have the following meanings:
|
||||
|
||||
* <TS> is the timestamp for the channel
|
||||
|
||||
* <modes> is the list of global channel modes, starting with a +
|
||||
and a letter for each of the active modes (spmntkil), followed
|
||||
by an argument for +l if there is a limit, and an argument for
|
||||
+k if there's a key (in the same order they were mentioned in
|
||||
the string of letters).
|
||||
|
||||
A channel with no modes will have a "+" in that field.
|
||||
|
||||
A special value of "0" means that the server does not specify the
|
||||
modes, and will be used when more than one SJOIN line is needed
|
||||
to completely describe a channel, or when propagating a SJOIN
|
||||
the modes of which were rejected.
|
||||
|
||||
* Each nick is preceded by a "@" if the user has ops, and a "+" if
|
||||
the user has a voice. For mode +ov, both flags are used.
|
||||
|
||||
SJOINs will be propagated (when appropriate) to neighboring TS
|
||||
servers, and converted to JOINs and MODEs for neighboring non-TS
|
||||
servers.
|
||||
|
||||
To propagate channels for which not all users fit in one
|
||||
SJOIN line, several SJOINs will be sent consecutively, only the first
|
||||
one including actual information in the <mode> field.
|
||||
|
||||
An extra ad-hoc restriction is imposed on SJOIN messages, to simplify
|
||||
processing: if a channel has ops, then the first <nick> of the first
|
||||
SJOIN sent to propagate that channel must be one of the ops.
|
||||
|
||||
Servers will never attempt to reconstruct a SJOIN from JOIN/MODE
|
||||
information being received at the moment from other servers.
|
||||
|
||||
. For each user on a channel, keep an extra flag (like ops and voice)
|
||||
that is set when the user has received channel ops from another
|
||||
server (in a SJOIN channel description), which we rejected (ignored).
|
||||
Mode changes (but NOT kicks) coming from a TS server and from someone
|
||||
with this flag set will be ignored. The flag will be reset when the
|
||||
user gets ops from another user or server.
|
||||
|
||||
. On deops done by non-local users, coming from TS servers, on channels
|
||||
with a non-zero TS, do not check that the user has ops but check that
|
||||
their 'deopped' flag is not set. For kicks coming from a TS server, do
|
||||
not check either. This will avoid desynchs, and 'bad' modechanges are
|
||||
avoided anyway. Other mode changes will still only be taken into
|
||||
account and propagated when done by users that are seen as having ops.
|
||||
|
||||
. When a MODE change that ops someone is received from a server for a
|
||||
channel, that channel's TS is set to 0, and the mode change is
|
||||
propagated.
|
||||
|
||||
. When a SJOIN is received for a channel, deal with it in this way:
|
||||
* received-TS = 0:
|
||||
+ if we have ops or the SJOIN doesn't op anyone, SJOIN propagated
|
||||
with our own TS.
|
||||
+ otherwise, TS set to 0 and SJOIN propagated with 0.
|
||||
* received-TS > 0, own-TS = 0:
|
||||
+ if the SJOIN ops someone or we don't have ops, set our TS to the
|
||||
received TS and propagate.
|
||||
+ otherwise, propagate with TS = 0.
|
||||
* received-TS = own-TS: propagate.
|
||||
* received-TS < own-TS:
|
||||
+ if the SJOIN ops someone, remove *all* modes (except bans) from
|
||||
the channel and propagate these mode changes to all neighboring
|
||||
non-TS servers, and copy the received TS and propagate the SJOIN.
|
||||
+ if the SJOIN does not op anyone and we have ops, propagate
|
||||
with our own TS.
|
||||
+ otherwise, copy the received TS and propagate the SJOIN.
|
||||
* received-TS > own-TS:
|
||||
+ if the SJOIN does not introduce any ops, process and propagate
|
||||
with our own TS.
|
||||
+ if we have ops: for each person the mode change would op, set the
|
||||
'deopped' flag; process all the JOINs ignoring the '@' and '+'
|
||||
flags; propagate without the flags and with our TS.
|
||||
+ if we don't have ops: set our TS to the received one, propagate
|
||||
with the flags.
|
||||
|
||||
|
||||
Explanations:
|
||||
|
||||
This part of the protocol is the one that is most different (and
|
||||
incompatible) with the Undernet's: we never timestamp MODE changes,
|
||||
but instead we introduce the concept of time-stamped channel
|
||||
descriptions. This way each server can determine, based on its state
|
||||
and the received description, what the correct modes for a channel
|
||||
are, and deop its own users if necessary. With this protocol, there is
|
||||
*never* the need to reverse and bounce back a mode change. This is
|
||||
both faster and more bandwith-effective.
|
||||
|
||||
The end goal is to have a protocol will eventually protect channels
|
||||
against hacked ops, while minimizing the impact on a mixed-server net.
|
||||
In order to do this, whenever there is a conflict between a TS server
|
||||
and a non-TS one, the non-TS one's idea of the whole situation
|
||||
prevails. This means that channels will only have a TS when they have
|
||||
been created on a TS-aware server, and will lose it whenever a server
|
||||
op comes from a non-TS server. Also, at most one 'zone' will have a TS
|
||||
for any given channel at any given time, ensuring that there won't be
|
||||
any deops when zones are merged. However, when TS zones are merged, if
|
||||
the side that has a TS also has ops, then the TS is kept across the
|
||||
whole new zone. Effective protection will only be ensured once all
|
||||
servers run TS patches and channels have been re-created, as there is
|
||||
no way servers can assign a TS to a channel they are not creating
|
||||
(like they do with nicks) without having unwanted deops later.
|
||||
|
||||
The visible effects of this timestamped channel-description protocol
|
||||
are that when a split rejoins, and one side has hacked ops, the other
|
||||
side doesn't see any server mode changes (just like with Undernet's
|
||||
TS), but the side that has hacked ops sees:
|
||||
|
||||
* first the first server on the other side deopping and devoicing
|
||||
everyone, and fixing the +spmntkli modes
|
||||
* then other users joining, and getting server ops and voices
|
||||
|
||||
The less obvious part of this protocol is its behavior in the case
|
||||
that the younger side of a rejoin has servers that are lagged with
|
||||
each other. In such a situation, a SJOIN that clears all modes and
|
||||
sets the legitimate ones is being propagated from one server, and
|
||||
lagged illegitimate mode changes and kicks are being propagated in the
|
||||
opposite direction. In this case, a kick done by someone who is being
|
||||
deopped by the SJOIN must be taken into account to keep the name list
|
||||
in sync (and since it can only be kicking someone who also was on the
|
||||
younger side), while a deop does not matter (and will be ignored by
|
||||
the first server on the other side), and an opping *needs* to be
|
||||
discareded to avoid hacked ops.
|
||||
|
||||
The main property of timestamped channel descriptions that makes them
|
||||
a very stable protocol even with lag and splits, is that they leave a
|
||||
server in the same final state, independently of the order in which
|
||||
channel descriptions coming from different servers are received. Even
|
||||
when SJOINs and MODEs for the same channel are being propagated in
|
||||
different direction because of several splits rejoining, the final
|
||||
state will be the same, independently of the exact order in which each
|
||||
server received the SJOINs, and will be the same across all the
|
||||
servers in the same zone.
|
||||
|
||||
|
26
ircd-ratbox-3.0.10/doc/technical/cluster.txt
Normal file
26
ircd-ratbox-3.0.10/doc/technical/cluster.txt
Normal file
@ -0,0 +1,26 @@
|
||||
$Id: cluster.txt 23020 2006-09-01 18:20:19Z androsyn $
|
||||
|
||||
Short description of how remote kline and friends are propagated under
|
||||
the old hyb7 style (CAP_KLN etc) and under the new style over ENCAP.
|
||||
|
||||
CAP_KLN:
|
||||
:<source> KLINE <target> <time> <user> <host> :<reason>
|
||||
:<source> ENCAP <target> KLINE <time> <user> <host> :<reason>
|
||||
|
||||
CAP_UNKLN:
|
||||
:<source> UNKLINE <target> <user> <host>
|
||||
:<source> ENCAP <target> UNKLINE <user> <host>
|
||||
|
||||
CAP_CLUSTER:
|
||||
:<source> XLINE <target> <gecos> <type> :<reason>
|
||||
:<source> ENCAP <target> XLINE <time> <gecos> <type> :<reason>
|
||||
|
||||
:<source> UNXLINE <target> <gecos>
|
||||
:<source> ENCAP <target> UNXLINE <gecos>
|
||||
|
||||
:<source> RESV <target> <name> :<reason>
|
||||
:<source> ENCAP <target> RESV <time> <name> 0 :<reason>
|
||||
|
||||
:<source> UNRESV <target> <name>
|
||||
:<source> ENCAP <target> UNRESV <name>
|
||||
|
84
ircd-ratbox-3.0.10/doc/technical/event.txt
Normal file
84
ircd-ratbox-3.0.10/doc/technical/event.txt
Normal file
@ -0,0 +1,84 @@
|
||||
Overview of the event subsystem
|
||||
Adrian Chadd <adrian@creative.net.au>
|
||||
|
||||
$Id: event.txt 23020 2006-09-01 18:20:19Z androsyn $
|
||||
|
||||
|
||||
One of the things that immediately struck me whilst first looking at the
|
||||
code was that the ircd periodically scheduled things in io_loop() but
|
||||
it did them manually. This is very wasteful and very tedious.
|
||||
|
||||
Therefore, an event system was added to hybrid. src/event.c contains an
|
||||
event system ported from the squid web cache. It is pretty self contained,
|
||||
and only a few things (debugging, time resolution) needed changing.
|
||||
|
||||
An event is scheduled through eventAdd() or eventAddIsh() :
|
||||
|
||||
eventAdd(const char *name, EVH * func, void *arg, time_t when, int weight)
|
||||
eventAddIsh(const char *name, EVH * func, void *arg, time_t delta_ish,
|
||||
int weight)
|
||||
|
||||
after 'when' (or delta_ish) seconds has elapsed from the time the above
|
||||
functions are called, the 'func' is called with the given data 'arg'. The
|
||||
event is then deleted.
|
||||
|
||||
To delete an event, use eventDelete() :
|
||||
|
||||
eventDelete(EVH * func, void *arg)
|
||||
|
||||
An event is identified by its callback function and data pair.
|
||||
|
||||
Events are run through eventRun(). This is designed to be called *BEFORE*
|
||||
your IO handlers, to let events scheduled immediately (ie a time of 0)
|
||||
to initiate IO before the IO handlers are called.
|
||||
|
||||
(Believe me, its useful.)
|
||||
|
||||
|
||||
|
||||
Example:
|
||||
|
||||
Say you have something which must be called every 15 seconds.
|
||||
|
||||
* You would first define the callback in your module:
|
||||
|
||||
static EVH foo_periodic_event;
|
||||
static int initialised = 0;
|
||||
|
||||
* You would then add the event in your initialization function:
|
||||
|
||||
void foo_init(void)
|
||||
{
|
||||
if (!initialised) {
|
||||
eventAdd("foo_periodic_event", foo_periodic_event, NULL, 0, 0);
|
||||
initialised = 1;
|
||||
}
|
||||
}
|
||||
|
||||
This will force the event to be called the next time eventRun() is called,
|
||||
rather than waiting 15 seconds.
|
||||
|
||||
* You then define your event callback:
|
||||
|
||||
static void
|
||||
foo_periodic_event(void *data)
|
||||
{
|
||||
/* We'd do our work here */
|
||||
|
||||
/* Then we'd finish */
|
||||
eventAdd("foo_periodic_event", foo_periodic_event, NULL, 15, 0);
|
||||
}
|
||||
|
||||
|
||||
Notes:
|
||||
|
||||
* I really should change the timeout value to be in milliseconds. Squid used
|
||||
a double, but Dianora had something against floating point code in the main
|
||||
loop (which is understandable). If someone wants a fun task .. :-)
|
||||
|
||||
* Note that the 'name' parameter to eventAdd() / eventAddIsh() is a const
|
||||
char *, and is *not copied* but *referenced*. Therefore, it is in your
|
||||
best interest to use string constants.
|
||||
|
||||
* /stats E for an oper shows pending events. Thanks Diane!
|
||||
|
81
ircd-ratbox-3.0.10/doc/technical/fd-management.txt
Normal file
81
ircd-ratbox-3.0.10/doc/technical/fd-management.txt
Normal file
@ -0,0 +1,81 @@
|
||||
Overview of the filedescriptor subsystem
|
||||
Adrian Chadd <adrian@creative.net.au>
|
||||
|
||||
$Id: fd-management.txt 23020 2006-09-01 18:20:19Z androsyn $
|
||||
|
||||
|
||||
Filedescriptor lists
|
||||
--------------------
|
||||
|
||||
The filedescriptor list is managed through the routines in fdlist.c .
|
||||
These include:
|
||||
|
||||
fd_open() - tag an FD as "open" and active
|
||||
fd_close() - tag an FD as "closed" and close() the filedescriptor
|
||||
fd_note() - update the filedescriptor tag
|
||||
|
||||
You can get the current list of open filedescriptors through /stats F as
|
||||
an oper.
|
||||
|
||||
|
||||
|
||||
FD lists
|
||||
--------
|
||||
|
||||
The FD list support is very alpha. There are a few lists defined:
|
||||
|
||||
typedef enum fdlist_t {
|
||||
FDLIST_NONE,
|
||||
FDLIST_SERVICE,
|
||||
FDLIST_SERVER,
|
||||
FDLIST_IDLECLIENT,
|
||||
FDLIST_BUSYCLIENT,
|
||||
FDLIST_MAX
|
||||
} fdlist_t;
|
||||
|
||||
FDLIST_NONE Not on any list (ie close()d)
|
||||
FDLIST_SERVICE A service - listen() sockets, resolver, etc
|
||||
FDLIST_SERVER Server connections
|
||||
FDLIST_IDLECLIENT An idle client
|
||||
FDLIST_BUSYCLIENT A busy client
|
||||
FDLIST_MAX Used for bounds checking
|
||||
|
||||
The idea is that the SERVICE sockets need polling frequently, the SERVER
|
||||
sockets also need polling frequently, BUSYCLIENT is for busy clients
|
||||
which need frequent polling (eg we're trying to write to them), and
|
||||
IDLECLIENT is for clients which we don't need to poll frequently.
|
||||
THIS hasn't been decided upon yet.
|
||||
|
||||
|
||||
|
||||
File operations
|
||||
---------------
|
||||
|
||||
The file operations are also wrapped through file_open() and file_close()
|
||||
which handle calling fd_open() / fd_close() and tracking the filedescriptors
|
||||
correctly. fbopen() / fbclose() use file_open() / file_close() too.
|
||||
|
||||
fileio.c defines the functions:
|
||||
|
||||
int
|
||||
file_open(const char *filename, int mode, int fmode)
|
||||
|
||||
A wrapper around open(filename, flags, mode). Read the open manpage for
|
||||
information. file_open() enforces filedescriptor limits and tags the FD
|
||||
through fd_open().
|
||||
|
||||
void
|
||||
file_close(int fd)
|
||||
|
||||
A wrapper around close() for files. close() handles fd_close()ing the fd.
|
||||
|
||||
|
||||
FBFILE *
|
||||
fbopen(const char *filename, const char *mode)
|
||||
|
||||
void
|
||||
fbclose(FBFILE *fb)
|
||||
|
||||
These are the 'buffered disk IO' routines. You can read the code yourself.
|
||||
Note that these routines use file_open() and file_close().
|
||||
|
37
ircd-ratbox-3.0.10/doc/technical/file-management.txt
Normal file
37
ircd-ratbox-3.0.10/doc/technical/file-management.txt
Normal file
@ -0,0 +1,37 @@
|
||||
Overview of the file management subsystem
|
||||
Adrian Chadd <adrian@creative.net.au>
|
||||
|
||||
$Id: file-management.txt 23020 2006-09-01 18:20:19Z androsyn $
|
||||
|
||||
|
||||
File operations
|
||||
---------------
|
||||
|
||||
The file operations are also wrapped through file_open() and file_close()
|
||||
which handle calling fd_open() / fd_close() and tracking the filedescriptors
|
||||
correctly. fbopen() / fbclose() use file_open() / file_close() too.
|
||||
|
||||
fileio.c defines the functions:
|
||||
|
||||
int
|
||||
file_open(const char *filename, int mode, int fmode)
|
||||
|
||||
A wrapper around open(filename, flags, mode). Read the open manpage for
|
||||
information. file_open() enforces filedescriptor limits and tags the FD
|
||||
through fd_open().
|
||||
|
||||
void
|
||||
file_close(int fd)
|
||||
|
||||
A wrapper around close() for files. close() handles fd_close()ing the fd.
|
||||
|
||||
|
||||
FBFILE *
|
||||
fbopen(const char *filename, const char *mode)
|
||||
|
||||
void
|
||||
fbclose(FBFILE *fb)
|
||||
|
||||
These are the 'buffered disk IO' routines. You can read the code yourself.
|
||||
Note that these routines use file_open() and file_close().
|
||||
|
115
ircd-ratbox-3.0.10/doc/technical/hostmask.txt
Normal file
115
ircd-ratbox-3.0.10/doc/technical/hostmask.txt
Normal file
@ -0,0 +1,115 @@
|
||||
The hostmask/netmask system.
|
||||
Copyright(C) 2001 by Andrew Miller(A1kmm)<a1kmm@mware.virtualave.net>
|
||||
$Id: hostmask.txt 23020 2006-09-01 18:20:19Z androsyn $
|
||||
|
||||
Contents
|
||||
========
|
||||
* Section 1: Motivation
|
||||
* Section 2: Underlying mechanism
|
||||
- 2.1: General overview.
|
||||
- 2.2: IPv4 netmasks.
|
||||
- 2.3: IPv6 netmasks.
|
||||
- 2.4: Hostmasks.
|
||||
* Section 3: Exposed abstraction layer
|
||||
- 3.1: Parsing masks.
|
||||
- 3.2: Adding configuration items.
|
||||
- 3.3: Initialising or rehashing.
|
||||
- 3.4: Finding IP/host confs.
|
||||
- 3.5: Deleting entries.
|
||||
- 3.6: Reporting entries.
|
||||
|
||||
Section 1: Motivation
|
||||
=====================
|
||||
Looking up config hostnames and IP addresses(such as for I-lines and
|
||||
K-lines) needs to be implemented efficiently. It turns out a hash
|
||||
based algorithm like that employed here performs well on the average
|
||||
case, which is what we should be the most concerned about. A profiling
|
||||
comparison with the mtrie code using data from a real network confirmed
|
||||
that this algorithm performs much better.
|
||||
|
||||
Section 2: Underlying mechanism
|
||||
===============================
|
||||
2.1: General overview
|
||||
---------------------
|
||||
In short, a hash-table with linked lists for buckets is used to locate
|
||||
the correct hostname/netmask entries. In order to support CIDR IPs and
|
||||
wildcard masks, the entire key cannot be hashed, and there is a need to
|
||||
rehash. The means for deciding how much to hash differs between hostmasks
|
||||
and IPv4/6 netmasks.
|
||||
|
||||
2.2: IPv4 netmasks
|
||||
------------------
|
||||
In order to hash IPv4 netmasks for addition to the hash, the mask is first
|
||||
processed to a 32 bit address and a number of bits used. All unused bits
|
||||
are set to 0. The mask could be in the forms:
|
||||
1.2.3.4 => 1.2.3.4 32
|
||||
1.2.3.* => 1.2.3.0 24
|
||||
1.2 => 1.2.0.0 16
|
||||
1.2.3.64/26 => 1.2.3.64 26
|
||||
The number of whole bytes is then calculated, and only those bytes are
|
||||
hashed. (e.g. 1.2.3.64/26 and 1.2.3.0/24 hash the same).
|
||||
When a complete IPv4 address is given so that an IPv4 match can be found,
|
||||
the entire IP address is first hashed, and looked up in the table. Then
|
||||
the most significant three bytes are hashed, followed by the most
|
||||
significant two, the most significant one, and finally the 'identity hash'
|
||||
bucket is searched(to match masks like 192/7).
|
||||
|
||||
2.3: IPv6 netmasks
|
||||
------------------
|
||||
As per IPv4 netmasks, except that instead of rehashing with a one byte
|
||||
granularity, a 16 bit(two byte) granularity is used, as 16 rehashes is
|
||||
considered too great a fixed offset to be justified for a (possible)
|
||||
slight reduction in hash collisions.
|
||||
|
||||
2.4: Hostmasks
|
||||
--------------
|
||||
On adding a hostmask to the hash, all of the hostmask right of the next
|
||||
dot after the last wildcard character in the string is hashed, or in the
|
||||
case that there are no wildcards in the hostmask, the entire string is
|
||||
hashed.
|
||||
On searching for a hostmask match, the entire hostname is hashed, followed
|
||||
by the entire hostmask after the first dot, followed by the entire
|
||||
hostmask after the second dot, and so on. Finally, the 'identity' hash
|
||||
bucket is checked, to catch hostnames like *test*.
|
||||
|
||||
Section 3: Exposed abstraction layer
|
||||
====================================
|
||||
Section 3.1: Parsing masks
|
||||
--------------------------
|
||||
Call "parse_netmask()" with the netmask and a pointer to an irc_inaddr
|
||||
structure to be filled in, as well as a pointer to an integer where the
|
||||
number of bits will be placed.
|
||||
Always check the return value. If it returns HM_HOST, it means that the
|
||||
mask is probably a hostname mask. If it returns HM_IPV4, it means it was
|
||||
an IPv4 address. If it returns HM_IPV6, it means it was an IPv6 address.
|
||||
If parse_netmask returns HM_HOST, no change is made to the irc_inaddr
|
||||
structure or the number of bits.
|
||||
|
||||
Section 3.2: Adding configuration items
|
||||
---------------------------------------
|
||||
Call "add_conf_by_address" with the hostname or IP mask, the username,
|
||||
and the ConfItem* to associate with this mask.
|
||||
|
||||
Section 3.3: Initialising and rehashing
|
||||
----------------------------------------
|
||||
To initialise, call init_host_hash(). This only needs to be done once on
|
||||
startup.
|
||||
On rehash, to wipe out the old unwanted conf, and free them if there are
|
||||
no references to them, call clear_out_address_conf().
|
||||
|
||||
Section 3.4: Finding IP/host confs
|
||||
----------------------------------
|
||||
Call find_address_conf() with the hostname, the username, the address,
|
||||
and the address family.
|
||||
To find a d-line, call find_dline() with the address and address family.
|
||||
|
||||
Section 3.5: Deletiing entries
|
||||
------------------------------
|
||||
Call delete_one_address_conf() with the hostname and the ConfItem*.
|
||||
|
||||
Section 3.6: Reporting entries
|
||||
------------------------------
|
||||
Call report_dlines, report_exemptlines, report_Klines() or report_Ilines()
|
||||
with the client pointer to report to. Note these walk the hash, which is
|
||||
inefficient, but these are not called often enough to justify the memory
|
||||
and maintenance clockcycles to for more efficient data structure.
|
19
ircd-ratbox-3.0.10/doc/technical/index.txt
Normal file
19
ircd-ratbox-3.0.10/doc/technical/index.txt
Normal file
@ -0,0 +1,19 @@
|
||||
Technical Documentation for ircd-hybrid-7
|
||||
|
||||
Persistent_Clients.txt - A global UID and Persistent client (with cookies)
|
||||
proposal
|
||||
README.TSora - Description of the TS3 protocol
|
||||
README.openssl - Information for users who have problems with
|
||||
Hybrid, OpenSSL, and their operating system
|
||||
cryptlink.txt - Outline of CRYPTLINK protocol
|
||||
event.txt - Outline of the event system
|
||||
fd-management.txt - Outline of the file descriptor management system
|
||||
file-management.txt - Outline of the disk file management system
|
||||
hostmask.txt - Outline of hostmask handling
|
||||
linebuf.txt - Outline of the linebuf system (dbuf replacement)
|
||||
network.txt - Outline of the network traffic subsystem
|
||||
rfc1459.txt - The IRC RFC
|
||||
send.txt - Document on all of the send_to functions
|
||||
whats-new-code.txt - Whats changed in the code
|
||||
|
||||
# $Id: index.txt 23020 2006-09-01 18:20:19Z androsyn $
|
139
ircd-ratbox-3.0.10/doc/technical/linebuf.txt
Normal file
139
ircd-ratbox-3.0.10/doc/technical/linebuf.txt
Normal file
@ -0,0 +1,139 @@
|
||||
|
||||
linebuf - a dbuf replacement for the New World Order(tm)
|
||||
|
||||
By Adrian Chadd <adrian@creative.net.au>
|
||||
|
||||
$Id: linebuf.txt 23020 2006-09-01 18:20:19Z androsyn $
|
||||
|
||||
|
||||
History
|
||||
-------
|
||||
|
||||
I could probably learn the dbuf history, but basically its evil. The
|
||||
general idea is that a dbuf holds incoming and outgoing data streams.
|
||||
The trouble is that well.. it was evil. You can check it out by getting
|
||||
the old src/dbuf.c and include/dbuf.h files if you really want.
|
||||
|
||||
|
||||
Replacement
|
||||
-----------
|
||||
|
||||
The linebuf system is a replacement for the dbuf code. The general idea here
|
||||
is that the data should be buffered in "lines" rather than just linearly
|
||||
like in the dbuf code. This lends to easier manipulation at a later date
|
||||
(think flushing data lines to a socket, and even "sharing" linebufs to
|
||||
reduce the copying required for one to many delivery.)
|
||||
|
||||
The linebuf system is broken into two structures, the buf_head and buf_line .
|
||||
buf_head contains the buffer information (queue head/tail, length, allocated
|
||||
length and the write offset for flushing), and buf_line contains the
|
||||
line buffer information (buffer and various flags.)
|
||||
|
||||
linebuf->terminated is *only* set when a CR/LF combination is received.
|
||||
|
||||
linebuf->overflow is set if we get more data than we should, and we simply
|
||||
truncate the incoming data.
|
||||
|
||||
linebuf->flushing is set when we are currently writing the buffer. We should
|
||||
_NEVER_ be appending to a buffer which we're flushing!
|
||||
|
||||
When you get a buffer through linebuf_get() or write one through
|
||||
linebuf_flush(), it will *always* be terminated with a CR/LF (and a NUL if
|
||||
its a linebuf_get()).
|
||||
|
||||
|
||||
Linebuf manipulation
|
||||
--------------------
|
||||
|
||||
To use a linebuf, you simply stick a buf_head_t in your structure somewhere.
|
||||
You then use the following routines:
|
||||
|
||||
int
|
||||
linebuf_parse(buf_head_t *bufhead, char *buf, int len)
|
||||
|
||||
Parse the given buf. This routine does some complex manipulation:
|
||||
|
||||
- if there is an incomplete buffer at the tail, buf is parsed to try and
|
||||
fill that incomplete buffer
|
||||
- a buffer is completed by a CR/LF/CRLF/LFCR. It accepts everything purely
|
||||
because I wanted to be "liberal in what you accept" ..
|
||||
- If a buffer is terminated, the linebuf is flagged terminated
|
||||
- If more data is trying to be squeezed into the buffer than space LEFT
|
||||
in the buffer, we skip to the next "CRLF", and tag the buffer terminated
|
||||
_and_ overflowed.
|
||||
- We treat multiple runs of CR/LF/CRLF/LFCR as a single CRLF. This is just
|
||||
a little extra goody to stop people sending hundreds of "CRLF"s and creating
|
||||
unnecessary buffers.
|
||||
- The number of lines parsed is returned (so you can implement per-line flood
|
||||
protection ..)
|
||||
|
||||
|
||||
void
|
||||
linebuf_put(buf_head_t *bufhead, char *buf, int len)
|
||||
|
||||
Parse the given buf, ASSUMING it is a single buffer line. This is useful
|
||||
for server-generated messages where you know you have a single line, and
|
||||
you don't want to go through the overhead of parsing the data just for
|
||||
this.
|
||||
|
||||
|
||||
int
|
||||
linebuf_get(buf_head_t *bufhead, char *buf, int maxlen)
|
||||
|
||||
Get a single line from the buffer. This removes data from the head of the
|
||||
buffer. If the first buffer is empty or is not terminated, 0 is returned
|
||||
which indicates that there is no data to parse. Terminated buffers are
|
||||
returned (CR/LF/NUL), and the length INCLUDING the CR/LF/NUL is returned.
|
||||
The buffer is copied and the linebuf is then deallocated.
|
||||
|
||||
|
||||
int
|
||||
linebuf_flush(int fd, buf_head_t *bufhead)
|
||||
|
||||
Attempt to flush some data to the given socket. bufhead->writeofs tracks
|
||||
where in the head buffer we currently are. If the buffer is not terminated,
|
||||
-1 is returned with errno == EWOULDBLOCK to simulate a "retry me" condition.
|
||||
(See TODO..)
|
||||
|
||||
linebuf_flush() returns whatever write() returns, and sets (ie doesn't touch
|
||||
after write()) errno accordingly.
|
||||
|
||||
|
||||
int
|
||||
linebuf_len(buf_head_t *bufhead)
|
||||
|
||||
Return the length of the buffer, in bytes. This should be used when calculating
|
||||
how big a buffer is for statistics.
|
||||
|
||||
|
||||
int
|
||||
linebuf_alloclen(buf_head_t *bufhead)
|
||||
|
||||
Return how big the *allocated* space is. This is much more suitable for
|
||||
anti-flood checking, as someone might be sending a whole bunch of 1-byte
|
||||
linebufs which might not trigger a recvq / sendq limit but might chew up
|
||||
way too much memory.
|
||||
|
||||
|
||||
|
||||
Notes
|
||||
-----
|
||||
|
||||
* Remember that the trailing NUL isn't covered in the string length.
|
||||
|
||||
|
||||
Limitations
|
||||
-----------
|
||||
|
||||
* all the buffers are a fixed size - here they are current 513 bytes
|
||||
(510 bytes + CR/LF/NUL)
|
||||
|
||||
|
||||
TODO
|
||||
----
|
||||
|
||||
* linebuf_flush() should be changed a little so if the buffer isn't
|
||||
terminated, we *dont* retry flushing a buffer until we get more data.
|
||||
|
||||
* Implement a reference-friendly linebuf to reduce copies ..
|
||||
|
105
ircd-ratbox-3.0.10/doc/technical/network.txt
Normal file
105
ircd-ratbox-3.0.10/doc/technical/network.txt
Normal file
@ -0,0 +1,105 @@
|
||||
Overview of the network subsystem
|
||||
Adrian Chadd <adrian@creative.net.au>
|
||||
|
||||
$Id: network.txt 23020 2006-09-01 18:20:19Z androsyn $
|
||||
|
||||
|
||||
This document is an overview of the new and hopefully improved network
|
||||
subsystem.
|
||||
|
||||
The code is based loosely upon the network core found in the Squid web cache
|
||||
server, with some optimizations for ircd-specific IO patterns.
|
||||
|
||||
|
||||
|
||||
Filedescriptor IO
|
||||
-----------------
|
||||
|
||||
Filedescriptor IO is initiated using comm_setselect(). comm_setselect()
|
||||
registers interest in reading from or writing to a file descriptor.
|
||||
When a filedescriptor is ready for the required IO a callback is called
|
||||
from the IO loop.
|
||||
|
||||
The comm_setselect() usage is:
|
||||
|
||||
void
|
||||
comm_setselect(int fd, fdlist_t list, int type, PF *callback, void *cbdata,
|
||||
int timeout)
|
||||
|
||||
where:
|
||||
fd filedescriptor
|
||||
list Which list the FD should be put on
|
||||
type IO type. Can currently include:
|
||||
COMM_SELECT_READ - register for read
|
||||
COMM_SELECT_WRITE - register for write
|
||||
callback Function to call when the FD is ready
|
||||
cbdata Data to be passed to above function
|
||||
timeout Update the timeout value. 0 is "don't update".
|
||||
|
||||
|
||||
A typical use is:
|
||||
|
||||
..
|
||||
|
||||
/* Register interest in the FD for a read event */
|
||||
comm_setselect(fd, FDLIST_SERVICE, COMM_SELECT_READ, read_callback, read_data,
|
||||
0);
|
||||
|
||||
..
|
||||
|
||||
(FD becomes ready for read in the IO loop)
|
||||
|
||||
void
|
||||
read_callback(int fd, void *data)
|
||||
{
|
||||
/* called when the FD becomes ready for read */
|
||||
retval = read(fd, buf, len);
|
||||
|
||||
..
|
||||
/* Ok, we need to read some more when its ready */
|
||||
comm_setselect(fd, FDLIST_SERVICE, COMM_SELECT_READ, read_callback, data,
|
||||
0);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
Socket timeouts
|
||||
---------------
|
||||
|
||||
A "socket timeout" is a callback registered to be called when a certain
|
||||
amount of time has elapsed. Think of it as an event, but against a FD.
|
||||
|
||||
A good example of socket timeouts is in the comm_connect_tcp() code.
|
||||
When the connect() begins, comm_settimeout() is called to call
|
||||
comm_connect_timeout() if the timeout occurs. Once the connect() completes,
|
||||
comm_settimeout() is called with a timeout of 0 and callback of NULL
|
||||
to deregister the timeout. If the timeout occurs, comm_connect_timeout()
|
||||
is called and the connection attempt is aborted.
|
||||
|
||||
|
||||
|
||||
|
||||
Functions
|
||||
---------
|
||||
|
||||
comm_open() - a socket() wrapper, enforcing fd limitations and tagging the
|
||||
file descriptor with a note
|
||||
|
||||
comm_accept() - an accept() wrapper, enforcing fd limitations and tagging
|
||||
the file descriptor with a note
|
||||
|
||||
comm_connect_tcp() - attempt an async connect(). Handles DNS lookups if
|
||||
required, and will call the given callback at completion or error
|
||||
|
||||
comm_settimeout() - set a callback to be called after a given time period.
|
||||
This is good to implement things like PING checks and connect() timeouts.
|
||||
|
||||
Notes:
|
||||
|
||||
* All socket creation should go through comm_open() / comm_accept().
|
||||
* All socket closing should go through fd_close(). comm_close() isn't
|
||||
implemented yet.
|
||||
* comm_connect_tcp() is your best friend. :-)
|
||||
* *ALL* network sockets should be non-blocking. If your OS doesn't support
|
||||
non-blocking sockets, you shouldn't be here.
|
3643
ircd-ratbox-3.0.10/doc/technical/rfc1459.txt
Normal file
3643
ircd-ratbox-3.0.10/doc/technical/rfc1459.txt
Normal file
File diff suppressed because it is too large
Load Diff
293
ircd-ratbox-3.0.10/doc/technical/send.txt
Normal file
293
ircd-ratbox-3.0.10/doc/technical/send.txt
Normal file
@ -0,0 +1,293 @@
|
||||
|
||||
send.c re-work
|
||||
|
||||
PREFIXES
|
||||
========
|
||||
|
||||
Server prefixes are the ":%s" strings at the beginning of messages.
|
||||
They are used by servers to route the message properly and by servers to
|
||||
local clients to update their idea of who is whom.
|
||||
|
||||
":nick!user@host" is a prefix ":name" where name is either a nick
|
||||
or name of a server is another valid prefix.
|
||||
|
||||
Typical prefix for a local client to a channel:
|
||||
|
||||
":Dianora!db@irc.db.net"
|
||||
|
||||
for a prefix to a remote server:
|
||||
":Dianora"
|
||||
|
||||
e.g. as seen locally on a channel:
|
||||
|
||||
":Dianora!db@irc.db.net PRIVMSG #us-opers :ON TOP OF ...\r\n"
|
||||
|
||||
e.g. as seen sent to a remote server:
|
||||
":Dianora PRIVMSG #us-opers :ON TOP OF ...\r\n"
|
||||
|
||||
It has been argued that full prefixes sent locally are a waste of bandwidth
|
||||
(Isomer from Undernet has argued this). i.e. instead of sending:
|
||||
":nick!user@host" for a local prefix, one could just send ":nick"..
|
||||
Unfortunately, this breaks many clients badly. Personally I feel that
|
||||
until clients are updated to understand that a full prefix isn't always
|
||||
going to be sent, that this should be held off on.
|
||||
|
||||
As much as possible, prefix generation is now moved "upstairs" as
|
||||
much as possible. i.e. if its known its a local client only, then the
|
||||
onus of the prefix generation, is the users, not hidden in send.c
|
||||
This allows somewhat faster code to be written, as the prefix doesn't
|
||||
have to be regenerated over and over again.
|
||||
|
||||
Prefixes aren't sent in all cases, such as a new user using NICK
|
||||
A prefix is needed when it must be routed.
|
||||
|
||||
i.e.
|
||||
|
||||
NICK newnick
|
||||
|
||||
There is obviously no prefix needed from a locally connected client.
|
||||
|
||||
|
||||
|
||||
FUNCTIONS
|
||||
=========
|
||||
|
||||
sendto_one() - Should be used for _local_ clients only
|
||||
it expects the prefix to be pre-built by user.
|
||||
|
||||
usage - sendto_one(struct Client *to, char *pattern, ...);
|
||||
|
||||
typical use:
|
||||
|
||||
sendto_one(acptr,":%s NOTICE %s :I'm tired", me.name);
|
||||
Note: This was from a server "me" hence only one
|
||||
name in prefix.
|
||||
|
||||
This would be an example of a client sptr, noticing
|
||||
acptr IF acptr is known to be a local client:
|
||||
|
||||
sendto_one(acptr,":%s!%s@%s NOTICE %s :You there?",
|
||||
sptr->name,
|
||||
sptr->username,
|
||||
sptr->host,
|
||||
acptr->name);
|
||||
|
||||
sendto_channel_butone()
|
||||
- This function sends a var args message to a channel globally,
|
||||
except to the client specified as "one", the prefix
|
||||
is built by this function on the fly as it has to
|
||||
be sent both to local clients on this server and to
|
||||
remote servers.
|
||||
|
||||
usage - sendto_channel_butone(struct Client *one,
|
||||
struct Client *from,
|
||||
struct Channel *chptr,
|
||||
const char *pattern, ... );
|
||||
|
||||
sendto_channel_butone(cptr, sptr, chptr
|
||||
"PRIVMSG %s :HI!",
|
||||
chptr->chname);
|
||||
|
||||
e.g. if channel message is coming from "cptr"
|
||||
it must not be sent back to cptr.
|
||||
|
||||
|
||||
sendto_ll_serv_butone(struct Client *one, struct Client *sptr, int add,
|
||||
const char *pattern, ...)
|
||||
|
||||
- This function is almost identical to sendto_channel_butone
|
||||
however, it will also not send on a nick as given by sptr,
|
||||
if target server does not "know" about it.
|
||||
As the name implies, it is used for "lazylinks"
|
||||
|
||||
sendto_serv_butone()
|
||||
- This function sends specified var args message
|
||||
to all connected servers except the client "one"
|
||||
|
||||
usage - sendto_serv_butone(struct Client *one,
|
||||
const char *pattern, ... );
|
||||
|
||||
sendto_cap_serv_butone()
|
||||
- This function sends specified var args message
|
||||
to all connected servers except the client "one"
|
||||
with capability specified.
|
||||
NOTE: sendto_serv_butone() could be replaced with
|
||||
a generalized version of this function. i.e.
|
||||
CAP_ALL
|
||||
|
||||
usage - sendto_cap_serv_butone(int cap,
|
||||
struct Client *one,
|
||||
const char *pattern, ... );
|
||||
|
||||
sendto_common_channels_local()
|
||||
- This function is used only by m_nick and exit_one_client
|
||||
its used to propagate nick changes to all channels user
|
||||
is in, and QUIT messages to all channels user is in.
|
||||
As it only sends to local clients, prefix generation
|
||||
is left to the user. It also sends the message to the
|
||||
user if the user isn't on any channels.
|
||||
|
||||
usage - sendto_common_channels_local(struct Client *user,
|
||||
const char *pattern,
|
||||
...);
|
||||
|
||||
sendto_channel_local()
|
||||
- This function is used only to send locally, never
|
||||
to remote servers. This is useful when removing
|
||||
local chanops, or adding a local chanop. MODE/SJOIN
|
||||
sent to remote server allows that server to propagate
|
||||
mode changes to its clients locally.
|
||||
|
||||
usage - sendto_channel_local(type,
|
||||
struct Channel *chptr,
|
||||
const char *pattern, ... );
|
||||
|
||||
|
||||
prefix must be pre-built. type is a flag
|
||||
denoting ONE of
|
||||
ALL_MEMBERS - all members locally are sent to
|
||||
NON_CHANOPS - only non-chanops see this
|
||||
ONLY_CHANOPS_VOICED - both chanops and voiced see this
|
||||
ONLY_CHANOPS - only chanops see this
|
||||
|
||||
|
||||
sendto_match_butone()
|
||||
match_it() - both only used for the old style oper masking
|
||||
i.e. /msg #hostmask which in hyb7 is /msg $#hostmask
|
||||
or /msg $servermask in hyb7 /msg $$servermask
|
||||
|
||||
usage - match_it(struct Client *one,
|
||||
const char *mask,
|
||||
int what);
|
||||
|
||||
one is the client to match on either hostmask or servermask
|
||||
mask is the actual mask
|
||||
what is either MATCH_HOST or MATCH_SERVER
|
||||
|
||||
usage - sendto_match_butone(struct Client *one,
|
||||
struct Client *from,
|
||||
char *mark,
|
||||
int what,
|
||||
const char *pattern, ... );
|
||||
|
||||
sendto_channel_remote()
|
||||
- Is only used to send a message to a remote server
|
||||
|
||||
|
||||
sendto_match_cap_servs()
|
||||
- Is used only to send MODE lists to remote server
|
||||
who are capable of it. i.e. MODE #channel +e nick!user@host
|
||||
|
||||
sendto_match_noncap_servs()
|
||||
- Is used only to send MODE lists to remote servers that
|
||||
are not capable of it. i.e. MODE #channel +o nick
|
||||
- This allows you to send a MODE #channel +h nick via
|
||||
sendto_match_cap_servs and MODE #channel +o nick to
|
||||
servers which dont support it.
|
||||
|
||||
sendto_anywhere()
|
||||
- Allows the sending of a message to any client on the net
|
||||
without knowing whether its local or remote. The penalty
|
||||
is the calculation of a run-time prefix.
|
||||
It is less efficient then sendto_one()
|
||||
|
||||
usage - sendto_anywhere(struct Client *to,
|
||||
struct Client *from,
|
||||
const char *pattern, ...);
|
||||
|
||||
e.g.
|
||||
sendto_anywhere(acptr, sptr,
|
||||
"PRIVMSG Larz :Hi, Where ever you are");
|
||||
|
||||
sendto_realops_flags()
|
||||
- combines old sendto_realops and sendto_realops_flags
|
||||
sends specified message to opers locally only
|
||||
depending on flags. FLAGS_ALL is a special case
|
||||
to send to any oper.
|
||||
|
||||
usage - sendto_realops_flags(int flags,
|
||||
const char *pattern, ... );
|
||||
|
||||
e.g.
|
||||
sendto_realops_flags(FLAGS_ALL,
|
||||
"Don't eat the yellow snow");
|
||||
|
||||
sendto_wallops_flags()
|
||||
- sends specified message to opers locally,
|
||||
depending on flags. used for messages that need
|
||||
to be in wallops form
|
||||
|
||||
usage - sendto_wall_flags(int flags,
|
||||
struct Client *, const char *patterm ...);
|
||||
|
||||
e.g.
|
||||
sendto_wallops_flags(FLAGS_LOCOPS,
|
||||
sptr, "Message");
|
||||
|
||||
ts_warn() - Only used to send warning messages to all opers
|
||||
without flooding them with warnings.
|
||||
It limits the number of warnings to no more than 5
|
||||
every 5 seconds. It probably can go away now.
|
||||
|
||||
usage - ts_warn(const char *pattern, ... );
|
||||
|
||||
*** LOCAL HELPER FUNCTIONS (static) ***
|
||||
|
||||
sendto_format() - Used to format a varargs buffer into given buffer
|
||||
returns length of buffer built, enforces RFC1459 length
|
||||
limits and appends \r\n as per rfc.
|
||||
|
||||
usage - sendto_format(char *sendbuf,
|
||||
const char *pattern, ... );
|
||||
|
||||
send_trim() - This local function simply trims a char string
|
||||
to fit inside 512 bytes as per rfc1459, adding
|
||||
a cr/lf pair as needed. It does not check to make
|
||||
sure original string has a cr/lf.
|
||||
|
||||
usage - int send_trim(char buffer, int len);
|
||||
returns length as modified or not,
|
||||
modifies buffer in-place.
|
||||
|
||||
sendto_list_local()
|
||||
- This local function sends given message to given dlink_list
|
||||
with data == a local client. This is used by
|
||||
sendto_common_channels_local() and by
|
||||
sendto_channel_local()
|
||||
|
||||
It could easily be extended to sendto "groups" of
|
||||
otherwise unrelated users, not just channel groups.
|
||||
|
||||
usage - sendto_list_local(dlink_list *list,
|
||||
const char *sendbuf,
|
||||
int len);
|
||||
|
||||
|
||||
sendto_list_anywhere()
|
||||
- This local function sends a message to all members
|
||||
as given in a dlink_list, whether they are remote or local
|
||||
clients. It is used by sendto_channel_butone()
|
||||
|
||||
It could easily be extended to sendto "groups" of
|
||||
otherwise unrelated users, not just channel groups.
|
||||
|
||||
usage: sendto_list_anywhere(struct Client *one,
|
||||
struct Client *from,
|
||||
dlink_list *list,
|
||||
const char *local_sendbuf,
|
||||
int local_len,
|
||||
const char *remote_sendbuf,
|
||||
int remote_len);
|
||||
|
||||
|
||||
send_message()
|
||||
- This local function does the actual send of message
|
||||
|
||||
usage: send_message(struct Client *to, char *msg, int len);
|
||||
|
||||
The message has to be pre-formatted and the length
|
||||
must be pre-calculated.
|
||||
|
||||
-- Diane Bruce
|
||||
|
||||
$Id: send.txt 23020 2006-09-01 18:20:19Z androsyn $
|
151
ircd-ratbox-3.0.10/doc/technical/ts5.txt
Normal file
151
ircd-ratbox-3.0.10/doc/technical/ts5.txt
Normal file
@ -0,0 +1,151 @@
|
||||
Overview of the TS5 system
|
||||
Lee H <lee@leeh.co.uk>
|
||||
|
||||
$Id: ts5.txt 23020 2006-09-01 18:20:19Z androsyn $
|
||||
|
||||
For the purposes of this document, ircd versions:
|
||||
hybrid6.0
|
||||
ircd-comstud-1.12
|
||||
CSr31pl4
|
||||
|
||||
and prior, are TS3.
|
||||
|
||||
ircd-hybrid-6.2 and later support TS5.
|
||||
|
||||
|
||||
Whats TS5?
|
||||
----------
|
||||
|
||||
The difference between TS5 and TS3 is what happened on opless channels. TS
|
||||
works by establishing which server has the oldest version of the channel,
|
||||
the version that is oldest, keeps its modes and ops, the version that is
|
||||
youngest, removes their modes and ops, and accepts the older version.
|
||||
|
||||
There was an exception to this rule with opless channels, if a channel was
|
||||
opless, TS3 would allow anybody to keep their ops and modes on the channel.
|
||||
TS5 aims to stop this, by removing this exception.
|
||||
|
||||
Example1:
|
||||
|
||||
An irc network, with server A (every server is ts3)
|
||||
|
||||
UserA is on ServerA, in channel #broken. This channel is opless, and has a
|
||||
TS of 800000000. ServerA splits, and whilst it is split, UserA cycles
|
||||
channel #broken, recreates the channel and is given ops. On ServerA #broken
|
||||
now has a TS of 900000000 and has ops. ServerA rejoins with the network,
|
||||
via HubB. HubB realises #broken is opless, so allows UserA to retain ops.
|
||||
The TS is moved forward to 900000000.
|
||||
|
||||
The network now sees #broken as having a TS of 900000000, with UserA being
|
||||
opped.
|
||||
|
||||
Example2:
|
||||
|
||||
An irc network, with server C (every server is ts5)
|
||||
|
||||
Same scenario as above. ServerC splits and UserC cycles channel #broken,
|
||||
recreating it with a TS of 900000000. ServerC rejoins with the network via
|
||||
HubD. HubD realises #broken has a TS of 800000000 locally, and ServerC is
|
||||
showing a TS of 900000000, it ignores ServerC's modes and ops. The channel
|
||||
remains opless. ServerC receives HubD's modes, and it notices HubD has a
|
||||
lower TS of channel #broken. It removes UserC's ops, removes the channel
|
||||
modes on #broken, and accepts HubD's status.
|
||||
|
||||
The network version of #broken hasnt changed. It is still opless, with a TS
|
||||
of 800000000.
|
||||
|
||||
|
||||
As you can see, TS5 makes splitting a server to regain ops useless, as it
|
||||
cannot be abused to give ops after a netsplit.
|
||||
|
||||
The problem with TS5 however, is what happens on a mixed TS5/TS3 network.
|
||||
Channels where the older TS has ops will behave the same way on TS5 and TS3,
|
||||
however an opless channel will behave differently, as you can see above.
|
||||
|
||||
The result of TS5/TS3 mixed can be a desync:
|
||||
|
||||
Example1:
|
||||
|
||||
As per Example1 above, except the rest of the network is TS5, ServerA is
|
||||
TS3. ServerA would keep its modes and ops, whilst the rest of the network
|
||||
would remove them. This means only ServerA would see UserA as opped. The
|
||||
desync can be abused, as UserA can send modes. Hybrid6.0 servers will
|
||||
accept these modes from the unopped client, so if UserA ops UserB, who then
|
||||
ops UserA, the channel will be the same across all Hybrid6.0 and Hybrid6.1
|
||||
servers.
|
||||
|
||||
Example2:
|
||||
|
||||
As per Example2 above, except the rest of the network is TS3. ServerC is
|
||||
TS5. ServerC would remove its modes and ops, therefore UserC would not be
|
||||
opped on ServerC, therefore it could not send any mode changes to the
|
||||
channel. Although it is opped elsewhere, it isnt opped locally, so the
|
||||
desync cannot be abused.
|
||||
|
||||
As you can see, the desync's that can occur can either be resynced, or are
|
||||
useless to the user, so a mixed TS5/TS3 network is not a huge problem,
|
||||
although a desync is NOT a good thing to have.
|
||||
|
||||
|
||||
Why TS5?
|
||||
--------
|
||||
|
||||
We have jumped to TS5 from TS3, because there was a version of ircd that was
|
||||
TS4, so it was thought better to avoid a clash with an existing version.
|
||||
|
||||
|
||||
Advantages
|
||||
----------
|
||||
|
||||
Its a realistic event that a server will be attacked so it splits off a
|
||||
network, then used to regain ops in a channel. TS5 makes this pointless,
|
||||
the server will never give ops on a netsplit. TS5 is network wide, so it
|
||||
leaves individual servers free to choose options like NO_JOIN_ON_SPLIT,
|
||||
whilst keeping splits useless to users.
|
||||
|
||||
|
||||
Disadvantages
|
||||
-------------
|
||||
|
||||
Its virtually impossible for a user to actively regain ops themselves (some
|
||||
regard this as an advantage..) because on a large sized channel, its
|
||||
impossible to get people to leave so it can be recreated, therefore if a
|
||||
network did not have some form of services, it could possibly end up
|
||||
requiring oper intervention, as you cant get everybody to leave, and you
|
||||
cant use splits to regain ops, therefore if the channel is open (an
|
||||
invite-only channel would gradually destroy itself as noone new can join) it
|
||||
could be impossible for a user to regain ops.
|
||||
|
||||
On a network that has some form of services, The effect of TS5 would be
|
||||
minimal, however the services must be of sufficient quality to fix opless
|
||||
channels, as TS5 renders netsplits for ops worthless.
|
||||
|
||||
|
||||
Recommendations
|
||||
---------------
|
||||
|
||||
If your network has good stable services, we recommend TS5 is enabled, as
|
||||
people have no reason to abuse netsplits anyway.
|
||||
|
||||
If your network has no services at all, then TS5 may cause problems with
|
||||
users being left with a permanently opless channel.
|
||||
|
||||
If your network occupies the middle ground, then its a choice between users
|
||||
needing to be able to use splits to regain ops, or making netsplits that are
|
||||
caused to regain ops worthless.
|
||||
|
||||
If TS5 is chosen, the FULL network must upgrade and this should be done in a
|
||||
relatively short space of time to minimise the possible desync effects.
|
||||
|
||||
|
||||
Alternatives
|
||||
------------
|
||||
|
||||
There is also NO_JOIN_ON_SPLIT and NO_OP_ON_SPLIT, however these use the
|
||||
configuration of minimum servers and users, and sometimes a split that is
|
||||
above these limits is enough to be abused to regain ops, whereas if the
|
||||
limits are too high, clients will never be able to join anything or be opped
|
||||
when they create a channel.
|
||||
|
||||
|
||||
EOF
|
1010
ircd-ratbox-3.0.10/doc/technical/ts6-protocol.txt
Normal file
1010
ircd-ratbox-3.0.10/doc/technical/ts6-protocol.txt
Normal file
File diff suppressed because it is too large
Load Diff
299
ircd-ratbox-3.0.10/doc/technical/ts6.txt
Normal file
299
ircd-ratbox-3.0.10/doc/technical/ts6.txt
Normal file
@ -0,0 +1,299 @@
|
||||
$Id: ts6.txt 23628 2007-02-14 19:03:07Z leeh $
|
||||
|
||||
TS6 Proposal (v8)
|
||||
Written by Lee H <lee@leeh.co.uk>
|
||||
Ideas borrowed heavily from ircnet (Beeth, jv, Q)
|
||||
|
||||
- Changes between v7 and v8 -
|
||||
-----------------------------
|
||||
|
||||
In the v7 specification, the JOIN command included the channel modes of a
|
||||
channel, and acted on them following TS rules. In the v8 specification,
|
||||
JOIN will never send modes.
|
||||
|
||||
Desyncs can occur both when they are sent and when they are not. If they
|
||||
are sent, then you can have a situation where a user on one side of the
|
||||
network issues "MODE #channel -l", and a user on another side of the network
|
||||
issues "JOIN #channel" whilst the +l still exists. As the JOIN string sent
|
||||
server<->server includes the full modes at the time of the user joining,
|
||||
this will propagate the +l, but there is a -l crossing in the other
|
||||
direction. Desync will occur beyond where they intersect.
|
||||
|
||||
If the modes are not sent, then a lower TS JOIN command, or a JOIN command
|
||||
that creates a channel will cause a desync.
|
||||
|
||||
It is judged that the desync with sending the modes is worse than the desync
|
||||
by not sending them, as such the v8 specification dictates modes are not
|
||||
sent with a JOIN command server<->server.
|
||||
|
||||
The v8 specification also clarifies that servers may issue TMODE.
|
||||
|
||||
- Introduction -
|
||||
----------------
|
||||
|
||||
This document aims to fix some of the flaws that are still present in the
|
||||
current TS system.
|
||||
|
||||
Whilst only one person may use a nickname at any one time, they are not
|
||||
a reliable method of directing commands between servers. Clients can change
|
||||
their nicknames, which can create desyncs. A reliable method of directing
|
||||
messages between servers is required so that a message will always reach the
|
||||
intended destination, even if the client changes nicks in between.
|
||||
|
||||
UID solves this problem by ensuring that a client has a unique ID for the
|
||||
duration of his connection.
|
||||
|
||||
This document also aims to solve the lack of TS rules to channel 'bans' on
|
||||
a netburst. Bans from both sides of a TS war (losing/winning) are kept.
|
||||
Bursting the bans with a TS solves this problem.
|
||||
|
||||
There is also a race condition in the current TS system, where a user can
|
||||
issue a mode during a netburst and the mode will be set on the server
|
||||
we are bursting to.
|
||||
|
||||
|
||||
- Definitions -
|
||||
---------------
|
||||
|
||||
Throughout this document, the following terms are used:
|
||||
|
||||
SID - A servers unique ID. This is three characters long and must be in
|
||||
the form [0-9][A-Z0-9][A-Z0-9]
|
||||
ID - A clients unique ID. This is six characters long and must be in
|
||||
the form [A-Z][A-Z0-9][A-Z0-9][A-Z0-9][A-Z0-9][A-Z0-9]. The
|
||||
numbers [0-9] at the beginning of an ID are legal characters, but
|
||||
reserved for future use.
|
||||
UID - An ID concateneted to a SID. This forms the clients UID.
|
||||
TS6 - The TS version 6.
|
||||
|
||||
|
||||
- Support -
|
||||
-----------
|
||||
|
||||
Support for this document is given by the TS version 6.
|
||||
|
||||
Wherever a destination parameter or source parameter is used, it must use
|
||||
the SID or UID if the server/client has one. A TS6 capable server must
|
||||
translate any SIDs/UIDs back into the server/clients name when communicating
|
||||
with a server that does not support TS6.
|
||||
|
||||
A TS6 server must also support the QS (quitstorm) system, and the encap
|
||||
specification found here:
|
||||
http://www.leeh.co.uk/ircd/encap.txt
|
||||
|
||||
The TS6 protocol does not supports masked entities.
|
||||
|
||||
|
||||
- Nick TS rules -
|
||||
-----------------
|
||||
|
||||
A server receiving a command that requires nick TS rules must check for a
|
||||
collision between an existing user, and the nick in the received message.
|
||||
(the "new user"). The collisions must obey the rules specified in Nick TS
|
||||
collisions.
|
||||
|
||||
If the TS received is lower than the TS of the existing user the server will
|
||||
collide the existing user if the clients user@host are different, if the
|
||||
clients user@hosts are identical it will collide the new user.
|
||||
|
||||
If the TS received is equal to the TS of the existing user both clients are
|
||||
collided.
|
||||
|
||||
If the TS received is higher than the TS of the existing user, the server
|
||||
will collide the existing user if the user@hosts are identical, if the
|
||||
clients user@host are different it will collide the new user and drop the
|
||||
message.
|
||||
|
||||
|
||||
- Nick TS collisions -
|
||||
----------------------
|
||||
|
||||
If both users are to be collided, we must issue a KILL for the existing
|
||||
user to all servers. If the new user has a UID then we must also issue a
|
||||
KILL for that UID back to the server sending us data causing the collision.
|
||||
|
||||
If only the existing user is being collided, we must issue a KILL for the
|
||||
existing user to all servers except the server sending us data. If the
|
||||
existing user has a UID and the server sending us data supports TS6 then
|
||||
we must also issue a KILL for the existing users UID to the server sending
|
||||
us data.
|
||||
|
||||
If only the new user is being collided, we must issue a KILL for the new user
|
||||
back to the server sending us data if the new user has a UID.
|
||||
|
||||
|
||||
- Channel TS rules -
|
||||
--------------------
|
||||
|
||||
A server receiving a command that requires normal channel TS rules must
|
||||
apply the following rules to the command.
|
||||
|
||||
If the TS received is lower than our TS of the channel a TS6 server must
|
||||
remove status modes (+ov etc) and channel modes (+nt etc). If the
|
||||
originating server is TS6 capable (ie, it has a SID), the server must
|
||||
also remove any ban modes (+b etc). The new modes and statuses are then
|
||||
accepted.
|
||||
|
||||
If any bans are removed, the server must send to non-TS6, directly connected
|
||||
servers mode changes removing the bans after the command is propagated.
|
||||
This prevents desync with banlists, and has to be sent after as clients are
|
||||
still able to send mode changes before the triggering command arrives.
|
||||
|
||||
If the TS received is equal to our TS of the channel the server should keep
|
||||
its current modes and accept the received modes and statuses.
|
||||
|
||||
If the TS received is higher than our TS of the channel the server should keep
|
||||
its current modes and ignore the received modes and statuses. Any statuses
|
||||
given in the received message will be removed. A server must mark clients
|
||||
losing their op (+o) status who do not have a UID as 'deopped'. A server must
|
||||
ignore any "MODE" commands from a user marked as 'deopped'.
|
||||
|
||||
|
||||
- Simple channel TS rules -
|
||||
---------------------------
|
||||
|
||||
A server receiving a command that requires simple channel TS rules must
|
||||
apply the following rules to the command.
|
||||
|
||||
If the TS received is lower, or equal to our TS of the channel the modes are
|
||||
accepted. If the TS received is higher than our TS of the channel the modes
|
||||
are ignored and dropped.
|
||||
|
||||
Simple channel TS rules do not affect current modes in the channel except
|
||||
for the modes we are accepting.
|
||||
|
||||
|
||||
- The following commands are defined here as the TS6 protocol -
|
||||
---------------------------------------------------------------
|
||||
|
||||
- PASS -
|
||||
PASS <PASSWORD> TS <TS_CURRENT> :<SID>
|
||||
|
||||
This command is used for password verification with the server we are
|
||||
connecting to.
|
||||
|
||||
Due to the burst being sent on verification of the "SERVER" command, and
|
||||
"SVINFO" being sent after "SERVER", we need to be aware of the TS version
|
||||
earlier to decide whether to send a TS6 burst or not.
|
||||
|
||||
The <PASSWORD> field is the password we have stored for this server,
|
||||
<TS_CURRENT> is our current TS version. If this field is not present then
|
||||
the server does not support TS6. <SID> is the SID of the server.
|
||||
|
||||
- UID -
|
||||
:<SID> UID <NICK> <HOPS> <TS> +<UMODE> <USERNAME> <HOSTNAME> <IP> <UID> :<GECOS>
|
||||
|
||||
This command is used for introducing clients to the network.
|
||||
|
||||
The <SID> field is the SID of the server the client is connected to.
|
||||
The <NICK> field is the nick of the client being introduced. The <HOPS>
|
||||
field is the amount of server hops between the server being burst to and
|
||||
the server the client is on. The <TS> field is the TS of the client, either
|
||||
the time they connected or the time they last changed nick. The <UMODE>
|
||||
field contains the clients usermodes that need to be transmitted between
|
||||
servers. The <USERNAME> field contains the clients username/ident. The
|
||||
<HOSTNAME> field contains the clients host.
|
||||
|
||||
The <IP> field contains the clients IP. If the IP is not to be sent
|
||||
(due to a spoof etc), the field must be sent as "0". The <UID> field is the
|
||||
clients UID. The <GECOS> field is the clients gecos.
|
||||
|
||||
A server receiving a UID command must apply nick TS rules to the nick.
|
||||
|
||||
- SID -
|
||||
:<SID> SID <SERVERNAME> <HOPS> <SID> :<GECOS>
|
||||
|
||||
This command is used for introducing servers to the network.
|
||||
|
||||
The first <SID> field is the SID of the new servers uplink. The
|
||||
<SERVERNAME> field is the new servers name. The <HOPS> field is the hops
|
||||
between the server being introduced nd the server being burst to.
|
||||
|
||||
The second <SID> field is the SID of the new server. The <GECOS> field i
|
||||
is the new servers gecos.
|
||||
|
||||
Upon receiving the SID command servers must check for a SID collision.
|
||||
Two servers must not be allowed to link to the network with the same SID.
|
||||
If a server detects a SID collision it must drop the link to the directly
|
||||
connected server through which the command was received.
|
||||
|
||||
Client and servers which do not have a UID/SID must be introduced by old
|
||||
methods.
|
||||
|
||||
- SJOIN -
|
||||
:<SID> SJOIN <TS> <CHANNAME> +<CHANMODES> :<UIDS>
|
||||
|
||||
This command is used for introducing users to channels.
|
||||
|
||||
The <SID> field is the SID of the server introducing users to the channel.
|
||||
The <TS> field is the channels current TS, <CHANNAME> is the channels
|
||||
current name, <CHANMODES> are the channels current modes. <UIDS> is a
|
||||
space delimited list of clients UIDs to join to the channel. Each clients
|
||||
UID is prefixed with their status on the channel, ie "@UID" for an opped
|
||||
user. Multiple prefixes are allowed, "peons" (clients without a status) are
|
||||
not prefixed.
|
||||
|
||||
A server receiving an SJOIN must apply normal channel TS rules to the SJOIN.
|
||||
|
||||
A TS6 server must not use the SJOIN command outside of a netburst
|
||||
to introduce a single user to an existing channel. It must instead
|
||||
use the "JOIN" command defined in this specification. A TS6 server must
|
||||
still use SJOIN for creating channels.
|
||||
|
||||
- JOIN -
|
||||
:<UID> JOIN <TS> <CHANNAME> +
|
||||
|
||||
This command is used for introducing one user unopped to an existing channel.
|
||||
|
||||
The <UID> field is the UID of the client joining the channel. The
|
||||
<TS> field is the channels current TS, <CHANNAME> is the channels
|
||||
current name.
|
||||
|
||||
A server receiving a JOIN must apply normal channel TS rules to the JOIN.
|
||||
|
||||
No channel modes are sent with the JOIN command. In previous versions of
|
||||
this specification, the "+" parameter contained the channels current modes.
|
||||
A server following this version of the specification must not interpret this
|
||||
argument and must not propagate any value other than "+" for this parameter.
|
||||
|
||||
It should be noted that whilst JOIN would not normally create a
|
||||
channel or lower the timestamp, during specific conditions it can. This
|
||||
can create a desync that this specification does not rectify.
|
||||
|
||||
- BMASK -
|
||||
:<SID> BMASK <TS> <CHANNAME> <TYPE> :<MASKS>
|
||||
|
||||
This command is used for bursting channel bans to a network.
|
||||
|
||||
The <SID> field is the SID of the server bursting the bans. The
|
||||
<TS> field is the channels current TS, <CHANNAME> is the channels
|
||||
name. <TYPE> is a single character identifying the mode type (ie,
|
||||
for a ban 'b'). <MASKS> is a space delimited list of masks of the
|
||||
given mode,limited only in length to the size of the buffer as defined
|
||||
by RFC1459.
|
||||
|
||||
A server receiving a BMASK must apply simple channel TS rules to the BMASK.
|
||||
|
||||
A TS6 server must translate BMASKs into raw modes for non-TS6
|
||||
capable servers. This command must be used only after SJOIN has
|
||||
been sent for the given channel.
|
||||
|
||||
It should be noted however, that a BMASK with a lower TS should
|
||||
not be possible without a desync, due to it being sent after
|
||||
SJOIN.
|
||||
|
||||
- TMODE -
|
||||
:<SID|UID> TMODE <TS> <CHANNAME> <MODESTRING>
|
||||
|
||||
This command is used for clients issuing modes on a channel.
|
||||
|
||||
<SID|UID> is either the UID of the client setting the mode, or the SID of
|
||||
the server setting the mode. <TS> is the current TS of the channel,
|
||||
<CHANNAME> is the channels name. <MODESTRING> is the raw mode the client is
|
||||
setting.
|
||||
|
||||
A server receiving a TMODE must apply simple channel TS rules to the TMODE.
|
||||
|
||||
A TS6 server must translate MODEs issued by a local client, or received from
|
||||
a server into TMODE to send to other TS6 capable servers.
|
||||
|
38
ircd-ratbox-3.0.10/doc/tgchange.txt
Normal file
38
ircd-ratbox-3.0.10/doc/tgchange.txt
Normal file
@ -0,0 +1,38 @@
|
||||
- Target Change for Messages -
|
||||
- Lee H <lee -at- leeh.co.uk> -
|
||||
-------------------------------
|
||||
|
||||
If the server you are using uses the target change mechanism, then
|
||||
restrictions are placed on how many different users you can message in a set
|
||||
timeframe.
|
||||
|
||||
Target change does not apply to channels, ctcp replies or messages to
|
||||
yourself.
|
||||
|
||||
You will have a set number of 'slots', each different client you message
|
||||
will take up one slot. A client doing a nick change will not use a new slot,
|
||||
however a client leaving the network and reconnecting will. You will
|
||||
receive 1 new slot roughly every minute.
|
||||
|
||||
When all slots are filled, messages to new clients will not be accepted.
|
||||
Messages to clients already filling a slot will be accepted. If all slots
|
||||
are full, you will receive the ERR_TARGCHANGE numeric, number 707 in the
|
||||
form:
|
||||
:<server> 707 <yournick> <targetnick> :Targets changing too fast, message dropped
|
||||
|
||||
The slots are operated as a FIFO (first in, first out), so the first person
|
||||
you message will be the first person removed from a slot, even if you are
|
||||
still talking to this person.
|
||||
|
||||
The number of slots in use will be kept through a reconnection, though the
|
||||
information in those slots will be dropped. However, you will always
|
||||
receive one free slot on a reconnection. Other servers using this mechanism
|
||||
will also be made aware of details about slots.
|
||||
|
||||
Target change can be avoided via the CNOTICE and CPRIVMSG commands, when you
|
||||
are opped or voiced in a channel, and you are messaging a client within that
|
||||
channel. See /quote help cnotice and /quote help cprivmsg for more
|
||||
information.
|
||||
|
||||
--
|
||||
$Id: tgchange.txt 23020 2006-09-01 18:20:19Z androsyn $
|
113
ircd-ratbox-3.0.10/doc/whats-new-2.0.txt
Normal file
113
ircd-ratbox-3.0.10/doc/whats-new-2.0.txt
Normal file
@ -0,0 +1,113 @@
|
||||
$Id: whats-new-2.0.txt 23020 2006-09-01 18:20:19Z androsyn $
|
||||
|
||||
The following is a list of major changes between ircd-ratbox-1.x and
|
||||
ircd-ratbox-2.0
|
||||
|
||||
Config File
|
||||
-----------
|
||||
- name="foo"; is no longer supported in connect {}; operator {}; and
|
||||
class {};. You must now use connect "irc.foo.com" { ... }; etc.
|
||||
- operator {}; no longer contains a class
|
||||
- kline_with_connection_closed is gone, replaced with
|
||||
kline_reason = "Connection closed";
|
||||
- logging {}; is gone, replaced with more advanced log system - see
|
||||
example.conf log {}; for more info. Note, by default only very basic
|
||||
information will be logged.
|
||||
- support for a specific opers initial umodes on /oper, by umodes = ...;
|
||||
in operator {};
|
||||
- added stats_e_disabled = yes|no; to general {};, controlling whether stats
|
||||
e (which can contain server ips) is never shown to anyone
|
||||
- support for compressed|encrypted|topicburst|autoconn = yes|no; is gone,
|
||||
replaced with flags = compressed, encrypted, topicburst, autoconn;
|
||||
- support for individual auth flags "kline_exempt = yes"; etc removed, now
|
||||
must use flags = ...; method
|
||||
- support for individual oper flags "kline = yes;" etc removed, now must use
|
||||
flags = ...; method.
|
||||
- extended flags = ...; method to allow negation, so you may prefix a flag
|
||||
with '~' to negate it. Default oper flags are operwall, remoteban and
|
||||
encrypted (indicates password is encrypted with mkpasswd)
|
||||
- new flags in shared {};, tkline, txline and tresv, allowing temp only of
|
||||
kline, xline and resv respectively.
|
||||
- new flags in cluster {}; tkline, txline and tresv which will cluster
|
||||
only the temp of each type. kline, xline and resv will now only
|
||||
cluster the permanent ones of each type.
|
||||
- cluster {}; no longer allows a server to place klines etc locally, it
|
||||
simply dictates who we send to.
|
||||
- shared {}; is now ordered top-down and the first one that matches the
|
||||
user@host and server will be used, and the flags taken from this. This
|
||||
means if a remote oper matches a shared block without kline privs, even
|
||||
though there is a shared {}; block they match under it with kline privs
|
||||
they will not be able to place klines.
|
||||
- added invite_ops_only to channel {}; which will restrict the use of INVITE
|
||||
to chanops on that channel always, rather than just to +i chans.
|
||||
|
||||
Client
|
||||
------
|
||||
- /help is now available for all users, as its now cached in memory.
|
||||
removes config option use_help from general {};
|
||||
- default CHANNELLEN for local clients is now 50
|
||||
- AWAYLEN added to 005, default is 90
|
||||
- kick/part/quit now use REASONLEN (120) rather than TOPICLEN
|
||||
- umode +g now exempts users messaging themselves
|
||||
|
||||
Oper
|
||||
----
|
||||
- kline/dline <nick> is no longer supported
|
||||
- oper reasons are now more fully supported
|
||||
- opers can now be hidden from stats p, by flag "invisible"
|
||||
- XLINEs no longer contain a type field, theyll now all just silently reject
|
||||
- xlines are now 'tracked' - stats X shows how many times each xline has
|
||||
rejected a client
|
||||
- temp xlines and resvs
|
||||
- klines set against spoofed users will now take effect when the user
|
||||
connects as well, if the user is not kline_exempt
|
||||
- trace spy now contains target param if its against a single user
|
||||
- the old "you need xline=yes;" notices have been replaced by ERR_NOPRIVS
|
||||
(numeric 723)
|
||||
- umode +C, machine parsable client connect/exit notices which includes the
|
||||
two unused fields sent in the USER command
|
||||
|
||||
Channels
|
||||
--------
|
||||
- persistent channels have been removed
|
||||
- quiet_on_ban now uses a cache, which should speed it up
|
||||
|
||||
Server <-> Server Protocol
|
||||
--------------------------
|
||||
- support for bursting away messages on connect, controlled by
|
||||
burst_away = yes|no; in general {};
|
||||
- TS6, the new server <-> server protocol. As part of this you *must*
|
||||
specify a "sid" in serverinfo {}; that is three alphanumeric characters,
|
||||
and must start with a digit. use_ts6 = yes|no; in general controls
|
||||
whether it is actually used or not. For more information, see:
|
||||
http://www.ircd-ratbox.org/TS6.txt
|
||||
- fakename in connect {}; is gone, you can no longer mask servers.
|
||||
- support for encrypted links are gone
|
||||
- global capabilities. The server will now inform the rest of the network
|
||||
over ENCAP about the capabilities of other servers.
|
||||
|
||||
Misc
|
||||
----
|
||||
- support for message translation has been removed. If you want these,
|
||||
modify messages.tab and distribute that.
|
||||
- most of server hiding is gone, only thing that is left is flattened links
|
||||
- flattened links cache is now stored in memory instead of a file
|
||||
- nick delay. any client which splits will have their nick 'locked', until
|
||||
a remote client uses this nick, or until it expires after the time nick_delay
|
||||
in general {}. This prevents the masses of kills from clients 'regaining'
|
||||
nicknames on a short split.
|
||||
- support for disabling bold chars etc in channel names for local users, to
|
||||
prevent faking channels. disable_fake_channels = <yes|no>; in general {};
|
||||
|
||||
Code cleanups
|
||||
-------------
|
||||
- remove mapped ipv4 in ipv6 sockets, the correct native socket will now be
|
||||
used for each.
|
||||
- module API has been rewritten, 1.x modules will no longer work.
|
||||
- hook API has been rewritten
|
||||
- proper handlers for ENCAP commands
|
||||
- support for vms ast i/o
|
||||
- connect {}; and operator {}; are now in their own structs, saving memory
|
||||
in ConfItem
|
||||
- shared/cluster now use the same struct and flags
|
||||
- various other code cleanups thatd take all year to list ;)
|
69
ircd-ratbox-3.0.10/doc/whats-new-2.1.txt
Normal file
69
ircd-ratbox-3.0.10/doc/whats-new-2.1.txt
Normal file
@ -0,0 +1,69 @@
|
||||
# $Id: whats-new-2.1.txt 23020 2006-09-01 18:20:19Z androsyn $
|
||||
|
||||
The following is a list of the major changes between ircd-ratbox-2.0 and
|
||||
ircd-ratbox-2.1.
|
||||
|
||||
Config file
|
||||
-----------
|
||||
- IP entries within exempt {}; can now be stacked, eg:
|
||||
exempt { ip = "127.0.0.1"; ip = "192.168.0.0/24"; };
|
||||
- shared {}; has been completely reworked so that it allows stacking.
|
||||
shared {}; blocks for 2.0 and earlier will no longer work.
|
||||
See example.conf for the new format.
|
||||
- cluster {}; has been reworked to allow stacking.
|
||||
cluster {}; blocks for 2.0 and earlier will no longer work.
|
||||
See example.conf for the new format.
|
||||
- New auth flag, jupe_exempt. When set on a client, that client will not
|
||||
generate jupe warning notices when they try to join juped channels.
|
||||
- You may no longer specify klines, dlines, xlines and resvs in ircd.conf.
|
||||
Instead, there is no support for banconfigs with a ".perm" extension,
|
||||
eg kline.conf.perm. Anything within a .perm file will be read, but
|
||||
cannot be removed via the ircd. The format of these files is the same
|
||||
format as their normal non-permanent counterpart. So kline.conf.perm
|
||||
takes the same format as kline.conf, and so on.
|
||||
- rehash and kill -HUP no longer reread the ban configs kline.conf etc.
|
||||
You must now use /rehash bans, or kill -USR2
|
||||
- New config option to general {};, dline_with_reason = yes|no;. Default no.
|
||||
Traditionally, when a client connects and is dlined, the reason is never
|
||||
shown. Enabling this will output the reason to clients.
|
||||
|
||||
|
||||
Client
|
||||
------
|
||||
- Support for "deaf", umode +D. When a client is 'deaf', they will not
|
||||
receive any messages sent towards channels. They will still receive joins
|
||||
etc, but normal channel chat will not be sent. Any private messages
|
||||
will still be sent.
|
||||
- Target change anti-spam system. Restrictions are now placed upon how many
|
||||
different clients (not channels) can be messaged within a specific time
|
||||
period.
|
||||
- Server-side notify lists. These allow a client to request a server
|
||||
notifies them when a nickname comes online or goesoffline. See
|
||||
doc/monitor.txt for more information.
|
||||
- Client capabilities. These allow clients to negotiate capabilities with
|
||||
the server. Currently supports:
|
||||
- multi-prefix: A +ov client will have "@+" shown in names/who replies.
|
||||
|
||||
Oper
|
||||
----
|
||||
- RESVs are now tracked. Stats q/Q have been modified so that the first
|
||||
field of the output is now a number indicating how many times the RESV
|
||||
has been hit.
|
||||
|
||||
ratbox-services support (non-efnet)
|
||||
-----------------------------------
|
||||
- For those of you using ratbox-services, there is now compatibility code
|
||||
within ircd, enabled by passing '--enable-services' to configure.
|
||||
See doc/services.txt for more information.
|
||||
|
||||
Code cleanups
|
||||
-------------
|
||||
- Removed the custom file implementation, use the system one instead.
|
||||
- The hook system has been redesigned, theres now a more thorough set of
|
||||
hooks that may be used. See docs/hooks.txt
|
||||
- Removed support for VMS. It hasnt worked for a long time.
|
||||
- Cleanups to the expiry of temp klines/dlines.
|
||||
- Various other things ;-).
|
||||
- Better splitcode, it now works on how many servers have notified
|
||||
us of burst finishing, rather than how many servers are linked to the
|
||||
network.
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user