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

Compare commits

..

1839 Commits

Author SHA1 Message Date
Adam f082530f89 Anope 1.9.6 Release 2012-02-03 15:19:09 -05:00
Adam b906656caa Update version.log 2012-02-03 15:18:27 -05:00
Adam 378ae4c4f1 Regenerate language files 2012-02-03 15:18:06 -05:00
Adam ce2a0f72d4 Fixed a memory leak in m_ldap 2012-01-31 16:19:47 -05:00
Adam be5ba495f9 Not sure what I was thinking here 2012-01-31 15:44:04 -05:00
Adam b4f27da51c Bug #1365 - Fixed nickserv/confirm syntax for services opers 2012-01-31 15:35:51 -05:00
Adam d09a30295b Also refuse to load memoserv modules if memoserv isn't loaded 2012-01-26 17:04:59 -05:00
Adam 0f909273e1 Added two common warning messages on Windows to ignore 2012-01-25 16:13:38 -05:00
Adam 52eaa7d6d6 Windows 2012-01-25 15:48:07 -05:00
Adam e88e37c59b Add some checks in ms_* to make sure memoserv really exists 2012-01-24 18:28:37 -05:00
Adam f10f49d6fc Added missing expires column in /os akill view 2012-01-24 16:42:21 -05:00
Adam d06cdaab29 Fixed os_ignore to check against users real IPs, not to match against opers, and check for expired ignores on /os ignore list 2012-01-24 16:35:54 -05:00
Adam fc20bd7b22 Add tracking for Unreal's usermode +I 2012-01-24 16:03:44 -05:00
DukePyrolator b3d9412452 added a french INSTALL file, thanks to MacLeod for translating 2012-01-22 17:49:23 +01:00
Adam 98feb1b76d Cleaned up bs_kick and fixed amsg kicker 2012-01-21 00:50:48 -05:00
lethality 94c302baf3 Fixed param check from last commit 2012-01-20 20:50:36 +00:00
lethality cdb6bb8ec2 Updated DEFCON and fixed Defcons disabling of the removed mlock command 2012-01-20 17:50:09 +00:00
lethality a851f849df Corrected some incorrect English 2012-01-20 15:03:49 +00:00
Adam a270a13010 Fixed crash from last commit 2012-01-15 02:59:09 -05:00
Adam 964d63cdac Improve on db_sql_live_read 2012-01-15 01:47:31 -05:00
lethality f38faedbda Fixed an incorrect crash-causing response when an invalid option is specified in botservs kickers 2012-01-14 15:58:51 +00:00
Adam c462a69b7d Only match users nicks against access list entries if the entry is a mask... accidentally removed from an earlier fix for #1368 2012-01-13 15:37:17 -05:00
Adam 14a2c9cec0 Fixed loading db_sql_live_read's configuration values on startup 2012-01-11 19:04:40 -05:00
Adam a52ed70ea0 Don't ever attempt to process CTCPs as regular messages 2012-01-10 17:58:56 -05:00
Adam 7c03e60299 Removed this "valid" ip check in cidr::cidr, is wrong for IPv6 and ::pton checks this anyway using inet_pton. Also fixed a comment Robby broke in chanserv.conf 2012-01-10 17:53:48 -05:00
Adam 1e9d88af01 Add support for Unreals extban ~a: 2012-01-10 17:06:08 -05:00
Adam 815e140ecf Fixed loading akill reasons 2012-01-08 19:42:48 -05:00
Adam f8245574dc Fixed topic lock on inspircd 2012-01-08 18:14:07 -05:00
Adam 830c5ca725 Cleanup of cs_tban 2012-01-07 16:21:31 -05:00
Robby 9e71394127 Cleaned up a lot of log messages, help replies, fixed cs_tban, and other small fixes 2012-01-07 04:10:30 -05:00
Adam dd64eac782 Fixed users not being able to delete their own access with /cs access when using numbers, and clean up cs_xop slightly 2012-01-07 03:44:43 -05:00
Adam 4204ece7a8 Updated Copyright to 2012 2012-01-02 21:28:24 -05:00
Adam 60a5cc1a61 Bug #1369 - Fixed os_svsnick to allow changing the case of a users' nick 2011-12-31 03:04:44 -05:00
Adam 20aa4e85ce Bug #1368 - check all members of a users gruop against the access list 2011-12-31 01:33:32 -05:00
Adam f1b05acf26 Fixed this back now unreal sends 0 for non logged in users 2011-12-28 12:49:04 -05:00
Adam a4bf770a49 Added ESVID support to unreal32
Also fixes a crash due to unreal's ESVID change when users connect.
2011-12-28 04:31:44 -05:00
Adam 150831c1a6 Made capab management a bit simplier 2011-12-27 23:11:14 -05:00
Adam 1a4157b7f4 Add DT_ALLOW_EMPTY config flag, allow fantasychars to be empty 2011-12-23 12:29:30 -05:00
Adam 3bcb285690 Somehow these two modules got mixed up.. 2011-12-22 03:46:35 -05:00
Adam 704dbe27bf Updated /bs info output and note db_sql can truncate entire databases 2011-12-20 18:38:37 -05:00
Adam bbddf50c9d Fixed botserv kickers 2011-12-19 17:13:38 -05:00
Adam e5851addd6 Fixed saving databases with MySQL when shut down by SIGINT 2011-12-19 16:07:28 -05:00
Adam 03119f2aa9 Made m_dnsbl ban IPs not hostnames 2011-12-19 15:41:14 -05:00
Adam 45fc3ce1c4 Fixed formatting of many lists and INFO outputs 2011-12-19 15:37:15 -05:00
lethality d320c73f23 Fixed entry messages not displaying. 2011-12-17 10:30:13 +00:00
lethality ca8ce89de4 Fixed a slight error in email registration/resend and some minor typos. 2011-12-17 02:06:53 +00:00
Adam c88a751eab Add privilege ranks to determine how powerful privileges are 2011-12-15 02:29:13 -05:00
Adam 9ea030d060 Fixed access comparators 2011-12-15 01:14:13 -05:00
Adam ad14c8145b Update channel last used times when founders use the channel, too 2011-12-12 15:37:08 -05:00
Adam 255a8da347 Added oper:require_oper configuration option 2011-12-12 15:26:59 -05:00
Adam 4211dcf6f9 Merge branch '1.9' of anope.git.sf.net:/gitroot/anope/anope into 1.9 2011-12-11 17:03:33 -05:00
Adam 3c5337fb8a Fixed translating messages with varargs sent directly to users, too 2011-12-11 17:01:56 -05:00
lethality d2f788c61e Added K to vhost_chars... 2011-12-11 05:17:19 +00:00
Adam fa54d5acb7 Fixed a memory leak in m_sqlite 2011-12-08 17:29:17 -05:00
Adam aeefe1650e Bug #1364 - fixed crash in /cs kick 2011-12-05 11:52:40 -05:00
Naram Qashat c80e7844b7 Attempt to fix issue with modules having their link libraries in the wrong order. 2011-12-03 19:17:41 -05:00
lethality 620c08bd7a Fixed some more errors in sql live-write, hopefully the last. 2011-11-25 23:12:23 +00:00
lethality 23a92709c0 Fixed a crash in ns saset when using mysql-write module 2011-11-25 23:10:26 +00:00
Adam cef3eb78df Remove send_cmd and replace it with a stringstream 2011-11-25 00:44:31 -05:00
Adam 12d0a7302f Merge branch '1.9' of ssh://anope.git.sf.net/gitroot/anope/anope into 1.9 2011-11-21 16:24:45 -05:00
Adam 0dd85f7761 Fixed not translating messages using varargs 2011-11-21 16:17:17 -05:00
Naram Qashat 51d6e8ebfb CMake handles strings and lists differently, so this should hopefully finally fix the linking issue. 2011-11-20 18:41:46 -05:00
Naram Qashat 3f14882992 Apparently pstdint.h was NOT included way back with commit 377a7a9 to use something similar to stdint.h 2011-11-20 18:34:13 -05:00
Naram Qashat 5a17b060fe Really fix linking in libraries (even if gettext isn't found on *nix), and a minor nitpick about the leading spaces on LINK_LIBS. 2011-11-20 18:32:47 -05:00
Naram Qashat bf8e4ac714 Attempt to fix where link libraries are set when compiling to fix failed builds on systems that require -ldl. 2011-11-20 16:09:59 -05:00
Adam 781ed11ba8 Allow services operators to modify other users access list 2011-11-20 15:31:01 -05:00
Adam 6f8f7491db Allow kicking and banning by mask 2011-11-18 16:20:17 -05:00
Adam c43cdf438f Added operserv/logout 2011-11-18 11:22:01 -05:00
Adam 8374211239 Allow having multiple fantasy characters 2011-11-18 00:36:54 -05:00
Adam 69dfc729e9 Fixed storing mode locks 2011-11-17 12:46:18 -05:00
Adam 5281282a61 Fixed compile error 2011-11-16 16:22:58 -05:00
Adam 503eb42e40 Made looking up a level for a nonexistant privilege debugg log a warning, not abort 2011-11-15 16:30:31 -05:00
Adam 38d90c76e0 Fixed loading ssl certs for users 2011-11-15 16:27:32 -05:00
Adam 1356498320 Prevent locking mode Z on unrealircd 2011-11-15 16:22:02 -05:00
Adam 9ed203c0cb Fixed crash on shutdown & a compiler warning 2011-11-15 16:16:38 -05:00
Adam b5ff856f47 Windows 2011-11-08 17:29:16 -05:00
Adam 97b9055f92 Remove xlines from the IRCd aswell as from our list when the clear command is used, and fixed adding timed Zlines to inspircd 2011-11-05 15:05:15 -04:00
Adam 5f0b9338dc Set proper expirys on ZLines if the IRCd supports it 2011-11-05 00:11:49 -04:00
Adam b3194a10c5 Updated Changes 2011-11-04 19:39:27 -04:00
Adam d01f4ea3ce Allow /os userlist to match host and ip too 2011-11-04 18:04:12 -04:00
Adam a42cafbf69 Store flags for memos, fixed the expiring very soon message, fixed /os session view when a session exception is added at a lower limit than th default 2011-11-04 17:55:14 -04:00
Adam 066e5b3fc0 Delete all tables before flushing not just ones we know about 2011-11-04 02:28:21 -04:00
Adam 09dba47653 Added an assignment operator for Serializable because some STL containers use it which causes iterators to become invalidated 2011-11-03 18:59:51 -04:00
Adam ca33ac608d Bug #1354 - Allow mode chars to be used for channel prefixs in services.conf 2011-11-03 02:28:29 -04:00
Adam 302989bed1 Clarify the message when users try to lock modes they don't have access to lock 2011-11-01 01:11:26 -04:00
Adam 22b7d9fbee Added a copy constructor to dynamic_reference to allow references to reference other references correctly 2011-11-01 00:15:28 -04:00
Adam 9dd71c427d Fixed the signal/fork/wait mess hopefully once and for all. fork() did not copy kqueue descriptors on freebsd which caused problems 2011-10-29 21:16:50 -04:00
Naram Qashat 655c1cc1f7 Fix a few warnings that only showed up with gcc 3.4.6 here (sadly, there is one on every file about anonymous variadic macros that I can't get rid of). 2011-10-27 18:21:49 -04:00
Adam d9333e02fa Clear flags before rebuilding them from the databases. Fixes bug #1351 where default flags would always be set when unserializing objects. 2011-10-27 18:01:56 -04:00
Adam 39ac438b8d Ignore sigchld/usr2 sent to the child process after fork 2011-10-27 15:09:31 -04:00
Adam 0761a4a692 Bug #1350 + other related fixes 2011-10-27 14:46:20 -04:00
Adam 66ca256cfc Fixed loading exceptions in db_plain 2011-10-27 13:50:32 -04:00
lethality 961bb6e27e Fixed some typos/errors in the example configs comments. 2011-10-27 00:13:00 +01:00
Adam b14f5ea884 Fixed accidentally clearing botmodes when joins are sent 2011-10-26 16:52:00 -04:00
Adam bf66336e2c Bug #1347, fixed incorrect param parsing in cs_set_misc 2011-10-26 15:29:45 -04:00
Adam c79a575452 Bug #1348 - Fixed /cs entrymsg list 2011-10-26 15:17:05 -04:00
Adam 8334128680 Removed the old unordered_map code 2011-10-26 14:31:58 -04:00
Adam 7c62de1f27 Merge branch '1.9' of anope.git.sf.net:/gitroot/anope/anope into 1.9 2011-10-24 16:37:29 -04:00
Naram Qashat 377a7a968b Fixed bug #1349 (m_sqlite compiles without error under FreeBSD), as well as use C99's stdint.h (or cstdint if available) to get (u)intX_t types instead of our stupid typedefs. pstdint.h included in case there is no cstdint or stdint.h available. 2011-10-24 16:32:29 -04:00
Adam ccf29c0134 Fixed the capab parser to parse capab tokens prefixed with :. Fixes not detecting quitstorm support on ratbox 2011-10-24 13:19:51 -04:00
Adam d0513d6506 A few minor fixups 2011-10-22 16:11:26 -04:00
Adam f4a0bdd54d Added our own eventfd test for openvz machines which have eventfd but can not be used 2011-10-22 12:45:55 -04:00
Adam 3e2ac3640d Bug #1343 - don't allow recovering and ghosting enforcers 2011-10-22 11:35:31 -04:00
Adam c8b3809fc9 Added akill ids 2011-10-22 11:21:21 -04:00
Adam ad2ef75cbe Fixed a race condition with installing signal handlers and forking 2011-10-22 11:20:50 -04:00
Adam 6ce9010324 Fixed extracting multiple words from our serializable stringstream 2011-10-21 18:01:51 -04:00
Adam d0afc8c509 Added m_rewrite 2011-10-21 00:21:34 -04:00
Adam 230b3bc884 Only fork if we are at term 2011-10-20 13:38:37 -04:00
Adam 1cfb630ede Fixed a crash in clearusers 2011-10-20 11:54:56 -04:00
Adam d16f9620d5 Bug #1342 - fixed tracking chmodes in bahamuts sjoin 2011-10-19 12:59:16 -04:00
Adam fc16746352 Prevent chankill from akilling my clients 2011-10-18 12:18:18 -04:00
Adam eb5b5f97d1 Fixed compile errors on release build 2011-10-18 12:06:51 -04:00
Adam faea45245d Reorder some stuff in Init & the ts6 proto mods to fix weirdness from bots being introduced by 3rd party modules 2011-10-18 01:48:05 -04:00
Adam 2c614d5aab Fixed up anoperc to work with the newer startup method 2011-10-15 02:08:52 -04:00
Adam 89b4be681d Fixed crash on /os oper del 2011-10-15 00:54:32 -04:00
Adam 28ca0e1007 Fork earlier in startup to prevent it messing up threads, if there are any 2011-10-14 22:07:13 -04:00
Adam 2504af7d0f Fixed os_forbid adds reason if no expiry is given 2011-10-14 12:53:28 -04:00
Adam ddc3c2f38c Added options:nonicknameownership config option 2011-10-14 12:20:07 -04:00
Adam 53275c362c Don't add new levels to existing channels default, screws with stuff when the config is reloaded 2011-10-11 02:50:37 -04:00
Adam f3f6727cdd Bug #1337 2011-10-11 00:09:26 -04:00
Adam 4681e3a0ef Allow chanserv/suspend to take an expiry time 2011-10-10 17:19:06 -04:00
Adam 80f4f317b2 Put serialized_items on the heap to prevent weird crashes on shutdown from the list being destructed before members in it 2011-10-10 15:04:23 -04:00
Adam 9f3d735d9d Allow nickserv/suspend to take an expiry time 2011-10-10 14:16:59 -04:00
Adam 0e012f73d4 Check for being at terminal before forking 2011-10-09 21:29:34 -04:00
Adam 9f850334a1 Give more verbose messages on startup 2011-10-09 02:52:13 -04:00
Adam af273e3da5 Store flags for objects, also fixes bug #1333 2011-09-25 15:34:56 -04:00
Adam 1f3e96f4ad Made channel privileges case insensitive 2011-09-25 14:42:09 -04:00
Adam e7ba639beb Remove opnotice from example configs 2011-09-25 14:38:21 -04:00
Adam 1f2399de36 Added a new database format and sqlite support. Also moved db-convert to a module. 2011-09-25 04:19:15 -04:00
Adam 43201ead95 Fixed /os reload doing weird things to service channels, and allow setting modes by clients on burst 2011-09-19 18:35:40 -04:00
Adam 7dce64e540 Fixed missing _ in cs_appendtopic 2011-09-19 13:14:20 -04:00
Adam 1184eb59c5 Allow OnPreHelp to stop processing 2011-09-19 13:12:52 -04:00
Adam 4c2a4929ea Call fantasy events even if the commands for them don't exist 2011-09-19 12:36:52 -04:00
Adam be77a7e27e Bug #1334 - fixed crash on /os oper info 2011-09-19 12:29:54 -04:00
Adam 934723faa5 LOG_COMMAND must now always give a valid command 2011-09-19 12:14:02 -04:00
Adam f07295cc78 Bug #1332 - Fixed ValidateUser to not require secure off to disable nickserv kill 2011-09-16 14:07:33 -04:00
Adam 26c1d67556 Fixed compile errors & warnings from 1.9.6 to 1.9 merge 2011-09-10 16:27:10 -04:00
Adam 3d5889c308 Updated channel flag names to remove LOGCHAN 2011-09-10 16:08:58 -04:00
Adam 213c1c4860 Changed msgmerge to not use -E.. it will escape all of some languages and mess up poedit etc. Keep it in xgettext for the bold/underline characters. 2011-09-10 02:42:18 -04:00
Adam 63cb8ca24c Moved signal/thread/mode checking to use signal pipes 2011-09-10 02:06:31 -04:00
Adam dc5d1fa21c Made ChanServ privileges configurable 2011-09-10 02:06:31 -04:00
Adam 563d158e49 Allow Config to install cmake 2011-09-10 02:06:31 -04:00
Adam 1478b5bbd7 Added chanserv/log 2011-09-10 02:06:29 -04:00
Adam 19e0b87aa1 Removed /bs set msg 2011-09-10 02:05:56 -04:00
Adam 17ea4ed8f5 Fixed service_reference to work correctly with external classes 2011-09-10 02:05:03 -04:00
Adam feaef7cc4a Allow services to register or unregister themselves 2011-09-10 02:05:03 -04:00
Adam c6d3fbdfab Added kqueue 2011-09-10 02:05:02 -04:00
Adam 700a585b1b Allow modules to add their own channel levels 2011-09-10 02:05:00 -04:00
Adam 62752db4c4 Rewrote mlock saving/loading code to not use this silly extensible hack 2011-09-10 01:58:39 -04:00
Adam f025d1b495 Made service_reference type safe 2011-09-10 01:58:38 -04:00
Adam 8c4417cad1 Removed opnotice 2011-09-10 01:58:38 -04:00
Adam d4db2b84f2 Made the IsValidHost checks configurable 2011-09-10 01:58:38 -04:00
Adam bb8e04c835 Added oper:host and oper:vhost 2011-09-10 01:58:35 -04:00
Adam b504791bad Cleaned up the dns engine, and fixed sometimes parsing multiple answer queries incorrectly 2011-09-10 01:55:37 -04:00
Adam d5749c11f3 Fixed eventfd pipeengine to not add the same socket twice 2011-09-10 01:55:37 -04:00
Adam f54ab5e2ca Squash merge of 1.9 to 1.9.6 2011-09-10 01:55:29 -04:00
Adam 1e45019f8a Added m_proxyscan 2011-09-10 01:55:11 -04:00
Adam 2eb708e5ad Cleaned up some of the socket code, cleaned up the pipe engines, added support for binary sockets, and cleaned up the asynch connect/accept code 2011-09-10 01:55:09 -04:00
Adam 4fcb371bc8 Track what "level" channel status modes are, which allows us to have chanserv/mode determine if a status mode can be set by users better 2011-09-10 01:52:59 -04:00
Adam 6401d93b8e Added chanserv/up and chanserv/down 2011-09-10 01:52:59 -04:00
Adam 8a9a39c065 Renamed the core pseudoclient modules to match their names 2011-09-10 01:52:59 -04:00
Adam 13e8b26989 Made email messages sent by services configurable 2011-09-10 01:52:59 -04:00
Adam 8a6d6577bd Removed log:inhabitlogchannel and replaced it with service:channels 2011-09-10 01:52:46 -04:00
Adam 4a7ba7ef4c Removed SZLine. Instead, have AKILL determine whether or not a ZLINE should be set. 2011-09-10 00:58:35 -04:00
Adam 2b5d9f349f Bump for 1.9.6 git 2011-09-10 00:54:29 -04:00
Adam 3a502f2189 Anope 1.9.5 Release 2011-09-09 23:28:58 -04:00
Adam b6dad375a3 Update version.log 2011-09-09 23:28:37 -04:00
Adam 3cbad7f0df Regenerate language files 2011-09-09 23:27:15 -04:00
VisioN b80a0a8d74 Updated Greek language file 2011-09-09 22:27:51 -04:00
Adam f844b0a161 Changed User::IsRecognized check to default to secure 2011-09-09 19:18:43 -04:00
Adam 6bd31b0333 Bug #1330 & many other small fixes 2011-09-08 19:00:30 -04:00
Adam 7de1a7a6d1 Don't try and part service bots twice when channels drop 2011-09-05 18:40:34 -04:00
Adam 3815e7d61e Translate whole messages before splitting them up to send to users 2011-09-03 14:39:12 -04:00
Adam 30e6fc07d6 Merge branch '1.9' of anope.git.sf.net:/gitroot/anope/anope into 1.9 2011-09-03 14:13:14 -04:00
Adam fe1c5d41f9 Bug #1328 - Fixed fantasy to re-split message parameters correctly 2011-09-03 14:10:48 -04:00
lethality fa5ba63542 Fixed a typo in the OperServ Global command 2011-09-03 13:44:20 +01:00
Adam 073db54354 Added permission check in cs_sync 2011-09-03 01:29:57 -04:00
DukePyrolator ef10b5a834 Fixed operserv global 2011-09-03 06:58:49 +02:00
Adam 1c5ff92c93 Changed a few fatal exceptions to shutdown a bit more gracefully 2011-08-29 17:08:26 -04:00
Adam b24ea29bf5 Fixed the /ms del message sent to users when they use /ms read 2011-08-29 16:13:37 -04:00
Adam 5cf3ddb7b1 Made config rehashing not wipe opers configured with opersev/oper 2011-08-29 16:03:33 -04:00
Adam 1e1a41f0e7 Added missing ` in docs/LANGUAGE 2011-08-27 20:58:09 -04:00
Adam 28e8190e6b Fixed some cmake warnings 2011-08-27 20:47:30 -04:00
Adam 670c928a9f Tweaked the access operators to allow superadmins to be > channel founders 2011-08-27 17:13:28 -04:00
Adam d07a69278d Fixed /cs clone to set botmodes on the botserv bot when cloning channels 2011-08-27 16:52:07 -04:00
Adam bb52530eb2 Fixed mlock with param modes if you change (but not unset) the mode 2011-08-27 16:45:14 -04:00
Adam 309dfa36e7 Fixed a few mysql problems, including bug #1326 2011-08-27 16:14:04 -04:00
Adam 5c57f5aa0b Fixed /ns logout on other users 2011-08-27 15:34:09 -04:00
Adam a36e575500 Merge branch '1.9' of anope.git.sf.net:/gitroot/anope/anope into 1.9 2011-08-25 19:01:40 -04:00
Adam 8702031bcd Set the creator of default mlocks to the channel founder when a channel is registered 2011-08-25 19:01:01 -04:00
Adam 1571508aac Only match users against the more "serious" extbans (ones which prevent users from joining) 2011-08-25 10:16:56 +02:00
DukePyrolator 6dacec22a4 guested nicks are now logged out from the recovered account on /nickserv recover 2011-08-24 21:11:23 +02:00
Adam fdbbea2609 Fixed cs_set_misc 2011-08-24 14:27:01 -04:00
Adam dffed5a259 Merge branch '1.9' of anope.git.sf.net:/gitroot/anope/anope into 1.9 2011-08-24 13:57:56 -04:00
Adam 5d681a74ad Clear NS_HELD from nicks when recover expiry is up 2011-08-24 13:56:48 -04:00
DukePyrolator d80e00f5d7 Fixed automatic fingerprint identify on nickchange between registered nicks 2011-08-24 13:57:40 +02:00
Adam 21a8bff011 Merge branch '1.9' of anope.git.sf.net:/gitroot/anope/anope into 1.9 2011-08-23 19:04:27 -04:00
Adam fb14f7706c Set os_session as having first priority for events 2011-08-23 19:03:04 -04:00
DukePyrolator 2284c31f90 Replaced some chanserv/forbid with operserv/forbid in example.conf and added a check for ForceForbidReason in os_forbid 2011-08-23 11:42:40 +02:00
Adam b5b2c42242 Removed this ondeleteobject event, was for m_async_commands which died 2011-08-22 17:14:18 -04:00
Adam a2f92b642c Fixed the db_mysql metadata load events to use the right keys 2011-08-22 13:14:08 -04:00
Adam c996356fab Bugs #1321 & 1322 2011-08-21 16:35:22 -04:00
Adam d71ae412bb Fixed /cs access add log message to not show override for channel founders 2011-08-21 14:54:06 -04:00
Adam 68a125bf6e Fixed ns_set_misc and cs_set_misc to allow unsetting values 2011-08-21 14:33:11 -04:00
Adam 37c7ca8b87 Fixed AddAkiller 2011-08-21 14:09:55 -04:00
Adam 4663970722 Removed m_async_commands, it can still cause crashes from invalid pointers on the stack & is a giant mess anyway 2011-08-20 00:57:35 -04:00
Adam a68d17c17e Moved the ERROR log message out of debug 2011-08-20 00:51:39 -04:00
Adam fa3b74a5b4 Fixed zlines to only add the xline host, fixed db_mysql's write function, and prevent adding multiple of the same nick to access lists 2011-08-20 00:50:26 -04:00
Adam fd999b996f Fixed some problems with deleting access 2011-08-19 16:14:26 -04:00
Adam b4f57247b8 Fixed AccessGroup::operator> fail 2011-08-19 04:20:11 -04:00
DukePyrolator abdc69aa94 added some log message for automatic fingerprint identify and removed a unused function from ns_cert 2011-08-19 09:07:19 +02:00
Adam 1b02216f2d Fixed crash in /cs mode 2011-08-18 23:08:27 -04:00
Adam db340f96d6 Fixed some permission checking fail in modules that got messed up from the big commands sed 2011-08-18 22:04:59 -04:00
Adam 0cdca534a8 Moved CA_TOPIC to qop aswell. Newer channels (default) to TOPIC at 5 but older channels will remain at founder only, causing access list to think newer aop are level 10000 due to having this permission on older channels. 2011-08-18 17:30:49 -04:00
Adam 71b9bbd1ac Bug #1315 - moved CA_ASSIGN permission from sop to qop 2011-08-18 16:48:51 -04:00
DukePyrolator 2f3969b4be Bug #1317 - fixed sha1 fingerprint hashes in the inspircd protocol modules 2011-08-18 07:59:58 +02:00
Adam ff7479f437 Fixed attaching to events in db_mysql & possibly having ChannelInfo::WhoSends return NULL if there really are *no* bots 2011-08-18 00:47:34 -04:00
Adam 487d828fa0 Actually made the nickserv block optional 2011-08-17 22:05:47 -04:00
Adam f41081ba51 Include when an access entry was created in access view 2011-08-17 21:41:30 -04:00
Adam ede910d655 Made /os oper info also show all inherited commands/privs 2011-08-17 15:56:40 -04:00
Adam 0f4c9a43b3 List supported languages in /ns help saset language 2011-08-16 16:38:42 -04:00
Adam 9aa414b1f6 Fixed matching acount access entries against nicknames 2011-08-16 15:28:21 -04:00
Adam 2d9ddb065f Bug #1316 - added permissions for hs_request commands 2011-08-16 13:43:01 -04:00
Adam 1f542e1e75 Moved cs_seens data purger log message to debug 2011-08-16 00:16:00 -04:00
Adam 68e0d99f62 Fixed select()ing 0 sockets on Windows 2011-08-16 00:09:09 -04:00
Adam f43287f43d Fixed grammar problem in cs_clone 2011-08-14 22:10:17 -04:00
Adam 2e7bd6498f Fixed /cs clone access 2011-08-14 21:46:14 -04:00
Adam 786397f77d Massive cleanup of cs_seen, added help, syntax messages, command descriptions, removed lots of dead code, fixed memory leaks, etc 2011-08-14 21:33:07 -04:00
Adam 960c339a4c Brought back the old 1.7 behavior of a level -1 matching all users and 0 matching all identified users 2011-08-14 18:50:22 -04:00
Adam fddb2304c6 Bug #1312, fixed loading autoowner from db_plain 2011-08-14 17:01:28 -04:00
Adam 1b8dc4d096 Fixed updating exceptions 2011-08-14 16:34:20 -04:00
Adam fcc03f4ed8 Do not put users hosts in session akills 2011-08-14 15:59:14 -04:00
Adam 78b8b30766 Fixed resolving hosts when connecting to our uplink 2011-08-14 15:27:20 -04:00
Adam 91d8cc4c5b Revert "Fixed resolving hosts on connect"
This reverts commit 11619be8b9.
2011-08-14 15:25:02 -04:00
DukePyrolator 11619be8b9 Fixed resolving hosts on connect 2011-08-14 21:21:50 +02:00
Adam e767ded69f Fixed default settings for log blocks 2011-08-14 01:01:38 -04:00
Adam 83a579fb9a Fixed number list position when requesting custom lists from akill 2011-08-13 23:05:30 -04:00
DukePyrolator 244f87917c Fixed permission check in botserv set 2011-08-13 20:00:45 +02:00
Adam 6f0da68915 Fixed anope_os_core insert statement 2011-08-13 09:43:38 -04:00
Adam af438527e9 Fixed /cs saset noexpire syntax 2011-08-13 09:27:42 -04:00
Adam ad4c4e462b Send replies back to uses after m_ldap_authentication processes 2011-08-12 13:08:53 -04:00
Adam ed33a4f75b Merge branch '1.9' of anope.git.sf.net:/gitroot/anope/anope into 1.9 2011-08-12 12:48:29 -04:00
Adam f3d7d4ee37 Track when our clients are introduced or not 2011-08-12 12:46:11 -04:00
DukePyrolator bd4916ee84 Fixed loading/saving XLines in db_plain 2011-08-12 14:54:31 +02:00
Adam feee50e695 Allow bot usermodes to be configurable 2011-08-12 03:13:56 -04:00
Adam 54710a782b Removed the unused ChannelModeBan code 2011-08-12 01:51:14 -04:00
Adam d44a1d0867 Fixed Windows runtime problems 2011-08-11 23:10:08 -04:00
DukePyrolator c2780e1de4 Added a separate field for last seen realhost to ns_info, shown to services admins only 2011-08-11 22:21:40 +02:00
DukePyrolator 4e1f54ff9c added cs_seen 2011-08-11 07:03:20 +02:00
Adam 3755bf5bcd Ignore SIGPIPE 2011-08-10 15:50:45 -04:00
Adam 25d422d32b Fixed flags +* and -* 2011-08-10 15:47:02 -04:00
Adam 697bc8d8e8 Added a services.host define to easily change every clients hostname 2011-08-10 05:05:09 -04:00
Adam 4bdc9824a0 Added two missing files 2011-08-10 01:34:14 -04:00
Adam ded98ed3de Fixed windows build 2011-08-10 01:32:07 -04:00
Adam 13bcc4ef14 Replace the old sigaction for a signal when our Signal destructs 2011-08-10 00:28:31 -04:00
Adam ce92c9b21b Remove +P from unregistered channels if persist is set 2011-08-09 22:18:31 -04:00
Adam b332fbd7a7 Fixed parsing TMODE on ratbox 2011-08-09 18:34:17 -04:00
Adam eaf4e69cf1 Updated Changes 2011-08-09 17:07:20 -04:00
DukePyrolator 2f67c704fe fixed the operserv forbid del command 2011-08-09 16:38:10 +02:00
Jens VoĂź 8348392af2 fixed wrong syntax-message for botserv set msg 2011-08-09 13:36:33 +02:00
Adam 8116ad9b28 Added forgotten founder checks to cs_access, fixed fantasy replies to come from the right service, and fixed the accessgroup operators to acount for founder/superadmin 2011-08-09 04:38:35 -04:00
Adam cb7435982c Fixed a typo in init.cpp 2011-08-09 01:56:08 -04:00
Adam 776583a665 Simiplied a bit of the access system 2011-08-09 01:55:34 -04:00
Adam 91c3363c15 Hopefully sort this AccessGroup::HasPriv once and for all 2011-08-09 00:06:44 -04:00
Adam b7542fd6f2 Added a few sanity checks which never really should happen to db-convert 2011-08-08 23:41:03 -04:00
Adam 0c860a77c0 Fixed CMakeLists.txt detecting epoll 2011-08-08 23:32:52 -04:00
Adam 2d591f7f59 When we split from the uplink send a quit for *all* of our clients not just bots 2011-08-08 20:34:27 -04:00
lethality 9cb96f3bfb Merge branch '1.9' of ssh://anope.git.sf.net/gitroot/anope/anope into 1.9 2011-08-08 06:24:29 +01:00
lethality 286a9edb1e Standardized some of the SyntaxError/Help replies and corrected some syntax in BotServ set 2011-08-08 06:19:35 +01:00
Adam c4da496834 Copy modules to the runtime directory in one big read/write if we can instead of this 1 byte at a time thing, significantly improves startup loading time. 2011-08-08 00:32:09 -04:00
Adam ade92395a0 Fixed the pipengines 2011-08-07 22:34:16 -04:00
Adam c6741d3765 Always reset the levels of newly created channels, fixed DetermineLevel matching ACCESS_INVALID levels, and added in a disabled config option for levels 2011-08-07 19:04:27 -04:00
Adam 25e3408ff6 Fixed generating sid on startup 2011-08-07 17:43:23 -04:00
Adam 35588cc521 Made botserv bots with no commands just ignore messages to them, and made bots only tell users to use HELP if they have a HELP command 2011-08-07 16:04:40 -04:00
Adam 32bb63f047 Updated tables.sql 2011-08-07 15:56:35 -04:00
Adam 27912e1e8f Fixed two of the xop log messages 2011-08-06 19:43:06 -04:00
Adam b678aa64d8 Give channel founders +qo by default 2011-08-06 19:41:37 -04:00
Adam c3e9fc4a8d Show channel founders their channels in /ns alist 2011-08-06 18:33:44 -04:00
Adam 66ab59d163 Fixed loading older access entries 2011-08-06 18:21:59 -04:00
Adam deb79e830d sed'd a few typos 2011-08-06 18:05:16 -04:00
Adam a6dd65f916 Fixed suepradmin 2011-08-06 17:33:59 -04:00
Adam 0448e386de Document what /os oline does 2011-08-06 16:49:55 -04:00
Adam 749de0054f Update last used times on channels when someone with access uses them 2011-08-06 04:32:50 -04:00
Adam 7849667a19 Added a define{} block which can be used to easially rename things 2011-08-06 04:16:10 -04:00
lethality e03efdee97 Fixed ns_ajoin to check if adding a duplicate channel 2011-08-06 00:31:24 +01:00
lethality d6a8d27265 Fixed an error and typo in CS SET OPNOTICE 2011-08-05 16:07:41 +01:00
Adam 5e18a7292b Mark the new commands/ modules as CORE and fixed a typo in the example.conf 2011-08-05 06:18:38 -04:00
Adam e66063e630 Rewrote the example configurations and split them
up into seperate files for each pseudo client.

Also reorganized how the modules are stored, and
made most of the old "extra" modules "core"
2011-08-05 05:35:31 -04:00
Adam 9ec18a3b02 Added a command:permission setting 2011-08-04 21:59:01 -04:00
Adam 773a1f3075 Updated a bit of the TODO 2011-08-04 16:41:36 -04:00
Adam b3f4ba0082 Start the ts6 sid generator off at 00A if none is given 2011-08-03 06:09:27 -04:00
Adam 34da226bd9 Generate random SIDs for us if one is not specified 2011-08-03 05:54:03 -04:00
Adam 16280f4f7f Added operserv/kill and removed version.h from .gitignore 2011-08-03 05:42:41 -04:00
Adam 42f954ff7d Fixed reintroducing our clients if we disconnect and reconnect to the uplink 2011-08-02 22:39:14 -04:00
Adam 09f5591aba Fixed /cs clone copying channel access, fixed restricted, and fixed some compiler warnings 2011-08-02 05:07:59 -04:00
Adam f690cd802e Made /ns info default to your account or your nick if no arguments are given 2011-08-02 02:02:13 -04:00
Adam d43e1fb800 Added opertype:modes 2011-08-02 01:50:09 -04:00
Adam 41b40f6504 Split /os mode into /os mode and /os umode to make giving permission to just one possible 2011-08-01 23:42:20 -04:00
Adam f7adc0b35b Rewrote the access systems and added a flags access system 2011-08-01 22:37:27 -04:00
lethality 710c02f3bd Fixed bug #1301 - Changed operserv/staff to reflect its renaming to operserv/oper 2011-07-31 19:11:26 +01:00
lethality 7f69d2b95f Fixed bug #1300 2011-07-31 14:41:59 +01:00
Adam a18e3f3380 Bugs 1297-1299 and made /os stats work like the help describes it does 2011-07-31 07:00:27 -04:00
Adam 63a4201d15 Fixed these ModuleManager::Attach calls once and for all.. 2011-07-31 06:24:24 -04:00
Adam b751800ff4 Fixed os_defcon 2011-07-31 06:24:11 -04:00
Adam f32149117a Fixed error message from being unable to connect 2011-07-31 04:00:35 -04:00
Adam 1cb11bba5d Fixed a few small problems, including m_ssl's connect feature sometimes failing for no good reason 2011-07-31 03:22:23 -04:00
lethality f29c88bcd5 Fixed bug #1294, Crash on NS SET HIDE 2011-07-29 22:50:45 +01:00
lethality f5e78d7c88 Fixed a typo in the nickserv/auspex oper privilege 2011-07-28 07:06:08 +01:00
lethality 25c4985518 Fixed OS LOGONNEWS 2011-07-28 06:36:29 +01:00
Adam cd4f6da735 Bug #1289 - Fixed hooking to delcore event in cs_main 2011-07-27 19:24:58 -04:00
Adam 6e032ded6e Bug #1288 - Fixed crash on /cs help access 2011-07-27 19:17:21 -04:00
Adam e2b47e001f Bug #1291 - fixed parsing JOIN on ratbox 2011-07-27 19:06:42 -04:00
lethality b32c961c2e Show the description in cs help set instead of the syntax 2011-07-27 16:54:50 +01:00
Adam 088337ea07 Fixed /os ignore, /os exception del, and a crash in /cs entrymsg 2011-07-26 23:18:54 -04:00
Adam e8c00b9e8b A few small fixes 2011-07-26 05:44:14 -04:00
lethality 023d4b44ec Fixed a typo that broke CS SET RESTRICTD and re-added abbreviation for CS SET DESC 2011-07-23 13:22:56 +01:00
Charles Kingsley 87d2f4b8d7 Fix couple of typos in modules 2011-07-23 13:07:19 +01:00
lethality 39ca53cfcf Fixed hs_request and corrected a typo(?) in hs activate 2011-07-17 21:58:27 +01:00
lethality 46f2f3bd8f Fixed some of the extra modules 2011-07-17 13:08:15 +01:00
Adam cb56d50837 Fixed up cs_set_misc and ns_set_misc 2011-07-17 06:08:35 -04:00
Adam b19dddb0f6 Fixed a few of the /cs set syntax messages to reflect the new syntax 2011-07-16 07:03:04 -04:00
Adam acceabe3a8 Bug #1287 - Only check if users should be deopped on syncing channels
when the user is on a server that is also syncing.

This prevents us from deopping all users who join a new channel
when recovering from a netsplit that don't explicitly have access
to that channel.
2011-07-16 06:52:13 -04:00
Adam c3993b3123 Fixed appending !*@* to some access list entries that are valid hosts 2011-07-14 22:37:46 -04:00
Adam f277be0f26 Fixed OSOpersOnly & CSOpersOnly 2011-07-14 21:40:21 -04:00
Adam 1a2486d2ec These .pot files don't need to be under version control 2011-07-14 20:52:24 -04:00
Adam a735095965 Added cs_sync 2011-07-14 20:00:39 -04:00
Adam ef75e171bc Added bs_autoassign 2011-07-14 19:11:13 -04:00
Adam 5bf7dee559 Made channel descriptions optional 2011-07-14 18:29:03 -04:00
Adam f858164dee Rewrote how commands are handled within Anope.
This allows naming commands and having spaces within command names.
2011-07-14 02:31:12 -04:00
Adam 924f6849fe Bug #1283 - Upped the buffer used for messge replies, as some can be really big 2011-07-10 19:32:10 -04:00
Adam b5ec57a3f9 Bug #1285 - Fixed setting -P on channels with only a service bot in it 2011-07-10 19:07:45 -04:00
Adam 6d978486cd Bug #1286 - Dont allow actions to mess up the caps kicker 2011-07-10 18:27:48 -04:00
Adam d2832b1045 Use getrlimit instead of ulimit, fixes freebsd build 2011-07-07 02:23:11 -04:00
Adam 1a4fc39d7b Do not send news when a server is syncing 2011-07-06 22:06:07 -04:00
Adam 97388abb99 Fixed /hs set and /hs setall not allowing only a host 2011-07-06 22:05:01 -04:00
Adam 57ec310512 Only call send once per write event in dns manager 2011-07-06 05:20:25 -04:00
Adam ffd5c045e4 Fixed chanserv/access/modify permission on non-xop channels 2011-07-06 00:33:25 -04:00
Adam cc3c2b6999 Send account data once an account is confirmed 2011-07-05 01:39:11 -04:00
Adam c549aa4e76 Bug #1279 - Fixed strftime 2011-07-04 22:39:13 -04:00
Adam 714831b249 Bug #1282 2011-07-04 22:34:21 -04:00
Adam d6879c4a25 Bug #1280 - Fixed reading some na and bi flags in db_plain 2011-07-04 14:25:13 -04:00
Adam 2caf5868d0 Clean up some of the dns code, udp is connectionless anyway so this isnt required 2011-07-03 00:19:54 -04:00
Adam c585964e60 Fixed the mode manager from complaining about prefixless modes on insp20 2011-06-27 19:14:30 -04:00
Adam 936a50df23 Fixed build on older cmake versions 2011-06-27 15:35:09 -04:00
Adam 3e9888092a Fixed mail delay time 2011-06-24 03:40:18 -04:00
Adam 821826a566 The other part of #1277 2011-06-24 02:58:40 -04:00
Adam 7ec803f610 Bug #1277 - Dont send account data for unconfirmed nicks 2011-06-23 15:31:57 -04:00
Adam b1a075b462 Fixed bug #1276 and some other valgrind warnings 2011-06-23 15:10:50 -04:00
Adam 3be75cbcb3 Merge branch '1.9' of anope.git.sf.net:/gitroot/anope/anope into 1.9 2011-06-20 23:28:25 -04:00
Adam 2667f9046e Cleaned up some of the logger code which fixes not logging debug logs to files etc when debug is enabled, and some other small things 2011-06-20 23:25:46 -04:00
Naram Qashat 2601871391 Fix long-standing issue with the get token functions if the delimiter wasn't found in the string but you wanted the first "token". 2011-06-20 23:09:03 -04:00
Adam a3d0ab3d09 Use case insensitive matching when looking up servers by name 2011-06-20 23:00:49 -04:00
Adam a1b36ec0a5 Search all domains for language strings, fixes the mess that we used to use to translate strings in 3rd party modules 2011-06-17 19:57:43 -04:00
Adam 48e995ddf2 Bug #1275 - Don't log absolutely everything sent to operserv, most of its commands already have their own logs 2011-06-17 13:34:47 -04:00
Adam df971befb2 Fixed a few small things 2011-06-14 18:23:53 -04:00
DukePyrolator 1cd65878db changed some _() to gtl() and updated do_strftime() and duration() 2011-06-13 18:20:22 +02:00
DukePyrolator 6148ffa669 added a Anope::string::capacity() function 2011-06-12 06:28:22 +02:00
DukePyrolator 717b4c3406 small improvement for Timer::SetSecs() 2011-06-09 06:16:31 +02:00
DukePyrolator 74361bec05 added a Timer::SetSecs() function 2011-06-07 06:16:57 +02:00
Adam a087e7f664 Fixed clearing bandata 2011-06-05 18:18:50 -04:00
Adam 3ad93a31c9 Burst our channels with the uplink when we connect & fixed bug #1274 2011-06-02 14:59:34 -04:00
Adam 184b346166 Place version.h in build/ not include/ 2011-06-02 12:45:08 -04:00
Adam b2c807dc8c Fixed /ns alist 2011-05-30 13:14:33 -04:00
Adam 60548aa00b Fixed ns_update and db_mysql_live sql queries 2011-05-29 19:05:28 -04:00
Adam a45d1555d3 Added an IsServicesOper event 2011-05-23 14:47:14 -04:00
Adam 121ae0b189 Added m_statusupdate 2011-05-23 13:32:01 -04:00
Adam 8bf8832b70 Rewrote the signal handling to use sigaction 2011-05-23 04:41:51 -04:00
DukePyrolator 4dd7e261f5 fixed a possible crash on database saving 2011-05-22 09:05:21 +02:00
Adam f4329df11c Merge branch '1.9' of anope.git.sf.net:/gitroot/anope/anope into 1.9 2011-05-21 15:33:10 -04:00
Adam 98729a6c78 Bug #1271 2011-05-21 15:32:47 -04:00
DukePyrolator 742ba970b0 fixed bug #1272 2011-05-21 15:15:46 +02:00
Adam 115f94bfc2 Made Anope able to process normally when disconnected from the uplink and not sleep(), enable usage of non-blocking connect() and default all sockets to non blocking mode. Some cleanup to m_ssl and some cleanup to main.cpp. 2011-05-21 04:57:27 -04:00
Adam 7e5727288d Fixed compile from the earlier merge 2011-05-19 20:36:39 -04:00
Adam 13915d8b57 Modularized os_news 2011-05-16 04:10:18 -04:00
Adam 9962fae1a1 Calculate nc::channelcount at runtime 2011-05-16 04:10:18 -04:00
Adam 9fcbe293e2 Added os_oper 2011-05-16 04:10:18 -04:00
Adam fd4b52ec38 Added os_forbid 2011-05-16 04:10:18 -04:00
Adam b59602abf8 Check for a valid server in /operserv noop 2011-05-16 04:10:18 -04:00
Adam fd21c36725 Fixed some logic fail in ts6_uid_retrieve 2011-05-16 04:10:18 -04:00
Adam b999c6ca53 Expand more on m_alias and changed some std::string usage in sockets.cpp to use Anope::string 2011-05-16 04:10:15 -04:00
Adam 583954d3a1 Use module type to determine what type each module is instead of its location in the configuration file. 2011-05-16 04:09:32 -04:00
Adam 8fb1604f64 Fixed reading empty config values in the multiconfig code, caused by removal of DT_CHARPTR 2011-05-16 04:09:07 -04:00
Adam 284af258bf Added more useful functions to our LDAP API, allow adding newly registered accounts to LDAP, removed some unnecessary OnPre events and fixed unloading all modules 2011-05-16 04:09:07 -04:00
Adam e7887c1f01 Unmodularized the socket engine because its causing problems and really is unnecessary 2011-05-16 04:08:47 -04:00
Adam 076ebafa1b Moved some global functions to be member functions and misc cleanup 2011-05-16 04:07:56 -04:00
Adam 6922bd239c Fixed up the MySQL Query code and finished some command code I forgot earlier 2011-05-16 04:07:30 -04:00
Adam 13aa58ce5d Removed DT_CHARPTR from the config reader, its unneeded 2011-05-16 04:06:22 -04:00
Adam c8c23158a4 Moved the core pseudo clients out into their own modules 2011-05-16 04:06:17 -04:00
Adam 1782ce260c Use std::map instead of unordered_map 2011-05-16 04:01:50 -04:00
Adam b28d3746f5 Branch for 1.9.5 2011-05-16 04:01:46 -04:00
Adam 469a04e7e0 Anope 1.9.4 Release 2011-05-16 02:58:06 -04:00
Adam 605b5d5717 Removed ngircd as we've decided not to support it at this time 2011-05-16 02:57:28 -04:00
Adam f7aa46fb33 Note m_async_commands is experimental 2011-05-16 02:47:23 -04:00
Adam b4450294af Fixed Windows build 2011-05-15 21:02:06 -04:00
Adam 57327a5e33 Fixed akill log message when there is no expiry time 2011-05-15 19:54:35 -04:00
Adam 4a3c64291f Fixed sometimes not removing nick masks from the access list when the group is dropped 2011-05-01 18:41:54 -04:00
Adam 036b3c9053 Temporary fix for /os restart with m_async_commands loaded, is fixed properly in 1.9.5 2011-04-29 18:03:04 -04:00
Adam 7da33344d1 Added a unique key for the anope_cs_mlock table 2011-04-28 19:13:44 -04:00
Adam cbdb9f59f3 Fixed bug #1265 2011-04-27 11:15:02 -04:00
Adam 5d3d6bcead Fixed a crash if an expiring channel had the founder also on the access list 2011-04-27 09:26:51 -04:00
Adam 0cdc628db0 Fixed crash when certain nicks expire 2011-04-25 15:58:46 -04:00
Adam 4a733c93d4 Don't attempt to connect to the uplink if given invalid hostnames 2011-04-25 04:17:21 -04:00
DukePyrolator 03d2378a9f resolve hosts when connecting with ssl 2011-04-25 07:08:57 +02:00
Adam 5e027c196d Two small SQL fixes 2011-04-23 02:36:42 -04:00
Adam 3aeaef5b9a A few more small fixes 2011-04-20 15:39:44 -04:00
Adam 4d26070a92 This actually isn't necessary 2011-04-20 09:35:09 -04:00
Adam f601b04594 Fixed logging messages with an empty category to everything 2011-04-19 23:42:16 -04:00
Adam ca169489b2 Allow unidentified users to still get access by non nickcore access entries 2011-04-18 21:07:54 -04:00
Adam 713c2eb704 Fixed /ns help register reply 2011-04-18 17:09:30 -04:00
Adam 660e0c78ac Fixed /ns help access 2011-04-17 19:00:01 -04:00
Adam 0862de6577 Fixed the mlock depreciated message 2011-04-16 16:06:52 -04:00
Adam 2cd511d3a3 Fixed botserv kicker logic 2011-04-16 04:35:14 -04:00
Adam efe5fedde9 Fixed caps kicker 2011-04-15 19:51:34 -04:00
Adam c8c6845452 Fixed /ns list unconfirmed 2011-04-10 22:05:48 -04:00
Adam bd62c4891e Fixed disabling channel levels 2011-04-09 20:52:25 -04:00
Adam 9535541f5a Fixed setting +r on nick ownership, lost somewhere in revision fbae33 2011-04-06 10:13:03 -04:00
Adam 711a570d24 Run OnCheckAuthentication with the account name if there is one 2011-04-06 09:41:39 -04:00
Adam cb9ccc443d Fixed bug #1261 2011-04-05 19:11:23 -04:00
Adam c681bdd2e3 Merge branch '1.9' of anope.git.sf.net:/gitroot/anope/anope into 1.9 2011-04-03 18:23:17 -04:00
Adam 74844c0f28 Use dynamic_reference to check for users being killed from commands 2011-04-03 18:19:29 -04:00
Adam 905207093b Made LDAP support recover, release, resetpass, etc. 2011-04-03 18:07:58 -04:00
DukePyrolator 73a944fb74 fixed some duplicate messages and updated the german langfile (10% done) 2011-04-03 08:54:40 +02:00
Adam d1328d876a Fixed a typo making ns_register crash 2011-04-01 01:57:12 -04:00
Adam faa85564fc Removed some unneeded/unused code from m_ldap 2011-03-31 14:41:30 -04:00
Adam 8dec0c1f17 Fixed bug #1258, more Windows stuff, and more language strings 2011-03-30 23:59:57 -04:00
Adam 8098ed899a Fixed windows build more, including ldap 2011-03-30 00:55:45 -04:00
Adam 77c98f0750 Regenerated language files. 2011-03-29 14:02:35 -04:00
Adam 8dbdfa9a44 Fixed windows build 2011-03-29 13:43:40 -04:00
Adam 685e99be02 Fixed some left over useprivmsg problems and fixed some compiler warnings. 2011-03-29 13:43:22 -04:00
DukePyrolator b14b7bd55e burned all %R and %S in the .po files 2011-03-26 08:44:21 +01:00
DukePyrolator 365769d14c replaced all %R with %s in the language strings 2011-03-26 08:20:05 +01:00
DukePyrolator 01b901eba1 ignore additional parameters for /chanserv info 2011-03-25 20:56:42 +01:00
DukePyrolator 26de1d9f93 1. when dropping nicks, dont add the dropped nick as successor for a channel 2. set -r on dropped channels 2011-03-25 17:42:13 +01:00
Adam 451fb82e54 Bug #1203 2011-03-22 23:58:53 -04:00
Adam c02d51f523 Bug #1256 2011-03-22 18:16:05 -04:00
Adam b95027ba28 Merge branch '1.9' of anope.git.sf.net:/gitroot/anope/anope into 1.9 2011-03-16 01:16:15 -04:00
DukePyrolator 5b476a2597 added a description for the HELP command 2011-03-16 06:14:28 +01:00
DukePyrolator bceeda8087 fixed displaying the RESEND command in /nickserv help output 2011-03-16 05:36:12 +01:00
Adam ee9636bba2 Fixed some logic fail in User::IsRecognized 2011-03-15 19:23:08 -04:00
Adam ddfb16de1a Fixed compile 2011-03-14 20:16:38 -04:00
Charles Kingsley 2555d0d637 Removed include/patricia.h due to oversight in attribution. This breaks compile, please do not use until this is fixed later. 2011-03-14 21:39:53 +00:00
Adam ed73d76751 Rewrote some of the opertype system, added os_login 2011-03-14 13:52:26 -04:00
Adam 4fe49af840 Fixed a crash in m_ldap is unloaded 2011-03-13 22:59:50 -04:00
Adam beabbb3a20 When a server quits use its quit reason for all of its links 2011-03-13 19:15:53 -04:00
Adam b4888c21ed Fixed a typo in os_stats 2011-03-13 17:20:44 -04:00
Adam b75fa1c6ec Fixed a crash in /cs help register 2011-03-13 14:03:02 -04:00
DukePyrolator 3fbf39b25d Added some useful Anope::Version functions to prevent some files from unnecessarily rebuilding on every make 2011-03-13 03:42:30 -04:00
DukePyrolator 15a833283b Set the locale to the default system locale on startup 2011-03-13 03:38:42 -04:00
DukePyrolator 5a0d04bb81 fixed a typo in os_news, thanks to Dan for reporting it 2011-03-13 07:09:17 +01:00
DukePyrolator fbae3344ff added ns_cert 2011-03-12 09:27:16 +01:00
Adam 95469fde30 Added some access checks to cs_mode and fixed some language strings 2011-03-12 02:40:08 -05:00
Adam 9f46972f19 _()ify Command::SetDesc 2011-03-11 17:26:27 -05:00
Adam 46a3afadb9 Fixed validating users on all server syncs 2011-03-11 17:09:49 -05:00
Adam 1b2f3bf369 Fixed some problems with m_alias and fantasy 2011-03-11 15:10:30 -05:00
Adam bb3b421385 Global should send logon news 2011-03-11 04:27:32 -05:00
Adam 1ee3d3d810 Added os_config and support for including additional configuration files. 2011-03-11 00:47:28 -05:00
Adam 97c2e0957d Bug #1251 - Fixed logging inspircd logging us logging inspircd. Also moved the Server::Find messages to debug level 2 2011-03-10 19:20:58 -05:00
Alexander Barton 09a5791bc6 ngIRCd protocol: announce Anope with its version 2011-03-09 12:29:59 -05:00
Adam 8db5ecd736 Fixed sending CHANINFO on ngIRCd with two parameters if the channel has no modes locked. 2011-03-09 12:28:24 -05:00
Adam e9aa04a8f4 Store mlock in the databases and removed some unused functions from misc.cpp 2011-03-09 01:25:49 -05:00
Adam 8eb23e7d48 Added support for extbans 2011-03-07 19:54:51 -05:00
Adam 093b3d258e Change the mode name code to use Flags names in preparation for extban support 2011-03-06 19:36:52 -05:00
Adam 48e6221cf0 Expire unconfirmed nicks, forgot to add this earlier.. 2011-03-05 22:00:27 -05:00
Adam ef0c095712 Made m_ldap_oper understand deopering 2011-03-05 18:18:51 -05:00
Adam a0355dfd9d Fixed /bs badword del to show what word was deleted 2011-03-05 17:43:51 -05:00
Adam 6fe2d8af97 Removed nickrequests, instead have unconfirmed registrations. Also made ns_resetpass allow remote-id to get past things such as kill immed. 2011-03-05 17:23:22 -05:00
Adam 90e5d0feaa Added LDAP support 2011-03-04 20:47:58 -05:00
Adam d79e22bfaa Updated TODO 2011-03-04 12:50:50 -05:00
Adam a9fb6bab15 Just use blocking sql queries if m_asynch_commands isn't loaded - it's not that bad. 2011-03-04 02:41:29 -05:00
Adam dd968c07be Fixed some logic fail when detecting who should be akicked 2011-03-04 02:19:20 -05:00
Adam feb81c51d2 Clarify the module dependency messages generated by cmake are non fatal 2011-03-04 02:17:51 -05:00
Adam aecf675e6b Fixed os_sqline del 2011-02-27 23:32:07 -05:00
Adam bcaf406747 Made akills work on IRCds that do not support bans (ngircd) 2011-02-27 16:47:23 -05:00
Adam f234a2bfab Replaced the few language strings we use with #defines to prevent accidentally translating them if we shouldnt 2011-02-26 17:54:03 -05:00
Adam 28d17a40ce Fixed session exception limit of 0 to mean unlimited 2011-02-25 21:41:27 -05:00
Adam 7cfca37e2a Fixed build on freebsd with precompiled headers 2011-02-25 21:41:18 -05:00
Adam c38b6392c5 More fixes. Also made db_mysql_live not keep bots updated because thats pointless and made m_asynch_commands respect user language settings. 2011-02-25 21:41:08 -05:00
Adam ee38756982 Fixed a lot of small problems 2011-02-25 21:40:43 -05:00
Adam eea7d2eb77 Fixed the first half of #1235 2011-02-22 20:44:47 -05:00
Adam b15410fd3a Store modes in the databases told to us during runtime that we don't have information any about. Allows mlocking things like InspIRCds +w etc. Also fixes part of #1235 2011-02-22 20:30:45 -05:00
Adam c83b2b73d7 Much more work on the live SQL. Should work pretty decently now under heavy load. 2011-02-20 01:05:16 -05:00
Adam dfbb5264fa Inspircd does not send CAPAB NOQUIT, assume it 2011-02-19 21:17:53 -05:00
Adam f49a3e03c1 Fixed aborting because of invalid values given to mode +f on inspircd 2011-02-19 19:03:05 -05:00
Adam 109d1744a0 Update SQL when a nick is deleted 2011-02-18 11:49:52 -05:00
Adam 470f8af97c Fixed some logic fail when determining when a recognized user gets access 2011-02-18 11:48:29 -05:00
Adam a1296a3b7c Changed the OnNickDrop event to call before the nick is deleted 2011-02-18 11:48:20 -05:00
Adam f38fe242cd Merge branch '1.9' of anope.git.sf.net:/gitroot/anope/anope into 1.9 2011-02-17 14:32:51 -05:00
Adam 536ea2189a Split db_mysql_live into two modules so other modules can make use of the asynchronous command interface 2011-02-17 14:31:21 -05:00
DukePyrolator ab0422b4d4 set the vhost before we call ns_ajoin or other modules on identify 2011-02-17 07:00:03 +01:00
Adam 18bd33f9a4 Use precompiled headers when building with gnu g++ to speed up build time 2011-02-16 12:50:23 -05:00
DukePyrolator d436e4ca4a added Anope::printf() 2011-02-13 20:06:01 +01:00
Adam 1372dc1953 Removed the Wallop config options and replaced them with the new log system 2011-02-12 16:17:17 -05:00
Adam 9ef7352e69 Merged os_umode into os_mode 2011-02-11 18:30:58 -05:00
Adam 2529ff6dae Made the help command description code more sane 2011-02-11 03:12:39 -05:00
Adam 7bdf592f7e Log rawio when in debug mode and fixed expiring session exceptions 2011-02-09 21:54:28 -05:00
Adam f463b772b0 Removed a lot of the old capab flags we dont/have never used 2011-02-09 20:09:26 -05:00
Adam eec897762c Enable quitstorm for ngircd 2011-02-09 17:41:07 -05:00
Adam f87c665b63 Foward port ebe0ce6610 / b6ab031fc1 2011-02-09 13:31:47 -05:00
Adam 36d3fd1710 Do not crash if a user is introduced with a nonexistant server 2011-02-09 13:25:28 -05:00
Adam d26a19b41d Made ./Config output a userful error message if cmake is not found 2011-02-09 01:12:43 -05:00
Adam a55b3742cb Removed the LIBINTL include hack 2011-02-05 18:35:20 -05:00
Adam 83556667fd try/catch-ified all instances of convertTo to keep from aborting when a user gives too large or too small a number 2011-02-04 21:01:33 -05:00
Adam faf5f3128f Merge 032c30dd5d 2011-02-04 19:31:02 -05:00
Adam a53a797271 Replaced all of the old %S's in the language strings that were used for service nicks 2011-02-04 18:32:04 -05:00
Adam 08583dc107 Moved the language strings which are only used once
out of the core and into the modules that use them.
2011-02-04 15:30:31 -05:00
Charles Kingsley c362a1e077 DP in "an user" grammar police mode. 2011-01-29 12:05:34 +00:00
Charles Kingsley 140208e5ee Another typo pointed out by the grammar police. ;) 2011-01-29 12:00:12 +00:00
Charles Kingsley 679d3c373f Fixing leftover spaces and other rubbish I missed on the first pass. 2011-01-29 11:58:59 +00:00
Charles Kingsley 557eceeefc Updated some docs/ & removed TROUBLESHOOTING as it is redundant. 2011-01-29 11:06:38 +00:00
Charles Kingsley 9704ccc8a6 QA fixes / refinements for example.conf 2011-01-29 10:44:27 +00:00
Adam e62664138b Added patricia_tree::iterator 2011-01-28 23:09:25 -05:00
Adam 3eadc1509f Fixed setting usermode +k on our clients on InspIRCd 2.0 2011-01-28 13:19:26 -05:00
lethality 9910aa3cc6 Bug #1237 - only set umode +h on a user joining help chan if they have op access 2011-01-28 00:09:34 +00:00
Adam 2a53e5f80e Fixed the order queries are done during sqlsync to make the new foreign keys happy 2011-01-24 19:03:15 -05:00
Adam 2e8acfb98c Fixed some SQL queries 2011-01-24 17:50:34 -05:00
Adam 48fa096943 Added %N for network name in dnsbl:reason 2011-01-24 02:54:09 -05:00
Adam bf559d788f Fixed loading forbidden nicks 2011-01-24 01:11:10 -05:00
Adam 3bfc8e9a39 std::stringstream::clear doesn't clear it 2011-01-23 12:56:21 -05:00
Adam a162f1d18e Bug #1234 - Fix reading resolv.conf if it has multiple spaces or tabs 2011-01-21 23:01:48 -05:00
lethality a86873c93e fixed some minor presentation, grammar mis-use and copyright date in DP's ngircd 2011-01-21 16:49:25 +00:00
Adam 05933e9f21 Removed db-upgrade, its no longer needed 2011-01-20 19:42:27 -05:00
Adam ab2e34d817 Added options:nomlock 2011-01-19 00:31:18 -05:00
Adam e7a8bcc30b Bug #1232 - Fixed db-convert to properly convert mode lock parameters 2011-01-18 18:47:08 -05:00
Adam 34c6c664c9 Added amsg kicker settings to /bs info 2011-01-18 18:41:16 -05:00
DukePyrolator 4a3ee91c55 fixed a bug in the ngircd protocol module 2011-01-18 19:05:20 +01:00
Adam 6f0d1af596 Made db_plain buffer database writes which prevents
databases from coming corrupted if we crash or if write
fails. Also fixed loading all ajoin channels.
2011-01-17 20:41:57 -05:00
Adam 01feb5b489 Fixed ns_ajoins list output formatting 2011-01-17 20:29:33 -05:00
Adam 8975b52cc3 Added ns_ajoin 2011-01-17 15:46:53 -05:00
Adam 7acbbbbf5b Fixed flag names to match 1.9.3s 2011-01-15 21:02:14 -05:00
Adam 4fecafa612 Made db_plain save amsg settings 2011-01-15 16:45:48 -05:00
Adam a4ded88e85 Made CA_SET always be accessable, even if db-converter messes up levels 2011-01-15 16:29:17 -05:00
Adam 1b6aab0cd7 Fixed /ns confirm's log message to show the nick of who was confirmed 2011-01-15 16:13:31 -05:00
Adam c669820481 Added an amsg kicker 2011-01-15 16:11:31 -05:00
lethality ecc2fc6029 Fix CODINGs formatting and a missed typo 2011-01-14 04:50:01 +00:00
Adam e490202a1b Bug #1230 - Fixed unknown CTCPs from crashing services 2011-01-11 22:19:46 -05:00
Adam fd2412a5f6 Send new memo replies to the receiver of the memo 2011-01-10 17:41:09 -05:00
Adam 07528ea8f2 Fixed CanAdd() to use safe iteration and make SNLine::Check really work
(cherry picked from commit 1bdadde68a)
2011-01-09 13:38:15 -05:00
Adam ce8a069eb5 Changed db_mysql_live to use a safer mutex system to prevent deadlocks 2011-01-08 18:55:12 -05:00
Adam 2ba97aee6c Ignore EINTR error from poll() 2011-01-08 03:35:04 -05:00
DukePyrolator a674d81caf updated the README file 2011-01-08 08:38:16 +01:00
DukePyrolator efb61ed4a8 enabled modeonid in example.conf 2011-01-08 08:21:18 +01:00
DukePyrolator 2e7d08c10b fixed a small bug in the ratbox protocol module 2011-01-08 08:18:46 +01:00
DukePyrolator 47b87e903b added support for ngIRCd protocol 2011-01-08 08:15:48 +01:00
Adam ddeff72544 Process flag changes from SQL 2011-01-08 00:52:46 -05:00
Adam 43995b4c6d Merge branch '1.9' of anope.git.sf.net:/gitroot/anope/anope into 1.9 2011-01-08 00:25:30 -05:00
Adam 512d23d60f Made the Flag class able to convert flags to strings and back 2011-01-08 00:25:11 -05:00
lethality 0eb9152749 fix some more copyright and typos (not mine) spotted by chaz :P 2011-01-07 23:01:19 +00:00
Adam 4403849126 Added db_mysql_live which allows Anope to pull data
from the four main SQL tables in realtime, which
effectively gives us "live" SQL.
Changed eventfd pipe engine to not use buffered write.
Added TryLock to threading engines.
Made blocking SQL queries in our SQL API thread-safe.
2011-01-07 15:57:13 -05:00
lethality 9efebe5461 update copyrights for 2011 2011-01-05 18:34:38 +00:00
DukePyrolator 7198fa73d1 removed SendSVSPart(), we dont use it 2011-01-04 07:33:34 +01:00
DukePyrolator 03ba592c48 removed SendSVSMode(), we dont use it 2011-01-04 07:14:50 +01:00
lethality 57a06f72e2 fixed a crash bug when a server squits 2010-12-31 21:20:34 +00:00
DukePyrolator 3019ba6f43 restoring topic for permchans on burst 2010-12-30 06:44:18 +01:00
DukePyrolator 2784cd17fc Merge branch '1.9' of ssh://anope.git.sourceforge.net/gitroot/anope/anope into 1.9 2010-12-30 05:50:55 +01:00
Adam 03cc9eb5c5 Assign bots to new empty permanent channels on IRCds without permchannel mode not just join 2010-12-29 23:30:28 -05:00
Adam 72b8f4609b Use empty SJOINs when allowed to create empty permanent channels 2010-12-29 23:12:26 -05:00
Adam d36e53f702 Added a ConvertException to be thrown when convertTo fails 2010-12-29 20:19:37 -05:00
Adam a36f14c1bf Automatically quit bots when they are deleted 2010-12-29 19:59:26 -05:00
DukePyrolator 292e187524 Merge branch '1.9' of ssh://anope.git.sourceforge.net/gitroot/anope/anope into 1.9 2010-12-29 22:39:20 +01:00
Adam 16cab979da Bug #1225 - Made REGISTER show in /cs help 2010-12-28 16:32:18 -05:00
DukePyrolator fd7f542bd9 Merge branch '1.9' of ssh://anope.git.sourceforge.net/gitroot/anope/anope into 1.9 2010-12-28 07:00:47 +01:00
Adam 5ead326454 Fixed build on debian lenny 2010-12-27 15:33:49 -05:00
Adam a1c635b050 Load session exceptions on start when using SQL 2010-12-27 01:35:08 -05:00
Adam d896bf9a1c Bug #1222 - Fixed crash from reading to read a range of memos 2010-12-27 01:00:12 -05:00
Adam 49dd1c3409 Bug #1220 - Fixed an event in /hs activate and /ms del 2010-12-27 00:42:38 -05:00
Adam fce491e18c Made socket engine stop processing once all sockets have been checked 2010-12-27 00:41:04 -05:00
Adam 87d0fc8bb5 Fixed poll engine to not reorder sockets if we remove the last socket because there is no need 2010-12-26 20:15:54 -05:00
DukePyrolator f638d1078a Merge branch '1.9' of ssh://anope.git.sourceforge.net/gitroot/anope/anope into 1.9 2010-12-26 09:36:45 +01:00
Adam 8af2465a61 Bug #1219 - Correctly restrict people from registering potentential guest names 2010-12-26 00:31:11 -05:00
Adam 1b3f2567bc Fixed a potential crash from dropping nicks 2010-12-26 00:14:49 -05:00
lethality 036d4514f0 updated crontab instructions in INSTALL 2010-12-25 15:27:02 +00:00
Adam 80721d1873 Forward port part of 821995bf60 2010-12-25 02:30:39 -05:00
Adam aa9e33cf74 Bug #1216 - Do not apply SQLines on our own clients 2010-12-24 19:55:09 -05:00
Adam 86900175c8 Made clearing SXLines remove the XLine from the IRCd too 2010-12-24 19:07:47 -05:00
Adam d5c1d6ebec Do not allow xop del to delete users on another list 2010-12-24 16:12:08 -05:00
Adam 35e328bcb6 Fixed Windows build 2010-12-24 01:23:22 -05:00
Adam befb4b3644 Made the default socket poller use poll() because it is supported on most platforms 2010-12-24 01:22:07 -05:00
DukePyrolator 4235df2b28 Merge branch '1.9' of ssh://anope.git.sourceforge.net/gitroot/anope/anope into 1.9 2010-12-24 06:42:55 +01:00
Adam a6c8a6a9f2 Prevent version.cpp from prepending version.sh's VERSION_EXTRA on every build 2010-12-23 23:33:02 -05:00
Adam 1a3ba00c24 Fixed noexpire channels expiring 2010-12-23 21:56:06 -05:00
Adam e8a2072792 Added a missing os_ignore.h 2010-12-23 19:18:25 -05:00
Adam 4886b56edb Fixed a crash in m_alias 2010-12-23 19:14:07 -05:00
Adam 15d29edae9 Do not clear want write on a socket if we are unable to completely write its buffer 2010-12-23 18:50:27 -05:00
Adam 3009540a00 Rewrote the ignore code. Adds creator and reason to /os ignore list. 2010-12-23 18:39:54 -05:00
DukePyrolator a0ad3c4fef Merge branch '1.9' of ssh://anope.git.sourceforge.net/gitroot/anope/anope into 1.9 2010-12-23 07:15:32 +01:00
Adam 265006b691 Fixed deleting expired SXLines 2010-12-23 00:03:50 -05:00
Adam 11b3b8a5ff Made SQLine clear work 2010-12-22 19:12:04 -05:00
Adam 2783c82685 Removed match_usermask 2010-12-22 18:28:22 -05:00
DukePyrolator 184e7b3f64 Merge branch '1.9' of ssh://anope.git.sourceforge.net/gitroot/anope/anope into 1.9 2010-12-22 07:05:40 +01:00
Adam 18377ac9fd Allow hostmasks to be in uplink:host 2010-12-21 15:57:57 -05:00
DukePyrolator 184e14ea83 Merge branch '1.9' of ssh://anope.git.sourceforge.net/gitroot/anope/anope into 1.9 2010-12-19 08:56:31 +01:00
Adam 21125cf2cb Made the version generator code work right when we are on a tag because git describe just gives the tag name and nothing else. 2010-12-18 19:53:32 -05:00
Adam 0d20c47703 Don't send SXLines until after we start bursting with our uplink 2010-12-18 19:41:13 -05:00
Adam 7f9a5e01c6 NULL the core *serv pointers when core clients are deleted 2010-12-17 03:09:51 -05:00
Adam eb9b12ed11 Bug #1211 - Fixed loading and saving anope_os_sxlines 2010-12-15 12:47:35 -05:00
Adam 4a4c0886cc Bug #1212 - Fixed some bad logic in /os exception preventing valid exceptions from being added 2010-12-15 12:18:20 -05:00
DukePyrolator 02476332ea Merge branch '1.9' of ssh://anope.git.sourceforge.net/gitroot/anope/anope into 1.9 2010-12-14 08:13:09 +01:00
Adam 49d3c97b67 Bug #1079 - Don't use users real host and IPs when matching against
bans and excepts, except when a user is unbanning themselves, in an
attempt to prevent people from gaining other users IPs.
This removes support for Unreal and Bahamuts SVSMode -b because
it will unban users by real host and IP.
2010-12-13 16:36:36 -05:00
Adam 97467cb2c8 Bug #1113 - Document the fantasy character in /bs help 2010-12-13 13:26:01 -05:00
DukePyrolator 6a43886807 removed an unused variable 2010-12-13 07:34:06 +01:00
DukePyrolator 5d56a2486e changed a few 'if' to 'else if' 2010-12-13 07:26:05 +01:00
Adam eb138a02d6 Do not validate users during netburst until after the server is done syncing 2010-12-12 19:37:04 -05:00
Adam 2a4d0e3e89 Allow getting users opertype from XMLRPC requests 2010-12-12 19:37:04 -05:00
Adam 9f7a2e4da2 Bug #1177 - Readded in support for cs_mode to act on every channel 2010-12-12 19:37:04 -05:00
Adam 25e995b0f5 Fixed a few places in the plexus protocol module where we were sending nick not UID 2010-12-12 19:37:04 -05:00
Adam ad5da2a988 Handle not being able to completely flush our write buffer correctly 2010-12-12 19:37:03 -05:00
DukePyrolator 6ab7cf9689 fixed a compile error in plexus protocol module 2010-12-12 19:37:03 -05:00
DukePyrolator 099ead02a5 store the ssl fingerprint in the userstruct 2010-12-12 19:37:03 -05:00
Adam f1d04a2f8e Allow command aliases to be redirected to different pseudo clients 2010-12-12 19:37:03 -05:00
Adam aed53dbb47 Cleaned up some things, made the protocol modules use some basic inheritance to cut back on their code duplication. More work can be done in the future to remove even more of it. 2010-12-12 19:37:03 -05:00
Adam a507816701 Fixed looking up users to use case insensitivity 2010-12-12 19:37:03 -05:00
Adam c41c828574 Do not use wildcard matching when looking up hosts on access add/del 2010-12-12 19:37:03 -05:00
Adam 5fe41fb8a0 Document that /cs owner and deowner allow nick args 2010-12-12 19:37:02 -05:00
Adam 0ba566491e Allowing adding hostmasks to channel access lists 2010-12-12 19:37:02 -05:00
Adam 2a4d57a1ca Fixed subcommands 2010-12-12 19:37:02 -05:00
Adam 71c433cc50 The rest of the earlier command changes 2010-12-12 19:37:00 -05:00
Adam 2b10cc84ea Added /bs set msg 2010-12-12 19:36:19 -05:00
Adam cb6ef574e3 Send replies from fantasy commands back to the channel, this will be expanded on later 2010-12-12 19:36:19 -05:00
Adam 37e02a3594 Added cs_entrymsg 2010-12-12 19:36:19 -05:00
Adam 7d1cfe9514 Fixed some sed failure 2010-12-12 19:36:18 -05:00
Adam 9870ee04dd Removed some unused code paths in some of the modules 2010-12-12 19:36:18 -05:00
Adam 1a286397e3 Added a plexus3 protocol module 2010-12-12 19:36:16 -05:00
Adam 697dc89382 Added a default expiry time for suspended and forbidden nicks and channels 2010-12-12 19:36:01 -05:00
Adam 4d342d955d Fixed some of the language strings 2010-12-12 19:35:58 -05:00
Adam c5eb349d41 Removed the AUTODEOP level, it is unnecessary now because of cs_mode 2010-12-12 19:35:30 -05:00
Adam 7790a7f98c Allow the patricia tree to store non-pointers 2010-12-12 19:35:30 -05:00
Adam 246f44b988 Added cs_mode, rewrote the old list mode code, and added CIDR support 2010-12-12 19:35:27 -05:00
Adam a85112172d Removed and deprecated /cs set mlock, removed /cs clear, removed /os clearmodes, removed /cs akick (un)stick, added /cs clearusers 2010-12-12 19:33:59 -05:00
Adam 5f18cb018d Allow users to drop their own nickrequests 2010-12-12 19:33:58 -05:00
Adam 872bc3fa5e Allow users to remove their own access in channels 2010-12-12 19:33:58 -05:00
Adam 1625a5af0c Added /chanserv clone command 2010-12-12 19:33:58 -05:00
Adam 2e9a632e14 Allow akill/szline/sqline to accept user names as a mask argument 2010-12-12 19:33:58 -05:00
Adam 3c9d4e9daf Added command aliases 2010-12-12 19:33:58 -05:00
Adam c792c7f62d Switched the system for storing users, channels, and sesions to a patricia
tree from STL's unordered_map, which was giving horrible performance.
2010-12-12 19:33:58 -05:00
Adam e512760364 Fixed DNS caching and made DNS cache empty results 2010-12-12 19:33:50 -05:00
Adam ac41137ce2 Added /ms ignore 2010-12-12 19:31:00 -05:00
Adam 28aba58e25 Just store lang strings in a char array, no need for the extra overhead of STL strings 2010-12-12 19:30:28 -05:00
Adam 4ec661c0bb If a channel drops because a nick drops, set the channel founder to the user with the highest access if there is no successor 2010-12-12 19:30:14 -05:00
Adam 87bdf73cb7 Document XMLRPC calls and added a .php class wrapper for them 2010-12-12 19:30:14 -05:00
Adam 21c8e89671 Do not allow ghosting unidentified users if the recover command exists 2010-12-12 19:30:14 -05:00
Adam 8fbe36635c Added m_xmlrpc and m_xmlrpc main, which allows remote programs to execute
remote RPC calls to Anope in realtime and receive responses
2010-12-12 19:30:14 -05:00
Adam 5cd4fefb4c Bump for 1.9.4-git 2010-12-12 19:30:11 -05:00
Adam 82e588a790 Anope 1.9.3 Release 2010-12-12 18:42:14 -05:00
Adam 7b7301eeff Made ./Config with a .git directory work ok if we are on a git tag 2010-12-12 18:40:04 -05:00
Adam 70d65376b7 Updated version.log 2010-12-12 17:58:19 -05:00
Adam af8cf445b8 Made version.cpp ok with an empty VERSION_EXTRA 2010-12-12 17:58:09 -05:00
Adam be4ec3c0c4 Updated docs/WIN32.txt with instructions on how to get the libraries to build with gettext, ssl, and mysql 2010-12-12 16:54:46 -05:00
Adam 587e5d9421 Fixed build on cmake 2.4.x 2010-12-09 19:58:41 -05:00
Adam 35f03811e8 Fixed clearing entries from the bandata cache 2010-12-01 15:50:56 -05:00
Adam 14e396baf7 Fixed /ns set display 2010-11-29 19:20:26 -05:00
Adam ba01e7a3bb Fixed /ns help saset autoop reply 2010-11-27 00:07:48 -06:00
Adam 52d9ed428f Fixed handling pings and ctcps to channels 2010-11-25 22:59:39 -06:00
Adam 8f825821e0 Fixed sending operwalls on ratbox 2010-11-22 13:10:14 -06:00
Adam d1ba920729 Fixed replacing %R with /msg on non gettext builds 2010-11-21 20:36:46 -06:00
Adam 56b269e6b3 Merge branch '1.9' of git.sigterm.info:gitroot/anope/anope into 1.9 2010-11-21 20:05:48 -06:00
Adam 7e03427272 Fixed some language string names 2010-11-21 20:05:37 -06:00
Adam 72ab27af76 Introduce our clients with umode +q on Unreal so they can't be kicked 2010-11-21 18:55:52 -05:00
Adam 3445f4d680 Fixed parsing cidr masks 2010-11-19 14:16:42 -05:00
Adam aab915f2e9 Fixed some mysql queries 2010-11-18 21:34:38 -05:00
Adam 27652144ec Fixed the mlock events to be useful and fixed /cs access view's last used time 2010-11-17 19:59:23 -05:00
Adam 4f8dfc2132 Delete users and channels from the modestacker when they are destructed 2010-11-14 17:34:17 -05:00
Adam 4415a779a3 Fixed ban and kick from showing up twice in /cs help 2010-11-14 12:44:34 -05:00
Adam 8662b0989e Removed an unused variable 2010-11-11 19:49:00 -05:00
Adam 12c5314863 Fixed possible unsafe iteration when purging dns cache, and fixed the dns cache to not expire all of the records for specific hosts if the records have different TTLs
(cherry picked from commit 736df4bd98b952aad459fdf7914735e88f97c4b2)
2010-11-11 19:34:23 -05:00
Adam 0d2db1f9f9 Fixed DNS caching and made DNS cache empty results
(cherry picked from commit 438ae629e51b519d0d5f70531d0262be1b9fe2bc)
2010-11-09 15:04:28 -05:00
Adam fe6d7913ce Fixed a crash in the DNS engine when using cached results 2010-11-09 03:20:50 -05:00
Adam dc1252597a Removed two primary keys on some metadata tables, they should not have them 2010-11-07 20:55:30 -05:00
Adam 721ef7d345 Fixed the OnPostCommand event overload in db_mysql 2010-11-07 18:06:02 -05:00
Adam 5209e73995 Updated version.log 2010-11-06 04:24:46 -04:00
Adam 07e2ec0fa7 Regenerated lang files 2010-11-06 04:24:27 -04:00
Adam f5d20579ee Fixed /ms sendall syntax error message 2010-11-05 03:34:44 -04:00
Adam cbd0f52eff Made Base not virtual, prevents us from having to dynamic cast in the mode stacker on release builds 2010-11-04 00:36:53 -04:00
Adam 4fb4858952 Fixed anopesmtp. Again. It works on Windows now 2010-11-02 00:58:24 -04:00
Adam 477ff30cec Fixed calculate_depends again, now it works 2010-11-01 18:43:46 -04:00
Adam daa97f0343 Fixed make install because Changes.lang is dead 2010-11-01 17:36:30 -04:00
Adam 3edc6d70b9 Fixed building anopesmtp on Windows, fixed some cmake problems with calculate_depends, and fixed building without gettext 2010-11-01 16:07:18 -04:00
Adam 9db85375ee Made ns_set_misc work 2010-10-31 21:46:23 -04:00
Adam e3f368f67b Fixed replacing %R's in email messages and fixed anopesmtp to really work 2010-10-31 20:47:34 -04:00
Adam 2170823059 Updated Changes 2010-10-31 13:37:31 -04:00
Adam 011582ff3c Fixed bug #1197 - Store vhosts in MySQL 2010-10-31 13:03:10 -04:00
Adam 98bdd9749a Fixed build on cmake2.6 2010-10-30 20:12:52 -04:00
Adam cd21bd758c Updated TODO 2010-10-30 19:49:09 -04:00
Adam fb9f41b3e5 Made gettext work on most OSs. Tested on Debian, FreeBSD, Gentoo, and Windows.
Added a search path option to the Config script for cmake to use when finding libraries for modules or for gettext.
Fixed m_mysql and m_ssl to work under Windows, made the Windows Config
program remember the last used options, and fixed Windows release builds.
2010-10-30 19:41:13 -04:00
Adam a7e5d51616 Removed the example anope_commands php code, it was removed in favor of xmlrpc 2010-10-29 20:53:34 -04:00
Adam b8df88a1bc Made gettext work on Debian and updated some documentation 2010-10-28 16:25:33 -04:00
DukePyrolator 257fb256e9 removed an extra space from db-convert 2010-10-28 07:31:59 +02:00
DukePyrolator 8ff0b0ed99 do not store memo numbers on db-convert 2010-10-28 07:14:49 +02:00
Adam 180aa6b67b Removed memo number from databases. Since we already have db-upgrade we might as well make that update memos too.
Users using the top of git will need to run sed -i 's/MD MI [0-9]* /MD MI /' anope.db on their database.
2010-10-27 23:02:20 -04:00
Adam a26f119bc8 Do not store memo number in memo structs, fixes some bugs with deleting memos 2010-10-27 22:29:34 -04:00
Adam a79da4bba1 Modules to not need to include libintl.h because they are not linked to libintl and do not directly call its code. #define _(x) to x just so xgettext is able to pick out language strings. 2010-10-26 22:02:08 -04:00
Adam 09160d1289 Fixed Windows build with gettext 2010-10-26 20:14:39 -04:00
Adam 1d931401cd Fixed the other half of bug #1200 2010-10-24 13:46:56 -04:00
Adam bd7b6b16ec Fixed bug #1200 2010-10-24 12:56:20 -04:00
Adam ec5fa9e63e Made the language system still work even if the locales are not installed on the system 2010-10-23 16:12:15 -04:00
Adam 7e47b97740 Fixed a crash on some usages of /cs akick view 2010-10-23 03:10:15 -04:00
Adam 1bd975b90e Fixed a crash on inspircd if we get a join without a TS 2010-10-23 02:40:46 -04:00
Adam eb8f3a799c Fixed some Windows problems 2010-10-22 04:20:34 -04:00
Adam 791c2b89a5 Changed the log:normal config directive to a list like the other log values, and fixed a potential crash from rehashing while sending mail 2010-10-21 23:20:48 -04:00
Adam 4f317a2421 Made /cs help levels desc not case sensitive 2010-10-16 17:46:56 -04:00
Adam f3c2933542 Fixed an wrong logging example in example.conf and fixed misc messages being not logged as normal 2010-10-15 13:25:14 -04:00
Adam 4ddb469864 Added ns_set_hide to the example configuration, for some reason it was missing 2010-10-13 18:46:25 -04:00
Adam d24e810262 Fixed mlock, broken since revision cf98cd3e06 2010-10-13 15:09:19 -04:00
Adam bc812eeb03 Fixed a crash if an invalid expiry time is given to a number of commands 2010-10-13 14:46:53 -04:00
Adam 5e9db23883 Fixed saset noexpire to set noexpire on the nick it is used on not just the display name 2010-10-13 14:33:27 -04:00
Adam c4075c032e Changed cs/ns_set_misc operonly config directive to better reflect what it really does 2010-10-13 13:25:34 -04:00
Adam dc0c07b408 Made the SQL tables use foriegn keys and references to each other, removed many now unnecessary queries from db_mysql 2010-10-12 21:43:39 -04:00
Adam afb55a1842 Fixed Windows again 2010-10-11 19:21:59 -04:00
Adam d7aa5f6a3a Fixed Windows build 2010-10-11 18:47:54 -04:00
Adam 717c123441 Fixed some warnings 2010-10-11 15:37:39 -04:00
Adam 0ac77d0e42 Fixed a crash in the dns engine if we receive a reply after a request has timedout 2010-10-09 20:02:19 -04:00
Adam 5ca2df1edb Fixed bug #1196 - truncate anope_extra before flushing data into it again 2010-10-09 12:22:55 -04:00
Adam b3dd5668f6 Set +P on mlock when channels are set as persistant 2010-10-08 16:21:23 -04:00
Adam 63b1f9ce88 Do not join our clients to enforce TS if they are already in the channel 2010-10-08 16:16:11 -04:00
Adam d5e6bd8391 Fixed a crash on insp12 if we receeve a part without a reason 2010-10-08 16:03:48 -04:00
Adam 7e62fcf4b3 Fixed handling fmodes on inspircd12 2010-10-08 15:59:26 -04:00
Adam 21a61f162e Fixed a crash if the dns engine is unable to add questions into DNS packets 2010-10-07 21:27:32 -04:00
Adam 7df71750cb Log the kicker as the source of kicking log messages, not the target 2010-10-07 18:25:24 -04:00
Adam b4f675adcf Do now show topics being set by UIDs on TS6 IRCds 2010-10-07 16:02:23 -04:00
DukePyrolator 5298107ae8 fixed internally setting +o on OPERTYPE 2010-10-07 14:17:20 +02:00
Adam 7f4362138a Made nickserv:nogroupchange work 2010-10-06 21:47:01 -04:00
Adam 4da258ff78 Added lang/unused.sh, used to find unused language strings. Also removed a lot of unused language strings. 2010-10-06 20:36:08 -04:00
Adam 9ab50eedf2 Fixed restarting Anope when it is started from outside of the services binary dir 2010-10-05 19:46:33 -04:00
Adam 64a3bda235 Fixed two types in db_mysql 2010-10-05 16:25:52 -04:00
Adam acec166702 Use safe iteration when deleting servers off of hubs 2010-10-05 16:16:39 -04:00
Adam 00ed18b421 Updated docs and TODO 2010-10-05 02:11:14 -04:00
Adam 10833f9d3f Made anoperc stop/restart send the cycleonglobal, and fixed logfiles to be opened with append not truncate 2010-10-04 21:46:15 -04:00
Adam 592060ac75 Attempt to write back the old mlock to the databases if we try and fail to connect to the uplink. Because we may not know modes until after we are synced we could accidentally nuke all of the mlocks 2010-10-04 18:57:54 -04:00
Adam 92338c13b8 Fixed /ns set password/display and made saset not log the new password on saset password 2010-10-04 17:36:53 -04:00
Adam 3fa2659309 Ignore the EINTR error from epoll_wait, it isnt always a real error 2010-10-04 16:57:11 -04:00
Adam 58a3e2bbb7 Allow reloading of the protocol module with /operserv modreload 2010-10-04 16:54:39 -04:00
Adam ab5ebc2245 Automatically destruct messages when modules are unloaded 2010-10-04 16:38:25 -04:00
Adam cf98cd3e06 Changed the protocol handling system to use a vector of strings instead of C style arrays. Burned the old process/split_buf/memory.c code 2010-10-04 13:59:30 -04:00
Adam 632f8df76b Fixed checking the global block in the config to work ok, fixed having non-core service bots logging messages, fixed setting the topic to the topic setter on inspircd12/20, and fixed logging status mode changes on ts6 ircds 2010-10-03 15:59:19 -04:00
Adam 663a8b9a1c Updated language files 2010-10-02 21:10:27 -04:00
Adam 90f0a7c92a Added os_modreload. Also allow unloading database and encryption modules since there isn't a reason we cant allow reloading them. Soon os_modreload will allow reloading the protocol modules. 2010-10-02 21:09:11 -04:00
Adam 0d684191e9 Made os_news send news notices from NickServ if global is disabled 2010-10-02 16:43:24 -04:00
Adam 3499edc427 Replaced globalnick and globaldescription with just nick and description, since it's in its own block now 2010-10-02 16:11:58 -04:00
Adam 8a0cf62d70 Set the botmodes on bots in the log channel(s) when using ircds that have dynamic modes 2010-10-02 15:24:00 -04:00
Adam 59f35732f6 Made entry_match work once again 2010-10-02 15:24:00 -04:00
Adam 76b10625d9 Fixed cs_invite to send the invite notice to the person invited 2010-10-02 15:24:00 -04:00
Adam b0070bbd3b Made ChanServ optional 2010-10-02 15:23:55 -04:00
Adam 0a8bb88085 Made OperServ and Global optional 2010-10-02 03:08:29 -04:00
Adam a62d824cb4 Made MemoServ optional 2010-10-02 00:07:39 -04:00
Adam e3afb119b9 Fixed pipe and win32 socketengine builds 2010-10-01 21:45:46 -04:00
Adam d44f7971b1 Rewrote some of the socket code to allow m_ssl to be a service.
This allows modules (xmlrpc) to create and accept SSL connections.
Also fixed unloading m_mysql at certain times and made the threading
engine always work correctly on Windows.
2010-10-01 21:01:49 -04:00
Adam 70056dd468 Merge branch '1.9' of anope.git.sf.net:/gitroot/anope/anope into 1.9 2010-10-01 20:25:55 -04:00
Adam 5d9df2bdc1 Revert "Do not use new/delete to allocate modules, allows modules to always destruct properly and automatically"
This does not work as expected, it causes objects allocated by modules to be freed by the operating system when
the module is unloaded, giving no chance to the module to deallocate it itself.

This reverts commit 05e6815d91.
2010-10-01 20:24:25 -04:00
Adam 9d2ef3f130 Allow OnPreConnect to kill users correctly and made session/xline exempt users not bypass the OnConnect event 2010-09-29 14:02:17 -04:00
Adam 6ca09be663 Cleaned up some unused code, moved handling of user modes around so we dont get log messages about user modes when users connect, and fixed tracking some umodes on Unreal 2010-09-27 17:02:36 -04:00
Naram Qashat 7db5e19f74 Partial fix for finding gettext with CMake, still doesn't fix the lack of finding non-standard paths though. 2010-09-26 15:35:24 -04:00
Adam f3840ed110 Added a short docs/LANGUAGES file explaining how to add translations for the core and modules, updated TODO, and fixed a few small bugs 2010-09-26 15:09:39 -04:00
Adam 7d5893a1c8 Properly detect gettext and dont build langfiles on systems without it 2010-09-26 03:21:00 -04:00
Adam d646d455e2 Changed the language system to use gettext 2010-09-26 02:33:01 -04:00
Adam 05e6815d91 Do not use new/delete to allocate modules, allows modules to always destruct properly and automatically 2010-09-22 14:56:43 -04:00
Adam 3459206980 Fixed some problems with cycling logfiles 2010-09-21 01:20:28 -04:00
Adam 6f707920ff Fixed log messages from when a user quits or gets killed 2010-09-19 17:41:50 -04:00
Adam ce69f294a1 Added configuration for m_dnsbl for what return values get banned 2010-09-19 17:21:08 -04:00
Adam f8ee95ef98 Added some more variable fields for dnsbl akill reasons 2010-09-19 16:20:56 -04:00
Adam 1e3d2f3739 Fixed /os modinfo command output 2010-09-19 16:08:21 -04:00
Adam aa9ab7c6db Keep users +r on InspIRCd if their account name matches their login name 2010-09-19 16:06:22 -04:00
Adam 22f2b25f97 Fixed joining chanserv enforcers to unregistered channels 2010-09-19 12:42:08 -04:00
Adam ebd2997b79 DNSSocket doesn't need to save the server addr anymore 2010-09-18 17:27:58 -04:00
lethality 06faf6affc Fixed bug #1191 2010-09-18 03:36:44 +01:00
lethality 5ec605e424 Fixed some minor punctuation and logging 2010-09-18 03:35:33 +01:00
Adam 227909e2cf Rejig of some of the socket stuff. Fixed marking sockets as nonblocking on Windows. Added in a LastError function to keep having to use strerror/GetLastError everywhere. 2010-09-17 19:20:07 -04:00
Adam f71fb6e813 Connect using nonblocking sockets 2010-09-17 17:22:14 -04:00
Adam 74566d869a Fixed bug #1190 and prevent m_dnsbl from akilling a user multiple times if they are in multiple blacklists 2010-09-17 14:32:46 -04:00
Adam 61e7564633 Fixed connecting back to the nameserver if we lose connection, and detecting the nameserver 2010-09-16 22:21:55 -04:00
Adam 86c1dab286 Fixed many bugs and crashes 2010-09-16 21:16:20 -04:00
Adam cd1e9f3181 Fixed Anope::CurTime to really work, and made ChanServ timers allow using the channels botserv bot instead of only ChanServ 2010-09-16 18:12:12 -04:00
Adam ccc6109879 Fixed crash on setting XOP on 2010-09-16 12:41:17 -04:00
Adam 8131851058 Rewrote all of the topic code, fixes a few topic related problems on some older IRCds 2010-09-15 16:40:55 -04:00
Adam 6239b5a053 Give DNS requests an error when their creator is being unloaded instead of just deleting them, and fixed a compile warning 2010-09-14 19:31:22 -04:00
Adam e7ac33fd62 Cleanup DNS requests when modules are unloaded, fixes unloading m_dnsbl during the middle of queries 2010-09-14 18:24:14 -04:00
Adam 630f3815ce Added a config option to make operserv not add users found in the dsnbl to the akill list 2010-09-14 16:12:47 -04:00
Adam 4da2af64ec Updated a bit of the README that was out of date 2010-09-12 04:06:08 -04:00
Adam 22b9da7f1d Fixed a typo in the epoll socket engine with clearing events 2010-09-12 01:37:32 -04:00
Adam 47872e53ed Removed the --log command line option because its no longer necessary, and updated example.conf 2010-09-12 00:02:22 -04:00
Adam e30370af10 Allow identifying to other accounts using /nickserv id account pass 2010-09-11 22:47:36 -04:00
Adam 89c5b203c3 Updated TODO 2010-09-11 16:11:37 -04:00
Adam f00e76d30a Added Anope::CurTime to keep us from calling time() everywhere 2010-09-10 20:31:31 -04:00
Adam 9eb7562bee Fixed bug #1187 - Fixed releasing enforcer clients on TS6 IRCds 2010-09-10 15:46:19 -04:00
Adam 46813ccb8c Added an asynchronous DNS system and m_dnsbl, which checks clients against DNS blacklists.
Rewrote internal handling of IPs, we now properly support users using IPv6.
Fixed a few problems with the UnrealIRCd protocol module.
2010-09-09 23:43:11 -04:00
DukePyrolator fdd196e50b fixed cs_unban on inspircd 1.2 and 2.0 2010-09-09 18:29:22 +02:00
Adam 7a522d1c34 Only look up session exceptions if the user exceeds the session limit, really send akills for exceeding session limits, and fixed os akill del to really work 2010-09-01 21:01:52 -04:00
Adam f276927365 Redo some of the sighandling code, and made anoperc rehash actually work. 2010-08-29 19:28:04 -04:00
Adam d70f1a43bc Removed a duplicate log message when a user changes nick 2010-08-28 23:17:52 -04:00
Adam 4319319f97 Burst back our juped servers if we disconnect 2010-08-28 23:17:33 -04:00
Adam e820e1af0d Properly store our clients internal channel status's and burst them if needed.
Also made Flag::HasFlag use test() instead of operator[] to catch errors, and fixed an out of bounds access to a
Flags
bitset causing crashes on some systems.
2010-08-28 20:56:45 -04:00
Adam 26ba944d55 Allow unidentified users to use sendpass and resetpasss if configured properly 2010-08-28 13:58:23 -04:00
Naram Qashat 4cc6604326 Changed Channel's BanData C-style linked list to std::list, got rid of shadowed variables in channels.cpp. 2010-08-28 11:00:02 -04:00
Adam 5fbe0c845c Clean up some of the old now unused IRCDVar struct vars, and made the logchan bots join if the IRCd requires them to 2010-08-28 02:25:33 -04:00
Adam 2aac8b05ef Fixed two typos in example.conf 2010-08-28 00:16:12 -04:00
Adam 10d901084f Do not log RAWIO messages to services log channels, added a config option on whether or not to join bots to the log channels, and fixed two log messages in ns_identify 2010-08-28 00:14:06 -04:00
Adam 334e5a4ef9 Removed options:keeplogs because its no longer used 2010-08-27 23:05:22 -04:00
Adam 56045afda2 Removed some problematic IsRecognized checks in ms_cancel and ms_check, and fixed a variable name in logger.cpp to make clang happy 2010-08-27 21:30:16 -04:00
Adam c2ddecc2b1 Added a new logging system 2010-08-27 20:56:28 -04:00
Adam 73fb94c553 Added an Anope::string::is_pos_number_only function to use everywhere we convertTo unsigned values, and
fixed the mail delay error message to give the correct time.
2010-08-27 13:44:30 -04:00
Adam ea9b945830 Internally ULine our server, and fixed a user count check for botserv when setting -P on channels 2010-08-24 21:34:08 -04:00
Adam 2803190255 Made Config ask what version of Visual Studio you are using so cmake can generate the correct files 2010-08-22 12:56:31 -04:00
Adam f20512c849 Use pipe() instead of pipe2() - some systems dont have pipe2() 2010-08-22 12:23:43 -04:00
Adam ada65a3baf Added a classbase for the major classes, makes dynamic_reference invalidation really work.
This also cleans up a bit of the code in the modestacker.
2010-08-22 00:34:02 -04:00
Adam 8a4c6ae618 Updated .gitignore and removed the rest of the old autotools system 2010-08-21 19:39:54 -04:00
Naram Qashat 88d3338fdd Better check for eventfd. 2010-08-21 18:52:12 -04:00
Charles Kingsley 32c31f25ec Change default encryption module to enc_md5 2010-08-21 09:15:42 +01:00
Adam 6608f16b7d Removed Config.bat and install.js and replaced it with a small C# program that tends to fail less. 2010-08-21 03:47:01 -04:00
Adam fb551f0d5d Made Anope keep track of channels its clients are in if it splits from its uplink, then burst them back to its uplink once connection is reestablished.
Also made Anope use TS enforcement to change persistant channels creation time to the time they were registered.
2010-08-21 01:40:36 -04:00
Adam 931b0777fb Changed the svid system back to using user timestamps for IRCds limited to just usermode +d. This allows us to keep people logged in once again when Anope is restarted. 2010-08-19 16:27:38 -04:00
Adam b180d5f975 Always unload socketengines/database/protocl etc modules last, and fixed a potential crash in m_mysql when unloading when not in GDB 2010-08-17 22:19:36 -04:00
Adam fa7684b3a3 Fixed a few SQL queries 2010-08-17 20:54:06 -04:00
Adam e65d8b2f3d Rewrote the config reader to better handle invalid configs.
This prevents Anope from exploding when /os reload has errors.
2010-08-17 19:27:37 -04:00
Adam 2575008baa Fixed part of the Windows build.
The SQL modules still don't build due to some weird VS bug... will fix it later.
2010-08-16 23:33:03 -04:00
Adam 5fb10d27de Changed a few small things in the db format because it already changed anyway, bumped DB version to 2 2010-08-15 19:53:06 -04:00
Adam de8eeab2d9 Fixed persist to work correctly with the new bot tracking system 2010-08-15 17:15:15 -04:00
Adam c2a97d9f3f Cleanup of various different crashes/inconsistancies 2010-08-15 14:08:05 -04:00
Adam a950ed8cab Rewrote the MySQL API to use threads. This acts similar to before, but is faster. Removed db_mysql_execute for now. 2010-08-15 01:45:38 -04:00
lethality 4d0a1aaabd Fixed some chanserv help set/saset replies 2010-08-14 14:16:21 +01:00
Adam c24ec06861 And fixed /bs info to show the correct chancount 2010-08-13 18:52:48 -04:00
Adam d4c7f67b58 Readded in BotInfo::chancount, it never should have been removed in the first place 2010-08-13 18:45:50 -04:00
Naram Qashat d05afb3ca3 Fix an error in db-upgrade on sha256 encrypted passwords. 2010-08-08 22:30:00 -04:00
Naram Qashat bbff5ae4d3 Add a db-upgrade to convert base64-encoded encrypted passwords to hexadecimal strings of the raw data, add in Anope::Hex for C-style strings and added Anope::Unhex, modified the encryption modules to use Hex and Unhex. 2010-08-08 21:53:32 -04:00
Naram Qashat de7643a14f Update TODO, and minor change to enc_md5 (no, it doesn't fix encryption with 1.9 git yet, I'll get to that eventually) 2010-08-05 21:05:06 -04:00
Naram Qashat 46e88e3595 Remove need to have a dynmaically allocated C-string in enc_sha1, it was being made too big (by the default config PassLen of 32) anyways. 2010-08-04 22:05:45 -04:00
Naram Qashat f78243b6b1 Also fix enc_old using the previous commit's fix. 2010-08-04 21:51:48 -04:00
Naram Qashat 9da927889f Fix enc_md5 to work with the way the new b64_encode does things with Anope::string, by making sure that the string is null terminated properly. 2010-08-04 21:48:40 -04:00
Naram Qashat 8703afe116 Add a delimiter argument to BuildStringList and BuildStringVector, and use it with str_is_ip and str_is_cidr to better fix the earlier crash bug found by Cronus. 2010-08-04 18:01:45 -04:00
Adam 9696118ff5 Fixed enc_old, it has been broken since revision ae38212c1c 2010-08-03 18:02:16 -04:00
Adam 263f69a40e Fixed enc_md5, it has been broken since revision ae38212c1c 2010-08-03 16:59:24 -04:00
Naram Qashat a659f82814 Fix str_is_ip() and str_is_cidr(), bug found by Cronus. 2010-08-03 07:26:43 -04:00
Adam 44387a2587 Rewrote the GetToken functions to act like they did back in 1.8, fixes many problems with commands using them (hs_set, hs_setall, hs_request) 2010-08-03 03:25:50 -04:00
Adam 59ee16c7cb Made ns set/saset work like cs set/saset, cleans up a lot of code 2010-08-03 01:49:15 -04:00
Naram Qashat 7b27a4e491 Fix NS SASET to actually work. 2010-08-02 19:17:17 -04:00
DukePyrolator 4ffdd7ca6b saset noexpire works now 2010-08-02 22:37:41 +02:00
DukePyrolator 503215f39c changed the way how CTCP PINGs are processed, all services clients can now reply to CTCP PING and CTCP VERSION requests 2010-08-02 19:42:00 +02:00
lethality ddb886aa99 Merge branch '1.9' of ssh://anope.git.sf.net/gitroot/anope/anope into 1.9 2010-08-02 15:13:37 +01:00
Adam 48d58d9b88 Merge branch '1.9' of ssh://anope.git.sf.net/gitroot/anope/anope into 1.9 2010-08-02 01:17:58 -04:00
Adam 15a0f998a7 Log an error message if we are unable to load the socket engine module, and changed the default engine to be select 2010-08-02 01:17:50 -04:00
DukePyrolator ca26c4d9ca fixed segfault on ctcp ping 2010-08-02 07:09:46 +02:00
lethality 80f0351a8b Merge branch '1.9' of ssh://anope.git.sf.net/gitroot/anope/anope into 1.9 2010-08-02 04:04:11 +01:00
Adam 5258549305 Fixed the epoll engine so it really works 2010-08-01 22:43:48 -04:00
lethality 94371e69a9 Added Italics support to the BotSev kickers 2010-08-02 03:35:12 +01:00
Adam f887b37453 Set the correct bs default flags on new channels 2010-08-01 21:17:52 -04:00
Adam fd31d4aa29 Mark our clients as protected, prevents users from using /cs kick etc to kick services clients 2010-08-01 20:52:16 -04:00
Adam 4fe1c9233c Made the epoll socket engine handle MarkWriteable and ClearWriteable events 2010-08-01 20:43:48 -04:00
Adam 90976b6672 Fixed some issues with reconnecting if we disconnect from the uplink 2010-08-01 20:05:52 -04:00
Adam e8d6524411 Fixed botserv bots parting empty channels. This also allows setting bsminusers to 0, which keeps the botserv bot in the channel at all times. 2010-08-01 16:47:43 -04:00
Naram Qashat d59c1b95e1 Cleanup in main.cpp. 2010-08-01 13:42:35 -04:00
DukePyrolator 2f6c0e435c some code cleanup in misc.cpp and fixed a small typo 2010-08-01 18:48:40 +02:00
DukePyrolator cb3a18e524 Merge branch '1.9' of ssh://anope.git.sourceforge.net/gitroot/anope/anope into 1.9 2010-08-01 18:39:06 +02:00
DukePyrolator 5b68782133 fixed a problem with parting botserv bots 2010-08-01 18:30:11 +02:00
Naram Qashat 084766069c Merge branch '1.9' of ssh://anope.git.sf.net/gitroot/anope/anope into 1.9 2010-08-01 12:21:42 -04:00
Naram Qashat 1175ef320e Cleanup in memoserv.cpp. 2010-08-01 12:21:17 -04:00
DukePyrolator a65e9df8dc ns_info now ignores any extra parameters 2010-08-01 14:50:07 +02:00
DukePyrolator bfd94136c6 fixed enc_sha256 2010-08-01 09:56:34 +02:00
Naram Qashat 11663765e2 Cleanup in messages.cpp. 2010-08-01 03:21:53 -04:00
Adam c770c47e18 Don't dynamically allocate commands in modules anymore, instead made them members of modules. This means the commands are automatically destructed when the module is unloaded. Cleans up some old ugly code. 2010-07-31 21:37:45 -04:00
DukePyrolator 9d0d44d738 fixed some database issues 2010-07-31 11:57:42 +02:00
Naram Qashat 602d2378f5 Cleanup in misc.cpp. 2010-07-30 21:47:28 -04:00
Naram Qashat afb3782aa3 Some more slight cleanups, this time in modes.cpp and module.cpp. 2010-07-30 20:00:52 -04:00
Adam ef651b667e Fixed a typo in hashcomp.h for detecting what version of VC is in use 2010-07-30 19:47:22 -04:00
Naram Qashat 7a7b8933bb Cleanup in modulemanager.cpp, make it so CMake only includes the -fno-leading-underscore flag on a GNU compiler, changed the hash compare functions to use struct to appease clang, and made it so hashcomp.h uses tr1/unordered_map with g++ 4.x or up. 2010-07-30 19:24:41 -04:00
Naram Qashat a68e215bad Slight cleanup in modules.cpp. 2010-07-30 17:34:33 -04:00
Naram Qashat 174cc58a8d Slight code cleanup in nickalias.cpp and nickcore.cpp. 2010-07-30 13:15:35 -04:00
Naram Qashat 527304ed2c Some code cleanup and constification in nickserv.cpp. 2010-07-30 08:09:07 -04:00
Adam 0cacbf30d2 Fixed hash_map code to build on VS 2008 2010-07-30 03:56:14 -04:00
Adam 8e6fe99181 Fixed some Windows issues with hashing and sockets. This currently limits building to VS 2010, will look at 2008 later 2010-07-30 01:11:19 -04:00
Naram Qashat e353b15df8 Slight cleanup in operserv.cpp. 2010-07-30 00:05:19 -04:00
Naram Qashat 5ed69ed678 Used std::list for ignore's IgnoreData instead of using the old C-style double-linked list, also removed the addition of an ignore when a command "takes too long". 2010-07-29 23:34:39 -04:00
Adam abfc9926db Added support for tracking inspircd2.0 usermode +Q and cahnged the Flags bitsets for modes to not use a max defined value, it can go over 2010-07-29 23:08:47 -04:00
Adam cc64903179 Rewrote the hashing systems to properly handle the new Anope::strings which we have everywhere. 2010-07-29 18:38:56 -04:00
Naram Qashat 04200cc838 Made all of IRCDProto use const pointers, with the exception of SendVhostDel because of the Unreal protocol module, it makes me sad. 2010-07-29 08:12:54 -04:00
Naram Qashat 06cb137fde Some code cleanup in regchannel.cpp. 2010-07-28 17:44:42 -04:00
Naram Qashat 971df4825c Clean up send.cpp a bit to use Anope::string, as well as fix Anope::string's replace_all_* functions to actually work if the original and replacement strings are not the same length. 2010-07-28 08:16:33 -04:00
Naram Qashat aa9610a56f Merge branch '1.9' of ssh://anope.git.sf.net/gitroot/anope/anope into 1.9 2010-07-28 00:28:59 -04:00
Naram Qashat 4700c96268 Yet more annoying code cleanup, plus made Server's Links list into a normal variable and not a pointer. 2010-07-28 00:19:19 -04:00
Adam a2573a2c30 Removed some assertions, replaced with throwing CoreExceptions 2010-07-27 22:12:20 -04:00
Adam 4b870cc5f9 Added debug_cast which uses dynamic_cast on debug builds, and static_cast on release builds 2010-07-27 21:31:13 -04:00
Naram Qashat 66c0e280ee A few more random annoyances cleaned up. 2010-07-27 20:03:10 -04:00
Naram Qashat 92edce8ef9 Cleaned up some code in src/users.cpp that kinda annoyed me. 2010-07-27 18:28:16 -04:00
Naram Qashat 502c985072 Fix bug in User::CheckAuthenticationToken since it should've been getting an Anope::string out of the extensible, not a char *. Oops. 2010-07-27 18:13:56 -04:00
Naram Qashat 1144744c85 Rewrote Anope::Match to use Anope::string instead of doing an ugly reinterpret_cast to unsigned char pointers. 2010-07-27 18:06:36 -04:00
Adam d4048134af Some windows fixes from the Anope::string commit 2010-07-27 02:03:10 -04:00
Naram Qashat 57bb759305 Trying to make things a little more const-safe, a work in progress but this is a bit better. 2010-07-26 23:32:03 -04:00
Adam 6e6b6b46aa Added hostserv/del command permission, fixed example.conf to show that hostserv/* is a command, not a permission 2010-07-26 20:10:33 -04:00
Naram Qashat 8ea033dd35 Missed changing a couple of these, it seems. 2010-07-26 00:22:45 -04:00
Naram Qashat aa2c1009ee Removed std::string and ci::string versions of LoadModuleList, we only need the Anope::string version now. 2010-07-26 00:20:00 -04:00
Adam 707268f30b Some windows fixes caused by the last commit 2010-07-25 23:03:06 -04:00
Naram Qashat ae38212c1c Epic commit to replace most of the strings in Anope with a single Anope::string class, plus some other little fixes here and there. If you follow 1.9.x development and are testing things, THIS is one of those things that NEEDS testing. 2010-07-25 21:58:20 -04:00
Adam 15d7f0f6fe Added support for m_customprefix in inspircd20 2010-07-25 04:22:15 -04:00
Adam 5cd986e82b Properly handle FMODEs from InspIRCd with more than 25 arguments.. reported by Angel-SL 2010-07-25 02:35:17 -04:00
Adam 2328c3e7ec Always use non-blocking sockets 2010-07-24 13:45:54 -04:00
Adam b218d52a31 Removed MARK_DEPRECATED from the OnDatabaseExpire events 2010-07-24 03:32:27 -04:00
Adam b899a5c269 Properly handle single messages received that have no newline 2010-07-24 03:31:41 -04:00
Adam f9cd3f4238 Allow clearing of access lists while in XOP 2010-07-17 17:32:38 -04:00
Adam a22f8d3b2d Moved some files and diretories around, made cmake skip files it knows it can't compile because of missing dependices. 2010-07-15 22:55:02 -04:00
Adam 43b1e43afb Added ns_set_misc.cpp which was missing from a previous commit 2010-07-11 00:43:36 -04:00
Adam 63d7142465 Added options:hideprivilegedcommands config option to hide privileged commands from normal users 2010-07-10 22:50:18 -04:00
Adam a495213026 Properly set up our clients as on our server internally. Fixes crashes when trying to akick our own clients etc 2010-07-10 21:18:22 -04:00
Adam fa622aae38 Fixed tracking of introducing and quitting juped servers 2010-07-10 20:58:29 -04:00
Adam 07ec79e881 Fixed de.l so it actually compiles 2010-07-10 19:36:28 -04:00
Adam 4b1e76c3bb Added ns_set_misc and cs_set_misc.
These modules allows users to configure settable options in /ns and /cs set
that will be displayed in /ns and /cs info.
Removed os_info, cs_set_url, ns_set_url, cs_set_email, ns_set_icq
2010-07-10 19:08:16 -04:00
Adam 166d6f5d09 Removed autotools and the makefiles. This will be reintroduced differently before the 1.9.3 release. 2010-07-09 02:27:02 -04:00
Adam 7e20659522 No need to allocate the numberlist callback classes with new 2010-07-09 00:20:00 -04:00
Adam 1cf4ebb231 Added an epoll socket engine 2010-07-08 22:19:13 -04:00
Adam 8f8b1e46d6 Fixed bug #1173, Made hs_request reject actually reject vhosts 2010-07-06 14:07:06 -04:00
Adam f71d5b4d3a Removed OnEncryptInPlace, although it currently causes no problems it is just redundant. 2010-07-05 16:14:17 -04:00
Naram Qashat de1bf10690 Missed OCDing over src/protocol/*, plus fixed a minor lack of braces and fixed Config to work in an out-of-source build. 2010-06-29 08:21:20 -04:00
Naram Qashat 950cfcd31e Some OCDing over version.cpp, and make it so module.cpp doesn't need version.h (only main.cpp, modulemanager.cpp, and modules.cpp need version.h, to avoid rebuilding EVERYTHING every build) 2010-06-28 23:15:16 -04:00
DukePyrolator 1037a469d3 added some missing includes to src/tools/smtp.h 2010-06-28 20:02:35 +02:00
Adam d99ee2d9a4 This was in the wrong place, better now. 2010-06-28 13:27:14 -04:00
Adam f1cb4b86b7 Delete all users when we disconnect from the uplink 2010-06-28 11:24:19 -04:00
Adam 4502038e3d Unset all known status modes when we recieve a ts older than ours, and remove split servers from their uplinks 2010-06-28 10:59:40 -04:00
Naram Qashat 85b07a94d7 Fix version system so it doesn't cause the entire build tree to get rebuilt just because version.h gets regenerated, thanks to Adam for initial patch. 2010-06-28 01:28:51 -04:00
Adam 2e4099e9f2 No need for BotInfo to have its own ChangeNick function 2010-06-28 00:56:37 -04:00
Adam 00aa4a0ad4 Fixed the makefiles to correctly build and install the new anopesmtp and db-convert 2010-06-28 00:32:50 -04:00
Naram Qashat 28e12bc24a The next of a few "CBX OCDing over code style" commits, maybe the last.
NOTES: I have been unable to compile the db_mysql_* functions on my system here, so those are untested. db-convert seems to be badly programmed and needs more work in my opinion.
2010-06-27 23:15:05 -04:00
Adam 051ebe3eea Fixed unordered_map to build on VS 2008 2010-06-27 22:21:49 -04:00
Adam f17c4d4d04 Made Windows install.js correctly detect the Anope version and made version.cpp correctly generate version.h on Windows 2010-06-27 20:34:09 -04:00
Adam 0eb007a1b3 Made the langfiles build 2010-06-27 20:21:11 -04:00
Adam 1e53c2d50a Removed nickserv/chanserv info all, just have info show all information 2010-06-27 19:55:19 -04:00
Adam ccc92376be Log out users when they log in to another account. 2010-06-27 17:59:48 -04:00
Adam 8cf8faf529 Don't attempt to enforce sqlines on our own clients 2010-06-27 16:26:35 -04:00
Adam 6e1fa85cbc Log out users from their groups when they disconnect, keeps us from storing invalid pointers in the nickcore user list 2010-06-27 14:45:14 -04:00
Naram Qashat 9269d20a70 The next of a few "CBX OCDing over code style" commits, focusing on src/core/ns_*. 2010-06-27 11:55:39 -04:00
Adam 57caa0b53f Made Anope track its own clients internally as if they were real users 2010-06-27 02:41:48 -04:00
Adam d49aee6cf8 Made the flags class take an optional size arg 2010-06-26 22:50:02 -04:00
Adam e51d6e2fe1 Added in the rest of the InspIRCd 2.0 changes to the protocol module 2010-06-26 21:47:35 -04:00
Adam 36c646c7d2 Added support for InspIRCd 2.0s dynamic modes.
Note that this changes the maximum length of an acceptable
IRC message from 512 to 1024 because InspIRCd sends messages
longer than 512 characters.
2010-06-26 21:12:31 -04:00
Naram Qashat 4e31757f14 Merge branch '1.9' of ssh://anope.git.sf.net/gitroot/anope/anope into 1.9 2010-06-26 01:39:11 -04:00
Naram Qashat 6dc3af5db4 The next of a few "CBX OCDing over code style" commits, focusing on src/core/hs_* and src/core/ms_*, plus some tiny fallout caused by changing the FOREACH_* macros. 2010-06-26 01:38:19 -04:00
Adam c7cb8897b4 docs/TOOlS -> docs/TOOLS 2010-06-25 22:53:26 -04:00
Adam d5ee411aca Moved src/tools/README to docs/TOOLS 2010-06-25 22:13:32 -04:00
Adam 03fbc7d281 Changed the versioning system to use git 2010-06-25 20:00:21 -04:00
Adam cbcead4e89 Made db-convert handle old corrupted databases from 1.8 that used mysql with rdb 2010-06-25 19:14:05 -05:00
DukePyrolator e447933c02 fixed some typos in example.conf 2010-06-24 07:38:20 +02:00
Naram Qashat 7bb90e1922 The next of a few "CBX OCDing over code style" commits, focusing on src/core/enc_*, plus fixing unintentional broken logic in said modules caused by my first OCD commit.
Also added a note to example.conf about enc_sha1 being potentially broken, and slight code style OCD in hashcomp.cpp found by Adam.
2010-06-24 00:34:04 -04:00
Adam c4233e9f9a Made db-convert really convert nickalias lastseen/lastused/lastquit 2010-06-22 16:21:57 -04:00
DukePyrolator 959a1a69a5 moved FindMessage() into the Anope class 2010-06-22 22:06:23 +02:00
DukePyrolator 7e872db956 changed the name of the logfile from servics.log.<date> to <date>.services.log to make windows users happy 2010-06-22 21:33:29 +02:00
Adam 980a2feff8 Fixed a typo in the example.conf for m_helpchan 2010-06-22 11:26:45 -04:00
Naram Qashat e8d7c65ecf Fix compile errors I unintentionally caused 2 commits ago. <.< 2010-06-22 08:39:03 -04:00
Naram Qashat 6a8c359b4f The next of a few "CBX OCDing over code style" commits, for db_plain.cpp 2010-06-22 08:36:37 -04:00
Naram Qashat 1e20877e2f The next of a few "CBX OCDing over code style" commits, focusing on src/core/bs_* and src/core/cs_*. 2010-06-21 23:14:28 -04:00
Adam fb16ce72a0 Fixed some more problems with db-convert 2010-06-21 16:16:11 -04:00
Naram Qashat 36bf5fcb26 Fix problem with anope.db being empty even after running /os update. 2010-06-21 01:33:36 -04:00
Adam 16854ae793 Fixed a few Windows problems with cleaning out the runtime directory 2010-06-21 00:02:57 -04:00
Adam 17040c088a Store modules in a list and xlines in a vector, not deques. We need to be able to keep iterators valid. 2010-06-20 21:33:01 -04:00
Adam 0d2d7e9968 Fixed Windows build 2010-06-20 20:05:23 -04:00
Naram Qashat 63d7bee2a6 Merge branch '1.9' of ssh://anope.git.sf.net/gitroot/anope/anope into 1.9
Conflicts:
	include/config.h
2010-06-20 18:51:03 -04:00
Naram Qashat 381c9c8870 The first of a few "CBX OCDing over code style" commits, focusing on include/* and src/* but not src/core/* or src/modules/*. 2010-06-20 18:42:58 -04:00
Adam e8a1570ed9 Added m_helpchan to replace the cores helpchannel functionality 2010-06-20 14:04:17 -04:00
Adam 968e4d0bdd Fixed the name of cs_forbid in chanserv:modules so it really loads 2010-06-20 13:11:31 -04:00
Adam 7b7e2a6150 Updated TODO 2010-06-19 21:22:48 -04:00
Adam 448eadd747 Made db-converter add all of the core clients when converting a 1.8 database 2010-06-19 20:53:53 -04:00
Adam 68b54f3fb5 Made db-converter only write mlock params if there really is one, fixes some problems with converting mlock for certain databases 2010-06-19 13:39:12 -04:00
Adam 7530c030a9 Merge remote branch 'sf/1.9' into 1.9 2010-06-19 12:09:39 -04:00
Adam 2528dc80bd Merge branch '1.9' of ssh://anope.git.sf.net/gitroot/anope/anope into 1.9 2010-06-19 11:59:11 -04:00
Adam 52058fe87b Merge remote branch 'origin/1.9.3' into 1.9 2010-06-19 11:54:08 -04:00
Charles 43e951aed5 Revert "file 1 edit"
This reverts commit f74f82619d.
2010-06-19 16:46:35 +01:00
Charles c2ae11dd92 Revert "file 2 edit"
This reverts commit 87ac831206.
2010-06-19 16:46:26 +01:00
Charles 87ac831206 file 2 edit 2010-06-19 16:45:29 +01:00
Charles f74f82619d file 1 edit 2010-06-19 16:45:13 +01:00
Charles 03dcccc461 Revert "work"
This reverts commit 35a1c2c1bf.
2010-06-19 16:44:18 +01:00
Charles 35a1c2c1bf work 2010-06-19 16:42:18 +01:00
Charles a2131b7da6 Revert "testing"
This reverts commit c0ea25fb94.
2010-06-19 16:32:52 +01:00
Charles c0ea25fb94 testing 2010-06-19 16:31:30 +01:00
Adam e05919a1a5 Test commit for CIA 2010-06-19 11:18:06 -04:00
Adam d5fd2f5d57 Test commit for CIA 2010-06-19 11:17:15 -04:00
Charles 31acdea1aa Revert "Testing commit to see if CIA is playing"
This reverts commit 7b1f345284.
2010-06-19 15:02:30 +01:00
Charles 7b1f345284 Testing commit to see if CIA is playing 2010-06-19 10:09:57 +01:00
Adam df9d291bcb Made install.js use VS 2010 2010-06-18 21:17:41 -04:00
Adam 7c4a9cf979 Switched cs_set to the subcommand system and added cs_saset 2010-06-18 21:04:10 -04:00
Adam e6447fa2c4 Added in a subcommand system and switched ns_set and ns_saset to use it 2010-06-18 21:04:09 -04:00
Adam 6cd8849466 Moved the *Serv help functions to Command, will come in use later with subcommands 2010-06-18 21:04:09 -04:00
Adam b8f9116b19 Rewrote all of the command handling to get rid of all the nasty strtoks() everywhere, and added a bot map by uid 2010-06-18 21:04:08 -04:00
Adam 435c9116e9 Added an arg to User::IsRecognized to check for NI_SECURE 2010-06-18 21:04:08 -04:00
Adam c43666e344 Rewrote cs_access to be more C++ish, changed NumberList to be more C++ish and fixed some compiler warnings on 64bit systems 2010-06-18 21:04:08 -04:00
Adam 1394c96173 Removed a lot of unnecessary .c_str() calls in the find* functions 2010-06-18 21:04:08 -04:00
Adam f0a44ba894 Made NumberList take an arg to determin if it should pass numbers in descending order, fixes listing specific ranges being returned in descending order 2010-06-18 21:04:08 -04:00
Adam 4a2b9ebcf3 Renamed all of source files from .c to .cpp 2010-06-18 21:04:07 -04:00
Adam 2fba686904 Burned slist, rewrote operservs XLine code 2010-06-18 21:04:05 -04:00
Adam 3a2c2a916a Dont load mlock from the database until after Anope is connected, it doesnt know all of the available modes until then 2010-06-18 21:03:44 -04:00
Adam 0358ae062b Unmark services as syncing when we are done, fixes cs_xop and cs_modes reloading mode specific commands 2010-06-18 21:03:43 -04:00
Adam cab6fcc82d Added a founder access level used to determin who is a channel founder. This is completely independant of the owner levels 2010-06-18 21:03:43 -04:00
Adam 17ab410400 Removed process_numlist and having to mark everything as "in use" and constantly checking it. Replaced with a better system. 2010-06-18 21:03:41 -04:00
Adam 2a22d9c2fd Fixed cmake build, removed version_flags it is no longer need, removed old unneeded defs.h and split up pseudo.h 2010-06-18 21:02:12 -04:00
Adam c477360dbf Removed empty.c, instead have cmake create a new empty file when it needs it and deletes it later 2010-06-18 21:01:55 -04:00
Adam ee57f57193 Store modes in users and channels using the Flags class, cleaner 2010-06-18 21:01:55 -04:00
Adam c966d7ec17 Send a QUIT before we shutdown or restart for all of our bots 2010-06-18 21:01:55 -04:00
Adam f049124905 Rewrote the hashing system to use std::tr1::unordered_map 2010-06-18 21:01:53 -04:00
Adam 81a45520a7 Added some global variables for the core pseudo clients, keeps us from having to call findbot() everywhere 2010-06-18 21:01:17 -04:00
Adam e6263dba84 Allow attaching metadata to nickrequests and storing it in the databases and fixed windows build 2010-06-18 21:01:17 -04:00
Adam 631d11d6a8 Store a plaintext version of mode names in the mode structures, removes alot of unneeded code from db_plain/db_mysql. 2010-06-18 21:01:17 -04:00
Adam 4e1286ca10 Rewrote the mail system to use threading 2010-06-18 21:01:09 -04:00
Adam 4149afd45d Changed threadengine to delete threads after Joining them, so the whole thread exists when being joined and so its safe to call non-threadsafe functions in the destructor 2010-06-18 21:00:04 -04:00
Adam 6db15e1783 Added the nickserv/ungroup command 2010-06-18 21:00:03 -04:00
Adam e78a055c2b Removed old config.h and moved configreader.h to config.h 2010-06-18 21:00:02 -04:00
Adam af805e5b45 Allow enabling ssl on a per-uplink basis 2010-06-18 20:58:55 -04:00
Adam b775c84402 Fixed the Makefiles to build m_ssl correctly and marked m_ssl as permanent 2010-06-18 20:58:55 -04:00
Adam ebfff71599 Made opertypes inheritable 2010-06-18 20:58:55 -04:00
Adam 9439cac6b1 Added m_ssl.cpp which allows Anope to use SSL when connecting to its uplink 2010-06-18 20:58:55 -04:00
Adam a93be9ff1c Added two events called in ns_info and cs_info that allows modules to easially add info output. Made os_info use this 2010-06-18 20:58:55 -04:00
Adam 5d437d9ab5 Renamed the init_module function to AnopeInit - Some systems have an init_module function outside of Anope which causes a crash if you try to load a non-Anope module 2010-06-18 20:58:55 -04:00
Adam 031bc4a8b0 Merged branch threadingengine with master - Added a threading engine 2010-06-18 20:58:54 -04:00
Adam 503958aa77 Prevent negaitve mode changes, kicks, bans, and autokicks from affecting users with unreal usermode +q or similar 2010-06-18 20:58:54 -04:00
Adam c1d161dec4 Rewrote all of the server handling code 2010-06-18 20:58:52 -04:00
Adam 73e93305c1 Added nickserv/auspex permission and fixed core modules so they build 2010-06-18 20:56:21 -04:00
Adam fa82890696 Moved Commands stuff to its own file and changed Command::name to be ci::string - Will be used after hashing system is rewritten 2010-06-18 20:55:38 -04:00
Adam 2ba89de64d Tell users when their nicks expire in /ns glist and /ns info 2010-06-18 20:55:36 -04:00
Adam c4b725b2e1 Removed all references to $, git has no svn keywords 2010-06-18 18:39:30 -04:00
Adam 428d930e2b Made all modules version be VERSION_STRING 2010-06-18 18:30:35 -04:00
Adam cc3104fc3f Removed .svn from CMakes list of folders to ignore, it not longer exists 2010-06-18 18:22:42 -04:00
Adam 1c7c4708d0 Test commit to test CIA 2010-06-18 17:16:28 -04:00
Adam bc86550c2c Merge branch '1.9' of ssh://shell.sf.net/home/scm_git/a/an/anope/anope into 1.9 2010-06-18 16:51:37 -04:00
Adam ad45dbacbb Fixed some problems with the mode stacker from svn to git merge 2010-06-18 16:50:56 -04:00
Charles 116e5c7479 Revert "test commit to see if cia notices"
This reverts commit 2d7e5c07d0.
2010-06-18 21:49:26 +01:00
Charles 2d7e5c07d0 test commit to see if cia notices 2010-06-18 21:45:05 +01:00
Charles 184b96946a Merge svn with git 2010-06-18 21:04:30 +01:00
Adam- a8b6e44c69 Updated TODO to contain most of what 1.9.3 will have
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@3011 5417fbe8-f217-4b02-8779-1006273d7864
2010-06-18 17:17:50 +00:00
Adam- 3a2eb6307f Fixed bug #1171 - Fixed defcon so it works on Windows
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@3010 5417fbe8-f217-4b02-8779-1006273d7864
2010-06-18 16:51:52 +00:00
Adam- 4e6ede0e18 Initialize 1.9.3 SVN
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@3009 5417fbe8-f217-4b02-8779-1006273d7864
2010-06-18 07:52:39 +00:00
Adam- 883d22d4da Bump for 1.9.2 Release
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@3007 5417fbe8-f217-4b02-8779-1006273d7864
2010-06-18 07:40:17 +00:00
cyberbotx b766b3a597 Minor edits to fix compile errors/warnings with clang and a small compile warning under Windows (gotta work on the other 450+ Windows warnings sometime).
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@3006 5417fbe8-f217-4b02-8779-1006273d7864
2010-06-16 23:50:33 +00:00
Adam 475f5afafc Replaced some spaces with tabs in unreal32.c, os_defcon.c, and modes.cpp 2010-06-16 17:14:35 -04:00
Adam- 834f4d1bf0 Cleaned up some of the cloaked host tracking on Unreal
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@3004 5417fbe8-f217-4b02-8779-1006273d7864
2010-06-15 17:04:27 +00:00
Adam- ab4533e58a Made db-convert change old disabled levels to newer ACCESS_QOP, keeps people from being locked out of controlling their own XOP channels
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@3002 5417fbe8-f217-4b02-8779-1006273d7864
2010-06-12 22:28:56 +00:00
Adam- 4ba8c2ba74 Tell users to identify when they connect on InspIRCd
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@3001 5417fbe8-f217-4b02-8779-1006273d7864
2010-06-12 22:28:52 +00:00
Adam- 2cc4cd0165 Only enable vhosts automatically if the user doesn't already have the vhost set
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2998 5417fbe8-f217-4b02-8779-1006273d7864
2010-06-04 02:17:58 +00:00
Adam- 9abdb4e2e9 Added inspircd2.0 protocol module, moved usermode +r unsetting on nick change to the protocol modules to fix inspircd1.2s weird usermode +r behavior
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2997 5417fbe8-f217-4b02-8779-1006273d7864
2010-06-03 19:01:28 +00:00
Adam- f43f6c3864 Keep track of what IRCds set -r on nick change and dont inform us to keep the modemanager/modestacker in sync
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2996 5417fbe8-f217-4b02-8779-1006273d7864
2010-06-03 05:59:59 +00:00
Adam- 6d87e0eb72 Use pongs to determine when servers are done syncing in Unreal, fixes a problem with Unreals endburst system where we have clients introduced to us from a "synced" server when they really arent
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2995 5417fbe8-f217-4b02-8779-1006273d7864
2010-06-03 05:15:44 +00:00
Adam- 1c89004245 Removed ircd->b_delay_auth, have User::CheckAuthenticationToken validate users. Fixes us telling people to identify after netmerge then silently identifying them once we process svid.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2994 5417fbe8-f217-4b02-8779-1006273d7864
2010-06-03 05:15:39 +00:00
Adam- 8cc71ee794 Fixed a crash from r2990
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2992 5417fbe8-f217-4b02-8779-1006273d7864
2010-05-30 03:21:10 +00:00
Adam- e4189822bc Rewrote some of the user nick changing code, enable vhosts for users on nick change, and dont update last seen/last realname when users are identified to an account which doesn't own the nick they are using
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2990 5417fbe8-f217-4b02-8779-1006273d7864
2010-05-28 21:57:15 +00:00
Adam- a5ddbb0217 Fixed some compiler warnings found on 64bit systems
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2989 5417fbe8-f217-4b02-8779-1006273d7864
2010-05-27 01:51:14 +00:00
Adam- 3d396f245b Fixed tracking of users with the +a channel mode on unrealircd during SJOINs
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2988 5417fbe8-f217-4b02-8779-1006273d7864
2010-05-26 19:48:12 +00:00
Adam- 0018f790ed Fixed some windows problems with db_mysql_execute
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2987 5417fbe8-f217-4b02-8779-1006273d7864
2010-05-26 19:48:08 +00:00
Adam- 6674797c7d Fixed some windows problems with db_mysql_execute
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2986 5417fbe8-f217-4b02-8779-1006273d7864
2010-05-26 19:48:04 +00:00
Adam- 1e2e80bf75 Changed User::AutoID to always log in the user to the core, and to set usermode +r on users that should be. Fixes everyone being identified but not usermode +r on inspircd 1.2
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2985 5417fbe8-f217-4b02-8779-1006273d7864
2010-05-25 20:21:59 +00:00
Adam- dc3744a71c Check if a module file exists before making runtime copy of it, keeps 0 byte sized unused modules out of the runtime/ directory
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2984 5417fbe8-f217-4b02-8779-1006273d7864
2010-05-25 20:21:54 +00:00
Adam- a36e536a4d Fixed a crash if /ns ghost is used without a password
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2983 5417fbe8-f217-4b02-8779-1006273d7864
2010-05-25 18:23:33 +00:00
Adam- 7f4afc22fa Truncate memo table before sqlsync and actually add sglines
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2982 5417fbe8-f217-4b02-8779-1006273d7864
2010-05-24 06:17:25 +00:00
Adam- 6e7479170e Fixed bug #1167 - Fixed rsquitting juped servers on InspIRCd1.2+
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2980 5417fbe8-f217-4b02-8779-1006273d7864
2010-05-23 20:46:29 +00:00
Adam- 543e0d770a Fixed bug #1165, fixed soem missing tables in /os sqlsync. Also added support for saving cs_levels
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2979 5417fbe8-f217-4b02-8779-1006273d7864
2010-05-23 20:46:23 +00:00
Adam- d5f0360175 Rewrote the nick colliding/releaseing/canceling system, fixes many many bugs on IRCds without svsnick and/or svshold
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2975 5417fbe8-f217-4b02-8779-1006273d7864
2010-05-22 07:40:22 +00:00
Adam- fae2710ba7 Fixed saving capsmin in the database, fixes the bug also fixed by the last commit
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2974 5417fbe8-f217-4b02-8779-1006273d7864
2010-05-21 23:05:38 +00:00
cyberbotx 8e39d5f219 Fix crash bug when there is a caps kicker in a channel but no alphabetic characters on a line.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2973 5417fbe8-f217-4b02-8779-1006273d7864
2010-05-21 22:36:06 +00:00
Adam- 0a91d582c9 Fixed a crash when a users realname changes when they are on a registered nick but not identified, and made my last commit about case insensitive oper names really work
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2972 5417fbe8-f217-4b02-8779-1006273d7864
2010-05-21 20:30:26 +00:00
Adam- 9b06dc5046 Made the oper:name config option case insensitive
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2971 5417fbe8-f217-4b02-8779-1006273d7864
2010-05-21 06:46:52 +00:00
Adam- 6fb5ca2315 Fixed db-convert to properly convert mlocked mode names for the new databases
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2970 5417fbe8-f217-4b02-8779-1006273d7864
2010-05-20 19:36:17 +00:00
Adam- 3860856dd2 Moved opertype access checking to NickAlises constructor, cleans up some code and fixes bug #1163
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2968 5417fbe8-f217-4b02-8779-1006273d7864
2010-05-19 06:17:55 +00:00
Adam- 2b4d834f8c Fixed a potential crash in os_szline because of a bad pointer passed to an event
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2967 5417fbe8-f217-4b02-8779-1006273d7864
2010-05-19 06:17:48 +00:00
Adam- 79c3a70ed7 Made is possible to change levels back to founder only and made founder only levels only apply to the real founder. Changed the defaults for things such as autoowner to ACCESS_QOP
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2965 5417fbe8-f217-4b02-8779-1006273d7864
2010-05-17 18:12:40 +00:00
Adam- f9c4baf8fc Free access and badwords list when channels are deleted
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2964 5417fbe8-f217-4b02-8779-1006273d7864
2010-05-17 18:12:26 +00:00
Adam- a0ff4cfed5 You dont see this
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2961 5417fbe8-f217-4b02-8779-1006273d7864
2010-05-14 20:56:40 +00:00
Adam- 5993a65b87 Fixed many windows problems in the debug build
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2960 5417fbe8-f217-4b02-8779-1006273d7864
2010-05-14 20:52:17 +00:00
Adam- 116a4b2bea Removed ns_noop_convert. The ns_noop module is for stable and almost 4 years old
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2959 5417fbe8-f217-4b02-8779-1006273d7864
2010-05-14 16:51:28 +00:00
Adam- 29619eb206 Finished r2957
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2958 5417fbe8-f217-4b02-8779-1006273d7864
2010-05-14 16:01:54 +00:00
DukePyrolator 78240c5790 Reversed the autoop flag to make it more logical. In 1.8, we set this flag to DISABLE autoop. Now we set this flag to ENABLE autoop. Also updated the database converter.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2957 5417fbe8-f217-4b02-8779-1006273d7864
2010-05-14 06:16:25 +00:00
Adam- da277ad2c9 Fixed all of the bugs related to bug #1162 and fixed mlock params to be saved correctly in the mysql database
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2956 5417fbe8-f217-4b02-8779-1006273d7864
2010-05-13 20:25:31 +00:00
DukePyrolator b88b98e627 fixed crashbugs in db_mysql_write when unsetting url, email and greet
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2955 5417fbe8-f217-4b02-8779-1006273d7864
2010-05-13 19:30:56 +00:00
DukePyrolator 0ab5111bda fixed crashbug in db_mysql_write on updating an empty greet message
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2954 5417fbe8-f217-4b02-8779-1006273d7864
2010-05-13 19:04:19 +00:00
Adam- 6c56c23837 Update core bot client names if the config is changed
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2953 5417fbe8-f217-4b02-8779-1006273d7864
2010-05-13 06:27:16 +00:00
Adam- bd2fda42cf Fixed a potential crash caused from accessing a uninitialized pointer when enforcing mlock
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2951 5417fbe8-f217-4b02-8779-1006273d7864
2010-05-12 01:53:29 +00:00
Adam- baa119f2e2 Changed the names of modes in the databases to be exactly the same way they are used internally. This will become very important in 1.9.3 later
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2949 5417fbe8-f217-4b02-8779-1006273d7864
2010-05-10 22:05:01 +00:00
Adam- 5351fb4e4a Save & load nick requests from db_plain
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2948 5417fbe8-f217-4b02-8779-1006273d7864
2010-05-10 19:26:18 +00:00
Adam- 2f3da52c3c Fixed tracking of InspIRCd channel mode R
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2945 5417fbe8-f217-4b02-8779-1006273d7864
2010-05-10 06:41:16 +00:00
Adam- 80969ad89a Fixed tracking of channel mode +L on InspIRCd 1.2
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2944 5417fbe8-f217-4b02-8779-1006273d7864
2010-05-10 06:30:17 +00:00
Adam- 7b6d1e1b52 Removed channel passwords from the CHAN_HELP_REGISTER and CHAN_HELP_DROP language strings
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2942 5417fbe8-f217-4b02-8779-1006273d7864
2010-05-08 20:58:11 +00:00
Adam- 0a371aec7b Removed an unneeded static_cast in enc_none
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2941 5417fbe8-f217-4b02-8779-1006273d7864
2010-05-07 20:57:29 +00:00
Adam- 011e426845 Removed the chanserv/aop/list command perm and switched it with chanserv/access/list. Fixed a bug so users on the access list can request the vop and hop list.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2940 5417fbe8-f217-4b02-8779-1006273d7864
2010-05-07 20:16:09 +00:00
Adam- 75f39dec7a Fixed bug #1159 and made the SQL fields holding timestamps more consistant
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2939 5417fbe8-f217-4b02-8779-1006273d7864
2010-05-06 17:08:55 +00:00
Adam- 3ebaa46c99 Revert "sql file should work fine on import now (exported via phpmyadmin, which puts constraints at the end)"
Revert "added DROP TABLE statements and english comments"
Revert "* SQL schema switched to InnoDB engine and UTF-8 encoding"

This reverts commit 196567ce68
This reverts commit 2e03670256
This reverts commit 7ffaa93865

git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2938 5417fbe8-f217-4b02-8779-1006273d7864
2010-05-06 16:45:34 +00:00
pimpmylinux 196567ce68 sql file should work fine on import now (exported via phpmyadmin, which puts constraints at the end)
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2937 5417fbe8-f217-4b02-8779-1006273d7864
2010-05-06 06:55:00 +00:00
DukePyrolator 2e03670256 added DROP TABLE statements and english comments
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2936 5417fbe8-f217-4b02-8779-1006273d7864
2010-05-06 05:25:23 +00:00
Adam- 845cca2722 Fixed a compile error in r2933
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2934 5417fbe8-f217-4b02-8779-1006273d7864
2010-05-05 23:39:41 +00:00
pimpmylinux 1b7749f108 SVN Id keyword to .h/.c/.cpp files
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2933 5417fbe8-f217-4b02-8779-1006273d7864
2010-05-05 23:09:14 +00:00
pimpmylinux 7ffaa93865 * SQL schema switched to InnoDB engine and UTF-8 encoding
* Defined several foreign keys and added some missing indexes

git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2932 5417fbe8-f217-4b02-8779-1006273d7864
2010-05-05 22:55:18 +00:00
Adam- 6bd04bc936 db_mysql_read now loads the full database
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2928 5417fbe8-f217-4b02-8779-1006273d7864
2010-05-04 18:43:13 +00:00
Adam- 8c1afc307a Fixed a crash because of a bad SQL query when changing your password
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2927 5417fbe8-f217-4b02-8779-1006273d7864
2010-05-03 20:38:27 +00:00
Adam- d002ea1952 Moved CODING, TODO, and Changes* to docs/. Removed unused empty file install-sh.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2926 5417fbe8-f217-4b02-8779-1006273d7864
2010-05-02 04:37:17 +00:00
Adam- 05eb3fd2d6 Added support for InspIRCd 2.0
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2925 5417fbe8-f217-4b02-8779-1006273d7864
2010-05-01 22:49:41 +00:00
Adam- 9fc99cdfbb Fixed ms_rsend reply when sending a memo to a nick
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2924 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-30 18:04:25 +00:00
Adam- 0f45f286eb Made ms_rsend work
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2923 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-30 17:09:09 +00:00
Adam- f07adb2b25 Do not join ChanServ to hold channels if the channel is syncing
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2922 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-30 00:08:36 +00:00
Adam- ab7e430170 Don't use botserv bots to hold channels open, becomes too much of a problem if people unassign/reassign bots etc
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2921 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-30 00:08:33 +00:00
Adam- 8aa7fbe0ea Properly track users who join channels using an exception
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2920 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-29 23:05:09 +00:00
Adam- 7fc9b4f943 Forward port of r2918
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2919 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-29 00:23:18 +00:00
Adam- 3d367e9bde Fixed a typo in Changes and added an entry about new ipv6 support
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2917 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-28 21:32:28 +00:00
Adam- 582212b361 Allow superadmins and ulines to join channels always
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2916 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-25 23:12:27 +00:00
Adam- 1528727cc8 Fixed a crash when shutdown when not connected
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2915 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-25 01:23:23 +00:00
Adam- 492b543c7e Fixed the /nickserv help info output to services opers and the reply from /chanserv help info to be correct
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2914 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-24 22:48:58 +00:00
Adam- 0bfe09ba5d Fixed loading negatively mlocked modes from the DB and fixed loading access creators
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2913 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-24 22:20:14 +00:00
Adam- 76534583db Fix a potential crash when removing SQLines
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2912 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-24 22:20:10 +00:00
Adam- b8674ee3fb Logout the SQLUser & any fake users after using commands
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2911 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-24 22:20:00 +00:00
Adam- 9f47e2b137 Fixed typo in CHAN_SET_PERSIST_SYNTAX lang string
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2910 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-24 20:41:00 +00:00
Adam- aff1d04bab Updated TODO
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2909 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-24 20:40:52 +00:00
Adam- 01b0ad461a Fixed crash when shutting down when db_mysql_execute is loaded and logusers is enabled
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2908 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-24 06:51:23 +00:00
Adam- 80c9c4903e Fixed dropping nicks registered through MySQL
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2907 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-24 06:51:19 +00:00
Adam- 757c7ad973 Fixed some typos in log messages, found by Lethality
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2906 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-24 06:51:14 +00:00
Adam- 531cba9251 Actually use readtimeout from the config & fixed many valgrind errors
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2905 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-22 19:40:58 +00:00
Adam- 752e87a9f0 Fixed two log message typos, patch from Lethality
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2904 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-22 00:32:18 +00:00
Adam- 508996215f Fixed cs_clear ops to not deop users twice on Unreal and made it always use svsmode_ucmode if it can
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2902 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-21 02:15:48 +00:00
Adam- f87398b532 Correctly handle recieving messages over 65.5 thousand bytes
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2901 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-20 23:33:09 +00:00
Adam- a6cc0a305e Reply with the correct idle times for the core service bots
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2898 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-17 15:48:30 +00:00
DukePyrolator bf84e48549 fixed missing SID before FJOIN in the inspircd12 protocol module
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2897 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-17 14:22:16 +00:00
Adam- 99559d1acd Fixed loading botserv bots time created & number of channels from the database, and only readd the core bots if none exist, not just if nickserv doesn't exist
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2892 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-15 02:23:41 +00:00
Adam- 12a4aa4dba Fixed crash on /ns release and made release actually work
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2891 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-13 18:37:35 +00:00
Adam- a53719d91e Remove +r from nonregistered channels
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2890 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-13 02:45:33 +00:00
Adam- 5a6ec7cf86 Fixed +q and +a channel modes on inspircd 1.2 if they have no prefixes
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2889 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-11 20:09:11 +00:00
Adam- e84db77a2c Correctly identify a user when they get autoidentified and made db_plain not crash if it gets a founderless channel
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2888 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-11 20:09:06 +00:00
Adam- 34f10d78fc Don't backup the database and not rewrite a new one (oops?)
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2887 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-11 07:29:51 +00:00
Adam- 5d3491e72f Dont allow the first user in registered syncing channel to retain their access if they arent allowed to have it
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2886 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-11 07:29:46 +00:00
Adam- 1e9de0c7f1 Return MOD_STOP in various places where the user executing the command had been killed, fixes a crash if a user gets killed for too many invalid passwords
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2885 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-11 00:29:07 +00:00
Adam- 626afff37d Dont backup the database unless there is a database to backup
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2884 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-11 00:28:59 +00:00
Adam- aa677072e0 Fixed cs_modes to add commands after the modes requiring them are introduced
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2883 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-10 22:58:46 +00:00
Adam- c424dce517 Made db_plain backup its databases
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2882 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-10 22:58:42 +00:00
Adam- 91f6b2e29d Made MySQL log errors when executing queries instead of crashing
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2881 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-10 19:16:55 +00:00
dukepyrolator 7d3138a4cc changed all mysqlpp::String::empty() calls to mysqlpp::String::size() to make it compile with older versions of the mysql++ library
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2880 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-10 17:15:08 +00:00
Adam- c4f40ed3a7 Fixed tracking of InspIRCd mode +J and fixed mode manager and stacker to handle parameter modes correctly
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2879 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-09 22:50:48 +00:00
Adam- a1c49c827f Fixed a problem with binding to certian IPs
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2878 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-09 19:41:44 +00:00
Adam- 1f738f0ad4 Fixed a potential crash when a user does not pass connection checks (akill/session)
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2877 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-09 18:51:05 +00:00
Adam- af45426be5 Fixed a crash when linking servers
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2876 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-09 18:11:00 +00:00
dukepyrolator 278314f8be fixed a small typo in the language files
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2875 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-09 16:10:46 +00:00
dukepyrolator 4e594d3acd fixed the database converter (streams dont like null pointers)
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2874 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-09 14:27:54 +00:00
Adam- 89120afeba Fixed cs_ban, os_jupe, and os_restart
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2873 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-09 06:26:08 +00:00
Adam- 1a3a4b275f Removed the OnFind events, they are not necessary anymore and just waste CPU
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2872 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-09 06:04:52 +00:00
dukepyrolator a840ef8ae8 added a new event OnFinishSync, that allows modules to send additional data to the IRCd before we send the EOB
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2871 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-09 05:28:46 +00:00
dukepyrolator 2c79273205 changed the way how the IV is stored with the password and renamed some variables to make the code more understandable
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2870 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-09 05:22:25 +00:00
Adam- ac19ba79d1 Process the socket engine one last time before Anope disconnects to send everything through to the uplink
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2869 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-09 05:04:21 +00:00
Adam- a40c22a729 Made the mode stacker never send a mode change for something that is already (un)set, and set -r when dropping channels
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2868 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-09 05:04:17 +00:00
Adam- 911eeea867 Fixed enc_none OnDecrypt to work correctly on Windows
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2867 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-09 05:04:09 +00:00
Adam- 1ec931a93a Fix a typo in Changes.conf
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2866 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-09 05:04:04 +00:00
Adam- 93949b8b96 Fixed windows compile on new sockets
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2865 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-09 05:03:57 +00:00
Adam- 6a70b5385b Fixed ns_getpass and ns_sendpass to not load when there is no supported encryption loaded
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2864 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-09 01:09:55 +00:00
Adam- f483ab87c6 Updated Change log
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2863 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-08 21:00:28 +00:00
Adam- 973ecb7058 Rewrote sockets. This adds support for IPv6 and makes Anope capable of reconnecting if it loses connection to the uplink.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2862 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-08 20:23:00 +00:00
Adam- e1ff14e0c4 Fixed make install
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2857 5417fbe8-f217-4b02-8779-1006273d7864
2010-04-04 00:54:00 +00:00
Adam- b2380300ff Added a small example webpage that can be used to register nicknames online via SQL
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2852 5417fbe8-f217-4b02-8779-1006273d7864
2010-03-31 20:53:08 +00:00
Adam- 2404bb74c5 Fixed windows build
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2850 5417fbe8-f217-4b02-8779-1006273d7864
2010-03-31 06:21:16 +00:00
Adam- b1c34faf49 Fixed cs_xop to not add its commands until after it knows what modes as supported by the IRCd
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2849 5417fbe8-f217-4b02-8779-1006273d7864
2010-03-31 04:42:00 +00:00
Adam- b55ac06019 Added akicks into SQL
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2848 5417fbe8-f217-4b02-8779-1006273d7864
2010-03-31 04:41:56 +00:00
Adam- eaf211d59c Burned db-merger & docs, it will eventually need a complete rewrite
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2847 5417fbe8-f217-4b02-8779-1006273d7864
2010-03-31 04:41:49 +00:00
Adam- 94822c99c0 Added last used time to akick view
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2846 5417fbe8-f217-4b02-8779-1006273d7864
2010-03-31 04:41:44 +00:00
Adam- a3347b59a1 Marked mysql modules as a database module and fixed os_modlist to show database modules
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2845 5417fbe8-f217-4b02-8779-1006273d7864
2010-03-31 04:41:35 +00:00
Adam- 3c4b3f0407 Fixed --with-mysqlpp configure option on some systems
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2844 5417fbe8-f217-4b02-8779-1006273d7864
2010-03-30 19:17:50 +00:00
Adam- f4bcf833ec Finish rest of BotServ SQL stuff
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2839 5417fbe8-f217-4b02-8779-1006273d7864
2010-03-28 07:57:05 +00:00
Adam- aa90411f3a Track BotServ settings in SQL
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2838 5417fbe8-f217-4b02-8779-1006273d7864
2010-03-28 04:40:13 +00:00
Adam- 7e8e6e849b Removed some unused externs from extern.h
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2835 5417fbe8-f217-4b02-8779-1006273d7864
2010-03-24 01:17:43 +00:00
Adam- 3ffd917926 Rewrote arg parsing system, changed lots of std::string*s to std::string&, made --config arg, and made Anope print out a few lines of information when starting
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2833 5417fbe8-f217-4b02-8779-1006273d7864
2010-03-24 00:46:53 +00:00
Adam- 14fc57d24b Replaced old update/expire timers with newer timers
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2832 5417fbe8-f217-4b02-8779-1006273d7864
2010-03-21 19:57:25 +00:00
Adam- 9302af51a3 Added options:passlen
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2831 5417fbe8-f217-4b02-8779-1006273d7864
2010-03-21 19:57:22 +00:00
Adam- 287169d6e8 Made the database file name configurable
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2830 5417fbe8-f217-4b02-8779-1006273d7864
2010-03-21 19:57:14 +00:00
Adam- fc05827621 Made usermax and hostmax configurable
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2829 5417fbe8-f217-4b02-8779-1006273d7864
2010-03-21 19:57:08 +00:00
DukePyrolator 04bf65525a fixed typo in mysql query
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2828 5417fbe8-f217-4b02-8779-1006273d7864
2010-03-21 11:28:42 +00:00
DukePyrolator 872a00242e assigned botserv bots will now join permanent channels when syncing with our uplink
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2827 5417fbe8-f217-4b02-8779-1006273d7864
2010-03-21 08:43:12 +00:00
DukePyrolator d70948d81e fixed bad mysql query
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2826 5417fbe8-f217-4b02-8779-1006273d7864
2010-03-21 06:01:31 +00:00
DukePyrolator 3e77eaa218 fixed sending CHGIDENT without parameter
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2825 5417fbe8-f217-4b02-8779-1006273d7864
2010-03-20 22:27:11 +00:00
Adam- 28ccf79adf Fixed /ms list reply header to include the users nick
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2824 5417fbe8-f217-4b02-8779-1006273d7864
2010-03-20 04:59:50 +00:00
Adam- 6ebc85b900 Fix loading akills/sxlines from plaintext database
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2823 5417fbe8-f217-4b02-8779-1006273d7864
2010-03-20 04:59:43 +00:00
Adam- 51351aac2b Added in support for OperServ and MemoServ into SQL
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2822 5417fbe8-f217-4b02-8779-1006273d7864
2010-03-20 04:59:38 +00:00
Adam- ba4c7d8138 Made the exception list really work
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2820 5417fbe8-f217-4b02-8779-1006273d7864
2010-03-18 19:03:35 +00:00
Adam- 2871c4701b Fixed bug #1141, reodered some access checks in cs_kick and cs_modes to hide who is on the channel
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2817 5417fbe8-f217-4b02-8779-1006273d7864
2010-03-16 20:21:40 +00:00
Adam- f62eb16176 Removed old parts for 1.7.x from mydbgen and fixed db_mysql_write query for /nickserv set
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2814 5417fbe8-f217-4b02-8779-1006273d7864
2010-03-15 23:35:47 +00:00
Adam- b7477fc4d0 Foward port of r2809
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2812 5417fbe8-f217-4b02-8779-1006273d7864
2010-03-13 20:46:34 +00:00
Adam- faed18f6e8 Fixed loading memo messages from the flatfile databases
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2806 5417fbe8-f217-4b02-8779-1006273d7864
2010-03-09 05:26:10 +00:00
Adam- ce79b5023f Made guestnick generation really work
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2805 5417fbe8-f217-4b02-8779-1006273d7864
2010-03-09 01:25:09 +00:00
Adam- 27364ac890 Added the --with-mysqlpp option to configure to tell it where mysql++ is installed at
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2804 5417fbe8-f217-4b02-8779-1006273d7864
2010-03-08 03:08:37 +00:00
dukepyrolator dd7d2d4cf0 added a check for null pointers
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2803 5417fbe8-f217-4b02-8779-1006273d7864
2010-03-06 10:33:28 +00:00
Adam- 023c2188f8 Added help for sqlsync and fixed installing mydbgen into the wrong directory when using configure
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2802 5417fbe8-f217-4b02-8779-1006273d7864
2010-03-06 07:34:19 +00:00
Adam- ab1f8e01fa Made it so you can register empty nonregistered channels to make registering channels through SQL a bit more effective, fixed a some small bugs found on the testnet, added some missing modes into InspIRCd1.2 support, and updated TODO and Changes.lang
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2799 5417fbe8-f217-4b02-8779-1006273d7864
2010-02-28 22:12:09 +00:00
Adam- 3f80e1cad0 Added in support for live updating MySQL databases and the ability to execute commands to Anope through MySQL. Currently database support only applies to NickServ, ChanServ and BotServ but will be expanded soon.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2798 5417fbe8-f217-4b02-8779-1006273d7864
2010-02-28 17:33:31 +00:00
Adam- 393b5ab26e Marked mode +f on inspircd1.2 as minusnoarg
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2797 5417fbe8-f217-4b02-8779-1006273d7864
2010-02-28 05:39:50 +00:00
Adam- 9edede4f3a Removed OnBotPreLoad event, this is a much better way to prevent multiple of the same bots being loaded
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2796 5417fbe8-f217-4b02-8779-1006273d7864
2010-02-25 07:12:17 +00:00
Adam- 235c4ae95c Rewrote part of the Timer and CallBack code for modules to be sane
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2795 5417fbe8-f217-4b02-8779-1006273d7864
2010-02-25 06:20:00 +00:00
Adam- 54a60add71 Actually use the cmdTable pointer in bot structures, it now points to the bots command hash
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2794 5417fbe8-f217-4b02-8779-1006273d7864
2010-02-23 01:33:17 +00:00
cyberbotx a06e674305 Correctly identify CMake 2.8.x as being CMake 2.6 or better.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2793 5417fbe8-f217-4b02-8779-1006273d7864
2010-02-20 04:21:15 +00:00
Adam- 84ecd1866c Added generic support for unknown modes told to Anope at runtime by the IRCd
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2790 5417fbe8-f217-4b02-8779-1006273d7864
2010-02-12 19:51:16 +00:00
Adam- 2eb2cb7650 Changed up a small part of the mode API for preparation for dynamic mode support at runtime
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2789 5417fbe8-f217-4b02-8779-1006273d7864
2010-02-10 23:40:54 +00:00
Adam- fcc08f61bc Updated docs to reflect CAPAB change
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2788 5417fbe8-f217-4b02-8779-1006273d7864
2010-02-10 00:32:19 +00:00
Adam- 512b5bdaf3 Rewrote & fixed CAPAB support
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2786 5417fbe8-f217-4b02-8779-1006273d7864
2010-02-08 03:09:19 +00:00
DukePyrolator f4db8c5360 fixed some uninitialized pointers
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2785 5417fbe8-f217-4b02-8779-1006273d7864
2010-02-07 00:03:10 +00:00
Adam- 6b2f9e25cd Fix typo in inspircd11 that would cause people not to get status from FJOINs
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2784 5417fbe8-f217-4b02-8779-1006273d7864
2010-02-06 20:16:30 +00:00
Adam- 4099944013 Recieve the max number of modes we can set at once from the IRCd and use it
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2783 5417fbe8-f217-4b02-8779-1006273d7864
2010-02-06 19:27:32 +00:00
Adam- 87b62c433d Remove protectbotserv option from modes, just use options:botmodes instead
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2782 5417fbe8-f217-4b02-8779-1006273d7864
2010-02-06 19:27:10 +00:00
Adam- de99f89894 Parse CAPAB from the server to determin what modes we know about
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2781 5417fbe8-f217-4b02-8779-1006273d7864
2010-02-06 19:26:42 +00:00
Adam- 308070e019 We now store a list of users using a NickCore in the NickCore, this prevents having to loop every user all the time to find them
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2780 5417fbe8-f217-4b02-8779-1006273d7864
2010-02-04 23:49:27 +00:00
Adam- 3d4cf39940 Only set necessary modes on people, eg dont set +qaohv.. unnecessary
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2779 5417fbe8-f217-4b02-8779-1006273d7864
2010-02-02 03:21:03 +00:00
Adam- 122dcd082a Added options:botmodes to configure what modes BotServ bots should use in channels
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2778 5417fbe8-f217-4b02-8779-1006273d7864
2010-02-02 03:20:58 +00:00
DukePyrolator aa4b3e2563 replaced the alog() command with a new type-safe and stream-based Alog()
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2777 5417fbe8-f217-4b02-8779-1006273d7864
2010-01-31 06:15:29 +00:00
Adam- 47504c9de5 Fixed db-convert and enc_old to work when converting databases using enc_old
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2776 5417fbe8-f217-4b02-8779-1006273d7864
2010-01-24 23:15:08 +00:00
Adam- 0ed0fa4af6 Rewrote how Anope stores channel status modes on users.
This allows 3rd party modules to add and track their own status mode.
Additionally we now store a users status in both the UserContainer and ChannelContainer.
This also fixes the ModeStacker to not send any mode strings unnecessarially and shuffles some code
around so we don't have to manually remove channels from users lists everywhere.

git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2775 5417fbe8-f217-4b02-8779-1006273d7864
2010-01-21 06:31:17 +00:00
DukePyrolator 15817208aa fixed a compile error on windows
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2765 5417fbe8-f217-4b02-8779-1006273d7864
2010-01-16 20:15:14 +00:00
Adam- ff13d00eb5 Removed c_userlist and u_chanlist, replaced with std::list
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2764 5417fbe8-f217-4b02-8779-1006273d7864
2010-01-16 06:57:14 +00:00
Adam- aaf1cefd1c Added channels.h and moved channel stuff from services.h to it
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2763 5417fbe8-f217-4b02-8779-1006273d7864
2010-01-16 06:56:57 +00:00
Adam- c4c1242ac7 Fixed bug #1135 - Don't kick or ban ulined clients
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2762 5417fbe8-f217-4b02-8779-1006273d7864
2010-01-15 19:30:11 +00:00
DukePyrolator f432789853 some code cleanup in enc_sha256
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2760 5417fbe8-f217-4b02-8779-1006273d7864
2010-01-15 18:07:41 +00:00
DukePyrolator 1cf1f044fb burned helpserv from README
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2759 5417fbe8-f217-4b02-8779-1006273d7864
2010-01-15 05:40:26 +00:00
Adam- 525dfe12e6 Added param arg to ChannelModeSet/Unset events, and fixed it to not ignore status and list modes
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2758 5417fbe8-f217-4b02-8779-1006273d7864
2010-01-14 21:30:38 +00:00
Adam- 0d6fa568ec Use commasepstream in do_join and do_topic, much cleaner
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2757 5417fbe8-f217-4b02-8779-1006273d7864
2010-01-14 21:30:15 +00:00
Adam- fadc61f89e Fixed crash caused by r2732 caused by adding someone to the exception list
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2756 5417fbe8-f217-4b02-8779-1006273d7864
2010-01-14 21:29:39 +00:00
Adam- 711787b54d Burned do_sjoin and rewrote it to be sane. This changes how Anope handles new channel creations drasitcally as we now truely track it all instead of hack around it by not initially tracking user joins to new channels
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2755 5417fbe8-f217-4b02-8779-1006273d7864
2010-01-14 21:29:08 +00:00
sjaz f2c44c67b5 Update copyright for CBX
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2754 5417fbe8-f217-4b02-8779-1006273d7864
2010-01-11 20:28:59 +00:00
pimpmylinux 0a61c06860 updated copyright info for 2010
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2753 5417fbe8-f217-4b02-8779-1006273d7864
2010-01-11 19:36:24 +00:00
pimpmylinux ef442c3dc8 some language fixes ported from stable
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2751 5417fbe8-f217-4b02-8779-1006273d7864
2010-01-11 19:06:21 +00:00
Adam- 420b11a235 Rewrote the os_staff command to work properly with the account system. This also fixing displaying users on opered nicks when not on their main nick
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2749 5417fbe8-f217-4b02-8779-1006273d7864
2010-01-11 18:36:04 +00:00
Adam- 5ad60b70ee Forward port of r2747
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2748 5417fbe8-f217-4b02-8779-1006273d7864
2010-01-11 14:28:48 +00:00
Adam- b73210e538 Rewrote the code that handles and sends kicks
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2746 5417fbe8-f217-4b02-8779-1006273d7864
2010-01-10 22:56:03 +00:00
DukePyrolator 01d43e7db5 changed enc_sha256 to use random salts instead of a hardcoded salt
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2745 5417fbe8-f217-4b02-8779-1006273d7864
2010-01-10 19:58:32 +00:00
DukePyrolator 20b5056315 changed the source argument of enc_decrypt to const
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2744 5417fbe8-f217-4b02-8779-1006273d7864
2010-01-10 19:56:16 +00:00
DukePyrolator d66e928529 services will now send the correct message on /cs invite <nick>
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2742 5417fbe8-f217-4b02-8779-1006273d7864
2010-01-09 19:35:01 +00:00
DukePyrolator 4ae43c7dd2 added a salted sha256 encryption module
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2741 5417fbe8-f217-4b02-8779-1006273d7864
2010-01-09 08:56:58 +00:00
DukePyrolator 5e62e8f22e changed all password fields to std::string and reworked the way how the enc modules handle the passwords
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2740 5417fbe8-f217-4b02-8779-1006273d7864
2010-01-09 08:49:00 +00:00
DukePyrolator a4b015b39d fixed a crashbug in os_ignore on db saving and cleaned up the db code in hs_request
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2739 5417fbe8-f217-4b02-8779-1006273d7864
2010-01-09 06:54:11 +00:00
Adam- 0761d4f74b Fix crash caused by trying to add an akick to a channel when certain types of exceptions are set, this also fixes entry_match to match with case insensitivity, as bans/excepts/invexs arent case sensitive
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2738 5417fbe8-f217-4b02-8779-1006273d7864
2010-01-06 22:55:21 +00:00
Adam- e34448092e Messaging service@server.name works again as it should
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2737 5417fbe8-f217-4b02-8779-1006273d7864
2010-01-06 21:30:22 +00:00
Adam- 9124a3be53 Fixed windows build and cleaned up a few small things
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2736 5417fbe8-f217-4b02-8779-1006273d7864
2010-01-06 20:09:48 +00:00
cyberbotx b462814760 Changed 'char *' fields in BotInfo to 'std::string', cleanup of bots.cpp, changed many other functions to use 'const std::string &' arguments as a chain reaction.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2733 5417fbe8-f217-4b02-8779-1006273d7864
2010-01-04 06:40:24 +00:00
Adam- 2708eea5d1 Removed NICKMAX and CHANMAX, replaced user->nick, c->name, and ci->name with std::string
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2732 5417fbe8-f217-4b02-8779-1006273d7864
2010-01-04 05:45:58 +00:00
cyberbotx f58026749b Fixed base64 functions to be const safe until I can convert them to use std::string instead, also a little cleanup while I was in there.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2729 5417fbe8-f217-4b02-8779-1006273d7864
2010-01-03 07:42:49 +00:00
Adam- ed568f4750 Fixed db-convert to really convert vhosts
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2728 5417fbe8-f217-4b02-8779-1006273d7864
2010-01-03 04:36:36 +00:00
Adam- de824a599a Fixed bug #1121 - Fixes a potential crash when a user changes hosts
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2725 5417fbe8-f217-4b02-8779-1006273d7864
2010-01-02 08:21:12 +00:00
Adam- a819cb0cc0 Rewrote the vhost code, and moved it to be part of nickalias instead of in its own list. This also fixes being able to steal other users vhosts with /hs on
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2724 5417fbe8-f217-4b02-8779-1006273d7864
2010-01-02 08:20:59 +00:00
cyberbotx 3617d79788 Convert 'const char *' and 'char *' function arguments to 'const std::string &' instead, done in actions.c along with chain reactions in other files.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2723 5417fbe8-f217-4b02-8779-1006273d7864
2010-01-02 04:55:43 +00:00
Adam- 657e1deb59 Added in new plaintext databases. Note: This currently has no automatic backup feature. Big thanks to Phil on this for mass scale testing
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2722 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-31 01:25:10 +00:00
Adam- c595e6755d Fixed not being able to restart if anope was started from outside of the directory it is in
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2721 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-30 23:18:16 +00:00
Adam- 4fd169b184 Added in support for permanet channel modes on non-registered channels
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2720 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-30 02:07:17 +00:00
Adam- 7665af27cd Chnaged ChannelModeSet/Unset events to be able to block checks such as secureops and mlock, and made it so you can't set a mode already set or unset a mode already unset so the modestacker doesn't send modes it doesn't need to
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2719 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-29 23:16:10 +00:00
sjaz df107dac1f Fix small typo in services.conf - thanks Phil.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2718 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-27 19:20:26 +00:00
Adam- bfd252b517 Send only the newly formatted users string to do_sjoin when using inspircd12, not the old one and the new one, as this implies the old users are parameters for modes, which makes mode manager unhappy
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2717 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-25 20:42:02 +00:00
DukePyrolator 90a500ffd6 fixed a small bug in the extensible class
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2716 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-25 19:11:04 +00:00
Adam- 80cbac3769 Replaced some static_casts related to modes with dynamic_cast - its a bit safer
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2715 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-23 08:41:22 +00:00
Adam- f82640af7c Fixed bug #1119 - Fixed a few help replies to respect the nickserv msg option when sending blank lines
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2714 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-22 23:59:06 +00:00
cyberbotx 77f0cd0c46 Change OperType's name to be ci::string instead of std::string, should hopefully make it so it doesn't matter what case is used in the oper blocks compared to the opertype blocks.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2713 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-21 02:30:14 +00:00
Adam- 7a7f1f8390 Rewrote part of extensible, it will now automatically unallocate memory for us so we don't have to manually delete it everywhere anymore
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2711 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-20 18:39:52 +00:00
Adam- 861fe9e7b3 Added BotInfo* sender arg to all of the User mode functions, changed IRcdProto::SendMode for channels to accept a Channel pointer and fixed unsetting users vhosts on Unreal
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2710 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-17 02:10:35 +00:00
Adam- 453963eeae Moved /chanserv unban to its own module and added support for unbanning a nickname, this readds !unban nick
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2709 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-16 23:50:33 +00:00
Adam- aad1a4ca8d Hopefully this fixes detecting if Unreal sends a TS at the end of the mode string and removing it, which keeps it from being passed to mode handler
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2708 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-16 23:50:19 +00:00
Adam- c6e3324b30 Made many of the functions in IRCDProto accept the relative object pointers instea of char* everywhere, and updated TODO
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2706 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-16 02:25:38 +00:00
robbeh 98aa38d800 Added !K trigger to kick people and updated Changes
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2705 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-15 21:31:53 +00:00
robbeh f1c975c89f Added a KB alias to ban to allow the !kb fantasy trigger
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2704 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-15 21:29:48 +00:00
Adam- 3beac16030 More work on db-convert, almost done. This also moves the bot section of the db above the chan section, so we can check if channel bot names are valid
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2703 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-14 23:52:59 +00:00
Adam- 511c4b73d2 Updated docs/IRCD to reflect recent changes in the ircdvar struct, and made botinfo constructors set created time not bs_bot, db loaders will change it later if needed
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2702 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-14 21:58:33 +00:00
Adam- 6f5bc22584 Did some more work on db-convert
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2701 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-14 03:50:27 +00:00
Adam- 744d6d4030 Set the created time for BotServ bots correctly
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2700 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-14 03:50:23 +00:00
Adam- d4af97a7a7 Ripped out old databases
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2699 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-14 00:56:58 +00:00
Adam- 710355fd2c Don't allow mlocking/defconing modes such as beIohv
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2698 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-13 23:14:20 +00:00
Adam- 46c0d40009 Moved hostserv/set priv to commands, only check for HasCommand() when trying to execute commands and not HasPriv(), as Privs should never be necessary to execute any command
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2697 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-13 19:57:22 +00:00
Adam- a7ac6a0ac7 Added in a modestacker and rewrote almost all of the remaining old mode code
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2696 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-13 19:32:19 +00:00
DukePyrolator 3a956c51be do not show the NICK_INFO_FOR_MORE message when the user has no permission to do it
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2695 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-11 21:17:08 +00:00
Adam- 280dcc7597 Only show the user as online in /nickserv info if they are identified for the group of that nick
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2693 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-08 02:33:39 +00:00
DukePyrolator 37de1286fa added a function to convert some mlock modes
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2692 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-07 22:30:43 +00:00
Adam- 4630ae454a Added options:mlock in the config so you can set what modes should be locked on new channels
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2690 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-05 22:12:48 +00:00
Adam- 42b8cfe404 Got rid of some now unnecessary code in config.c and moved Config.Opers.clear() to InitOpers where it belongs
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2689 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-05 21:04:15 +00:00
cyberbotx 935c1974e8 Fix crontab script to correctly find services.pid, it's not in ~/anope/bin, it's in ~/anope/data.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2687 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-05 16:27:35 +00:00
Adam- f913188991 Added ci::string to run-cc.pl message filters, and fixed irc::string to display properly aswell
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2686 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-05 06:11:23 +00:00
Adam- eadf52caf2 Added ns_resetpass which can be used to reset user passwords by email, very useful if you're using encryption
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2685 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-05 05:44:02 +00:00
Adam- 661755a199 Fixed crash when using smartjoin and assigning a bot to an +i channel, reported by Platzii
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2684 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-04 23:11:08 +00:00
DukePyrolator 17a4789c1c some code cleanup
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2682 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-04 06:32:17 +00:00
Adam- 180ac9e4d2 Changed Extensible::Extend to not unnecessarially cast every pointer it recieves to char* and then to void*, but to just change it to void*. This allows storing of various things that the char* cast messed up, such as time_t etc
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2681 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-03 01:17:08 +00:00
DukePyrolator d4b595fdb8 the database converter can now convert the operserv database
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2678 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-29 20:55:41 +00:00
DukePyrolator f9cd8c200c the database converter can now handle a broken bot.db from 1.9.0
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2677 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-29 09:32:32 +00:00
DukePyrolator 0557f090fb fixed some bugs in the database converter
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2676 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-29 08:31:44 +00:00
DukePyrolator 23b3382347 updated database converter
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2675 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-29 07:56:35 +00:00
Adam- a08b3ec592 Massive move of all of the Config variables out of global scope to the Config class
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2674 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-28 23:02:07 +00:00
Adam- f6b823ade8 Set all of the default channel flags on new channels. Thix fixes persistant not being set on newly registered channels
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2673 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-27 07:41:21 +00:00
Adam- 4fac8d6a91 Foward port of part of r2668
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2669 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-25 21:38:50 +00:00
DukePyrolator 4f550d29aa fixed a crash when a user connects without a vhost
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2666 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-24 06:19:32 +00:00
Adam- 68ef593292 Properly remove users on access lists that are below voice status when converting to XOP
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2664 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-24 03:05:38 +00:00
Adam- 24f7ffcf18 Remove the permanent channel mode from channels that are dropped/expired/etc
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2663 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-24 01:19:12 +00:00
Adam- c3529b6129 Marked +l and +L on InspIRCd 1.2 as minus no arg
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2662 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-24 01:18:59 +00:00
DukePyrolator c7893e471f updated french lang file. patch provided by nemosphere
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2661 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-21 20:51:01 +00:00
Adam- e514a3793d Changed the mode param handling code to be more into the general mode handling code, this cleans up and fixes some small problems with mlocking params. This also helps clarify that the ChannelInfo mode functions are for mlock only. Also, this adds the OnMLock and OnUnMLock events which can be used to control if something can be (un)mlocked
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2660 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-19 01:53:03 +00:00
Adam- 68381e69d9 Fix compile errors on some compilers that did not like our overloaded operators << on std::ostream
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2659 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-19 01:52:52 +00:00
cyberbotx aa421772e0 Make the correct folder be chmod'd on a *nix install of the tools directory (we got rid of installing the tools to a tools directory a long while back, now they go in the bin directory instead)
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2658 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-18 13:02:22 +00:00
Adam- 5179a0a40f Delete the correct entries from akick and badwords list when given a numlist
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2657 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-18 02:51:46 +00:00
cyberbotx da8a1c7b60 Remove some CoreExports and add them in other places, fixed a few minor warnings under Windows build, made Windows build create a static library out of win32_memory.cpp and use that with everything instead of relying on it being compiled into everything (saves compiling time).
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2656 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-18 01:05:12 +00:00
cyberbotx e10fe1cd76 Removed some unnecessary casts, used C++-style casts over C-style casts, fixed a few warnings (one possibly fatal one).
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2655 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-17 04:04:24 +00:00
Adam- 88330c07ad Cleand up alot of the code in bs_badwords, made it much more C++-ish
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2654 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-17 03:15:31 +00:00
cyberbotx 88c0edc8f8 Fix the EXTRA_CONFIG_ARGS part of Config so it actually gets used, and doesn't get clobbered on no input.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2653 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-16 12:59:31 +00:00
Adam- d82771900e Made the 'Module compiled against current version of Anope' message debug only
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2652 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-16 02:38:46 +00:00
cyberbotx 7eadde9911 Possible fix for header dependency calculation causing CMake to freeze due to recursive including, fixed by removing my code to do that and letting CMake figure this out on it's own. Seems to work here, but might need testing still.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2651 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-15 21:14:11 +00:00
Adam- 8e8a1d96e4 Fixed potential segfault when deleting users from the access list by number, reported by Cronus
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2650 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-14 05:10:34 +00:00
Adam- 842b5609dc Updated docs dir, specifically the IRCD and EVENTS file to be up to date with 1.9s new systems
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2648 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-13 23:52:37 +00:00
Adam- 960968b8cd Made /nickserv group work properly with the new account system
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2647 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-13 02:56:47 +00:00
Adam- 9c6576f78e Fix bug introduced in r2574 that would set passwords incorrectly when using enc_none
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2646 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-12 02:52:27 +00:00
Adam- 65628dfdec Fix default OnSyntaxError subcommand to be the last param if its size is less than the minimum required for the command
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2645 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-12 00:28:09 +00:00
Adam- 848c0aaa21 Made Command::Execute's params const
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2644 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-12 00:28:05 +00:00
Adam- d16f4930f4 Made Command::OnSyntaxError accept a subcommand parameter, we now give syntax error messages for subcommands (eg, cs_set) instead of giving the general syntax error for the main command
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2643 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-11 23:43:02 +00:00
Adam- 30b7e50a43 Replaced all of the char* params in cs_set with ci::string so we dont use stricmp all over, and updated coding style
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2642 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-11 07:57:03 +00:00
Adam- 0264072b53 Made disabling chanserv levels *really* disable them so noone can use them (even founder), and have the ability to set it to 10000 for founders.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2641 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-11 07:20:44 +00:00
Adam- 0bd3141407 Made DefCon not use a ChannelInfo structure for saving its modes & params, it was ugly
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2640 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-11 06:03:40 +00:00
Adam- b9190ebc16 Moved alot of stuff to constructors and destructors, instead of having functions everywhere to create and destroy objects
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2639 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-11 06:03:25 +00:00
Adam- 86e43f1f14 Added support for permanent channels. This supports both permanent channel modes and the ability to have BotServ bots stay in the channel to keep it open.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2638 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-11 02:47:05 +00:00
Adam- 9d37cf1d5a Made the Module::ServHelp() functions part of the event system
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2637 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-08 23:43:51 +00:00
Adam- 458be36a32 Rewrote all of the old C style flag systems into a new Flag class which everything inherits from. This breaks reading and writing flags to the old databases (and probably many other things aswell) - Don't use it
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2636 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-08 20:06:21 +00:00
Adam- 38ad96c57c Fixed /chanserv help forbid to allow you to forbid unregistered channels
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2634 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-08 19:53:05 +00:00
Adam- 1c1312624d Rewrote BuildStringList to use std::list instead of char**
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2632 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-08 18:00:54 +00:00
cyberbotx 608b63d979 Make CMake ignore the CMakeFiles directory, really only applies to Win32 build since it still allows in-source builds (unlike the *nix build).
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2631 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-08 15:42:38 +00:00
Adam- 9047b0347d Made mlock_on, mlock_off, access, and akick private in ChannelInfo
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2630 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-07 21:46:58 +00:00
Adam- 029f39964b Rewrote all of the akick code to be much cleaner
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2613 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-07 18:09:09 +00:00
Adam- 2ec83162d6 Added src/regchannel.cpp and moved the code from include/regchannel.h there
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2612 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-06 02:46:29 +00:00
Adam- 3317f406d2 Added /chanserv access view, which shows the access creator and last time used
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2611 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-06 02:08:15 +00:00
Adam- 95a017db9f Dont allow sending empty mode strings in check_modes
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2610 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-05 13:35:09 +00:00
Adam- 187868def9 Removed trailing -'s on mode strings sent in check_modes
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2609 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-05 03:32:33 +00:00
Adam- 154b0ded37 Rewrote part of check_modes to keep it from sending empty mode strings
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2608 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-04 23:28:40 +00:00
Adam- 3125c632b5 Made the -nothird optopn work
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2607 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-04 00:34:57 +00:00
Adam- 921ddbd517 Added OnPreNickExpire and OnPreChanExpire events, which can keep nicks and channels from expiring
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2605 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-03 02:05:45 +00:00
Adam- 65deeaf1e6 Moved some of the news variables out of the news module so other modules etc can access them, if needed
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2604 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-03 02:05:38 +00:00
DukePyrolator a1fe864c7f check for umode +r before sending svsmode -r
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2603 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-02 06:04:27 +00:00
DukePyrolator 9a0b1efc24 added a way to load multiple encryption modules at the same and to switch between encryption methods
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2602 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-02 05:22:35 +00:00
Adam- d2362719b2 Made do_nick return the user if I_OnPreUserConnect halts it if the user still exists, and removed unused defcon language string
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2600 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-30 17:13:50 +00:00
Adam- 987f371c0b Removed channel passwords and added /chanserv QOP command to add additional channel founders, aswell as access level 10000
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2599 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-30 02:38:06 +00:00
Adam- 6a9fa9f4d2 Rewrote all of the defcon code, and moved most of it to os_defcon. This fixes defcon to have the ability to use modes introduced to Anope at a later time than on startup (eg, from the IRCd), amongst other things
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2597 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-30 01:04:13 +00:00
Adam- 5fc268b750 Added I_OnPreUserConnect, I_OnUserModeAdd, and I_OnUserModeAdd events
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2596 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-30 01:03:54 +00:00
Adam- 5b62682223 Changed the "nickserv/confirm" opertype command to a permission, and added "nickserv/drop" permission used to drop other users nicks
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2595 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-29 00:44:26 +00:00
DukePyrolator 0b64cbc1d2 renaming to guestnick was not working properly
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2594 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-28 22:12:36 +00:00
Adam- fa622b4e9f Remove NickServ timers from TimerManager if we need to delete them, not just from NickServs timers - Fixes segfault reported by phantomal
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2593 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-28 15:12:47 +00:00
Adam- 52593ef71b Cleaned up some of the code in my last commit and made it a bit more consistant.. probably should have done this before but owell
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2592 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-27 13:19:01 +00:00
cyberbotx 9e48e683e7 Fix bug #1111, BS KICK should properly handle the CAPS, FLOOD, and REPEAT options now.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2591 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-27 11:52:51 +00:00
Adam- c64c2b6fd0 Rewrote part of chan_set_correct_modes and set Mode::ModeChar correctly
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2590 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-27 01:42:10 +00:00
Adam- a491eed3ff Added MinusNoArg to insp modes Ffj and unreal mode j
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2589 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-25 14:32:38 +00:00
Adam- a43424dbb9 Added internal tracking of InspIRCd1.2 channel modes BFfjMPT and user modes BcdGHIkQRSW, also added tracking of Unreal3.2s channel mode j
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2588 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-25 06:32:47 +00:00
Adam- 13f92e03be Document /ns confirm nick in /ns help confirm for services operators
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2587 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-25 04:13:07 +00:00
Adam- 6e3aa36876 Fixed passing invalid channel pointer to OnPartChannel if the last user in a channel parted, now we use NULL and just give it the channel name
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2586 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-25 04:12:54 +00:00
Adam- 7a429517af added options:enablelogchannel config file option, which turns on the logchannel on startup. yay!
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2585 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-25 04:12:47 +00:00
Adam- 0e8de37778 Rewrote part of news system and moved it all to os_news.c. Removed src/news.c
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2584 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-25 04:12:34 +00:00
Adam- 338cb38ee8 Added 4 new events for (un)setting modes on channels and users
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2583 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-25 04:12:21 +00:00
Adam- 8330009373 Actually use the I_OnRestart event
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2582 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-25 04:12:13 +00:00
Adam- 5ab705b6fe Fixed memos so identified users not on the nick's access list can send them
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2581 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-25 04:12:08 +00:00
cyberbotx a6c5207859 Move 1.9.1 TODO to Changes (as 1.9.1 was released), update Changes.conf, Changes.lang, and remove Changes.mysql (probably should've been done before 1.9,1's release, but better late than never).
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2580 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-24 03:49:49 +00:00
sjaz 2361cb8d40 Couple of typos in hs_request. Thanks Fudge.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2579 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-23 10:04:53 +00:00
sjaz d08461907c Couple more typo's from Fudge, cheers!
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2578 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-22 11:10:16 +00:00
sjaz fb997c5057 Fixed typo in example.conf. Thanks Fudge.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2577 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-22 09:12:07 +00:00
Adam- 6de7cb6eed Added SUFFIXES .c .cpp .so to makefiles to clean up some of the code
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2576 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-20 21:39:13 +00:00
Adam- 624c5ba5b6 Fixed makesfiles to work on both bsd make and gnu make
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2575 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-20 21:05:51 +00:00
cyberbotx 0b3824c86a Apply some changes based on possible "flaws" found with flawfinder.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2574 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-20 04:34:03 +00:00
cyberbotx 0d3ec454de Fix a few things that bugged me when I was working on one of my own modules.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2573 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-18 21:10:39 +00:00
jantje_85 12ac162d9e Fixed small typo in dutch translation.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2572 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-18 18:45:18 +00:00
Adam- d935d3d1b8 Call I_OnUserConnect and display news before checking if the user should be killed by sessions, sessions checking can delete the user if the IRCd doesn't send QUITs on KILL which could cause a segfault
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2570 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-17 20:24:10 +00:00
Adam- b705f7eda6 Fix crash when trying to parse a USERHOST reply for a nonexistant user on Unreal
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2569 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-17 18:33:25 +00:00
cyberbotx 00494c9020 dos2unix on files.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2568 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-17 15:45:19 +00:00
Adam- bbea1b5679 Give the proper error messages when trying to load/unload already loaded/unloaded modules, instead of just returning syntax error
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2567 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-17 01:17:19 +00:00
Adam- 72fed4d9bb Renamed OnServerConnect(Server*) event to OnNewServer, we have two OnServerConnect's which is slightly confusing...
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2566 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-17 01:17:06 +00:00
Adam- 63f55fa78b Made MOD_STOP returned from commands really halt processing (stops OnPostCommand event being called)
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2565 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-17 01:17:00 +00:00
Adam- 11709eade6 Use the most recent NickServ collide/release timer for a nick instead of using the old and rejecting new ones
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2564 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-17 01:16:55 +00:00
Adam- 3806cd8440 Fixed bug #1110 - Fixed tracking of NickServ collide/release timers to only attempt to delete real ones
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2563 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-16 17:38:21 +00:00
Adam- f6510291aa Fixed inspircd12.cpp to actually work
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2562 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-14 17:39:25 +00:00
cyberbotx de917994f8 Fix CMake build generation, it was getting into an infinite loop due to the include of services.h inside of regchannel.h, will not happen now.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2561 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-13 23:58:56 +00:00
Adam- d3d64c27b1 Complete rewrite of everything associated with modes, this breaks saving and reading mlocked modes from the databases until the new databases are implemented
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2560 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-13 21:26:38 +00:00
sjaz 1fd6685132 Bump for SVN Version 1.9.2
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2559 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-13 17:06:06 +00:00
DukePyrolator 5a1bc6abb4 NICK_REG_PLEASE_WAIT and NICK_GROUP_PLASE_WAIT now show the seconds until you can register/group again
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2556 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-13 05:01:24 +00:00
cyberbotx 0d88137738 Code style cleanup, replace static_cast<std::string>() with std::string(), slight updates to config reader from InspIRCd.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2555 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-13 01:17:30 +00:00
Adam- 5bcb780c6d Changed /ns confirm to not assume the user you are confirming owns the nick (have it ask the user for the password now), added nickserv/confirm opertype command value, and changed OnNickRegister event param to be NickAlias* not User*
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2554 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-12 20:56:23 +00:00
DukePyrolator c79d189e89 fixed some bugs in ns_register.c
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2553 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-12 05:19:03 +00:00
Adam- 777c6cf073 Added OnPostDatabaseLoad event, which triggers after the cores databases have been loaded AND immediatly after a module is loaded *if* the core has already been loaded
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2552 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-11 15:31:34 +00:00
Adam- f06eed9809 Fixed restarting Anope on Windows
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2551 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-11 15:21:55 +00:00
sjaz 5bfc23a07e Removed proxy server from ulined servers in example config as more people use a client proxy scanner and this should reduce occurences of user servers being listed.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2549 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-11 12:39:07 +00:00
DukePyrolator 2896b388d7 on inspircd12, we now check for m_servprotect and give +k to our pseudo clients
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2548 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-11 04:15:32 +00:00
Adam- ba62e7be62 Reset errno before calling strtol in bs_kick, it would sometimes not allow valid kick settings to work
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2547 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-10 16:21:50 +00:00
cyberbotx 193ab9605b Disable Visual Studio warning 4100 (unreferenced formal parameter) during Windows build, otherwise we get thousands of completely harmless warnings which slow down the build process because they all have to be displayed.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2541 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-08 22:16:40 +00:00
Adam- 5d25bf4ac3 Removed OLDCHANGES from CMakes list of files to install, it doesn't exist anymore
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2540 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-07 22:42:02 +00:00
DukePyrolator dd3cce64c3 added a new event OnUserQuit, changed OnPartChannel and OnUserKicked to send the part/kick message and fixed OnUserNickChange
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2539 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-07 10:33:28 +00:00
Adam- fb5356ccbc Destroyed Command::help_param* and rewrote the help part of os_news to be much better
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2538 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-06 21:54:55 +00:00
Adam- 6ac61a1852 Fixed '/chanserv help set secure' responce
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2532 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-05 21:06:12 +00:00
Adam- 70918d2a01 Reset +r on registered channels after a netmerge when our creation time is newer than what we recieved (TS reop)
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2531 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-04 21:54:35 +00:00
jantje_85 f553583f36 Fix bug #1109. Anopes now replies with proper PONGs to rfc compliant PINGs .
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2529 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-03 15:34:52 +00:00
jantje_85 b22091e8fa Fixed TIME on InspIRCd 1.2.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2528 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-03 13:47:15 +00:00
Adam- 651aacd3e9 Fixed a typo introduced in r2523 causing NickServ kill to not work
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2527 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-03 03:39:12 +00:00
jantje_85 d02f03a7a8 Forward port of bugfix #1097. CS FORBID now clears excepts & invites before banning everyone to avoid rejoin floods.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2526 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-03 00:54:51 +00:00
Adam- dc4b9afebb Properly remove old callbacks from modules internal list of callbacks list, and cleaned up some of the timers code
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2524 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-02 22:19:19 +00:00
Adam- 85b409df85 Removed NS_IDENTIFIED/NS_RECOGNIZED/NS_ON_ACCESS from na->status, it doesnt belong there anymore and doesnt work. Replaced nick_recognized() with User::IsRecognized() which returns if youre recognized for the nick you are on, not necessarially the account youre logged in for.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2523 5417fbe8-f217-4b02-8779-1006273d7864
2009-09-30 21:50:32 +00:00
Adam- 383629d718 Fixed "make clean" to really clean up all the modules
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2522 5417fbe8-f217-4b02-8779-1006273d7864
2009-09-29 00:41:56 +00:00
Adam- f572827157 Removed old mod_version system for detecting module versions and replaced with the Module::GetVersion() function
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2521 5417fbe8-f217-4b02-8779-1006273d7864
2009-09-27 21:20:56 +00:00
Adam- 9d87b0f923 Fixed the remaining commands to always show all users help and to appear in the command list
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2520 5417fbe8-f217-4b02-8779-1006273d7864
2009-09-27 07:50:32 +00:00
Adam- 5695a8b595 Fixed bug #1108. nickserv status now replies correctly and has been changed to reply with a 3rd parameter which is for the account name the user is logged in as
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2519 5417fbe8-f217-4b02-8779-1006273d7864
2009-09-26 16:12:22 +00:00
Adam- 897f11e517 Clean up inspircd12.cpp from last commit
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2518 5417fbe8-f217-4b02-8779-1006273d7864
2009-09-26 16:12:08 +00:00
jantje_85 f17c36c031 We no longer use authentication tokens with InspIRCd 1.2.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2517 5417fbe8-f217-4b02-8779-1006273d7864
2009-09-26 14:49:06 +00:00
jantje_85 39960787de Fixed +r not being removed on netmerge from previously ID'd users who now using an unregged nick.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2516 5417fbe8-f217-4b02-8779-1006273d7864
2009-09-26 14:39:16 +00:00
jantje_85 43f85bf4f2 Fixed users not being validated if metadata is received, even though it s for a different nickgroup.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2515 5417fbe8-f217-4b02-8779-1006273d7864
2009-09-26 14:07:37 +00:00
jantje_85 8011cd4f0b Added missing part of #1107 patch. The last user to be introduced is now also validated.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2514 5417fbe8-f217-4b02-8779-1006273d7864
2009-09-26 12:52:08 +00:00
Adam- d8bd3afd76 Fixed bug #1107. We now have support for IRCds that send auth after the initial NICK/UID command, and automatically reidentifying users from their account name on InspIRCd1.2
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2513 5417fbe8-f217-4b02-8779-1006273d7864
2009-09-26 04:53:59 +00:00
Adam- 927d2717a9 Made User::CheckAuthenticationToken work properly when using any nick in a group
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2512 5417fbe8-f217-4b02-8779-1006273d7864
2009-09-26 04:53:48 +00:00
Adam- de7b668ad1 Removed the file name arg from MODULE_INIT
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2510 5417fbe8-f217-4b02-8779-1006273d7864
2009-09-20 00:40:14 +00:00
DukePyrolator 396cee7d0d partly fixed chanserv invite (it still sends the wrong message when inviting another user)
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2509 5417fbe8-f217-4b02-8779-1006273d7864
2009-09-17 05:35:43 +00:00
Adam- fcf104f0ca Really not send unknown command messages on non-fantasy commands
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2508 5417fbe8-f217-4b02-8779-1006273d7864
2009-09-16 23:31:43 +00:00
Adam- 09b92517d0 Removed MOD_HEAD, MOD_TAIL, and MOD_UNIQUE constants
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2507 5417fbe8-f217-4b02-8779-1006273d7864
2009-09-16 23:27:34 +00:00
DukePyrolator e16a512699 don't send any error messages on unknown fantasy commands
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2506 5417fbe8-f217-4b02-8779-1006273d7864
2009-09-16 17:26:33 +00:00
Adam- 68592b0445 Removed command position from Module::AddCommand(), it is no longer used because of OnPreCommand/OnPostCommand
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2505 5417fbe8-f217-4b02-8779-1006273d7864
2009-09-15 21:00:51 +00:00
DukePyrolator 2ee049d7d8 fixed a small issue in inspircd12 support, introduced with the last commit
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2504 5417fbe8-f217-4b02-8779-1006273d7864
2009-09-14 17:48:13 +00:00
DukePyrolator b88a12f8e5 fixed inspircd12 support - now we send a TS6SID on BURST
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2503 5417fbe8-f217-4b02-8779-1006273d7864
2009-09-14 17:40:47 +00:00
Adam- f4cc123f16 Removed super admin requirement for operserv/umode operserv/oline and operserv/svsnick, and replaced with opertype command strings
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2502 5417fbe8-f217-4b02-8779-1006273d7864
2009-09-13 03:58:37 +00:00
DukePyrolator e3486a3e4b fixed a crashbug on /ns set kill. thanks to Phantomal for reporting.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2501 5417fbe8-f217-4b02-8779-1006273d7864
2009-09-12 18:39:07 +00:00
Adam- 5971c272be Made elist_match_user match against users cloaked hosts
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2500 5417fbe8-f217-4b02-8779-1006273d7864
2009-09-12 16:44:01 +00:00
cyberbotx cc64a00216 Fix problem with CMake's auto-library search when being run on a subdirectory of src/modules, spotted with help from DukePyrolator.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2499 5417fbe8-f217-4b02-8779-1006273d7864
2009-09-12 05:49:15 +00:00
Adam- 7ea66a37d5 Fixes bugs #1105 and #1106
Now properly track users host changes and keep users cloaked hosts saved in memory


git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2498 5417fbe8-f217-4b02-8779-1006273d7864
2009-09-12 03:32:47 +00:00
adam- 46030bbc7e Correctly send modes string when introducing psuedo clients on InspIRCd
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2497 5417fbe8-f217-4b02-8779-1006273d7864
2009-09-12 03:14:08 +00:00
Adam- 887c18a6bf Foward port of Vipers os_oline fix in r2495
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2496 5417fbe8-f217-4b02-8779-1006273d7864
2009-09-10 01:46:40 +00:00
Adam- 2f93b4225f Added the OnBotPreLoad event to fix introducing StatServ
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2494 5417fbe8-f217-4b02-8779-1006273d7864
2009-09-07 17:03:55 +00:00
Adam- 004d9c7b18 Fixed Makefiles to only suppress building when using run-cc.pl
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2493 5417fbe8-f217-4b02-8779-1006273d7864
2009-09-06 04:02:36 +00:00
Adam- 1f6eff371d Fixed the reply when an oper tries to view an unregistered nicks alist to be correct
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2492 5417fbe8-f217-4b02-8779-1006273d7864
2009-09-05 20:05:47 +00:00
Adam- a63502ff55 Change quit on kill value in inspircd1.2 protocol module to 0
This is actually an inspircd bug - only the uplink confirms KILLs with a QUIT, the other servers will not.


git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2490 5417fbe8-f217-4b02-8779-1006273d7864
2009-09-01 00:32:36 +00:00
jantje_85 1f2206159e Fixed segfault bug & check_modes() going insane over uninitialized variable.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2489 5417fbe8-f217-4b02-8779-1006273d7864
2009-08-30 21:40:46 +00:00
cyberbotx 9900f83d94 Fix chanserv.c to compile after DEFCON changes.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2488 5417fbe8-f217-4b02-8779-1006273d7864
2009-08-30 20:54:30 +00:00
Adam- 1b4aec7bda Add messages at the bottom of HELP telling you if you can/cant use the command and why, and what permission is required if there is one
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2487 5417fbe8-f217-4b02-8779-1006273d7864
2009-08-30 20:46:07 +00:00
jantje_85 586c8a70f4 Forward port of several DEFCON fixes:
- Fixed defcon not setting modes on newly created unregged channels and failing to force remove defcon-locked modes. 
 - Fixed MLOCK locked mode removal getting priority over DEFCON locked mode setting.

git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2486 5417fbe8-f217-4b02-8779-1006273d7864
2009-08-30 20:29:57 +00:00
Adam- 0a6d617073 Fixed problem introduced in last commit
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2484 5417fbe8-f217-4b02-8779-1006273d7864
2009-08-30 07:00:37 +00:00
Adam- 1348ef100e Properly keep track of services enforcer clients internally, they should now quit when theyre supposed to!
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2483 5417fbe8-f217-4b02-8779-1006273d7864
2009-08-30 05:20:09 +00:00
Adam- bcffb94eaa Fixed an uninitialized variable in Timers that could make NickServCollide fail
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2482 5417fbe8-f217-4b02-8779-1006273d7864
2009-08-30 03:09:08 +00:00
adam- 7161edab00 Replaced all references in the lang files of services admins and roots to services oper
Removed all of the "Limited to X" messages, and more unused language strings


git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2481 5417fbe8-f217-4b02-8779-1006273d7864
2009-08-29 04:13:26 +00:00
adam- 03d3216cfe Removed OPER_HELP_OPER and OPER_HELP_ADMIN help entries, they are no longer used
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2478 5417fbe8-f217-4b02-8779-1006273d7864
2009-08-28 22:15:23 +00:00
adam- 56a6cea0d5 Fixed idle time and signon time when whoising services clients on inspircd1.2
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2470 5417fbe8-f217-4b02-8779-1006273d7864
2009-08-24 22:40:49 +00:00
pimpmylinux 3b7174319a fixed typo. i apologize for being an idiot, i promise i will test even oneliners next time...
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2469 5417fbe8-f217-4b02-8779-1006273d7864
2009-08-24 19:41:37 +00:00
pimpmylinux 1242eb5dc9 oops, sorry :(
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2466 5417fbe8-f217-4b02-8779-1006273d7864
2009-08-24 19:27:57 +00:00
pimpmylinux b0caa94985 fixed trying to delete sessions when a ulined server quits
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2465 5417fbe8-f217-4b02-8779-1006273d7864
2009-08-24 19:22:32 +00:00
cyberbotx 4a91b12221 Really fix running Anope from another directory besides bin, and also fix running it from bin (apparently gdb makes the 0 argument in main() the full path, but outside gdb it's not the full path).
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2463 5417fbe8-f217-4b02-8779-1006273d7864
2009-08-23 21:50:55 +00:00
cyberbotx c15707a018 Fix bug with User::SetRealname crashing when a user with a custom GECOS connects.
Fix handling of Anope's current directory, binary name, binary directory, and data directory. This also fixes using /os restart if run from outside the bin directory.
(The second fix above is a little hackish, should look into cleaning it up later.)

git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2462 5417fbe8-f217-4b02-8779-1006273d7864
2009-08-23 18:58:13 +00:00
DukePyrolator 4bf22fa2e6 added more events
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2461 5417fbe8-f217-4b02-8779-1006273d7864
2009-08-22 04:39:22 +00:00
adam- bcf9852eec Fixed bug #1095, do not resend client introduction when using /botserv bot add and initialized chancount in BotInfo constructor
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2460 5417fbe8-f217-4b02-8779-1006273d7864
2009-08-21 20:55:20 +00:00
cyberbotx a17d3dc27e Partial revert of r2449, my_memo_lang shouldn't have a char * parameter, const char * works just fine.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2459 5417fbe8-f217-4b02-8779-1006273d7864
2009-08-21 19:38:10 +00:00
cyberbotx 0f3110e271 Fix build under Windows.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2458 5417fbe8-f217-4b02-8779-1006273d7864
2009-08-20 02:49:09 +00:00
cyberbotx 6ce5c90619 Add a few items to outstanding issues in TODO, clean up a lot of warnings (not all, some require more widespread changes than this), and fix a few potential bugs.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2457 5417fbe8-f217-4b02-8779-1006273d7864
2009-08-19 23:13:30 +00:00
DukePyrolator 6c62e39680 fixed a possible crashbug on botserv help set
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2455 5417fbe8-f217-4b02-8779-1006273d7864
2009-08-19 19:54:10 +00:00
pimpmylinux 7916c7f393 updated italian nickserv and chanserv strings, more to come
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2454 5417fbe8-f217-4b02-8779-1006273d7864
2009-08-19 14:12:51 +00:00
adam- 8d247130d4 Fixed a crash when using commands if HostServ is disabled
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2453 5417fbe8-f217-4b02-8779-1006273d7864
2009-08-19 01:54:13 +00:00
adam- 89e05fb880 Changed /nickserv id to allow you to switch accounts without logging out first and /nickserv logout to log you out of your account and not check the nick
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2452 5417fbe8-f217-4b02-8779-1006273d7864
2009-08-15 01:15:21 +00:00
adam- ece55718e7 Set -r on nick change if appropriate and make nick tracking work correctly
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2451 5417fbe8-f217-4b02-8779-1006273d7864
2009-08-15 01:05:52 +00:00
adam- b9bf72c457 Set the correct opertypes on newly registered users
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2450 5417fbe8-f217-4b02-8779-1006273d7864
2009-08-12 23:52:25 +00:00
DukePyrolator 577870bb45 fixed a crashbug on /hostserv activate
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2449 5417fbe8-f217-4b02-8779-1006273d7864
2009-08-12 03:56:44 +00:00
rburchell 6b8728428b Make this really work now. Promise. serv_uplink double setting needs to go away in the future.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2447 5417fbe8-f217-4b02-8779-1006273d7864
2009-08-09 11:19:45 +00:00
rburchell 4d52274432 Introduce clients when we first see the uplink (i.e. successfully connected), not when the uplink has finished synchronising.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2446 5417fbe8-f217-4b02-8779-1006273d7864
2009-08-09 11:03:41 +00:00
rburchell 9464b59137 Merge do_restart_services and services_restart().
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2445 5417fbe8-f217-4b02-8779-1006273d7864
2009-08-08 17:18:21 +00:00
rburchell d5cf78e6f7 Remove fatal_sockerror(), as nothing actually uses it.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2444 5417fbe8-f217-4b02-8779-1006273d7864
2009-08-08 17:18:02 +00:00
rburchell eeb7c9c36d Also make use of synched state to introduce pseudoclients instead of blindly introducing them on connect.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2443 5417fbe8-f217-4b02-8779-1006273d7864
2009-08-08 16:39:51 +00:00
rburchell 862011a3ee Actually, make use of it now. Pseudoclients are introduced automatically if synched with uplink.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2442 5417fbe8-f217-4b02-8779-1006273d7864
2009-08-08 16:39:36 +00:00
rburchell 4e76d13428 Remove SSYNC_UNKNOWN. All IRCds can report sync state, and for those that _really_ can't, we can find out via PING/PONG exchange anyway. We will be making use of sync state more shortly.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2441 5417fbe8-f217-4b02-8779-1006273d7864
2009-08-08 16:39:14 +00:00
rburchell 51d869db57 ENDBURST support for inspircd(11|12).
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2440 5417fbe8-f217-4b02-8779-1006273d7864
2009-08-08 16:38:39 +00:00
DukePyrolator 64132f67c0 fixed a crashbug when adding a new botserv bot
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2439 5417fbe8-f217-4b02-8779-1006273d7864
2009-08-08 12:45:20 +00:00
adam- 43d72713c5 Fixed some problems with sepstream when parsing one char tokens
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2436 5417fbe8-f217-4b02-8779-1006273d7864
2009-08-08 04:06:03 +00:00
adam- 8df2076024 Clean up some of inspircds autoid code and make it not resend account name on nick change
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2435 5417fbe8-f217-4b02-8779-1006273d7864
2009-08-06 22:04:47 +00:00
sjaz ec398f6a55 Split off troubleshooting into its own file from FAQ and linked to the wiki for updates. (Thanks again Amanda)
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2433 5417fbe8-f217-4b02-8779-1006273d7864
2009-08-06 19:00:42 +00:00
sjaz b6deabc55a Updated FAQ to point to wiki for easy ongoing maintenance.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2432 5417fbe8-f217-4b02-8779-1006273d7864
2009-08-06 19:00:10 +00:00
sjaz dc261d9291 Missed pt.l in (Fixed wording in short description of CHANKILL from OS HELP)
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2431 5417fbe8-f217-4b02-8779-1006273d7864
2009-08-06 17:55:08 +00:00
sjaz 712b4a16be Fixed wording in short description of CHANKILL from OS HELP except in ru.l because it's scary. (Thanks Taros!)
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2429 5417fbe8-f217-4b02-8779-1006273d7864
2009-08-06 17:49:48 +00:00
sjaz c31e267403 Remove legacy windows installer scripts not used on 1.9 & obsolete epona2anope converter.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2427 5417fbe8-f217-4b02-8779-1006273d7864
2009-08-06 17:15:55 +00:00
sjaz 0abb809226 Fix Makefile/CMakeLists.txt with the removal of mydbgen
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2426 5417fbe8-f217-4b02-8779-1006273d7864
2009-08-06 17:09:06 +00:00
sjaz 3d2621349c Removed unused MySQL files and am.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2425 5417fbe8-f217-4b02-8779-1006273d7864
2009-08-06 16:58:06 +00:00
sjaz 8d621a71c9 dos2unix a couple more files.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2424 5417fbe8-f217-4b02-8779-1006273d7864
2009-08-06 16:55:33 +00:00
sjaz 761d90e1d7 unix2dos docs/README to appease Windows.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2423 5417fbe8-f217-4b02-8779-1006273d7864
2009-08-06 16:52:57 +00:00
sjaz c72a70ffaf dos2unix'd src/wildcard.cpp - Time to check for others!
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2422 5417fbe8-f217-4b02-8779-1006273d7864
2009-08-06 16:45:21 +00:00
sjaz 05942ff9bc dos/mac2unix'd docs/README and FAQ.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2421 5417fbe8-f217-4b02-8779-1006273d7864
2009-08-06 16:41:17 +00:00
sjaz 20b3c6437b Truncated version.log to remove 1.7/1.8 stuff.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2420 5417fbe8-f217-4b02-8779-1006273d7864
2009-08-06 16:37:35 +00:00
sjaz 24a5bdf0e7 Updated FAQ to point to real URL. Thanks Amanda. <3
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2419 5417fbe8-f217-4b02-8779-1006273d7864
2009-08-06 16:33:06 +00:00
sjaz f28fa07f3b Updated docs/README removing unsupported IRCDs on 1.9
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2418 5417fbe8-f217-4b02-8779-1006273d7864
2009-08-06 16:31:40 +00:00
sjaz 1cc976960b Updated docs/NEWS removing old 1.7/1.8 stuff for 1.9
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2417 5417fbe8-f217-4b02-8779-1006273d7864
2009-08-06 16:29:56 +00:00
sjaz a4bbe9908d Removed docs/OLDCHANGES because it refers to 1.6/1.7 stuff not relevant to 1.9.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2416 5417fbe8-f217-4b02-8779-1006273d7864
2009-08-06 16:27:06 +00:00
sjaz 1fc8b1dd60 Updated docs/MYSQL with 1.9 MySQL state of play.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2415 5417fbe8-f217-4b02-8779-1006273d7864
2009-08-06 16:23:43 +00:00
sjaz 85515696e3 Removed nicktracking from example config.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2414 5417fbe8-f217-4b02-8779-1006273d7864
2009-08-06 16:08:07 +00:00
sjaz 0b92ee8d30 Updated Changes.* to remove legacy branch/irrelevant stuff.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2413 5417fbe8-f217-4b02-8779-1006273d7864
2009-08-06 16:07:34 +00:00
sjaz 0fef23470c Fix path to anope binary in example.chk
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2412 5417fbe8-f217-4b02-8779-1006273d7864
2009-08-06 15:43:10 +00:00
sjaz 03f03a91ae Minor typo fixes in example.conf
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2411 5417fbe8-f217-4b02-8779-1006273d7864
2009-08-06 15:40:06 +00:00
DukePyrolator 1c33521c69 do not set mode +d on identify on inspircd
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2410 5417fbe8-f217-4b02-8779-1006273d7864
2009-08-06 04:49:06 +00:00
adam- 52f55ef9a0 Reset +r on change to grouped nick
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2409 5417fbe8-f217-4b02-8779-1006273d7864
2009-08-05 22:18:39 +00:00
adam- 06c26d468c Remove unneeded escapes on characters in lang files
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2408 5417fbe8-f217-4b02-8779-1006273d7864
2009-08-05 22:14:03 +00:00
adam- 45a35e61eb Fix for bug #1091, HELP can crash without optional services clients
enabled


git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2407 5417fbe8-f217-4b02-8779-1006273d7864
2009-08-04 19:31:47 +00:00
adam- 9801065683 Fixed two typos in bots.cpp that could cause crashes
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2405 5417fbe8-f217-4b02-8779-1006273d7864
2009-08-04 16:37:02 +00:00
adam- ce664a160b Fixed autoid
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2404 5417fbe8-f217-4b02-8779-1006273d7864
2009-08-04 01:56:14 +00:00
adam- 0d7e0274a4 Fix a crash in the ratbox protocol module when Numeric is not defined in the conf
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2403 5417fbe8-f217-4b02-8779-1006273d7864
2009-08-03 23:42:20 +00:00
adam- b8b891cc25 Fixed some memory leaks when setting vhosts on users
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2399 5417fbe8-f217-4b02-8779-1006273d7864
2009-08-01 08:16:27 +00:00
adam- bec179c197 Removed some now unneeded and unused language strings
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2396 5417fbe8-f217-4b02-8779-1006273d7864
2009-07-31 08:02:37 +00:00
adam- 10be3e9bb5 Fixed multiple problems with session tracking, read comments in users.c and sessions.c for more info
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2393 5417fbe8-f217-4b02-8779-1006273d7864
2009-07-26 22:29:37 +00:00
cyberbotx b2a57b0974 Changed params parameter of Command's Execute() from std::vector<std::string> to std::vector<ci::string>, seems to have no ill effects but may require some testing to be sure.
Also a few minor cleanups here and there.

git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2392 5417fbe8-f217-4b02-8779-1006273d7864
2009-07-25 00:37:43 +00:00
cyberbotx 443654f15b Changed subcommand parameter of Command's OnHelp() from std::string to ci::string, allows sub-help (like NS SET PASSWORD) to be called without requiring the subcommand to be sent by the user in all caps.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2391 5417fbe8-f217-4b02-8779-1006273d7864
2009-07-24 01:47:47 +00:00
cyberbotx 99fe46de55 Implement case-insensitive versions of std::string, irc::string for RFC-style case-insensitivity and ci::string for ASCII-style case-insensitivity, code from InspIRCd. Not yet used, but adding it in to use with the help system initially.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2390 5417fbe8-f217-4b02-8779-1006273d7864
2009-07-24 01:11:49 +00:00
adam- 6a975740b3 Fixed multiple issues with os_info, including changing the /cs oinfo syntax to work with the new fantasy system
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2389 5417fbe8-f217-4b02-8779-1006273d7864
2009-07-21 20:54:17 +00:00
adam- f8efdbf822 Added a new event for channels being deleted
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2388 5417fbe8-f217-4b02-8779-1006273d7864
2009-07-21 20:52:29 +00:00
DukePyrolator 55d4d6084e added 9 new events
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2387 5417fbe8-f217-4b02-8779-1006273d7864
2009-07-21 03:32:49 +00:00
cyberbotx cbec05c428 Fix for potentially undefined behavior in the Windows build, make the overloaded delete and delete[] operators check if the pointer is NULL before trying to use HeapFree(), thanks to Adam for pointing this out.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2385 5417fbe8-f217-4b02-8779-1006273d7864
2009-07-19 07:24:57 +00:00
adam- 906580a463 Fixes a crash when renaming NickServ
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2384 5417fbe8-f217-4b02-8779-1006273d7864
2009-07-18 19:32:24 +00:00
adam- e0828bf69b Fix a bug when trying to set BotServ bots as private
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2383 5417fbe8-f217-4b02-8779-1006273d7864
2009-07-17 20:23:59 +00:00
adam- 49f1b9bc49 Fixed core clients to rejoin their assigned channels if killed
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2382 5417fbe8-f217-4b02-8779-1006273d7864
2009-07-16 09:12:23 +00:00
adam- 81d05eb8a7 Initialize botinfo->flags on bot creation to fix some database problems
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2381 5417fbe8-f217-4b02-8779-1006273d7864
2009-07-16 09:01:01 +00:00
adam- 17a09abb6d Fixed crashes when an unidentified users nickcore gets deleted
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2380 5417fbe8-f217-4b02-8779-1006273d7864
2009-07-16 03:51:00 +00:00
adam- 57e66618e7 Fixed ns_info to show opertype line when hidestatus is off
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2379 5417fbe8-f217-4b02-8779-1006273d7864
2009-07-15 19:53:14 +00:00
adam- 23c654519c Fixed elist_match_user to check against vhosts, patch from sergio
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2377 5417fbe8-f217-4b02-8779-1006273d7864
2009-07-12 19:53:26 +00:00
adam- e669382cab Updated Polish language file, thanks to Szymek
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2375 5417fbe8-f217-4b02-8779-1006273d7864
2009-07-11 18:54:05 +00:00
sjaz 4c244b5e06 Updated README
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2373 5417fbe8-f217-4b02-8779-1006273d7864
2009-07-11 13:15:37 +00:00
adam- 9a9d93e9f0 Added ChanServ HELP CLEAR INVITES to documentation
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2366 5417fbe8-f217-4b02-8779-1006273d7864
2009-07-10 05:33:34 +00:00
adam- 1d53afee3f Remove channel founder status from users who logout
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2363 5417fbe8-f217-4b02-8779-1006273d7864
2009-07-06 17:43:30 +00:00
adam- d75238496b Made pre-command channel sanity checks only apply to ChanServ and BotServ. Its not needed elsewhere and just causes issues
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2361 5417fbe8-f217-4b02-8779-1006273d7864
2009-07-06 07:27:16 +00:00
adam- 4d19a783bd Really fix bug #1088
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2355 5417fbe8-f217-4b02-8779-1006273d7864
2009-07-02 19:02:35 +00:00
DukePyrolator bd6a593b6c reverted last commit
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2354 5417fbe8-f217-4b02-8779-1006273d7864
2009-07-02 19:00:54 +00:00
DukePyrolator d68b3c3b6d fix for bug #1088 (missing check for null pointer). thanks to Obi_Wan for reporting
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2353 5417fbe8-f217-4b02-8779-1006273d7864
2009-07-02 16:36:26 +00:00
adam- e8c63b5f43 Fixed some spelling errors in Config
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2352 5417fbe8-f217-4b02-8779-1006273d7864
2009-07-01 19:37:22 +00:00
DukePyrolator da8ccdad19 fixed segfault on /nickserv logout <nick>
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2351 5417fbe8-f217-4b02-8779-1006273d7864
2009-07-01 17:59:42 +00:00
DukePyrolator d81068abc4 fix for bug #1087. thanks to Obi_Wan for reporting and testing.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2350 5417fbe8-f217-4b02-8779-1006273d7864
2009-07-01 17:36:48 +00:00
rburchell 5a9dd79ae8 Shuffle TODO, move a number of items from planned to 'future' stage to be a little more realistic. This scales down .1 and .2 to achievable chunks.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2349 5417fbe8-f217-4b02-8779-1006273d7864
2009-06-30 19:41:33 +00:00
rburchell 6609f829f4 Example configuration for opertypes and oper blocks, initial version written by DukePyrolator with a little refinement and addition by me.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2348 5417fbe8-f217-4b02-8779-1006273d7864
2009-06-30 19:32:54 +00:00
rburchell 8dc849d8de No real need for another constant
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2347 5417fbe8-f217-4b02-8779-1006273d7864
2009-06-30 19:32:16 +00:00
adam- 8c82d30112 Rename chanserv/access/change to chanserv/access/modify
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2346 5417fbe8-f217-4b02-8779-1006273d7864
2009-06-30 19:25:57 +00:00
cyberbotx 77ad2c101c Possible fix for issue with RequiredLibraries comment check in CMake generation.
Also include extra question in Config to ask for extra arguments to the build tool used.

git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2345 5417fbe8-f217-4b02-8779-1006273d7864
2009-06-29 20:04:09 +00:00
adam- 7cf236ef51 Made globaloncycleup message and OnServerConnect use the correct server
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2344 5417fbe8-f217-4b02-8779-1006273d7864
2009-06-29 06:18:30 +00:00
DukePyrolator 670f87a22a removed include/encrypt.h from the Makefiles
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2343 5417fbe8-f217-4b02-8779-1006273d7864
2009-06-29 05:20:00 +00:00
DukePyrolator 15687a7c9e changed encryption modules to use the new module API
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2342 5417fbe8-f217-4b02-8779-1006273d7864
2009-06-29 04:47:00 +00:00
adam- 712cbb540c Add ability for fantasy to be disabled for some commands and strip the channel name from them
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2341 5417fbe8-f217-4b02-8779-1006273d7864
2009-06-28 18:49:07 +00:00
cyberbotx 108cf5e60d Possible bugfix for bug #1086, specifically the issue with the inspircd12 sending ADDKILL from the servername instead of a SID or UID and with a negative expire time.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2340 5417fbe8-f217-4b02-8779-1006273d7864
2009-06-27 18:28:26 +00:00
adam- 6b9c0fe4d9 Fixed cs_getkey to not require services oper
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2339 5417fbe8-f217-4b02-8779-1006273d7864
2009-06-27 02:11:33 +00:00
adam- 6b5786aa37 Changed module callbacks to use new Timer API
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2338 5417fbe8-f217-4b02-8779-1006273d7864
2009-06-26 20:01:26 +00:00
adam- dc8f7923f4 Adds check for using commands on non-registered channels before the
commands are called


git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2336 5417fbe8-f217-4b02-8779-1006273d7864
2009-06-23 16:56:38 +00:00
adam- 59c1a509b4 Fix for bahamut protocol module to get the users IP when new users are introduced
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2335 5417fbe8-f217-4b02-8779-1006273d7864
2009-06-23 08:22:06 +00:00
cyberbotx dc65eca3d8 Update TODO to show timers having been redone thanks to Adam.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2334 5417fbe8-f217-4b02-8779-1006273d7864
2009-06-21 19:10:36 +00:00
sjaz 01b831c4c6 Fixes broken langfiles for NS HELP REGISTER (Cheers Adam-the-Awesome!)
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2333 5417fbe8-f217-4b02-8779-1006273d7864
2009-06-20 22:28:24 +00:00
sjaz 28d77b7ebe Fixes multiple issues with HELP with non-identified nicks. (Thanks Adam!)
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2332 5417fbe8-f217-4b02-8779-1006273d7864
2009-06-20 22:27:44 +00:00
sjaz b81d902a2e Fixes issue with /NS INFO with non-identified users. (Thanks Adam!)
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2331 5417fbe8-f217-4b02-8779-1006273d7864
2009-06-20 22:27:06 +00:00
sjaz 9eea1444fa Fixes issue with /NS CONFIRM with non-registered nicks. (Thanks Adam)
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2330 5417fbe8-f217-4b02-8779-1006273d7864
2009-06-20 22:26:30 +00:00
cyberbotx 1ee6c20e1e Initialize the Bot flags value inside of BS BOT, fixes problem with BotServ bots on database load, patch by DukePyrolator.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2328 5417fbe8-f217-4b02-8779-1006273d7864
2009-06-20 04:58:58 +00:00
cyberbotx 157dfbd5c6 Fix memory leak in NS SUSPEND, patch by Adam.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2326 5417fbe8-f217-4b02-8779-1006273d7864
2009-06-15 20:25:08 +00:00
cyberbotx 2cc4ace60b Forward port of bugfix for bug #1082 from SVN r2322, remove check for NSModeOnID from NS UPDATE, it's not logical to check for NSModeOnID since you must be identified to use NS UPDATE anyways.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2323 5417fbe8-f217-4b02-8779-1006273d7864
2009-06-12 03:11:29 +00:00
cyberbotx fc78e51452 Make stristr() const-safe, replace post-increment on iterators with pre-increment, remove now unused variables, made my_memo_lang() in hs_request.c const-safe.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2320 5417fbe8-f217-4b02-8779-1006273d7864
2009-06-11 20:28:06 +00:00
rburchell 8fa6752858 Cleanup of internals of new opertype stuff by Adam. Removes OS OPER and OS ADMIN, changes OS STAFF to be more helpful in their place.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2319 5417fbe8-f217-4b02-8779-1006273d7864
2009-06-11 10:16:35 +00:00
cyberbotx a68b5efe27 Added missing timers.h and timers.cpp from Adam, removed timeout.h and timeout.c.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2318 5417fbe8-f217-4b02-8779-1006273d7864
2009-06-11 00:01:08 +00:00
rburchell 695644d0c4 New timer infrastructure, can be used inside modules. Replaces old ENFORCE/COLLIDE/inhabit timers, too. Patch by Adam.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2317 5417fbe8-f217-4b02-8779-1006273d7864
2009-06-10 22:29:59 +00:00
cyberbotx c8c89c7af0 Remove events.h, should have been deleted in earlier patch to replace events system with the new one.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2315 5417fbe8-f217-4b02-8779-1006273d7864
2009-06-09 03:15:38 +00:00
rburchell 9ff6ed2430 New events stuff, patch totally by Adam (aka Awesome).
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2313 5417fbe8-f217-4b02-8779-1006273d7864
2009-06-06 23:33:23 +00:00
sjaz 2eae738083 Patch to fix issue with /CS INFO (Thanks Adam)
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2312 5417fbe8-f217-4b02-8779-1006273d7864
2009-06-05 16:06:48 +00:00
cyberbotx 6bed75b41f Fix issue with using static_cast instead of reinterpret_cast for Extensible, allows for more than just char pointers to be used for Extensible.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2311 5417fbe8-f217-4b02-8779-1006273d7864
2009-06-03 22:14:19 +00:00
cyberbotx 426f72117b Fix bug #1080, changing core pseudo-client nicks in the config should register the change when the bots are brought back online, patch from Adam.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2310 5417fbe8-f217-4b02-8779-1006273d7864
2009-06-03 20:29:33 +00:00
sjaz affc29aca5 Typo fix in ./Config
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2309 5417fbe8-f217-4b02-8779-1006273d7864
2009-06-03 15:51:46 +00:00
cyberbotx 3bd357725a Add SendSWhois() to inspircd12.cpp, patch by Adam.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2306 5417fbe8-f217-4b02-8779-1006273d7864
2009-05-31 03:01:07 +00:00
cyberbotx 08b3ef7d4e Remove now unneeded checks for identified nick, patch by Adam.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2305 5417fbe8-f217-4b02-8779-1006273d7864
2009-05-30 00:44:21 +00:00
cyberbotx deeec4fbf1 Typo fixing, spotted by DukePyrolator.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2304 5417fbe8-f217-4b02-8779-1006273d7864
2009-05-26 04:33:44 +00:00
cyberbotx 7e8a7fc598 Make sure the .svn folder is removed when checking src/modules for subdirectories, spotted by DukePyrolator.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2303 5417fbe8-f217-4b02-8779-1006273d7864
2009-05-26 04:26:35 +00:00
cyberbotx c1bc7cbafc Added ability for CMake to build a module from a subdirectory of src/modules.
Added calculate_libraries() CMake macro to condense library checking in CMakeLists.txt in src/modules.
Fixed slight problem with strip_string() macro call in root CMakeLists.txt.

git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2302 5417fbe8-f217-4b02-8779-1006273d7864
2009-05-25 18:58:51 +00:00
sjaz 3fa978c958 Fix from Adam for a segfault in /NS ALIST
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2300 5417fbe8-f217-4b02-8779-1006273d7864
2009-05-16 09:35:39 +00:00
sjaz 1f48897042 Patch to allow jupe on all bar uplink and self. Thanks Adam. (Bug #1076)
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2298 5417fbe8-f217-4b02-8779-1006273d7864
2009-05-08 15:10:52 +00:00
cyberbotx feab2cb854 Move where command permission checking is done, patch by Adam.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2296 5417fbe8-f217-4b02-8779-1006273d7864
2009-05-07 23:59:11 +00:00
sjaz 2d050edb4e Fix link to Link Block Generator on our site. Good find whoever it was :)
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2295 5417fbe8-f217-4b02-8779-1006273d7864
2009-05-07 17:35:41 +00:00
cyberbotx dc102049b0 Adds check for opertype permissions to mod_run_cmd() in commands.c, and adds optional parameter to Command class constructor that takes the opertype permissions for the command.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2292 5417fbe8-f217-4b02-8779-1006273d7864
2009-05-05 22:26:41 +00:00
sjaz 845b15ddd9 Fix segfault in /os chankill (Adam)
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2291 5417fbe8-f217-4b02-8779-1006273d7864
2009-04-26 16:40:36 +00:00
sjaz b9d2e9c092 To document the use of /ms set notify mail and nomail. (Backported to 1.8 in r2289) (Adam)
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2290 5417fbe8-f217-4b02-8779-1006273d7864
2009-04-26 16:40:06 +00:00
sjaz 49512f902c Patch to rectify Syntax output from langfiles. (Adam)
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2288 5417fbe8-f217-4b02-8779-1006273d7864
2009-04-22 18:12:36 +00:00
cyberbotx 3a6a3330ac Fix crash if NS SET <anything> was used without a parameter, spotted and patched by Adam.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2286 5417fbe8-f217-4b02-8779-1006273d7864
2009-04-19 22:36:08 +00:00
jantje_85 086ae2c6ce Forward Port of r2284: Don't enfoce akick/forbidden/etc.. settings on clients on ulined servers.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2285 5417fbe8-f217-4b02-8779-1006273d7864
2009-04-17 22:48:13 +00:00
rburchell 3e9bd7583c Check Command::permission in command handler.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2283 5417fbe8-f217-4b02-8779-1006273d7864
2009-04-16 20:29:21 +00:00
rburchell fc4f89e079 Add Command::SetPermission member to centralise access checking. Remove duplicated comments at the same time.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2282 5417fbe8-f217-4b02-8779-1006273d7864
2009-04-16 20:28:52 +00:00
rburchell 723e3f2ce0 PERMISSION_DENIED -> ACCESS_DENIED string.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2281 5417fbe8-f217-4b02-8779-1006273d7864
2009-04-16 20:28:21 +00:00
rburchell 89883ac325 Remove finished extra
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2280 5417fbe8-f217-4b02-8779-1006273d7864
2009-04-16 20:26:43 +00:00
rburchell 89850c85a9 Remove unused modules_unload_all fini param
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2279 5417fbe8-f217-4b02-8779-1006273d7864
2009-04-16 20:26:24 +00:00
cyberbotx d8e1f104a4 Show proper syntax errors on CS BAN and CS KICK, patch from Adam.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2278 5417fbe8-f217-4b02-8779-1006273d7864
2009-04-16 02:18:07 +00:00
cyberbotx 76e83f613b Remove 2 unneeded ternary operators, the result is the same with or without them, patch from Sergio.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2275 5417fbe8-f217-4b02-8779-1006273d7864
2009-04-13 19:07:49 +00:00
cyberbotx 22b53ec9cd Correct help for CS INFO and add syntax errors for cs_modes, patch from Adam.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2274 5417fbe8-f217-4b02-8779-1006273d7864
2009-04-13 00:35:55 +00:00
cyberbotx dccb56a496 Copy Extensible::GetExtList() from InspIRCd, patch from DukePyrolator, plus 2 small cosmetic tweaks.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2273 5417fbe8-f217-4b02-8779-1006273d7864
2009-04-12 05:08:59 +00:00
cyberbotx 1787a8ac27 Remove files from the modules runtime directory on startup, just in case files were left behind during a previous run. Suggested by DukePyrolator and Namegduf.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2271 5417fbe8-f217-4b02-8779-1006273d7864
2009-04-11 06:55:40 +00:00
cyberbotx a2b1284aac Fix more problems with help, patch from Adam.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2270 5417fbe8-f217-4b02-8779-1006273d7864
2009-04-10 02:16:07 +00:00
cyberbotx 7b6a109100 Added missing help to BS ACT, patch from Adam.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2269 5417fbe8-f217-4b02-8779-1006273d7864
2009-04-10 01:52:09 +00:00
cyberbotx 56464bbdd8 Fix crash in mod_help_cmd when a non-existing command is looked up, spotted by Adam.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2268 5417fbe8-f217-4b02-8779-1006273d7864
2009-04-10 00:10:27 +00:00
cyberbotx 87ecbec79d Remove all remaining uses of (My)SQL from the code.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2267 5417fbe8-f217-4b02-8779-1006273d7864
2009-04-07 05:31:14 +00:00
cyberbotx 578da38d30 Replace Set*Help() functions with virtual *ServHelp() functions that can be overriden in a module's Module class. Patch from Adam.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2266 5417fbe8-f217-4b02-8779-1006273d7864
2009-04-06 21:25:56 +00:00
sjaz fbb1ab9246 Patch to make changing bots not send multiple QUIT commands (Thanks Adam).
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2265 5417fbe8-f217-4b02-8779-1006273d7864
2009-04-06 16:40:07 +00:00
sjaz cd034d6935 Patch to allow NS CONFIRM and NS RESEND to be used by non identified users. (Thanks Adam)
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2264 5417fbe8-f217-4b02-8779-1006273d7864
2009-04-06 16:37:02 +00:00
sjaz af85de47c7 [#1039] Patch to update documentation on CS RESTRICTED to reflect historical behaviour. FORWARD PORT from 1.8. (Thanks Adam for both!)
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2263 5417fbe8-f217-4b02-8779-1006273d7864
2009-04-06 16:32:40 +00:00
cyberbotx 178def8291 Remove is_services_admin() check from cs_enforce to allow build to succeed.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2261 5417fbe8-f217-4b02-8779-1006273d7864
2009-04-04 02:38:38 +00:00
cyberbotx 9f20b2f7dd Removed is_host_setter() and is_host_remover() from code and replaced them with opertype priv "hostserv/set", removed <hostserv:hostsetters> from configuration.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2260 5417fbe8-f217-4b02-8779-1006273d7864
2009-04-04 01:27:18 +00:00
rburchell df627065ac Marking these volatile isn't a lot of use, and it is confusing.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2259 5417fbe8-f217-4b02-8779-1006273d7864
2009-04-04 01:15:13 +00:00
rburchell ad77b5ee2d Remove various uneeded priv checks.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2258 5417fbe8-f217-4b02-8779-1006273d7864
2009-04-04 01:09:07 +00:00
rburchell 146ecc2fbb Remove is_services_* methods.. this forces us to actually remove uses of them.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2257 5417fbe8-f217-4b02-8779-1006273d7864
2009-04-04 00:52:25 +00:00
rburchell 36f523249a Fix access checking in core
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2256 5417fbe8-f217-4b02-8779-1006273d7864
2009-04-04 00:49:50 +00:00
rburchell b0b8e70442 Fix access checking on ns_*
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2255 5417fbe8-f217-4b02-8779-1006273d7864
2009-04-04 00:49:11 +00:00
cyberbotx 2dba060c6a Patch from DukePyrolator to include an OnUserNickChange() event to replace EVENT_CHANGE_NICK, also patch from me to have the ratbox protocol module send account data on login and logout.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2254 5417fbe8-f217-4b02-8779-1006273d7864
2009-04-03 21:16:33 +00:00
cyberbotx a7316c1770 Fix ratbox protocol to use TS6SID for sending (UN)RESV, and fix m_privmsg to correctly find the core pseudo-clients if the IRCd sends a UID instead of a nick.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2252 5417fbe8-f217-4b02-8779-1006273d7864
2009-04-03 18:36:10 +00:00
rburchell a6f0b5e8d4 Don't generate UID twice in ratbox protocol module. This is a leftover from before the core generated UIDs.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2248 5417fbe8-f217-4b02-8779-1006273d7864
2009-04-03 17:37:15 +00:00
cyberbotx 821c6ac90b Reintroduce sending login/logout account messages, they were added back in SVN r1944 but went poof with the command API change.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2247 5417fbe8-f217-4b02-8779-1006273d7864
2009-04-03 06:53:40 +00:00
cyberbotx aab6dad14f Fix compile error in ru.l due to lack of tabs in an earlier commit.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2246 5417fbe8-f217-4b02-8779-1006273d7864
2009-04-03 06:01:56 +00:00
cyberbotx 6280432bc7 Fix bug #1047, patch from Adam, fixes documentation of CS CLEAR OPS.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2244 5417fbe8-f217-4b02-8779-1006273d7864
2009-04-03 02:50:14 +00:00
cyberbotx 6d97b7f8f9 Fix bug #1045, patch from Adam, suspended channels can no longer be administered, and control over checking forbidden and suspended channels has been moved out of the modules and into the core.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2243 5417fbe8-f217-4b02-8779-1006273d7864
2009-04-03 02:42:06 +00:00
cyberbotx c6ef1e0390 Added service argument to OnPreCommand, added OnPostCommand event, changed the following modules to use On[Pre|Post]Command instead of hooking into existing commands: hs_request, ns_maxemail, and os_info.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2242 5417fbe8-f217-4b02-8779-1006273d7864
2009-04-03 00:16:15 +00:00
rburchell 48ef6617ac Remove capability for commands to hook existing commands, add an OnPreCommand event instead. Tidies up a lot of stuff. Also remove a bunch of dead code.
NOTE: This will break some stuff.

git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2241 5417fbe8-f217-4b02-8779-1006273d7864
2009-04-02 22:59:27 +00:00
rburchell ef400fa6dc Remove restrictgetpass option from the conf
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2239 5417fbe8-f217-4b02-8779-1006273d7864
2009-04-02 20:35:44 +00:00
rburchell 93baed333f Remove rootmodeonid, opermodeonid, adminmodeonid - unused, and utterly useless/bad.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2238 5417fbe8-f217-4b02-8779-1006273d7864
2009-04-02 20:33:28 +00:00
rburchell e9e5ccc891 Remove NSRestrictGetPass, and replace it with opertype usage.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2237 5417fbe8-f217-4b02-8779-1006273d7864
2009-04-02 20:27:47 +00:00
rburchell d37f569188 More miscellaneous bits.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2236 5417fbe8-f217-4b02-8779-1006273d7864
2009-04-02 20:24:08 +00:00
rburchell a39137e271 Fix up a bunch of access checking to be a bit more modern and so on
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2235 5417fbe8-f217-4b02-8779-1006273d7864
2009-04-02 20:21:43 +00:00
rburchell 25050df434 Apparantly I forgot to update some language files.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2234 5417fbe8-f217-4b02-8779-1006273d7864
2009-04-02 20:18:22 +00:00
rburchell b79c68d829 Change some stuff to use NC::IsServicesOper instead of is_services_*.
Remove some unused language strings also.

git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2233 5417fbe8-f217-4b02-8779-1006273d7864
2009-04-01 23:32:06 +00:00
rburchell 6712748378 Boink.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2232 5417fbe8-f217-4b02-8779-1006273d7864
2009-04-01 20:07:47 +00:00
rburchell 3cdca9e47a Replace nick_is_* checking of static userlevels with NickCore::IsServicesOper, which just confirms they have *an* opertype.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2231 5417fbe8-f217-4b02-8779-1006273d7864
2009-04-01 19:56:40 +00:00
cyberbotx e57feb4ef6 Removed NICK_INFO_SERVICES_[OPER|ADMIN|ROOT] from the language files and added NICK_INFO_SERVICES_OPERTYPE to them. NOTE: This will break compiling until the removed language strings are replaced in ns_info.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2230 5417fbe8-f217-4b02-8779-1006273d7864
2009-04-01 19:55:01 +00:00
cyberbotx 4ef30a4de9 Fix compile error in servers.c.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2229 5417fbe8-f217-4b02-8779-1006273d7864
2009-03-31 17:03:50 +00:00
rburchell 76755725e5 These are (now) horribly out of date. When we're ready to implement what ones we need, we can grab them back out of SVN (or more likely just do them from scratch..)
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2228 5417fbe8-f217-4b02-8779-1006273d7864
2009-03-31 14:51:27 +00:00
rburchell 8a01e21a48 Send snotice after connecting to the network. Also change OnServerConnect to take Server*, not a name.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2227 5417fbe8-f217-4b02-8779-1006273d7864
2009-03-31 14:44:33 +00:00
rburchell ab9c1e4651 Fix ss_main's client introduction.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2226 5417fbe8-f217-4b02-8779-1006273d7864
2009-03-31 14:43:04 +00:00
cyberbotx fdfc12f398 Detach all module hooks when a module is unloaded, patch from DukePyrolator, thanks for spotting this!
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2225 5417fbe8-f217-4b02-8779-1006273d7864
2009-03-30 18:27:01 +00:00
rburchell ba8f609eb0 Yet *neither* send HOST_OFF here..
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2224 5417fbe8-f217-4b02-8779-1006273d7864
2009-03-30 10:08:36 +00:00
rburchell 114b2d4989 Needed to apply this to 1.2 too, oops.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2223 5417fbe8-f217-4b02-8779-1006273d7864
2009-03-30 10:07:50 +00:00
rburchell 2d270cd0bf Forward-port Szymek's vhost patch.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2222 5417fbe8-f217-4b02-8779-1006273d7864
2009-03-30 10:00:58 +00:00
cyberbotx 89c2c02904 Fix bug #1073, fantasy commands in CTCP ACTIONs will now be ignored instead of processed.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2217 5417fbe8-f217-4b02-8779-1006273d7864
2009-03-30 06:15:58 +00:00
sjaz 6245821dfe #1042 Fix for CS SUSPEND/FORBID so that it doesn't act upon opers on rejoin. Thanks Adam.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2216 5417fbe8-f217-4b02-8779-1006273d7864
2009-03-29 21:15:15 +00:00
sjaz 0430fbf861 #1058 Patch to fix HS REQUEST memo to include ident. Thanks Adam.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2215 5417fbe8-f217-4b02-8779-1006273d7864
2009-03-29 21:12:09 +00:00
cyberbotx 007b73e5a9 Fix bug #1036, patch from Adam, correct the kick reason used when a channel is forbidden or suspended without a reason.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2214 5417fbe8-f217-4b02-8779-1006273d7864
2009-03-28 16:22:49 +00:00
cyberbotx 7ec6b68e84 Fix bug #1032, patch from Adam, the help for CS GETKEY has been condensed and the return result of the command is a human-readable string.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2213 5417fbe8-f217-4b02-8779-1006273d7864
2009-03-28 15:42:14 +00:00
rburchell 7a92feb474 Regenerate UID on BOT CHANGE, don't try reuse an existing one.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2212 5417fbe8-f217-4b02-8779-1006273d7864
2009-03-27 23:03:21 +00:00
rburchell 601c546957 Fix protocol violation error.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2211 5417fbe8-f217-4b02-8779-1006273d7864
2009-03-27 22:53:16 +00:00
sjaz 3f57c91613 Bug #1061 - Fixed minor typo in English Langfile.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2210 5417fbe8-f217-4b02-8779-1006273d7864
2009-03-27 20:16:56 +00:00
cyberbotx 3d4fb90353 Fix potential crash problem with use of free() instead of delete[] from earlier bugfix of bug #1054, also remove item for * help set from TODO as it's been fixed.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2209 5417fbe8-f217-4b02-8779-1006273d7864
2009-03-27 15:56:16 +00:00
cyberbotx 5c325b5d12 Slight cleanup on TODO, move item about oper flags into 1.9.1 and move the ?'s inside the brackets for consistency.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2208 5417fbe8-f217-4b02-8779-1006273d7864
2009-03-26 03:48:50 +00:00
cyberbotx 60b18508e0 Fix problem with CMake under Windows, spotted by therock247uk on the forums, CMake now checks for the environment variable VCINSTALLDIR (only set in the Visual Studio command prompt) and also fixes the check for #ifndef.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2207 5417fbe8-f217-4b02-8779-1006273d7864
2009-03-25 17:36:47 +00:00
cyberbotx 8fc031fb84 Fix bug #1009, patch inspired by DukePyrolator, add a TS6 SID generator from DukePyrolator, as well as change SendServer() to take a Server struct and use the result of new_server() in the SendServer() call instead.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2206 5417fbe8-f217-4b02-8779-1006273d7864
2009-03-25 16:12:24 +00:00
cyberbotx d8c4e705a2 Fix bug #1066, language strings for NICK_SET_HIDE_SYNTAX, NICK_SASET_HIDE_SYNTAX, NICK_HELP_SET_HIDE, and NICK_HELP_SASET_HIDE all show STATUS as a choice now.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2205 5417fbe8-f217-4b02-8779-1006273d7864
2009-03-24 01:38:27 +00:00
cyberbotx 3495e8a575 Fix parameters of NS SET within ns_maxemail so it doesn't break ns_set's version of it.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2204 5417fbe8-f217-4b02-8779-1006273d7864
2009-03-24 01:24:04 +00:00
cyberbotx b7a995c1f1 Allow a core Service's ident, host, and real name to be changed, but disallow changing their nicks. Fixes the BS BOT CHANGE part of bug #1070.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2203 5417fbe8-f217-4b02-8779-1006273d7864
2009-03-23 21:59:11 +00:00
cyberbotx 807770c40a Patch from Adam, fixes logging and notices regarding recent channel access list change.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2202 5417fbe8-f217-4b02-8779-1006273d7864
2009-03-23 21:07:30 +00:00
cyberbotx b3eeb815b6 Replace manually allocated array for NickCore's access list with an std::vector, cleans up the code and provides a more sane interface, also fixes bug #1023 in the process.
Also add missing help for NS ACCESS.

git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2201 5417fbe8-f217-4b02-8779-1006273d7864
2009-03-23 21:05:29 +00:00
cyberbotx da43e02228 Partial fix for NS REGISTER not displaying syntax error if only 1 argument is given, not completely fixed due to how OnSyntaxError is called, problem spotted by DukePyrolator, thanks!
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2200 5417fbe8-f217-4b02-8779-1006273d7864
2009-03-23 18:30:30 +00:00
cyberbotx ca28b7c1b3 Patch from DukePyrolator, allow unregistered users to use NS GROUP.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2198 5417fbe8-f217-4b02-8779-1006273d7864
2009-03-23 05:07:52 +00:00
cyberbotx da4ce1788f Patch from DukePyrolator, only show the message about using NS INFO ALL if the user hasn't used NS INFO ALL.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2197 5417fbe8-f217-4b02-8779-1006273d7864
2009-03-23 05:07:43 +00:00
cyberbotx 190a3de3b9 Fix bug #1044, CS SET MLOCK no longer requires a parameter, and leaving out the parameter renders the mlock to +r as it should be.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2195 5417fbe8-f217-4b02-8779-1006273d7864
2009-03-23 04:54:30 +00:00
cyberbotx ce09914e1d Fix part #2 of bug #1010, patched partially by Adam and cleaned up / finished by me, the help commands should work as expected now, including "help set ..." and similar help entries.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2194 5417fbe8-f217-4b02-8779-1006273d7864
2009-03-23 04:29:25 +00:00
cyberbotx 656cc9973e Fix bug #1065, patch from DukePyrolator, force a user off a nick when it is suspended.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2192 5417fbe8-f217-4b02-8779-1006273d7864
2009-03-23 02:51:05 +00:00
cyberbotx a9ced70eed Add opertype access checks to OS QUIT, OS RESTART, and OS SHUTDOWN, patch from Adam.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2191 5417fbe8-f217-4b02-8779-1006273d7864
2009-03-23 00:55:22 +00:00
cyberbotx 5b988a5e17 Fix bug #1033, patch from Adam, fixes the documentation of CS BAN.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2190 5417fbe8-f217-4b02-8779-1006273d7864
2009-03-23 00:50:32 +00:00
cyberbotx 5fe4d0f43d Fix bug #1064, patch from DukePyrolator, fixes NS RECOVER so it doesn't display "(null)" in some places.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2188 5417fbe8-f217-4b02-8779-1006273d7864
2009-03-23 00:40:32 +00:00
cyberbotx 96f98ebbb6 Really fix bug #1062, patch from Adam, BS ACT and BS SAY should no longer send revealing error messages to users without access.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2186 5417fbe8-f217-4b02-8779-1006273d7864
2009-03-23 00:30:16 +00:00
cyberbotx d6522b5220 Fix bug #1062, patch from Adam, BS ASSIGN should no longer show revealing error messages to users without access.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2185 5417fbe8-f217-4b02-8779-1006273d7864
2009-03-23 00:16:04 +00:00
cyberbotx 3ff8e96e14 Replace manual array for ChannelInfo's access list to use an std::vector instead, cleans up the code by a huge portion and fixes bug #1024 in the process.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2184 5417fbe8-f217-4b02-8779-1006273d7864
2009-03-23 00:06:40 +00:00
cyberbotx 5d56ed0158 Fix bug #1030 for 1.9.x, patch by Adam, plus cosmetic tweaks, deleting from the channel access list now logs a message about the deleted items.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2179 5417fbe8-f217-4b02-8779-1006273d7864
2009-03-20 02:22:12 +00:00
cyberbotx 497aa0c012 Fix bug #1043, patch from Adam, CS LIST will no longer show suspended channels to normal users.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2178 5417fbe8-f217-4b02-8779-1006273d7864
2009-03-20 02:21:58 +00:00
cyberbotx a7189482f5 Show access denied if you do not have access to CS SUSPEND, patch from Adam.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2177 5417fbe8-f217-4b02-8779-1006273d7864
2009-03-20 02:21:32 +00:00
cyberbotx 26e09b3b7f Partial fix for bug #1038, patch from Adam, NS OINFO and CS OINFO now properly set a new oinfo line.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2176 5417fbe8-f217-4b02-8779-1006273d7864
2009-03-20 02:21:02 +00:00
cyberbotx e78066213a Fix bug #1041, patch by Adam (with coding style tweaks by me), CS LOGOUT should work as expected now.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2174 5417fbe8-f217-4b02-8779-1006273d7864
2009-03-17 02:56:05 +00:00
cyberbotx 610dbf5c92 Fix bug #1054 for 1.9.x, patch from Adam, Anope no longer shows the entire message that was ignored, now it only shows the command that was used.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2173 5417fbe8-f217-4b02-8779-1006273d7864
2009-03-17 02:55:53 +00:00
cyberbotx 0892ef1361 Fix bug #1040, patch from Adam, CS INVITE not displays messages for successful invites and failed invite due to being in the channel already.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2172 5417fbe8-f217-4b02-8779-1006273d7864
2009-03-17 02:55:46 +00:00
cyberbotx adca908bce Remove variable shadowing in os_oline, patch from Phenoix.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2171 5417fbe8-f217-4b02-8779-1006273d7864
2009-03-16 15:37:02 +00:00
cyberbotx d93c79358e Remove variable shadowing in ms_rsend, patch from Phenoix.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2170 5417fbe8-f217-4b02-8779-1006273d7864
2009-03-15 23:05:44 +00:00
cyberbotx 7d0b69b94b Correct a set of potential security holes in varags usage in ns_sendpass, patch from Phenoix.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2169 5417fbe8-f217-4b02-8779-1006273d7864
2009-03-15 23:05:34 +00:00
cyberbotx 8cc5b194d4 Correct a set of potential security holes in varags usage in ns_register, patch from Phenoix.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2168 5417fbe8-f217-4b02-8779-1006273d7864
2009-03-15 23:05:23 +00:00
cyberbotx 89e63ed395 Remove variable shadowing in ms_send, patch from Phenoix.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2167 5417fbe8-f217-4b02-8779-1006273d7864
2009-03-15 23:05:10 +00:00
cyberbotx c01cd051c3 Patch from Phenoix to correct a set of potential security holes in varargs usage.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2165 5417fbe8-f217-4b02-8779-1006273d7864
2009-03-15 00:39:59 +00:00
cyberbotx b6c2d8b52e Fix but #1050, MS STAFF's syntax shows correctly, required adding a language string as well, currently they are all English until they can be properly translated.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2164 5417fbe8-f217-4b02-8779-1006273d7864
2009-03-15 00:12:59 +00:00
cyberbotx 68ff62f6e3 Fix bug #1056, patch from Adam, BotServ kickers should now ban for like it should.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2163 5417fbe8-f217-4b02-8779-1006273d7864
2009-03-14 23:23:52 +00:00
sjaz 4f4b42562a Fixed typo on operserv which was stopping opersonly working. Good find Adam. (You do pick up the weirdest of things ....)
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2162 5417fbe8-f217-4b02-8779-1006273d7864
2009-03-14 19:06:23 +00:00
sjaz 0a2b6b9573 Amended error message from "server numeric" to "server id" as per discussion on
forum to avoid confusion. (We might want to think about this in the long term but 
for now, this will help reduce confusion).


git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2161 5417fbe8-f217-4b02-8779-1006273d7864
2009-03-14 18:24:48 +00:00
sjaz 6ac077e2cb Updated langfiles for /CS HELP INVITE to show that you can only invite yourself. ALL done in English until we can establish a means of maintaining the langfiles reliably and properly.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2160 5417fbe8-f217-4b02-8779-1006273d7864
2009-03-14 18:20:21 +00:00
sjaz d2fd84d41f Fix for bs badwords deletion. Good find Adam.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2159 5417fbe8-f217-4b02-8779-1006273d7864
2009-03-14 17:50:39 +00:00
cyberbotx ea5245f416 Fix bug #1055, keetopic != keeptopic.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2158 5417fbe8-f217-4b02-8779-1006273d7864
2009-03-14 12:55:00 +00:00
cyberbotx 40005c5029 Fix bug #1035, patch by Adam, now bans set through CS ENFORCE can be removed through CS UNBAN or CS CLEAR BANS.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2157 5417fbe8-f217-4b02-8779-1006273d7864
2009-03-14 01:17:55 +00:00
cyberbotx 8974008304 Really corrected CMake version checking.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2156 5417fbe8-f217-4b02-8779-1006273d7864
2009-03-11 23:05:21 +00:00
cyberbotx 29b9577bd2 Fix the CMake generation to work with older versions of CMake 2.4.x, cleaning up some of the macros and also correcting the code to detect what version of CMake is in use.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2155 5417fbe8-f217-4b02-8779-1006273d7864
2009-03-11 20:10:00 +00:00
cyberbotx 174bb94648 Fix bug #1020, +f and +L parameters are read from and written to the database regardless of what the IRCd says it can handle, as the databases are loaded prior to Anope connecting to the IRCd and the InspIRCd protocol modules default to saying +f is a mode they don't support until after Anope connects to InspIRCd.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2150 5417fbe8-f217-4b02-8779-1006273d7864
2009-03-09 03:21:33 +00:00
cyberbotx 3b634c3770 Fix /cs set mlock to not use strtok, which wasn't working due to the change in the command API to not use strtok at all, indirectly found because of bug #1020 (which was for 1.9.0 where /cs set mlock functions properly).
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2149 5417fbe8-f217-4b02-8779-1006273d7864
2009-03-09 03:14:27 +00:00
cyberbotx 4184b7df44 Fix bug #1025, the message for "no such entry" should show whatever was number passed in to the command, not -1 every time.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2148 5417fbe8-f217-4b02-8779-1006273d7864
2009-03-09 02:41:13 +00:00
cyberbotx 4ddc1cebd1 Fix bug #1028, the *_getpass and *_sendpass modules will now refuse to load if the given encryption module is unable to do decryption.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2147 5417fbe8-f217-4b02-8779-1006273d7864
2009-03-09 02:35:59 +00:00
cyberbotx 54762245b8 Fix bug #1027, properly send a Globop on CS DROP, patch provided by Adam.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2146 5417fbe8-f217-4b02-8779-1006273d7864
2009-03-08 03:10:21 +00:00
cyberbotx 63e8a8f6c2 Fix slight warning that comes up with gcc 3.4.x but not 4.2.x, this should be done anyways.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2144 5417fbe8-f217-4b02-8779-1006273d7864
2009-03-07 03:06:05 +00:00
cyberbotx 16bd616604 Fix bug #1026, Anope shouldn't crash on /ns set greet now, was just a small but fatal typo.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2143 5417fbe8-f217-4b02-8779-1006273d7864
2009-03-06 23:26:20 +00:00
cyberbotx 9a97a0b3cf Fix bug #1022, the problem was inspircd12 specific and the pseudo-clients will now respawn.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2142 5417fbe8-f217-4b02-8779-1006273d7864
2009-03-03 15:30:36 +00:00
cyberbotx 7a1217e97c Fix typo in inspircd11 module preventing it from connecting even if m_hidechans is loaded on InspIRCd.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2141 5417fbe8-f217-4b02-8779-1006273d7864
2009-03-03 15:13:51 +00:00
cyberbotx efcd7636dc Force locale to C so messages from gcc don't get translated, thanks to DukePyrolator for spotting this.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2140 5417fbe8-f217-4b02-8779-1006273d7864
2009-03-02 21:05:05 +00:00
cyberbotx c6f4b95131 Added a strip_string function to Anope.cmake, cleaned up other parts of Anope.cmake, added better find function for #include lines, added functionality for CMake to auto-detect includes in non-standard locations.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2139 5417fbe8-f217-4b02-8779-1006273d7864
2009-03-02 01:33:47 +00:00
rburchell 6794273f7d Oper restrictions on memoserv commands.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2138 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-28 17:32:44 +00:00
rburchell e8ce6e0b10 Missed converting this to opertypes.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2137 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-28 17:31:16 +00:00
rburchell a07fd592cb Remove CSRestrictGetPass, it is unneeded with the introduction of opertypes. [Adam]
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2136 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-28 00:50:04 +00:00
rburchell bd7f4f8c49 Patch from Adam, reducing duplication in cs_modes. Untested.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2135 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-28 00:49:37 +00:00
rburchell 090107db5f Add access checking to cs_* modules. Also change number of arguments for cs_modes commands.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2134 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-28 00:48:36 +00:00
pimpmylinux f2fb7ef53f fix inspircd sending broken UID message when introducing its clients
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2133 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-25 15:26:57 +00:00
cyberbotx 36de15de5e Fix SendAkill() in inspircd* modules, they were sending the wrong timestamp (instead of sending the current time, they were sending the time of the akill's creation).
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2131 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-23 03:18:38 +00:00
cyberbotx ab6ee16aa2 Updated inspircd11 module to look for m_hidechans.so module and updated inspircd12 module to also look for that module as well as error if m_globops.so isn't loaded.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2130 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-23 02:49:54 +00:00
cyberbotx 48560524a3 Fix slight CMake issue where it wasn't including win32_memory.cpp with protocol modules.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2129 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-23 02:21:07 +00:00
cyberbotx a5206c33b9 Fix slight linking error in Visual Studio, spotted by Brandan.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2128 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-23 02:01:46 +00:00
cyberbotx 419b4c8002 Fix odd crash bug in the inspircd* modules by replacing use of myStrGetToken with spacesepstraem, also fix a problem on Windows with not having FD_ZERO in the sgets() function before FD_SET is called, both spotted thanks to Brandan.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2126 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-23 00:58:46 +00:00
cyberbotx 9123489c32 Added Anope.cmake, moving all my CMake macros into it.
Fixed CMake error when CMake older than 2.4.8 is used, there is no 'touch' command in cmake -E, spotted by Adam.
Fixed Config to auto-detect CMake and revert to configure if CMake isn't found.
Fixed install.js on Windows to show errors in running CMake and detect if there were errors.

git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2125 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-22 22:25:15 +00:00
rburchell fa0d664063 Forward port of patch by DukePyrolator fixing memory leak on +beI modes.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2124 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-22 17:20:30 +00:00
rburchell c3f28223f8 Also allow RECOVER/RELEASE, reported by Adam and Raff7.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2123 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-21 22:19:40 +00:00
rburchell 8d05e8510f Allow NS GHOST from an unregistered sender, reported by Raff7.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2122 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-21 22:16:44 +00:00
cyberbotx 1707cf3dd3 Fix cs_access not displaying syntax errors and having a signed vs unsigned bug, spotted by Adam.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2121 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-21 01:25:37 +00:00
rburchell bb666ab902 Fix missing variable.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2120 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-19 21:59:56 +00:00
rburchell 7723437a81 Fix a few warnings. Also move split_usermask into cs_akick, as this is the only place it is used.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2119 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-19 21:59:31 +00:00
cyberbotx 805253de36 Preliminary support for a module source file (within src/modules) to include a comment saying it requires certain external libraries and having CMake search for the library automatically.
Note: This sorta works for both *nix and Windows, probably *nix more-so than Windows, but this needs some cleaning up. It does work as is, though.

git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2118 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-19 04:03:13 +00:00
rburchell 40680e2535 Fix ns_update, thanks DP. Fix two compile errors.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2117 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-19 00:23:50 +00:00
rburchell c917ca5a34 Remove (and neuter) old event system. Not used by anything in core.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2116 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-19 00:23:14 +00:00
rburchell 23f5e9de79 Move last of events that are in the core distro over to newevents.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2115 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-19 00:22:46 +00:00
rburchell 6c1d764c4f Fix problems with registration being denied, thanks Adam.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2114 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-18 23:54:17 +00:00
rburchell 2b0914ae36 Add OnUserConnect event, mark OnSaveDatabase deprecated pending db redesign.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2113 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-18 23:48:46 +00:00
rburchell d20e4eb6ee Seems Changes entry didn't get committed.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2112 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-18 23:34:56 +00:00
rburchell e11b5b5ace Patch from DP, converting all match calls and removing old match method.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2111 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-18 23:34:32 +00:00
rburchell 12cc633457 Add nickalias to build. Also stop sstrdup on args that seem to be NULL, it's getting ripped out anyway.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2109 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-18 23:01:43 +00:00
rburchell bcb857f118 Move EVENT_DB_SAVING to newevent.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2108 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-18 23:00:41 +00:00
rburchell 187c45059a Move assign and unassign to new events, allow for halting too should modules desire that.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2107 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-18 22:59:16 +00:00
cyberbotx 3fe5aa037a Fix numerous errors in Win32 building under Visual Studio due to the many changes to trunk. Trunk now builds under Windows like it should.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2106 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-17 02:02:20 +00:00
rburchell 7af9e42d21 Hook events correctly in constructor.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2105 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-17 00:31:42 +00:00
rburchell abd083b1e3 Oops.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2104 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-16 23:49:38 +00:00
rburchell d07de70fc3 Move EVENT_RELOAD to OnReload.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2103 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-16 23:48:03 +00:00
rburchell c1c9e17d79 Move OnUserKicked to a module event.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2102 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-16 23:47:28 +00:00
rburchell ce3a04f0a8 Modevents, ported from insp. Typesafe (unlike the current ones), no double hashing overhead (faster), no useless memory allocations (copies of the args)
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2101 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-16 22:59:59 +00:00
rburchell f756f2b394 Fix compile warning.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2100 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-16 22:59:36 +00:00
cyberbotx 7ea34be0b8 Fix output of reason in os_chankill when AddAkiller is used, spotted by DukePyrolator, thanks!
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2099 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-16 22:08:45 +00:00
cyberbotx 6bd851a4d0 Replaced time_t with long in the ValueItem class, this was preventing building under FreeBSD. Works under FreeBSD and Linux now.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2098 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-16 20:35:56 +00:00
rburchell 8d90a23689 bleep.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2097 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-16 19:11:42 +00:00
rburchell ea45d96968 If you use finduser(), and then use the result, it helps if you actually finduser() to a pointer to save the result, doh. Thanks to DP!
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2096 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-16 18:58:44 +00:00
rburchell 771eb5cf1f Fix wrong service listed in "to identify"
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2095 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-16 16:18:24 +00:00
rburchell e1f80a1833 Prevent potential overflows of time values.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2094 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-16 15:08:42 +00:00
rburchell 0374d53d28 Add 'w' and 'y' support to dotime(), also prevent a possible overflow - thanks to DP.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2093 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-16 15:05:46 +00:00
rburchell 578755d627 Fix segfault on shutdown, thanks Ankit
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2092 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-16 12:57:19 +00:00
rburchell 89ab54f0d7 Another segfault found by DP :P
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2091 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-16 12:56:58 +00:00
rburchell 80de50711e Make DumpCore actually do something again.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2090 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-16 12:41:33 +00:00
rburchell 43bad5d4ae Default options::dumpcore to yes.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2089 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-16 12:32:27 +00:00
rburchell 0d86da4f5d Add Adam's pre-team contributions to Changes
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2088 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-16 12:24:54 +00:00
rburchell caeebbfa6f Add contributions by DP to Changes.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2087 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-16 12:24:39 +00:00
rburchell 549e9446d8 Allow NS STATUS from unregistered users, thanks DP!
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2086 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-16 12:24:17 +00:00
rburchell 14c2617e41 Move botserv/administration "metacommand" to a priv. What was I smoking when I wrote this?
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2085 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-16 12:12:48 +00:00
rburchell 6112d479f9 Wild pointers do not a happy Anope make. Thanks DP :)
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2084 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-16 12:12:26 +00:00
rburchell 04fe8e623c Allow NS REGISTER to unregistered nicks, silly oversight. Thanks DP! :)
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2083 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-16 11:54:03 +00:00
rburchell c8422a6029 Fix call order, thanks to DP
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2082 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-16 11:33:39 +00:00
rburchell 010c774bc2 Revert "Patch from DukePyrolator to replace all calls to match_wild() and match_wild_nocase() to use Anope::Match() instead. Also changes line-endings on wildcard.cpp to Unix-style, as well as fixes a small compile warning in language.c."
This reverts commit fcab9857f55567f10eaecbd6b26ee96f0f549d65.

This isn't a simple sed operation, the order of arguments changed, so this would break everything using it.

git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2081 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-16 09:17:24 +00:00
cyberbotx 22e8e87a00 Patch from DukePyrolator to replace all calls to match_wild() and match_wild_nocase() to use Anope::Match() instead. Also changes line-endings on wildcard.cpp to Unix-style, as well as fixes a small compile warning in language.c.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2080 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-16 06:19:37 +00:00
cyberbotx 15a2e1d4e4 The language strings of HelpServ had escaped me! But I hunted them down and now they are no more.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2079 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-15 23:57:25 +00:00
cyberbotx c5a376cbc8 Removed notice_user() and replaced all calls with Used::SendMessage.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2078 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-15 23:09:41 +00:00
rburchell 629422ed86 Remove nicktracking option, not used now.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2077 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-15 22:33:17 +00:00
rburchell d1611b640b Remove User::na, use User::nc everywhere. Will probably break everything, but opens the door to decoupling NC from NA, and means commands can now be run without bothering about changinc nick :)
More tweaking for na/nc usage.

It compiles, but it's still a work in progress.

Again, this compiles, but I *bet* there's no chance in hell it'll work. :)

Slightly better.

Set User::nc correctly.

Fix crash with unregistered nicks in core and ns_access.

Fix glist to work when you're not on that particular nick.

Fix ns_set to not crash and burn horribly.

Fix ns_set and ns_logout to not do bad things.

git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2076 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-15 22:29:18 +00:00
cyberbotx 0e5b71923b Update TODO that HelpServ has been destroyed (although without the note of me getting +1000 points)
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2075 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-15 17:58:37 +00:00
cyberbotx ba47bf2f6f HelpServ has been destroyed, +1000 points. Also fixed the argument order in the deprecated match_wild() function.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2074 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-15 17:47:52 +00:00
rburchell 330d9ee9e7 Add nickcore
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2073 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-15 17:40:56 +00:00
rburchell d84701deec Switch to using u->nc, courtesy of Rob, this means admin privs won't mysteriously vanish on changing nick.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2072 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-15 15:25:14 +00:00
rburchell 38711cded6 Merge master into svsopers.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2071 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-15 15:24:51 +00:00
rburchell 550e371f10 Set required command string for botserv modules.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2070 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-15 15:24:35 +00:00
rburchell c8aae1c6ee Implement opertype methods for priv/command access.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2069 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-15 15:24:12 +00:00
rburchell 92170818ff Fix CFLAG_ALLOW_UNREGISTERED.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2068 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-15 15:23:57 +00:00
rburchell 0c985ee709 Check nick_identified() instead of u->na, as this may incorrectly treat people as identified.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2067 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-15 15:23:41 +00:00
rburchell f74036dc58 Set CFLAG_ALLOW_UNREGISTERED on commands which should be usable for unidentified users.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2066 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-15 15:23:26 +00:00
rburchell d121c4bd37 Add CFLAG_ALLOW_UNREGISTERED, commands without this flag will now not run for unregistered users.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2065 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-15 15:23:03 +00:00
rburchell 02452a0375 Split Command implementation from definition.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2064 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-15 15:22:40 +00:00
rburchell 8324379346 Can now correctly tie users to opertypes.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2063 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-15 15:22:20 +00:00
rburchell 855847f428 Shuffle shit around.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2062 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-15 15:21:55 +00:00
rburchell f07229a9ee Blah, blah..
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2061 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-15 15:21:35 +00:00
rburchell f92bf30f15 Fix compile error.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2060 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-15 15:21:06 +00:00
rburchell b10305ef3b Convert to use new, (drastically) faster matching algorithm, from InspIRCd. This adds Anope::Match(), and marks match_wild() and match_wild_nocase() deprecated.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2059 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-15 15:20:47 +00:00
rburchell e1828057c3 Add include/svsoper.h, add skeleton methods/doc.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2058 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-15 15:20:23 +00:00
rburchell bce21304f7 Add svsopers.cpp to build.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2057 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-15 15:19:57 +00:00
rburchell 2e75a5c4a4 Fix makefile, it's a cpp not a c.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2056 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-15 15:19:39 +00:00
robbeh 09dedba379 First stab at adding User::nc as requested!
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2055 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-15 14:54:56 +00:00
cyberbotx 602b468efd Remove os_restart from the TODO, it was verified to work it just didn't like gdb.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2054 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-15 02:11:19 +00:00
cyberbotx 84d789c72b Replaced notice_lang with notice_help in all OnHelp() functions in modules. Also fixed a few smaller issues regarding the help in the modules.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2053 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-15 01:59:21 +00:00
cyberbotx 6d835a6e49 Edit IRCDVar of inspircd12 so certain modules don't load on that IRCd, and small cosmetic fixes on a few other protocol modules.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2052 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-15 01:16:26 +00:00
cyberbotx 2c9f2eb991 Audited all src/modules/* and deleted bs_fantasy_unban (it was obsoleted).
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2051 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-15 01:00:20 +00:00
cyberbotx 0717d63c75 Audited all remaining os_* modules, excluding os_restart (it causes a SIGTRAP that needs to be narrowed down).
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2050 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-14 23:54:34 +00:00
cyberbotx bf020d8dfd Removed references to RAW in config and lang files. Kirby from Dreamland ate them, he was hungry. Probably wasn't good for his appetite, though.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2049 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-14 23:04:19 +00:00
rburchell 77174a7b4d protocol: split implementation from interface for cleaner code.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2048 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-14 22:41:40 +00:00
cyberbotx 214f6712fe Removed os_raw, it was never supported by the Anope team, and now it no longer exists. It is no more. (It might've been eaten by a Grue, I think.)
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2047 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-14 22:38:08 +00:00
pimpmylinux 71870e6667 applied patch from Adam to fix some potential screwups
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2046 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-14 16:12:35 +00:00
cyberbotx 0e991f0e72 Audited os_session with help from Adam.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2045 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-14 03:45:26 +00:00
cyberbotx 99967932a4 Audited os_global and os_modinfo, thanks to Adam for spotting and fixing these.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2044 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-14 03:18:38 +00:00
cyberbotx b167c89ca6 Audited os_akill, os_set, os_sgline, os_sqline, os_staff, and os_szline.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2043 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-14 03:08:25 +00:00
cyberbotx 4b291b12f8 Fix error when install directory in instal.js contains spaces, spotted by Rexona.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2042 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-13 17:47:08 +00:00
rburchell 1344bc5728 Move 1.9.0 TODO to Changes, as it's, er, done.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2041 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-13 17:44:53 +00:00
rburchell 4587546330 Pass the right array to do_umode(), fixes mode tracking on Unreal. Thanks to DukePyrolator (yet again :P)
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2040 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-13 17:25:11 +00:00
rburchell 4e5c094033 Fix bs_set help, thanks to DukePyrolator! :)
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2039 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-13 17:12:17 +00:00
rburchell 7633d9e248 Fix segfault, noted by DukePyrolator. Thanks!
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2038 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-13 16:48:23 +00:00
rburchell a7855fd0ba Fix slist symbol mismatch.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2037 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-13 15:40:10 +00:00
rburchell 8d0aa3b589 Audit ns_*.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2036 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-13 15:39:55 +00:00
rburchell e616889a78 Fix part one of #1010, reported by DukePyrolator. (Language settings are not respected in message sending.) Thanks!
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2035 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-13 15:39:33 +00:00
rburchell 4310c712c3 Fix memo sending causing crashes due to unresolvable symbol at runtime, mark ms_* as audited.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2034 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-13 14:23:13 +00:00
sjaz 45b4074e0d Two very small typo's in example.conf.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2033 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-13 06:27:11 +00:00
cyberbotx 2b0646a148 More fixes to bs_bot from Adam, plus an extra fix within DoAdd not covered in Adam's patch.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2032 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-13 04:07:07 +00:00
cyberbotx b9a80f28f7 Audited os_modload, os_modunload, os_shutdown, os_stats, and os_svsnick.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2031 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-13 03:44:51 +00:00
cyberbotx c78784ac28 Audited os_reload, os_umode, os_update, os_userlist, and ss_main.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2030 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-13 03:18:44 +00:00
rburchell 61cf1f325f insp12: don't try sstrdup() a NULL argument if sid is not set.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2029 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-12 22:34:34 +00:00
rburchell b75fadf73d Correctly lower TS (if the ircd provided it) on reciept of JOIN messages. This fixes dropped mode changes coming from services on TS6 (and TS6-alike) ircds for channels where TS is dropped elsewhere on the network.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2028 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-12 22:34:17 +00:00
rburchell b0535c7760 inspircd11: Pass chants in JOIN message to not blow away timestamps.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2027 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-12 22:34:00 +00:00
rburchell c9120ca031 hs_* audited.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2026 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-12 22:33:40 +00:00
rburchell 0e0ee67b81 enc_* don't require audit, as they do not implement commands.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2025 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-12 22:33:06 +00:00
cyberbotx baaed4b764 Fix bs_bot to use the correct parameters, patch from Adam.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2022 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-12 03:53:12 +00:00
rburchell 2e5b573192 Auditing of remaining cs_ modules.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2021 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-12 00:14:59 +00:00
rburchell 58b0279f7f Audit cs_kick, cs_list, cs_logout, cs_modes.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2020 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-12 00:00:50 +00:00
rburchell a512f7cdd7 cs_help, cs_identify, cs_info, cs_invite audited.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2019 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-11 23:59:58 +00:00
rburchell 30b3d92d94 Audit cs_forbid, cs_getkey, cs_getpass.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2018 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-11 23:59:38 +00:00
rburchell 4836d9548d Audit cs_ban, cs_clear, cs_drop.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2017 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-11 23:59:18 +00:00
rburchell 394d3b9325 Audit cs_access and cs_akick.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2016 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-11 23:58:57 +00:00
robbeh 9ed99ed5f4 I feel like a xanadu dev commiting only the TODO file!
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2015 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-11 20:44:49 +00:00
rburchell cdec4027a8 Finish audit of BotServ commands.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2014 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-11 13:59:56 +00:00
rburchell badcd21abb Make max params work correctly, and fix bs_act to request params correctly. Audited as working ok.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2013 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-11 11:17:10 +00:00
rburchell 136ea16ed8 Fix naming discrepancy meaning some commands were not issuing syntax errors.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2012 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-11 10:46:14 +00:00
rburchell 3cc5bf39f5 Add full list of modules that require review as a result of command changes.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2011 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-11 01:01:06 +00:00
rburchell b0e41b4811 Fix *_help, so they work and, uh, don't crash.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2010 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-11 00:57:47 +00:00
rburchell 56633e894d NS HELP requires 0 params minimum.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2009 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-11 00:42:05 +00:00
rburchell 0701b7df9f Fix NS REGISTER not being registered as a command handler properly.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2008 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-11 00:39:46 +00:00
cyberbotx 94916b32cb Fix example.conf to use os_news instead of os_logonnews, os_randomnews, and os_opernews.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2007 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-11 00:31:17 +00:00
rburchell b0edff488a Fix crash loading bs_set on 1.9.1.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2006 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-11 00:28:07 +00:00
rburchell 0a5ae7e6d8 Fix 1.9.0 -> 1.9.1 incompatibility on a patch.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2005 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-11 00:23:25 +00:00
rburchell f4cdea8348 Revert oper protection patch from SciFi, it breaks things. This reverts commit fee057ae11daea45295744f0e9e13f1d0ce0f2b4.
Conflicts:

	TODO

git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2004 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-11 00:20:17 +00:00
rburchell 429da2b886 Fix for bug #1004, based from second half of patch from Adam.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2003 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-11 00:12:51 +00:00
rburchell 87ce2aa25d Partial patch by Adam, commenting fix for #1006 for future reference.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2002 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-11 00:12:20 +00:00
cyberbotx 87c8744724 Fixed compile errors within src/modules/*.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2001 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-11 00:07:53 +00:00
cyberbotx 6f9f2617e7 Fixed compile error in ss_main.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2000 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-10 23:53:25 +00:00
cyberbotx 8c2430d02d Fixed compiler error in os_userlist.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@1999 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-10 23:51:37 +00:00
cyberbotx e2f6064f10 Fixed compile errors in os_szline.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@1998 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-10 23:49:24 +00:00
cyberbotx 87065c514a Fixed compile errors in os_svsnick.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@1997 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-10 23:39:48 +00:00
cyberbotx 0c17078092 Fixed compile errors in os_stats.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@1996 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-10 23:37:31 +00:00
cyberbotx f9e7760a23 Fixed compile errors in os_shutdown and os_sqline.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@1995 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-10 23:27:00 +00:00
cyberbotx 53e79c2155 Fixed compile errors in os_sgline.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@1994 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-10 23:17:46 +00:00
cyberbotx fe78ca1399 Fix compile errors in os_set.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@1993 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-10 22:56:06 +00:00
cyberbotx e1bdc807a8 Fixed compile errors in os_session.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@1992 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-10 22:46:49 +00:00
rburchell 88186bfd2c Fix mistake noted by CyberBotX.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@1991 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-10 21:48:47 +00:00
rburchell 2e08b60cf7 Fixes.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@1990 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-10 21:46:57 +00:00
rburchell 7d58ed17c7 Fix os_news and os_noop.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@1989 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-10 21:37:52 +00:00
rburchell 79f09ed157 Various fixes.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@1988 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-10 21:16:20 +00:00
rburchell b1ee732713 Few fixes.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@1987 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-10 21:16:00 +00:00
rburchell ef9f97fa05 Help() -> OnHelp(), return true.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@1986 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-10 21:15:39 +00:00
rburchell 7a4b0418bc Fix ns_set.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@1985 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-10 21:15:24 +00:00
robbeh 3d8245a5a6 fixed typo in ns_saset.c dealt with constness for change_core_display and added ASTYLE to contain astyle options
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@1984 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-10 20:47:53 +00:00
rburchell d01df85cd1 More fixes.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@1983 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-10 19:34:31 +00:00
rburchell 1ed7d17b5d Various compile fixes.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@1982 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-10 19:34:03 +00:00
rburchell b48c18b011 Fixes..
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@1981 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-10 17:01:21 +00:00
cyberbotx b496e60eb0 Fix compile errors in hs_* modules, as well as add some const-safeness to HostServ functions.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@1980 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-10 16:56:24 +00:00
cyberbotx 2bf017a0e1 Fixed compile errors in cs_xop.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@1979 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-10 16:38:28 +00:00
rburchell 5fa7167181 Fix a few (easy) compile errors.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@1978 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-10 16:19:14 +00:00
rburchell fe39b96db7 Fix modules to use the right type (CommandReturn, not CommandResult)
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@1977 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-10 16:17:16 +00:00
rburchell e225e7e628 Change cs_set to use new commands API (ugh, this sucked.)
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@1976 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-10 16:07:26 +00:00
rburchell b15c46d795 Move getstring() and getstring2() from macros to functions. This fixes a bunch of warnings, and means they are actually *readable*, as well as type-safe and const.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@1975 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-10 13:54:09 +00:00
rburchell e7a1572317 Clean up a few warnings.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@1974 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-10 13:30:24 +00:00
rburchell 1fd0249076 NS_VERBOTEN -> NS_FORBIDDEN, CS_VERBOTEN -> CS_FORBIDDEN, etc.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@1973 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-10 12:26:09 +00:00
cyberbotx e7a6661baa Do not pack the build directory into the tarballs from now on, also fix subtle error in install.js for Windows when the last characters of the script's path is a backslash.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@1972 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-10 12:00:47 +00:00
rburchell 018f1a50b2 Bump version to 1.9.1-explodes-on-impact.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@1971 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-10 10:07:17 +00:00
rburchell 4d89b91ed3 Change ns_set to use subcommand for help display.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@1970 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-10 10:04:34 +00:00
robbeh 24dbf4e00c Use a virtual destructor for Commands as it has virtual functions
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@1969 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-10 09:17:34 +00:00
rburchell 28a0108e0b Fix a few quick compile errors.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@1968 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-10 09:07:32 +00:00
rburchell 87dc82f3e9 Convert cs_modes to new commands API.`
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@1967 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-10 00:00:17 +00:00
cyberbotx 0a06ce6490 Changed cs_register to use new command API.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@1966 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-09 23:19:09 +00:00
cyberbotx d931ce8096 Changed cs_sendpass to use new command API.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@1965 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-09 23:13:36 +00:00
cyberbotx fc0deb2181 Changed cs_status to use new command API.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@1964 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-09 23:01:59 +00:00
cyberbotx de6a85bdf5 Changed cs_suspend to use new command API.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@1963 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-09 22:53:42 +00:00
cyberbotx 0ab4571106 Changed cs_topic to use new command API.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@1962 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-09 22:45:18 +00:00
cyberbotx 8c815bedeb Changed cs_xop to use new command API.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@1961 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-09 22:34:55 +00:00
robbeh d684f3c556 Moved myChanHelp so it'll compile ;)
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@1960 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-09 22:17:43 +00:00
robbeh 3fe6a25236 Moved cs_list.c to use the new command API
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@1959 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-09 22:09:22 +00:00
rburchell 8c5a7e7aea Convert cs_logout to new commands API.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@1958 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-09 22:04:14 +00:00
rburchell e7228b6289 Remove gone do_backtrace() prototype and call from memory.c
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@1957 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-09 21:35:04 +00:00
rburchell 72b86bcf72 Remove some references to the (removed) waiting variable.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@1956 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-09 21:33:51 +00:00
rburchell eec4e00b16 Fix typo.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@1955 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-09 21:33:07 +00:00
cyberbotx ff6477e6dd Changed os_sgline to use new command API.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@1954 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-09 21:06:36 +00:00
rburchell d7d01bdc5c Squashed commit: merge next (1.9.1) back to trunk.
SVN users, NOTE: THIS WILL NOT BUILD, NOR SHOULD YOU RUN IT YET.

git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@1953 5417fbe8-f217-4b02-8779-1006273d7864
2009-02-09 21:01:05 +00:00
628 changed files with 206883 additions and 199978 deletions
+2 -4
View File
@@ -1,5 +1,3 @@
/autom4te.cache
Makefile
config.cache
config.log
config.status
include/sysconf.h
build/
+249 -319
View File
@@ -9,31 +9,177 @@ if(${CMAKE_CURRENT_SOURCE_DIR} STREQUAL ${CMAKE_CURRENT_BINARY_DIR} AND NOT WIN3
message(FATAL_ERROR "You can not use CMake to build Anope from the root of it's source tree! Remove the CMakeCache.txt file from this directory, then create a separate directory (either below this directory or elsewhere), and then re-run CMake from there.")
endif(${CMAKE_CURRENT_SOURCE_DIR} STREQUAL ${CMAKE_CURRENT_BINARY_DIR} AND NOT WIN32)
# Set the project as C++ primarily, but have C enabled for the checks required later
project(Anope CXX)
enable_language(C)
# Detect the version of CMake for the later conditional checks
execute_process(COMMAND ${CMAKE_COMMAND} --version OUTPUT_VARIABLE VERSION OUTPUT_STRIP_TRAILING_WHITESPACE)
string(REGEX REPLACE "cmake version 2\\.(.*)" "\\1" ONLY_VERSION "${VERSION}")
string(REGEX MATCH "-patch .*$" HAS_PATCH "${ONLY_VERSION}")
if(HAS_PATCH)
string(REGEX REPLACE "(.*)-patch .*" "\\1" MINOR_VERSION "${ONLY_VERSION}")
string(REGEX REPLACE ".*-patch (.*)" "\\1" PATCH_VERSION "${ONLY_VERSION}")
else(HAS_PATCH)
string(REGEX MATCH "\\." HAS_DOT "${ONLY_VERSION}")
if(HAS_DOT)
string(REGEX REPLACE "(.*)\\..*" "\\1" MINOR_VERSION "${ONLY_VERSION}")
string(REGEX REPLACE ".*\\.(.*)" "\\1" PATCH_VERSION "${ONLY_VERSION}")
else(HAS_DOT)
string(REGEX REPLACE "(.*)-beta" "\\1" MINOR_VERSION "${ONLY_VERSION}")
if(MINOR_VERSION STREQUAL "4-1\n")
set(PATCH_VERSION 1)
else(MINOR_VERSION STREQUAL "4-1\n")
set(PATCH_VERSION 0)
endif(MINOR_VERSION STREQUAL "4-1\n")
set(MINOR_VERSION 4)
endif(HAS_DOT)
endif(HAS_PATCH)
# Detect is we are using CMake 2.6 or better, these versions include functions that require less work than CMake 2.4 does
if(${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} GREATER 2.5)
if(MINOR_VERSION GREATER 5)
set(CMAKE26_OR_BETTER TRUE)
set(CMAKE248_OR_BETTER TRUE)
set(CMAKE244_OR_BETTER TRUE)
set(CMAKE242_OR_BETTER TRUE)
else(${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} GREATER 2.5)
else(MINOR_VERSION GREATER 5)
set(CMAKE26_OR_BETTER FALSE)
# Also detect if we are using CMake 2.4.4 or better, the CheckCXXCompilerFlag module is non-existant in earlier versions
if(${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}.${CMAKE_PATCH_VERSION} GREATER 2.4.3)
# Also detect if we are using CMake 2.4.8 or better, the FIND sub-command of list() is non-existant in earlier versions
if(PATCH_VERSION GREATER 7)
set(CMAKE248_OR_BETTER TRUE)
set(CMAKE244_OR_BETTER TRUE)
set(CMAKE242_OR_BETTER TRUE)
else(${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}.${CMAKE_PATCH_VERSION} GREATER 2.4.3)
set(CMAKE244_OR_BETTER FALSE)
# ALSO detect if we are using CMake 2.4.2 or better, the APPEND sub-command of list() is non-existant in earlier versions
if(CMAKE_PATCH_VERSION GREATER 1)
else(PATCH_VERSION GREATER 7)
set(CMAKE248_OR_BETTER FALSE)
# Also detect if we are using CMake 2.4.4 or better, the CheckCXXCompilerFlag module and SORT sub-command of list() are non-existant in earlier versions
if(PATCH_VERSION GREATER 3)
set(CMAKE244_OR_BETTER TRUE)
set(CMAKE242_OR_BETTER TRUE)
else(CMAKE_PATCH_VERSION GREATER 1)
set(CMAKE242_OR_BETTER FALSE)
endif(CMAKE_PATCH_VERSION GREATER 1)
endif(${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}.${CMAKE_PATCH_VERSION} GREATER 2.4.3)
endif(${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} GREATER 2.5)
else(PATCH_VERSION GREATER 3)
set(CMAKE244_OR_BETTER FALSE)
# ALSO detect if we are using CMake 2.4.2 or better, the APPEND sub-command of list() is non-existant in earlier versions
if(PATCH_VERSION GREATER 1)
set(CMAKE242_OR_BETTER TRUE)
else(PATCH_VERSION GREATER 1)
set(CMAKE242_OR_BETTER FALSE)
endif(PATCH_VERSION GREATER 1)
endif(PATCH_VERSION GREATER 3)
endif(PATCH_VERSION GREATER 7)
endif(MINOR_VERSION GREATER 5)
# Override the module include path to include our directory, for our Anope.cmake, as well as we are using our own version of the NSIS template
set(CMAKE_MODULE_PATH ${Anope_SOURCE_DIR}/cmake)
include(Anope)
# Force the locale to C for later uses of things like gcc so the messages come up in English, not the user's default language
set(ENV{LC_ALL} C)
# Start with empty defaults for library and include directories, to be used by GNU compilers only
set(DEFAULT_LIBRARY_DIRS)
set(DEFAULT_INCLUDE_DIRS)
# If we are using a GNU compiler (have to use CXX because it seems to fail on C), we will be able to determine it's default paths for libraries and includes
if(CMAKE_COMPILER_IS_GNUCXX)
# First look for the compiler's default library directories
execute_process(COMMAND ${CMAKE_C_COMPILER} -print-search-dirs OUTPUT_VARIABLE LINES OUTPUT_STRIP_TRAILING_WHITESPACE)
# Find only the part after "libraries: "
string(REGEX REPLACE ".*\nlibraries: (.*)$" "\\1" LINE "${LINES}")
# Replace the colons in the list with semicolons (only when not on MinGW, which uses semicolons already), and if on MinGW, just copy the line
if(NOT MINGW)
string(REGEX REPLACE ":" ";" LIBRARIES ${LINE})
else(NOT MINGW)
set(LIBRARIES "${LINE}")
endif(NOT MINGW)
# Iterate through the libraries
foreach(LIBRARY ${LIBRARIES})
# Check if the first character is an equal sign, and skip that library directory as it is (I believe) the primary default and shows up later in the list anyways
string(SUBSTRING ${LIBRARY} 0 1 FIRST_CHAR)
if(NOT FIRST_CHAR STREQUAL "=")
# If the directory had no = in front of it, make sure it's absolute and add it to the list of default library directories
get_filename_component(LIBRARY ${LIBRARY} ABSOLUTE)
append_to_list(DEFAULT_LIBRARY_DIRS ${LIBRARY})
endif(NOT FIRST_CHAR STREQUAL "=")
endforeach(LIBRARY)
# Remove duplicate entries from the list
if(DEFAULT_LIBRARY_DIRS)
remove_list_duplicates(DEFAULT_LIBRARY_DIRS)
endif(DEFAULT_LIBRARY_DIRS)
# Create a temporary file to test for the default include directories
FILE(WRITE empty.cpp "")
# Next, we look for the compiler's default include directories
# Run the command to find the default include directories
execute_process(COMMAND ${CMAKE_C_COMPILER} -v -x c++ -E ${CMAKE_CURRENT_SOURCE_DIR}/empty.cpp ERROR_VARIABLE LINES OUTPUT_QUIET ERROR_STRIP_TRAILING_WHITESPACE)
# Remove the empty file, it is no longer needed
FILE(REMOVE empty.cpp)
# Convert the new lines to semicolons
string(REGEX REPLACE "\n" ";" LINES ${LINES})
# Temporary variable saying if we are in the search list or not
set(IN_SEARCH_LIST FALSE)
# Iterate through the lines
foreach(LINE ${LINES})
# If the line has the following on it, the next lines will contain directory names
if(LINE STREQUAL "#include <...> search starts here:")
set(IN_SEARCH TRUE)
else(LINE STREQUAL "#include <...> search starts here:")
# If the line has the following on it, we hit the end of the list
if(LINE STREQUAL "End of search list.")
set(IN_SEARCH FALSE)
else(LINE STREQUAL "End of search list.")
# If we are within the block between the above two lines...
if(IN_SEARCH)
# Get everything but the first character of the line
string(LENGTH ${LINE} LINE_LENGTH)
math(EXPR LINE_LENGTH "${LINE_LENGTH} - 1")
string(SUBSTRING ${LINE} 1 ${LINE_LENGTH} INCLUDE)
# Convert the path to an absolute one, just in case it wasn't
get_filename_component(INCLUDE ${INCLUDE} ABSOLUTE)
# Add that directory to the list of default include directories
append_to_list(DEFAULT_INCLUDE_DIRS ${INCLUDE})
endif(IN_SEARCH)
endif(LINE STREQUAL "End of search list.")
endif(LINE STREQUAL "#include <...> search starts here:")
endforeach(LINE)
# Remove duplicate entries from the list
if(DEFAULT_INCLUDE_DIRS)
remove_list_duplicates(DEFAULT_INCLUDE_DIRS)
endif(DEFAULT_INCLUDE_DIRS)
endif(CMAKE_COMPILER_IS_GNUCXX)
# If we are using Visual Studio, locate the path of the Windows Server 2008 SDK or Windows Server 2003 Platform SDK, depending on which is installed
if(MSVC)
# If the path comes up as "/registry" from any of these, the path wasn't found, otherwise, we'll set WSDK_PATH to the corresponding path
# Look for the 2008 SDK under HKLM first
get_filename_component(WSDK2008_PATH "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Microsoft SDKs\\Windows;CurrentInstallFolder]" ABSOLUTE CACHE)
if(WSDK2008_PATH STREQUAL "/registry")
# If not found, look for the 2003 SDK under HKLM
get_filename_component(WSDK2003_PATH "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\MicrosoftSDK\\InstalledSDKs\\D2FF9F89-8AA2-4373-8A31-C838BF4DBBE1;Install Dir]" ABSOLUTE CACHE)
if(WSDK2003_PATH STREQUAL "/registry")
# If not found, look for the 2008 SDK under HKCU
get_filename_component(WSDK2008_PATH "[HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\Microsoft SDKs\\Windows;CurrentInstallFolder]" ABSOLUTE CACHE)
if(WSDK2008_PATH STREQUAL "/registry")
# If not found, look for the 2003 SDK under HKCU
get_filename_component(WSDK2003_PATH "[HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\MicrosoftSDK\\InstalledSDKs\\D2FF9F89-8AA2-4373-8A31-C838BF4DBBE1;Install Dir]" ABSOLUTE CACHE)
if(WSDK2003_PATH STREQUAL "/regsitry")
# The SDK was never found, set the path to nothing
set(WSDK_PATH "")
else(WSDK2003_PATH STREQUAL "/regsitry")
set(WSDK_PATH "${WSDK2003_PATH}")
endif(WSDK2003_PATH STREQUAL "/regsitry")
else(WSDK2008_PATH STREQUAL "/registry")
set(WSDK_PATH "${WSDK2008_PATH}")
endif(WSDK2008_PATH STREQUAL "/registry")
else(WSDK2003_PATH STREQUAL "/registry")
set(WSDK_PATH "${WSDK2003_PATH}")
endif(WSDK2003_PATH STREQUAL "/registry")
else(WSDK2008_PATH STREQUAL "/registry")
set(WSDK_PATH "${WSDK2008_PATH}")
endif(WSDK2008_PATH STREQUAL "/registry")
endif(MSVC)
# If the user specifies -DCMAKE_BUILD_TYPE on the command line, take their definition
# and dump it in the cache along with proper documentation, otherwise set CMAKE_BUILD_TYPE
# to Debug prior to calling PROJECT()
# to Debug
# Only do this if not using Visual Studio
if(NOT MSVC)
if(CMAKE_BUILD_TYPE)
@@ -43,10 +189,6 @@ if(NOT MSVC)
endif(CMAKE_BUILD_TYPE)
endif(NOT MSVC)
# Set the project as C++ primarily, but have C enabled for the checks required later
project(Anope CXX)
enable_language(C)
# If running under MinGW, we have to force the resource compiler settings (hopefully this will be fixed in a later version of CMake)
if(MINGW)
set(CMAKE_RC_COMPILER_INIT windres)
@@ -65,15 +207,28 @@ else(CMAKE244_OR_BETTER)
include(TestCXXAcceptsFlag)
endif(CMAKE244_OR_BETTER)
# If extra directories were specified, tell cmake about them.
if(EXTRA_INCLUDE)
include_directories(${EXTRA_INCLUDE})
link_directories(${EXTRA_INCLUDE})
endif(EXTRA_INCLUDE)
# Find gettext
find_package(Gettext)
# Add an optional variable for using run-cc.pl for building, Perl will be checked later regardless of this setting
option(USE_RUN_CC_PL "Use run-cc.pl for building" OFF)
# Use the following directories as includes
include_directories(${Anope_SOURCE_DIR}/include ${Anope_BINARY_DIR}/include ${Anope_BINARY_DIR}/lang)
# Note that it is important the binary include directory comes before the
# source include directory so the precompiled headers work correctly.
include_directories(${Anope_BINARY_DIR}/include ${Anope_SOURCE_DIR}/include ${Anope_BINARY_DIR}/language ${Anope_SOURCE_DIR}/modules/pseudoclients)
# If using Windows, always add the _WIN32 define
if(WIN32)
add_definitions(-D_WIN32)
# And include the windows specific folder for our anope_windows.h
include_directories(${Anope_SOURCE_DIR}/src/win32)
endif(WIN32)
# If using Visual Studio, set the C++ flags accordingly
@@ -83,17 +238,18 @@ if(MSVC)
string(REPLACE "/GX " "" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS})
string(REPLACE "/W3 " "" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS})
# Set the compile flags to have warnings on the max setting (but disable a few annoying ones), exception handling turned on, the proper defines
set(CXXFLAGS "${CXXFLAGS} /W4 /wd4251 /wd4706 /wd4800 /wd4996 /EHs")
set(CXXFLAGS "${CXXFLAGS} /W4 /wd4100 /wd4127 /wd4250 /wd4251 /wd4355 /wd4706 /wd4800 /wd4996 /EHs")
add_definitions(-DMSVCPP -D_CRT_SECURE_NO_WARNINGS)
# Otherwise, we're not using Visual Studio
else(MSVC)
# Set the compile flags to have all warnings on (including shadowed variables)
set(CXXFLAGS "${CXXFLAGS} -Wall -Wshadow")
# If on a *nix system, also set the compile flags to remove GNU extensions (favor ISO C++) as well as reject non-ISO C++ code, also remove all leading underscores in exported symbols
# If on a *nix system, also set the compile flags to remove GNU extensions (favor ISO C++) as well as reject non-ISO C++ code, also remove all leading underscores in exported symbols (only on GNU compiler)
if(UNIX)
set(CXXFLAGS "${CXXFLAGS} -ansi -pedantic -fno-leading-underscore")
# Set the module-specific compile flags to the same setting as the compile flags
set(MODULE_CXXFLAGS "${CXXFLAGS}")
set(CXXFLAGS "${CXXFLAGS} -ansi -pedantic")
if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
set(CXXFLAGS "${CXXFLAGS} -Wno-long-long -fno-leading-underscore")
endif(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
# If we aren't on a *nix system, we are using MinGW
else(UNIX)
# Also, if we are building under MinGW, add another define for MinGW
@@ -105,7 +261,7 @@ endif(MSVC)
# If CMake has found that the given system requires a special library for dl* calls, include it with the linker flags
if(CMAKE_DL_LIBS)
set(LDFLAGS "${LDFLAGS} -l${CMAKE_DL_LIBS}")
append_to_list(LINK_LIBS ${CMAKE_DL_LIBS})
endif(CMAKE_DL_LIBS)
# Under MinGW, the -shared flag isn't properly set in the module-specific linker flags, add it from the C flags for shared libraries
@@ -141,8 +297,20 @@ if(NOT MSVC)
# Check if socket is within the socket library (if the library exists), and add it to the linker flags if needed
check_library_exists(socket socket "" HAVE_SOCKET_LIB)
if(HAVE_SOCKET_LIB)
set(LDFLAGS "${LDFLAGS} -lsocket")
append_to_list(LINK_LIBS socket)
endif(HAVE_SOCKET_LIB)
# Check if inet_addr is within the nsl library (if the library exists), and add it to the linker flags if needed
check_library_exists(nsl inet_addr "" HAVE_NSL_LIB)
if(HAVE_NSL_LIB)
append_to_list(LINK_LIBS nsl)
endif(HAVE_NSL_LIB)
# Check if pthread_create is within the pthread library (if the library exists), and add it to the linker flags if needed
check_library_exists(pthread pthread_create "" HAVE_PTHREAD)
if(HAVE_PTHREAD)
set(LDFLAGS "${LDFLAGS} -pthread")
else(HAVE_PTHREAD)
message(FATAL_ERROR "The pthread library is required to build Anope")
endif(HAVE_PTHREAD)
endif(NOT WIN32)
endif(NOT MSVC)
@@ -155,124 +323,40 @@ if(NOT DEFUMASK)
endif(RUNGROUP)
endif(NOT DEFUMASK)
# Set the DEBUG_BUILD for sysconf.h
if(CMAKE_BUILD_TYPE STREQUAL "DEBUG" OR CMAKE_BUILD_TYPE STREQUAL "RELWITHDEBINFO")
set(DEBUG_BUILD TRUE)
endif(CMAKE_BUILD_TYPE STREQUAL "DEBUG" OR CMAKE_BUILD_TYPE STREQUAL "RELWITHDEBINFO")
# Check for the existance of the following include files
check_include_file(sys/types.h HAVE_SYS_TYPES_H)
check_include_file(cstdint HAVE_CSTDINT)
check_include_file(stdint.h HAVE_STDINT_H)
check_include_file(strings.h HAVE_STRINGS_H)
check_include_file(sys/select.h HAVE_SYS_SELECT_H)
# Check for the existance of the following functions
check_function_exists(gethostbyname HAVE_GETHOSTBYNAME)
check_function_exists(gettimeofday HAVE_GETTIMEOFDAY)
check_function_exists(setgrent HAVE_SETGRENT)
check_function_exists(strcasecmp HAVE_STRCASECMP)
check_function_exists(stricmp HAVE_STRICMP)
check_function_exists(strlcat HAVE_STRLCAT)
check_function_exists(strlcpy HAVE_STRLCPY)
check_function_exists(umask HAVE_UMASK)
check_function_exists(backtrace HAVE_BACKTRACE)
check_function_exists(epoll_wait HAVE_EPOLL)
check_function_exists(poll HAVE_POLL)
check_function_exists(kqueue HAVE_KQUEUE)
# Check for the existance of the following types
check_type_size(uint8_t UINT8_T)
check_type_size(u_int8_t U_INT8_T)
check_type_size(int16_t INT16_T)
check_type_size(uint16_t UINT16_T)
check_type_size(u_int16_t U_INT16_T)
check_type_size(int32_t INT32_T)
check_type_size(uint32_t UINT32_T)
check_type_size(u_int32_t U_INT32_T)
# Check if eventfd works
try_run(EVENTFD_TEST_RUN_RESULT EVENTFD_TEST_COMPILE_RESULT ${CMAKE_CURRENT_BINARY_DIR} ${Anope_SOURCE_DIR}/cmake/eventfd_test.cpp)
set(HAVE_EVENTFD FALSE)
if (EVENTFD_TEST_COMPILE_RESULT AND EVENTFD_TEST_RUN_RESULT EQUAL 1)
set(HAVE_EVENTFD TRUE)
endif(EVENTFD_TEST_COMPILE_RESULT AND EVENTFD_TEST_RUN_RESULT EQUAL 1)
# Only CMake 2.6.x and later contain the STRIP sub-command for string()
if(CMAKE26_OR_BETTER)
# Strip the leading and trailing spaces from the compile flags
if(CXXFLAGS)
string(STRIP ${CXXFLAGS} CXXFLAGS)
endif(CXXFLAGS)
# Strip the leading and trailing spaces from the linker flags
if(LDFLAGS)
string(STRIP ${LDFLAGS} LDFLAGS)
endif(LDFLAGS)
endif(CMAKE26_OR_BETTER)
# A macro to handle appending to lists
macro(append_to_list LIST)
if(CMAKE242_OR_BETTER)
# For CMake 2.4.2 or better, we can just use the APPEND sub-command of list()
list(APPEND ${LIST} ${ARGN})
else(CMAKE242_OR_BETTER)
# For CMake 2.4.x before 2.4.2, we have to do this manually use set() instead
set(${LIST} ${${LIST}} ${ARGN})
endif(CMAKE242_OR_BETTER)
endmacro(append_to_list)
# A macro to handle reading specific lines from a file
macro(read_from_file FILE REGEX STRINGS)
if(CMAKE26_OR_BETTER)
# For CMake 2.6.x or better, we can just use this function to get the lines that match the given regular expression
file(STRINGS ${FILE} RESULT REGEX ${REGEX})
else(CMAKE26_OR_BETTER)
# For CMake 2.4.x, we need to do this manually, firsly we read the file in
file(READ ${FILE} ALL_STRINGS)
# Next we replace all newlines with semicolons
string(REGEX REPLACE "\n" ";" ALL_STRINGS ${ALL_STRINGS})
# Clear the result list
set(RESULT)
# Iterate through all the lines of the file
foreach(STRING ${ALL_STRINGS})
# Check for a match against the given regular expression
string(REGEX MATCH ${REGEX} STRING_MATCH ${STRING})
# If we had a match, append the match to the list
if(STRING_MATCH)
append_to_list(RESULT ${STRING})
endif(STRING_MATCH)
endforeach(STRING)
endif(CMAKE26_OR_BETTER)
# Set the given STRINGS variable to the result
set(${STRINGS} ${RESULT})
endmacro(read_from_file)
# A macro to handle searching within a list
macro(find_in_list LIST ITEM_TO_FIND FOUND)
if(CMAKE26_OR_BETTER OR ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}.${CMAKE_PATCH_VERSION} GREATER 2.4.7)
# For CMake 2.6.x or better (as well as CMake 2.4.8 or better), we can use the FIND sub-command of list()
list(FIND ${LIST} ${ITEM_TO_FIND} ITEM_FOUND)
else(CMAKE26_OR_BETTER OR ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}.${CMAKE_PATCH_VERSION} GREATER 2.4.7)
# For CMake 2.4.x before 2.4.8, we have to do this ourselves (NOTE: This is very slow due to a lack of break() as well), firstly we set that we a temporary boolean
set(ITEM_FOUND -1)
set(POS 0)
# Iterate through the list
foreach(ITEM ${${LIST}})
# If the item we are looking at is the item we are trying to find, set that we've found the item
if(${ITEM} STREQUAL ${ITEM_TO_FIND})
set(ITEM_FOUND ${POS})
endif(${ITEM} STREQUAL ${ITEM_TO_FIND})
math(EXPR POS "${POS} + 1")
endforeach(ITEM)
endif(CMAKE26_OR_BETTER OR ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}.${CMAKE_PATCH_VERSION} GREATER 2.4.7)
# Set the given FOUND variable to the result
set(${FOUND} ${ITEM_FOUND})
endmacro(find_in_list)
# A macro to handle removing duplicates from a list
macro(remove_list_duplicates LIST)
if(CMAKE26_OR_BETTER)
# For CMake 2.6.x or better, this can be done automatically
list(REMOVE_DUPLICATES ${LIST})
else(CMAKE26_OR_BETTER)
# For CMake 2.4.x, we have to do this ourselves, firstly we'll clear a temporary list
set(NEW_LIST)
# Iterate through the old list
foreach(ITEM ${${LIST}})
# Check if the item is in the new list
find_in_list(NEW_LIST ${ITEM} FOUND_ITEM)
if(FOUND_ITEM EQUAL -1)
# If the item was not found, append it to the list
append_to_list(NEW_LIST ${ITEM})
endif(FOUND_ITEM EQUAL -1)
endforeach(ITEM)
# replace the old list with the new list
set(${LIST} ${NEW_LIST})
endif(CMAKE26_OR_BETTER)
endmacro(remove_list_duplicates)
# Strip the leading and trailing spaces from the compile flags
if(CXXFLAGS)
strip_string(${CXXFLAGS} CXXFLAGS)
endif(CXXFLAGS)
# Strip the leading and trailing spaces from the linker flags
if(LDFLAGS)
strip_string(${LDFLAGS} LDFLAGS)
endif(LDFLAGS)
# Search for the following programs
find_program(GREP grep)
@@ -296,8 +380,8 @@ else(INSTDIR)
endif(INSTDIR)
# Version number processing
# Find all lines in version.log that start with VERSION_
read_from_file(${Anope_SOURCE_DIR}/version.log "^VERSION_" VERSIONS)
# Find all lines in src/version.sh that start with VERSION_
read_from_file(${Anope_SOURCE_DIR}/src/version.sh "^VERSION_" VERSIONS)
# Iterate through the strings found
foreach(VERSION_STR ${VERSIONS})
# Get the length of the string
@@ -312,6 +396,25 @@ foreach(VERSION_STR ${VERSIONS})
set(VERSION_${VERSION_TYPE} ${VERSION})
endforeach(VERSION_STR ${VERSIONS})
# Default build version to 0
set(VERSION_BUILD 0)
# Only change the build number if version.h exists
if(EXISTS "${Anope_SOURCE_DIR}/include/version.h")
# Attempt to read the build number from include/version.h
read_from_file(${Anope_SOURCE_DIR}/include/version.h "^#define VERSION_BUILD" VERSIONS)
foreach(VERSION_STR ${VERSIONS})
# Get the length of the string
string(LENGTH ${VERSION_STR} VERSION_LEN)
# Subtract 22 from the string's length
math(EXPR VERSION_NUM_LEN "${VERSION_LEN} - 22")
# Extract the value from the string
string(SUBSTRING ${VERSION_STR} 22 ${VERSION_NUM_LEN} VERSION)
# Set VERSION_BUILD correctly
set(VERSION_BUILD ${VERSION})
endforeach(VERSION_STR ${VERSIONS})
endif(EXISTS "${Anope_SOURCE_DIR}/include/version.h")
# Set the version variables based on what was found above
set(VERSION_COMMA "${VERSION_MAJOR},${VERSION_MINOR},${VERSION_PATCH},${VERSION_BUILD}")
set(VERSION_DOTTED_NOBUILD "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}")
@@ -322,181 +425,11 @@ set(VERSION_FULL_NOBUILD "${VERSION_DOTTED_NOBUILD}${VERSION_EXTRA}")
# Only do the following for Windows
if(WIN32)
# Generate the win32.rc file using the above variables
configure_file(${Anope_SOURCE_DIR}/src/win32.rc.cmake ${Anope_BINARY_DIR}/src/win32.rc)
configure_file(${Anope_SOURCE_DIR}/src/win32/win32.rc.cmake ${Anope_BINARY_DIR}/src/win32/win32.rc)
endif(WIN32)
# Calculate dependencies for each header
# I would've done this inside the CMakeLists.txt for the include directory, but since it's added AFTER everything else, it won't help...
# Firstly, find all the header files
file(GLOB_RECURSE ALL_HEADERS "*.h")
# Iterate through the headers
foreach(HEADER ${ALL_HEADERS})
# Don't process the file if it's in an obsolete directory
if(NOT HEADER MATCHES ".*obsolete.*")
append_to_list(TMP_HEADERS ${HEADER})
# In addition, also set up a variable to store the fullpath of the header, in a variable prefixed with just the header's filename for easy access later
get_filename_component(HEADER_FILENAME ${HEADER} NAME)
set(${HEADER_FILENAME}_FULLPATH ${HEADER})
endif(NOT HEADER MATCHES ".*obsolete.*")
endforeach(HEADER)
# Set the list of headers to be all the non-obsolete ones, then sort the list
set(ALL_HEADERS ${TMP_HEADERS})
if(CMAKE244_OR_BETTER)
list(SORT ALL_HEADERS)
endif(CMAKE244_OR_BETTER)
# This function will take a #include line and extract the filename minus the quotes
macro(extract_include_filename INCLUDE FILENAME)
# Detect if there is any trailing whitespace (basically see if the last character is a space or a tab)
string(LENGTH ${INCLUDE} INCLUDE_LEN)
math(EXPR LAST_CHAR_POS "${INCLUDE_LEN} - 1")
string(SUBSTRING ${INCLUDE} ${LAST_CHAR_POS} 1 LAST_CHAR)
# Only strip if the last character was a space or a tab
if(LAST_CHAR STREQUAL " " OR LAST_CHAR STREQUAL "\t")
# Strip away trailing whitespace from the line
string(REGEX REPLACE "[ \t]*$" "" INCLUDE_STRIPPED ${INCLUDE})
else(LAST_CHAR STREQUAL " " OR LAST_CHAR STREQUAL "\t")
# Just copy INCLUDE to INCLUDE_STRIPPED so the below code doesn't complain about a lack of INCLUDE_STRIPPED
set(INCLUDE_STRIPPED ${INCLUDE})
endif(LAST_CHAR STREQUAL " " OR LAST_CHAR STREQUAL "\t")
# Find the filename including the quotes, it should be at the end of the line after whitespace was stripped
string(REGEX MATCH "\".*\"$" FILE ${INCLUDE_STRIPPED})
# Get the length of the filename with quotes
string(LENGTH ${FILE} FILENAME_LEN)
# Subtract 2 from this length, for the quotes
math(EXPR FILENAME_LEN "${FILENAME_LEN} - 2")
# Overwrite the filename with a version sans quotes
string(SUBSTRING ${FILE} 1 ${FILENAME_LEN} FILE)
# Set the filename to the the given variable
set(${FILENAME} "${FILE}")
endmacro(extract_include_filename)
# Preparse step 1: get filenames sans paths
# Iterate through the headers
foreach(HEADER ${ALL_HEADERS})
# Find all the lines in the current header that have any form of #include on them, regardless of whitespace
read_from_file(${HEADER} "^[ \t]*#[ \t]*include[ \t]*\".*\"[ \t]*$" INCLUDES)
# Get the filename only of the header we just checked
get_filename_component(HEADER_FILENAME ${HEADER} NAME)
# Iterate through the strings containing #include (if any)
foreach(INCLUDE ${INCLUDES})
# Extract the filename from the #include line
extract_include_filename(${INCLUDE} FILENAME)
# Append this filename to the list of headers for the header we are checking
append_to_list(${HEADER_FILENAME}_HEADERS ${FILENAME})
endforeach(INCLUDE)
endforeach(HEADER)
# Preparse step 2: for every header from above that had includes, recursively find the headers each header relies on
# Iterate through the headers (again)
foreach(HEADER ${ALL_HEADERS})
# Get the filename only of the current header
get_filename_component(HEADER_FILENAME ${HEADER} NAME)
# If there were any include, we'll be checking them
if(${HEADER_FILENAME}_HEADERS)
# Set the variables, old for all previously found headers, new for all newly found headers
set(OLD_HEADERS)
set(HEADERS ${${HEADER_FILENAME}_HEADERS})
set(NEW_HEADERS)
# Loop as long as there are still headers to be parsed
while(HEADERS)
# Iterate through the list of the current headers
foreach(CURR_HEADER ${HEADERS})
# If that header has headers it relies on, we'll add them to the list of new headers
if(${CURR_HEADER}_HEADERS)
foreach(CURR_HEADERS_HEADER ${${CURR_HEADER}_HEADERS})
append_to_list(NEW_HEADERS ${CURR_HEADERS_HEADER})
endforeach(CURR_HEADERS_HEADER)
endif(${CURR_HEADER}_HEADERS)
endforeach(CURR_HEADER)
# Append the headers we checked to the old headers
append_to_list(OLD_HEADERS ${HEADERS})
# Set the headers to check to the new headers (it may be empty and that'll exit the loop)
set(HEADERS ${NEW_HEADERS})
# Erase the new headers
set(NEW_HEADERS)
endwhile(HEADERS)
# OLD_HEADERS will now contain all headers that the current header relies on, remove duplicate headers from the list and sort the list
remove_list_duplicates(OLD_HEADERS)
if(CMAKE244_OR_BETTER)
list(SORT OLD_HEADERS)
endif(CMAKE244_OR_BETTER)
# Set the current header's list of headers to the cleaned up list from above
set(${HEADER_FILENAME}_HEADERS ${OLD_HEADERS})
endif(${HEADER_FILENAME}_HEADERS)
endforeach(HEADER)
# The following headers are generated from CMake rules and won't be found with the above
append_to_list(ALL_HEADERS ${Anope_BINARY_DIR}/lang/language.h ${Anope_BINARY_DIR}/include/sysconf.h ${Anope_BINARY_DIR}/include/version.h)
set(language.h_FULLPATH ${Anope_BINARY_DIR}/lang/language.h)
set(sysconf.h_FULLPATH ${Anope_BINARY_DIR}/include/sysconf.h)
set(version.h_FULLPATH ${Anope_BINARY_DIR}/include/version.h)
# This function is used in most of the src (sub)directories to calculate the header file dependencies for the given source file
macro(calculate_depends SRC)
# Find all the lines in the given source file that have any form of #include on them, regardless of whitespace
read_from_file(${SRC} "^[ \t]*#[ \t]*include[ \t]*\".*\"[ \t]*$" INCLUDES)
# Reset the list of headers to empty
set(HEADERS)
# Iterate through the strings containing #include (if any)
foreach(INCLUDE ${INCLUDES})
# Extract the filename from the #include line
extract_include_filename(${INCLUDE} FILENAME)
# Append the filename to the list of headers
append_to_list(HEADERS ${FILENAME})
endforeach(INCLUDE)
# Set the list of new headers to empty (this will store all the headers that the above list depends on)
set(NEW_HEADERS)
# Iterate through the list of headers
foreach(HEADER ${HEADERS})
# If the current header has it's own headers to depend on, append those to the list of new headers
if(${HEADER}_HEADERS)
append_to_list(NEW_HEADERS ${${HEADER}_HEADERS})
endif(${HEADER}_HEADERS)
endforeach(HEADER)
# If there were new headers, append them to the list of headers
if(NEW_HEADERS)
append_to_list(HEADERS ${NEW_HEADERS})
endif(NEW_HEADERS)
# If after all the above there is a list of header, we'll process them, converting them to full paths
if(HEADERS)
# Remove duplicate headers from the list and sort the list
remove_list_duplicates(HEADERS)
if(CMAKE244_OR_BETTER)
list(SORT HEADERS)
endif(CMAKE244_OR_BETTER)
# Set the list of full path headers to empty
set(HEADERS_FULL)
# Iterate through the list of headers
foreach(HEADER ${HEADERS})
# Append the full path of the header to the full path headers list
append_to_list(HEADERS_FULL ${${HEADER}_FULLPATH})
endforeach(HEADER)
# Set the given source file to depend on the headers given
set_source_files_properties(${SRC} PROPERTIES OBJECT_DEPENDS "${HEADERS_FULL}")
endif(HEADERS)
endmacro(calculate_depends)
# A macro to update the environment variable CPACK_IGNORED_FILES which contains a list of files for CPack to ignore
macro(add_to_cpack_ignored_files ITEM)
# Temporary copy of the orignal item
set(REAL_ITEM "${ITEM}")
# If we have 2+ arguments, assume that the second one was something like TRUE (doesn't matter really) and convert periods so they will be \\. for CPack
if(${ARGC} GREATER 1)
string(REPLACE "." "\\\\." REAL_ITEM ${REAL_ITEM})
endif(${ARGC} GREATER 1)
# If the environment variable is already defined, just tack the item to the end
if(DEFINED ENV{CPACK_IGNORED_FILES})
set(ENV{CPACK_IGNORED_FILES} "$ENV{CPACK_IGNORED_FILES};${REAL_ITEM}")
# Otherwise set the environment variable to the item
else(DEFINED ENV{CPACK_IGNORED_FILES})
set(ENV{CPACK_IGNORED_FILES} "${REAL_ITEM}")
endif(DEFINED ENV{CPACK_IGNORED_FILES})
endmacro(add_to_cpack_ignored_files)
# Add the initial files to ignore which will be ignored regardless of if you are building in-source or out-of-source
add_to_cpack_ignored_files(".git\;config.cache\;.svn\;CMakeFiles\;sysconf.h$\;Makefile.inc$\;config.log\;config.status" TRUE)
add_to_cpack_ignored_files(".git\;config.cache\;CMakeFiles\;sysconf.h$\;build" TRUE)
# Add the files we don't want the periods converted for
add_to_cpack_ignored_files(".\\\\\\\\.so$;.\\\\\\\\.o$;.\\\\\\\\.s$;${Anope_SOURCE_DIR}/Makefile$")
# If the two directories are the same, we are building in-source, thus we need to ignore more files from the build
@@ -514,8 +447,9 @@ endif(${Anope_SOURCE_DIR} STREQUAL ${Anope_BINARY_DIR})
# Go into the following directories and run their CMakeLists.txt as well
add_subdirectory(data)
add_subdirectory(docs)
add_subdirectory(lang)
add_subdirectory(language)
add_subdirectory(src)
add_subdirectory(modules)
add_subdirectory(include)
# Get the filename of the Anope binary, to use later
@@ -535,18 +469,13 @@ if(NOT WIN32 AND RUNGROUP)
endif(NOT WIN32 AND RUNGROUP)
# On Windows platforms, install extra files
if(WIN32)
install(FILES ${Anope_SOURCE_DIR}/anope.bat
install(FILES ${Anope_SOURCE_DIR}/src/win32/anope.bat
DESTINATION bin
)
install(FILES ${Anope_SOURCE_DIR}/Changes ${Anope_SOURCE_DIR}/Changes.conf ${Anope_SOURCE_DIR}/Changes.lang
DESTINATION .
)
endif(WIN32)
# Only process the CPack section if we have CPack
if(EXISTS "${CMAKE_ROOT}/Modules/CPack.cmake")
# Override the module include path to include our directory, as we are using our own version of the NSIS template
set(CMAKE_MODULE_PATH ${Anope_SOURCE_DIR})
# Various options for CPack
set(CPACK_PACKAGE_NAME "Anope IRC Services")
set(CPACK_PACKAGE_VENDOR "Anope Team")
@@ -569,17 +498,18 @@ if(EXISTS "${CMAKE_ROOT}/Modules/CPack.cmake")
"bin\\\\anope.bat\\\" \\\"-debug -nofork" "Anope IRC Services (Debug and Window Logging)"
"bin\\\\anope.bat\\\" \\\"-nofork" "Anope IRC Services (Window Logging)"
"bin\\\\anope.bat\\\" \\\"-nothird" "Anope IRC Services (No Third Party Modules)"
"http://www.anope.org" "Anope Web Site"
"http://www.anope.org/" "Anope Web Site"
)
# The following doesn't work, but a bug report has been filed about it
#set(CPACK_CREATE_DESKTOP_LINK_${SERVICES_BINARY} TRUE)
set(CPACK_NSIS_MUI_ICON "${Anope_SOURCE_DIR}/src\\\\anope-icon.ico")
set(CPACK_NSIS_MUI_UNIICON "${Anope_SOURCE_DIR}/src\\\\anope-icon.ico")
set(CPACK_NSIS_MUI_ICON "${Anope_SOURCE_DIR}/src\\\\win32\\\\anope-icon.ico")
set(CPACK_NSIS_MUI_UNIICON "${Anope_SOURCE_DIR}/src\\\\win32\\\\anope-icon.ico")
set(CPACK_NSIS_INSTALLED_ICON_NAME "${SERVICES_BINARY}")
set(CPACK_NSIS_URL_INFO_ABOUT "http://www.anope.org")
set(CPACK_NSIS_URL_INFO_ABOUT "http://www.anope.org/")
set(CPACK_NSIS_COMPRESSOR "/SOLID lzma")
endif(WIN32)
set(CPACK_SOURCE_PACKAGE_FILE_NAME "anope-${VERSION_FULL_NOBUILD}-source")
set(CPACK_SOURCE_GENERATOR "TGZ")
set(CPACK_SOURCE_IGNORE_FILES "$ENV{CPACK_IGNORED_FILES}")
set(CPACK_MONOLITHIC_INSTALL TRUE)
include(CPack)
-170
View File
@@ -1,170 +0,0 @@
Orginally pulled from: http://www.inspircd.org/wiki/Coding_Guidelines
Yes, I'm aware the formatting of this document is ugly. It'll be fixed when someone cares. Read the wiki page if you want pretty for now.
---
InspIRCd Coding Guidelines
The following are a set of guidelines for writing patches to InspIRCd, or for creating modules for distribution with the official package. These
guidelines were written a time after InspIRCd development started, and so not all code yet follows these. This will be rectified with time.
1. Comments
Multi Line
Multiple line comments should follow the C-style comment, for example:
/*
* This is a multiple line comment, huzzah..
*/
Single Line
Single line comments should also be in the C style, for example:
/* This is a boring one-line comment */
Doxygen commenting
If you wish your comment to show in doxygen, the comment should be directly above the item you are documenting (a class, function, enum, etc)
and the first line should be "/**". For example:
/** This is a doxygen multiline comment.
* Description of thingymebob here.
*/
The first line after the "**" is used as the short description of the item (up to the full stop) and everything afterwards as the detailed
description.
Indentation
Tabs. Tabs. ONLY TABS. Use a single tab for each level of indentation, for example:
int main()
{
<tab>if (condition)
<tab>{
<tab><tab>code
<tab>}
}
Separation
Always put a space in between a keyword like if/while and the condition, for example:
if (foo == bar)
NOT
if(foo == bar)
Braces
Always put braces opening and closing blocks on separate lines, see the identation example. For example, place braces like this:
if (apples == "green")
{
cout << "Apples are green" << endl;
}
and not:
if (apples == "green") {
cout << "Apples are green" << endl;
}
The one exception to this is if you are declaring a class method which is only one line long, in that case the following is acceptable in most cases:
class foo : public bar
{
foo() { }
getrandomfoo() { return rand(); }
};
Templates
Where possible, use templates rather than #defines. Avoid use of RTTI.
Structs
Structs should be declared in the following fashion:
struct BodyPartBasket
{
int arms;
int legs;
int scrotalsacs;
};
and not like this:
typedef struct
{
int arms;
int legs;
int scrotalsacs;
} BodyPartBasket;
The second way is not required in C++ to be able to do this:
BodyPartBasket mybasket;
Plus, placing the name at the bottom of the declaration makes readability more difficult (as you have to scroll down to the bottom of the
struct to find its name).
(where possible, call them classes rather than structs.)
Variable naming
Class and struct names should be in camel case with a leading capital letter, for example "MyBagOfBones" and not "my_bag_of_bones" or
"mybagofbones". Variable names can be in either camel case with a leading capital letter or alternatively all lower case, so long as the same
naming convention is adhered to throughout the class. No classes or variables should be named in capitals unless this makes sense for the
name (for example "class DNS"). Constants and enum values should always be completely in CAPITALS and underscores may be used, for example:
enum DecayState
{
DECAYED_MOULDY = 0,
DECAYED_SMELLY = 1,
DECAYED_MAGGOTS = 2
};
All value names in an enum should be started with the same text which should be related in some way to the enum's use. For example "DNS_CNAME,
DNS_A, DNS_AAAA".
Use of references
Wherever possible, when dealing with any complex class, pass a const reference rather than a copy of the class. For example:
MyThingy::MyThingy(const std::string &thingyvalue)
{
}
Of course, if you intended to change the string you can just omit the 'const'.
Use of char pointers
Whenever you use char pointers (char*, char**) try to use const equivalents. This is much safer and avoids ugly and dangerous casts. For example:
MyThingy::Thingify(const char* const* wotsits)
{
}
If it is possible without performance loss, consider avoiding char pointers altogether and using std::string instead.
Use of STL
For more information on use of STL in InspIRCd, please see the separate STL FAQ.
Making copies of data
Never ever make a copy of a piece of data unless it is absolutely necessary. For example, don't use strlcpy() to make a copy of the const char* string
returned by std::string::c_str(), if the change can be done to the std::string itself. The same goes for unnecessary variable assignments, especially
those which assign large classes.
namespace std
Avoid the following:
using namespace std;
It might take a bit more typing, but things work better if you don't set (then later assume) the namespace -- specify it explicitly when you want to
use it.
Linefeeds
Unix linefeeds only please. We do not like to see our screens covered in ^M. :-)
Portability
Always make sure your code is portable to all supported operating systems, remember of course that as of 1.1.8 this includes windows. Don't write code
that only works on windows, or only works on Linux. Test your code on all platforms or ask for help from other developers who have the platforms you
want to test on.
new() and delete(), malloc() and free()
Apart from the fact that using malloc() and free() is bad practice in C++ code, you must never use malloc() or free() in InspIRCd, within its modules
or within the core. This is because if you use malloc() or free() in windows, the memory is claimed from the program's local heap. In windows, each
shared object (module, dll) has its own heap, which is protected from other dlls and executables. To get around this issue and allow more posix-like
memory access from other dlls in the program (other modules), InspIRCd overrides the operators new and delete to ensure that memory allocated by them
comes from the windows global heap. If you use malloc() and free() for this, the ircd will segfault when another module tries to access the memory you
have allocated!
strdup()
As with malloc(), above, strdup() should be avoided. Where strdup() is absolutely necessary, use strnewdup() which is our strdup() implementation that
calls operator new instead of using malloc(). char arrays allocated by strnewdup() should be deleted with operator delete[].
CoreExport and DllImport
Prefix all types you want to import or export to other modules with CoreExport and DllImport macros. These do nothing in POSIX operating systems,
however in windows these are expanded to the instructions __declspec(dllimport) and __declspec(dllexport) respectively depending on where they are
used and how.
External Dependencies
If a module is compiled as standard, or the code is part of the core, you must not use any dependencies that are not available as standard on all
supported operating systems beyond libstdc++, libc, and whatever else is currently required to build the core. Modules which use nonstandard
dependencies belong in the modules/extra directory.
Profiling and Performance
It is one thing to assume that code performs bad, it is another thing to prove that it actually is. A lot of experienced programmers talk about
'premature optimisation', and here is what it means: if you have a piece of code called once on startup that takes 10 seconds instead of one second to
run, and a piece of code that takes 0.05 seconds to run when it should take 0.01, and it is called once per second, the second piece of code is the
priority.
In other words, make sure that what you think is slow, and a performance problem in Insp actually is.
To do this, use the callgrind tool from Valgrind (valgrind --tool=cachegrind bin/inspircd -nofork -debug), and kcachegrind (or similar) to view the
output files.
-12
View File
@@ -1,12 +0,0 @@
Anope Version 1.9.0
--------------------
09/27 F Modified compile to use g++
10/01 F Improve protocol modules support (classes, virtual methods, etc)
10/11 F Move core services to use BotInfo
10/12 F Move BotInfo and related methods into a class
11/01 F Move modules into a class
11/15 F Fixed ns resending of passcode issue
11/15 F Modules now delete themselves
Provided by mooncup <mooncup@anonnet.org> - 2009
02/04 F Automatically reapply vhost on hs off for unreal32. [ #00]
-782
View File
@@ -1,782 +0,0 @@
Anope Version 1.8.0
-------------------
** ADDED CONFIGURATION DIRECTIVES **
** MODIFIED CONFIGURATION DIRECTIVES **
** DELETED CONFIGURATION DIRECTIVES **
Anope Version 1.7.24
--------------------
** ADDED CONFIGURATION DIRECTIVES **
** MODIFIED CONFIGURATION DIRECTIVES **
** DELETED CONFIGURATION DIRECTIVES **
Anope Version 1.7.23b
--------------------
** ADDED CONFIGURATION DIRECTIVES **
** MODIFIED CONFIGURATION DIRECTIVES **
** DELETED CONFIGURATION DIRECTIVES **
Anope Version 1.7.23
--------------------
** ADDED CONFIGURATION DIRECTIVES **
# OSIgnoreDBName [OPTIONAL]
# Module: os_ignore_db
#
# Use the given filename as database for services ignores.
# If not given, the default of "os_ignore.db" will be used.
#
#OSIgnoreDBName "os_ignore.db"
** MODIFIED CONFIGURATION DIRECTIVES **
** DELETED CONFIGURATION DIRECTIVES **
Anope Version 1.7.22
--------------------
** ADDED CONFIGURATION DIRECTIVES **
** MODIFIED CONFIGURATION DIRECTIVES **
# BotCoreModules <list> [RECOMMENDED]
# These modules will be loaded as part of BotServ's core.
# It is not recommended you change these settings unless you are
# sure you understand exactly what it is you are doing.
BotCoreModules "bs_help bs_botlist bs_assign bs_set bs_kick bs_badwords bs_act bs_info bs_say bs_unassign bs_bot bs_fantasy bs_fantasy_kick bs_fantasy_kickban bs_fantasy_owner bs_fantasy_seen"
** DELETED CONFIGURATION DIRECTIVES **
Anope Version 1.7.21
--------------------
** ADDED CONFIGURATION DIRECTIVES **
** MODIFIED CONFIGURATION DIRECTIVES **
** DELETED CONFIGURATION DIRECTIVES **
Anope Version 1.7.20
--------------------
** ADDED CONFIGURATION DIRECTIVES **
** MODIFIED CONFIGURATION DIRECTIVES **
** DELETED CONFIGURATION DIRECTIVES **
Anope Version 1.7.19
--------------------
** ADDED CONFIGURATION DIRECTIVES **
** MODIFIED CONFIGURATION DIRECTIVES **
** DELETED CONFIGURATION DIRECTIVES **
Anope Version 1.7.18
--------------------
** ADDED CONFIGURATION DIRECTIVES **
###########################################################################
#
# Encryption settings
#
###########################################################################
# EncModule <module_name> [REQUIRED]
# The encryption module to use when dealing with passwords.
# This determines how the passwords are stored in the databases,
# and does not add any security as far as transmitting passwords over
# the network goes.
# enc_none provides no password encryption, storing the password in
# plain text, this is the most versiatle as passwords can easily be
# recovered.
#
# NOTE: users of anope's previous (broken) md5 implementation should
# select the enc_old option, or things may break.
#
# NOTE2: Some of these encryption methods are one-way (md5, sha1, old)
# meaning that you can NOT retrive the passwords in plain text once
# encrypted.
#
# Plain Text - enc_none
# Previous (broken) MD5 - enc_old
# MD5 - enc_md5
# SHA1 - enc_sha1
#
EncModule "enc_none"
** MODIFIED CONFIGURATION DIRECTIVES **
** DELETED CONFIGURATION DIRECTIVES **
Anope Version 1.7.17
--------------------
** ADDED CONFIGURATION DIRECTIVES **
** MODIFIED CONFIGURATION DIRECTIVES **
** DELETED CONFIGURATION DIRECTIVES **
Anope Version 1.7.16
--------------------
** ADDED CONFIGURATION DIRECTIVES **
** MODIFIED CONFIGURATION DIRECTIVES **
** DELETED CONFIGURATION DIRECTIVES **
Anope Version 1.7.15
--------------------
** ADDED CONFIGURATION DIRECTIVES **
# UseStrictPrivMsg [OPTIONAL]
# Using this directive will force services to only respond to privmsgs
# addressed to Nick@ServerName - e.g. NickServ@localhost.net.
# This should be used on conjunction with ircd aliases.
#
#UseStrictPrivMsg
# NSResendDelay <time> [RECOMMENDED]
# Sets the minimum length of time between consecutive uses of the
# RESEND command. If not given, this restriction is disabled (note
# that this allows "resend flooding" or "mail bombing").
NSResendDelay 90s
NSDefAutoop
** MODIFIED CONFIGURATION DIRECTIVES **
ModuleDelayedAutoload "cs_appendtopic cs_enforce ns_maxemail os_info hs_request"
# LimitSessions [OPTIONAL]
# Enables session limiting. Session limiting prevents users from
# connecting more than a certain number of times from the same host at the
# same time - thus preventing most types of cloning. Once a host reaches
# it's session limit, all clients attempting to connect from that host
# will be killed. Exceptions to the default session limit, which are based
# on host names, can be defined via the exception list. It should be noted
# that session limiting, along with a large exception list, can degrade
# services' performance. See the source and comments in sessions.c and the
# online help for more information about session limiting.
#
# NOTE: This option is not available when STREAMLINED is defined in
# the Makefile.
LimitSessions
** DELETED CONFIGURATION DIRECTIVES **
# NSAutoOPDBName [OPTIONAL]
# Module: ns_noop
#
# Use the given filename as database for the autoop list. If not given,
# the default of "autoop.db" will be used.
#
#NSAutoOPDBName "autoop.db"
# KillClonesAkillExpire <time> [REQUIRED]
# Sets the expiry time for autokills added for hosts that have been
# killed using the KILLCLONES command.
KillClonesAkillExpire 30m
# CheckClones <minusers> <maxdelay> <warningdelay> [DEPRECATED]
# Causes Services to try and detect "clones" connecting to the network.
# A WALLOPS (or GOPER, if supported on the IRC server) will be sent if
# Services thinks it has found clones.
#
# This feature has been superseded by Session Limiting.
#
# <minusers> sets the minimum number of users which must successively
# connect to the network before Services will send a clone warning.
#
# <maxdelay> sets the maximum time that can elapse between successive
# users before Services decides they are not clones.
#
# <warningdelay> sets the minimum time between clone warnings for
# clones from the same host.
#
# NOTE: This option is not available when STREAMLINED is defined in
# the Makefile.
# CheckClones 5 10s 30s
# KillClones [DISCOURAGED] [DEPRECATED]
# Causes Services to kill users which trigger the clone warnings. (If
# CheckClones is disabled, this will have no effect.)
#
# This feature has been superceded by Session Limiting.
#
# BEWARE! The clone checking code is easily fooled; it can be
# triggered falsely under many conditions, for example:
#
# - Multiple users connecting from a shell machine.
#
# - A single user repeatedly connecting and disconnecting.
#
# Be very sure you know what you're doing before you even think about
# enabling this option, and remember that Services comes with no
# warranty.
#
# If that wasn't enough discouragement:
#
# ***** DO NOT ENABLE THIS OPTION! *****
#
# NOTE: This option is not available when STREAMLINED is defined in
# the Makefile.
#KillClones
Anope Version 1.7.13
--------------------
** ADDED CONFIGURATION DIRECTIVES **
** MODIFIED CONFIGURATION DIRECTIVES **
** DELETED CONFIGURATION DIRECTIVES **
Anope Version 1.7.12
--------------------
** ADDED CONFIGURATION DIRECTIVES **
# BSFantasyCharacter [REQUIRED]
# This option allows you to change the default prefix for fantasy
# commands in channels. This character will have to be prepended to all
# fantasy commands. If you choose "!" (the default), fantasy commands
# will, for example, be "!kick", "!op", etc.
BSFantasyCharacter "!"
** MODIFIED CONFIGURATION DIRECTIVES **
** DELETED CONFIGURATION DIRECTIVES **
Anope Version 1.7.11
--------------------
** ADDED CONFIGURATION DIRECTIVES **
# NickLen [REQUIRED]
# Set this to the maximum allowed nick length on your network. Anope does
# not support values larger than 31, so setting them makes no sense. Be
# sure to set this correctly, as setting this wrong can result in services
# being disconnected from the network.
NickLen 31
** MODIFIED CONFIGURATION DIRECTIVES **
# UserKey1|2|3 <value> [RECOMMENDED]
#
# These keys are required to initiate the random number generator. These
# numbers MUST be random as you want your passcodes to be random. Don't
# give these keys to anyone! Keep them private!
#
# *** NOTE ***
# If you don't enable these, or keep their default values, any talented
# programmer would be able to easily "guess" random strings used to mask
# information. Be safe, and come up with three different 7 digit numbers
#UserKey1 9866235
#UserKey2 8362013
#UserKey3 2362899
** DELETED CONFIGURATION DIRECTIVES **
Anope Version 1.7.10
--------------------
** ADDED CONFIGURATION DIRECTIVES **
** MODIFIED CONFIGURATION DIRECTIVES **
** DELETED CONFIGURATION DIRECTIVES **
Anope Version 1.7.9
-------------------
** ADDED CONFIGURATION DIRECTIVES **
# IRCDModule <module_name> [REQUIRED]
# The ircd protocol module should be used when connecting anope to your
# chosen IRCD. This should be one of the following options, or a file
# provided by your IRCD author.
#
# Bahamut 1.4.27 [or later] - "bahamut"
# DreamForge 4.6.7 - "dreamforge"
# Hybrid IRCd 7.0 [experimental] - "hybrid"
# InspIRCd 1.0 Beta 5 - "inspircd"
# InspIRCd module is provided by Brain <brain@inspircd.org>
# Plexus 2.0 [or later] - "plexus"
# PTLink 6.15.0 [experimental] - "ptlink"
# RageIRCd 2.0.0 [beta-6 of later] - "rageircd"
# Ratbox 2.0.6 [or later] - "ratbox"
# ShadowIRCD 4.0x [beta 7 or later] - "shadowircd"
# Solid IRCD 3.4.x [3.4.6 or later] - "solidircd"
# UltimateIRCd 3.0.0 [or later] - "ultimate3"
# UltimateIRCd 2.8.2 [or later] - "ultimate2"
# Unreal 3.2 [beta-19 or later] - "unreal32"
# Unreal 3.1.1 [or later] - "unreal31"
# ViagraIRCd 1.3.x [or later] - "viagra"
#
#IRCDModule "unreal32"
# HostCoreModules <list> [RECOMMENDED]
# These modules will be loaded as part of HostServ's core.
# It is not recommended you change these settings unless you are
# sure you understand exactly what it is you are doing.
HostCoreModules "hs_help hs_on hs_off hs_group hs_list hs_set hs_setall hs_del hs_delall"
# MemoCoreModules <list> [RECOMMENDED]
# These modules will be loaded as part of MemoServ's core.
# It is not recommended you change these settings unless you are
# sure you understand exactly what it is you are doing.
MemoCoreModules "ms_send ms_cancel ms_list ms_read ms_del ms_set ms_info ms_rsend ms_check ms_staff ms_sendall ms_help"
# HelpCoreModules <list> [RECOMMENDED]
# These modules will be loaded as part of HelpServ's core.
# It is not recommended you change these settings unless you are
# sure you understand exactly what it is you are doing.
HelpCoreModules "he_help"
# BotCoreModules <list> [RECOMMENDED]
# These modules will be loaded as part of BotServ's core.
# It is not recommended you change these settings unless you are
# sure you understand exactly what it is you are doing.
BotCoreModules "bs_help bs_botlist bs_assign bs_set bs_kick bs_badwords bs_act bs_info bs_say bs_unassign bs_bot bs_fantasy bs_fantasy_kick bs_fantasy_kickban bs_fantasy_owner bs_fantasy_seen bs_fantasy_unban"
# OperCoreModules <list> [RECOMMENDED]
# These modules will be loaded as part of OperServ's core.
# It is not recommended you change these settings unless you are
# sure you understand exactly what it is you are doing.
OperCoreModules "os_help os_global os_stats os_oper os_admin os_staff os_mode os_kick os_clearmodes os_killclones os_akill os_sgline os_sqline os_szline os_chanlist os_userlist os_logonnews os_randomnews os_opernews os_session os_noop os_jupe os_ignore os_set os_reload os_update os_restart os_quit os_shutdown os_defcon os_chankill os_svsnick os_oline os_umode os_modload os_modunload os_modlist os_modinfo"
# NickCoreModules <list> [RECOMMENDED]
# These modules will be loaded as part of NickServ's core.
# It is not recommended you change these settings unless you are
# sure you understand exactly what it is you are doing.
NickCoreModules "ns_help ns_register ns_group ns_identify ns_access ns_set ns_drop ns_recover ns_release ns_sendpass ns_ghost ns_alist ns_info ns_list ns_logout ns_status ns_update ns_getpass ns_getemail ns_forbid ns_suspend"
# ChanCoreModules <list> [RECOMMENDED]
# These modules will be loaded as part of ChanServ's core.
# It is not recommended you change these settings unless you are
# sure you understand exactly what it is you are doing.
ChanCoreModules "cs_help cs_register cs_identify cs_set cs_xop cs_access cs_akick cs_drop cs_sendpass cs_ban cs_clear cs_modes cs_getkey cs_invite cs_kick cs_list cs_logout cs_topic cs_info cs_getpass cs_forbid cs_suspend cs_status"
# OSOpersOnly [RECOMMENDED]
# If this is defined, only IRC Operators will be permitted to use
# OperServ, regardless of module based command access restrictions.
OSOpersOnly
# NSEmailMax [OPTIONAL]
# Module: ns_maxemail
#
# Limit the amount of registrations with the same email address to the
# amount given here. If set to 0 or left commented, there will be no limit
# enforced when registering new accounts or using /msg NickServ SET EMAIL.
#
#NSEmailMax 1
# NSAutoOPDBName [OPTIONAL]
# Module: ns_noop
#
# Use the given filename as database for the autoop list. If not given,
# the default of "autoop.db" will be used.
#
#NSAutoOPDBName "autoop.db"
# OSInfoDBName [OPTIONAL]
# Module: os_info
#
# Use the given filename as database for the oper information lines.
# If not given, the default of "os_info.db" will be used.
#
#OSInfoDBName "os_info.db"
** MODIFIED CONFIGURATION DIRECTIVES **
# UserKey1|2|3 <value> [REQUIRED]
#
# These keys are required to initiate the random number generator. These
# numbers MUST be random as you want your passcodes to be random. Don't
# give these keys to no anyone! Keep them private!
# For those pple who don't understand what to do here: Just pick three
# _different_ _random_ numbers with about 6 or 7 digits and put them here.
# If the keys don't work, they might be too long or you forgot to remove
# the # in front of them. Example:
# UserKey1 9866235
# UserKey1 <your_first_random_number_here>
# UserKey2 <your_second_random_number_here>
# UserKey3 <you_third_random_number_here>
# Numeric [OPTIONAL]
# Many ircd identify themselves with a Numeric ID when using this option
# consult your ircds documentation before using this.
#Numeric "3AX"
#Numeric "4"
# ModuleDelayedAutoload [OPTIONAL]
#
# When compiled with module support, this contains a space separated list
# of modules to automaticaly load when services are ready for new clients.
# e.g. new pesudo clients such as CatServ :-) *meow*
# By default a number of modules that we found worth adding by default are
# loaded. Feel free to change this if you want to add more, or remove some
# from the list.
#
ModuleDelayedAutoload "cs_appendtopic cs_enforce ns_maxemail ns_noop os_info"
** DELETED CONFIGURATION DIRECTIVES **
###########################################################################
#
# Proxy detection
#
###########################################################################
# Note: if ProxyDetect is not set, all parameters after it in this section
# are optional.
# ProxyDetect [OPTIONAL]
#
# Enables insecure proxy detection. Services will automatically
# scan each incoming user and akill those that use insecure proxy.
#
# Anope currently supports detection of Wingate (port 23), SOCKS4/5
# (port 1080), and HTTP proxy (ports 3128 and 8080). It uses the
# protocol of each proxy type to connect to an IRC server, it does
# not only check if the port is open (so your users may still have
# an open telnet server on their port 23 for example).
#
# WARNING: You should get the authorization of the administrator of
# the computer which runs the proxy detector before enabling it; not
# all administrators will accept it. Also note that in certain
# countries, port scanning is prohibited.
#
# This feature requires threading support to be compiled into Anope.
#ProxyDetect
# ProxyThreads <number> [REQUIRED]
#
# Sets the number of threads Services will launch when starting. Each
# thread will have the responsibility to scan queued hostname for
# proxies.
#
# This value must be set depending of the number of users you have
# on your network. The more threads are used, the more simultaneous
# checks can be done. Remember however, that threads are
# resource-consuming.
#
# WARNING: On Linux, each thread takes a background process, and there
# is an additional process used for thread management; this is a problem
# if you are limited in the number of background process you can use
# (on a paid shell for example).
ProxyThreads 5
# ProxyMessage... <message> [RECOMMENDED]
#
# Sets the notices that will be sent out to users before Services
# scan them for proxy. You may not use all of them, but just as much as
# necessary.
ProxyMessage1 "I will now detect if you're using an insecure proxy."
ProxyMessage2 "If you see a connection on port 23, 1080, 3128 or 8080 from"
ProxyMessage3 "my.box.net, please disregard it, as it is the detector in action."
ProxyMessage4 "See http://proxy.myirc.net/ for information about our proxy policy."
#ProxyMessage5 "Enter"
#ProxyMessage6 "whatever"
#ProxyMessage7 "you want"
#ProxyMessage8 "here."
# ProxyCheck... [OPTIONAL]
#
# Determines what types of proxy Anope will try to find (respectively
# Wingate on port 23, SOCKS4 on port 1080, SOCKS5 on port 1080, HTTP
# proxy on port 3128, HTTP proxy on port 8080 and HTTP proxy on port
# 80).
ProxyCheckWingate
ProxyCheckSocks4
ProxyCheckSocks5
ProxyCheckHTTP1
ProxyCheckHTTP2
ProxyCheckHTTP3
# ProxyTimeout <time> [REQUIRED]
# Sets the maximum length of time we allow a connect/read operation to
# take. If you set this value too high, your threads may hang on a single
# check for a very long time. The best is to try different values
# and see which one is the more efficient for your network.
ProxyTimeout 15s
# ProxyTestServer <ip> <port> [REQUIRED]
#
# Sets the *IP* and port of the IRC server to use as a target when
# testing users for proxy.
ProxyTestServer "1.2.3.4" 6667
# ProxyExpire <time> [RECOMMENDED]
#
# Sets the length of time before a proxy host cache entry expires, if
# not used. If this is not set the default time is 2 days.
ProxyExpire 30d
# ProxyCacheExpire <time> [REQUIRED]
#
# Sets the length of time before a normal host cache entry expires, if
# not used. This cannot be set to 0d.
#
# Every non-proxy hosts will be stored in cache (to avoid too many scans
# to the same host), so you should set this enough low to not fill your
# memory, especially on large networks.
ProxyCacheExpire 1d
# ProxyAkillReason <reason> [REQUIRED]
#
# Sets the reason that will be used to AKILL an user from the network
# if a proxy is detected.
ProxyAkillReason "You're using an insecure proxy. See http://proxy.myirc.net/config.html for information about how to config your proxy in a safe manner."
# WallProxy [OPTIONAL]
#
# Sends a WALLOPS/GLOBOPS when an user using an insecure proxy is being
# AKILLed.
WallProxy
# ProxyMax <number> [REQUIRED]
#
# Sets the maximum proxy cache entries that can be displayed in a single
# call to OperServ CACHE.
ProxyMax 50
Anope Version 1.7.8
-------------------
** ADDED CONFIGURATION DIRECTIVES **
# UseTS6 [OPTIONAL]
#
# Modern hybrid ircd like Ratbox 2.0.x support a protocol called TS6.
# However this protocol is optional thus our default support is for without
# TS6, if you want to take advantage of TS6, enable this option.
#UseTS6
** MODIFIED CONFIGURATION DIRECTIVES **
** DELETED CONFIGURATION DIRECTIVES **
Anope Version 1.7.7
-------------------
** ADDED CONFIGURATION DIRECTIVES **
# NSAddAccessOnReg [OPTIONAL]
#
# When enabled, services will add the usermask of registering users to the
# access list of their newly created account. If you disable this, users
# will always have to identify to nickserv before being recognized, unless
# they manually add an address to the access list of their account.
NSAddAccessOnReg
# UlineServers [OPTIONAL]
#
# A list of ulined servers on your network, these servers are assumed they
# can set channel modes and we will not attempt to take them from them
# WARNING: do not put your user servers in this option
UlineServers "stats.your.network, proxy.your.network"
# KillOnSGline [OPTIONAL]
#
# When enabled, this option makes the services send an (SVS)KILL command
# immediately after SGLINE ADD. This eliminates the need of killing the
# users after the SGLINE has been added.
# KillOnSGline
# KillOnSQline [OPTIONAL]
#
# When enabled, this option makes the services send an (SVS)KILL command
# immediately after SQLINE ADD. This eliminates the need of killing the
# users after the SQLINE has been added.
# KillOnSQline
** MODIFIED CONFIGURATION DIRECTIVES **
** DELETED CONFIGURATION DIRECTIVES **
# NetworkDomain <name> [OPTIONAL]
#
# If your network has a common domain name, specify it there (for
# example, all IRCZONE servers have a name ending in ".irczone.cl",
# so "irczone.cl" would be set there.
#
# You can specify more than one Network Domain by separating each one by
# a space: NetworkDomain "localnet.net localnet.com"
#
# Note that this directive is no longer used by the GLOBAL command, since
# it uses a dynamic list of connected servers regardless of their
# domains. However, some modules may still use this value, so you might
# want to keep it just in case.
NetworkDomain "localnet.com"
# ListOpersOnly [DEPRECATED]
# When enabled, limits use of the ChanServ and NickServ LIST commands
# to IRC operators.
#
# This directive has been superseded by the NSListOpersOnly and
# CSListOpersOnly directives.
#ListOpersOnly
Anope Version 1.7.6
-------------------
** ADDED CONFIGURATION DIRECTIVES **
# UserKey1|2|3 <value> [REQUIRED]
#
# These keys are required to initiate the random number generator. These
# numbers MUST be random as you want your passcodes to be random. Don't
# give these keys to no anyone! Keep them private!
#UserKey1 9866235
#UserKey2 5216332
#UserKey3 9651291
# RestrictOperNick [OPTIONAL]
# Forbids the registration of nicks that contain nick with services
# access. So if Tester is a Services Oper, for example, You can't
# register NewTester or Tester123 unless you are an IRC operator.
#RestrictOperNicks
# UseTokens [OPTIONAL]
# Allows irc networks to use TOKEN commands instead of the
# standard commands. This saves bandwidth but can break older
# modules that are not set to trap for TOKEN - if you are using
# older modules do NOT use this option
#UseTokens
# UseSVS2MODE [OPTIONAL]
# On Unreal IRCD use SVS2MODE instead of SVSMODE, doing this will
# show services changing user modes.
#UseSVS2MODE
# NewsCount [OPTIONAL]
# The number of LOGON/OPER News item to display when a user logs
# on. The default value is 3
#NewsCount 3
# Numeric [OPTIONAL]
# Many ircd identify themselves with a Numeric when using this option
# consult your ircds documentation before using this
#Numeric 0
# UnRestrictSAdmin [OPTIONAL]
# On many ircd Anope removes the umode of +a from users whom are not
# Service Admin in Anope. This mode is NOT used by Anope for any form
# of access. Thus this option allows them to keep the mode without having
# to be a Service Admin in Anope
#UnRestrictSAdmin
** MODIFIED CONFIGURATION DIRECTIVES **
** DELETED CONFIGURATION DIRECTIVES **
Anope Version 1.7.5
-------------------
** ADDED CONFIGURATION DIRECTIVES **
# UseSVSHOLD [OPTIONAL]
# Allows Bahamut-networks to use SVSHOLD instead of the services
# enforcer. This option has been introduced in Bahamut 1.4.35 and
# places a temporary Q:Line instead of introducing a new nick,
# which is better for both CPU and bandwidth. If you enable this
# option on a pre-1.4.35 Bahamut, it is most likely to break.
#UseSVSHOLD
** MODIFIED CONFIGURATION DIRECTIVES **
# NetworkDomain <name> [OPTIONAL]
#
# If your network has a common domain name, specify it there (for
# example, all IRCZONE servers have a name ending in ".irczone.cl",
# so "irczone.cl" would be set there.
#
# You can specify more than one Network Domain by separating each one by
# a space: NetworkDomain "localnet.net localnet.com"
#
# Note that this directive is no longer used by the GLOBAL command, since
# it uses a dynamic list of connected servers regardless of their
# domains. However, some modules may still use this value, so you might
# want to keep it just in case.
NetworkDomain "localnet.com"
** DELETED CONFIGURATION DIRECTIVES **
Anope Version 1.7.4
-------------------
** ADDED CONFIGURATION DIRECTIVES **
# NSNickTracking [OPTIONAL]
#
# When enabled, services will track your last nick identified when issuing
# nick changes.
#NSNickTracking
** MODIFIED CONFIGURATION DIRECTIVES **
** DELETED CONFIGURATION DIRECTIVES **
Anope Version 1.7.3
-------------------
** ADDED CONFIGURATION DIRECTIVES **
# BSCaseSensitive [OPTIONAL]
# This option will make botserv use cAsE sEnSiTiVe checking for badwords
# BSCaseSensitive
# MSMemoReceipt [OPTIONAL]
# Allow the use of memo receipts for the following groups:
# 1 - Opers Only
# 2 - Everybody
#
#MSMemoReceipt 1
Anope Version 1.7.2
--------------------
No Changes.
Anope Version 1.7.1
--------------------
** ADDED CONFIGURATION DIRECTIVES **
# UseRDB [OPTIONAL]
#
# Enable this if you want anope to load its data from a remote database.
# (e.g. MySQL)
#
#UseRDB
# NickRegDelay <seconds> [OPTIONAL]
# Prevents users from regging their nick if they are not
# connected for at least X seconds.
#NickRegDelay 30
** MODIFIED CONFIGURATION DIRECTIVES **
** DELETED CONFIGURATION DIRECTIVES **
-558
View File
@@ -1,558 +0,0 @@
Anope Version 1.8.0
-------------------
*** New Strings:
*** Mod Strings:
*** Del Strings:
Anope Version 1.7.24
--------------------
*** New Strings:
OPER_STATS_HOSTSERV_MEM
*** Mod Strings:
NICK_HELP_SASET_AUTOOP
*** Del Strings:
Anope Version 1.7.23b
--------------------
*** New Strings:
*** Mod Strings:
*** Del Strings:
Anope Version 1.7.23
--------------------
*** New Strings:
PASSWORD_TOO_LONG
CHAN_LOGOUT_FOUNDER_FAILED
*** Mod Strings:
OPER_HELP_OPER
NICK_HELP_SASET_PASSWORD
OPER_IGNORE_SYNTAX
OPER_HELP_IGNORE
CHAN_LOGOUT_ALL_SUCCEEDED
OPER_HELP_MODLIST
*** Del Strings:
PASSWORD_TRUNCATED
Anope Version 1.7.22
--------------------
*** New Strings:
NICK_SASET_LANGUAGE_SYNTAX
NICK_SASET_LANGUAGE_UNKNOWN
NICK_SASET_LANGUAGE_CHANGED
NICK_HELP_SASET_LANGUAGE
NICK_HELP_RESEND
*** Mod Strings:
NICK_HELP_SASET
NICK_RECOVERED
NICK_LIST_SERVADMIN_SYNTAX
NICK_SERVADMIN_HELP_LIST
CHAN_GETKEY_KEY
NICK_SERVADMIN_HELP_LIST
CHAN_SERVADMIN_HELP_LIST
OPER_HELP_GLOBAL
OPER_HELP_UMODE
OPER_HELP_OLINE
OPER_HELP_KICK
OPER_HELP_SVSNICK
OPER_HELP_SET_LOGCHAN
OPER_HELP_SET_SUPERADMIN
CHAN_HELP_AKICK
NICK_HELP_RECOVER
NICK_HELP_RELEASE
NEWS_HELP_LOGON
NEWS_HELP_OPER
OPER_HELP_IGNORE
OPER_IGNORE_TIME_DONE
OPER_IGNORE_PERM_DONE
OPER_IGNORE_DEL_DONE
*** Del Strings:
NICK_SET_UNKNOWN_OPTION_OR_BAD_NICK
OPER_HELP_KILLCLONES
Anope Version 1.7.21
--------------------
*** New Strings:
*** Mod Strings:
*** Del Strings:
Anope Version 1.7.20
--------------------
*** New Strings:
NICK_HELP_CONFIRM
CHAN_XOP_NOT_AVAILABLE
HELP_LIMIT_SERV_OPER
HELP_LIMIT_SERV_ADMIN
HELP_LIMIT_SERV_ROOT
HELP_LIMIT_IRC_OPER
HELP_LIMIT_HOST_SETTER
HELP_LIMIT_HOST_REMOVER
*** Mod Strings:
OPER_HELP_SET
In all of the following strings only the trailing 'Limited to ...' line has been removed:
OPER_HELP_EXCEPTION
OPER_HELP_SESSION
NICK_HELP_SASET
NICK_HELP_SASET_DISPLAY
NICK_HELP_SASET_PASSWORD
NICK_HELP_SASET_URL
NICK_HELP_SASET_EMAIL
NICK_HELP_SASET_ICQ
NICK_HELP_SASET_GREET
NICK_HELP_SASET_KILL
NICK_HELP_SASET_SECURE
NICK_HELP_SASET_PRIVATE
NICK_HELP_SASET_HIDE
NICK_HELP_SASET_MSG
NICK_HELP_SASET_NOEXPIRE
NICK_HELP_SASET_AUTOOP
NICK_SERVADMIN_HELP_GETPASS
NICK_SERVADMIN_HELP_GETEMAIL
NICK_SERVADMIN_HELP_FORBID
NICK_SERVADMIN_HELP_SUSPEND
NICK_SERVADMIN_HELP_UNSUSPEND
CHAN_SERVADMIN_HELP_SET_NOEXPIRE
CHAN_SERVADMIN_HELP_GETPASS
CHAN_SERVADMiN_HELP_FORBID
CHAN_SERVADMIN_HELP_SUSPEND
CHAN_SERVADMIN_HELP_UNSUSPEND
CHAN_SERVADMIN_HELP_STATUS
OPER_HELP_MODE
OPER_HELP_CLEARMODES
OPER_HELP_KICK
OPER_HELP_SVSNICK
OPER_HELP_AKILL
OPER_HELP_SGLINE
OPER_HELP_SQLINE
OPER_HELP_SZLINE
OPER_HELP_SET
OPER_HELP_NOOP
OPER_HELP_JUPE
OPER_HELP_RAW
OPER_HELP_UPDATE
OPER_HELP_RELOAD
OPER_HELP_QUIT
OPER_HELP_SHUTDOWN
OPER_HELP_RESTART
OPER_HELP_KILLCLONES
OPER_HELP_CHANLIST
OPER_HELP_USERLIST
OPER_HELP_MODLOAD
OPER_HELP_MODUNLOAD
OPER_HELP_MODINFO
OPER_HELP_MODLIST
BOT_SERVADMIN_HELP_SET_NOBOT
BOT_SERVADMIN_HELP_SET_PRIVATE
HOST_HELP_SET
HOST_HELP_DELALL
HOST_HELP_SETALL
HOST_HELP_DEL
HOST_HELP_LIST
*** Del Strings:
Anope Version 1.7.19
--------------------
*** New Strings:
*** Mod Strings:
CHAN_HELP_LIST
BOT_SET_SYNTAX
BOT_HELP_SET
*** Del Strings:
Anope Version 1.7.18
--------------------
*** New Strings:
*** Mod Strings:
*** Del Strings:
Anope Version 1.7.17
--------------------
*** New Strings:
*** Mod Strings:
*** Del Strings:
Anope Version 1.7.16
--------------------
*** New Strings:
*** Mod Strings:
*** Del Strings:
Anope Version 1.7.15
--------------------
*** New Strings:
INVALID_TARGET
NICK_SET_AUTOOP_SYNTAX
NICK_SET_AUTOOP_ON
NICK_SET_AUTOOP_OFF
BOT_LONG_IDENT
*** Mod Strings:
NICK_HELP_SET
*** Del Strings:
Anope Version 1.7.14
--------------------
*** New Strings:
CHAN_X_INVALID
*** Mod Strings:
*** Del Strings:
Anope Version 1.7.13
--------------------
*** New Strings:
*** Mod Strings:
*** Del Strings:
Anope Version 1.7.12
--------------------
*** New Strings:
OPER_STATS_UPLINK_SERVER
OPER_STATS_UPLINK_CAPAB
OPER_STATS_UPLINK_SERVER_COUNT
*** Mod Strings:
OPER_HELP_STATS
*** Del Strings:
Anope Version 1.7.11
---------------------
*** New Strings:
NICK_SASET_SYNTAX
NICK_SASET_DISABLED
NICK_SASET_UNKNOWN_OPTION
NICK_SASET_BAD_NICK
NICK_SASET_OPTION_DISABLED
NICK_SASET_DISPLAY_INVALID
NICK_SASET_DISPLAY_CHANGED
NICK_SASET_PASSWORD_FAILED
NICK_SASET_PASSWORD_CHANGED
NICK_SASET_PASSWORD_CHANGED_TO
NICK_SASET_LANGUAGE_SYNTAX
NICK_SASET_LANGUAGE_UNKNOWN
NICK_SASET_LANGUAGE_CHANGED
NICK_SASET_URL_CHANGED
NICK_SASET_URL_UNSET
NICK_SASET_EMAIL_CHANGED
NICK_SASET_EMAIL_UNSET
NICK_SASET_EMAIL_UNSET_IMPOSSIBLE
NICK_SASET_ICQ_CHANGED
NICK_SASET_ICQ_UNSET
NICK_SASET_ICQ_INVALID
NICK_SASET_GREET_CHANGED
NICK_SASET_GREET_UNSET
NICK_SASET_KILL_SYNTAX
NICK_SASET_KILL_IMMED_SYNTAX
NICK_SASET_KILL_ON
NICK_SASET_KILL_QUICK
NICK_SASET_KILL_IMMED
NICK_SASET_KILL_IMMED_DISABLED
NICK_SASET_KILL_OFF
NICK_SASET_SECURE_SYNTAX
NICK_SASET_SECURE_ON
NICK_SASET_SECURE_OFF
NICK_SASET_PRIVATE_SYNTAX
NICK_SASET_PRIVATE_ON
NICK_SASET_PRIVATE_OFF
NICK_SASET_HIDE_SYNTAX
NICK_SASET_HIDE_EMAIL_ON
NICK_SASET_HIDE_EMAIL_OFF
NICK_SASET_HIDE_MASK_ON
NICK_SASET_HIDE_MASK_OFF
NICK_SASET_HIDE_QUIT_ON
NICK_SASET_HIDE_QUIT_OFF
NICK_SASET_HIDE_STATUS_ON
NICK_SASET_HIDE_STATUS_OFF
NICK_SASET_MSG_SYNTAX
NICK_SASET_MSG_ON
NICK_SASET_MSG_OFF
NICK_SASET_NOEXPIRE_SYNTAX
NICK_SASET_NOEXPIRE_ON
NICK_SASET_NOEXPIRE_OFF
NICK_HELP_SASET
NICK_HELP_SASET_DISPLAY
NICK_HELP_SASET_PASSWORD
NICK_HELP_SASET_LANGUAGE
NICK_HELP_SASET_URL
NICK_HELP_SASET_EMAIL
NICK_HELP_SASET_ICQ
NICK_HELP_SASET_GREET
NICK_HELP_SASET_KILL
NICK_HELP_SASET_SECURE
NICK_HELP_SASET_PRIVATE
NICK_HELP_SASET_HIDE
NICK_HELP_SASET_MSG
NICK_HELP_SASET_NOEXPIRE
NICK_HELP_CMD_SASET
*** Mod Strings:
OPER_HELP_MODLIST
*** Del Strings:
NICK_SERVADMIN_HELP_SET
NICK_SERVADMIN_HELP_SET_NOEXPIRE
NICK_SET_NOEXPIRE_SYNTAX
NICK_SET_NOEXPIRE_ON
NICK_SET_NOEXPIRE_OFF
NICK_SASET_LANGUAGE_SYNTAX
NICK_SASET_LANGUAGE_UNKNOWN
NICK_SASET_LANGUAGE_CHANGED
NICK_HELP_SASET_LANGUAGE
Anope Version 1.7.10
--------------------
*** New Strings:
*** Mod Strings:
*** Del Strings:
Anope Version 1.7.9
-------------------
*** New Strings:
CHAN_HELP_IRCD_HALFOP
CHAN_HELP_IRCD_PROTECT
CHAN_GETKEY_SYNTAX
CHAN_GETKEY_NOKEY
CHAN_GETKEY_KEY
OPER_SET_SQL_ERROR_DISABLED
NICK_X_SUSPENDED
NICK_INFO_SUSPENDED
NICK_SUSPEND_SYNTAX
NICK_SUSPEND_SUCCEEDED
NICK_SUSPEND_FAILED
NICK_UNSUSPEND_SYNTAX
NICK_UNSUSPEND_SUCCEEDED
NICK_UNSUSPEND_FAILED
NICK_SERVADMIN_HELP_SUSPEND
NICK_SERVADMIN_HELP_UNSUSPEND
*** Mod Strings:
OPER_HELP_SET
NICK_HELP
CHAN_AOP_CLEAR
CHAN_HOP_CLEAR
CHAN_SOP_CLEAR
CHAN_VOP_CLEAR
CHAN_ACCESS_CLEAR
CHAN_AKICK_CLEAR
CHAN_SET_KEEPTOPIC_ON
CHAN_SET_KEEPTOPIC_OFF
CHAN_SET_TOPICLOCK_ON
CHAN_SET_TOPICLOCK_OFF
CHAN_SET_PEACE_ON
CHAN_SET_PEACE_OFF
CHAN_SET_PRIVATE_ON
CHAN_SET_PRIVATE_OFF
CHAN_SET_SECUREOPS_ON
CHAN_SET_SECUREOPS_OFF
CHAN_SET_SECUREFOUNDER_ON
CHAN_SET_SECUREFOUNDER_OFF
CHAN_SET_RESTRICTED_ON
CHAN_SET_RESTRICTED_OFF
CHAN_SET_SECURE_ON
CHAN_SET_SECURE_OFF
CHAN_SET_SIGNKICK_ON
CHAN_SET_SIGNKICK_LEVEL
CHAN_SET_SIGNKICK_OFF
CHAN_SET_OPNOTICE_ON
CHAN_SET_OPNOTICE_OFF
CHAN_SET_XOP_ON
CHAN_SET_XOP_OFF
*** Del Strings:
CHAN_HELP_ULTIMATE
OPER_STATS_PROXY_MEM
OPER_CACHE_SYNTAX
OPER_CACHE_DISABLED
OPER_CACHE_NOT_FOUND
OPER_CACHE_REMOVED
OPER_CACHE_HEADER
OPER_CACHE_LIST
OPER_CACHE_FOOTER
OPER_CACHE_QUEUED
OPER_CACHE_PROGRESS
OPER_CACHE_NORMAL
OPER_CACHE_WINGATE
OPER_CACHE_SOCKS4
OPER_CACHE_SOCKS5
OPER_CACHE_HTTP
OPER_HELP_CACHE
Anope Version 1.7.8
-------------------
*** New Strings:
OPER_HELP_SET_IGNORE
OPER_HELP_ADMIN_CMD_EXTRA
OPER_HELP_ADMIN_CMD_OLINE
OPER_HELP_ADMIN_CMD_UMODE
OPER_HELP_ADMIN_CMD_SVSNICK
OPER_HELP_OPER_CMD_EXTRA
OPER_HELP_OPER_CMD_SGLINE
OPER_HELP_OPER_CMD_SQLINE
OPER_HELP_OPER_CMD_SZLINE
*** Mod Strings:
HOST_OFF_UNREAL
OPER_HELP_OPER_CMD
OPER_HELP_ADMIN_CMD
*** Del Strings:
Anope Version 1.7.7
-------------------
*** New Strings:
MEMO_NO_RSEND_SELF
NICK_REGISTERED_NO_MASK
OPER_ADMIN_MOVED
OPER_OPER_MOVED
OPER_HELP_SET_SQL
OPER_SET_SQL_ON
OPER_SET_SQL_OFF
OPER_SET_SQL_ERROR
OPER_SET_SQL_ERROR_INIT
OPER_EXCEPTION_EXISTS
OPER_EXCEPTION_CHANGED
OPER_SET_LIST_OPTION_ON
OPER_SET_LIST_OPTION_OFF
OPER_HELP_SET_LIST
OPER_SUPER_ADMIN_NOT_ENABLED
*** Mod Strings:
BOT_SERVADMIN_HELP_BOT
NICK_HELP_STATUS
*** Del Strings:
Anope Version 1.7.6
-------------------
*** New Strings:
CHAN_REGISTER_NONE_CHANNEL
CHAN_SYMBOL_REQUIRED
OPER_SVSNICK_UNSUPPORTED
OPER_SQLINE_UNSUPPORTED
OPER_SVSO_UNSUPPORTED
OPER_UMODE_UNSUPPORTED
CHAN_CLEARED_INVITES
NICK_INFO_VHOST2
NICK_STATUS_0
NICK_STATUS_1
NICK_STATUS_2
NICK_STATUS_3
CHAN_STATUS_SYNTAX
CHAN_STATUS_NOT_REGGED
CHAN_STATUS_FORBIDDEN
CHAN_STATUS_NOTONLINE
CHAN_STATUS_INFO
NICK_INFO_EXPIRE
NICK_GLIST_REPLY
NICK_GLIST_REPLY_ADMIN
CHAN_INFO_EXPIRE
NICK_ACCESS_LIST_EMPTY
NICK_ACCESS_LIST_X_EMPTY
*** Mod Strings:
*** Del Strings:
Anope Version 1.7.5
-------------------
*** New Strings:
*** Mod Strings:
MEMO_HELP
CHAN_LEVEL_NOJOIN
*** Del Strings:
Anope Version 1.7.4
-------------------
*** New Strings:
CHAN_CLEARED_HOPS
OPER_MODULE_LIST_HEADER
OPER_MODULE_LIST_FOOTER
NICK_X_IS_SERVICES
*** Mod Strings:
CHAN_HELP_CLEAR
*** Del Strings:
Anope Version 1.7.3
-------------------
*** New Strings:
MEMO_RSEND_PLEASE_WAIT
MEMO_RSEND_DISABLED
MEMO_RSEND_SYNTAX
MEMO_RSEND_NICK_MEMO_TEXT
MEMO_RSEND_CHAN_MEMO_TEXT
MEMO_RSEND_USER_NOTIFICATION
MEMO_HELP_RSEND
MEMO_CHECK_SYNTAX
MEMO_CHECK_NOT_READ
MEMO_CHECK_READ
MEMO_CHECK_NO_MEMO
MEMO_HELP_CHECK
*** Mod Strings:
MEMO_HELP
NICK_LIST_SERVADMIN_SYNTAX
NICK_SERVADMIN_HELP_LIST
Anope Version 1.7.2
--------------------
No Changes.
Anope Version 1.7.1
--------------------
*** New Strings:
MEMO_SET_NOTIFY_MAIL
MEMO_SET_NOTIFY_NOMAIL
MEMO_SET_NOTIFY_INVALIDMAIL
MEMO_MAIL_SUBJECT
MEMO_MAIL_TEXT1
MEMO_MAIL_TEXT2
MEMO_MAIL_TEXT3
NICK_INFO_SERVICES_ROOT
NICK_SET_HIDE_STATUS_ON
NICK_SET_HIDE_STATUS_OFF
NICK_REG_DELAY
*** Mod Strings:
MEMO_SET_NOTIFY_SYNTAX
NICK_HELP_SET_HIDE
*** Del Strings:
-129
View File
@@ -1,129 +0,0 @@
Anope Version 1.8.0
-------------------
- NONE
Anope Version 1.7.24
--------------------
- NONE
Anope Version 1.7.23b
--------------------
- NONE
Anope Version 1.7.23
--------------------
- NONE
Anope Version 1.7.22
--------------------
- NONE
Anope Version 1.7.21
--------------------
- NONE
Anope Version 1.7.20
--------------------
ALTER TABLE `anope_ns_request` DROP INDEX `nick_index` ;
ALTER TABLE `anope_ns_core` DROP INDEX `display_index` ;
ALTER TABLE `anope_ns_access` ADD UNIQUE (`display`) ;
ALTER TABLE `anope_ms_info` ADD UNIQUE (`nm_id` , `serv`) ;
ALTER TABLE `anope_ns_alias` DROP INDEX `nick_index` ;
ALTER TABLE `anope_cs_info` DROP INDEX `name_index` ;
ALTER TABLE `anope_cs_access` ADD UNIQUE (`channel` , `display`) ;
ALTER TABLE `anope_cs_levels` ADD UNIQUE (`channel` , `position`) ;
ALTER TABLE `anope_cs_akicks` CHANGE `dmask` `dmask` VARCHAR( 255 ) NOT NULL ;
ALTER TABLE `anope_cs_akicks` ADD UNIQUE (`channel` , `dmask`) ;
ALTER TABLE `anope_cs_badwords` CHANGE `word` `word` VARCHAR( 255 ) NOT NULL ;
ALTER TABLE `anope_cs_badwords` ADD UNIQUE (`channel` , `word`) ;
ALTER TABLE `anope_cs_ttb` ADD UNIQUE (`channel` , `ttb_id`) ;
ALTER TABLE `anope_os_akills` CHANGE `user` `user` VARCHAR( 255 ) NOT NULL , CHANGE `host` `host` VARCHAR( 255 ) NOT NULL ;
ALTER TABLE `anope_os_akills` ADD UNIQUE (`user` , `host`) ;
ALTER TABLE `anope_os_sglines` CHANGE `mask` `mask` VARCHAR( 255 ) NOT NULL ;
ALTER TABLE `anope_os_sglines` ADD UNIQUE (`mask`) ;
ALTER TABLE `anope_os_sqlines` CHANGE `mask` `mask` VARCHAR( 255 ) NOT NULL ;
ALTER TABLE `anope_os_sqlines` ADD UNIQUE (`mask`) ;
ALTER TABLE `anope_os_szlines` CHANGE `mask` `mask` VARCHAR( 255 ) NOT NULL ;
ALTER TABLE `anope_os_szlines` ADD UNIQUE (`mask`) ;
ALTER TABLE `anope_os_news` ADD UNIQUE (`type` , `num` , `time`) ;
ALTER TABLE `anope_os_exceptions` CHANGE `mask` `mask` VARCHAR( 255 ) NOT NULL ;
ALTER TABLE `anope_os_exceptions` ADD UNIQUE (`mask`) ;
ALTER TABLE `anope_hs_core` DROP INDEX `nick_index` ;
ALTER TABLE `anope_bs_core` DROP INDEX `nick_index` ;
ALTER TABLE `anope_ms_info` CHANGE `receiver` `receiver` VARCHAR( 255 ) NOT NULL ;
ALTER TABLE `anope_ms_info` ADD INDEX ( `receiver` , `serv` ) ;
Anope Version 1.7.19
--------------------
- NONE
Anope Version 1.7.18
--------------------
- DROP TABLE IF EXISTS `anope_os_status`
- ALTER TABLE `anope_bs_core` ADD `active` TINYINT( 1 ) DEFAULT '1' NOT NULL
- ALTER TABLE `anope_cs_access` ADD `active` TINYINT( 1 ) DEFAULT '1' NOT NULL
- ALTER TABLE `anope_cs_akicks` ADD `active` TINYINT( 1 ) DEFAULT '1' NOT NULL
- ALTER TABLE `anope_cs_badwords` ADD `active` TINYINT( 1 ) DEFAULT '1' NOT NULL
- ALTER TABLE `anope_cs_levels` ADD `active` TINYINT( 1 ) DEFAULT '1' NOT NULL
- ALTER TABLE `anope_cs_ttb` ADD `active` TINYINT( 1 ) DEFAULT '1' NOT NULL
- ALTER TABLE `anope_hs_core` ADD `active` TINYINT( 1 ) DEFAULT '1' NOT NULL
- ALTER TABLE `anope_ms_info` ADD `active` TINYINT( 1 ) DEFAULT '1' NOT NULL
- ALTER TABLE `anope_ns_access` ADD `active` TINYINT( 1 ) DEFAULT '1' NOT NULL
- ALTER TABLE `anope_ns_request` CHANGE `active` `active` TINYINT( 1 ) DEFAULT '1' NOT NULL
- ALTER TABLE `anope_os_akills` ADD `active` TINYINT( 1 ) DEFAULT '1' NOT NULL
- ALTER TABLE `anope_os_exceptions` ADD `active` TINYINT( 1 ) DEFAULT '1' NOT NULL
- ALTER TABLE `anope_os_news` ADD `active` TINYINT( 1 ) DEFAULT '1' NOT NULL
- ALTER TABLE `anope_os_sglines` ADD `active` TINYINT( 1 ) DEFAULT '1' NOT NULL
- ALTER TABLE `anope_os_sqlines` ADD `active` TINYINT( 1 ) DEFAULT '1' NOT NULL
- ALTER TABLE `anope_os_szlines` ADD `active` TINYINT( 1 ) DEFAULT '1' NOT NULL
Anope Version 1.7.17
--------------------
- CREATE TABLE anope_cs_ttb (
ct_id int(11) NOT NULL auto_increment,
channel varchar(255) NOT NULL default '',
ttb_id int(11) NOT NULL default '0',
value int(11) NOT NULL default '0',
PRIMARY KEY (ct_id)
) TYPE=MyISAM
- ALTER TABLE anope_cs_info DROP ttb
Anope Version 1.7.16
--------------------
- NONE
Anope Version 1.7.15
--------------------
- NONE
Anope Version 1.7.14
--------------------
- NONE
Anope Version 1.7.13
--------------------
- NONE
Anope Version 1.7.12
--------------------
- NONE
Anope Version 1.7.11
--------------------
- NONE
Anope Version 1.7.10
--------------------
- NONE
Anope Version 1.7.9
-------------------
- DROP TABLE IF EXISTS anope_os_cache
Anope Version 1.7.8
-------------------
- NONE
Anope Version 1.7.7
-------------------
- ALTER TABLE anope_ns_alias CHANGE status status int(11) unsigned NOT NULL default '0'
+109 -97
View File
@@ -2,7 +2,7 @@
#
# Configuration script for Services.
#
# Anope (c) 2003-2008 Anope team
# Anope (c) 2003-2011 Anope team
# Contact us at team@anope.org
#
# This program is free but copyrighted software; see the file COPYING for
@@ -40,94 +40,58 @@ Run_Build_System () {
WITH_INST=""
WITH_RUN=""
WITH_PERM=""
BUILD_TYPE=""
RUN_CC_PL=""
GEN_TYPE=""
if [ "$INSTDIR" != "" ] ; then
if [ "$BUILD_SYSTEM" = "cmake" ] ; then
WITH_INST="-DINSTDIR:STRING=$INSTDIR"
else
WITH_INST="--with-instdir=$INSTDIR"
fi
WITH_INST="-DINSTDIR:STRING=$INSTDIR"
fi
if [ "$RUNGROUP" != "" ] ; then
if [ "$BUILD_SYSTEM" = "cmake" ] ; then
WITH_RUN="-DRUNGROUP:STRING=$RUNGROUP"
else
WITH_RUN="--with-rungroup=$RUNGROUP"
fi
WITH_RUN="-DRUNGROUP:STRING=$RUNGROUP"
fi
if [ "$UMASK" != "" ] ; then
if [ "$BUILD_SYSTEM" = "cmake" ] ; then
WITH_PERM="-DDEFUMASK:STRING=$UMASK"
else
WITH_PERM="--with-permissions=$UMASK"
fi
WITH_PERM="-DDEFUMASK:STRING=$UMASK"
fi
if [ "$DEBUG" = "yes" ] ; then
if [ "$BUILD_SYSTEM" = "cmake" ] ; then
BUILD_TYPE="-DCMAKE_BUILD_TYPE:STRING=DEBUG"
else
BUILD_TYPE="--with-debugsym"
fi
BUILD_TYPE="-DCMAKE_BUILD_TYPE:STRING=DEBUG"
else
if [ "$BUILD_SYSTEM" = "cmake" ] ; then
BUILD_TYPE="-DCMAKE_BUILD_TYPE:STRING=RELEASE"
fi
BUILD_TYPE="-DCMAKE_BUILD_TYPE:STRING=RELEASE"
fi
if [ "$USE_RUN_CC_PL" = "yes" ] ; then
if [ "$BUILD_SYSTEM" = "cmake" ] ; then
RUN_CC_PL="-DUSE_RUN_CC_PL:BOOLEAN=ON"
else
pwdsave=`pwd`
cd "`dirname $SOURCE_DIR/run-cc.pl`"
RUN_CC_PL="--with-makebin=`pwd`/run-cc.pl"
cd "$pwdsave"
fi
RUN_CC_PL="-DUSE_RUN_CC_PL:BOOLEAN=ON"
else
if [ "$BUILD_SYSTEM" = "cmake" ] ; then
RUN_CC_PL="-DUSE_RUN_CC_PL:BOOLEAN=OFF"
else
RUN_CC_PL="--with-makebin="
fi
RUN_CC_PL="-DUSE_RUN_CC_PL:BOOLEAN=OFF"
fi
if [ "$BUILD_SYSTEM" = "cmake" ] ; then
case `uname -s` in
MINGW*)
GEN_TYPE="-G\"MSYS Makefiles\""
;;
esac
case `uname -s` in
MINGW*)
GEN_TYPE="-G\"MSYS Makefiles\""
;;
esac
if [ "$SOURCE_DIR" = "." ] ; then
pwdsave=`pwd`
test -d build || mkdir build
cd "build"
REAL_SOURCE_DIR=".."
else
REAL_SOURCE_DIR="$SOURCE_DIR"
fi
echo "cmake $GEN_TYPE $WITH_INST $WITH_RUN $WITH_PERM $BUILD_TYPE $RUN_CC_PL $REAL_SOURCE_DIR"
cmake $GEN_TYPE $WITH_INST $WITH_RUN $WITH_PERM $BUILD_TYPE $RUN_CC_PL $REAL_SOURCE_DIR
echo ""
if [ "$SOURCE_DIR" = "." ] ; then
echo "Now cd build, then run make to build Anope."
cd "$pwdsave"
else
echo "Now run make to build Anope."
fi
if [ "$SOURCE_DIR" = "." ] ; then
pwdsave=`pwd`
test -d build || mkdir build
cd "build"
REAL_SOURCE_DIR=".."
else
echo "./configure $WITH_INST $WITH_RUN $WITH_PERM $BUILD_TYPE $RUN_CC_PL"
REAL_SOURCE_DIR="$SOURCE_DIR"
fi
./configure $WITH_INST $WITH_RUN $WITH_PERM $BUILD_TYPE $RUN_CC_PL
echo "cmake $GEN_TYPE $WITH_INST $WITH_RUN $WITH_PERM $BUILD_TYPE $RUN_CC_PL $EXTRA_CONFIG_ARGS $REAL_SOURCE_DIR"
cmake $GEN_TYPE $WITH_INST $WITH_RUN $WITH_PERM $BUILD_TYPE $RUN_CC_PL $EXTRA_CONFIG_ARGS $REAL_SOURCE_DIR
echo ""
if [ "$SOURCE_DIR" = "." ] ; then
echo "Now cd build, then run make to build Anope."
cd "$pwdsave"
else
echo "Now run make to build Anope."
fi
}
@@ -148,12 +112,12 @@ export ECHO2 ECHO2SUF
# Init values
###########################################################################
BUILD_SYSTEM="cmake"
INSTDIR=$HOME/services
RUNGROUP=
UMASK=
DEBUG="yes"
USE_RUN_CC_PL="no"
EXTRA_CONFIG_ARGS=
CAN_QUICK="no"
SOURCE_DIR=`dirname $0`
@@ -187,6 +151,51 @@ while [ $# -ge 1 ] ; do
shift 1
done
###########################################################################
# Check for CMake and (optionally) install it
###########################################################################
which cmake > /dev/null
if [ $? -ne 0 ] ; then
clear
if exists "cmake-bin" ; then :
else
echo "Anope requires CMake 2.4 or newer, which can be downloaded at http://cmake.org"
echo "If you have installed CMake already, ensure it is in your PATH environment variable."
if [ `uname` = "Linux" ] ; then
echo ""
echo "Config can attempt to install CMake for you now, which"
echo "will take approximately 50 MB of disk space."
echo "Would you like to install CMake now?"
echo2 "[y] "
read YN
if [ "$YN" = "n" ] ; then
exit 0
fi
echo "Downloading CMake... this may take a minute or two."
wget -q http://anope.org/cmake/linux-i386.php -O cmake-bin.tar.gz
if [ $? -ne 0 ] ; then
rm -f cmake-bin.tar.gz
echo "Unable to download CMake"
exit 0
fi
mkdir -p cmake-bin
tar zxf cmake-bin.tar.gz -C cmake-bin
rm -f cmake-bin.tar.gz
echo "Done!"
else
exit 0
fi
fi
CMAKE_BIN=`find cmake-bin -name cmake`
CMAKE_BIN="`pwd`/`dirname $CMAKE_BIN`"
PATH="$PATH:$CMAKE_BIN"
fi
###########################################################################
if [ ! "$NO_INTRO" ] ; then
@@ -199,8 +208,24 @@ if [ ! "$NO_INTRO" ] ; then
clear
;;
esac
. $SOURCE_DIR/version.log
cat $SOURCE_DIR/.BANNER | sed "s/CURVER/$VERSION_MAJOR.$VERSION_MINOR.$VERSION_PATCH$VERSION_EXTRA/" | sed "s@SOURCE_DIR@$SOURCE_DIR@" | $PAGER
. $SOURCE_DIR/src/version.sh
if [ -d .git ] ; then
VERSION=`git describe --tags`
VERSION_BUILD=`echo "$VERSION" | cut -d'-' -f2`
if [ "$SOURCE_DIR" = "." ] ; then
test -d build || mkdir -p build/include
BUILD_DIR="build"
else
BUILD_DIR="."
fi
VERSION_EXTRA=`echo "$VERSION" | cut -d'-' -f3`
# Only do this if we are not on a tag, src/version.sh will be all we need then.
if [ "$VERSION_BUILD" != "$VERSION_EXTRA" ] ; then
echo "#define VERSION_BUILD $VERSION_BUILD" > $BUILD_DIR/include/version.h
echo "#define VERSION_EXTRA \"-$VERSION_EXTRA\"" >> $BUILD_DIR/include/version.h
fi
fi
cat $SOURCE_DIR/.BANNER | sed "s/CURVER/$VERSION/" | sed "s@SOURCE_DIR@$SOURCE_DIR@" | $PAGER
echo ""
else
echo ""
@@ -223,31 +248,6 @@ export ok INPUT
####
ok=0
echo "Note: press Return for the default, or enter a new value."
echo "Are you using configure or cmake?"
while [ $ok -eq 0 ] ; do
echo2 "[$BUILD_SYSTEM] "
if read INPUT ; then : ; else echo "" ; exit 1 ; fi
if [ ! "$INPUT" ] ; then
INPUT=$BUILD_SYSTEM
fi
case $INPUT in
cmake)
ok=1
;;
configure)
ok=1
;;
*)
echo "That is not a valid choice!"
ok=0
;;
esac
done
BUILD_SYSTEM=$INPUT
echo ""
ok=0
echo "In what directory do you want the binaries to be installed?"
while [ $ok -eq 0 ] ; do
@@ -278,7 +278,6 @@ done
INSTDIR=$INPUT
echo ""
####
OLD_RUNGROUP="$RUNGROUP"
@@ -358,7 +357,7 @@ if [ "$USE_RUN_CC_PL" = "yes" ] ; then
TEMP_YN="y"
fi
echo "You can optionally have the build run through run-cc.pl, which will"
echo "cause warnings and errors (if any) to be colored yellow and run,"
echo "cause warnings and errors (if any) to be colored yellow and red,"
echo "respectively. This relies on Perl being installed, so if you say yes"
echo "to this without Perl, the option will be ignored."
echo "NOTE: If you are using MinGW, it is NOT recommended to say yes to"
@@ -377,6 +376,19 @@ echo ""
####
echo "Are there any extra arguments you wish to pass to cmake?"
echo "You may only need to do this if cmake is unable to locate"
echo "missing dependencies without hints."
echo "You can do this by: -DEXTRA_INCLUDE:STRING=/path/to/files;/path/to/more/files"
echo2 "[$EXTRA_CONFIG_ARGS] "
if read INPUT ; then : ; else echo "" ; exit 1 ; fi
if [ "$INPUT" ] ; then
EXTRA_CONFIG_ARGS=$INPUT
fi
echo ""
####
################################################################################
# Store values
################################################################################
@@ -384,12 +396,12 @@ echo ""
echo2 "Saving configuration results in config.cache... "
cat <<EOT >$SOURCE_DIR/config.cache
BUILD_SYSTEM="$BUILD_SYSTEM"
INSTDIR="$INSTDIR"
RUNGROUP="$RUNGROUP"
UMASK=$UMASK
DEBUG="$DEBUG"
USE_RUN_CC_PL="$USE_RUN_CC_PL"
EXTRA_CONFIG_ARGS="$EXTRA_CONFIG_ARGS"
EOT
echo "done."
-3
View File
@@ -1,3 +0,0 @@
@echo off
cscript /nologo "%~dp0\install.js"
pause
BIN
View File
Binary file not shown.
-102
View File
@@ -1,102 +0,0 @@
CC=g++ # probably wrong but oh well.
INCLUDEDIR=../include
ANOPELIBS=@ANOPELIBS@
CFLAGS=@CFLAGS@ -Wall -ansi -pedantic -Wshadow
PROFILE=-pg
LDPROFILE=
SHELL=/bin/sh
INSTDIR=@INSTDIR@
MAKEBIN=@MAKEBIN@
INSTALL=@INSTALL@
RM=@RM@
CP=@CP@
TOUCH=@TOUCH@
LDFLAGS=@LDFLAGS@
RUNGROUP=@RUNGROUP@
SHARED=@SHARED@
MODULEFLAGS=@MODULEFLAGS@
all: language headers build core protocols tools modules
profile: language headers profile_build profile_core profile_protocols profile_tools profile_modules
MAKEARGS = 'CFLAGS=${CFLAGS}' 'CC=${CC}' 'ANOPELIBS=${ANOPELIBS}' \
'LDFLAGS=${LDFLAGS}' 'INSTDIR=${INSTDIR}' 'INSTALL=${INSTALL}' \
'INCLUDEDIR=${INCLUDEDIR}' 'RM=${RM}' 'CP=${CP}' \
'TOUCH=${TOUCH}' 'SHELL=${SHELL}' \
'RUNGROUP=${RUNGROUP}' \
'SHARED=${SHARED}' 'MODULEFLAGS=${MODULEFLAGS}' \
'MAKEBIN=${MAKEBIN}'
build: language headers
@${MAKE} -C src ${MAKEARGS} all
profile_build:
@${MAKE} -C src ${MAKEARGS} 'CFLAGS=${CFLAGS} $(PROFILE)' 'LDFLAGS=${LDFLAGS} ${PROFILE}' all
modules: build
@src/modules/configure src/modules
@${MAKE} -C src/modules ${MAKEARGS} all
@echo "*** All done, now (g)make install to install Anope/Modules";
clean_modules:
@${MAKE} -C src ${MAKEARGS} clean_modules
distclean_modules:
@${MAKE} -C src ${MAKEARGS} distclean_modules
protocols: build
@echo "*** Building protocol support";
@src/protocol/configure src/protocol
@${MAKE} -C src/protocol ${MAKEARGS} all
profile_protocols: build
@echo "*** Building protocol support";
@src/protocol/configure src/protocol
@${MAKE} -C src/protocol ${MAKEARGS} 'CFLAGS=${CFLAGS} ${PROFILE}' 'PROFILE=${PROFILE}' all
core: build
@echo "*** Building Core modules";
@${MAKE} -C src ${MAKEARGS} core
profile_core: build
@echo "*** Building Core modules";
@${MAKE} -C src ${MAKEARGS} 'CFLAGS=${CFLAGS} ${PROFILE}' 'PROFILE=${PROFILE}' core
tools: build
@${MAKE} -C src/tools ${MAKEARGS} all
@echo "*** All done, now (g)make install to install Anope/Modules/Tools";
profile_tools: profile_build
@${MAKE} -C src/tools ${MAKEARGS} 'CFLAGS=${CFLAGS} $(PROFILE)' all
@echo "*** All done, now (g)make install to install Anope/Modules/Tools";
profile_modules: profile_build
@src/modules/configure src/modules
@${MAKE} -C src/modules ${MAKEARGS} 'CFLAGS=${CFLAGS} ${PROFILE}' 'PROFILE=${PROFILE}' all
@echo "*** All done, now (g)make install to install Anope/Modules";
language:
@$(MAKE) -C lang ${MAKEARGS} all language.h
headers:
@${MAKE} -C include ${MAKEARGS}
clean:
${MAKE} -C lang ${MAKEARGS} clean
${MAKE} -C include ${MAKEARGS} clean
${MAKE} -C src ${MAKEARGS} clean
${MAKE} -C src/tools ${MAKEARGS} clean
distclean: clean
${MAKE} -C lang ${MAKEARGS} distclean
${MAKE} -C include ${MAKEARGS} distclean
${MAKE} -C src ${MAKEARGS} distclean
${MAKE} -C src/tools ${MAKEARGS} distclean
rm -f config.log config.status config.cache Makefile src/bin/anoperc
install: DUMMY
${MAKE} -C src ${MAKEARGS} install
${MAKE} -C src/tools ${MAKEARGS} install
@echo "*** All done, Anope is now installed. Please read docs/INSTALL for details on what to do now.";
DUMMY:
-119
View File
@@ -1,119 +0,0 @@
Legend:
x = done
? = unsure
+ = in progress
1.9.0
-----
[x] additional field where users' masked host can be stored so both masked IP and vhost are available instead of just one.
[x] no struct Uid bollocks. that's insane, and now, unnecessary that we store UID in BotInfo.
[x] prevent deletion of core services via /bs bot
[x] Module subsystem cleanup ('modules' branch)
[x] Move modules to use classes somewhat (AnopeInit, AnopeFini)
[x] Change MODULE_INIT to return a pointer
[x] Remove duplicate module creation.. have loadModule return a pointer rather than creating one
[x] Remove buffered loading/unloading, this makes os_modunload perm, but who cares
[x] Mark os_modunload permanent.
[x] Remove 'delayed' loading, this is necessary because of before/after connected to ircd (ircd is before, rest after), I'm sure this can be done better.
[x] Remove mod_current_* crap (involves passing Module * around a lot)
[x] events.c
[x] modules.c
[x] commands.c
[x] Redo moduleAdd|Get|Remove data to use class Extensible, etc.
[x] remove old config, replace with insp-inspired (albeit bind format) config (CBX)
[x] Clean up protocol
[x] Fix anope_cmd_* stuff to just use IRCdProto methods directly
[x] SendClientIntroduction should take a UID param, rather than generating one(?)
[x] Fix permanent channels (+P) stuff.
[x] Remove UnRestrictSAdmin, UseTS6, UseSVSHOLD
[x] InspIRCd 1.2 support
[x] Remove old (prior to 1.8.0) db compat
[x] Establish a proper base for services pseudoclients
[x] add ss_main StatServ Hal9000 to play with :)
[x] burn automake with fire (CBX)
1.9.1
-----
[ ] Remove modules_unload_all fini + hack that goes with it
[ ] signal handling cleanup
[ ] Move a (lot) of stuff to class members as a defined interface rather than copypasta everywhere (ns_set, ns_saset!)
[ ] Redo database insanity.
[ ] Move database load/save to a module
[ ] realtime SQL/whatever module using events
[ ] flatfile save on a periodic timer
[ ] SANE password encryption - prefix password with the method it was encrypted with, allowing for *seamless* upgrading to different methods
[ ] Salted SHA256 (contact Special for this)
[ ] New database format (text, not binary - works very well for merging and so on)
[ ] burn do_sjoin with fire
[ ] Seamless fantasy support for all ChanServ commands, instead of requiring bs_fantasy_*
[ ] HelpServ must die (1.9.1?)
[ ] Command parser cleanup
[ ] mod_current_buffer needs to go away and be replaced by a proper parser. Commands should then indicate how they want the buffer split.
[ ] Fix permanent channels support properly. This will require removing do_sjoin().
[ ] Make NS ENFORCE/RELEASE stuff more sane, redo timers
[ ] Add support for +k, +q, etc type umodes
1.9.2
-----
[ ] Socket subsystem needs some serious loving
[ ] Multiple sockets
[ ] Asynchronous, using select() (multiple engines? not really needed..)
[ ] Callbacks, event style, see also inspircd
[ ] Asynchronous DNS?
[ ] CS SET INHABIT to keep pseudoclient in a channel after it empties to maintain banlists and such
[?] Remote identification (1.9.1? will this break stuff?)
[ ] Requires a rejig of how Alias vs Core works
[ ] Language charset stuff, including collation (1.9.1? phoenix?)
Future
------
[ ] way for one module to depend on another... not like 2 MOD_HEADs and it being unpredictable which is loaded first..
the MOD_HEAD MOD_TAIL allows for too few combinations (interface code of insp, hooks code of insp?)
[ ] generic database routines modules can use to create their own database
[ ] generic way to check which modes a user has set (u->HasUmode(UMODE_OPER))
? [ ] a way for a module to queue itself (or even another module) for unloading
[ ] add overridden form of SendGlobops accepting BotInfo
[ ] SendAkill should just take a pointer to the Akill class instead of millions of fields (same for some other stuff)
[ ] chan_set_modes should take BotInfo, possibly with override for User *?
[ ] Language system is disgusting, it must die.
[ ] Modules should also have a way to add strings programatically
[ ] Should be able to add many strings by dropping a file in a set location.
[ ] I forsee this working via a function rather than defines, as it seems to do now: e.g. _("NS_NICK_IS_REGISTERED").
[?] Mail memos? think on consequences of this
[ ] Useful/common "third party" modules to core distro
[ ] NS AJOIN
[ ] Last used time on AKICK/access entries
[ ] Channel access additions
[ ] Method to store listmodes (more generically than AKICK, too) for e.g. +beI and extbans, etc.
[ ] Setter
[ ] Time added
[ ] Time modified
[ ] Expiry (useful?)
[ ] Set forbidden channels +s
[ ] NS INFO: seperate field for last seen realhost, shown to SRA only
[ ] NS SUSPEND: show suspender and reason, probably to sopers only (see CS SUSPEND)
XXX: is SUSPEND overlapping with OS IGNORE functionality?
[ ] Merge NS INFO blah ALL with NS INFO blah, if you're requesting info, you really want the info anyway.
? [ ] Channel passwords seem to be of limited use, think of a more appropriate way to handle this
? [ ] Don't allow soper accounts to expire
? [ ] Reason for CS SET RESTRICTED
[ ] NS IDENTIFY changes
? [ ] Last failed identify? Maybe more useful for sopers only, so users don't get unnecessarily worried
? [ ] Last successful login time/ip? perhaps both of these should be a new nick setting
[ ] AKILL/SGLINE/etc..
[ ] Setter
[ ] Time added
[ ] Time modified (can they be modified?)
[ ] Time until expiry/expiry time (YES, time until expiry *instead of* expiry time, more human)
[ ] Reason
[ ] Unique IDs on each AKILL/blah so that networks may use them as ticket IDs
[ ] HS ACTIVATE -ALL (rob sez this all needs reviewing)
[ ] Settable oper flags (split into types containing privs+commands, allow each oper to be set to a type, like we do with insp?)
[ ] NS MARK, CS MARK. Allow multiple marks. Combine into OS MARK?
[ ] General options block, ability to turn LOGCHAN on from the config file..
[ ] Method to list suspended/forbidden nicks/channels?
? [ ] MS IGNORE. Make it take nick (accounts) or n!u@h masks. Fake success of memo send still, but send to opers?
? [ ] More "friendly" date displays of some things like registration time ("November 7th 2006 (2 years, 0 months, 0 days ago)")
? [ ] Review settings like NSModeOnID for whether they actually have a point existing (Rob says it does not - and that it should probably be a nickname setting)
? [ ] OS INJECT
? [ ] Drop CS SET ENTRYMSG, replace with a 'news' type system? (limited to a configured number of items, default 3)
Vendored
-871
View File
@@ -1,871 +0,0 @@
dnl aclocal.m4 generated automatically by aclocal 1.4-p6
dnl Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
dnl This program is distributed in the hope that it will be useful,
dnl but WITHOUT ANY WARRANTY, to the extent permitted by law; without
dnl even the implied warranty of MERCHANTABILITY or FITNESS FOR A
dnl PARTICULAR PURPOSE.
# lib-prefix.m4 serial 4 (gettext-0.14.2)
dnl Copyright (C) 2001-2005 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
dnl From Bruno Haible.
dnl AC_LIB_ARG_WITH is synonymous to AC_ARG_WITH in autoconf-2.13, and
dnl similar to AC_ARG_WITH in autoconf 2.52...2.57 except that is doesn't
dnl require excessive bracketing.
ifdef([AC_HELP_STRING],
[AC_DEFUN([AC_LIB_ARG_WITH], [AC_ARG_WITH([$1],[[$2]],[$3],[$4])])],
[AC_DEFUN([AC_][LIB_ARG_WITH], [AC_ARG_WITH([$1],[$2],[$3],[$4])])])
dnl AC_LIB_PREFIX adds to the CPPFLAGS and LDFLAGS the flags that are needed
dnl to access previously installed libraries. The basic assumption is that
dnl a user will want packages to use other packages he previously installed
dnl with the same --prefix option.
dnl This macro is not needed if only AC_LIB_LINKFLAGS is used to locate
dnl libraries, but is otherwise very convenient.
AC_DEFUN([AC_LIB_PREFIX],
[
AC_BEFORE([$0], [AC_LIB_LINKFLAGS])
AC_REQUIRE([AC_PROG_CC])
AC_REQUIRE([AC_CANONICAL_HOST])
AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
dnl By default, look in $includedir and $libdir.
use_additional=yes
AC_LIB_WITH_FINAL_PREFIX([
eval additional_includedir=\"$includedir\"
eval additional_libdir=\"$libdir\"
])
AC_LIB_ARG_WITH([lib-prefix],
[ --with-lib-prefix[=DIR] search for libraries in DIR/include and DIR/lib
--without-lib-prefix don't search for libraries in includedir and libdir],
[
if test "X$withval" = "Xno"; then
use_additional=no
else
if test "X$withval" = "X"; then
AC_LIB_WITH_FINAL_PREFIX([
eval additional_includedir=\"$includedir\"
eval additional_libdir=\"$libdir\"
])
else
additional_includedir="$withval/include"
additional_libdir="$withval/lib"
fi
fi
])
if test $use_additional = yes; then
dnl Potentially add $additional_includedir to $CPPFLAGS.
dnl But don't add it
dnl 1. if it's the standard /usr/include,
dnl 2. if it's already present in $CPPFLAGS,
dnl 3. if it's /usr/local/include and we are using GCC on Linux,
dnl 4. if it doesn't exist as a directory.
if test "X$additional_includedir" != "X/usr/include"; then
haveit=
for x in $CPPFLAGS; do
AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
if test "X$x" = "X-I$additional_includedir"; then
haveit=yes
break
fi
done
if test -z "$haveit"; then
if test "X$additional_includedir" = "X/usr/local/include"; then
if test -n "$GCC"; then
case $host_os in
linux* | gnu* | k*bsd*-gnu) haveit=yes;;
esac
fi
fi
if test -z "$haveit"; then
if test -d "$additional_includedir"; then
dnl Really add $additional_includedir to $CPPFLAGS.
CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }-I$additional_includedir"
fi
fi
fi
fi
dnl Potentially add $additional_libdir to $LDFLAGS.
dnl But don't add it
dnl 1. if it's the standard /usr/lib,
dnl 2. if it's already present in $LDFLAGS,
dnl 3. if it's /usr/local/lib and we are using GCC on Linux,
dnl 4. if it doesn't exist as a directory.
if test "X$additional_libdir" != "X/usr/lib"; then
haveit=
for x in $LDFLAGS; do
AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
if test "X$x" = "X-L$additional_libdir"; then
haveit=yes
break
fi
done
if test -z "$haveit"; then
if test "X$additional_libdir" = "X/usr/local/lib"; then
if test -n "$GCC"; then
case $host_os in
linux*) haveit=yes;;
esac
fi
fi
if test -z "$haveit"; then
if test -d "$additional_libdir"; then
dnl Really add $additional_libdir to $LDFLAGS.
LDFLAGS="${LDFLAGS}${LDFLAGS:+ }-L$additional_libdir"
fi
fi
fi
fi
fi
])
dnl AC_LIB_PREPARE_PREFIX creates variables acl_final_prefix,
dnl acl_final_exec_prefix, containing the values to which $prefix and
dnl $exec_prefix will expand at the end of the configure script.
AC_DEFUN([AC_LIB_PREPARE_PREFIX],
[
dnl Unfortunately, prefix and exec_prefix get only finally determined
dnl at the end of configure.
if test "X$prefix" = "XNONE"; then
acl_final_prefix="$ac_default_prefix"
else
acl_final_prefix="$prefix"
fi
if test "X$exec_prefix" = "XNONE"; then
acl_final_exec_prefix='${prefix}'
else
acl_final_exec_prefix="$exec_prefix"
fi
acl_save_prefix="$prefix"
prefix="$acl_final_prefix"
eval acl_final_exec_prefix=\"$acl_final_exec_prefix\"
prefix="$acl_save_prefix"
])
dnl AC_LIB_WITH_FINAL_PREFIX([statement]) evaluates statement, with the
dnl variables prefix and exec_prefix bound to the values they will have
dnl at the end of the configure script.
AC_DEFUN([AC_LIB_WITH_FINAL_PREFIX],
[
acl_save_prefix="$prefix"
prefix="$acl_final_prefix"
acl_save_exec_prefix="$exec_prefix"
exec_prefix="$acl_final_exec_prefix"
$1
exec_prefix="$acl_save_exec_prefix"
prefix="$acl_save_prefix"
])
# lib-link.m4 serial 6 (gettext-0.14.3)
dnl Copyright (C) 2001-2005 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
dnl From Bruno Haible.
AC_PREREQ(2.50)
dnl AC_LIB_LINKFLAGS(name [, dependencies]) searches for libname and
dnl the libraries corresponding to explicit and implicit dependencies.
dnl Sets and AC_SUBSTs the LIB${NAME} and LTLIB${NAME} variables and
dnl augments the CPPFLAGS variable.
AC_DEFUN([AC_LIB_LINKFLAGS],
[
AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
AC_REQUIRE([AC_LIB_RPATH])
define([Name],[translit([$1],[./-], [___])])
define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
[ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
AC_CACHE_CHECK([how to link with lib[]$1], [ac_cv_lib[]Name[]_libs], [
AC_LIB_LINKFLAGS_BODY([$1], [$2])
ac_cv_lib[]Name[]_libs="$LIB[]NAME"
ac_cv_lib[]Name[]_ltlibs="$LTLIB[]NAME"
ac_cv_lib[]Name[]_cppflags="$INC[]NAME"
])
LIB[]NAME="$ac_cv_lib[]Name[]_libs"
LTLIB[]NAME="$ac_cv_lib[]Name[]_ltlibs"
INC[]NAME="$ac_cv_lib[]Name[]_cppflags"
AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME)
AC_SUBST([LIB]NAME)
AC_SUBST([LTLIB]NAME)
dnl Also set HAVE_LIB[]NAME so that AC_LIB_HAVE_LINKFLAGS can reuse the
dnl results of this search when this library appears as a dependency.
HAVE_LIB[]NAME=yes
undefine([Name])
undefine([NAME])
])
dnl AC_LIB_HAVE_LINKFLAGS(name, dependencies, includes, testcode)
dnl searches for libname and the libraries corresponding to explicit and
dnl implicit dependencies, together with the specified include files and
dnl the ability to compile and link the specified testcode. If found, it
dnl sets and AC_SUBSTs HAVE_LIB${NAME}=yes and the LIB${NAME} and
dnl LTLIB${NAME} variables and augments the CPPFLAGS variable, and
dnl #defines HAVE_LIB${NAME} to 1. Otherwise, it sets and AC_SUBSTs
dnl HAVE_LIB${NAME}=no and LIB${NAME} and LTLIB${NAME} to empty.
AC_DEFUN([AC_LIB_HAVE_LINKFLAGS],
[
AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
AC_REQUIRE([AC_LIB_RPATH])
define([Name],[translit([$1],[./-], [___])])
define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
[ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
dnl Search for lib[]Name and define LIB[]NAME, LTLIB[]NAME and INC[]NAME
dnl accordingly.
AC_LIB_LINKFLAGS_BODY([$1], [$2])
dnl Add $INC[]NAME to CPPFLAGS before performing the following checks,
dnl because if the user has installed lib[]Name and not disabled its use
dnl via --without-lib[]Name-prefix, he wants to use it.
ac_save_CPPFLAGS="$CPPFLAGS"
AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME)
AC_CACHE_CHECK([for lib[]$1], [ac_cv_lib[]Name], [
ac_save_LIBS="$LIBS"
LIBS="$LIBS $LIB[]NAME"
AC_TRY_LINK([$3], [$4], [ac_cv_lib[]Name=yes], [ac_cv_lib[]Name=no])
LIBS="$ac_save_LIBS"
])
if test "$ac_cv_lib[]Name" = yes; then
HAVE_LIB[]NAME=yes
AC_DEFINE([HAVE_LIB]NAME, 1, [Define if you have the $1 library.])
AC_MSG_CHECKING([how to link with lib[]$1])
AC_MSG_RESULT([$LIB[]NAME])
else
HAVE_LIB[]NAME=no
dnl If $LIB[]NAME didn't lead to a usable library, we don't need
dnl $INC[]NAME either.
CPPFLAGS="$ac_save_CPPFLAGS"
LIB[]NAME=
LTLIB[]NAME=
fi
AC_SUBST([HAVE_LIB]NAME)
AC_SUBST([LIB]NAME)
AC_SUBST([LTLIB]NAME)
undefine([Name])
undefine([NAME])
])
dnl Determine the platform dependent parameters needed to use rpath:
dnl libext, shlibext, hardcode_libdir_flag_spec, hardcode_libdir_separator,
dnl hardcode_direct, hardcode_minus_L.
AC_DEFUN([AC_LIB_RPATH],
[
dnl Tell automake >= 1.10 to complain if config.rpath is missing.
m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([config.rpath])])
AC_REQUIRE([AC_PROG_CC]) dnl we use $CC, $GCC, $LDFLAGS
AC_REQUIRE([AC_LIB_PROG_LD]) dnl we use $LD, $with_gnu_ld
AC_REQUIRE([AC_CANONICAL_HOST]) dnl we use $host
AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT]) dnl we use $ac_aux_dir
AC_CACHE_CHECK([for shared library run path origin], acl_cv_rpath, [
CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \
${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh
. ./conftest.sh
rm -f ./conftest.sh
acl_cv_rpath=done
])
wl="$acl_cv_wl"
libext="$acl_cv_libext"
shlibext="$acl_cv_shlibext"
hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec"
hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator"
hardcode_direct="$acl_cv_hardcode_direct"
hardcode_minus_L="$acl_cv_hardcode_minus_L"
dnl Determine whether the user wants rpath handling at all.
AC_ARG_ENABLE(rpath,
[ --disable-rpath do not hardcode runtime library paths],
:, enable_rpath=yes)
])
dnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname and
dnl the libraries corresponding to explicit and implicit dependencies.
dnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables.
AC_DEFUN([AC_LIB_LINKFLAGS_BODY],
[
define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
[ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
dnl By default, look in $includedir and $libdir.
use_additional=yes
AC_LIB_WITH_FINAL_PREFIX([
eval additional_includedir=\"$includedir\"
eval additional_libdir=\"$libdir\"
])
AC_LIB_ARG_WITH([lib$1-prefix],
[ --with-lib$1-prefix[=DIR] search for lib$1 in DIR/include and DIR/lib
--without-lib$1-prefix don't search for lib$1 in includedir and libdir],
[
if test "X$withval" = "Xno"; then
use_additional=no
else
if test "X$withval" = "X"; then
AC_LIB_WITH_FINAL_PREFIX([
eval additional_includedir=\"$includedir\"
eval additional_libdir=\"$libdir\"
])
else
additional_includedir="$withval/include"
additional_libdir="$withval/lib"
fi
fi
])
dnl Search the library and its dependencies in $additional_libdir and
dnl $LDFLAGS. Using breadth-first-seach.
LIB[]NAME=
LTLIB[]NAME=
INC[]NAME=
rpathdirs=
ltrpathdirs=
names_already_handled=
names_next_round='$1 $2'
while test -n "$names_next_round"; do
names_this_round="$names_next_round"
names_next_round=
for name in $names_this_round; do
already_handled=
for n in $names_already_handled; do
if test "$n" = "$name"; then
already_handled=yes
break
fi
done
if test -z "$already_handled"; then
names_already_handled="$names_already_handled $name"
dnl See if it was already located by an earlier AC_LIB_LINKFLAGS
dnl or AC_LIB_HAVE_LINKFLAGS call.
uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'`
eval value=\"\$HAVE_LIB$uppername\"
if test -n "$value"; then
if test "$value" = yes; then
eval value=\"\$LIB$uppername\"
test -z "$value" || LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$value"
eval value=\"\$LTLIB$uppername\"
test -z "$value" || LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$value"
else
dnl An earlier call to AC_LIB_HAVE_LINKFLAGS has determined
dnl that this library doesn't exist. So just drop it.
:
fi
else
dnl Search the library lib$name in $additional_libdir and $LDFLAGS
dnl and the already constructed $LIBNAME/$LTLIBNAME.
found_dir=
found_la=
found_so=
found_a=
if test $use_additional = yes; then
if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext"; then
found_dir="$additional_libdir"
found_so="$additional_libdir/lib$name.$shlibext"
if test -f "$additional_libdir/lib$name.la"; then
found_la="$additional_libdir/lib$name.la"
fi
else
if test -f "$additional_libdir/lib$name.$libext"; then
found_dir="$additional_libdir"
found_a="$additional_libdir/lib$name.$libext"
if test -f "$additional_libdir/lib$name.la"; then
found_la="$additional_libdir/lib$name.la"
fi
fi
fi
fi
if test "X$found_dir" = "X"; then
for x in $LDFLAGS $LTLIB[]NAME; do
AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
case "$x" in
-L*)
dir=`echo "X$x" | sed -e 's/^X-L//'`
if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext"; then
found_dir="$dir"
found_so="$dir/lib$name.$shlibext"
if test -f "$dir/lib$name.la"; then
found_la="$dir/lib$name.la"
fi
else
if test -f "$dir/lib$name.$libext"; then
found_dir="$dir"
found_a="$dir/lib$name.$libext"
if test -f "$dir/lib$name.la"; then
found_la="$dir/lib$name.la"
fi
fi
fi
;;
esac
if test "X$found_dir" != "X"; then
break
fi
done
fi
if test "X$found_dir" != "X"; then
dnl Found the library.
LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$found_dir -l$name"
if test "X$found_so" != "X"; then
dnl Linking with a shared library. We attempt to hardcode its
dnl directory into the executable's runpath, unless it's the
dnl standard /usr/lib.
if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/lib"; then
dnl No hardcoding is needed.
LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
else
dnl Use an explicit option to hardcode DIR into the resulting
dnl binary.
dnl Potentially add DIR to ltrpathdirs.
dnl The ltrpathdirs will be appended to $LTLIBNAME at the end.
haveit=
for x in $ltrpathdirs; do
if test "X$x" = "X$found_dir"; then
haveit=yes
break
fi
done
if test -z "$haveit"; then
ltrpathdirs="$ltrpathdirs $found_dir"
fi
dnl The hardcoding into $LIBNAME is system dependent.
if test "$hardcode_direct" = yes; then
dnl Using DIR/libNAME.so during linking hardcodes DIR into the
dnl resulting binary.
LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
else
if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then
dnl Use an explicit option to hardcode DIR into the resulting
dnl binary.
LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
dnl Potentially add DIR to rpathdirs.
dnl The rpathdirs will be appended to $LIBNAME at the end.
haveit=
for x in $rpathdirs; do
if test "X$x" = "X$found_dir"; then
haveit=yes
break
fi
done
if test -z "$haveit"; then
rpathdirs="$rpathdirs $found_dir"
fi
else
dnl Rely on "-L$found_dir".
dnl But don't add it if it's already contained in the LDFLAGS
dnl or the already constructed $LIBNAME
haveit=
for x in $LDFLAGS $LIB[]NAME; do
AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
if test "X$x" = "X-L$found_dir"; then
haveit=yes
break
fi
done
if test -z "$haveit"; then
LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir"
fi
if test "$hardcode_minus_L" != no; then
dnl FIXME: Not sure whether we should use
dnl "-L$found_dir -l$name" or "-L$found_dir $found_so"
dnl here.
LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
else
dnl We cannot use $hardcode_runpath_var and LD_RUN_PATH
dnl here, because this doesn't fit in flags passed to the
dnl compiler. So give up. No hardcoding. This affects only
dnl very old systems.
dnl FIXME: Not sure whether we should use
dnl "-L$found_dir -l$name" or "-L$found_dir $found_so"
dnl here.
LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name"
fi
fi
fi
fi
else
if test "X$found_a" != "X"; then
dnl Linking with a static library.
LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_a"
else
dnl We shouldn't come here, but anyway it's good to have a
dnl fallback.
LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir -l$name"
fi
fi
dnl Assume the include files are nearby.
additional_includedir=
case "$found_dir" in
*/lib | */lib/)
basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e 's,/lib/*$,,'`
additional_includedir="$basedir/include"
;;
esac
if test "X$additional_includedir" != "X"; then
dnl Potentially add $additional_includedir to $INCNAME.
dnl But don't add it
dnl 1. if it's the standard /usr/include,
dnl 2. if it's /usr/local/include and we are using GCC on Linux,
dnl 3. if it's already present in $CPPFLAGS or the already
dnl constructed $INCNAME,
dnl 4. if it doesn't exist as a directory.
if test "X$additional_includedir" != "X/usr/include"; then
haveit=
if test "X$additional_includedir" = "X/usr/local/include"; then
if test -n "$GCC"; then
case $host_os in
linux* | gnu* | k*bsd*-gnu) haveit=yes;;
esac
fi
fi
if test -z "$haveit"; then
for x in $CPPFLAGS $INC[]NAME; do
AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
if test "X$x" = "X-I$additional_includedir"; then
haveit=yes
break
fi
done
if test -z "$haveit"; then
if test -d "$additional_includedir"; then
dnl Really add $additional_includedir to $INCNAME.
INC[]NAME="${INC[]NAME}${INC[]NAME:+ }-I$additional_includedir"
fi
fi
fi
fi
fi
dnl Look for dependencies.
if test -n "$found_la"; then
dnl Read the .la file. It defines the variables
dnl dlname, library_names, old_library, dependency_libs, current,
dnl age, revision, installed, dlopen, dlpreopen, libdir.
save_libdir="$libdir"
case "$found_la" in
*/* | *\\*) . "$found_la" ;;
*) . "./$found_la" ;;
esac
libdir="$save_libdir"
dnl We use only dependency_libs.
for dep in $dependency_libs; do
case "$dep" in
-L*)
additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'`
dnl Potentially add $additional_libdir to $LIBNAME and $LTLIBNAME.
dnl But don't add it
dnl 1. if it's the standard /usr/lib,
dnl 2. if it's /usr/local/lib and we are using GCC on Linux,
dnl 3. if it's already present in $LDFLAGS or the already
dnl constructed $LIBNAME,
dnl 4. if it doesn't exist as a directory.
if test "X$additional_libdir" != "X/usr/lib"; then
haveit=
if test "X$additional_libdir" = "X/usr/local/lib"; then
if test -n "$GCC"; then
case $host_os in
linux* | gnu* | k*bsd*-gnu) haveit=yes;;
esac
fi
fi
if test -z "$haveit"; then
haveit=
for x in $LDFLAGS $LIB[]NAME; do
AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
if test "X$x" = "X-L$additional_libdir"; then
haveit=yes
break
fi
done
if test -z "$haveit"; then
if test -d "$additional_libdir"; then
dnl Really add $additional_libdir to $LIBNAME.
LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$additional_libdir"
fi
fi
haveit=
for x in $LDFLAGS $LTLIB[]NAME; do
AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
if test "X$x" = "X-L$additional_libdir"; then
haveit=yes
break
fi
done
if test -z "$haveit"; then
if test -d "$additional_libdir"; then
dnl Really add $additional_libdir to $LTLIBNAME.
LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$additional_libdir"
fi
fi
fi
fi
;;
-R*)
dir=`echo "X$dep" | sed -e 's/^X-R//'`
if test "$enable_rpath" != no; then
dnl Potentially add DIR to rpathdirs.
dnl The rpathdirs will be appended to $LIBNAME at the end.
haveit=
for x in $rpathdirs; do
if test "X$x" = "X$dir"; then
haveit=yes
break
fi
done
if test -z "$haveit"; then
rpathdirs="$rpathdirs $dir"
fi
dnl Potentially add DIR to ltrpathdirs.
dnl The ltrpathdirs will be appended to $LTLIBNAME at the end.
haveit=
for x in $ltrpathdirs; do
if test "X$x" = "X$dir"; then
haveit=yes
break
fi
done
if test -z "$haveit"; then
ltrpathdirs="$ltrpathdirs $dir"
fi
fi
;;
-l*)
dnl Handle this in the next round.
names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'`
;;
*.la)
dnl Handle this in the next round. Throw away the .la's
dnl directory; it is already contained in a preceding -L
dnl option.
names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'`
;;
*)
dnl Most likely an immediate library name.
LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$dep"
LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$dep"
;;
esac
done
fi
else
dnl Didn't find the library; assume it is in the system directories
dnl known to the linker and runtime loader. (All the system
dnl directories known to the linker should also be known to the
dnl runtime loader, otherwise the system is severely misconfigured.)
LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name"
LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-l$name"
fi
fi
fi
done
done
if test "X$rpathdirs" != "X"; then
if test -n "$hardcode_libdir_separator"; then
dnl Weird platform: only the last -rpath option counts, the user must
dnl pass all path elements in one option. We can arrange that for a
dnl single library, but not when more than one $LIBNAMEs are used.
alldirs=
for found_dir in $rpathdirs; do
alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir"
done
dnl Note: hardcode_libdir_flag_spec uses $libdir and $wl.
acl_save_libdir="$libdir"
libdir="$alldirs"
eval flag=\"$hardcode_libdir_flag_spec\"
libdir="$acl_save_libdir"
LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag"
else
dnl The -rpath options are cumulative.
for found_dir in $rpathdirs; do
acl_save_libdir="$libdir"
libdir="$found_dir"
eval flag=\"$hardcode_libdir_flag_spec\"
libdir="$acl_save_libdir"
LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag"
done
fi
fi
if test "X$ltrpathdirs" != "X"; then
dnl When using libtool, the option that works for both libraries and
dnl executables is -R. The -R options are cumulative.
for found_dir in $ltrpathdirs; do
LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir"
done
fi
])
dnl AC_LIB_APPENDTOVAR(VAR, CONTENTS) appends the elements of CONTENTS to VAR,
dnl unless already present in VAR.
dnl Works only for CPPFLAGS, not for LIB* variables because that sometimes
dnl contains two or three consecutive elements that belong together.
AC_DEFUN([AC_LIB_APPENDTOVAR],
[
for element in [$2]; do
haveit=
for x in $[$1]; do
AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
if test "X$x" = "X$element"; then
haveit=yes
break
fi
done
if test -z "$haveit"; then
[$1]="${[$1]}${[$1]:+ }$element"
fi
done
])
# lib-ld.m4 serial 3 (gettext-0.13)
dnl Copyright (C) 1996-2003 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
dnl Subroutines of libtool.m4,
dnl with replacements s/AC_/AC_LIB/ and s/lt_cv/acl_cv/ to avoid collision
dnl with libtool.m4.
dnl From libtool-1.4. Sets the variable with_gnu_ld to yes or no.
AC_DEFUN([AC_LIB_PROG_LD_GNU],
[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], acl_cv_prog_gnu_ld,
[# I'd rather use --version here, but apparently some GNU ld's only accept -v.
case `$LD -v 2>&1 </dev/null` in
*GNU* | *'with BFD'*)
acl_cv_prog_gnu_ld=yes ;;
*)
acl_cv_prog_gnu_ld=no ;;
esac])
with_gnu_ld=$acl_cv_prog_gnu_ld
])
dnl From libtool-1.4. Sets the variable LD.
AC_DEFUN([AC_LIB_PROG_LD],
[AC_ARG_WITH(gnu-ld,
[ --with-gnu-ld assume the C compiler uses GNU ld [default=no]],
test "$withval" = no || with_gnu_ld=yes, with_gnu_ld=no)
AC_REQUIRE([AC_PROG_CC])dnl
AC_REQUIRE([AC_CANONICAL_HOST])dnl
# Prepare PATH_SEPARATOR.
# The user is always right.
if test "${PATH_SEPARATOR+set}" != set; then
echo "#! /bin/sh" >conf$$.sh
echo "exit 0" >>conf$$.sh
chmod +x conf$$.sh
if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
PATH_SEPARATOR=';'
else
PATH_SEPARATOR=:
fi
rm -f conf$$.sh
fi
ac_prog=ld
if test "$GCC" = yes; then
# Check if gcc -print-prog-name=ld gives a path.
AC_MSG_CHECKING([for ld used by GCC])
case $host in
*-*-mingw*)
# gcc leaves a trailing carriage return which upsets mingw
ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
*)
ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
esac
case $ac_prog in
# Accept absolute paths.
[[\\/]* | [A-Za-z]:[\\/]*)]
[re_direlt='/[^/][^/]*/\.\./']
# Canonicalize the path of ld
ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'`
while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
done
test -z "$LD" && LD="$ac_prog"
;;
"")
# If it fails, then pretend we aren't using GCC.
ac_prog=ld
;;
*)
# If it is relative, then search for the first ld in PATH.
with_gnu_ld=unknown
;;
esac
elif test "$with_gnu_ld" = yes; then
AC_MSG_CHECKING([for GNU ld])
else
AC_MSG_CHECKING([for non-GNU ld])
fi
AC_CACHE_VAL(acl_cv_path_LD,
[if test -z "$LD"; then
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
for ac_dir in $PATH; do
test -z "$ac_dir" && ac_dir=.
if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
acl_cv_path_LD="$ac_dir/$ac_prog"
# Check to see if the program is GNU ld. I'd rather use --version,
# but apparently some GNU ld's only accept -v.
# Break only if it was the GNU/non-GNU ld that we prefer.
case `"$acl_cv_path_LD" -v 2>&1 < /dev/null` in
*GNU* | *'with BFD'*)
test "$with_gnu_ld" != no && break ;;
*)
test "$with_gnu_ld" != yes && break ;;
esac
fi
done
IFS="$ac_save_ifs"
else
acl_cv_path_LD="$LD" # Let the user override the test with a path.
fi])
LD="$acl_cv_path_LD"
if test -n "$LD"; then
AC_MSG_RESULT($LD)
else
AC_MSG_RESULT(no)
fi
test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
AC_LIB_PROG_LD_GNU
])
dnl Macro: anope_CHECK_TYPE_SIZES
dnl
dnl Check the size of several types and define a valid int16_t and int32_t.
dnl
AC_DEFUN(anope_CHECK_TYPE_SIZES,
[dnl Check type sizes
dnl AC_CHECK_SIZEOF(short)
dnl AC_CHECK_SIZEOF(int)
dnl AC_CHECK_SIZEOF(long)
dnl if test "$ac_cv_sizeof_int" = 2 ; then
dnl AC_CHECK_TYPE(int16_t, int)
dnl AC_CHECK_TYPE(u_int16_t, unsigned int)
dnl elif test "$ac_cv_sizeof_short" = 2 ; then
dnl AC_CHECK_TYPE(int16_t, short)
dnl AC_CHECK_TYPE(u_int16_t, unsigned short)
dnl else
dnl AC_MSG_ERROR([Cannot find a type with size of 16 bits])
dnl fi
dnl if test "$ac_cv_sizeof_int" = 4 ; then
dnl AC_CHECK_TYPE(int32_t, int)
dnl AC_CHECK_TYPE(u_int32_t, unsigned int)
dnl elif test "$ac_cv_sizeof_short" = 4 ; then
dnl AC_CHECK_TYPE(int32_t, short)
dnl AC_CHECK_TYPE(u_int32_t, unsigned short)
dnl elif test "$ac_cv_sizeof_long" = 4 ; then
dnl AC_CHECK_TYPE(int32_t, long)
dnl AC_CHECK_TYPE(u_int32_t, unsigned long)
dnl else
dnl AC_MSG_ERROR([Cannot find a type with size of 32 bits])
dnl fi
AC_CHECK_TYPE(uint8_t, AC_DEFINE(HAVE_UINT8_T, 1, "Has uint8_t type"))
AC_CHECK_TYPE(u_int8_t, AC_DEFINE(HAVE_U_INT8_T, 1, "Has u_int8_t type"))
AC_CHECK_TYPE(int16_t, AC_DEFINE(HAVE_INT16_T, 1, "Has int16_t type"))
AC_CHECK_TYPE(uint16_t, AC_DEFINE(HAVE_UINT16_T, 1, "Has uint16_t type"))
AC_CHECK_TYPE(u_int16_t, AC_DEFINE(HAVE_U_INT16_T, 1, "Has u_int16_t type"))
AC_CHECK_TYPE(int32_t, AC_DEFINE(HAVE_INT32_T, 1, "Has int32_t type"))
AC_CHECK_TYPE(uint32_t, AC_DEFINE(HAVE_UINT32_T, 1, "Has uint32_t type"))
AC_CHECK_TYPE(u_int32_t, AC_DEFINE(HAVE_U_INT32_T, 1, "Has u_int32_t type"))
])
-39
View File
@@ -1,39 +0,0 @@
dnl Macro: anope_CHECK_TYPE_SIZES
dnl
dnl Check the size of several types and define a valid int16_t and int32_t.
dnl
AC_DEFUN(anope_CHECK_TYPE_SIZES,
[dnl Check type sizes
dnl AC_CHECK_SIZEOF(short)
dnl AC_CHECK_SIZEOF(int)
dnl AC_CHECK_SIZEOF(long)
dnl if test "$ac_cv_sizeof_int" = 2 ; then
dnl AC_CHECK_TYPE(int16_t, int)
dnl AC_CHECK_TYPE(u_int16_t, unsigned int)
dnl elif test "$ac_cv_sizeof_short" = 2 ; then
dnl AC_CHECK_TYPE(int16_t, short)
dnl AC_CHECK_TYPE(u_int16_t, unsigned short)
dnl else
dnl AC_MSG_ERROR([Cannot find a type with size of 16 bits])
dnl fi
dnl if test "$ac_cv_sizeof_int" = 4 ; then
dnl AC_CHECK_TYPE(int32_t, int)
dnl AC_CHECK_TYPE(u_int32_t, unsigned int)
dnl elif test "$ac_cv_sizeof_short" = 4 ; then
dnl AC_CHECK_TYPE(int32_t, short)
dnl AC_CHECK_TYPE(u_int32_t, unsigned short)
dnl elif test "$ac_cv_sizeof_long" = 4 ; then
dnl AC_CHECK_TYPE(int32_t, long)
dnl AC_CHECK_TYPE(u_int32_t, unsigned long)
dnl else
dnl AC_MSG_ERROR([Cannot find a type with size of 32 bits])
dnl fi
AC_CHECK_TYPE(uint8_t, AC_DEFINE(HAVE_UINT8_T, 1, "Has uint8_t type"))
AC_CHECK_TYPE(u_int8_t, AC_DEFINE(HAVE_U_INT8_T, 1, "Has u_int8_t type"))
AC_CHECK_TYPE(int16_t, AC_DEFINE(HAVE_INT16_T, 1, "Has int16_t type"))
AC_CHECK_TYPE(uint16_t, AC_DEFINE(HAVE_UINT16_T, 1, "Has uint16_t type"))
AC_CHECK_TYPE(u_int16_t, AC_DEFINE(HAVE_U_INT16_T, 1, "Has u_int16_t type"))
AC_CHECK_TYPE(int32_t, AC_DEFINE(HAVE_INT32_T, 1, "Has int32_t type"))
AC_CHECK_TYPE(uint32_t, AC_DEFINE(HAVE_UINT32_T, 1, "Has uint32_t type"))
AC_CHECK_TYPE(u_int32_t, AC_DEFINE(HAVE_U_INT32_T, 1, "Has u_int32_t type"))
])
-13
View File
@@ -1,13 +0,0 @@
#!/bin/sh
echo "Generating build information using aclocal, autoheader, automake and autoconf."
echo
# Regerate configuration files
aclocal
autoheader
automake --gnu --add-missing --copy
autoconf
echo
echo "Now you are ready to run ./configure"
+540
View File
@@ -0,0 +1,540 @@
###############################################################################
# strip_string(<input string> <output string>)
#
# A macro to handle stripping the leading and trailing spaces from a string,
# uses string(STRIP) if using CMake 2.6.x or better, otherwise uses
# string(REGEX REPLACE).
###############################################################################
macro(strip_string INPUT_STRING OUTPUT_STRING)
if(CMAKE26_OR_BETTER)
# For CMake 2.6.x or better, we can just use the STRIP sub-command of string()
string(STRIP ${INPUT_STRING} ${OUTPUT_STRING})
else(CMAKE26_OR_BETTER)
# For CMake 2.4.x, we will have to use the REGEX REPLACE sub-command of string() instead
# First check if the input string is empty or not
if (${INPUT_STRING} STREQUAL "")
set(${OUTPUT_STRING} "")
else(${INPUT_STRING} STREQUAL "")
# Determine if the string is entirely empty or not
string(REGEX MATCH "^[ \t]*$" EMPTY_STRING "${INPUT_STRING}")
if(EMPTY_STRING)
set(${OUTPUT_STRING} "")
else(EMPTY_STRING)
# We detect if there is any leading whitespace and remove any if there is
string(SUBSTRING "${INPUT_STRING}" 0 1 FIRST_CHAR)
if(FIRST_CHAR STREQUAL " " OR FIRST_CHAR STREQUAL "\t")
string(REGEX REPLACE "^[ \t]+" "" TEMP_STRING "${INPUT_STRING}")
else(FIRST_CHAR STREQUAL " " OR FIRST_CHAR STREQUAL "\t")
set(TEMP_STRING "${INPUT_STRING}")
endif(FIRST_CHAR STREQUAL " " OR FIRST_CHAR STREQUAL "\t")
# Next we detect if there is any trailing whitespace and remove any if there is
string(LENGTH "${TEMP_STRING}" STRING_LEN)
math(EXPR STRING_LEN "${STRING_LEN} - 1")
string(SUBSTRING "${TEMP_STRING}" ${STRING_LEN} 1 LAST_CHAR)
if(LAST_CHAR STREQUAL " " OR LAST_CHAR STREQUAL "\t")
string(REGEX REPLACE "[ \t]+$" "" ${OUTPUT_STRING} "${TEMP_STRING}")
else(LAST_CHAR STREQUAL " " OR LAST_CHAR STREQUAL "\t")
set(${OUTPUT_STRING} "${TEMP_STRING}")
endif(LAST_CHAR STREQUAL " " OR LAST_CHAR STREQUAL "\t")
endif(EMPTY_STRING)
endif(${INPUT_STRING} STREQUAL "")
endif(CMAKE26_OR_BETTER)
endmacro(strip_string)
###############################################################################
# append_to_list(<list> <args>...)
#
# A macro to handle appending to lists, uses list(APPEND) if using CMake 2.4.2
# or better, otherwise uses set() instead.
###############################################################################
macro(append_to_list LIST)
if(CMAKE242_OR_BETTER)
# For CMake 2.4.2 or better, we can just use the APPEND sub-command of list()
list(APPEND ${LIST} ${ARGN})
else(CMAKE242_OR_BETTER)
# For CMake 2.4.x before 2.4.2, we have to do this manually use set() instead
set(${LIST} ${${LIST}} ${ARGN})
endif(CMAKE242_OR_BETTER)
endmacro(append_to_list)
###############################################################################
# find_in_list(<list> <value> <output variable>)
#
# A macro to handle searching within a list, will store the result in the
# given <output variable>, uses list(FIND) if using CMake 2.6.x or better
# (or CMake 2.4.8 or better), otherwise it iterates through the list to find
# the item.
###############################################################################
macro(find_in_list LIST ITEM_TO_FIND FOUND)
if(CMAKE248_OR_BETTER)
# For CMake 2.4.8 or better, we can use the FIND sub-command of list()
list(FIND ${LIST} ${ITEM_TO_FIND} ITEM_FOUND)
else(CMAKE248_OR_BETTER)
# For CMake 2.4.x before 2.4.8, we have to do this ourselves (NOTE: This is very slow due to a lack of break() as well)
# Firstly we set the position to -1 indicating nothing found, we also use a temporary position
set(ITEM_FOUND -1)
set(POS 0)
# Iterate through the list
foreach(ITEM ${${LIST}})
# If the item we are looking at is the item we are trying to find, set that we've found the item
if(${ITEM} STREQUAL ${ITEM_TO_FIND})
set(ITEM_FOUND ${POS})
endif(${ITEM} STREQUAL ${ITEM_TO_FIND})
# Increase the position value by 1
math(EXPR POS "${POS} + 1")
endforeach(ITEM)
endif(CMAKE248_OR_BETTER)
# Set the given FOUND variable to the result
set(${FOUND} ${ITEM_FOUND})
endmacro(find_in_list)
###############################################################################
# remove_list_duplicates(<list>)
#
# A macro to handle removing duplicates from a list, uses
# list(REMOVE_DUPLICATES) if using CMake 2.6.x or better, otherwise it uses
# a slower method of creating a temporary list and only adding to it when
# a duplicate item hasn't been found.
###############################################################################
macro(remove_list_duplicates LIST)
if(CMAKE26_OR_BETTER)
# For CMake 2.6.x or better, this can be done automatically
list(REMOVE_DUPLICATES ${LIST})
else(CMAKE26_OR_BETTER)
# For CMake 2.4.x, we have to do this ourselves, firstly we'll clear a temporary list
set(NEW_LIST)
# Iterate through the old list
foreach(ITEM ${${LIST}})
# Check if the item is in the new list
find_in_list(NEW_LIST ${ITEM} FOUND_ITEM)
if(FOUND_ITEM EQUAL -1)
# If the item was not found, append it to the list
append_to_list(NEW_LIST ${ITEM})
endif(FOUND_ITEM EQUAL -1)
endforeach(ITEM)
# Replace the old list with the new list
set(${LIST} ${NEW_LIST})
endif(CMAKE26_OR_BETTER)
endmacro(remove_list_duplicates)
###############################################################################
# remove_item_from_list(<list> <value>)
#
# A macro to handle removing a value from a list, uses list(REMOVE_ITEM) in
# both cases, but can remove the value itself using CMake 2.4.2 or better,
# while older versions use a slower method of iterating the list to find the
# index of the value to remove.
###############################################################################
macro(remove_item_from_list LIST VALUE)
if(CMAKE242_OR_BETTER)
# For CMake 2.4.2 or better, this can be done automatically
list(REMOVE_ITEM ${LIST} ${VALUE})
else(CMAKE242_OR_BETTER)
# For CMake 2.4.x before 2.4.2, we have to do this ourselves, firstly we set the index and a variable to indicate if the item was found
set(INDEX 0)
set(FOUND FALSE)
# Iterate through the old list
foreach(ITEM ${${LIST}})
# If the item hasn't been found yet, but the current item is the same, remove it
if(NOT FOUND)
if(ITEM STREQUAL ${VALUE})
set(FOUND TRUE)
list(REMOVE_ITEM ${LIST} ${INDEX})
endif(ITEM STREQUAL ${VALUE})
endif(NOT FOUND)
# Increase the index value by 1
math(EXPR INDEX "${INDEX} + 1")
endforeach(ITEM)
endif(CMAKE242_OR_BETTER)
endmacro(remove_item_from_list)
###############################################################################
# sort_list(<list>)
#
# A macro to handle sorting a list, uses list(SORT) if using CMake 2.4.4 or
# better, otherwise it uses a slower method of creating a temporary list and
# adding elements in alphabetical order.
###############################################################################
macro(sort_list LIST)
if(CMAKE244_OR_BETTER)
# For CMake 2.4.4 or better, this can be done automatically
list(SORT ${LIST})
else(CMAKE244_OR_BETTER)
# For CMake 2.4.x before 2.4.4, we have to do this ourselves, firstly we'll create a teporary list
set(NEW_LIST)
# Iterate through the old list
foreach(ITEM ${${LIST}})
# Temporary index position for the new list, as well as temporary value to store if the item was ever found
set(INDEX 0)
set(FOUND FALSE)
# Iterate through the new list
foreach(NEW_ITEM ${NEW_LIST})
# Compare the items, only if nothing was found before
if(NOT FOUND)
if(NEW_ITEM STRGREATER "${ITEM}")
set(FOUND TRUE)
list(INSERT NEW_LIST ${INDEX} ${ITEM})
endif(NEW_ITEM STRGREATER "${ITEM}")
endif(NOT FOUND)
# Increase the index value by 1
math(EXPR INDEX "${INDEX} + 1")
endforeach(NEW_ITEM)
# If the item was never found, just append it to the end
if(NOT FOUND)
append_to_list(NEW_LIST ${ITEM})
endif(NOT FOUND)
endforeach(ITEM)
# Replace the old list with the new list
set(${LIST} ${NEW_LIST})
endif(CMAKE244_OR_BETTER)
endmacro(sort_list)
###############################################################################
# read_from_file(<filename> <regex> <output variable>)
#
# A macro to handle reading specific lines from a file, uses file(STRINGS) if
# using CMake 2.6.x or better, otherwise we read in the entire file and
# perform a string(REGEX MATCH) on each line of the file instead. This
# macro can also be used to read in all the lines of a file if REGEX is set
# to "".
###############################################################################
macro(read_from_file FILE REGEX STRINGS)
if(CMAKE26_OR_BETTER)
# For CMake 2.6.x or better, we can just use the STRINGS sub-command to get the lines that match the given regular expression (if one is given, otherwise get all lines)
if(REGEX STREQUAL "")
file(STRINGS ${FILE} RESULT)
else(REGEX STREQUAL "")
file(STRINGS ${FILE} RESULT REGEX ${REGEX})
endif(REGEX STREQUAL "")
else(CMAKE26_OR_BETTER)
# For CMake 2.4.x, we need to do this manually, firstly we read the file in
execute_process(COMMAND ${CMAKE_COMMAND} -DFILE:STRING=${FILE} -P ${Anope_SOURCE_DIR}/ReadFile.cmake ERROR_VARIABLE ALL_STRINGS)
# Next we replace all newlines with semicolons
string(REGEX REPLACE "\n" ";" ALL_STRINGS ${ALL_STRINGS})
if(REGEX STREQUAL "")
# For no regular expression, just set the result to all the lines
set(RESULT ${ALL_STRINGS})
else(REGEX STREQUAL "")
# Clear the result list
set(RESULT)
# Iterate through all the lines of the file
foreach(STRING ${ALL_STRINGS})
# Check for a match against the given regular expression
string(REGEX MATCH ${REGEX} STRING_MATCH ${STRING})
# If we had a match, append the match to the list
if(STRING_MATCH)
append_to_list(RESULT ${STRING})
endif(STRING_MATCH)
endforeach(STRING)
endif(REGEX STREQUAL "")
endif(CMAKE26_OR_BETTER)
# Set the given STRINGS variable to the result
set(${STRINGS} ${RESULT})
endmacro(read_from_file)
###############################################################################
# extract_include_filename(<line> <output variable> [<optional output variable of quote type>])
#
# This macro will take a #include line and extract the filename.
###############################################################################
macro(extract_include_filename INCLUDE FILENAME)
# Strip the leading and trailing spaces from the include line
strip_string(${INCLUDE} INCLUDE_STRIPPED)
# Make sure to only do the following if there is a string
if(INCLUDE_STRIPPED STREQUAL "")
set(FILE "")
else(INCLUDE_STRIPPED STREQUAL "")
# Extract the filename including the quotes or angle brackets
string(REGEX REPLACE "^.*([\"<].*[\">]).*$" "\\1" FILE "${INCLUDE_STRIPPED}")
# If an optional 3rd argument is given, we'll store if the quote style was quoted or angle bracketed
if(${ARGC} GREATER 2)
string(SUBSTRING ${FILE} 0 1 QUOTE)
if(QUOTE STREQUAL "<")
set(${ARGV2} "angle brackets")
else(QUOTE STREQUAL "<")
set(${ARGV2} "quotes")
endif(QUOTE STREQUAL "<")
endif(${ARGC} GREATER 2)
# Now remove the quotes or angle brackets
string(REGEX REPLACE "^[\"<](.*)[\">]$" "\\1" FILE "${FILE}")
endif(INCLUDE_STRIPPED STREQUAL "")
# Set the filename to the the given variable
set(${FILENAME} "${FILE}")
endmacro(extract_include_filename)
###############################################################################
# find_includes(<source filename> <output variable>)
#
# This macro will search through a file for #include lines, regardless of
# whitespace, but only returns the lines that are valid for the current
# platform CMake is running on.
###############################################################################
macro(find_includes SRC INCLUDES)
# Read all lines from the file that start with #, regardless of whitespace before the #
read_from_file(${SRC} "^[ \t]*#.*$" LINES)
# Set that any #include lines found are valid, and create temporary variables for the last found #ifdef/#ifndef
set(VALID_LINE TRUE)
set(LAST_DEF)
set(LAST_CHECK)
# Create an empty include list
set(INCLUDES_LIST)
# Iterate through all the # lines
foreach(LINE ${LINES})
# Search for #ifdef, #ifndef, #else, #endif, and #include
string(REGEX MATCH "^[ \t]*#[ \t]*ifdef[ \t]*.*$" FOUND_IFDEF ${LINE})
string(REGEX MATCH "^[ \t]*#[ \t]*ifndef[ \t]*.*$" FOUND_IFNDEF ${LINE})
string(REGEX MATCH "^[ \t]*#[ \t]*else.*$" FOUND_ELSE ${LINE})
string(REGEX MATCH "^[ \t]*#[ \t]*endif.*$" FOUND_ENDIF ${LINE})
string(REGEX MATCH "^[ \t]*#[ \t]*include[ \t]*[\"<].*[\">][\ t]*.*$" FOUND_INCLUDE ${LINE})
# If we found a #ifdef on the line, extract the data after the #ifdef and set if the lines after it are valid based on the variables in CMake
if(FOUND_IFDEF)
# Extract the define
string(REGEX REPLACE "^[ \t]*#[ \t]*ifdef[ \t]*(.*)$" "\\1" DEFINE ${LINE})
# Replace _WIN32 with WIN32, so we can check if the WIN32 variable of CMake is set instead of _WIN32
if(DEFINE STREQUAL "_WIN32")
set(DEFINE WIN32)
endif(DEFINE STREQUAL "_WIN32")
# Set the last define to this one, and set the last check to true, so when #else is encountered, we can do an opposing check
set(LAST_DEF ${DEFINE})
set(LAST_CHECK TRUE)
# If the define is true (it either exists or is a non-false result), the lines following will be checked, otherwise they will be skipped
if(${DEFINE})
set(VALID_LINE TRUE)
else(${DEFINE})
set(VALID_LINE FALSE)
endif(${DEFINE})
else(FOUND_IFDEF)
# If we found a #ifndef on the line, the same thing as #ifdef is done, except with the checks in the opposite direction
if(FOUND_IFNDEF)
# Extract the define
string(REGEX REPLACE "^[ \t]*#[ \t]*ifndef[ \t]*(.*)$" "\\1" DEFINE ${LINE})
# Replace _WIN32 with WIN32, so we can check if the WIN32 variable of CMake is set instead of _WIN32
if(DEFINE STREQUAL "_WIN32")
set(DEFINE WIN32)
endif(DEFINE STREQUAL "_WIN32")
# Set the last define to this one, and set the last check to false, so when #else is encountered, we can do an opposing check
set(LAST_DEF ${DEFINE})
set(LAST_CHECK FALSE)
# If the define is not true (it either doesn't exists or is a false result), the lines following will be checked, otherwise they will be skipped
if(${DEFINE})
set(VALID_LINE FALSE)
else(${DEFINE})
set(VALUE_LINE TRUE)
endif(${DEFINE})
else(FOUND_IFNDEF)
# If we found a #else on the line, we check the last define in the opposite direction
if(FOUND_ELSE)
# When LAST_CHECK is true, we were inside a #ifdef, now act as if we are entering a #ifndef section by doing an opposing check
if(LAST_CHECK)
if(${LAST_DEF})
set(VALID_LINE FALSE)
else(${LAST_DEF})
set(VALID_LINE TRUE)
endif(${LAST_DEF})
# When LAST_CHECK is false, we were inside a #ifndef, now act as if we are entering a #ifdef section by doing an opposing check
else(LAST_CHECK)
if(${LAST_DEF})
set(VALID_LINE TRUE)
else(${LAST_DEF})
set(VALID_LINE FALSE)
endif(${LAST_DEF})
endif(LAST_CHECK)
else(FOUND_ELSE)
# If we found a #endif on the line, we'll assume everything following the line is valid until we meet another one of the above lines
if(FOUND_ENDIF)
set(VALID_LINE TRUE)
else(FOUND_ENDIF)
# If we found a #include on the line, add the entire line to the list of includes unless the line isn't valid
if(FOUND_INCLUDE)
if(VALID_LINE)
append_to_list(INCLUDES_LIST "${LINE}")
endif(VALID_LINE)
endif(FOUND_INCLUDE)
endif(FOUND_ENDIF)
endif(FOUND_ELSE)
endif(FOUND_IFNDEF)
endif(FOUND_IFDEF)
endforeach(LINE)
set(${INCLUDES} ${INCLUDES_LIST})
endmacro(find_includes)
###############################################################################
# calculate_depends(<source filename> <output variable set to TRUE on fail> [<optional output variable for includes>])
#
# This macro is used in most of the src (sub)directories to calculate the
# header file dependencies for the given source file.
###############################################################################
macro(calculate_depends SRC SKIP)
# Temporarily set that we didn't get a 3nd argument before we actually check if we did get one or not
set(CHECK_ANGLE_INCLUDES FALSE)
# Check for a third argument
if(${ARGC} GREATER 2)
set(CHECK_ANGLE_INCLUDES TRUE)
endif(${ARGC} GREATER 2)
# Find all the lines in the given source file that have any form of #include on them, regardless of whitespace, but only if they are valid for the platform we are on
find_includes(${SRC} INCLUDES)
# Reset the list of headers to empty
set(HEADERS)
# Reset skip
set(${SKIP} FALSE)
# Iterate through the strings containing #include (if any)
foreach(INCLUDE ${INCLUDES})
# Extract the filename from the #include line
extract_include_filename(${INCLUDE} FILENAME QUOTE_TYPE)
if(QUOTE_TYPE STREQUAL "angle brackets")
# The following checks will only be done if there was a request for angle includes to be checked
if(CHECK_ANGLE_INCLUDES)
# Find the path of the include file
if(DEFAULT_INCLUDE_DIRS OR WSDK_PATH OR DEFINED $ENV{VCINSTALLDIR})
find_path(FOUND_${FILENAME}_INCLUDE NAMES ${FILENAME} PATHS ${DEFAULT_INCLUDE_DIRS} ${WSDK_PATH}/include $ENV{VCINSTALLDIR}/include ${EXTRA_INCLUDE})
else(DEFAULT_INCLUDE_DIRS OR WSDK_PATH OR DEFINED $ENV{VCINSTALLDIR})
find_path(FOUND_${FILENAME}_INCLUDE NAMES ${FILENAME} ${EXTRA_INCLUDE})
endif(DEFAULT_INCLUDE_DIRS OR WSDK_PATH OR DEFINED $ENV{VCINSTALLDIR})
# If the include file was found, add it's path to the list of include paths, but only if it doesn't already exist and isn't in the defaults for the compiler
if(FOUND_${FILENAME}_INCLUDE)
find_in_list(DEFAULT_INCLUDE_DIRS "${FOUND_${FILENAME}_INCLUDE}" FOUND_IN_DEFAULTS)
if(FOUND_IN_DEFAULTS EQUAL -1)
find_in_list(${ARGV2} "${FOUND_${FILENAME}_INCLUDE}" FOUND_IN_INCLUDES)
if(FOUND_IN_INCLUDES EQUAL -1)
append_to_list(${ARGV2} "${FOUND_${FILENAME}_INCLUDE}")
endif(FOUND_IN_INCLUDES EQUAL -1)
endif(FOUND_IN_DEFAULTS EQUAL -1)
else(FOUND_${FILENAME}_INCLUDE)
set(${SKIP} TRUE)
message("${SRC} needs header file ${FILENAME} but we were unable to locate that header file! Check that the header file is within the search path of your OS.")
endif(FOUND_${FILENAME}_INCLUDE)
endif(CHECK_ANGLE_INCLUDES)
endif(QUOTE_TYPE STREQUAL "angle brackets")
endforeach(INCLUDE)
endmacro(calculate_depends)
###############################################################################
# calculate_libraries(<source filename> <output variable set to TRUE on fail> <output variable for linker flags> <output variable for extra depends>)
#
# This macro is used in most of the module (sub)directories to calculate the
# library dependencies for the given source file.
###############################################################################
macro(calculate_libraries SRC SKIP SRC_LDFLAGS EXTRA_DEPENDS)
# Set up a temporary LDFLAGS for this file
set(THIS_LDFLAGS "${LDFLAGS}")
# Reset extra dependencies
set(EXTRA_DEPENDENCIES)
# Reset library paths
set(LIBRARY_PATHS)
# Reset libraries
set(LIBRARIES)
# Default to not skipping this file
set(${SKIP} FALSE)
# Check to see if there are any lines matching: /* RequiredLibraries: [something] */
read_from_file(${SRC} "/\\\\*[ \t]*RequiredLibraries:[ \t]*.*[ \t]*\\\\*/" REQUIRED_LIBRARIES)
# Iterate through those lines
foreach(REQUIRED_LIBRARY ${REQUIRED_LIBRARIES})
# Strip off the /* RequiredLibraries: and */ from the line
string(REGEX REPLACE "/\\*[ \t]*RequiredLibraries:[ \t]*([^ \t]*)[ \t]*\\*/" "\\1" REQUIRED_LIBRARY ${REQUIRED_LIBRARY})
# Replace all commas with semicolons
string(REGEX REPLACE "," ";" REQUIRED_LIBRARY ${REQUIRED_LIBRARY})
# Iterate through the libraries given
foreach(LIBRARY ${REQUIRED_LIBRARY})
# Locate the library to see if it exists
if(DEFAULT_LIBRARY_DIRS OR WSDK_PATH OR DEFINED $ENV{VCINSTALLDIR})
find_library(FOUND_${LIBRARY}_LIBRARY NAMES ${LIBRARY} PATHS ${DEFAULT_LIBRARY_DIRS} ${WSDK_PATH}/lib $ENV{VCINSTALLDIR}/lib ${EXTRA_INCLUDE})
else(DEFAULT_LIBRARY_DIRS OR WSDK_PATH OR DEFINED $ENV{VCINSTALLDIR})
find_library(FOUND_${LIBRARY}_LIBRARY NAMES ${LIBRARY} ${EXTRA_INCLUDE})
endif(DEFAULT_LIBRARY_DIRS OR WSDK_PATH OR DEFINED $ENV{VCINSTALLDIR})
# If the library was found, we will add it to the linker flags
if(FOUND_${LIBRARY}_LIBRARY)
# Get the path only of the library, to add it to linker flags
get_filename_component(LIBRARY_PATH ${FOUND_${LIBRARY}_LIBRARY} PATH)
if(MSVC)
# For Visual Studio, instead of editing the linker flags, we'll add the library to a separate list of extra dependencies
append_to_list(EXTRA_DEPENDENCIES "${FOUND_${LIBRARY}_LIBRARY}")
else(MSVC)
# For all others, add the library paths and libraries
append_to_list(LIBRARY_PATHS "${LIBRARY_PATH}")
append_to_list(LIBRARIES "${LIBRARY}")
endif(MSVC)
else(FOUND_${LIBRARY}_LIBRARY)
# Skip this file
set(${SKIP} TRUE)
# In the case of the library not being found, we fatally error so CMake stops trying to generate
message("${SRC} needs library ${LIBRARY} but we were unable to locate that library! Check that the library is within the search path of your OS.")
endif(FOUND_${LIBRARY}_LIBRARY)
endforeach(LIBRARY)
endforeach(REQUIRED_LIBRARY)
if(NOT ${SKIP})
# Remove duplicates from the library paths
if(LIBRARY_PATHS)
remove_list_duplicates(LIBRARY_PATHS)
endif(LIBRARY_PATHS)
# Remove diplicates from the libraries
if(LIBRARIES)
remove_list_duplicates(LIBRARIES)
endif(LIBRARIES)
# Iterate through library paths and add them to the linker flags
foreach(LIBRARY_PATH ${LIBRARY_PATHS})
find_in_list(DEFAULT_LIBRARY_DIRS "${LIBRARY_PATH}" FOUND_IN_DEFAULTS)
if(FOUND_IN_DEFAULTS EQUAL -1)
set(THIS_LDFLAGS "${THIS_LDFLAGS} -L${LIBRARY_PATH}")
endif(FOUND_IN_DEFAULTS EQUAL -1)
endforeach(LIBRARY_PATH)
# Iterate through libraries and add them to the linker flags
foreach(LIBRARY ${LIBRARIES})
append_to_list(EXTRA_DEPENDENCIES "${LIBRARY}")
endforeach(LIBRARY)
set(${SRC_LDFLAGS} "${THIS_LDFLAGS}")
set(${EXTRA_DEPENDS} "${EXTRA_DEPENDENCIES}")
endif(NOT ${SKIP})
endmacro(calculate_libraries)
###############################################################################
# check_functions(<source filename> <output variable set to TRUE on success>)
#
# This macro is used in most of the module (sub)directories to calculate the
# fcuntion dependencies for the given source file.
###############################################################################
macro(check_functions SRC SUCCESS)
# Default to true
set(${SUCCESS} TRUE)
# Check to see if there are any lines matching: /* RequiredFunctions: [something] */
read_from_file(${SRC} "/\\\\*[ \t]*RequiredFunctions:[ \t]*.*[ \t]*\\\\*/" REQUIRED_FUNCTIONS)
# Iterate through those lines
foreach(REQUIRED_FUNCTION ${REQUIRED_FUNCTIONS})
# Strip off the /* RequiredFunctions: and */ from the line
string(REGEX REPLACE "/\\*[ \t]*RequiredFunctions:[ \t]*([^ \t]*)[ \t]*\\*/" "\\1" REQUIRED_FUNCTION ${REQUIRED_FUNCTION})
# Replace all commas with semicolons
string(REGEX REPLACE "," ";" REQUIRED_FUNCTION ${REQUIRED_FUNCTION})
# Iterate through the functions given
foreach(FUNCTION ${REQUIRED_FUNCTION})
# Check if the function exists
check_function_exists(${REQUIRED_FUNCTION} HAVE_${REQUIRED_FUNCTION})
# If we don't have the function warn the user and set SUCCESS to FALSE
if(NOT HAVE_${REQUIRED_FUNCTION})
message("${SRC} needs function ${REQUIRED_FUNCTION} but we were unable to locate that function!")
set(${SUCCESS} FALSE)
endif(NOT HAVE_${REQUIRED_FUNCTION})
endforeach(FUNCTION)
endforeach(REQUIRED_FUNCTION)
endmacro(check_functions)
###############################################################################
# add_to_cpack_ignored_files(<item> [TRUE])
#
# A macro to update the environment variable CPACK_IGNORED_FILES which
# contains a list of files for CPack to ignore. If the optional 2nd argument
# of TRUE is given, periods will be converted to \\. for CPack.
###############################################################################
macro(add_to_cpack_ignored_files ITEM)
# Temporary copy of the orignal item
set(REAL_ITEM "${ITEM}")
# If we have 2+ arguments, assume that the second one was something like TRUE (doesn't matter really) and convert periods so they will be \\. for CPack
if(${ARGC} GREATER 1)
string(REPLACE "." "\\\\." REAL_ITEM ${REAL_ITEM})
endif(${ARGC} GREATER 1)
# If the environment variable is already defined, just tack the item to the end
if(DEFINED ENV{CPACK_IGNORED_FILES})
set(ENV{CPACK_IGNORED_FILES} "$ENV{CPACK_IGNORED_FILES};${REAL_ITEM}")
# Otherwise set the environment variable to the item
else(DEFINED ENV{CPACK_IGNORED_FILES})
set(ENV{CPACK_IGNORED_FILES} "${REAL_ITEM}")
endif(DEFINED ENV{CPACK_IGNORED_FILES})
endmacro(add_to_cpack_ignored_files)
+33
View File
@@ -0,0 +1,33 @@
# Find the header files, libs, and executables for gettext
if(NOT WIN32)
find_path(GETTEXT_INCLUDE libintl.h /usr/include /usr/local/include ${EXTRA_INCLUDE})
find_library(GETTEXT_LIBRARY intl PATHS /usr/lib /usr/lib64 ${EXTRA_INCLUDE})
find_program(GETTEXT_MSGFMT msgfmt PATHS /usr/bin/ /usr/local/bin ${EXTRA_INCLUDE})
if(GETTEXT_INCLUDE AND GETTEXT_MSGFMT)
set(GETTEXT_FOUND TRUE)
endif(GETTEXT_INCLUDE AND GETTEXT_MSGFMT)
else(NOT WIN32)
find_path(GETTEXT_INCLUDE libintl.h ${DEFAULT_INCLUDE_DIRS} ${WSDK_PATH}/include $ENV{VCINSTALLDIR}/include gettext/include ${EXTRA_INCLUDE})
find_library(GETTEXT_LIBRARY libintl PATHS ${DEFAULT_LIBRARY_DIRS} ${WSDK_PATH}/lib $ENV{VCINSTALLDIR}/lib gettext/lib ${EXTRA_INCLUDE})
find_library(ICONV_LIBRARY libiconv PATHS ${DEFAULT_LIBRARY_DIRS} ${WSDK_PATH}/lib $ENV{VCINSTALLDIR}/lib gettext/lib ${EXTRA_INCLUDE})
find_library(MINGWEX_LIBRARY libmingwex PATHS ${DEFAULT_LIBRARY_DIRS} ${WSDK_PATH}/lib $ENV{VCINSTALLDIR}/lib gettext/lib ${EXTRA_INCLUDE})
find_library(GCC_LIBRARY libgcc PATHS ${DEFAULT_LIBRARY_DIRS} ${WSDK_PATH}/lib $ENV{VCINSTALLDIR}/lib gettext/lib ${EXTRA_INCLUDE})
find_program(GETTEXT_MSGFMT msgfmt PATHS ${DEFAULT_INCLUDE_DIRS} ${WSDK_PATH}/bin $ENV{VCINSTALLDIR}/bin gettext/bin ${EXTRA_INCLUDE})
if(GETTEXT_INCLUDE AND GETTEXT_MSGFMT AND ICONV_LIBRARY AND MINGWEX_LIBRARY AND GCC_LIBRARY)
set(GETTEXT_FOUND TRUE)
endif(GETTEXT_INCLUDE AND GETTEXT_MSGFMT AND ICONV_LIBRARY AND MINGWEX_LIBRARY AND GCC_LIBRARY)
endif(NOT WIN32)
# If we found everything we need set variables correctly for lang/CMakeLists.txt to use
if(GETTEXT_FOUND)
include_directories("${GETTEXT_INCLUDE}")
set(GETTEXT_MSGFMT_EXECUTABLE ${GETTEXT_MSGFMT})
if(WIN32)
set(GETTEXT_LIBRARIES libiconv libintl libmingwex libgcc)
else(WIN32)
if(GETTEXT_LIBRARY)
set(GETTEXT_LIBRARIES ${GETTEXT_LIBRARY})
endif(GETTEXT_LIBRARY)
endif(WIN32)
endif(GETTEXT_FOUND)
+5
View File
@@ -0,0 +1,5 @@
# This file is external to the read_from_file macro in Anope.cmake in order to
# get around a possible memory leak in older versions of CMake.
file(READ "${FILE}" RESULT)
message("${RESULT}")
+8
View File
@@ -0,0 +1,8 @@
#include <sys/eventfd.h>
int main()
{
int i = eventfd(0, EFD_NONBLOCK);
return i >= 0 ? 1 : 0;
}
-1526
View File
File diff suppressed because it is too large Load Diff
Vendored
-1662
View File
File diff suppressed because it is too large Load Diff
Vendored
-8159
View File
File diff suppressed because it is too large Load Diff
-290
View File
@@ -1,290 +0,0 @@
dnl autoconf.in for Services.
dnl
dnl Anope (c) 2003-2008 Anope team
dnl Contact us at team@anope.org
dnl This program is free but copyrighted software; see the file COPYING for
dnl details.
dnl Based heavily on the Unreal configure.in script, and extra thanks to
dnl codemastr from UnrealIRCD.
AC_INIT
# Clear out any CFLAGS (cept -g) the os is using, usually -g -O2
CFLAGS="-g"
# If no bindir, we tell him to run ./Config.
if test "${with_instdir+set}" != set; then
echo "You might want to run ./Config or provide some parameters to this script."
echo "./configure --help for information about this script"
exit 0
fi
AC_CONFIG_SRCDIR([src/actions.c])
AC_CONFIG_HEADER(include/sysconf.h)
AC_PROG_CC
if test "$ac_cv_c_compiler_gnu" = "yes"; then
# CFLAGS="$CFLAGS -funsigned-char"
AC_CACHE_CHECK(if gcc has a working -pipe, ac_cv_pipe, [
save_cflags="$CFLAGS"
CFLAGS="$CFLAGS -pipe"
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],[ac_cv_pipe="yes"],[ac_cv_pipe="no"])
CFLAGS="$save_cflags"
])
if test "$ac_cv_pipe" = "yes"; then
CFLAGS="-pipe $CFLAGS"
fi
fi
dnl CFLAGS="$CFLAGS -W -Wall"
AC_PATH_PROG(RM,rm)
AC_PATH_PROG(CP,cp)
AC_PATH_PROG(TOUCH,touch)
AC_PATH_PROG(INSTALL,install)
AC_CHECK_LIB(nsl,inet_ntoa,ANOPELIBS="$ANOPELIBS-lnsl ")
AC_CHECK_LIB(socket, socket,ANOPELIBS="$ANOPELIBS-lsocket ")
AC_CHECK_LIB(resolv, res_query,ANOPELIBS="$ANOPELIBS-lresolv ")
AC_CHECK_LIB(bsd, revoke,ANOPELIBS="$ANOPELIBS-lbsd ")
dnl Does this platform require array notation to assign to a va_list?
dnl If cross-compiling, we assume va_list is "normal". If this breaks
dnl you, set ac_cv_valistisarray=true and maybe define HAVE_VA_LIST_AS_ARRAY
dnl also just to be sure.
dnl NOTE: this autoconf test is taken from mozilla: www.mozilla.org.
AC_MSG_CHECKING(whether va_list assignments need array notation)
AC_CACHE_VAL(ac_cv_valistisarray,
[AC_RUN_IFELSE([AC_LANG_SOURCE([[#include <stdlib.h>
#include <stdarg.h>
void foo(int i, ...) {
va_list ap1, ap2;
va_start(ap1, i);
ap2 = ap1;
if (va_arg(ap2, int) != 123 || va_arg(ap1, int) != 123) { exit(1); }
va_end(ap1); va_end(ap2);
}
int main()
{ foo(0, 123); return(0); }]])],[ac_cv_valistisarray=false],[ac_cv_valistisarray=true],[ac_cv_valistisarray=false])])
if test "$ac_cv_valistisarray" = true ; then
AC_DEFINE(HAVE_VA_LIST_AS_ARRAY,[1],[va_list as array])
AC_MSG_RESULT(yes)
else
AC_MSG_RESULT(no)
fi
DIS_MYSQL=" MySQL: No"
AC_ARG_WITH(mysql, [ --without-mysql Do not use MySQL or attempt to find it],,[
AC_ARG_WITH(mysqlconfig-path, [ --with-mysqlconfig-path=PATH Complete path to the mysql_config executable],
mysql_config_path="$withval", mysql_config_path="")
MYSQLCONF=""
if test "$mysql_config_path" != ""; then
if test -x "$mysql_config_path"; then
MYSQLCONF="$mysql_config_path"
echo "checking for mysql_config... $MYSQLCONF" >&6
fi
fi
if test "$MYSQLCONF" = ""; then
AC_PATH_PROG(MYSQLCONF,mysql_config, "")
fi
if test "$MYSQLCONF" != ""; then
hold_cflags="$CFLAGS"
hold_ldflags="$LDFLAGS"
if test "$MYSQL_CFLAGS" = ""; then
MYSQL_CFLAGS="`$MYSQLCONF --cflags`"
fi
if test "$MYSQL_LDFLAGS" = ""; then
MYSQL_LDFLAGS="`$MYSQLCONF --libs`"
fi
CFLAGS="$CFLAGS $MYSQL_CFLAGS"
LDFLAGS="$LDFLAGS $MYSQL_LDFLAGS"
echo $ECHO_N "checking if mysql_config produces valid values... $ECHO_C" >&6
AC_TRY_RUN([
#include <mysql.h>
int main()
{
MYSQL *mysql = mysql_init(0);
return 0;
}
], ac_cv_mysql_valid=yes, ac_cv_mysql_valid=no)
echo $ac_cv_mysql_valid >&6
if test "$ac_cv_mysql_valid" = "yes"; then
DIS_MYSQL=" MySQL: Yes"
else
CFLAGS="$hold_cflags"
LDFLAGS="$hold_ldflags"
fi
fi
])
AC_MSG_CHECKING(whether this is a bit or little endian system)
AC_TRY_RUN([
int main()
{
short s = 1;
short* ptr = &s;
unsigned char c = *((char*)ptr);
return c;
}
]
, AC_DEFINE(BIG_ENDIAN)
AC_MSG_RESULT(big)
, AC_DEFINE(LITTLE_ENDIAN)
AC_MSG_RESULT(little)
)
AC_SUBST(ANOPELIBS)
AC_SUBST(LDFLAGS)
AC_CHECK_HEADER(sys/types.h,AC_DEFINE(HAS_SYS_TYPES_H,1,"Has sys/types.h"))
dnl module checking based on Unreal's module checking code
AC_DEFUN(AC_ENABLE_DYN,
[
AC_CHECK_FUNC(dlopen,, AC_CHECK_LIB(dl,dlopen,[
ANOPELIBS="$ANOPELIBS -ldl"
],
[
AC_ERROR("dlopen() is required for Anope to be compiled and used. Sorry.")
]))
hold_cflags=$CFLAGS
CFLAGS="$CFLAGS -export-dynamic"
AC_CACHE_CHECK(if we need the -export-dynamic flag, ac_cv_export_dynamic, [
AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[int i;]])],[ac_cv_export_dynamic=yes],[ac_cv_export_dynamic=no])])
if test "$ac_cv_export_dynamic" = "no"; then
CFLAGS=$hold_cflags
fi
AC_CACHE_CHECK(for compiler option to produce PIC,ac_cv_pic,[
if test "$ac_cv_c_compiler_gnu" = "yes"; then
ac_cv_pic="-fPIC -DPIC -shared"
case `uname -s` in
Darwin*[)]
ac_cv_pic="-bundle -flat_namespace -undefined suppress"
;;
HP-UX*[)]
ac_cv_pic="-fPIC"
;;
esac
else
case `uname -s` in
SunOS*[)]
ac_cv_pic="-KPIC -DPIC -G"
;;
esac
fi
])
if test "$ac_cv_c_compiler_gnu" = "yes"; then
case `uname -s` in
Darwin*[)]
SHARED="-bundle -flat_namespace -undefined suppress"
AC_SUBST(SHARED)
;;
*[)]
SHARED="-shared"
AC_SUBST(SHARED)
;;
esac
fi
AC_CACHE_CHECK(if your system prepends an underscore on symbols,ac_cv_underscore,[
cat >uscore.c << __EOF__
int main() {
return 0;
}
__EOF__
$CC -o uscore $CFLAGS uscore.c 1>&5
if test -z "`strings -a uscore |grep '^_main$'`"; then
ac_cv_underscore=no
else
ac_cv_underscore=yes
fi
rm -f uscore uscore.c
])
if test "$ac_cv_underscore" = "yes"; then
AC_DEFINE(DL_PREFIX,"_","Underscore needed for dlopen")
else
AC_DEFINE(DL_PREFIX,"","No prefix needed for dlopen")
fi
MODULEFLAGS=$ac_cv_pic
AC_SUBST(MODULEFLAGS)
])
AC_ENABLE_DYN
anope_CHECK_TYPE_SIZES
AC_CHECK_HEADER(strings.h,AC_DEFINE(HAVE_STRINGS_H,1,""))
AC_CHECK_HEADER(sys/select.h,AC_DEFINE(HAVE_SYS_SELECT_H,1,""))
AC_CHECK_FUNCS(backtrace,AC_DEFINE(HAVE_BACKTRACE,1))
AC_CHECK_FUNCS(stricmp,AC_DEFINE(HAVE_STRICMP,1))
AC_CHECK_FUNCS(strcasecmp,AC_DEFINE(HAVE_STRCASECMP,1))
AC_CHECK_FUNCS(gettimeofday,AC_DEFINE(HAVE_GETTIMEOFDAY,1))
AC_CHECK_FUNCS(setgrent,AC_DEFINE(HAVE_SETGRENT,1))
AC_CHECK_FUNCS(umask,AC_DEFINE(HAVE_UMASK,1))
AC_CHECK_FUNCS(fork,AC_DEFINE(HAVE_FORK,1))
AC_CHECK_FUNCS(gethostbyname,AC_DEFINE(HAVE_GETHOSTBYNAME,1))
AC_CHECK_FUNCS(gethostbyname_r,AC_DEFINE(HAVE_GETHOSTBYNAME_R,1))
AC_CHECK_FUNCS(strlcpy,AC_DEFINE(HAVE_STRLCPY,1))
AC_CHECK_FUNCS(strlcat,AC_DEFINE(HAVE_STRLCAT,1))
AC_ARG_WITH(rungroup, [ --with-rungroup=group Specify the rungroup for anope], [
AC_DEFINE_UNQUOTED(RUNGROUP,"$withval","Run group")
RUNGROUP=$withval
])
AC_SUBST(RUNGROUP)
dnl AC_DEFINE_UNQUOTED(MYOSNAME,"`uname -a`","uname")
AC_ARG_WITH(permissions, [ --with-permissions=permissions Specify the default permissions for anope], AC_DEFINE_UNQUOTED(DEFUMASK,$withval,"Default umask permissions"), AC_DEFINE(DEFUMASK, 007,"Default umask Permissions"))
AC_ARG_WITH(instdir, [ --with-instdir=instdir Specify the default install dir for anope], [
INSTDIR=$withval
])
MAKEBIN=`pwd`/run-cc.pl
AC_ARG_WITH(makebin, [--with-makebin=run-cc.pl Specify the default make binary to use],[MAKEBIN=$withval])
AC_SUBST(INSTDIR)
AC_SUBST(MAKEBIN)
AC_ARG_WITH(optimization, [ --with-optimization=1|2|3|4|5 Specify the optimization level], [
CFLAGS="$CFLAGS -O$withval"
])
AC_ARG_WITH(debugsym, [ --with-debugsym Include debugging symbols], [
CFLAGS="$CFLAGS -g"
])
AC_CONFIG_FILES( \
Makefile \
src/bin/anoperc \
)
AC_OUTPUT
cat <<EOT
$DIS_MODULES
$DIS_MYSQL
All done! Now run "make" (or possibly "gmake") to compile Anope.
See the INSTALL, README and FAQ files if you have any problems.
EOT
+1 -1
View File
@@ -1,6 +1,6 @@
# Only install example.chk and example.conf from this directory
# NOTE: I would've had this just find all files in the directory, but that would include files not needed (like this file)
set(DATA example.chk example.conf)
set(DATA example.chk botserv.example.conf example.conf hostserv.example.conf modules.example.conf operserv.example.conf chanserv.example.conf global.example.conf memoserv.example.conf nickserv.example.conf)
install(FILES ${DATA}
DESTINATION data
)
+249
View File
@@ -0,0 +1,249 @@
/*
* Example configuration file for BotServ.
*/
/*
* First, create the service.
*/
service
{
/*
* The name of the BotServ client
*/
nick = "BotServ"
/*
* The username of the BotServ client.
*/
user = "services"
/*
* The hostname of the BotServ client.
*/
host = "services.host"
/*
* The realname of the BotServ client.
*/
gecos = "Bot Service"
/*
* The modes this client should use.
* Do not modify this unless you know what you are doing.
*
* These modes are very IRCd specific. If left commented, sane defaults
* are used based on what protocol module you have loaded.
*
* Note that setting this option incorrectly could potentially BREAK some if
* not all usefulness of the client. We will not support you if this client is
* unable to do certain things if this option is enabled.
*/
#modes = "+o"
/*
* An optional comma separated list of channels this service should join. Outside
* of log channels this is not very useful, as the service will just idle in the
* specified channels, and will not accept any types of commands.
*
* Prefixes may be given to the channels in the form of mode character or prefix symbol.
*/
#channels = "@#services,#mychan"
}
/*
* Core BotServ module.
*
* Provides essential functionality for BotServ.
*/
module { name = "botserv" }
/*
* Configuration for BotServ provided by bs_main.
*/
botserv
{
/*
* The name of the client that should be BotServ.
*/
name = "BotServ"
/*
* The default bot options for newly registered channels. Note that changing these options
* will have no effect on channels which are already registered. The list must be separated
* by spaces.
*
* The options are:
* - dontkickops: Channel operators will be protected against BotServ kicks
* - dontkickvoices: Voiced users will be protected against BotServ kicks
* - greet: The channel's BotServ bot will greet incoming users that have set a greet
* in their NickServ settings
* - fantasy: Enables the use of BotServ fantasy commands in the channel
*
* This directive is optional, if left blank, there will be no defaults.
*/
defaults="greet fantasy"
/*
* The minimum number of users there must be in a channel before the bot joins it. The best
* value for this setting is 1 or 2. This can be 0, the service bots will not part unless
* specifically unassigned, and will keep the channel open.
*/
minusers = 1
/*
* The maximum number of entries a single bad words list can have. Setting it too high can
* reduce performance slightly.
*/
badwordsmax = 32
/*
* The amount of time that data for a user is valid in BotServ. If the data exceeds this time,
* it is reset or deleted depending on the case. Do not set it too high, otherwise your
* resources will be slightly affected.
*/
keepdata = 10m
/*
* The bots are currently not affected by any modes or bans when they try to join a channel.
* But some people may want to make it act like a real bot, that is, for example, remove all
* the bans affecting the bot before joining the channel, remove a ban that affects the bot
* set by a user when it is in the channel, and so on. Since it consumes a bit more CPU
* time, you should not enable this on larger networks.
*
* This directive is optional.
*/
#smartjoin = yes
/*
* If set, the bots will use a kick reason that does not state the word when it is kicking.
* This is especially useful if you have young people on your network.
*
* This directive is optional.
*/
gentlebadwordreason = yes
/*
* If set, BotServ will use case sensitive checking for badwords.
*
* This directive is optional.
*/
#casesensitive = yes
/*
* Defines the prefixs for fantasy commands in channels. One of these characters will have to be prepended
* to all fantasy commands. If you choose "!", for example, fantasy commands will be "!kick",
* "!op", etc. This directive is optional, if left out, the default fantasy character is "!".
*/
#fantasycharacter = "!."
}
/*
* Core BotServ commands.
*
* In Anope modules can provide (multiple) commands, each of which has a unique command name. Once these modules
* are loaded you can then configure the commands to be added to any client you like with any name you like.
*
* Additionally, you may provide a permission name that must be in the opertype of users executing the command.
*
* Sane defaults are provided below that do not need to be edited unless you wish to change the default behavior.
*/
/* Give it a help command */
command { service = "BotServ"; name = "HELP"; command = "generic/help"; }
/*
* bs_assign
*
* Provides the commands botserv/assign and botserv/unassign.
*
* Used for assigning and unassigning bots to channels.
*/
module { name = "bs_assign" }
command { service = "BotServ"; name = "ASSIGN"; command = "botserv/assign"; }
command { service = "BotServ"; name = "UNASSIGN"; command = "botserv/unassign"; }
/*
* bs_autoassign
*
* Allows service bots to be automatically assigned to channels upon registration.
*/
#module { name = "bs_autoassign" }
bs_autoassign
{
/*
* Automatically assign ChanServ to channels upon registration.
*/
bot = "ChanServ"
}
/*
* bs_badwords
*
* Provides the command botserv/badwords.
*
* Used for controlling the channel badword list.
*/
module { name = "bs_badwords" }
command { service = "BotServ"; name = "BADWORDS"; command = "botserv/badwords"; }
/*
* bs_bot
*
* Provides the command botserv/bot.
*
* Used for administrating BotServ bots.
*/
module { name = "bs_bot" }
command { service = "BotServ"; name = "BOT"; command = "botserv/bot"; }
/*
* bs_botlist
*
* Provides the command botserv/botlist.
*
* Used for listing all available bots.
*/
module { name = "bs_botlist" }
command { service = "BotServ"; name = "BOTLIST"; command = "botserv/botlist"; }
/*
* bs_control
*
* Provides the commands botserv/act and botserv/say.
*
* Used for making the bot message a channel.
*/
module { name = "bs_control" }
command { service = "BotServ"; name = "ACT"; command = "botserv/act"; }
command { service = "BotServ"; name = "SAY"; command = "botserv/say"; }
/*
* bs_info
*
* Provides the command botserv/info.
*
* Used for getting information on bots or channels.
*/
module { name = "bs_info" }
command { service = "BotServ"; name = "INFO"; command = "botserv/info"; }
/*
* bs_kick
*
* Provides the command botserv/kick.
*
* Used for configuring what bots should kick for.
*/
module { name = "bs_kick" }
command { service = "BotServ"; name = "KICK"; command = "botserv/kick"; }
/*
* bs_set
*
* Provides the command botserv/set.
*
* Used for setting options such as kickers and fantasy replies.
*/
module { name = "bs_set" }
command { service = "BotServ"; name = "SET"; command = "botserv/set"; }
File diff suppressed because it is too large Load Diff
+9 -6
View File
@@ -1,7 +1,7 @@
#!/bin/sh
# Crontab script for Anope
#
#
# To know how to install the crontab, read the INSTALL file.
###############################################################
@@ -9,7 +9,10 @@
###############################################################
# Anope binary directory
ANOPATH=/home/ircd/services/
ANOPATH=/home/ircd/services/bin
# Anope data directory
ANODATA=/home/ircd/services/data
# Name of the pid file
ANOPIDF=services.pid
@@ -31,14 +34,14 @@ ANOPID=
cd $ANOPATH
if [ -f $ANOPIDF ]
if [ -f "$ANODATA/$ANOPIDF" ]
then
ANOPID=`cat $ANOPIDF`
ANOPID=`cat "$ANODATA/$ANOPIDF"`
if [ `ps auwx | grep $ANOPROG | grep $ANOPID | grep -v -c grep` = 1 ]
then
exit
exit
fi
rm -f $ANOPIDF
rm -f "$ANODATA/$ANOPIDF"
fi
./$ANOPROG $ANOARGS
+721 -1059
View File
File diff suppressed because it is too large Load Diff
+124
View File
@@ -0,0 +1,124 @@
/*
* Example configuration file for Global.
*/
/*
* First, create the service.
*/
service
{
/*
* The name of the Global client
*/
nick = "Global"
/*
* The username of the Global client.
*/
user = "services"
/*
* The hostname of the Global client.
*/
host = "services.host"
/*
* The realname of the Global client.
*/
gecos = "Global Noticer"
/*
* The modes this client should use.
* Do not modify this unless you know what you are doing.
*
* These modes are very IRCd specific. If left commented, sane defaults
* are used based on what protocol module you have loaded.
*
* Note that setting this option incorrectly could potentially BREAK some if
* not all usefulness of the client. We will not support you if this client is
* unable to do certain things if this option is enabled.
*/
#modes = "+o"
/*
* An optional comma separated list of channels this service should join. Outside
* of log channels this is not very useful, as the service will just idle in the
* specified channels, and will not accept any types of commands.
*
* Prefixes may be given to the channels in the form of mode character or prefix symbol.
*/
#channels = "@#services,#mychan"
}
/*
* Core Global module.
*
* Provides essential functionality for Global.
*/
module { name = "global" }
/*
* Configuration for Global provided by gl_main.
*/
global
{
/*
* The name of the client that should be Global.
*/
name = "Global"
/*
* If set, Services will send global messages on starting up and shutting
* down/restarting.
*
* This directive is optional.
*/
#globaloncycle = yes
/*
* This is the global message that will be sent when Services are being
* shutdown/restarted. This directive is only required if you enable
* globaloncycle above.
*/
globaloncycledown = "Services are restarting, they will be back shortly - please be good while we're gone"
/*
* This is the global message that will be sent when Services (re)join the
* network. This directive is only required if you enable globaloncycle above.
*/
globaloncycleup = "Services are now back online - have a nice day"
/*
* If set, Services will hide the IRC operator's nick in a global
* message/notice.
*
* This directive is optional.
*/
#anonymousglobal = yes
}
/*
* Core Global commands.
*
* In Anope modules can provide (multiple) commands, each of which has a unique command name. Once these modules
* are loaded you can then configure the commands to be added to any client you like with any name you like.
*
* Additionally, you may provide a permission name that must be in the opertype of users executing the command.
*
* Sane defaults are provided below that do not need to be edited unless you wish to change the default behavior.
*/
/* Give it a help command */
command { service = "Global"; name = "HELP"; command = "generic/help"; }
/*
* gl_global
*
* Provides the command global/global.
*
* Used for sending a message to every online user.
*/
module { name = "gl_global" }
command { service = "OperServ"; name = "GLOBAL"; command = "global/global"; permission = "operserv/global"; }
command { service = "Global"; name = "GLOBAL"; command = "global/global"; permission = "global/global"; }
+200
View File
@@ -0,0 +1,200 @@
/*
* Example configuration file for HostServ.
*/
/*
* First, create the service.
*/
service
{
/*
* The name of the HostServ client
*/
nick = "HostServ"
/*
* The username of the HostServ client.
*/
user = "services"
/*
* The hostname of the HostServ client.
*/
host = "services.host"
/*
* The realname of the HostServ client.
*/
gecos = "vHost Service"
/*
* The modes this client should use.
* Do not modify this unless you know what you are doing.
*
* These modes are very IRCd specific. If left commented, sane defaults
* are used based on what protocol module you have loaded.
*
* Note that setting this option incorrectly could potentially BREAK some if
* not all usefulness of the client. We will not support you if this client is
* unable to do certain things if this option is enabled.
*/
#modes = "+o"
/*
* An optional comma separated list of channels this service should join. Outside
* of log channels this is not very useful, as the service will just idle in the
* specified channels, and will not accept any types of commands.
*
* Prefixes may be given to the channels in the form of mode character or prefix symbol.
*/
#channels = "@#services,#mychan"
}
/*
* Core HostServ module.
*
* Provides essential functionality for HostServ.
*/
module { name = "hostserv" }
/*
* Configuration for HostServ provided by hs_main.
*/
hostserv
{
/*
* The name of the client that should be HostServ.
*/
name = "HostServ"
/*
* The characters allowed in a vhost. Changing this is not recommended unless
* you know for sure your IRCd supports whatever characters you are wanting to use.
* Telling services to set a vhost containing characters your IRCd disallows could
* potentially break the IRCd and/or Services. Note these are 1 byte characters, so
* UTF-8 characters will not work.
*
* It is recommended you DON'T change this.
*/
vhost_chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.-"
/*
* If set, allows vhosts to not contain dots (.).
* Newer IRCds generally do not have a problem with this, but the same warning as
* vhost_chars applies.
*
* It is recommended you DON'T change this.
*/
allow_undotted_vhosts = false
/*
* The characters that are not allowed to be at the very beginning or very ending
* of a vhost. The same warning as vhost_chars applies.
*
* It is recommended you DON'T change this.
*/
disallow_start_or_end = ".-"
}
/*
* Core HostServ commands.
*
* In Anope modules can provide (multiple) commands, each of which has a unique command name. Once these modules
* are loaded you can then configure the commands to be added to any client you like with any name you like.
*
* Additionally, you may provide a permission name that must be in the opertype of users executing the command.
*
* Sane defaults are provided below that do not need to be edited unless you wish to change the default behavior.
*/
/* Give it a help command */
command { service = "HostServ"; name = "HELP"; command = "generic/help"; }
/*
* hs_del
*
* Provides the commands hostserv/del and hostserv/delall.
*
* Used for removing users vHosts.
*/
module { name = "hs_del" }
command { service = "HostServ"; name = "DEL"; command = "hostserv/del"; permission = "hostserv/del"; }
command { service = "HostServ"; name = "DELALL"; command = "hostserv/delall"; permission = "hostserv/del"; }
/*
* hs_group
*
* Provides the command hostserv/group.
*
* Used for grouping one vHost to many nicks.
*/
module { name = "hs_group" }
command { service = "HostServ"; name = "GROUP"; command = "hostserv/group"; }
/*
* hs_list
*
* Provides the command hostserv/list.
*
* Used for listing actively set vHosts.
*/
module { name = "hs_list" }
command { service = "HostServ"; name = "LIST"; command = "hostserv/list"; permission = "hostserv/list"; }
/*
* hs_off
*
* Provides the command hostserv/off.
*
* Used for turning off your vHost.
*/
module { name = "hs_off" }
command { service = "HostServ"; name = "OFF"; command = "hostserv/off"; }
/*
* hs_on
*
* Provides the command hostserv/on.
*
* Used for turning on your vHost.
*/
module { name = "hs_on" }
command { service = "HostServ"; name = "ON"; command = "hostserv/on"; }
/*
* hs_request
*
* Provides the commands hostserv/request, hostserv/active, hostserv/reject, and hostserv/waiting.
*
* Used to manage vhosts requested by users.
*/
module { name = "hs_request" }
command { service = "HostServ"; name = "REQUEST"; command = "hostserv/request"; }
command { service = "HostServ"; name = "ACTIVATE"; command = "hostserv/activate"; permission = "hostserv/set"; }
command { service = "HostServ"; name = "REJECT"; command = "hostserv/reject"; permission = "hostserv/set"; }
command { service = "HostServ"; name = "WAITING"; command = "hostserv/waiting"; permission = "hostserv/set"; }
hs_request
{
/*
* If set, Services will send a memo to the user requesting a vHost when it's been
* approved or rejected.
*/
#memouser = yes
/*
* If set, Services will send a memo to all Services staff when a new vHost is requested.
*/
#memooper = yes
}
/*
* hs_set
*
* Provides the commands hostserv/set and hostserv/setall.
*
* Used for setting users vhosts.
*/
module { name = "hs_set" }
command { service = "HostServ"; name = "SET"; command = "hostserv/set"; permission = "hostserv/set"; }
command { service = "HostServ"; name = "SETALL"; command = "hostserv/setall"; permission = "hostserv/set"; }
+237
View File
@@ -0,0 +1,237 @@
/*
* Example configuration file for MemoServ.
*/
/*
* First, create the service.
*/
service
{
/*
* The name of the MemoServ client
*/
nick = "MemoServ"
/*
* The username of the MemoServ client.
*/
user = "services"
/*
* The hostname of the MemoServ client.
*/
host = "services.host"
/*
* The realname of the MemoServ client.
*/
gecos = "Memo Service"
/*
* The modes this client should use.
* Do not modify this unless you know what you are doing.
*
* These modes are very IRCd specific. If left commented, sane defaults
* are used based on what protocol module you have loaded.
*
* Note that setting this option incorrectly could potentially BREAK some if
* not all usefulness of the client. We will not support you if this client is
* unable to do certain things if this option is enabled.
*/
#modes = "+o"
/*
* An optional comma separated list of channels this service should join. Outside
* of log channels this is not very useful, as the service will just idle in the
* specified channels, and will not accept any types of commands.
*
* Prefixes may be given to the channels in the form of mode character or prefix symbol.
*/
#channels = "@#services,#mychan"
}
/*
* Core MemoServ module.
*
* Provides essential functionality for MemoServ.
*/
module { name = "memoserv" }
/*
* Configuration for MemoServ provided by ms_main.
*/
memoserv
{
/*
* The name of the client that should be MemoServ. Clients are configured
* with the service blocks.
*/
name = "MemoServ"
/*
* The maximum number of memos a user is allowed to keep by default. Normal users may set the
* limit anywhere between 0 and this value. Services Admins can change it to any value or
* disable it.
*
* This directive is optional, but recommended. If not set, the limit is disabled
* by default, and normal users can set any limit they want.
*/
maxmemos = 20
/*
* The delay between consecutive uses of the MemoServ SEND command. This can help prevent spam
* as well as denial-of-service attacks from sending large numbers of memos and filling up disk
* space (and memory). The default 3-second wait means a maximum average of 150 bytes of memo
* per second per user under the current IRC protocol.
*
* This directive is optional, but recommended.
*/
senddelay = 3s
/*
* Allow the use of memo receipts for the following groups:
*
* 1 - Opers Only
* 2 - Everybody
*
* This directive is optional.
*/
#memoreceipt = 1
}
/*
* Core MemoServ commands.
*
* In Anope modules can provide (multiple) commands, each of which has a unique command name. Once these modules
* are loaded you can then configure the commands to be added to any client you like with any name you like.
*
* Additionally, you may provide a permission name that must be in the opertype of users executing the command.
*
* Sane defaults are provided below that do not need to be edited unless you wish to change the default behavior.
*/
/* Give it a help command */
command { service = "MemoServ"; name = "HELP"; command = "generic/help"; }
/*
* ms_cancel
*
* Provides the command memoserv/cancel.
*
* Used to cancel memos already sent but not yet read.
*/
module { name = "ms_cancel" }
command { service = "MemoServ"; name = "CANCEL"; command = "memoserv/cancel"; }
/*
* ms_check
*
* Provides the command memoserv/check.
*
* Used to check if a sent memo has been read.
*/
module { name = "ms_check" }
command { service = "MemoServ"; name = "CHECK"; command = "memoserv/check"; }
/*
* ms_del
*
* Provides the command memoserv/del.
*
* Used to delete your memos.
*/
module { name = "ms_del" }
command { service = "MemoServ"; name = "DEL"; command = "memoserv/del"; }
/*
* ms_ignore
*
* Provides the command memoserv/ignore.
*
* Used to ignore memos from specific users.
*/
module { name = "ms_ignore" }
command { service = "MemoServ"; name = "IGNORE"; command = "memoserv/ignore"; }
/*
* ms_info
*
* Provides the command memoserv/info.
*
* Used to show memo related information about an account or a channel.
*/
module { name = "ms_info" }
command { service = "MemoServ"; name = "INFO"; command = "memoserv/info"; }
/*
* ms_list
*
* Provides the command memoserv/list.
*
* Used to list your current memos.
*/
module { name = "ms_list" }
command { service = "MemoServ"; name = "LIST"; command = "memoserv/list"; }
/*
* ms_read
*
* Provides the command memoserv/read.
*
* Used to read your memos.
*/
module { name = "ms_read" }
command { service = "MemoServ"; name = "READ"; command = "memoserv/read"; }
/*
* ms_rsend
*
* Provides the command memoserv/rsend.
*
* Used to send a memo requiring a receipt be sent back once it is read.
*
* Requires configuring memoserv:memoreceipt.
*/
#module { name = "ms_rsend" }
#command { service = "MemoServ"; name = "RSEND"; command = "memoserv/rsend"; }
/*
* ms_send
*
* Provides the command memoserv/send
*
* Used to send memos.
*/
module { name = "ms_send" }
command { service = "MemoServ"; name = "SEND"; command = "memoserv/send"; }
/*
* ms_sendall
*
* Provides the command memoserv/sendall
*
* Used to send a mass memo to every registered user.
*/
module { name = "ms_sendall" }
command { service = "MemoServ"; name = "SENDALL"; command = "memoserv/sendall"; permission = "memoserv/sendall"; }
/*
* ms_set
*
* Provides the command memoserv/set.
*
* Used to set settings such as how you are notified of new memos, and your memo limit.
*/
module { name = "ms_set" }
command { service = "MemoServ"; name = "SET"; command = "memoserv/set"; }
/*
* ms_staff
*
* Provides the command memoserv/staff.
*
* Used to send a memo to all registered staff members.
*/
module { name = "ms_staff" }
command { service = "MemoServ"; name = "STAFF"; command = "memoserv/staff"; permission = "memoserv/staff"; }
+396
View File
@@ -0,0 +1,396 @@
/*
* [OPTIONAL] Non-Core Modules
*
* The following blocks are used to load all non-core modules, including 3rd-party modules.
* Modules can be prevented from loading by commenting out the line, other modules can be added by
* adding a module block. These modules will be loaded prior to Services connecting to your network.
*/
/*
* help
*
* Provides commands generic/help
*
* Is a generic help command that can be used with any client.
*/
module { name = "help" }
/*
* m_dnsbl
*
* Allows configurable DNS blacklists to check connecting users against. If a user
* is found on the blacklist they will be immediately banned. This is a crucial module
* to prevent bot attacks.
*/
module { name = "m_dnsbl" }
m_dnsbl
{
/*
* If set, Services will check clients against the DNSBLs when services connect to its uplink.
* This is not recommended, and on large networks will open a very large amount of DNS queries.
* Whilst services are not drastically affected by this, your nameserver/DNSBL might care.
*/
check_on_connect = no
/*
* If set, Services will check clients when coming back from a netsplit. This can cause a large number
* of DNS queries open at once. Whilst services are not drastically affected by this, your nameserver/DNSBL
* might care.
*/
check_on_netburst = no
/*
* If set, OperServ will add clients found in the DNSBL to the akill list. Without it, OperServ simply sends
* a timed G/K-line to the IRCd and forgets about it. Can be useful if your akill list is being fill up by bots.
*/
add_to_akill = yes
}
blacklist
{
/* Name of the blacklist */
name = "rbl.efnetrbl.org"
/* How long to set the ban for */
time = 4h
/* Reason for akill.
* %n is the nick of the user
* %u is the ident/username of the user
* %g is the realname of the user
* %h is the hostname of the user
* %i is the IP of the user
* %r is the reason (configured below). Will be nothing if not configured.
* %N is the network name set in networkinfo:networkname
*/
reason = "You are listed in the efnet RBL, visit http://rbl.efnetrbl.org/?i=%i for info"
/* Replies to ban and their reason. If this is totally ommited all replies get banned */
1 = "Open Proxy"
/* Don't ban for result 2 or 3 */
#2 = "spamtrap666"
#3 = "spamtrap50"
4 = "TOR"
5 = "Drones / Flooding"
}
blacklist
{
name = "dnsbl.dronebl.org"
time = 4h
reason = "You have a host listed in the DroneBL. For more information, visit http://dronebl.org/lookup_branded.do?ip=%i&network=%N"
}
/*
* m_helpchan
*
* Gives users who are op in the specified help channel usermode +h (helpop).
*/
#module { name = "m_helpchan" }
m_helpchan
{
helpchannel = "#help"
}
/*
* m_ldap
*
* This module allows other modules to use LDAP. By itself, this module does nothing useful.
*/
#module { name = "m_ldap" }
ldap
{
server = "ldap://127.0.0.1"
port = 389
admin_binddn = "cn=Manager,dc=anope,dc=org"
admin_password = "secret"
}
/*
* m_ldap_authentication
*
* This module allows many commands such as IDENTIFY, RELEASE, RECOVER, GHOST, etc. use
* LDAP to authenticate users. Requires m_ldap.
*/
#module { name = "m_ldap_authentication" }
m_ldap_authentication
{
/*
* The distinguished name we should bind to when a user tries to identify.
*/
binddn = "ou=users,dc=anope,dc=org"
/*
* The object class used by LDAP to store user account information.
* Used for adding new users to LDAP if disable_ns_register is false
*/
object_class = "anopeUser"
/*
* The attribute value used for account names.
*/
username_attribute = "uid"
/*
* The attribute value used for email addresses.
* This directive is optional.
*/
email_attribute = "email"
/*
* The attribute value used for passwords.
* Used when registering new accounts in LDAP.
*/
password_attribute = "userPassword"
/*
* Enable to have this module disable /nickserv register.
*/
disable_ns_register = false
/*
* The reason to give the users who try to /ns register if
* disable_ns_register is enabled.
*/
#disable_reason = "To register on this network visit http://some.misconfigured.site/register"
}
/*
* m_ldap_oper
*
* This module dynamically ties users to Anope opertypes when they identify
* via LDAP group membership. Requires m_ldap.
*
* Note that this doesn't give the user privileges on the IRCd, only in Services.
*/
#module { name = "m_ldap_oper" }
m_ldap_oper
{
/*
* An optional binddn to use when searching for groups.
* %a is replaced with the account name of the user.
*/
#binddn = "cn=Manager,dc=anope,dc=org"
/*
* An optional password to bind with.
*/
#password = "secret"
/*
* The base DN where the groups are.
*/
basedn = "ou=groups,dc=anope,dc=org"
/*
* The filter to use when searching for users.
* %a is replaced with the account name of the user.
*/
filter = "(member=uid=%a,ou=users,dc=anope,dc=org)"
/*
* The attribute of the group that is the name of the opertype.
* The cn attribute should match a known opertype in the config.
*/
opertype_attribute = "cn"
}
/*
* m_mysql
*
* This module allows other modules to use MySQL.
*/
#module { name = "m_mysql" }
mysql
{
/* The name of this service */
name = "mysql/main"
database = "anope"
server = "127.0.0.1"
username = "anope"
password = "mypassword"
port = 3306
}
/*
* m_proxyscan
*
* This module allows you to scan connecting clients for open proxies.
* Note that using this will allow users to get the IP or your services.
*
* Currently the two supported proxy types are HTTP and SOCKS5.
*
* The proxy scanner works by attempting to connect to clients when they
* connect to the network, and if they have a proxy running instruct it to connect
* back to services. If services are able to connect through the proxy to itself
* then it knows it is an insecure proxy, and will ban it.
*/
#module { name = "m_proxyscan" }
m_proxyscan
{
/*
* The target IP services tells the proxy to connect back to. This must be a publicly
* avaiable IP that remote proxies can connect to.
*/
#target_ip = "127.0.0.1"
/*
* The port services tells the proxy to connect to.
*/
target_port = 7226
/*
* The listen IP services listen on for incoming connections from suspected proxies.
* This probably will be the same as target_ip, but may not be if you are behind a firewall (NAT).
*/
#listen_ip = "127.0.0.1"
/*
* The port services should listen on for incoming connections from suspected proxies.
* This most likely will be the same as target_port.
*/
listen_port = 7226
/*
* An optional notice sent to clients upon connect.
*/
#connect_notice = "We will now scan your host for insecure proxies. If you do not consent to this scan please disconnect immediately"
/*
* Who the notice should be sent from.
*/
#connect_source = "OperServ"
/*
* If set, OperServ will add infected clients to the akill list. Without it, OperServ simply sends
* a timed G/K-line to the IRCd and forgets about it. Can be useful if your akill list is being fill up by bots.
*/
add_to_akill = yes
/*
* How long before connections should be timed out.
*/
timeout = 5
}
/*
* A proxyscan block (must have m_proxyscan loaded).
* You may have multiple proxyscan blocks.
*/
proxyscan
{
/* The type of proxy to check for. A comma separated list is allowed */
type = "HTTP"
/* The ports to check */
port = "80,8080"
/* How long to set the ban for */
time = 4h
/*
* The reason to ban the user for.
* %h is replaced with the type of proxy found.
* %i is replaced with the IP of proxy found.
* %p is replaced with the port.
*/
reason = "You have an open proxy running on your host (%t:%i:%p)"
}
/*
* m_sqlite
*
* This module allows other modules to use SQLite.
*/
#module { name = "m_sqlite" }
sqlite
{
/* The name of this service */
name = "sqlite/main"
/* The database name, it will be created if it does not exist. */
database = "anope.db"
}
/*
* m_rewrite
*
* Allows rewriting commands sent to clients.
*/
#module { name = "m_rewrite" }
rewrite
{
/* The client to apply this rewrite to. */
client = "ChanServ"
/* Source message to match. A $ can be used to match anything. */
source_message = "CLEAR $ USERS"
/*
* Message to rewrite the source message to. A $ followed by a number, eg $0, gets
* replaced by the number-th word from the source_message, starting from 0.
*/
target_message = "CLEARUSERS $1"
}
/*
* m_ssl
*
* This module uses SSL to connect to the uplink server(s)
*/
module { name = "m_ssl" }
/*
* m_statusupdate
*
* This module automatically updates users status on channels when the
* channel's access list is modified.
*/
module { name = "m_statusupdate" }
/*
* m_xmlrpc
*
* Allows remote applications (websites) to execute queries in real time to retrieve data from Anope.
* By itself this module does nothing, but allows other modules (m_xmlrpc_main) to receive and send XMLRPC queries.
*/
#module { name = "m_xmlrpc" }
m_xmlrpc
{
/* IP to listen on */
bindip = "127.0.0.1"
/* Port to listen on */
port = 26673
/* Enable for IPv6 */
ipv6 = no
/* If enabled, requires m_ssl to be loaded */
ssl = no
/* IPs allowed to connect (separate with spaces), this should be secured. We also recommend you firewall this
* with an outside program to increase security.
*/
allowed = "127.0.0.0/24"
}
/*
* m_xmlrpc_main
*
* Adds the main XMLRPC core functions.
* Requires m_xmlrpc.
*/
#module { name = "m_xmlrpc_main" }
/*
* ns_maxemail
*
* Limits how many times the same email address may be used in Anope
* to register accounts.
*/
module { name = "ns_maxemail" }
ns_maxemail
{
/*
* The limit to how many registered nicks can use the same e-mail address. If set to 0 or left
* commented, there will be no limit enforced when registering new accounts or using
* /msg NickServ SET EMAIL.
*/
#maxemails = 1
}
+637
View File
@@ -0,0 +1,637 @@
/*
* Example configuration file for NickServ.
*/
/*
* First, create the service.
*/
service
{
/*
* The name of the NickServ client
*/
nick = "NickServ"
/*
* The username of the NickServ client.
*/
user = "services"
/*
* The hostname of the NickServ client.
*/
host = "services.host"
/*
* The realname of the NickServ client.
*/
gecos = "Nickname Registration Service"
/*
* The modes this client should use.
* Do not modify this unless you know what you are doing.
*
* These modes are very IRCd specific. If left commented, sane defaults
* are used based on what protocol module you have loaded.
*
* Note that setting this option incorrectly could potentially BREAK some if
* not all usefulness of the client. We will not support you if this client is
* unable to do certain things if this option is enabled.
*/
#modes = "+o"
/*
* An optional comma separated list of channels this service should join. Outside
* of log channels this is not very useful, as the service will just idle in the
* specified channels, and will not accept any types of commands.
*
* Prefixes may be given to the channels in the form of mode character or prefix symbol.
*/
#channels = "@#services,#mychan"
}
/*
* Core NickServ module.
*
* Provides essential functionality for NickServ.
*/
module { name = "nickserv" }
/*
* Configuration for NickServ provided by ns_main.
*/
nickserv
{
/*
* The name of the client that should be NickServ.
*/
name = "NickServ"
/*
* Force users to give an e-mail address when they register a nick.
*
* This directive is recommended to be enabled, and required if e-mail registration is enabled.
*/
forceemail = yes
/*
* Require users who change their email address to confirm they
* own it.
*/
confirmemailchanges = no
/*
* Require an e-mail to be sent to the user before they can register their nick.
*/
#emailregistration = yes
/*
* The default options for newly registered nicks. Note that changing these options
* will have no effect on nicks which are already registered. The list must be separated
* by spaces.
*
* The options are:
* - kill: Kill nick if not identified within 60 seconds
* - killquick: Kill nick if not identified within 20 seconds, this one overrides the above
* option and the above must be specified with this one
* - secure: Enable nickname security, requiring the nick's password before any operations
* can be done on it
* - private: Hide the nick from NickServ's LIST command
* - hideemail: Hide's the nick's e-mail address from NickServ's INFO command
* - hideusermask: Hide's the nick's last or current user@host from NickServ's INFO command
* - hidequit: Hide's the nick's last quit message
* - memosignon: Notify user if they have a new memo when they sign into the nick
* - memoreceive: Notify user if they have a new memo as soon as it's received
* - autoop: User will be automatically opped in channels they enter and have access to
* - msg: Services messages will be sent as PRIVMSGs instead of NOTICEs, requires UsePrivmsg
* to be enabled as well
*
* This directive is optional, if left blank, the options will default to secure, memosignon, and
* memoreceive. If you really want no defaults, use "none" by itself as the option.
*/
defaults="secure private hideemail hideusermask memosignon memoreceive autoop"
/*
* A list of languages to load on startup that will be available in /nickserv set language.
* Useful if you translate Anope to your language. (Explained further in docs/LANGUAGE).
* Note that english should not be listed here because it is the base language.
*/
languages = "ca_ES de_DE el_GR es_ES fr_FR hu_HU it_IT nl_NL pl_PL pt_PT ru_RU tr_TR"
/*
* Default language that non- and newly-registered nicks will receive messages in.
* Leave empty to default to English.
*/
#defaultlanguage = "es_ES"
/*
* The minimum length of time between consecutive uses of NickServ's REGISTER command. This
* directive is optional, but recommended. If not set, this restriction will be disabled.
*/
regdelay = 30s
/*
* The minimum length of time between consecutive uses of NickServ's RESEND command.
*
* This directive is optional, but recommended. If not set, this restriction will be disabled.
*/
resenddelay = 90s
/*
* The length of time before a nick registration expires.
*
* This directive is optional, but recommended. If not set, the default is 21 days.
*/
expire = 21d
/*
* The length of time before a suspended nick becomes unsuspended.
*
* This directive is optional. If not set, the default is to never.
*/
#suspendexpire = 90d
/*
* The length of time a user using an unconfirmed account has
* before the account will be released for general use again.
*
* This directive is only required if the e-mail registration option is enabled.
*/
#unconfirmedexpire = 1d
/*
* The maximum number of nicks allowed in a group.
*
* This directive is optional, but recommended. If not set or set to 0, no limits will be applied.
*/
maxaliases = 16
/*
* The maximum number of entries allowed on a nickname's access list.
*/
accessmax = 32
/*
* The username (and possibly hostname) used for the fake user created when NickServ collides
* a user. Should be in the user@host format.
*/
enforceruser = "enforcer"
enforcerhost = "localhost.net"
/*
* The delay before a NickServ collided nick is released.
*/
releasetimeout = 1m
/*
* Allow the use of the IMMED option in the NickServ SET KILL command.
*
* This directive is optional.
*/
#allowkillimmed = yes
/*
* If set, the NickServ GROUP command won't allow any group change. This is recommended for
* better performance and to protect against nick stealing, however users will have less
* flexibility.
*
* This directive is optional, but recommended.
*/
#nogroupchange = yes
/*
* The maximum number of nicks to be returned for a NickServ LIST command.
*/
listmax = 50
/*
* When a user's nick is forcibly changed to enforce a "nick kill", their new nick will start
* with this value. The rest will be made up of 6 or 7 digits.
*/
guestnickprefix = "Guest"
/*
* Prevents the use of the ACCESS, DROP, FORBID, GETPASS, and SET PASSWORD commands by Services Admins
* on other Services Admins or the Services Root(s).
*
* This directive is optional, but recommended.
*/
secureadmins = yes
/*
* If set, any user wanting to use the privileges of Services Root, Services Admin, or Services
* Operator must have been logged as an IRC Operator with the /oper command.
*
* This directive is optional, but recommended.
*/
strictprivileges = yes
/*
* If set, Services will set the channel modes a user has access to upon identifying, assuming
* they are not already set.
*
* This directive is optional.
*/
modeonid = yes
/*
* If set, Services will add the usermask of registering users to the access list of their
* newly created account. If not set, users will always have to identify to NickServ before
* being recognized, unless they manually add an address to the access list of their account.
* This directive is optional.
*/
addaccessonreg = yes
/*
* The maximum number of channels a user can have on NickServ's AJOIN command.
*/
ajoinmax = 10
}
/*
* Core NickServ commands.
*
* In Anope modules can provide (multiple) commands, each of which has a unique command name. Once these modules
* are loaded you can then configure the commands to be added to any client you like with any name you like.
*
* Additionally, you may provide a permission name that must be in the opertype of users executing the command.
*
* Sane defaults are provided below that do not need to be edited unless you wish to change the default behaviour.
*/
/* Give it a help command */
command { service = "NickServ"; name = "HELP"; command = "generic/help"; }
/*
* ns_access
*
* Provides the command nickserv/access.
*
* Used for configuring what hosts have access to your account.
*/
module { name = "ns_access" }
command { service = "NickServ"; name = "ACCESS"; command = "nickserv/access"; }
/*
* ns_ajoin
*
* Provides the command nickserv/ajoin.
*
* Used for configuring channels to join once you identify.
*/
module { name = "ns_ajoin" }
command { service = "NickServ"; name = "AJOIN"; command = "nickserv/ajoin"; }
/*
* ns_alist
*
* Provides the command nickserv/alist.
*
* Used for viewing what channels you have access to.
*/
module { name = "ns_alist" }
command { service = "NickServ"; name = "ALIST"; command = "nickserv/alist"; }
/*
* ns_cert
*
* Provides the command nickserv/cert.
*
* Used for configuring your SSL certificate list, which can be used to automatically identify you.
*/
module { name = "ns_cert" }
command { service = "NickServ"; name = "CERT"; command = "nickserv/cert"; }
/*
* ns_drop
*
* Provides the command nickserv/drop.
*
* Used for unregistering names.
*/
module { name = "ns_drop" }
command { service = "NickServ"; name = "DROP"; command = "nickserv/drop"; }
/*
* ns_getemail
*
* Provides the command nickserv/getemail.
*
* Used for getting registered accounts by searching for emails.
*/
module { name = "ns_getemail" }
command { service = "NickServ"; name = "GETEMAIL"; command = "nickserv/getemail"; permission = "nickserv/getemail"; }
/*
* ns_getpass
*
* Provides the command nickserv/getpass.
*
* Used for getting users passwords.
*
* Requires no encryption is being used.
*/
#module { name = "ns_getpass" }
#command { service = "NickServ"; name = "GETPASS"; command = "nickserv/getpass"; permission = "nickserv/getpass"; }
/*
* ns_ghost
*
* Provides the command nickserv/ghost.
*
* Used for disconnecting "ghost" sessions.
*/
module { name = "ns_ghost" }
command { service = "NickServ"; name = "GHOST"; command = "nickserv/ghost"; }
/*
* ns_group
*
* Provides the commands nickserv/group, nickserv/glist, and nickserv/ungroup.
*
* Used for controlling nick groups.
*/
module { name = "ns_group" }
command { service = "NickServ"; name = "GLIST"; command = "nickserv/glist"; }
command { service = "NickServ"; name = "GROUP"; command = "nickserv/group"; }
command { service = "NickServ"; name = "UNGROUP"; command = "nickserv/ungroup"; }
/*
* ns_identify
*
* Provides the command nickserv/identify.
*
* Used for identifying to accounts.
*/
module { name = "ns_identify" }
command { service = "NickServ"; name = "ID"; command = "nickserv/identify"; }
command { service = "NickServ"; name = "IDENTIFY"; command = "nickserv/identify"; }
/*
* ns_info
*
* Provides the command nickserv/info.
*
* Used for gathering information about an account.
*/
module { name = "ns_info" }
command { service = "NickServ"; name = "INFO"; command = "nickserv/info"; }
/*
* ns_list
*
* Provides the command nickserv/list.
*
* Used for retrieving and searching the registered account list.
*/
module { name = "ns_list" }
command { service = "NickServ"; name = "LIST"; command = "nickserv/list"; }
/*
* ns_logout
*
* Provides the command nickserv/logout.
*
* Used for logging out of your account.
*/
module { name = "ns_logout" }
command { service = "NickServ"; name = "LOGOUT"; command = "nickserv/logout"; }
/*
* ns_recover
*
* Provides the command nickserv/recover.
*
* Used for forcing someone on your nick to a guest nick.
*/
module { name = "ns_recover" }
command { service = "NickServ"; name = "RECOVER"; command = "nickserv/recover"; }
/*
* ns_register
*
* Provides the commands nickserv/confirm, nickserv/register, and nickserv/resend.
*
* Used for registering accounts.
*/
module { name = "ns_register" }
command { service = "NickServ"; name = "CONFIRM"; command = "nickserv/confirm"; }
command { service = "NickServ"; name = "REGISTER"; command = "nickserv/register"; }
command { service = "NickServ"; name = "RESEND"; command = "nickserv/resend"; }
/*
* ns_release
*
* Provides the command nickserv/release.
*
* Used for releasing names held by nickserv/recover.
*/
module { name = "ns_release" }
command { service = "NickServ"; name = "RELEASE"; command = "nickserv/release"; }
/*
* ns_resetpass
*
* Provides the command nickserv/resetpass.
*
* Used for resetting passwords by emailing users a temporary one.
*/
module { name = "ns_resetpass" }
command { service = "NickServ"; name = "RESETPASS"; command = "nickserv/resetpass"; }
/*
* ns_saset
*
* Provides commands nickserv/saset, nickserv/saset/password.
*
* Used as a help wrapper for SASET commands, and used to force change users password.
*/
module { name = "ns_saset" }
command { service = "NickServ"; name = "SASET"; command = "nickserv/saset"; }
command { service = "NickServ"; name = "SASET PASSWORD"; command = "nickserv/saset/password"; }
/*
* ns_saset_noexpire
*
* Provides the command nickserv/saset/noexpire.
*
* Used for configuring noexpire, which prevents nicks from expiring.
*/
module { name = "ns_saset_noexpire" }
command { service = "NickServ"; name = "SASET NOEXPIRE"; command = "nickserv/saset/noexpire"; permission = "nickserv/saset/noexpire" }
/*
* ns_set
*
* Provides the commands nickserv/set, nickserv/set/password.
*
* Used as a help wrapper for SET commands, and used for users to change their password.
*/
module { name = "ns_set" }
command { service = "NickServ"; name = "SET"; command = "nickserv/set"; }
command { service = "NickServ"; name = "SET PASSWORD"; command = "nickserv/set/password"; }
/*
* ns_set_autoop
*
* Provides the commands nickserv/set/autoop and nickserv/saset/autoop.
*
* Used for setting autoop, which determines whether or not modes are automatically set on you when joining a channel.
*/
module { name = "ns_set_autoop" }
command { service = "NickServ"; name = "SET AUTOOP"; command = "nickserv/set/autoop"; }
command { service = "NickServ"; name = "SASET AUTOOP"; command = "nickserv/saset/autoop"; permission = "nickserv/saset/autoop"; }
/*
* ns_set_display
*
* Provides the commands nickserv/set/display and nickserv/saset/display.
*
* Used for setting users display names.
*/
module { name = "ns_set_display" }
command { service = "NickServ"; name = "SET DISPLAY"; command = "nickserv/set/display"; }
command { service = "NickServ"; name = "SASET DISPLAY"; command = "nickserv/saset/display"; permission = "nickserv/saset/display"; }
/*
* ns_set_email
*
* Provides the commands nickserv/set/email and nickserv/saset/email.
*
* Used for setting users email addresses.
*/
module { name = "ns_set_email" }
command { service = "NickServ"; name = "SET EMAIL"; command = "nickserv/set/email"; }
command { service = "NickServ"; name = "SASET EMAIL"; command = "nickserv/saset/email"; permission = "nickserv/saset/email"; }
/*
* ns_set_greet
*
* Provides the commands nickserv/set/greet and nickserv/saset/greet.
*
* Used for changing users greet message, which is displayed when they enter channels.
*/
module { name = "ns_set_greet" }
command { service = "NickServ"; name = "SET GREET"; command = "nickserv/set/greet"; }
command { service = "NickServ"; name = "SASET GREET"; command = "nickserv/saset/greet"; permission = "nickserv/saset/greet"; }
/*
* ns_set_hide
*
* Provides the commands nickserv/set/hide and nickserv/saset/hide.
*
* Used for configuring which options are publically shown in nickserv/info for your account.
*/
module { name = "ns_set_hide" }
command { service = "NickServ"; name = "SET HIDE"; command = "nickserv/set/hide"; }
command { service = "NickServ"; name = "SASET HIDE"; command = "nickserv/saset/hide"; permission = "nickserv/saset/hide"; }
/*
* ns_set_kill
*
* Provides the commands nickserv/set/kill and nickserv/saset/kill.
*
* Used for configuring if and for how long other users are allowed to use your nick.
*/
module { name = "ns_set_kill" }
command { service = "NickServ"; name = "SET KILL"; command = "nickserv/set/kill"; }
command { service = "NickServ"; name = "SASET KILL"; command = "nickserv/saset/kill"; permission = "nickserv/saset/kill"; }
/*
* ns_set_language
*
* Provides the commands nickserv/set/language and nickserv/saset/language.
*
* Used for configuring what language services use when messaging you.
*/
module { name = "ns_set_language" }
command { service = "NickServ"; name = "SET LANGUAGE"; command = "nickserv/set/language"; }
command { service = "NickServ"; name = "SASET LANGUAGE"; command = "nickserv/saset/language"; permission = "nickserv/saset/language"; }
/*
* ns_set_message
*
* Provides the commands nickserv/set/message and nickserv/saset/message.
*
* Used to configure how services send messages to you.
*/
module { name = "ns_set_message" }
command { service = "NickServ"; name = "SET MESSAGE"; command = "nickserv/set/message"; }
command { service = "NickServ"; name = "SASET MESSAGE"; command = "nickserv/saset/message"; permission = "nickserv/saset/message"; }
/*
* ns_set_private
*
* Provides the commands nickserv/set/private and nickserv/saset/private.
*
* Used for configuring whether or not your account shows up in nickserv/list.
*/
module { name = "ns_set_private" }
command { service = "NickServ"; name = "SET PRIVATE"; command = "nickserv/set/private"; }
command { service = "NickServ"; name = "SASET PRIVATE"; command = "nickserv/saset/private"; permission = "nickserv/saset/private"; }
/*
* ns_set_secure
*
* Provides the commands nickserv/set/secure and nickserv/saset/secure.
*
* Used for configuring whether you can gain access to your nick by simply being recognized by nickserv/access.
*/
module { name = "ns_set_secure" }
command { service = "NickServ"; name = "SET SECURE"; command = "nickserv/set/secure"; }
command { service = "NickServ"; name = "SASET SECURE"; command = "nickserv/saset/secure"; permission = "nickserv/saset/secure"; }
/*
* ns_sendpass
*
* Provides the command nickserv/sendpass.
*
* Used to send users their password via email.
*
* Requires that no encryption is being used.
*/
module { name = "ns_sendpass" }
command { service = "NickServ"; name = "SENDPASS"; command = "nickserv/sendpass"; permission = "nickserv/sendpass"; }
/*
* ns_set_misc
*
* Provides the command nickserv/set/misc.
*
* Allows you to create arbitrary commands to set data, and have that data show up in nickserv/info.
*/
module { name = "ns_set_misc" }
command { service = "NickServ"; name = "SET URL"; command = "nickserv/set/misc"; }
command { service = "NickServ"; name = "SET ICQ"; command = "nickserv/set/misc"; }
/*
* ns_status
*
* Provides the nickserv/status command.
*
* Used to determine if a user is recognized or identified by services.
*/
module { name = "ns_status" }
command { service = "NickServ"; name = "STATUS"; command = "nickserv/status"; }
/*
* ns_suspend
*
* Provides the commands nickserv/suspend and nickserv/unsuspend.
*
* Used to suspend and unsuspend nicknames. Suspended nicknames can not be used but their settings are stored.
*/
module { name = "ns_suspend" }
command { service = "NickServ"; name = "SUSPEND"; command = "nickserv/suspend"; permission = "nickserv/suspend"; }
command { service = "NickServ"; name = "UNSUSPEND"; command = "nickserv/unsuspend"; permission = "nickserv/suspend"; }
/*
* ns_update
*
* Provides the command nickserv/update.
*
* Used to update your status on all channels, turn on your vHost, etc.
*/
module { name = "ns_update" }
command { service = "NickServ"; name = "UPDATE"; command = "nickserv/update"; }
+606
View File
@@ -0,0 +1,606 @@
/*
* Example configuration file for OperServ.
*/
/*
* First, create the service.
*/
service
{
/*
* The name of the OperServ client
*/
nick = "OperServ"
/*
* The username of the OperServ client.
*/
user = "services"
/*
* The hostname of the OperServ client.
*/
host = "services.host"
/*
* The realname of the OperServ client.
*/
gecos = "Operator Service"
/*
* The modes this client should use.
* Do not modify this unless you know what you are doing.
*
* These modes are very IRCd specific. If left commented, sane defaults
* are used based on what protocol module you have loaded.
*
* Note that setting this option incorrectly could potentially BREAK some if
* not all usefulness of the client. We will not support you if this client is
* unable to do certain things if this option is enabled.
*/
#modes = "+o"
/*
* An optional comma separated list of channels this service should join. Outside
* of log channels this is not very useful, as the service will just idle in the
* specified channels, and will not accept any types of commands.
*
* Prefixes may be given to the channels in the form of mode character or prefix symbol.
*/
#channels = "@#services,#mychan"
}
/*
* Core OperServ module.
*
* Provides essential functionality for OperServ.
*/
module { name = "operserv" }
/*
* Configuration for OperServ provided by os_main.
*/
operserv
{
/*
* The name of the client that should be OperServ.
*/
name = "OperServ"
/*
* If set, Services Admins will be able to use SUPERADMIN [ON|OFF] which will temporarily grant
* them extra privileges such as being a founder on ALL channels.
*
* This directive is optional.
*/
#superadmin = yes
/*
* These define the default expiration times for, respectively, AKILLs, CHANKILLs, SNLINEs,
* and SQLINEs.
*/
autokillexpiry = 30d
chankillexpiry = 30d
snlineexpiry = 30d
sqlineexpiry = 30d
szlineexpiry = 30d
/*
* If set, this option will make Services send an AKILL command immediately after it has been
* added with AKILL ADD. This eliminates the need for killing the user after the AKILL has
* been added.
*
* This directive is optional, but recommended.
*/
akillonadd = yes
/*
* If set, this option will make Services send an (SVS)KILL command immediately after SNLINE ADD.
* This eliminates the need for killing the user after the SNLINE has been added.
*
*This directive is optional.
*/
#killonsnline = yes
/*
* If set, this option will make Services send an (SVS)KILL command immediately after SQLINE ADD.
* This eliminates the need for killing the user after the SQLINE has been added.
*
* This directive is optional.
*/
#killonsqline = yes
/*
* Defines what actions should trigger notifications. The list must be separated by spaces.
*
* The notifications are:
* - oper: A user has become an IRC operator
* - bados: A non-IRCop attempts to use OperServ
* - akillexpire: An AKILL has expired
* - snlineexpire: An SNLINE has expired
* - sqlineexpire: An SQLINE has expired
* - exceptionexpire: A session exception has expired
*
* This directive is optional, if left blank, there will be no notifications.
*/
notifications = "oper"
/*
* Enables session limiting. Session limiting prevents users from connecting more than a certain
* number of times from the same host at the same time - thus preventing most types of cloning.
* Once a host reaches it's session limit, all clients attempting to connect from that host will
* be killed. Exceptions to the default session limit can be defined via the exception list. It
* should be noted that session limiting, along with a large exception list, can degrade Services'
* performance.
*
* See the online help for more information about session limiting.
*
* This directive is optional.
*/
limitsessions = yes
/*
* Default session limit per host. Once a host reaches it's session limit, all clients attempting
* to connect from that host will be killed. A value of zero means an unlimited session limit.
*
* This directive is optional.
* If not given and session limiting is enabled, it will default to no limit.
*/
defaultsessionlimit = 3
/*
* The maximum session limit that may be set for a host in an exception.
*
* This directive is only required if session limiting is enabled.
*/
maxsessionlimit = 100
/*
* Sets the default expiry time for session exceptions.
*
* This directive is only required if session limiting is enabled.
*/
exceptionexpiry = 1d
/*
* The message that will be NOTICE'd to a user just before they are removed from the network because
* their host's session limit has been exceeded. It may be used to give a slightly more descriptive
* reason for the impending kill as opposed to simply "Session limit exceeded".
*
* This directive is optional, if not set, nothing will be sent.
*/
sessionlimitexceeded = "The session limit for your host %s has been exceeded."
/*
* Same as above, but should be used to provide a website address where users can find out more
* about session limits and how to go about applying for an exception.
*
* Note: This directive has been intentionally commented out in an effort to remind you to change
* the URL it contains. It is recommended that you supply an address/URL where people can get help
* regarding session limits.
*
* This directive is optional, if not set, nothing will be sent.
*/
#sessionlimitdetailsloc = "Please visit http://your.website.url/ for more information about session limits."
/*
* If set and is not 0, this directive tells Services to add an AKILL the number of subsequent kills
* for the same host exceeds this value, preventing the network from experiencing KILL floods.
*
* This directive is optional.
*/
maxsessionkill = 15
/*
* Sets the expiry time for AKILLs set for hosts exceeding the maxsessionkill directive limit.
*
* This directive is optional, if not set, defaults to 30 minutes.
*/
sessionautokillexpiry = 30m
/*
* Adds the nickname of the IRC Operator issuing an AKILL to the kill reason.
*
* This directive is optional.
*/
addakiller = yes
/*
* Adds akill IDs to akills. Akill IDs are given to users in their ban reason and can be used to easily view,
* modify, or remove an akill from the ID.
*/
akillids = yes
/*
* If set, only IRC Operators will be permitted to use OperServ, regardless of module-based command
* access restrictions.
*
* This directive is optional, but recommended.
*/
opersonly = yes
}
/*
* Core OperServ commands.
*
* In Anope modules can provide (multiple) commands, each of which has a unique command name. Once these modules
* are loaded you can then configure the commands to be added to any client you like with any name you like.
*
* Additionally, you may provide a permission name that must be in the opertype of users executing the command.
*
* Sane defaults are provided below that do not need to be edited unless you wish to change the default behavior.
*/
/* Give it a help command */
command { service = "OperServ"; name = "HELP"; command = "generic/help"; }
/*
* os_akill
*
* Provides the command operserv/akill.
*
* Used to ban users from the network.
*/
module { name = "os_akill" }
command { service = "OperServ"; name = "AKILL"; command = "operserv/akill"; permission = "operserv/akill"; }
/*
* os_chankill
*
* Provides the command operserv/chankill.
*
* Used to akill users from an entire channel.
*/
module { name = "os_chankill" }
command { service = "OperServ"; name = "CHANKILL"; command = "operserv/chankill"; permission = "operserv/chankill"; }
/*
* os_defcon
*
* Provides the command operserv/defcon.
*
* Allows you to set services in defcon mode, which can be used to restrict services access
* during bot attacks.
*/
#module { name = "os_defcon" }
#command { service = "OperServ"; name = "DEFCON"; command = "operserv/defcon"; }
defcon
{
/*
* Default DefCon level (1-5) to use when starting Services up. Level 5 constitutes normal operation
* while level 1 constitutes the most restrictive operation. If this setting is left out or set to
* 0, DefCon will be disabled and the rest of this block will be ignored.
*/
#defaultlevel = 5
/*
* The following 4 directives define what operations will take place when DefCon is set to levels
* 1 through 4. Each level is a list that must be separated by spaces.
*
* The following operations can be defined at each level:
* - nonewchannels: Disables registering new channels
* - nonewnicks: Disables registering new nicks
* - nomlockchanges: Disables changing MLOCK on registered channels
* - forcechanmodes: Forces all channels to have the modes given in the later chanmodes directive
* - reducedsessions: Reduces the session limit to the value given in the later sessionlimit directive
* - nonewclients: KILL any new clients trying to connect
* - operonly: Services will ignore all non-IRCops
* - silentoperonly: Services will silently ignore all non-IRCops
* - akillnewclients: AKILL any new clients trying to connect
* - nonewmemos: No new memos will be sent to block MemoServ attacks
*/
level4 = "nonewchannels nonewnicks nomlockchanges reducedsessions"
level3 = "nonewchannels nonewnicks nomlockchanges forcechanmodes reducedsessions"
level2 = "nonewchannels nonewnicks nomlockchanges forcechanmodes reducedsessions silentoperonly"
level1 = "nonewchannels nonewnicks nomlockchanges forcechanmodes reducedsessions silentoperonly akillnewclients"
/*
* New session limit to use when a DefCon level is using "reduced" session limiting.
*/
#sessionlimit = 2
/*
* Length of time to add an AKILL for when DefCon is preventing new clients from connecting to the
* network.
*/
#akillexpire = 5m
/*
* The channel modes to set on all channels when the DefCon channel mode system is in use.
*
* Note 1: Choose these modes carefully, because when DefCon switches to a level which does NOT have
* the mode setting selected, Services will set the reverse on all channels, e.g. if this setting
* is +RN when DefCon is used, all channels will be set to +RN, when DefCon is removed, all
* channels will be set to -RN. You don't want to set this to +k for example, because when DefCon
* is removed all channels with -k.
*
* Note 2: MLOCKed modes will not be lost.
*/
#chanmodes = "+R"
/*
* This value can be used to automatically return the network to DefCon level 5 after the specified
* time period, just in case any IRC Operator forgets to remove a DefCon setting.
*
* This directive is optional.
*/
#timeout = 15m
/*
* If set, Services will send a global message on DefCon level changes.
*
* This directive is optional.
*/
#globalondefcon = yes
/*
* If set, Services will send the global message defined in the message directive on DefCon level
* changes.
*
* This directive is optional.
*/
#globalondefconmore = yes
/*
* Defines the message that will be sent on DefCon level changes when globalondefconmore is set.
*
* This directive is required only when globalondefconmore is set.
*/
#message = "Put your message to send your users here. Dont forget to uncomment globalondefconmore"
/*
* Defines the message that will be sent when DefCon is returned to level 5. This directive is optional,
* and will also override globalondefcon and globalondefconmore when set.
*/
#offmessage = "Services are now back to normal, sorry for any inconvenience"
/*
* Defines the reason to use when clients are KILLed or AKILLed from the network while the proper
* DefCon operation is in effect.
*/
#akillreason = "This network is currently not accepting connections, please try again later"
}
/*
* os_list
*
* Provides the commands operserv/chanlist and operserv/userlist.
*
* Used to list and search the channels and users currently on the network.
*/
module { name = "os_list" }
command { service = "OperServ"; name = "CHANLIST"; command = "operserv/chanlist"; }
command { service = "OperServ"; name = "USERLIST"; command = "operserv/userlist"; }
/*
* os_config
*
* Provides the command operserv/config.
*
* Used to view and set configuration options while services are running.
*/
module { name = "os_config" }
command { service = "OperServ"; name = "CONFIG"; command = "operserv/config"; permission = "operserv/config"; }
/*
* os_forbid
*
* Provides the command operserv/forbid.
*
* Used to forbid specific nicks, channels, emails, etc. from being used.
*/
module { name = "os_forbid" }
command { service = "OperServ"; name = "FORBID"; command = "operserv/forbid"; permission = "operserv/forbid"; }
/*
* os_ignore
*
* Provides the command operserv/ignore.
*
* Used to make Services ignore users.
*/
module { name = "os_ignore" }
command { service = "OperServ"; name = "IGNORE"; command = "operserv/ignore"; permission = "operserv/ignore"; }
/*
* os_jupe
*
* Provides the command operserv/jupe.
*
* Used to disconnect servers from the network and prevent them from relinking.
*/
module { name = "os_jupe" }
command { service = "OperServ"; name = "JUPE"; command = "operserv/jupe"; permission = "operserv/jupe"; }
/*
* os_kick
*
* Provides the command operserv/kick.
*
* Used to kick users from channels.
*/
module { name = "os_kick" }
command { service = "OperServ"; name = "KICK"; command = "operserv/kick"; permission = "operserv/kick"; }
/*
* os_kill
*
* Provides the command operserv/kill.
*
* Used to forcibly disconnect users from the network.
*/
module { name = "os_kill" }
command { service = "OperServ"; name = "KILL"; command = "operserv/kill"; permission = "operserv/kill"; }
/*
* os_login
*
* Provides the commands operserv/login and operserv/logout.
*
* Used to login to OperServ, only required if your oper block requires this.
*/
module { name = "os_login" }
command { service = "OperServ"; name = "LOGIN"; command = "operserv/login"; }
command { service = "OperServ"; name = "LOGOUT"; command = "operserv/logout"; }
/*
* os_mode
*
* Provides the commands operserv/mode and operserv/umode.
*
* Used to change user and channel modes.
*/
module { name = "os_mode" }
command { service = "OperServ"; name = "MODE"; command = "operserv/mode"; permission = "operserv/mode"; }
command { service = "OperServ"; name = "UMODE"; command = "operserv/umode"; permission = "operserv/umode"; }
/*
* os_modinfo
*
* Provides the commands operserv/modinfo and operserv/modlist.
*
* Used to show information about loaded modules.
*/
module { name = "os_modinfo" }
command { service = "OperServ"; name = "MODINFO"; command = "operserv/modinfo"; }
command { service = "OperServ"; name = "MODLIST"; command = "operserv/modlist"; permission = "operserv/modlist"; }
/*
* os_module
*
* Provides the commands operserv/modload, operserv/modreload, and operserv/modunload.
*
* Used to load, reload, and unload modules.
*/
module { name = "os_module" }
command { service = "OperServ"; name = "MODLOAD"; command = "operserv/modload"; permission = "operserv/modload"; }
command { service = "OperServ"; name = "MODRELOAD"; command = "operserv/modreload"; permission = "operserv/modload"; }
command { service = "OperServ"; name = "MODUNLOAD"; command = "operserv/modunload"; permission = "operserv/modload"; }
/*
* os_news
*
* Provides the commands operserv/logonnews, operserv/opernews, and operserv/randomnews.
*
* Used to configure news notices shown to users when they connect, and opers when they oper.
*/
module { name = "os_news" }
command { service = "OperServ"; name = "LOGONNEWS"; command = "operserv/logonnews"; permission = "operserv/news"; }
command { service = "OperServ"; name = "OPERNEWS"; command = "operserv/opernews"; permission = "operserv/news"; }
command { service = "OperServ"; name = "RANDOMNEWS"; command = "operserv/randomnews"; permission = "operserv/news"; }
/*
* os_noop
*
* Provides the command operserv/noop.
*
* Used to NOOP a server, which prevents users from opering on that server.
*/
module { name = "os_noop" }
command { service = "OperServ"; name = "NOOP"; command = "operserv/noop"; permission = "operserv/noop"; }
/*
* os_oline
*
* Provides the command operserv/oline.
*
* Used to set oper flags on users, and is specific to UnrealIRCd.
* See /helpop ?svso on your IRCd for more information.
*/
module { name = "os_oline" }
command { service = "OperServ"; name = "OLINE"; command = "operserv/oline"; permission = "operserv/oline"; }
/*
* os_oper
*
* Provides the command operserv/oper.
*
* Used to configure opers and show information about opertypes.
*/
module { name = "os_oper" }
command { service = "OperServ"; name = "OPER"; command = "operserv/oper"; permission = "operserv/oper"; }
/*
* os_reload
*
* Provides the command operserv/relad.
*
* Used to reload the services.conf configuration file.
*/
module { name = "os_reload" }
command { service = "OperServ"; name = "RELOAD"; command = "operserv/reload"; permission = "operserv/reload"; }
/*
* os_session
*
* Provides the commands operserv/exception and operserv/session.
*
* Used to manage the session limit exception list, and view currently active sessions.
*/
module { name = "os_session" }
command { service = "OperServ"; name = "EXCEPTION"; command = "operserv/exception"; permission = "operserv/exception"; }
command { service = "OperServ"; name = "SESSION"; command = "operserv/session"; permission = "operserv/session"; }
/*
* os_set
*
* Provides the command operserv/set.
*
* Used to set various settings such as superadmin, debug mode, etc.
*/
module { name = "os_set" }
command { service = "OperServ"; name = "SET"; command = "operserv/set"; permission = "operserv/set"; }
/*
* os_shutdown
*
* Provides the commands operserv/quit, operserv/restart, and operserv/shutdown.
*
* Used to quit, restart, or shutdown services.
*/
module { name = "os_shutdown" }
command { service = "OperServ"; name = "QUIT"; command = "operserv/quit"; permission = "operserv/quit"; }
command { service = "OperServ"; name = "RESTART"; command = "operserv/restart"; permission = "operserv/restart"; }
command { service = "OperServ"; name = "SHUTDOWN"; command = "operserv/shutdown"; permission = "operserv/shutdown"; }
/*
* os_stats
*
* Provides the operserv/stats command.
*
* Used to show statistics about services.
*/
module { name = "os_stats" }
command { service = "OperServ"; name = "STATS"; command = "operserv/stats"; permission = "operserv/stats"; }
/*
* os_svsnick
*
* Provides the operserv/svsnick command.
*
* Used to force change user's nicks.
*/
module { name = "os_svsnick" }
command { service = "OperServ"; name = "SVSNICK"; command = "operserv/svsnick"; permission = "operserv/svsnick"; }
/*
* os_sxline
*
* Provides the operserv/snline and operserv/sqline commands.
*
* Used to ban different things such as realnames, nicknames, and IPs.
*/
module { name = "os_sxline" }
command { service = "OperServ"; name = "SNLINE"; command = "operserv/snline"; permission = "operserv/snline"; }
command { service = "OperServ"; name = "SQLINE"; command = "operserv/sqline"; permission = "operserv/sqline"; }
/*
* os_update
*
* Provides the opersev/update command.
*
* Use to immediately update the databases.
*/
module { name = "os_update" }
command { service = "OperServ"; name = "UPDATE"; command = "operserv/update"; permission = "operserv/update"; }
+3699
View File
File diff suppressed because it is too large Load Diff
+1
View File
@@ -0,0 +1 @@
git log --pretty=format:"Revision %h - %cD - %s" > version.log
+1
View File
@@ -0,0 +1 @@
astyle --style=java --indent=tab --brackets=break-closing --indent-switches --indent-cases --brackets=break
+1 -4
View File
@@ -1,4 +1 @@
Reported Bugs from Bugzilla: http://bugs.anope.org/
---------------------------------------------------
For all bug reports / updates please see http://bugs.anope.org
+5
View File
@@ -78,6 +78,11 @@ This is safer than C-style casting in that an invalid pointer conversion will
return a NULL pointer, and an invalid reference conversion will throw a
Bad_cast exception.
Note that in Anope we prefer if Anope::debug_cast is used.
This uses dynamic_cast (and checks for a NULL pointer return) on debug builds
and static_cast on release builds, to speed up the program beacuse of dynamic_cast's
reliance on RTTI.
reinterpret_cast
----------------
+1 -1
View File
@@ -7,7 +7,7 @@ if(WIN32)
# Add README.txt to list of files for CPack to ignore
add_to_cpack_ignored_files("README.txt$" TRUE)
endif(IN_SOURCE)
set(DOCS DEFCON FAQ INSTALL MODULES NEWS OLDCHANGES PROXY ${CMAKE_CURRENT_BINARY_DIR}/README.txt WIN32.txt)
set(DOCS Changes Changes.conf DEFCON FAQ INSTALL LANGUAGE MODULES NEWS ${CMAKE_CURRENT_BINARY_DIR}/README.txt WIN32.txt)
install(FILES ${DOCS}
DESTINATION docs
)
+239
View File
@@ -0,0 +1,239 @@
Orginally pulled from: http://www.inspircd.org/wiki/Coding_Guidelines
---
InspIRCd Coding Guidelines
The following are a set of guidelines for writing patches to InspIRCd, or for
creating modules for distribution with the official package. These guidelines
were written a time after InspIRCd development started, and so not all code
yet follows these. This will be rectified with time.
1. Comments
* Multi Line
Multiple line comments should follow the C-style comment, for example:
/*
* This is a multiple line comment, huzzah..
*/
* Single Line
Single line comments should also be in the C style, for example:
/* This is a boring one-line comment */
* Doxygen commenting
If you wish your comment to show in doxygen, the comment should be directly
above the item you are documenting (a class, function, enum, etc) and the
first line should be "/**". For example:
/** This is a doxygen multiline comment.
* Description of thingymebob here.
*/
The first line after the "**" is used as the short description of the item
(up to the full stop) and everything afterwards as the detailed description.
2. Indentation
Tabs. Tabs. ONLY TABS. Use a single tab for each level of indentation,
for example:
int main()
{
<tab>if (condition)
<tab>{
<tab><tab>code
<tab>}
}
3. Separation
Always put a space in between a keyword like if/while and the condition,
for example:
if (foo == bar)
NOT
if(foo == bar)
4. Braces
Always put braces opening and closing blocks on separate lines, see the
identation example. For example, place braces like this:
if (apples == "green")
{
cout << "Apples are green" << endl;
}
and not:
if (apples == "green") {
cout << "Apples are green" << endl;
}
The one exception to this is if you are declaring a class method which is
only one line long, in that case the following is acceptable in most cases:
class foo : public bar
{
foo() { }
getrandomfoo() { return rand(); }
};
5. Templates
Where possible, use templates rather than #defines. Avoid use of RTTI.
6. Structs
Structs should be declared in the following fashion:
struct BodyPartBasket
{
int arms;
int legs;
int scrotalsacs;
};
and not like this:
typedef struct
{
int arms;
int legs;
int scrotalsacs;
} BodyPartBasket;
The second way is not required in C++ to be able to do this:
BodyPartBasket mybasket;
Plus, placing the name at the bottom of the declaration makes readability
more difficult (as you have to scroll down to the bottom of the struct to
find its name). (where possible, call them classes rather than structs.)
7. Variable naming
Class and struct names should be in camel case with a leading capital letter,
for example "MyBagOfBones" and not "my_bag_of_bones" or "mybagofbones".
Variable names can be in either camel case with a leading capital letter or
alternatively all lower case, so long as the same naming convention is
adhered to throughout the class. No classes or variables should be named in
capitals unless this makes sense for the name (for example "class DNS").
Constants and enum values should always be completely in CAPITALS and
underscores may be used, for example:
enum DecayState
{
DECAYED_MOULDY = 0,
DECAYED_SMELLY = 1,
DECAYED_MAGGOTS = 2
};
All value names in an enum should be started with the same text which should
be related in some way to the enum's use. For example "DNS_CNAME, DNS_A,
DNS_AAAA".
8. Use of references
Wherever possible, when dealing with any complex class, pass a const reference
rather than a copy of the class. For example:
MyThingy::MyThingy(const std::string &thingyvalue)
{
}
Of course, if you intended to change the string you can just omit the 'const'.
9. Use of char pointers
Whenever you use char pointers (char*, char**) try to use const equivalents.
This is much safer and avoids ugly and dangerous casts. For example:
MyThingy::Thingify(const char* const* wotsits)
{
}
If it is possible without performance loss, consider avoiding char pointers
altogether and using std::string instead.
10. Use of STL
For more information on use of STL in InspIRCd, please see the separate
STL FAQ.
11. Making copies of data
Never ever make a copy of a piece of data unless it is absolutely necessary.
For example, don't use strlcpy() to make a copy of the const char* string
returned by std::string::c_str(), if the change can be done to the std::string
itself. The same goes for unnecessary variable assignments, especially those
which assign large classes.
12. namespace std
Avoid the following:
using namespace std;
It might take a bit more typing, but things work better if you don't set
(then later assume) the namespace -- specify it explicitly when you want to
use it.
13. Linefeeds
Unix linefeeds only please. We do not like to see our screens covered in ^M.
14. Portability
Always make sure your code is portable to all supported operating systems,
remember of course that as of 1.1.8 this includes windows. Don't write code
that only works on windows, or only works on Linux. Test your code on all
platforms or ask for help from other developers who have the platforms you
want to test on.
* new() and delete(), malloc() and free()
Apart from the fact that using malloc() and free() is bad practice in C++
code, you must never use malloc() or free() in InspIRCd, within its modules
or within the core. This is because if you use malloc() or free() in windows,
the memory is claimed from the program's local heap.
In windows, each shared object (module, dll) has its own heap, which is
protected from other dlls and executables. To get around this issue and
allow more posix-like memory access from other dlls in the program (other
modules), InspIRCd overrides the operators new and delete to ensure that
memory allocated by them comes from the windows global heap. If you use
malloc() and free() for this, the ircd will segfault when another module
tries to access the memory you have allocated!
* strdup()
As with malloc(), above, strdup() should be avoided. Where strdup() is
absolutely necessary, use strnewdup() which is our strdup() implementation
that calls operator new instead of using malloc().
char arrays allocated by strnewdup() should be deleted with operator delete[].
* CoreExport and DllImport
Prefix all types you want to import or export to other modules with CoreExport
and DllImport macros. These do nothing in POSIX operating systems, however
in windows these are expanded to the instructions __declspec(dllimport) and
__declspec(dllexport) respectively depending on where they are used and how.
15. External Dependencies
If a module is compiled as standard, or the code is part of the core, you must
not use any dependencies that are not available as standard on all supported
operating systems beyond libstdc++, libc, and whatever else is currently
required to build the core. Modules which use nonstandard dependencies belong
in the modules/extra directory.
16. Profiling and Performance
It is one thing to assume that code performs bad, it is another thing to prove
that it actually is. A lot of experienced programmers talk about 'premature
optimisation', and here is what it means: if you have a piece of code called
once on startup that takes 10 seconds instead of one second to run, and a
piece of code that takes 0.05 seconds to run when it should take 0.01, and
it is called once per second, the second piece of code is the priority.
In other words, make sure that what you think is slow, and a performance
problem in Insp actually is.
To do this, use the callgrind tool from Valgrind (valgrind --tool=cachegrind
bin/inspircd -nofork -debug), and kcachegrind (or similar) to view the output
files.
+185
View File
@@ -0,0 +1,185 @@
Anope Version 1.9.6
--------------------
A Added ability to configure emails sent by services
A Added chanserv/up and chanserv/down
A Added m_proxyscan
A Added more configurability for what vhosts are valid
A Added chanserv/log
A Added ability to configure ChanServ privileges
A Added a new database format
A Added SQLite support
A Added more verbose messages on startup
A Added ability for chanserv/suspend and nickserv/suspend to take an expiry time
A Added no nickname ownership config option
A Added m_rewrite
A Added akill IDs
F Fixed crash in clearusers
F Fixed crash in /os oper info
F Fixed eventfd Config check to work properly on OpenVZ
Anope Version 1.9.5
--------------------
A Extended LDAP support
A Added os_oper, os_kill, os_forbid, m_statusupdate, cs_sync, and bs_autoassign
A Added a new configuration file format
A Added a new commands system
A Added a new access system, and cs_flags
F Fixed not logging debug logs to file
F Fixed the mail delay time
F Fixed sending account data for unconfirmed nicks
F Fixed poll() engine build on FreeBSD
F Fixed really large HELP replies being truncated
F Fixed sometimes appending !*@* to valid hosts on access lists
F Fixed m_ssl sometimes failing connecting for no reason
F Fixed crash in cs_entrymsg
F Fixed setting -P on channels with only a botserv bot in it
F Fixed modemanager complaining about prefixless modes on InspIRCd
Anope Version 1.9.4
--------------------
A Automatically set channel founder to the user with the highest access if there is no successor
A /chanserv clone command to copy settings from one channel to another.
A /chanserv mode command
A Ability for users to delete their own access in channels
A Added support for Plexus 3
A Readded in support for /cs op/deop/etc to op/deop you in all channels
A Added LDAP support
A Added live SQL support
A Added support for learning tracking/storing/locking all modes at runtime
A Added m_alias
A Added support for XMLRPC queries
A Added /botserv set msg
A Added /operserv config
A Added /ns cert
A Added /operserv login
F Changed the GHOST command to not allow ghosting unidentified users if the RECOVER command exists
F Some failed logic in /operserv exception that prevents proper exceptions from being added
F Fixed the anope_os_sxlines MySQL table and code to work after restarting
Anope Version 1.9.3
--------------------
A Added italics BotServ kicks support
A Tell users when their nicks expire in /ns glist and /ns info
A Added SSL support
A Prevent negaitve mode changes, kicks, bans, and autokicks from affecting people with the 'god' user mode (On UnrealIRCd, usermode +q)
A Added nickserv/auxpex permission
A Added nickserv ungroup command
A Renamed the SGLINE to be SNLINE
A Added /chanserv saset command
A Added threads for mail sending
A Added m_dnsbl and an asynchronous DNS system
A Added a new language system that uses gettext
A Added m_mysql which uses threads to execute queries
A Added many subcommand modules for some commands, eg ns_set_autoop, ns_set_email, etc
A Added a new logging system that is a bit more flexible
A Added cs_set_misc and ns_set_misc to add miscellaneous set commands
A Added os_modreload, which allows reloading some modules not normally unloable, like the protocol module
A Added FOUNDER access level
A Made OperServ, Global, MemoServ, and ChanServ optional
F Shutting down if a config reload fails
F Autoid to live through restarts on Unreal
F Storing vhosts in MySQL
F Not flushing the anope_extra table before rewriting databaes
F Anoperc start/stop to send the globaloncycle global, and fixed anoperc rehash to really rehash
F Fixed a potential crash if HostServ or BotServ was disbled
Anope Version 1.9.2
--------------------
A K alias to chanserv kick command
A KB alias to chanserv ban command
A The ability to register empty nonregistered channels
A Flatfile plaintext databases and removed old binary ones
A Added in live updating SQL and the ability to execute commands through SQL (see docs/MYSQL)
A Added support for many more modes into Anope and the ability to have generic support for modes unknown to Anope
A Added a mode stacker to combine many mode changes into fewer
A Added in the CS SET PERSIST command which can be used to keep service bots in channels even when the channel is empty
A Added AUTOOWNER OWNER and OWNERME into CS LEVELS
A Added ns_resetpass module to the core
A CS ACCESS VIEW which shows who added the access and last time used
A Last used time to CS AKICK VIEW
A Added a sha_256 encryption module
A Added the ability to load multiple encryption modules, and the ability to seamlessly convert your database between diferent encryptions
A Added configuration options to allow Anope to reconnect if it disconnects from the uplink instead of dieing
A Added support for linking with IPv6
F Unban command to accept an optional nick arg
F Some typos in services.conf
F Crash when users change their host that are identified to a group, but not a nick
F Host length checking in HS SET(ALL) and HS REQUEST
F Only show if a user is online in NS INFO if they are really identiifed for the group of the nick they are on
F Crash when using BSSmartJoin
F Converting access entries to access from xop when a users access is below voice
F A bad pointer passed to the OnDelEvent which could cause some 3rd party modules to crash
F CS FORBID allows to you forbid unregistered channels
F The -nothird command line option to work
F ms_rsend to really work
F SQUITing juped servers on InspIRCd1.2+
Anope Version 1.9.1
--------------------
F Don't enforce akick/forbidden/etc.-restrictions on clients on ulined servers.
F Remove modules_unload_all fini + hack that goes with it.
F Signal handling cleanup.
A Seamless fantasy support on all ChanServ commands, instead of requiring bs_fantasy_*.
F Allow fantasy to be disabled on some commands (e.g. FORBID).
F Some commands (e.g. !help) need to strip the pre-provided channelname from them.
D HelpServ removed
F Command parser cleanup: mod_current_buffer removed and replaced with proper parser. Commands now indicate how they want the buffer split.
F Make NS ENFORCE/RELEASE stuff more sane, redo timers.
A Opertypes (similar to InspIRCd's opertypes)
Provided by Ankit <ankit@nevitus.com> - 2009
F Segfault on shutdown
Provided by Adam <adam@anope.org> - 2009
F NickServ registration is sometimes denied.
F Applied patch from Adam to fix some potential screwups
F More fixes to bs_bot from Adam, plus an extra fix within DoAdd not covered in Adam's patch.
F Fix bs_bot to use the correct parameters, patch from Adam.
F Fix for bug #1004, based from second half of patch from Adam.
F Partial patch by Adam, commenting fix for #1006 for future reference.
F Forward-port r1946: Patch by Adam fixing #1006 (originally caused by #922): modes set by ChanServ are reversed. Thanks!
Provided by DukePyrolator <dukepyrolator@gmx.de> - 2009
F Patch converting all match calls to new method, thanks!
F Add 'w' and 'y' support to dotime(), also prevent an overflow.
F Allow NS STATUS from unregistered users, thanks DP!
F Wild pointers do not a happy Anope make. Thanks DP :)
F Allow NS REGISTER to unregistered nicks, silly oversight. Thanks DP! :)
F Fix call order, thanks to DP
F Pass the right array to do_umode(), fixes mode tracking on Unreal. Thanks to DukePyrolator (yet again :P)
F Fix bs_set help, thanks to DukePyrolator! :)
F Fix two segfaults, noted by DukePyrolator. Thanks!
F Fix part one of #1010, reported by DukePyrolator. (Language settings are not respected in message sending.) Thanks!
F Memory leak on +beI modes.
Provided by Liber <Liber@jasonirc.net> - 2009
F Support operoverride and such things (stop reversing changes from nonopped people where unnecessary)
Anope Version 1.9.0
--------------------
F Modified compile to use g++
F Improve protocol modules support (classes, virtual methods, etc)
F Move core services to use BotInfo
F Move BotInfo and related methods into a class
F Move modules into a class
F Fixed ns resending of passcode issue
F Modules now delete themselves
F additional field where users' masked host can be stored so both masked IP and vhost are available instead of just one.
F No struct Uid, ugly, and, unnecessary that we store UID in BotInfo.
F Prevent deletion of core services via /bs bot
F Module subsystem cleanup ('modules' branch)
F Move modules to use classes somewhat (AnopeInit, AnopeFini)
F Change MODULE_INIT to return a pointer
F Remove duplicate module creation.. have loadModule return a pointer rather than creating one
F Remove buffered loading/unloading, this makes os_modunload perm, but who cares
F Remove 'delayed' loading, this is necessary because of before/after connected to ircd (ircd is before, rest after), I'm sure this can be done better.
A Remove old config, replace with insp-inspired (albeit bind format) config (CBX)
F Clean up protocol modules a bit
A InspIRCd 1.2 support
F Remove old (prior to 1.8.0) db compat
F Establish a proper base for services pseudoclients
F Add ss_main StatServ Hal9000 to play with :)
F Burn automake with fire (CBX)
Provided by mooncup <mooncup@anonnet.org> - 2009
F Automatically reapply vhost on hs off for unreal.
+122
View File
@@ -0,0 +1,122 @@
Anope Version 1.9.6
-------------------
service:channels added to join services to channels
mail block modified to allow configuring of email messages
oper:host and oper:vhost added
oper:require_oper added
options:nonicknameownership added
operserv:akillids added
nickserv/access oper privilege added
Anope Version 1.9.5
-------------------
Don't even try it, get a new config and start over.
Anope Version 1.9.4
-------------------
** ADDED CONFIGURATION DIRECTIVES **
memoserv:modules added ms_ignore
chanserv:modules added cs_clone and cs_mode
nickserv:suspendexpire and nickserv:forbidexpire added
chanserv:suspendexpire and chanserv:forbidexpire added
module added cs_entrymsg
nickserv:modules added ns_ajoin, ns_cert
options:nomlock added
log:target added globops
nickserv:confirmemailchanges added
operserv:modules added os_config, os_login
** MODIFIED CONFIGURATION DIRECTIVES **
operserv:notifications removed osglobal, osmode, oskick, osakill, ossnline, ossqline, osszline, osnoop, osjupe, getpass, setpass, forbid, drop
renamed nickserv:preregexpire to nickserv:unconfirmedexpire
** DELETED CONFIGURATION DIRECTIVES **
opertype:commands removed operserv/umode
operserv:modules removed os_umode
Anope Version 1.9.3
------------------
** ADDED CONFIGURATION DIRECTIVES **
nickserv/auspex privilege added
SSL module added for SSL support
opertype:inherits added to allow opertypes to inherit commands and privs from other opertypes
Various nickserv/saset/* and chanserv/saset/* opertype command privileges added
nickserv:modules added many new ns_set_command modules
chanserv:modules added many new cs_set_command modules
opertype:commands added nickserv/saset/* and chanserv/saset/*
options:socketengine added to choose what socket engine to use
module:cs_set_misc and module:ns_set_misc added to replace the old set url/icq/email modules
options:hideprivilegedcommands added to hide privileged commands from normal users
log block added to customize logging
dns block added to configure dns settings
m_dnsbl added
mysql configuration block added
** MODIFIED CONFIGURATION DIRECTIVES **
opertype:commands changed operserv/sgline to opserv/snline
operserv:modules changed os_sgline to os_snline
operserv:modules added os_modreload
operserv:sglineexpiry changed to operserv:snlineexpiry
operserv:killonsgline changed to operserv:killonsnline
operserv:notifications ossgline changed ossnline
memoserv was made optional
moved operserv:global configuration into its own global block
chanserv was made optional
** DELETED CONFIGURATION DIRECTIVES **
serverinfo:helpchannel removed because it has been readded in m_helpchan
networkinfo:logchannel, logbot, logusers, logmaxusers, logchannel, and options:keeplogs removed because of the log block
dumpcore because it really didn't do anything
Anope Version 1.9.2
--------------------
** ADDED CONFIGURATION DIRECTIVES **
options:enablelogchannel added to auto turn on the logchannel on startup
options:mlock added to configure the default mlock modes on new channels
options:database added for the database modules
options:botmodes added to configure modes BotServ bots should use
options:userlen added to configure maxiumum ident length
options:hostlen added to configure maximum hostname length
options:database added to configure what database modules to use
options:passlen added to specify the maximum length of passwords
uplink:ipv6 added to enable IPv6 connectivity
options:maxretries added to specify the number of reconnect attempts allowed
options:retrywait added to specify how long to wait between reconnect attempts
opertype command chanserv/aop/list removed as it was unnecessary, use chanserv/access/list instead
** MODIFIED CONFIGURATION DIRECTIVES **
options:encryption added enc_sha256
chanserv:modules added cs_unban
nickserv:modules added ns_resetpass
** DELETED CONFIGURATION DIRECTIVES **
nickserv:database deleted because of new database system
nickserv:prenickdatabase deleted because of new database system
chanserv:database deleted because of the new database system
botserv:database deleted because of the new database system
hostserv:database deleted because of the new database system
operserv:database deleted because of the new database system
operserv:newsdatabase deleted because of the new database system
operserv:exceptiondatabase deleted because of the new database system
hs_request:database deleted because of the new database system
os_ignore:database deleted because of the new database system
serverinfo:localport deleted
Anope Version 1.9.1
-------------------
** ADDED CONFIGURATION DIRECTIVES **
Opertypes have been added, through the opertype blocks.
Services Operators are now specified in the oper blocks.
** MODIFIED CONFIGURATION DIRECTIVES **
botserv:modules no longer contains bs_fantasy* modules, fantasy is now seamless.
operserv:modules has replaced os_logonnews, os_opernews, and os_randomnews with os_news.
operserv:modules no longer contains os_admin and os_oper modules, removed in favor of oper blocks.
operserv:notifications no longer contains osraw due to removal of OS RAW.
** DELETED CONFIGURATION DIRECTIVES **
Nick tracking has been removed as an option.
Restricting of NS GETPASS and CS GETPASS removed in favor of opertypes.
Host Setters were removed in favor of opertypes.
HelpServ has been removed entirely.
operserv:disableraw removed due to removal of OS RAW.
+19 -43
View File
@@ -31,10 +31,11 @@ Anope DefCon
The DefCon system is part of Anope's core,
The DefCon system has to be configured on your services.conf file to
be enabled. All directives are optional unless they depend on what
options you enable for each level. Look for the "DefCon configuration"
section on your services.conf file for more information.
The DefCon system has to be configured on your operserv.conf file to
be enabled. Defcon will be disabled if "defaultlevel" in the defcon
block is left commented, or set to 0. Look for the defcon block
on your operserv.conf file for more information on enabling and
configuring it.
Make sure you restart Anope after changing the DefCon configuration
directives.
@@ -43,40 +44,19 @@ Anope DefCon
Pre-defined DefCon actions:
No new channel registrations 1
No New Nick Registrations 2
No MLOCK changes 4
Force Chan Mode 8
Use Reduced Session Limit 16
KILL any new clients trying to connect 32
Services will ignore everyone but opers 64
Services will silently ignore everyone but opers 128
AKILL all new clients trying to connect 256
No new memos sent to block MemoServ attacks 512
These are the values used to determine each defcon setting, are set via:
DefCon1 XX
DefCon2 XX
DefCon3 XX
DefCon4 XX
To set the desired value, you simply add the value of the numbers together
and place that as your DefCon# setting. For instance:
Say you wish to set:
No Channel Registrations, No Nickname Registrations and Services Ignoring
everyone except for Operators. You would do this by:
1 + 2 + 128 (Each value listed above is added together)
Giving: 131
You would then place this as which ever Defcon setting you want:
No new channel registrations
No New Nick Registrations
No Mode Lock changes
Force Chan Mode
Use Reduced Session Limit
KILL any new clients trying to connect
Services will ignore everyone but opers
Services will silently ignore everyone but opers
AKILL all new clients trying to connect
No new memos sent to block MemoServ attacks
DefCon1 131
The recommended default values are safe to use on any network.
Information regarding how to enable this for specific defcon levels can
be found in operserv.conf
4) Usage
@@ -91,22 +71,18 @@ Anope DefCon
/msg OperServ DEFCON 4
*** Global -- from OperServ: dengel Changed the DEFCON level to 4
-OperServ- Services are now at DEFCON 4
-OperServ- * No new channel registrations
-OperServ- * No new nick registrations
-OperServ- * No MLOCK changes
-OperServ- * No mode lock changes
-OperServ- * Use the reduced session limit of 5
-Global- The Defcon Level is now at Level: 4
-Global- The Defcon Level is now at: 4
Restore normal readiness:
/msg OperServ DEFCON 5
*** Global -- from OperServ: dengel Changed the DEFCON level to 5
-OperServ- Services are now at DEFCON 5
-Global- Services are now back to normal, sorry for any inconvenience
+21 -395
View File
@@ -2,415 +2,41 @@ Anope Internal Events
---------------------
1) Intro
2) Complex Events
3) Triggered Events
4) Triggered Events List
2) Using Events
1) Introduction to Internal Events
Internal Events are setup to give module developers more information
about what the core is doing at different times. This information can
be as complex as data we are feeding to the uplink, to simple triggered
events such as the databases being saved. A list of triggered events
can be found below. Additional there is a module included with the core
events such as the databases being saved.
Additionally there is a module included with the core
which can provide some clue as to how to use the code in your modules.
The rest of this document assumes that you are used to writing modules.
2) Complex Events
2) Using Events
This type of events are based around what happens when we talk to the
IRCd, much like MESSAGE events that the IRCD sends to us. The events
are triggered when Anope writes to the ircd. To watch for these events
you must have some knowledge of how the IRCd command system works. In
our example we will trap for NICK events.
Anope is told about modules wanting to hook to events by the function
ModuleManager::Attach(EventName, Module*);, eg:
A) All functions most be formatted as:
ModuleManager::Attach(I_OnJoinChannel, this);
int functioname(char *source, int ac, char **av);
You can also specifcy an array of events:
B) In AnopeInit you must declare EvtMessage in some fashion, it is into
this variable that we will create the event handler. Here is what the
base AnopeInit should look like at this point:
int AnopeInit(int argc, char **argv)
{
EvtMessage *msg = NULL;
int status;
Implementation i[] = { I_OnJoinChannel, I_OnPartChannel };
ModuleManager::Attach(i, this, 2);
Where 2 is the number of events in the list
moduleAddAuthor(AUTHOR);
moduleAddVersion(VERSION);
return MOD_CONT;
}
You must then overload these functions in your main modules class.
The full list of functions and parameters are in modules.h. In this
case, you would be overloading OnJoinChannel() and OnPartChannel() like so:
Note that AUTHOR and VERSION should be defined above the AnopeInit
function, just like you should do with any module.
void OnJoinChannel(User *u, Channel *c) { }
void OnPartChannel(User *u, Channel *c) { }
C) Pass "createEventHandler" the name of the message in this case NICK,
and the function that was created in Step A. At this point you should
assign the return of "createEventHandler" to the EvtMessage variable.
Some of these events can be used to prevent or allow things to happen that
would normally not be allowed or denied. You can also use ModuleManager
(not explained here) to set control which order the modules are queried
(when multiple modules hook to the same event).
msg = createEventHandler("NICK", my_nick);
D) The Handler is not ready for use yet; now you must add it to the hash
with "moduleAddEventHandler". You will want to pass to this function
the return of "createEventHandler".
status = moduleAddEventHandler(msg);
It will return the same module error codes as adding a regular message,
which you can use to confirm it was added correctly.
E) With that setup in your function you will be passed 3 items. The source
most of the time this will be set to ServerName or NULL; consult our
IRCd documentation about how messages are formatted. AC is the count of
variables you will find in AV.
int my_nick(char *source, int ac, char **av)
{
alog("Internal Event - nick is %s",av[0]);
return MOD_CONT;
}
3) Triggered Events
These events also known as "event hooks" are internal events such as
expiring of nicks to the saving of databases.
A) All functions most be formatted as:
int functioname(int argc, char **argv);
B) In AnopeInit you must declare EvtHook in some fashion; it is into
this variable that we will create the event handler. Here is what
the base AnopeInit should look like at this point:
int AnopeInit(int argc, char **argv)
{
EvtHook *hook = NULL;
int status;
moduleAddAuthor(AUTHOR);
moduleAddVersion(VERSION);
return MOD_CONT;
}
C) Pass "createEventHook" the name of the event. In this case we are
going to hook to the saving of databases, "EVENT_DB_SAVING".
hook = createEventHook(EVENT_DB_SAVING, my_save);
D) The Handler is not ready for use yet; now you must add it to the hash
with "moduleAddEventHook". You will want to pass to this function the
return of "createEventHook"
status = moduleAddEventHook(hook);
It will return the same module error codes as adding a regular message,
which you can use to confirm it was added correctly.
E) With that setup in your function you will be passed 1 item. The message
is very simple; it could be as simple as a start, stop or message. In
the case of saving it has a start and stop.
int my_save(int argc, char **argv)
{
if (argc < 1) {
return MOD_CONT;
}
if (!stricmp(argv[0], EVENT_START)) {
alog("Saving the databases! has started");
} else {
alog("Saving the databases is complete");
}
return MOD_CONT;
}
4) Triggered Events List
Here's a list of all event hooks we currently offer, with a description
of what argument is being passed to the event functions for this type of
event. All arguments are plain-text strings (char *). The list is sorted
in alphabetical order.
Note that all events are emitted AFTER the action has taken place, so
any deleted nick/channel/etc won't exist anymore and any created one will
exist when your function is being run, unless noted otherwise.
Also note that EVENT_START and EVENT_STOP should not be matched with an
equal sign, but with string comparision. See the bundled events module for
an example on how to do this.
The arguments are given as av[0] for the first argument, av[1] for the
second argument, and so on. If av[0] and av[1] are given, the event has
two arguments, and argc should be 2.
EVENT_ACCESS_ADD
An user has been added to a channel access list.
av[0] Name of the channel the user has been added to.
av[1] The nickname of the user that has just added an entry to the
access list.
av[2] The nickname of the user that has been added to the access
list.
av[3] The level number the user has been added with.
EVENT_ACCESS_CHANGE
An user level has been changed on a channel access list.
av[0] Name of the channel the access list has been modified which.
av[1] The nickname of the user that has just modified the access
list of the channel.
av[2] The nickname of the user wich his access level has just been
modified.
av[3] The new access level for the user.
EVENT_ACCESS_CLEAR
A channel access list has been cleared.
av[0] Name of the channel the access list has been cleared of
av[1] The nickname of the user that has cleared the access list
EVENT_ACCESS_DEL
An user has been deleted of a channel access list.
av[0] Name of the channel the access entry has been deleted which.
av[1] The nickname of the user that has just deleted the access entry.
av[2] [OPTIONAL] The nickname of the user wich his access level has just
been removed. Not present if numbers were used (e.g. /cs access
del 7).
EVENT_BOT_ASSIGN
A BotServ bot has been assigned to a channel.
av[0] Name of the channel the bot has been assigned to.
av[1] The nickname of the bot that has been assigned to the channel.
EVENT_BOT_BAN
A BotServ bot has banned a user, e.g. kickers.
av[0] The nick of the user banned.
av[1] The Channel the user was banned from.
av[2] The mask that was banned.
EVENT_BOT_CHANGE
The properties of a BotServ bot have been changed.
av[0] The nickname of the bot involved.
EVENT_BOT_CREATE
A new BotServ bot has been created, and is ready to use.
av[0] The nickname of the newly created bot.
EVENT_BOT_DEL
A BotServ bot is being deleted from BotServ. This event is being sent
just before the actual deletion is performed.
av[0] The nickname of the bot being deleted.
EVENT_BOT_FANTASY
A fantasy command of the bot has been triggered. This event should be
used to create your own fantasy commands.
av[0] The fantasy command that has been triggered without leading '!'.
av[1] The nickname of the user that has triggered the fantasy
command.
av[2] The name of the channel the fantasy command has been triggered
on.
av[3] Contains any optional paramenters passed after the fantasy
command. If none are present, this will not exist, and argc will
will be 3.
EVENT_BOT_FANTASY_NO_ACCESS
A fantasy command of the bot has been triggered by someone without
access to BotServ FANTASY commands on the channel. This will NOT
trigger if someone with access has triggered a fantasy command; use
EVENT_BOT_FANTASY for those. Hook to both events to catch both event
triggers.
av[0] The fantasy command that has been triggered without leading '!'.
av[1] The nickname of the user that has triggered the fantasy
command.
av[2] The name of the channel the fantasy command has been triggered
on.
av[3] Contains any optional paramenters passed after the fantasy
command. If none are present, this will not exist, and argc will
will be 3.
EVENT_BOT_JOIN
A BotServ bot has joined a channel and opped itself.
av[0] The channel name the bot has just joined.
av[1] The nickname of the bot that has joined the channel.
EVENT_BOT_KICK
A BotServ bot has kicked a user from a channel.
av[0] The name of the user that has been kicked.
av[1] The name of the channel the user was kicked from.
av[2] The reason for the kick.
EVENT_BOT_UNASSIGN
A BotServ bot is being unassigned from a channel. This event is being
sent before the actual removing of the bot is done.
av[0] The channel name the bot has been unassigned from.
av[1] The nickname of the bot that has been unassigned.
EVENT_CHAN_DROP
A channel has been dropped and deleted.
av[0] The name of the channel that has been dropped.
EVENT_CHAN_EXPIRE
A channel has been expired and will be deleted. The event will be
emitted just before the actual channel deletion happens.
av[0] The name of the channel that has been expired.
EVENT_CHAN_FORBIDDEN
A channel has been forbidden (ChanServ FORBID).
av[0] The name of the channel that has been forbidden.
EVENT_CHAN_KICK
Someone has just been kicked from a channel.
av[0] The nick of the user that has been kicked.
av[1] The channel the user has been kicked from.
EVENT_CHAN_REGISTERED
A new channel has been registered.
av[0] The name of the channel that has been registered.
EVENT_CHAN_SUSPENDED
A channel has been suspended (ChanServ SUSPEND).
av[0] The name of the channel that has been suspended.
EVENT_CHAN_UNSUSPEND
A channel has been unsuspended (ChanServ UNSUSPEND).
av[0] The name of the channel that has been unsuspended.
EVENT_CHANGE_NICK
A user has just changed it's nick.
av[0] The new nickname of the user.
EVENT_CONNECT
This event is emitted when the connection to our uplink hub is being
made.
av[0] EVENT_START or EVENT_STOP, to indicate if it's emitted before
or after the connection has been made. EVENT_STOP is emitted
before our burst is being sent over the link.
EVENT_DB_EXPIRE
This event is emitted when the expiry routines for all things that can
expire in Anope are being run.
av[0] EVENT_START or EVENT_STOP, to indicate if it's being emitted
before or after the expiry routines have been run.
EVENT_DB_SAVING
This event is emitted when the databases are being saved.
av[0] EVENT_START or EVENT_STOP, to indicate if it's emitted before
or after the saving routines have been run.
EVENT_DB_BACKUP
This event is emitted when the databases are backed up.
av[0] EVENT_START when the backup commences, and EVENT_STOP when it
finishes.
EVENT_DEFCON_LEVEL
The DefCon level has just been changed. This event is emitted before
any DefCon-related action is taken. The internal DefConLevel has
already been raised at this point.
av[0] The new level of DefCon being invoked.
EVENT_GROUP
A user has grouped it's nickname to another user group.
av[0] The nickname of the user that joined the group.
EVENT_JOIN_CHANNEL
A user joins a channel.
av[0] EVENT_START or EVENT_STOP. EVENT_START when the user has passed
all access checks and is allowed to join, but has not yet
joined the channel. EVENT_STOP when the user has joined and all
needed modes are set etc.
av[1] The nickname of the user joining the channel.
av[2] The name of the channel the user has joined.
EVENT_NEWNICK
A new user has been introduced on the network.
av[0] The nickname of the newly introduced user.
EVENT_NICK_DROPPED
A user's nick has just been dropped. Note that the nickname information
has already been deleted!
av[0] The nickname of the user that has just been dropped.
EVENT_NICK_EXPIRE
A user's nick has just expired. Note that, as with EVENT_NICK_DROPPED,
the nickname information has already been deleted!
av[0] The nickname of the user that has just expired.
EVENT_NICK_FORBIDDEN
A user's nick has just been forbidden.
av[0] The nickname that has just been forbidden.
EVENT_NICK_IDENTIFY
A user has just identified for it's nickname with NickServ.
av[0] The nickname of the user that just identified.
EVENT_NICK_LOGOUT
A user has just (been) logged out.
av[0] The nickname of the user that has (been) logged out.
EVENT_NICK_REGISTERED
A new user has just registered it's nickname. This event is being
emitted when the registration is completed, but the user modes have not
yet been set.
av[0] The nickname of the newly registered user.
EVENT_NICK_SUSPENDED
A user's nick has just been suspended.
av[0] The nickname that has just been suspended.
EVENT_NICK_UNSUSPEND
A user's nick has just been unsuspended.
av[0] The nickname that has just been unsuspended.
EVENT_PART_CHANNEL
A user parts a channel.
av[0] EVENT_START or EVENT_STOP. EVENT_START when the user is about
to be removed from the channel internally, EVENT_STOP when
this has been done.
av[1] The nickname of the user parting the channel.
av[2] The name of the channel the user has parted.
av[3] The reason the user parted the channel, this is not always sent
so check the count to make sure it was passed. (ac == 4)
EVENT_RELOAD
This event is emitted after the configuration file has been reloaded.
av[0] Always EVENT_START.
EVENT_RESTART
This event is emitted before the services are being restarted.
av[0] Always EVENT_START.
EVENT_SERVER_CONNECT
A new server has just connected to the network.
av[0] The name of the new server.
EVENT_SERVER_SQUIT
A server has sent an SQUIT and is about to be removed from the
network. This event is being sent before the server is actually
removed from the network.
av[0] The name of the server that is being removed.
EVENT_SHUTDOWN
This event is emitted when Anope is being shut down.
av[0] EVENT_START or EVENT_STOP, to indicate where in the process of
restarting the core is. With EVENT_START, services are still
fully online and operating. With EVENT_STOP, every internal
clean up has been done already, and the SQUIT has been sent;
the only thing done after emitting the event is closing the
socket to the uplink hub.
EVENT_SIGNAL
This event is emitted when Anope is quitting because of a signal it
received.
av[0] The quit message that will be sent with the SQUIT for this
shutdown.
EVENT_TOPIC_UPDATED
A channel topic has been succesfully updated. Note that this event is
only emitted if the new topic has been fully accepted and set by the
Anope core.
av[0] The name of the channel involved.
av[1] The new topic set on the channel.
EVENT_USER_LOGOFF
A user has left the network. This event is emitted before the internal
removal is performed, so the user still exists internally.
av[0] The nickname of the user leaving the network.
+8 -478
View File
@@ -1,480 +1,10 @@
Frequently Asked Questions (FAQ) concerning Anope
------------------------------------------------
NOTE:
An updated version of this FAQ can be found on our website: www.anope.org
Table of Contents
-----------------
1) General
1.1) What is Anope?
1.2) Where can I find Anope?
1.3) Does Anope run under Windows?
1.4) Can I send you questions without reading the FAQ, INSTALL or README
files?
1.5) I need support for the XYZ protocol.
1.6) Your Services program doesn't do XYZ like DALnet (or other) Services.
What's wrong?
1.7) I've got a great new idea for Services. Do you want it?
1.8) Examples of features we have been asked about and why we won't add (or
haven't yet added) them, so don't ask us about them:
1.9) Can you help me?
1.10) Where is RootServ?
2) Installation / Configuration
2.1) When I run "make", I get an error message like "missing separator",
"Unassociated shell command", "Unexpected end of line seen", etc.
2.2) I get an error like "Makefile.inc not found".
2.3) I typed "./services" at the command line, but nothing happened!
2.4) Whenever I start Anope, I get a message on my IRC server saying
"connection refused" or something similar, and Anope gives an error
message from the server saying "Closing Link: ...".
2.5) My IRC server is giving me messages like "Connection to
services.whatever.net[127.0.0.1] activated" and then "Access denied --
no N line". Why?
2.6) When I say "/connect services.*", it doesn't work!
2.7) Anope starts up okay, but if I try to register a nickname, it comes
back with "Sorry, registration failed."
2.8) Anope reports (via /stats u or /msg OperServ STATS) a different number
of users online than I get from doing /lusers.
3) OperServ
3.1) Using the OperServ JUPE command results in server messages like
"Server juped.server introduced by non-hub server services.my.net".
3.2) I can't use the ADMIN command to add Services admins, it tells me
"Permission denied."
3.3) When I add an AKILL, the users matching it don't get killed.
3.4) Trying to use OperServ gives me "Access denied", but my nick is in the
ServicesRoot directive and is registered, and I've identified for my
nick.
3.5) When I used the OperServ RAW command, Anope and/or my network crashed,
or did weird things! Please fix this bug!
3.6) I would like to have the list of the different RAW on OperServ.
3.7) I can't get /OS UMODES and /OS SVSNICK to work!
3.8) What is a Super-Admin? How does it work? Why might it not work?
3.9) How can i enable the OperServ RAW command?
4) Bugs / Crashes
4.1) Anope always dies after about five minutes, saying "FATAL ERROR! Can't
back up nick.db".
4.2) Anope crashed with a segmentation fault.
4.3) I've found a bug that's not mentioned here or in the README or BUGS
files. What should I do?
4.4) My FreeBSD box complains about 'Shared object "nss_dns.so.1" not
found'
4.5) Anope and long (more then 30 character) nicknames.
5) ChanServ
5.1) Anope's channel mode setting doesn't work. I can't set modes with
OperServ, and every time ChanServ tries to set a mode, my server
reverses the change.
5.2) Anope ignored the SET SUCCESSOR setting and deleted a channel when the
founder expired.
5.3) How to auto voice all those whom join my #channel?
5.4) Channel options like RESTRICTED or SECUREOPS don't work. What's wrong?
6) BotServ
6.1) How do I add bots to BotServ?
6.2) Why do kick triggers and fantasy commands fail to work with my Bahamut
IRCd?
7) Language
7.1) Anope complains in the logfile about being unable to load the default
language.
7.2) Anope spricht kein Deutsch!, etc. (Anope doesn't speak my language!)
7.3) I selected a language other than English, but sometimes Anope sends
responses in English instead.
8) DevNull
8.1) What is the purpose of DevNull?
-------------------------------------------------------------------------------
1) General
1.1) What is Anope?
Anope is a set of services for IRC networks. See the README file for more
information. And in case you were wondering, Anope is Epona spelt backwards
:)
1.2) Where can I find Anope?
The latest version can always be found at the official Anope distribution
site:
* http://www.anope.org/
New version announcements can also be found at http://www.anope.org/ in the
main page.
1.3) Does Anope run under Windows?
Yes. For more information on how to obtain the windows version of Anope
visit http://wiki.anope.org/Windows
1.4) Can I send you questions without reading the FAQ, INSTALL or README files?
No. If you don't read those files, your messages will most probably be
ignored. We don't mean to be rude, but if we took the time to write down
some documentation, we'd expect you to take some time to read it.
1.5) I need support for the XYZ protocol.
Since Anope 1.7.9, support for other IRCD's, and thus protocols, has been
made modular. More information on making a support file for your favorite
IRCD can be found in the docs/IRCD file.
1.6) Your Services program doesn't do XYZ like DALnet (or other) Services.
What's wrong?
Nothing is wrong, except your expectations. Anope is a completely
different program from that used on DALnet; they are similar in concept
only.
1.7) I've got a great new idea for Services. Do you want it?
We are always interested in hearing new ideas. HOWEVER, do not expect your
proposal to be in the next Anope release for sure. As a rule, we usually
don't add anything that can be equivalently done by other means, or that we
consider totally useless; see question 1.8 for examples of things we don't
plan to add.
Our general intent is for Anope to provide as much functionality as
possible--while staying as lean as possible. So features which are
arguably beneficial will tend to be added, while features of limited or no
benefit or which can be equally provided by something else already in use
will tend to be passed over.
If you'd like to give us your idea, you can go to our website at
http://www.anope.org/ and add it on our online Forum, in the Feature
Requests section.
1.8) Examples of features we have been asked about and why we won't add (or
haven't yet added) them, so don't ask us about them:
* An option to make ChanServ stay in some/all registered channels: we see
absolutely no necessity for this feature, since BotServ already does this
anyway.
* A "current time" field in NickServ and ChanServ INFO displays: Most
people have clocks of some sort either on their computer screens or on
their walls (or both), and all IRC servers, as well as Services, have a
command to return the server's current time. Thus a current-time field in
INFO displays would simply take up extra space for no reason.
1.9) Can you help me?
No, we can't help you unless you tell us what you need help with.
1.10) Where is RootServ?
Anope does not supply RootServ. All functions you would find in RootServ
have been integrated into OperServ. If you really want to use RootServ, you
can set the OperServAlias in services.conf to be RootServ. This will enable
the RootServ nick to be used for OperServ as well. Read the comments near
OperServAlias in the configuration file for more information.
2) Installation / Configuration
2.1) When I run "make", I get an error message like "missing separator",
"Unassociated shell command", "Unexpected end of line seen", etc.
Your make program isn't compatible with the Makefile for Anope. The
Makefile was designed to work with GNU make, and as such may not work on
other systems' "make" programs. If you get an error from "make", obtain
GNU make from ftp://prep.ai.mit.edu/pub/gnu/ (or wherever you prefer) and
use it instead of your system's default "make". Note that GNU make may
already be installed on your system; try using the command "gmake" instead
of "make".
The make programs bundled with SunOS/Solaris and FreeBSD have been reported
not to work; you will need to use GNU make on these systems.
2.2) I get an error like "Makefile.inc not found".
You forgot to run the Config script first. See the INSTALL file for
compilation instructions.
2.3) I typed "./services" at the command line, but nothing happened!
Anope puts itself in the background when it starts, so you get your shell
prompt right back. Meanwhile, Anope will continue setting up, then connect
to the IRC server specified in services.conf (or on the command line). If
it doesn't connect, you probably specified the wrong server type in the
configuration file. (Also make sure that you are actually running one of
the supported servers. There are a gazillion different variations on the
basic IRC protocol out there, and we have neither the time nor the desire
to add support for them.)
The recommended server, under which Epona (the original code base used by
Anope) was developed, is Bahamut. DreamForge 4.6.7 will also work fine, but
it's a bit obsolete nowadays. Derivatives of Bahamut and DreamForge may
also work, if they don't change the server<->server protocol too much;
contact their authors for more information. Most people, though, are
running Anope with UnrealIRCd, UltimateIRCd or Bahamut.
As always, you can check the log file (services.log by default) for error
messages. You can also start services with the -nofork command line option
to prevent it from running in the background, and it will output the
messages written to the log file to the console as well.
2.4) Whenever I start Anope, I get a message on my IRC server saying
"connection refused" or something similar, and Anope gives an error
message from the server saying "Closing Link: ...".
See section 3 of the INSTALL file.
2.5) My IRC server is giving me messages like "Connection to
services.whatever.net[127.0.0.1] activated" and then "Access denied -- no
N line". Why?
This is typically caused by including a port number in the C:line for
services, which tells your server to try to autoconnect to it (depending on
the class (Y:line) settings). This is not what you want, because Anope
will connect to the server itself, but does not listen for servers to
connect to it. The solution is to remove the port number from the C:line.
2.6) When I say "/connect services.*", it doesn't work!
Of course not. RTFM (Read The Fine Manual), and see the previous answer.
2.7) Anope starts up okay, but if I try to register a nickname, it comes back
with "Sorry, registration failed."
Make sure you've selected the correct IRC server type in the configure
script; see question 2.4 for details.
2.8) Anope reports (via /stats u or /msg OperServ STATS) a different number of
users online than I get from doing /lusers.
Anope doesn't count its own pseudo-clients (NickServ, ChanServ, etc.) in
its user count, while the IRC server does.
3) OperServ
3.1) Using the OperServ JUPE command results in server messages like "Server
juped.server introduced by non-hub server services.my.net".
Services' uplink must have an H: line for Services in the ircd.conf file,
which looks something like:
H:*::services.whatever.net
3.2) I can't use the ADMIN command to add Services admins, it tells me
"Permission denied."
Did you define yourself as the Services root? You need to insert your
nickname in the ServicesRoot directive in services.conf. Also, you must be
a global IRC Operator and your nickname must be registered and properly
indentified with NickServ.
3.3) When I add an AKILL, the users matching it don't get killed.
Use the AkillOnAdd configuration directive.
3.4) Trying to use OperServ gives me "Access denied", but my nick is in the
ServicesRoot directive and is registered, and I've identified for my nick.
You need to be a global oper (i.e. user mode +o) to access OperServ. This
can be configured via the OSOpersOnly directive in services.conf .
3.5) When I used the OperServ RAW command, Anope and/or my network crashed, or
did weird things! Please fix this bug!
"That's not a bug, it's a feature."
Have you ever typed /msg OperServ HELP RAW? It's clearly stated there that
this command is dangerous and that its use may result in very bad things.
And that's why this command has been disabled by default. If you enabled
and used it, YOU'RE ON YOUR OWN. All help requests will be ignored, even if
the problem happens not immediately.
3.6) I would like to have the list of the different RAW on OperServ.
If you have to ask, you should not be messing with RAW :)
3.7) I can't get /OS UMODES and /OS SVSNICK to work!
You need to be a SuperAdmin to be able to use these commands.
3.8) What is a Super-Admin? How does it work? Why might it not work?
Super-Admin's have extra privileges, including being founder on all
channels. It must be activated on a per user basis and is only available to
Services Roots. It is set using OperServ and is not persistent. It only
works if SuperAdmin is not commented in the services configuration file.
This is commented by default. Read /msg OperServ HELP SET SUPERADMIN for
further help.
3.9) How can i enable the OperServ RAW command?
Enabling the OperServ RAW command is VERY dangerous and should never be
done on a real network without thinking about it very well first. The RAW
command can easily break your whole network if used incorrectly, and thus
you will receive NO SUPPORT if you enable RAW on your network.
Before you enable RAW, be very sure you really want to enable it, and keep
in mind that you will NOT BE ABLE to receive ANY SUPPORT anymore, because
Anope's stability cannot be guaranteed if RAW is enabled.
The RAW command comes bundled as a core module for operserv. To load it,
add the os_raw module to the list of OperServ core modules. But be sure to
keep in mind that when you enable the RAW command, you CANNOT GET ANY
SUPPORT for Anope anymore.
4) Bugs / Crashes
4.1) Anope always dies after about five minutes, saying "FATAL ERROR! Can't
back up nick.db".
Make sure that the user Anope runs as has write access to the data
directory, and that the data directory actually exists (the latter
shouldn't be a problem if you ran the Config script). This means Anope
needs write and execute permission on the data directory itself and execute
permission on every parent directory of the data directory.
4.2) Anope crashed with a segmentation fault.
See if you can reproduce this by doing a certain sequence of things. If
so, please report it to us (see part 6 of README file). If not, you're
probably out of luck; if you like, you can report it to us anyway, but
chances are it won't get fixed if we don't have instructions on reproducing
it. If you do have such a problem, you may find the crontab utility useful
for dealing with it.
Also, see the DumpCore directive in the configuration file. It allows Anope
to dump its core whenever it's segfaulting, usually calling it core and
placing it into Anope's main directory. Open up gdb by issuing the
following command at your shell:
* gdb services core
(of course replacing 'core' with the name of the core if different) and
type 'bt' at the gdb prompt. After that, send us the output you got and
keep the core file in a safe place, in case we need it to dig deeper into
the problem.
4.3) I've found a bug that's not mentioned here or in the README or BUGS files.
What should I do?
See section 6 of the README file.
4.4) My FreeBSD box complains about 'Shared object "nss_dns.so.1" not found'
We haven't figured out the exact cause yet, but as a quickfix you can
delete the /etc/nsswitch.conf file. Please keep in mind that removing a
configuration file can be dangerous, so only do this if you know what you
are doing.
4.5) Anope and long (more then 30 character) nicknames.
By default anope only supports nicknames up to 30 characters (NICKLEN=30).
If your IRCd allows for longer nicknames or has been modified to do so
anope will start logging a lot of ("NICK from nonexistent nick") messages.
This is because once a user uses a nick that is too long for anope to handle,
anope loses track of the user for the remainder of the session.
It is POSSIBLE but not NOT RECOMMENDED to extend the maximum length of nicknames
anope can track, however this will also break database compatibility. DBs saved
with anope set to allow for example 40 chars cannot be read by a default anope
and vice versa. So changing the maximum nick length is only possible
when starting with fresh databases and even then the consequences of this are
UNTESTED.
In order to change the maximum internal nick length, change the NICKMAX setting
in include/config.h, recompile anope and start without databases.
5) ChanServ
5.1) Anope's channel mode setting doesn't work. I can't set modes with
OperServ, and every time ChanServ tries to set a mode, my server reverses
the change.
Make sure EVERY server on your network has a U: line for Services in
ircd.conf, for example:
U:services.whatever.net:*:*
5.2) Anope ignored the SET SUCCESSOR setting and deleted a channel when the
founder expired.
Normally, this is because the successor had too many channels registered;
in this case, you will see an entry in the log file like the following:
[date] Successor (SuccessorNick) of channel #somechannel owns too many
channels, deleting channel #somechannel
If you don't get a message like this or you can verify that the successor
wasn't running into the channel limit, please report it using the
bug-reporting procedure below (see section 6 of the README file).
5.3) How to auto voice all those whom join my #channel?
Execute the following commands (/cs is an alias for /msg ChanServ):
/cs set #channel secure off
/cs set #channel xop off
/cs levels #channel set AUTOVOICE -1
5.4) Channel options like RESTRICTED or SECUREOPS don't work. What's wrong?
Make sure that you didn't put any of your normal IRCd's as a ULined server
in Anope. Some access checks for clients from ULined servers are skipped to
avoid fights between the ULined servers. This is usually only useful when
you have a statistics server connected to your network.
6) BotServ
6.1) How do I add bots to BotServ?
Read /msg BotServ HELP and /msg BotServ HELP BOT. Note that you need to be
opered up and identified as a Services Administrator before you can use the
BOT command.
6.2) Why do kick triggers and fantasy commands fail to work with my Bahamut
IRCd?
Bahamut allows you to setup a server as 'serviceshub'. This will filter
certain data services usually don't need to process. This option also
filters channel messages, because DALnet's services have no use for them.
Anope parses the channel messages for kick triggers and fantasy commands.
To make sure these work the server type of the hub they're linked to should
be simply 'hub' and not 'serviceshub'.
7) Language
7.1) Anope complains in the logfile about being unable to load the default
language.
You forgot to run "make install".
7.2) Anope spricht kein Deutsch!, etc. (Anope doesn't speak my language!)
See section 5 of the README file.
7.3) I selected a language other than English, but sometimes Anope sends
responses in English instead.
Some language files are not complete--in other words, they don't have a
translation of every message Anope uses, but only some of them. In this
case, the missing messages will be displayed in English. You can either
wait for the primary translator to provide us with a translation, or do the
translation yourself and send us the messages translated into your
language.
8) DevNull
8.1) What is the purpose of DevNull?
DevNull functions as a message sink. Any message sent to it will be
ignored. It will not be logged, there will be no response. It will be lost
forever. Whether it's useful or not is up to you; we just provide you with
the option.
The information in the 1.9 FAQ is subject to change at any
moment due to new developments. Please visit our website
for the most up to date information.
An updated version of the FAQ can be found here:
http://wiki.anope.org/index.php/FAQ
+7 -9
View File
@@ -157,12 +157,12 @@ Note: You should also read the README and FAQ files!
If you're unable to get a link with your IRCd after reading this section,
you might try the interactive link maker, which is located at:
http://anope.org/~heinz/ilm.php
http://anope.org/ilm.php
4) Starting Anope
Go into the directory where binaries were installed (by default, this is
~/services). Type ./services to launch Anope.
~/services/bin). Type ./services to launch Anope.
If there are syntax errors in the configuration file they will be
displayed on the screen. Correct them until there are no errors anymore.
@@ -180,21 +180,19 @@ Note: You should also read the README and FAQ files!
5) Setting up a crontab
A crontab entry will allow you to check periodically whether Anope is
still running, and restart it if not. You'll need to have Anope binaries
and data installed in the same directory for this to work without
modification.
still running, and restart it if not.
First rename the example.chk script that is in Anope path (by default,
this is ~/services) to services.chk and edit it. You'll need to modify
the CONFIGURATION part of the file. Then ensure that the file is marked
as executable by typing chmod +x services.chk, and try to launch the
this is ~/services/data) to services.chk and edit it. You'll need to
modify the CONFIGURATION part of the file. Then ensure that the file is
marked as executable by typing chmod +x services.chk, and try to launch the
script to see if it works (Anope must not be running when you do this ;))
When this is done, you'll have to add the crontab entry. Type crontab -e.
This will open the default text editor with the crontab file. Enter the
following (with correct path):
*/5 * * * * /home/ircd/services/services.chk >/dev/null 2>&1
*/5 * * * * /home/ircd/services/data/services.chk >/dev/null 2>&1
The */5 at the beginning means "check every 5 minutes". You may replace
the 5 with other another number if you want (but less than 60). Consult
+209
View File
@@ -0,0 +1,209 @@
Installation et instructions d'anope
------------------------------------
1) Instalation d'anope
2) Mise Ă  jour d'anope
3) Configuration de l'ircd
4) Mise en route de anope
5) Mise en place d'un fichier crontab
Note: Vous devrez également lire les fichiers README et FAQ !
1) Installation de anope
Note importante: il n'est pas recommandé d'utiliser (et même d'installer)
Anope en tant que root.
Utilisez un utilisateur non privilégié,
La première chose que vous devez faire est d'obtenir le package Anope (si ce n'est déjà fait).
Vous pouvez le trouver ici http://www.anope.org/
Anope peut être installer de deux façons.
1. La méthode recommandée est d'utiliser CMake.
Vous pouvez vérifier si CMake est déjà installé sur votre système en utilisant la
commande: cmake --version ( sur votre vps ou dedier etre loggué en root )
Si c'est installé, vous aurez une ligne qui dit quelque chose qui ressemble à
«version 2.6 cmake-patch 1".
Si la version est inférieure à 2,4 ou si vous obtenez une erreur disant que la commande n'a pas été trouvé,
vous ne serez pas en mesure d'utiliser CMake,
sauf si vous installez vous-même dans votre répertoire home. CMake
vous pouvez le téléchargé ici > http://www.cmake.org/cmake/resources/software.html
Si vous n'arrivez pas Ă  installer (soit en raison du manque d'espace
ou de restrictions par votre fournisseur d'hébergement),
vous pouvez encore utiliser le script de configuration fournis.
Cette option n'est pas recommandée et finira par être retiré, mais il est fourni pour la compatibilité de ces
manque de CMake.
Ensuite, décompressez le package dans votre répertoire home, et allez dans le répértoire
qui viens d'être crée.
Maintenant, tapez ./Config pour lancer le script de configuration. Il va vous poser
quelques questions, et compiler Anope sur votre système.
Si vous ne savez pas repondre à une question, utilisez la valeur par défaut.
Vous pouvez maintenant taper make pour compiler Anope. S'il ya des erreurs dans la
Makefile, * essayez d'utiliser * gmake au lieu. Si cela ne fonctionne toujours pas, vous (ou
votre fournisseur ) doit installer GNU make. Vous pouvez
le Trouvez sur ftp://prep.ai.mit.edu/pub/gnu/.
Maintenant, tapez make install (ou gmake install; voir ci-dessus). Cela permet d'installer
tous les fichiers nécessaires dans les chemins que vous avez spécifié dans la configuration
script, et les permissions du fichier de configuration. Vous devez vous assurer que les données
répertoire ne sont pas accessible par d'autres utilisateurs, que des utilisateurs malveillants peuvent
causer des problèmes sur votre réseau, si les mots de passe ne sont pas cryptés, ou de lire
les mémos de tout utilisateur.
Si vous voyez des erreurs lors de ce processus, s'il vous plaît nous envoyer un mail avec le * complet *
sortie d'erreur, et n'oubliez pas de mentionner votre OS, compilateur et bibliothèque C + +
versions.
Maintenant, allez dans le répertoire de données (par défaut, cd ~/services/data). ouvrer exemple.conf
avec votre éditeur de texte favori. Il contient toute la configuration
directives. Anope va l'utiliser au démarrage. Lisez attentivement les instructions contenues dans
le fichier. l'utilisation des valeurs par defauld n'est pas recomment et anope ne risque pas de fonctionner
Si vous avez besoin d'aide, vous devez vous abonner Ă  la mailing list et par courrier Anope
pour se faire aider par d'autres utilisateurs. Voir le fichier README pour plus de
informations.
2) Mise Ă  jour Anope
Si vous avez un fichier .Diff et que vous voulez patcher les ancienne sources Anope avec,
effectuer les opérations suivantes:
* Copiez le fichier .Diff dans le répertoire racine des sources Anope.
* Type de patch-p1 <file.diff
Notez que la mise à jour anope avec un fichier patch n'est pas recommandé.
Vous devez télécharger une nouvelle source propre, car cela vous donnera les meilleurs résultats..
Pour mettre à jour Anope, suivez simplement les instructions d'installation décrites dans
l'article 1. Il y a cependant quelques règles spécifiques:
* IMPORTANT: Sauvegardez vos anciennes bases de données!
* Si vous mettez à jour vers une nouvelle version majeure, toujours redémarrer avec un
fichier de configuration neuve example.conf.
3) Mise en place du IRCd
Ce Services agit comme un serveur IRC avec des pseudo-clients sur elle. Pour les relier Ă 
votre réseau, vous aurez besoin d'ajouter quelques lignes dans le ircd.conf de leur plate-forme
serveur (comme indiqué dans la directive de configuration RemoteServer).
Pour les échantillons ci-dessous, nous allons prendre services.localhost.net que le nom de la
Services (comme indiqué dans la directive de configuration ServerName). Notez que
présente des échantillons sont faites pour être aussi générique que possible, mais il pourrait y avoir
de petites variations, en fonction de votre IRCd. Pour IRCd aide spécifique aux
de configuration, lire près de la fin de cette section.
Tout d'abord, les lignes C / N, qui permettent aux services de crée un lien. Ils ont également besoin d'un
Y: ligne fonctionne correctement.
Y: 27:180:0:0:4000000
C: 127.0.0.1: mypass: services.localhost.net: 30
N: 127.0.0.1: mypass: services.localhost.net: 30
"mot de pass" est le même mot de passe que vous avez mentionné dans le RemoteServer
directive de configuration. 127.0.0.1 est l'adresse IP Ă  partir de laquelle les services se connecterons
à partir de (reliant en localhost est le moyen le plus efficace pour exécuter les services).
Ensuite, vous avez Ă  mettre en place un U:ligne, qui permettra aux services de changer
modes de canal, de sujets, et bien plus encore, sans ĂŞtre op sur le canal.
U: services.localhost.net: *: *
REMARQUE: si vous avez plus d'un serveur dans votre réseau, cette ligne doit
être ajouté sur tous les autres serveurs, où cela ne risque pas de fonctionner correctement.
Enfin, vous aurez besoin d'ajouter un H:ligne, pour permttre la commande OperServ JUPE
de fonctionner correctement.
H:*::Services.LocalHost.Net
Ne pas oublier de /rehash votre IRCd pour appliquer les modifications.
Une nouvelle tendance dans la configuration ircd hybride, Unreal et Bahamut, qui utilisent une approche plus
«Lisibles» sous forme de configuration. Pour ceux, utiliser quelque chose comme:
link services.localhost.net
{
username *;
hostname localhost;
bind-ip *;
port 6667;
hub *;
password-connect "mypass";
password-receive "mypass";
class servers;
};
Notez que ce bloc de fichiers de configuration de style est diffèrent
sur le IRCd. Consultez le fabricant de lien interactif (le lien est ci-dessous) pour plus
détails sur la configuration exacte utilisée par votre IRCd.
Si vous êtes incapable d'obtenir un lien avec votre IRCd après la lecture de cet article,
vous pouvez essayer le fabricant lien interactif, qui est situé au:
http://anope.org/ilm.php
4) A partir Anope
Allez dans le répertoire où les fichiers binaires ont été installés (par défaut, ce n'est
~/ Services/ bin). Tapez. /Services Ă  lancer Anope.
S'il ya des erreurs de syntaxe dans le fichier de configuration, ils seront
affiche sur l'écran. Corrigez-les jusqu'à ce qu'il n'y à plus d'erreur.
Un démarrage réussi ne générera pas de message.
Donner aux services au moins une minute pour se connecté à votre réseau, comme certains
IRCds sur certains OS peut être très lent pour le processus de liaison. Si rien n'arrive après environ une minute,
il y a probablement un problème de configuration. Essayez
de lancer Anope en mode debug ./services-debug-nofork pour voir toutes les erreurs qu'il
rencontres, et d'essayer de les corriger.
Si vous avez besoin d'aide pour résoudre des erreurs, n'hésitez pas à vous abonner à la Anope
liste de diffusion et de poser là. Voir le fichier README pour plus de détails.
5) Mettre en place un crontab
Une entrée crontab vous permettra de vérifier périodiquement que Anope est
toujours en cours, et redémarrez-le s'il n'est pas.
D'abord renommer le script example.chk qui est dans le chemin de Anope (par défaut,
cela est ~/services/data) pour services.chk et le modifier. Vous aurez besoin de
modifier la partie configuration du fichier. Assurez-vous ensuite que le fichier est
marqué comme exécutable en tapant chmod + x services.chk, et essayer de lancer le
script pour voir si cela fonctionne (Anope ne doit pas ĂŞtre en marche lorsque vous faites cela ;))
Lorsque cela est fait, vous devrez ajouter l'entrée crontab. Type de crontab-e.
Cela va ouvrir l'éditeur de texte par défaut avec le fichier crontab. Entrez le chemin
suivant (avec le chemin correct):
* / 5 * * * * /home/ircd/services/data/services.chk> /dev/nul 2> & 1
Le * / 5 au commencement signifie "vérifier toutes les 5 minutes". Vous pouvez remplacer
le 5 avec un autre numéro si vous voulez (mais moins de 60). Consulter
pages de manuel de votre système pour plus de détails sur la syntaxe de la crontab
fichier. Intéressant pages de manuel sont crontab (5), crontab (1) et cron (8).
Sauvegarder et quitter, et il est installé.
+202 -601
View File
@@ -1,601 +1,202 @@
How To Add IRCd Support
-----------------------
1) Files to Edit
2) Modifing the Header File
3) The Code
4) Modes
5) Functions / Events
6) CAPAB/PROTOCTL
1) Files to Edit
When preparing to add support to Anope for your ircd, you need to edit
the following files.
A) Make a copy of the .c and .h file of the IRCd that matches the ircd
that you are attempting to add support for best.
B) Make a backup copy of include/services.h, include/sysconf.h.in
C) Make a backup copy of Config and configure.in
First step in this process is to rename the .c and .h file after the IRCd
that you are going to be adding support for. Its recommended that you come
up with a name that is clear and easy to understand.
Now that you have the files that you will need to create your own ircd
support, starting with Config. This file is a shell script file; scroll
down until you find the list of ircs for the user to select. Indicate
the based ircd version which is supported such as a series 1.x or 2.2.x,
placing in the comment side an exact version that the support is for or
"experimental" if you are not the ircd developer. The next step is to
decide how the IRCd will be defined, following the existing examples edit
'IRCTYPE_DEF="IRC_RATBOX"' to be the descriptive define for your ircd.
With the Config file ready to go, edit configure.in and find in there the
reference to --with-ircd. You should see the various other ircds, and
you will want to add yours in there using the same IRC_ name you came up
with above. Important in this step is to make sure that you set the
IRCDFILE to the name of the .c file you set in step 1. Once you have the
configure.in created you can remove the old configure and at the command
prompt type "autconf"; this will generate the new configure file.
Getting close to actually modify code. Open sysconf.h.in and add two
lines for your given ircd, which is similar to this:
/* "First IRCD type" */
#undef IRC_RATBOX
Open services.h and add a line with the rest of the ircd include files to
match the name of the .h file you set in step 1.
#include "ratbox.h"
Taking the .c and .h file open them and replace the #ifdef IRC_* with the
IRC_ name you set in step two. Ensure that the code comments at the top
of the file match the ircd that the code will be for.
You are now ready to start getting into the code.
2) Modifying the Header File
Now that you have gotten past the first part of the creation process, you
are into the code. This part is the harder and more complex part. You
will need a general understanding of C code to continue. Here are the
step by step instructions required to make this work.
Open the .h file and find the section of code with
#define PROTECT_SET_MODE "+"
#define PROTECT_UNSET_MODE "-"
#define CS_CMD_PROTECT "PROTECT"
#define CS_CMD_DEPROTECT "DEPROTECT"
#define FANT_PROTECT_ADD "!protect"
#define FANT_PROTECT_DEL "!deprotect"
#define LEVEL_PROTECT_WORD "AUTOPROTECT"
#define LEVELINFO_PROTECT_WORD "PROTECT"
#define LEVELINFO_PROTECTME_WORD "PROTECTME"
If the ircd supports a protective/admin (not owner) mode, set the
PROTECT_SET_MODE and PROTECT_UNSET_MODE to be that mode. On most ircds
it's usermode "a" so you will be setting it to "+a" and "-a". The next
two are based more on what this mode is called. When you message ChanServ
to get this mode, this is the command you will be using. After this are
the fantasy commands which can be used in channel to get these modes. The
next three relate to the ACCESS LEVEL list system. Again these are the
words to gain these levels in the ACCESS LEVEL system. If your ircd does
not have these functions, leave them at what ever value is currently set;
the core code will ignore the request of the user.
Now that this is set, you can define the MODES. All user modes are stored
with UMODE_ followed by a letter matching the modes case; be careful to
use the correct case as this will make it clear when you setup MODES in
the .c in a few. Use hex values for the modes so starting at 0x00000001
to 0x8000000. In most cases you want to list all modes. If you run out of
values look at removing any modes that do not impact services.
Channel modes are done much like user modes, with the exception that
bans, exceptions, invites, and modes that are applied to a user such as
op and voice are not defined here. All other modes are defined in here.
Again be clear and use the correct case and use hex values as done with
user modes.
Finally we come to DEFAULT_MLOCK; this is the mode that services will set
by default on channels when they are registered. In general you want this
to be what is acceptable by the ircd; in most cases this is "+nt"
3) The Code
Here is where the code of the .c file comes in. Be prepared to spend at
least an hour, if not longer, going over the code and getting it right;
Especially if you are setting up an ircd that is completely different
than the one you used as a base. This section covers the majority of the
code that is in use.
The first bit of code you will face is:
const char version_protocol[] = "Ratbox IRCD";
This the protocol name which will appear in various places; especially
when you do -version at the command prompt, this is where you state the
server name. The version is not always needed unless you are showing that
the support is for one branch of a ircd family, such as Unreal 3.1 and
Unreal 3.2.
Once you have decided on this little piece of code, you will come to
flood mode characters being used for setting and removing. If your IRCd
does not support flood modes, you can just use ""; we will be setting if
your IRCD supports flooding or not in a little bit.
const char flood_mode_char_set[] = "+f";
const char flood_mode_char_remove[] = "-f";
The next task that you will face is setting whether the IRCD sends time
stamps on modes but does not tell us that it will do so. If it does, set
UseTSMODE to 1; if it does not set it to be 0. If you're not sure refer
to your IRCd's documentation on how MODE is sent.
int UseTSMODE = 0;
Now you've come to the part where you setup your ircd. There are two
structs which hold this information; This allows you to quickly setup
your specific ircd.
IRCDVar ircd[] = { }
This struct contains your basic IRCd functions. Your base source file has
the list of all available variables; note that you should not swap any
around, or you will break stuff. Here is a brief description of the usage
of each.
1) Name: This member tells Anope about the IRCD's name. It may contain
text about it's name and version. This is used to identify the
build on startup.
2) NickServ Mode: This is the user mode set by Anope on NickServ.
Normally you want this to be some form of oper flag,
or a services flag.
3) ChanServ Mode: This is the user mode set by Anope on ChanServ.
Normally you want this to be some form of oper flag,
or a services flag.
4) MemoServ Mode: This is the user mode set by Anope on MemoServ.
Normally you want this to be some form of oper flag,
or a services flag.
5) HostServ Mode: This is the user mode set by Anope on HostServ.
Normally you want this to be some form of oper flag,
or a services flag. Note that if your ircd does not
support HostServ, you can safely make this NULL or +,
as there is a check before bringing HostServ online.
6) OperServ Mode: This is the user mode set by Anope on OperServ.
Normally you want this to be some form of oper flag,
or a services flag.
7) BotServ Mode: This is the user mode set by Anope on BotServ.
Normally you want this to be some form of oper flag,
or a services flag.
8) HelpServ Mode: This is the user mode set by Anope on HelpServ.
Normally you want this to be some form of oper flag,
or a services flag.
9) DevNull Mode: This is the user mode set by Anope on DevNull.
Normally you want this to be some form of oper flag,
or a services flag.
10) Global Mode: This is the user mode set by Anope on Global.
Normally you want this to be some form of oper flag,
or a services flag.
11) NickServ Alias Mode: This is the user mode set by Anope on the alias
of NickServ. Normally you want this to be some
form of oper flag, or a services flag.
12) ChanServ Alias Mode: This is the user mode set by Anope on the alias
of ChanServ. Normally you want this to be some
form of oper flag, or a services flag.
13) MemoServ Alias Mode: This is the user mode set by Anope on the alias
of MemoServ. Normally you want this to be some
form of oper flag, or a services flag.
14) HostServ Alias Mode: This is the user mode set by Anope on the alias
of MemoServ. Normally you want this to be some
form of oper flag, or a services flag. Note that
if your ircd does not support HostServ, you can
safely make this NULL or +, as there is a check
before bringing HostServ online.
15) OperServ Alias Mode: This is the user mode set by Anope on the alias
of OperServ. Normally you want this to be some
form of oper flag, or a services flag.
16) BotServ Alias Mode: This is the user mode set by Anope on the alias
of BotServ. Normally you want this to be some
form of oper flag, or a services flag.
17) HelpServ Alias Mode: This is the user mode set by Anope on the alias
of HelpServ. Normally you want this to be some
form of oper flag, or a services flag.
18) DevNull Alias Mode: This is the user mode set by Anope on the alias
of DevNull. Normally you want this to be some
form of oper flag, or a services flag.
19) Global Alias Mode: This is the user mode set by Anope on the alias
of Global. Normally you want this to be some form
of oper flag, or a services flag.
20) BotServ Bots Mode: This is the user mode set by Anope on all BotServ
bots. Normally you want this to be a some form of
service or bot flag; you can use + for no mode at
all.
21) Max Channelmode Symbols: This is the total number of possible channel
modes that can appear before a nick. Do
remember to count each possible mode, so +ov
is 2.
22) Modes to Remove: This is every mode that Anope should remove when
stripping channel modes.
23) Channelmode for bots: When a BotServ bot joins a channel, this is the
mode set on them. Normally you will want them
opped (+o), and protected (+a) on IRCd's that
support it.
24) SVSNICK: Can the ircd use SVSNICK to change some ones nick? Otherwise,
KILL is used. Use 1 for yes, 0 for no.
25) VHOST: Can a user's host be changed on the fly? Enabling this allow
HostServ online. Use 1 for yes, 0 for no.
26) OWNER: Has a channel umode for being the channel owner. For example,
UnrealIRCd has mode +q. Use 1 for yes, 0 for no.
27) OWNER MODE SET: What mode to set to make someone the owner. If the
IRCd doesn't support owners, set this to NULL.
28) OWNER MODE UNSET: What mode to unset to take away someone's channel
owner status. If the IRCd doesn't support owners,
set this to NULL.
29) ADMIN MODE SET: What mode to set to make someone a channel admin.
If the IRCd dosn't support admins, set to NULL.
30) ADMIN MODE UNSET: What mode to unset to take away channel admin.
If the IRCd dosn't support admins, set to NULL.
31) Mode on Nick Register: What mode to give users when they register
with NickServ. If your ircd doesn't set expect
a mode to be set on registration, you should
set this to NULL.
32) Mode on Nick Unregister: What mode to set give users when they cancel
their registration with NickServ. If your
IRCd doesn't set a mode for registered users
you should set this to NULL.
33) Mode on Nick Change: What mode to give users when they change their
nick. If your ircd doesn't set a mode, you
should set this to NULL.
34) SGLINE: Does the IRCd support realname (geocs) bans? Use 1 for yes,
0 for no.
35) SQLINE: Does the IRCd support nick bans? Use 1 for yes, 0 for no.
36) SZLINE: Does the IRCd support SZLINES? Use 1 for yes, 0 for no.
37) HALFOP: Is channel mode +h for halfop supported by the IRCd? Use 1 for
yes, 0 for no.
38) Number of Server Args: When an IRCd connects, this is the number of
parameters that are passed.
39) Join to Set: Services must join a channel to set any modes on that
channel. Use 1 for yes, 0 for no.
40) Join to Message: Services must join a channel to send any message to
that channel (cannot override +n). Use 1 for yes,
0 for no.
41) Exceptions: Support for channel exceptions (mode +e). Use 1 for yes,
0 for no.
42) TS Topic Forward: Some IRCd's (like UnrealIRCd) like their topic TS
set forward by +1. Use 1 for yes, 0 for no.
43) TS Topic Backward: Some IRCd's (mainly older DreamForge-like ones)
like their topic TS set back by -1. Use 1 for yes,
0 for no.
44) Protected Umode: UMODE_ define that defines the protected usermod.
Use 0 for no support, or enter the UMODE_ define.
45) Admin: Support for channel admins (Mainly used by UltimateIRCd). Use
1 for yes, 0 for no.
46) SQline Channels: The IRCd's supports banning channel names via
SQLINES. Use 1 for yes, 0 for no.
47) Quit On Kill: When we (SVS)KILL a user, does the IRCd send back a
QUIT message for that user? Use 1 for yes, 0 for no.
48) SVSMODE -b: We can use SVSMODE to unban hosts from a channel. Use
1 for yes, 0 for no.
49) Protect: Support for channel protect (mode +a, mainly being used by
UnrealIRCd and ViagraIRCd). Use 1 for yes, 0 for no.
50) Reverse: We can do a reverse check when unbanning. For use with
DreamForge based IRCd's. Use 1 for yes, 0 for no.
51) Register Channels: Supports sending a channelmode for registered
channels. Use 1 for yes, 0 for no.
52) Registered Mode: Channelmode to set on registered channels, see the
option above. Use 1 for yes, 0 for no.
53) vIdent: Support for including a user's ident in their vHost. Use
1 for yes, 0 for no.
54) SVSHOLD: Support for temporarily 'holding' a nick, instead of using
a nick enforcer client. Use 1 for yes, 0 for no.
55) TS on MODE: We need to send a timestamp when modes are being changed.
Use 1 for yes, 0 for no.
56) NICKIP: The IP address of new users is being sent along with their
hostname when new users are being introduced on the network.
Use 1 for yes, 0 for no.
57) Umode: We can use OperServ to change a user's mode. Use 1 for yes,
0 for no.
58) O:LINE: We can use OperServ to give some user a temporary O:LINE.
Use 1 for yes, 0 for no.
59) Vhost On Nick: On NICK the IRCd sends the VHOST. Use 1 for yes,
0 for no.
60) Change Realname: Change real name. Use 1 for yes, 0 for no.
61) Extra Help: If the IRCd has more help for functions in ChanServ than
the default help, you should put the language string
identifier here. Use 0 for no extra help.
62) No Knock: CMODE_ that defines NO KNOCK. Use 0 for no support.
63) Admin Only: CMODE_ that defines Admin Only. Use 0 for no support.
64) Default MLock: Default channelmodes for MLOCK. Use 0 for no modes.
65) Vhost Umode: UMODE_ that indicates if the user currently has a vHost.
Use 0 for no support.
66) Flood Mode: The IRCd has a channelmode for blocking floods. Use 1 for
yes, 0 for no.
67) Link Mode: The IRCd has a channelmode for linking a channel to some
other channel. Use 1 for yes, 0 for no.
68) CMode F: CMODE_ that defines flood mode. Use 0 for no support.
69) CMode L: CMODE_ that defines link mode. Use 0 for no support.
70) Check Nick ID: Should we check if a user should remain identified when
changing their nick? This is for IRCd's that remove
their registered-user mode when someone changes their
nick (like Bahamut does).
Use 1 for yes, 0 for no.
71) No Knock Requires +i: Does the No Knock channel mode require invite
only channels? Use 1 for yes, 0 for no.
72) Chan Modes: If sent in CAPAB/PROTOCOL, we store it in here. This is
NULL by default.
73) Tokens: Can we use tokens to talk to the IRCd? Use 1 for yes,
0 for no.
74) Token Case Senstive: Are the IRCd's TOKENS/COMMANDS case sensitive?
Use 1 for yes, 0 for no.
75) base64 SJOIN TS: Are the timestamps sent with a SJOIN in base64? Use
1 for yes, 0 for no.
76) Supports +I: Does the IRCd support channelmode +I? Use 1 for yes,
0 for no.
77) SJOIN Ban Char: Character used to identify bans. Use ''.
78) SJOIN Except Char: Character used to identify exceptions. use ''.
79) SVSMODE UCMODE: Can we clear user channel modes with SVSMODE? Use
1 for yes, 0 for no.
80) SGline Enforce: Does the IRCd enforce SGLINES for us or do we need to
do so? Use 1 for yes, 0 for no.
81) Vhost Character: The character used to represent the vHost mode, if
this is supported by the IRCd.
82) TS6: Does the IRCd support TS6? Use 1 for yes, 0 for no.
83) UMode +h: Does the IRCd support usermode +h for helpers?
Use 1 for yes, 0 for no.
84) P10: Is this IRCd a P10-style IRCd? Use 1 for yes, 0 for no.
85) Character Set: Unreal passes the character set during PROTOCTL,
the value is stored here. Set this NULL to start.
86) Reports sync: Does the IRCd report when it's in sync (or done bursting,
depending on how you want to say it)? Remember to set
the sync state for servers correctly if it does.
Use 1 for yes, 0 for no.
87) Channel CIDR: Set to 1 if channel bans, excepts and invites
support CIDR masks. Expected syntax: *!*@ip/mask.
When set to 1, anope will only parse strict CIDR masks.
IRCd's that try to correct invalid CIDR's (like nefarious)
will need a custom implementation in the core.
Contact the anope Dev Team if this is the case.
Set to 0 if CIDR's are not supported by your IRCd.
So we've had this long list. Now there's a second struct to fill. This
struct isn't as long as the previous one though, so we'll handle it quite
quick compared to the previous one.
IRCDCAPAB ircdcap[] = { }
This struct is based on the CAPAB defines. You should review the CAPAB
table below to see how this should be done.
Define Table
--------------------------------------------------------------------------
Define | Value | Token | Description
----------------|------------|-----------|--------------------------------
CAPAB_NOQUIT | 0x00000001 | NOQUIT | NOQUIT protocol support
CAPAB_TSMODE | 0x00000002 | TS | Chanmodes are timestamped
CAPAB_UNCONNECT | 0x00000004 | UNCONNECT | UNCONNECT protocol support
CAPAB_NICKIP | 0x00000008 | NICKIP | IP sent in the NICK line
CAPAB_NSJOIN | 0x00000010 | SSJOIN | Smart SJOIN support
CAPAB_ZIP | 0x00000020 | ZIP | Support for gzipped links
CAPAB_BURST | 0x00000040 | BURST | Supports BURST command
CAPAB_TS3 | 0x00000080 | TS3 | Support for TS3 protocol
CAPAB_TS5 | 0x00000100 | TS5 | Support for TS5 protocol
CAPAB_DKEY | 0x00000200 | DKEY | DH-Key exchange using DKEY
CAPAB_DOZIP | 0x00000400 | ZIP | Link traffic will be gzipped
CAPAB_DODKEY | 0x00000800 | DKEY | Do DKEY with this link
CAPAB_QS | 0x00001000 | QS | Supports quit storm removal
CAPAB_SCS | 0x00002000 | SCS | String Cache System support
CAPAB_PT4 | 0x00004000 | PT4 | Support for PT4 protocol
CAPAB_UID | 0x00008000 | UID | Support for UIDs
CAPAB_KNOCK | 0x00010000 | KNOCK | Supports KNOCK
CAPAB_CLIENT | 0x00020000 | CLIENT | Supports CLIENT
CAPAB_IPV6 | 0x00040000 | IPV6 | Support for IPv6 addresses
CAPAB_SSJ5 | 0x00080000 | SSJ5 | Smart Join protocol 5 support
CAPAB_SN2 | 0x00100000 | SN2 | Support for SN2 protocol
CAPAB_VHOST | 0x00200000 | VHOST | Supports VHOST protocol
CAPAB_TOKEN | 0x00400000 | TOKEN | Supports s2s tokens
CAPAB_SSJ3 | 0x00800000 | SSJ3 | Smart Join protocol 3 support
CAPAB_NICK2 | 0x01000000 | NICK2 | Support for extended NICK (v2)
CAPAB_UMODE2 | 0x02000000 | UMODE2 | Supports UMODE2 command
CAPAB_VL | 0x04000000 | VL | VLine information in info field
CAPAB_TLKEXT | 0x08000000 | TLKEXT | Not 8, but 10 params in TKL's
CAPAB_CHANMODE | 0x10000000 | CHANMODE | Channel modes are passed here
CAPAB_SJB64 | 0x20000000 | SJB64 | SJOIN timestamps are base64 encoded
CAPAB_NICKCHARS | 0x40000000 | NICKCHARS | Character set used by the IRCD for nicks
4) Modes
The next thing you should do is defining the user modes. You will want to
have your .h file handy for this part.
unsigned long umodes[128] = { }
This array goes from 0 to 127 in the ASCII character set. Insert the user
modes at the slot where the mode fits. If you are adding a the user mode
of +i find the 105th (ASCII code of 'i') character slot in the array, and
place the UMODE_i into this slot. Your base .c file should contain a good
start for this, as well as a little help locating the characters.
The following mode set is for the channel symbols. During a SJOIN event
the modes are sent usually before the nick. These normally are @, +, %
etc.. depending on the ircd. Starting at ASCII 0 and running to 127.
Replace the 0 with the character (o = @, h = %) for the given mode. In the
case of halfop which is usually sent as % replace the 37th character with
'h', do this until all modes that are possible be received in this manor
have been inserted into the array.
Now that you have that complete, the following array is ready to be dealt
with. This is the cmmodes array, like the others it is a ASCII array
starting at 0 and going to 127. However at the given letter you will want
to enter the add, and delete function for the given mode. In the case of
bans (+b) there is add_ban, and del_ban. Anope provides functions for
bans, exceptions and invites, should your ircd have more then these please
contact Anope to discuss what can be done to add this mode.
5) Functions and Events
A brief word about functions and events. All events are captured using:
void moduleAddIRCDMsgs(void)
{
m = createMessage("NICK", anope_event_nick);
addCoreMessage(IRCD,m);
}
Each event should have a event handler if its important enough to be
processed by services. All event functions should be formed like this:
int anope_event_capab(char *source, int ac, char **av)
{
return MOD_CONT;
}
They will receive the source; this can be NULL at times depending on the
event. Next, ac is the number of arguments that are in the event, and av
holds the values for each; so av[0] is the first variable, av[1] will be
the second one, and so on. Events are likely to pass to various upper
level event handlers; see the previous ircd source for how they handle
these events.
All commands are formed like this:
void anope_cmd_svsnoop(char *server, int set)
{
send_cmd(NULL, "SVSNOOP %s %s", server, (set ? "+" : "-"));
}
They may take any number of arguments, depending on the command. They
should eventually come to a send_cmd(); this root function is how
commands are sent to the IRCd.
6) CAPAB/PROTOCTL
Most IRCD send a CAPAB or PROTOCTL line so that they can work out what
the other end of the connection is capable of doing. Anope has a function
to read these lines and set itself up to to handle these events better.
When adding support for your ircd, take the following steps.
1) In the ircd.c find the function anope_cmd_capab(); this function will
send the CAPAB/PROTOCTL line (consult your ircd documentation for
which to send). In a single line type in the tokens that anope must
send. Here is an example of Hybrid's capab line:
/* CAPAB */
void anope_cmd_capab()
{
send_cmd(NULL, "CAPAB TS5 EX IE HOPS HUB AOPS");
}
2) In the ircd.h file make sure to place the defines (see below) that
match your IRCd's tokens; only use the ones that matter to your ircd.
Should your IRCd add new features not covered in the defined, please
contact the Anope Dev team before doing so. See README for information
on how to contact the Anope team.
3) Ensure that the CAPAB/PROTOCTL event his handled correctly.
A) In the function "moduleAddIRCDMsgs" making sure that you have the
following two lines:
m = createMessage("CAPAB", anope_event_capab);
addCoreMessage(IRCD,m);
B) Add the function to handle the event
int anope_event_capab(char *source, int ac, char **av)
{
capab_parse(ac, av);
return MOD_CONT;
}
This function should call the capab_parse function which parses
the received CAPAB/PROTOCTL line.
How To Add IRCd Support
-----------------------
1) Files to Edit
2) The Code
3) The IRCDVar struct
4) Modes
5) Functions / Events
6) CAPAB/PROTOCTL
7) IRCDProto Class
1) Files to Edit
When preparing to add supprt to Anope for your IRCd, you need to edit
the following files
A) Make a copy of the .cpp file of the IRCd that matches the IRCd that
you are attempting to add support for best.
B) Add your IRCd into the supported IRCds in example.conf
2) The Code
Here is where the code of the .cpp file comes in. Be prepared to spend at
least an hour, if not longer, going over the code and getting it right;
Especially if you are setting up an ircd that is completely different
than the one you used as a base. This section covers the majority of the
code that is in use.
The first bit of code you will face is the IRCDVar structure, This is one
of two structs which holds your IRCd information; This allows you to quickly
setup your specific ircd.
IRCDVar myIrcd[] = { };
This struct contains your basic IRCd functions. Your base source file has
the list of all available variables; note that you should not swap any
around, or you will break stuff. Here is a brief description of the usage
of each.
1) Name: This member tells Anope about the IRCD's name. It may contain
text about it's name and version. This is used to identify the
build on startup.
2) Pseudo Client Mode: This is the user mode set by Anope on all BotServ
bots. Normally you want this to be a some form of
service or bot flag; you can use + for no mode at
all.
3) Max Channelmode Symbols: This is the total number of possible channel
modes that can appear before a nick. Do
remember to count each possible mode, so +ov
is 2.
4) SVSNICK: Can the ircd use SVSNICK to change some ones nick? Otherwise,
KILL is used. Use 1 for yes, 0 for no.
5) VHOST: Can a user's host be changed on the fly? Enabling this allow
HostServ online. Use 1 for yes, 0 for no.
6) SNLINE: Does the IRCd support realname (geocs) bans? Use 1 for yes,
0 for no.
7) SQLINE: Does the IRCd support nick bans? Use 1 for yes, 0 for no.
8) SZLINE: Does the IRCd support SZLINES? Use 1 for yes, 0 for no.
10) Join to Message: Services must join a channel to send any message to
that channel (cannot override +n). Use 1 for yes,
0 for no.
11) SQline Channels: The IRCd's supports banning channel names via
SQLINES. Use 1 for yes, 0 for no.
12) Quit On Kill: When we (SVS)KILL a user, does the IRCd send back a
QUIT message for that user? Use 1 for yes, 0 for no.
13) SVSMODE UNBAN: We can use SVSMODE to unban hosts from a channel. Use
1 for yes, 0 for no.
14) Reverse: We can do a reverse check when unbanning. For use with
DreamForge based IRCd's. Use 1 for yes, 0 for no.
15) vIdent: Support for including a user's ident in their vHost. Use
1 for yes, 0 for no.
16) SVSHOLD: Support for temporarily 'holding' a nick, instead of using
a nick enforcer client. Use 1 for yes, 0 for no.
17) TS on MODE: We need to send a timestamp when modes are being changed.
Use 1 for yes, 0 for no.
18) Umode: We can use OperServ to change a user's mode. Use 1 for yes,
0 for no.
19) OMODE: We can use OperServ to give some user a temporary O:LINE.
Use 1 for yes, 0 for no.
20) No Knock Requires +i: Does the No Knock channel mode require invite
only channels? Use 1 for yes, 0 for no.
21) SVSMODE UCMODE: Can we clear user channel modes with SVSMODE? Use
1 for yes, 0 for no.
22) SGline Enforce: Does the IRCd enforce SNLINES for us or do we need to
do so? Use 1 for yes, 0 for no.
23) TS6: Does the IRCd support TS6? Use 1 for yes, 0 for no.
24) Global TLD Prefix: Prefix used to send global messages, should probably
be "$"
25) Max Modes: The max number of mode changes we can send in one line
3) Modes
Anope is told about modes in the protocol module.
For the most part, the syntax for adding channel and user modes are:
ModeManager::AddUserMode(new UserMode(UMODE_NETADMIN, "UMODE_NETADMIN", 'N'));
Where 'N' is the char for the mode, and UMODE_NETADMIN shows what the
mode does. Or:
ModeManager::AddChannelMode(new ChannelMode(CMODE_BLOCKCOLOR, "CMODE_BLOCKCOLOR", 'c'));
Where 'c' is the char for the mode and CMODE_BLOCKCOLOR shows what
the mode does
A full list of valid mode names for the second param can be found
in services.h in the enum for ChannelModeName and UserModeName
If necessary, you can add additional modes to this list.
Adding simple modes with parameters is similar, instead adding a
'new ChannelMode', use 'new ChannelModeParam', set the third optional
arg of ChannelModeParam to false if the param should NOT be sent when unsetting
it. Eg:
ModeManager::AddChannelMode(new ChannelModeParam(CMODE_JOINFLOOD, "CMODE_JOINFLOOD", 'j', true));
Anope will internally track the params, and they can be retrieved through
Channel::GetParam();
If you want to make param validity checking for a mode, you must create a new
class which inherits from ChannelModeParam and overload the IsValid function.
Modes CMODE_OPERONLY, CMODE_ADMINONLY, and CMODE_REGISTERED already exist
internally as classes, to overload the CanSet function to disable non opers
from mlocking (or in CMODE_REGISTERED's case, anyone) from setting them.
This should be added like:
ModeManager::AddChannelMode(new ChannelModeOper('O'));
4) Functions and Events
A brief word about functions and events. All events are captured by creating a Message struct
with the name of the message and the callback function:
Message my_message("MESSAGE", do_my_messsage);
Each message should have a message handler if its important enough to be
processed by services. All event functions should be formed like this:
bool do_my_message(const Anope::string &source, const std::vector<Anope::string> &params)
{
return true;
}
They will receive the source; this can be empty at times depending on the
event. Next, params holds the arguments for the event. Events are likely to
pass to various upper level event handlers; see the previous ircd source for
how they handle these events.
5) CAPAB/PROTOCTL
Most IRCDs send a CAPAB or PROTOCTL line so that they can work out what
the other end of the connection is capable of doing. The protocol module should
handle all of these without the cores knowledge with the exception of the following:
--------------------------------------------------------------------------
Define | Description
----------------|---------------------------------------------------------
CAPAB_NOQUIT | NOQUIT protocol support
CAPAB_TSMODE | Chanmodes are timestamped
CAPAB_UNCONNECT | UNCONNECT protocol support
CAPAB_QS | Quitstorm - same as NOQUIT
You can override the default OnCapab method in IRCdMessage if required.
6) IRCDProto Class
The IRCDProto class is set up like:
class MyIRCdProto : public IRCDProto { } ircdproto;
And told to Anope through the
pmodule_ircd_proto(&ircd_proto);
function.
This is used for sending out specific messages from Anope to your IRCd.
A list of all of the valid function names to overload and their args
are in services.h. If the protocol module you are editing is similar enough
to the IRCd you are adding support for, many of these probably won't need to
be changed.
+46
View File
@@ -0,0 +1,46 @@
Anope Mutli Language Support
----------------------------
1) Building Anope with gettext support
2) Adding a new language
3) Using languages with modules
1) Building Anope with gettext support
To build Anope with gettext support, gettext and its development libraries must be installed on the system.
Anope does not require locales to be installed or enabled on the system, but does require the locales-all
package on Debian and Debian based systems.
Building Anope on Windows with gettext support is explained in docs/WIN32.txt
2) Adding a new language
Anope uses gettext (http://www.gnu.org/software/gettext/) to translate messages for users. To add a new language
install gettext and run `msginit -l language -o anope.language.po -i anope.pot`. For example if I was translating to
Spanish I could run `msginit -l es_ES -o anope.es_ES.po -i anope.pot`. Open the newly generating .po file and start
translating. Once you are done simply rerun ./Config; make && make install and add the language to your services.conf.
Note that on Windows it is not quite this simple, windows.cpp must be edited and Anope recompiled and restarted.
Poedit (http://www.poedit.net/) is a popular po file editor, and we recommend using it or another editor designed to edit
po files (especially on Windows).
If you have finished a language file translation and you want others to use it, please send it to team@anope.org
(don't forget to mention clearly your (nick)name, your e-mail and the language name). You'll of course get full credit for it.
NOTE: There is no guarantee we will use your work so please do not be offended if we say no thanks.
3) Using langages with modules
Module authors can easially add the ability to have their modules translated by adding _() around the strings they
want translated (messages to the user, etc).
If you want to translate a module someone has made, first generate a .pot file if there isn't one already using
`xgettext -s -d modulename -o modulename.pot --from-code=utf-8 modulename.cpp`.
The .pot file is a template of all of the language strings extracted from the source file.
Next, run msginit on the .pot file with
`msginit -l language -o modulename.language.po -i modulename.pot`.
Translate the new .po file and rerun ./Config; make && make install.
All .po and .pot files should be placed in modules/language/third. Additionally an update script is provided there
that will create .pot files and merge any changes to it with existing .po files.
-109
View File
@@ -1,109 +0,0 @@
Anope MySQL Support
-------------------
1) Introduction
Anope 1.6 onwards supports MySQL databases. On Anope 1.6.0 only PHASE 1
has been implemented. Since the next phases require major changes in the
core, we decided to save it for 2.0. However, having your db's easily
accessible on your website is still a great feature.
PHASE 1:Anope will be able to save all it's databases to MySQL. It will
happen in conjunction with the current FFF databases. This first step is
nothing more than a MySQL dump of the databases (i.e. read-only), since
Anope will not (for now) read from Mysql. (COMPLETED)
PHASE 2:The next step is load the databases from MySQL, being able to
replace the FFF completely as an archive method (since all changes to
the MySQL db would be lost on the next Services save). All, while keeping
FFF intact. This is still not the final goal, but it's a milestone.
(COMPLETED)
UPDATE: Anope 1.7.0 (Revision 11 and above) finally supports phase 2!
A new config directive called 'UseRDB' has been added.
If you enable this, anope will automatically try to load its
data from MySQL (if configured and compiled with).
PHASE 3:The next step, and most convoluted of all (since we'll need to
modify pretty much all the source) is to load/save (SELECT/INSERT) data
in realtime. That way the MySQL db could be modified externally (web?).
Again, the FFF will be kept intact.
2) Requirements
1. MySQL server version 3.23.32 or greater
2. MySQL libs and development files (usually called mysql-dev).
3. A MySQL user account
4. A MySQL database
3) Installation
1. The ./Config script automatically detects if your system is capable
of running Anope with MySQL support. There is no need anymore to
answer yes when asked.
Note: You might need to run "make distclean" prior to running ./Config
2. Compile Anope as usual. The (g)make process will now compile MySQL
support into Anope.
3. Install Anope as usual.
4) Configuration
1. Go to your "services bin directory" (eg: /home/someuser/services/) and run mydbgen
to help on the schema creation and adjustments.
2. Edit services.conf and add your MySQL data to the MySQL configuration
block.
3. Start or restart services to make use of the new Anope executable.
5) Security
To add a layer of security you have the option of encrypting or encoding
all passwords for nicks and chans. Use the "MysqlSecure" directive on your
services.conf file to enable it. The available storage methods are:
#MysqlSecure ""
or
MysqlSecure ""
Disables security. All passwords will be saved on the MySQL database
as clear text, with no encryption or encoding. FASTEST
MysqlSecure "des"
Encrypts all passwords using a UNIX DES encryption. This is a one way
encryption algorithm. You can only validate it against another DES
encrypted string, using the same "salt" (the first two characters of
the encrypted string). FAST
MysqlSecure "md5"
Calculates an MD5 128-bit checksum for the password. The value is
returned as a 32-digit hex number that may be used as a hash key.
This is a one way encryption algorithm. SLOW
MysqlSecure "sha"
Calculates an SHA 160-bit checksum for the password. The value is
returned as a 40-digit hex number. This is a one way encryption
algorithm. SLOWEST
MysqlSecure "mykey"
Encodes the passwords using "mykey" as the encryption password. It
produces a binary string and can be decoded using the MySQL built in
function DECODE(crypt_str,mykey). VARIABLE
Caveat: Keep in mind that this if you use any method other than clear
text, services will need to encrypt/encode every single password on
every database save. On large networks, it may impact responsiveness
during the saves.
Caveat: If you enable MysqlSecure you can not longer use the UseRDB directive
as all the password types are encrypted with a one way encryption method for
older MySQL servers.
+4 -136
View File
@@ -1,139 +1,7 @@
Highlighted News in Anope 1.7 (and soon 1.8)
============================================
* Added a new and improved ./Config script.
* Added MySQL phase 2 implementation (see docs/MYSQL).
* Added NickServ registration delays.
* Added read receipts for memos.
* Added a way for modules to store data with internal structures.
* Added nick tracking support.
* Added support for SVSHOLD.
* Added support for U:Lined servers.
* Added support for TS6 IRCd's.
* Added support for Windows.
* Added internal events for modules.
* Added a way to suspend nicks.
* Added support for module configuration directives.
* Added translation support for modules.
* Added a module pack with handy modules.
* Added IRCd protocol modules.
* Added support for new IRCd's. Currently supported:
- Bahamut 1.4.27 or later (including 1.8)
- Charybdis 1.0 or later
- DreamForge 4.6.7
- Hybrid 7 or later
- InspIRCd 1.0 or later (including 1.1)
- Plexus 2.0 or later (including 3.0)
- PTLink 6.15 or later
- RageIRCd 2.0 or later
- Ratbox 2.0.6 or later
- ShadowIRCd 4.0 beta 7 or later
- Solid IRCd 3.4.6 or later
- UltimateIRCd 2.8.2 or later (including 3.0)
- UnrealIRCd 3.1.1 or later (including 3.2)
- ViagraIRCd 1.3 or later
* Added new languages. Currently included:
Catalan, German, English, Spanish, French, Greek,
Hungarian, Italian, Dutch, Polish, Portugese,
Russian, Turkish
* Added support for CIDR channel lists.
* Converted the core to be completely modular.
* Improved random number algorithm.
* Removed proxy detector (see docs/PROXY).
* Fixed various exploits and vulnerabilities.
* Fixed various language typos and inconsistencies.
* Fixed a bug in the database system causing nickserv passwords
to be saved incorrectly. Note that this breaks backwards
compatibility on nick.db !!!
Highlighted News in Anope 1.6
=============================
* Fixed various exploits and vulnerabilities.
* Fixed various language typos and inconsistencies.
* Improved ignore system.
* Improved ./configure script.
* Removed all compile warning fixed.
* Converted HelpServ into a proper service.
* Added external module support.
* Added Defense Condition (DEFCON) System.
* Added MySQL support for mirroring databases.
* Added multi-server configuration.
* Added multi-domain /OS GLOBAL support.
* Added combined +oq +oa +ha +va on net-joins.
* Added support for ircd changes and upgrades.
* Added HostSetters configuration directive.
* Added /OS STAFF command.
* Added /OS SVSNICK command.
* Added /OS CHANKILL command.
* Added /MS STAFF command.
* Added /NS UPDATE command.
* Added /MS SENDALL command.
* Added /NS GETMAIL command.
* Added /HS DELALL command.
* Added /HS LIST command with pattern matching.
* New support scripts and tools.
* New ircd support, complete list: DreamForge 4.6.7, Bahamut 1.4.27,
UnrealIRCd 3.1.1, UltimateIRCd 2.8.2,
UltimateIRCd 3.0.0, Hybrid IRCd 7.0
ViagraIRCd 1.3.x, PTlink 6.15.0
* New Language files, complete list: cat.l, de.l, en_us.l, es.l, fr.l,
gr.l, it.l, nl.l, pt.l, ru.l, tr.l
Highlighted News in Anope 1.4
Highlighted News in Anope 1.9
=============================
After the change from Epona to Anope
------------------------------------
* New Italian Language file
* Added support for UltimateIRCd 3.0 and later
* Services realtime logging to a channel
* SuperAdmin directive for access to "super" commands.
* Ban system is now exception aware.
* HostServ for hostname masquerading.
* Smarter XOP System.
* Email verification/handshake upon registration.
* Services can now /ignore users.
* Smarter memo notification for channels.
* Channel can be SUSPENDed instead of FORBIDen.
Before the change from Epona to Anope
-------------------------------------
* HostServ for networks that support them.
* UnrealIRCd support has been rewritten, it is now fully
working (hopefully) and officially supported again.
* Added support for UltimateIRCd 2.8.2 and later.
* A multi-threaded proxy detector that can scan Wingates,
SOCKS 4/5 and HTTP proxies on ports 3128 and 8080. Don't use
it if you have not been authorized to use it by your system
administrator!
* The ChanServ AOP/SOP/VOP commands, and, on networks that
support halfops, the HOP command, have been added. They
allow a more user-friendly control of channel privileges.
* Use of services IDs that allow an user to be automatically
identified after a split (if he was identified before the split)
in a secure way. This also saves lots of bandwidth.
* Services' default language can now be set in services.conf.
* The OperServ RANDOMNEWS command provides an easy way to show
network news in a random manner without flooding your users
with them (one news per connection).
* The BotServ SET PRIVATE option allows services admins to
make the bot usable by IRC operators only.
* The OperServ SQLINE command allows you to forbid nick masks
and even channel masks with the latest Bahamut.
* The ChanServ AKICK STICK command allows akicks to be permanently
kept on channel.
* The ChanServ SET TOPIC command has been renamed to TOPIC, and
a new BAN command has been added. They both have their own
associated levels.
* A SET PEACE command has been added to ChanServ. It prevents
users to use pejorative services commands (DEOP, KICK, ...)
on users with greater or equal levels.
Networks using Bahamut must upgrade to Bahamut 1.4.27 or later,
while networks using UnrealIRCd must upgrade to Unreal 3.1.1.
For the full changes, see the Changes file.
For announcements and discussions about Anope, please visit our
web site http://www.anope.org
* Added in live updating SQL and the ability to execute commands through SQL
* Re-designed configuration file
* Code refresh / rewrite into C++
-2509
View File
File diff suppressed because it is too large Load Diff
-41
View File
@@ -1,41 +0,0 @@
Anope Proxy Detector
--------------------
1) Introduction
2) Alternatives
1) Introduction
Anope has had a built-in proxy detector since it's first version. Recently,
however, this built-in proxy detector has been removed. This was because
the Anope team found that the proxy detector was showing it's age, and the
time needed to restore it to a good state wasn't worth it, also considering
that there are currently good alternatives out there which do the job as
good as it can be done already.
2) Alternatives
A) Blitzed Open Proxy Monitor (BOPM)
B) NeoStats + OPSB
Note that these are seperate projects and that the Anope team won't give
support on these programs. For support, please refer to the sites of the
creators of the software packages.
A) Blitzed Open Proxy Monitor (BOPM)
URL: http://wiki.blitzed.org/BOPM
BOPM is currently the leading proxy detector for IRC networks out
there. Altough it is not designed to run on a central place for the
entire network, it can be done with some minor tweaking on most IRCd's.
The Anope Team advises BOPM for the best security.
B) NeoStats + OPSB
URL: http://www.neostats.net/
NeoStats is the swiss knife of IRC tools. In combination with the OPSB
module by NeoStats Software, it can scan for proxies in a similar way
as BOPM does. The OPSB module is based on BOPM and has been adjusted to
be able to scan all clients from one centralized proxy detector.
+253 -377
View File
@@ -1,377 +1,253 @@
Anope -- a set of IRC services for IRC networks
-----------------------------------------------
Anope is 2003-2008 Anope Team <team@anope.org>.
Based on Epona 2000-2002 PegSoft <epona@pegsoft.net>.
Based on Services 1996-1999 Andrew Church <achurch@achurch.org>.
This program is free but copyrighted software; see the file COPYING for
details.
Information about Anope may be found at http://www.anope.org/
Information about Epona may be found at http://www.epona.org/
Information about Services may be found at http://www.ircservices.esper.net/
Table of Contents
-----------------
1) Credits
2) Presentation
3) Installation
4) Command Line Options
5) Messages Translation
6) Contact and Mailing List
1) Credits
Anope is based on Lara's Epona version 1.4.14.
Epona is based on Andy Church's IRC Services version 4.3.3.
The original credits:
* Mauritz Antunes
Portuguese translation
* Jose R. Holzmann, Raul S. Villarreal
Spanish translation
* Andrew Kempe <theshadow@shadowfire.org>
News system
* <d.duca@eurcom.net>
Italian translation
* <mikado@holyfire.com>
Turkish translation
* Andrew Kempe <theshadow@shadowfire.org>
Session limiting
Epona credits:
* lara <lara@pegsoft.net>
Main coding
* CafeiN <oytuny@yahoo.com>
Turkish translation
* Sylvain Cresto aka tost <scresto@netsante.fr>
FreeBSD 5 patch
* Marcelo Conde Foscarini aka Bras <ircadmin@brmarket.net>
Portuguese translation
* Alvaro Toledo aka POLLITO <atoledo@keldon.org>
Spanish translation
* chemical <chemical@musicplay.de>
German translation
* shine <dh@shinewelt.de>
German translation
* Guven Guzelbey aka MeShGuL <guzelbey@cs.utk.edu>
Turkish translation
* Jordi Pujol <jordi.pujol@aujac.org>
Catalan translation
* Eva Dachs <evadachs@terra.es>
Catalan translation
* Toni Perez <toni.perez@aujac.org>
Catalan translation
* Sergios Karalis <sergios_k@hotmail.com>
Greek translation
* Thomas J. Stensas aka ShadowMaster <shadowmaster@shadow-realm.org>
Ultimate 3.x support
Anope credits:
* Adam Kramer <ribosome@anope.org>
* Alvaro Toledo <atoledo@keldon.org>
* Amanda Folson <amanda@anope.org>
* Andrew Berquist <vash@anope.org>
* Björn Stiddien <keeper@anope.org>
* Charles Kingsley <chaz@anope.org>
* Chris Hogben <heinz@anope.org>
* Daniel Engel <dane@zero.org>
* David <dv@diboo.net>
* David Narayan <jester@phrixus.net>
* David Robson <rob@anope.org>
* Daniele Nicolucci <jollino@sogno.net>
* Florian Schulze <certus@anope.org>
* Gabriel Acevedo H. <drstein@anope.org>
* Jan Milants <viper@anope.org>
* JH <jh@irc-chat.net>
* Joris Vink <joris@anope.org>
* Lucas Nussbaum <lucas@lucas-nussbaum.net>
* Mark Summers <mark@goopler.net>
* Matthew Beeching <jobe@invictachat.net>
* Naram Qashat <cyberbotx@anope.org>
* Pieter Bootsma <geniusdex@anope.org>
* Robin Burchell <w00t@inspircd.org>
* Thomas Juberg StensĂĄs <ShadowMaster@Shadow-Realm.org>
* Trystan .S Lee <trystan@nomadirc.net>
* openglx <openglx@brasnerd.com.br>
Anope Translations:
* GeniusDex <geniusdex@anope.org> (nl.l)
* Kein <kein-of@yandex.ru> (ru.l)
* Stuff <the.stuff@gmx.de> (de.l)
* Gabriel Acevedo H. <drstein@anope.org> (es.l)
* Janos Kapitany <sarkanyka@cjbchat.hu> (hun.l)
* Szymon S'wierkosz <szymek@adres.pl> (pl.l)
Anope uses the strlcat() and strlcpy() functions from OpenSSH 2.5.1p2.
These functions are copyrighted by Todd C. Miller:
Copyright (c) 1998 Todd C. Miller <Todd.Miller@courtesan.com>
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
3. 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 `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.
2) Presentation
Anope is a set of Services for IRC networks that allows users to manage
their nicks and channels in a secure and efficient way, and administrators
to manage their network with powerful tools.
Currently available services are:
* NickServ, a powerful nickname manager that users can use to protect
themselves against nick stealing. Each user has its own nickname
group, that allows the user to register as many nicks as needed
while still being able to take profit of his privileges and to
modify the nick configuration. NickServ also has an optional
password retrieval feature.
* ChanServ, a powerful channel manager that helps users to administer
their channels in a totally customizable way. ChanServ has an
internal list of privileged users and banned users that controls
accesses on a per-channel basis. It eliminates all takeover
problems, because of its powerful op/unban/invite and even mass
deop and mass kick functions.
* MemoServ, an helpful companion that allows sending short messages
to offline users, that they can then read when they come online
later.
* BotServ, an original service that allows users to get a permanent,
friendly bot on their channels in an easy way. Each bot can be
configured to monitor the channels against floods, repetitions,
caps writing, and swearing, and to take appropriate actions. It
also can handle user-friendly commands (like !op, !deop, !voice,
!devoice, !kick, and many others), say a short greet message when
an user joins a channel, and even "take over" ChanServ actions such
as auto-opping users, saying the entry notice, and so on. This
service can be disabled if you want to save some bandwidth.
* OperServ, the IRCops' and IRC admins' black box, that allows them
to manage the list of network bans (also known as AKILL (DALnet) or
GLINE (Undernet)), to configure messages displayed to users when
they log on, to set modes and to kick users from any channel, to
send notices quickly to the entire network, and much more!
* HostServ, a neat service that allows users to show custom vHosts
(virtual hosts) instead of their real IP address; this only works
on daemons supporting ip cloaking, such as UnrealIRCd, UltimateIRCd
and ViagraIRCd.
* HelpServ, a skeleton service used to serve help files.
Anope currently works with:
* Bahamut 1.4.27 or later (including 1.8)
* Charybdis 1.0 or later
* DreamForge 4.6.7
* Hybrid 7 or later
* InspIRCd 1.0 or later (including 1.1)
* Plexus 2.0 or later (including 3.0)
* PTlink 6.15 or later
* RageIRCd 2.0 beta-6 or later
* Ratbox 2.0.6 or later
* ShadowIRCd 4.0 beta 7 or later
* Solid IRCd 3.4.6 or later
* UltimateIRCd 2.8.2 or later (including 3.0)
* UnrealIRCd 3.1.1 or later (including 3.2)
* ViagraIRCd 1.3 or later
Anope could also work with some of the daemons derived by the ones listed
above, but there's no support for them if they work or don't work.
3) Installation
See the INSTALL file for instruction on installing Anope.
4) Command Line Options
Normally, Anope can be run simply by invoking the "services" executable.
Anope will then use the defaults specified in the services.conf file, and
connect to the specified uplink server. Alternatively, any of the
following command-line options can be specified to change the default
values:
-remote server[:port] Connect to the specified server
-local host -or- Connect from the specified address (e.g. for
[host]:[port] multihomed servers)
-name servername Our server name (e.g. services.some.net)
-desc string Description of us (e.g. SomeNet Services)
-user username Username for Services' nicks (e.g. services)
-host hostname Hostname for Services' nicks (e.g. esper.net)
-dir directory Directory containing Services' data files
(e.g. /usr/local/lib/services)
-log filename Services log filename (e.g. services.log)
-update secs How often to update databases (in seconds)
-expire secs How often to check for nick/channel
expiration (in seconds)
Additionally, the following command-line options can be used to modify
the behavior of Anope:
-debug Enable debugging mode; more info sent to log (give
option more times for more info)
-readonly Enable read-only mode; no changes to databases
allowed, .db files and log not written
-skeleton Enable skeleton mode; like read-only mode, but only
OperServ is available
-nofork Do not fork after startup; log messages will be
written to terminal (as well as to the log file
if not in read-only mode)
-forceload Try to load as much of the databases as possible,
even if errors are encountered
-noexpire Expiration routines won't be run at all
-logchan Startup with logchan enabled
-version Display the version of Anope
-nothird Do not load the modules specified in ModulesAutoload
or ModulesDelayedAutoload in the config file
-protocoldebug Debug each incoming message after protocol parsing
-support Used for support, same as -debug -nofork -nothird
Upon starting, Anope will parse its command-line parameters, open its
logfile, then (assuming the -nofork option is not given) detach itself
and run in the background. If Anope encounters a problem reading the
database files or cannot connect to its uplink server, it will terminate
immediately; otherwise, it will run until the connection is terminated
(or a QUIT, SHUTDOWN, or RESTART command is sent; see OperServ's help).
In the case of an error, an appropriate error message will be written to
the log file.
If Anope is run with the "-readonly" command-line option, it can serve as
a "backup" to the full version of services. A "full" version of services
(run without -readonly) will automatically reintroduce its pseudo-clients
(NickServ, ChanServ, etc.), while a "backup" services will not, thus
allowing full services to be brought up at any time without disrupting
the network (and without having to take backup services down beforehand).
If Anope is run with the "-skeleton" command-line option, it will not try
to load the nickname or channel databases, and will respond with "service
is inactive" messages to any commands sent to NickServ, ChanServ,
MemoServ or BotServ. This can be useful as an emergency stopgap measure
when the main copy of Anope cannot be started.
The "-debug" option is useful if you find or suspect a problem in Anope.
Giving it once on the command line will cause all traffic to and from
services as well as some other debugging information to be recorded in
the log file; if you send a bug report, PLEASE include an excerpt from
the log file WITH DEBUGGING ACTIVE; we cannot emphasize enough how
important this is to tracking down problems. (You can also enable
debugging while Services is running using OperServ's SET DEBUG command.)
If you repeat the -debug option more than once, the debugging level will
be increased, which provides more detailed information but may also slow
Anope down considerably and make the log file grow dramatically faster
(in particular, at debug level 4 a message is written to the log for
every character received from the server). In general, a debug level of 1
is sufficient for the coding team to be able to trace a problem, because
all network traffic is included and we can usually reproduce the problem.
The "-forceload" option is provided to attempt recovery of data from
corrupted or truncated databases. Normally, if Anope encounters an error
writing to a database file, it will attempt to restore the original
version of the file and report an error to the logfile and through
WALLOPS. However, if this should fail (which normally should not happen),
or if Anope is terminated abruptly e.g. by kill -9 or a power failure,
then one or more of the databases may be corrupt. Normally, this will
cause Anope to abort the next time you try to run it; however, if yo
give the -forceload option to Anope, it will instead read as much as it
can, then skip to the next database. For obvious reasons, it's highly
recommended to keep backup copies of your databases in case something
does happen (since Anope will stop at the first error in a database, even
with -forceload, meaning you lose any data after that).
5) Messages Translations
Anope has a powerful option in NickServ allowing users to choose what
language it must use when sending messages to users. Messages are stored
in language files (located in the lang directory).
Anope is currently provided with thirteen languages: Catalan, Dutch,
English, French, German, Greek, Hungarian, Italian, Polish, Portuguese,
Russian, Spanish and Turkish. If you want to translate Anope messages
into another language, follow this instructions:
* Copy the lang/en_us.l file to a meaningful name (for example, if
you would like to translate messages in Spanish, you would rename
it to es.l).
* Edit the file with your favorite text editor. Carefully read the
instructions given at the top of the file, and start translating
the whole file. The file is big, so make sure you have some coffee
available ;) Try to avoid the use of English words as much as
possible. If the new language contains only a few 'special'
characters, try and use latin representations of it, if possible.
Remember that most clients are only capable of handling the
ISO-8859-1 charset. Of course, if you are translating Anope to a
language with a totally different charset, such as Russian, feel
free to use the one that suites it best (and the one that is in use
by most speakers of that language ;)).
* When this is done, you have two solutions: either patch Services
source code so they take in account the new language file
(basically, you'll have to modify lang/Makefile, language.c and
maybe services.h), or send us the translated file so we can make
the patch and include your language in the next Anope release.
* Note that there is a language tool on bin/langtool.pl that can aid
the verification process on newly created language files. Try to
use it before you submit a language file.
When new major releases come out, you'll not have to retranslate the
whole file; the Changes.lang file will help you to know which messages
were added, modified or deleted.
If you did a language file translation, and want to let others use it,
please send it to team@anope.org (don't forget to mention clearly your
(nick)name, your e-mail and the language name). You'll of course get full
credit for it, and will even get future final major releases before
anyone else to complete the translation!... ;)
6) Contact
For announcements and discussions about Anope, please visit our
Portal and Forums at http://www.anope.org/ -- make sure you register
yourself and your network to get full benefits.
If you read the documentation carefully, and didn't find the answer to
your question, feel free to post on the website forums or join our irc
channel (irc.anope.org #anope). Once you join our Support channel, just
type "? report" for instructions on how to report a Bug. Be as precise as
possible when asking a question, because we have no extraordinary powers
and can't guess things if they aren't provided. The more precise you are,
the sooner you'll be likely to get an answer.
If you think you found a bug, add it to the bug tracking system
(http://bugs.anope.org) and - again - be as precise as possible. Also say
whether the bug happens always or under what circumstances, and anything
that could be useful to track your bug down. If you wrote a patch, send
it over. :)
Anope -- a set of IRC services for IRC networks
-----------------------------------------------
Anope is 2003-2012 Anope Team <team@anope.org>.
Based on Epona 2000-2002 PegSoft <epona@pegsoft.net>.
Based on Services 1996-1999 Andrew Church <achurch@achurch.org>.
This program is free but copyrighted software; see the file COPYING for
details.
Information about Anope may be found at http://www.anope.org/
Information about Epona may be found at http://www.epona.org/
Information about Services may be found at http://www.ircservices.esper.net/
Table of Contents
-----------------
1) Credits
2) Presentation
3) Installation
4) Command Line Options
5) Messages Translation
6) Contact and Mailing List
1) Credits
Anope is based on Lara's Epona version 1.4.14.
Epona is based on Andy Church's IRC Services version 4.3.3.
The original credits:
* Mauritz Antunes
Portuguese translation
* Jose R. Holzmann, Raul S. Villarreal
Spanish translation
* Andrew Kempe <theshadow@shadowfire.org>
News system
* <d.duca@eurcom.net>
Italian translation
* <mikado@holyfire.com>
Turkish translation
* Andrew Kempe <theshadow@shadowfire.org>
Session limiting
Epona credits:
* lara <lara@pegsoft.net>
Main coding
* CafeiN <oytuny@yahoo.com>
Turkish translation
* Sylvain Cresto aka tost <scresto@netsante.fr>
FreeBSD 5 patch
* Marcelo Conde Foscarini aka Bras <ircadmin@brmarket.net>
Portuguese translation
* Alvaro Toledo aka POLLITO <atoledo@keldon.org>
Spanish translation
* chemical <chemical@musicplay.de>
German translation
* shine <dh@shinewelt.de>
German translation
* Guven Guzelbey aka MeShGuL <guzelbey@cs.utk.edu>
Turkish translation
* Jordi Pujol <jordi.pujol@aujac.org>
Catalan translation
* Eva Dachs <evadachs@terra.es>
Catalan translation
* Toni Perez <toni.perez@aujac.org>
Catalan translation
* Sergios Karalis <sergios_k@hotmail.com>
Greek translation
* Thomas J. Stensas aka ShadowMaster <shadowmaster@shadow-realm.org>
Ultimate 3.x support
Anope credits:
* Adam Kramer <ribosome@anope.org>
* Adam <adam@anope.org>
* Alvaro Toledo <atoledo@keldon.org>
* Amanda Folson <amanda@anope.org>
* Andrew Berquist <vash@anope.org>
* Björn Stiddien <keeper@anope.org>
* Charles Kingsley <chaz@anope.org>
* Chris Hogben <heinz@anope.org>
* Daniel Engel <dane@zero.org>
* David <dv@diboo.net>
* David Narayan <jester@phrixus.net>
* David Robson <rob@anope.org>
* Daniele Nicolucci <jollino@sogno.net>
* Florian Schulze <certus@anope.org>
* Gabriel Acevedo H. <drstein@anope.org>
* Jan Milants <viper@anope.org>
* Jens Voss <dukepyrolator@anope.org>
* JH <jh@irc-chat.net>
* Joris Vink <joris@anope.org>
* Lee Holmes <lethality@anope.org>
* Lucas Nussbaum <lucas@lucas-nussbaum.net>
* Mark Summers <mark@goopler.net>
* Matthew Beeching <jobe@invictachat.net>
* Naram Qashat <cyberbotx@anope.org>
* Phil Lavin <phil@anope.org>
* Pieter Bootsma <geniusdex@anope.org>
* Robin Burchell <w00t@inspircd.org>
* Sean Roe <therock247uk@anope.org>
* Sebastian V <hal9000@anope.org>
* Thomas Juberg StensĂĄs <ShadowMaster@Shadow-Realm.org>
* Trystan .S Lee <trystan@nomadirc.net>
* openglx <openglx@brasnerd.com.br>
Anope Translations:
* GeniusDex <geniusdex@anope.org> (nl.l)
* Kein <kein-of@yandex.ru> (ru.l)
* Maik Funke <Han@mefalcon.org> (de.l)
* Gabriel Acevedo H. <drstein@anope.org> (es.l)
* Janos Kapitany <sarkanyka@cjbchat.hu> (hun.l)
* Szymon S'wierkosz <szymek@adres.pl> (pl.l)
* Christopher N. <saka@epiknet.org> (fr.l)
* Yusuf Kurekci <ysfm.20@gmail.com> (tr.l)
2) Presentation
Anope is a set of Services for IRC networks that allows users to manage
their nicks and channels in a secure and efficient way, and administrators
to manage their network with powerful tools.
Currently available services are:
* NickServ, a powerful nickname manager that users can use to protect
themselves against nick stealing. Each user has its own nickname
group, that allows the user to register as many nicks as needed
while still being able to take profit of his privileges and to
modify the nick configuration. NickServ also has an optional
password retrieval feature.
* ChanServ, a powerful channel manager that helps users to administer
their channels in a totally customizable way. ChanServ has an
internal list of privileged users and banned users that controls
accesses on a per-channel basis. It eliminates all takeover
problems, because of its powerful op/unban/invite and even mass
deop and mass kick functions.
* MemoServ, an helpful companion that allows sending short messages
to offline users, that they can then read when they come online
later.
* BotServ, an original service that allows users to get a permanent,
friendly bot on their channels in an easy way. Each bot can be
configured to monitor the channels against floods, repetitions,
caps writing, and swearing, and to take appropriate actions. It
also can handle user-friendly commands (like !op, !deop, !voice,
!devoice, !kick, and many others), say a short greet message when
an user joins a channel, and even "take over" ChanServ actions such
as auto-opping users, saying the entry notice, and so on. This
service can be disabled if you want to save some bandwidth.
* OperServ, the IRCops' and IRC admins' black box, that allows them
to manage the list of network bans (also known as AKILL (DALnet) or
GLINE (Undernet)), to configure messages displayed to users when
they log on, to set modes and to kick users from any channel, to
send notices quickly to the entire network, and much more!
* HostServ, a neat service that allows users to show custom vHosts
(virtual hosts) instead of their real IP address; this only works
on daemons supporting ip cloaking, such as UnrealIRCd.
Anope currently works with:
* Bahamut 1.4.27 or later (including 1.8)
* InspIRCd 1.1, 1.2, or 2.0
* Ratbox 2.0.6 or later
* UnrealIRCd 3.2 or later
* Plexus 3 or later
Anope could also work with some of the daemons derived by the ones listed
above, but there's no support for them if they work or don't work.
3) Installation
See the INSTALL file for instruction on installing Anope.
4) Command Line Options
Normally, Anope can be run simply by invoking the "services" executable.
Any of the following command-line options can be specified to change
the behavior of Anope:
--debug Enable debugging mode; more info sent to log (give
option more times for more info)
--readonly Enable read-only mode; no changes to databases
allowed
--nofork Do not fork after startup; log messages will be
written to terminal
--noexpire Expiration routines won't be run at all
--version Display the version of Anope
--nothird Do not load the non-core modules specified
--protocoldebug Debug each incoming message after protocol parsing
--support Used for support, same as -debug -nofork -nothird
Upon starting, Anope will parse its command-line parameters then
(assuming the -nofork option is not given) detach itself and run in the
background. If Anope encounters a problem reading the database files or
cannot connect to its uplink server, it will terminate immediately;
otherwise, it will run until the connection is terminated (or a QUIT,
SHUTDOWN, or RESTART command is sent; see OperServ's help).
In the case of an error, an appropriate error message will be written to
the log file.
If Anope is run with the "--readonly" command-line option, it can serve as
a "backup" to the full version of services. A "full" version of services
(run without --readonly) will automatically reintroduce its pseudo-clients
(NickServ, ChanServ, etc.), while a "backup" services will not, thus
allowing full services to be brought up at any time without disrupting
the network (and without having to take backup services down beforehand).
The "--debug" option is useful if you find or suspect a problem in Anope.
Giving it once on the command line will cause all traffic to and from
services as well as some other debugging information to be recorded in
the log file; if you send a bug report, PLEASE include an excerpt from
the log file WITH DEBUGGING ACTIVE; we cannot emphasize enough how
important this is to tracking down problems. (You can also enable
debugging while Services is running using OperServ's SET DEBUG command.)
If you repeat use --debug=<level>, the debugging level will be increased,
which provides more detailed information but may also slow Anope down
considerably and make the log file grow dramatically faster. In general,
a debug level of 1 is sufficient for the coding team to be able to trace
a problem, because all network traffic is included and we can usually
reproduce the problem.
5) Messages Translations
Please see LANGUAGE for this information
6) Contact
For announcements and discussions about Anope, please visit our
Portal and Forums at http://www.anope.org/ -- make sure you register
yourself to get full benefits.
If you read the documentation carefully, and didn't find the answer to
your question, feel free to post on the website forums or join our irc
channel (irc.anope.org #anope). Once you join our Support channel be as
precise as possible when asking a question, because we have no extraordinary
powers and can't guess things if they aren't provided.
The more precise you are the sooner you'll be likely to get an answer.
If you think you found a bug, add it to the bug tracking system
(http://bugs.anope.org) and - again - be as precise as possible. Also say
whether the bug happens always or under what circumstances, and anything
that could be useful to track your bug down. If you wrote a patch, send
it over. :)
+25
View File
@@ -0,0 +1,25 @@
Legend:
x = done
? = unsure
+ = in progress
Future
------
[ ] NS IDENTIFY changes
[?] Last failed identify? Maybe more useful for sopers only, so users don't get unnecessarily worried
[?] Last successful login time/ip? perhaps both of these should be a new nick setting
[ ] NS SUSPEND: show suspender and reason, probably to sopers only (see CS SUSPEND)
[ ] Allow channel founders to change the fantasy trigger for their channel.
[+] CIDR Akills, session exceptions, etc
[?] Language charset stuff, including collation (1.9.1? phoenix?)
[?] a way for a module to queue itself (or even another module) for unloading
[+] Useful/common "third party" modules to core distro
[x] NS AJOIN
[x] CS ENTRYMSG
[?] Don't allow soper accounts to expire
[?] Reason for CS SET RESTRICTED
[ ] Unique IDs on each AKILL/blah so that networks may use them as ticket IDs
[ ] HS ACTIVATE -ALL (rob sez this all needs reviewing)
[ ] No nickname ownership?
[ ] More commands need to be split up such as /bs bot, /ms set, /bs kick, /bs set, /os set? etc.
[ ] Customize email messages
+27
View File
@@ -0,0 +1,27 @@
Anope Bundled Tools
-------------------
1) Anope SMTP Client
Provided with Anope is a simple SMTP client which can be used instead of
programs like SendMail in some cases.
The SMTP client can be used instead of sendmail for use with Anope's mail
options. To use the SMTP client instead of sendmail, find the line in your
services configuration file (services.conf) that defines sendmailpath. On
that line, change the path to your services installation directory, then
followed by "bin/anopesmtp" and the IP address of a valid SMTP server. It
should look like this:
sendmailpath = "/home/anope/services/bin/anopesmtp 127.0.0.1"
If the SMTP client doesn't send mail, or if there's an other problem with
it, you can compile it in debug mode. To do this, open anopesmtp.cpp, and look
for "smtp_debug" near the top. Change this from 0 to 1 and recompile
the code. This should generate a log file of what happened when it tried
to connect to the SMTP server.
Credits:
Originally written by Dominick Meglio <codemastr@unrealircd.com>
Ported to *nix by Trystan Scott Lee <trystan@nomadirc.net>
+25 -76
View File
@@ -25,49 +25,17 @@ Anope for Windows
(NOTE: When installing, tell CMake to add itself to the PATH.)
If you have Visual C++ 6, 7 (.NET 2002/2003), 8 (2005), or 9 (2008) skip ahead to step 2, else you
need to download the following free components from Microsoft. Once
If you have Visual C++ 10 (2010) skip ahead to step 2, else you
need to download the following free component from Microsoft. Once
downloaded, install these packages.
* Microsoft Visual C++ 2008 Express Edition:
* Microsoft Visual C++ 2010 Express Edition:
http://www.microsoft.com/express/vc/
or
* Microsoft Visual C++ 2005 Express Edition:
http://www.microsoft.com/downloads/details.aspx?FamilyId=7B0B0339-613A-46E6-AB4D-080D4D4A8C4E&displaylang=en
then download and install:
* Microsoft Windows 2008 SDK:
http://www.microsoft.com/downloads/details.aspx?FamilyId=E6E1C3DF-A74F-4207-8586-711EBE331CDC&displaylang=en
or (if you prefer a smaller download)
* Microsoft Windows 2003 Platform SDK: (Requires WGA validation)
http://www.microsoft.com/downloads/details.aspx?FamilyId=0BAF2B35-C656-4969-ACE8-E4C0C0716ADB&displaylang=en
(NOTE: Although they say for Windows Server 2003 or 2008, they do infact work on all supported
versions of Windows. When installing the 2003 SDK, you should select the Custom option, and only select
to have the Microsoft Windows Core SDK installed. When installing the 2008 SDK, you should select the
Custom option, and only select to have the Developer Tools installed, but also expand that and deselect
the Visual C++ Compilers as well as the Mobile Tools. Doing this will decrease the install time as well
as the space used by the SDK.)
If you chose to download the 2003 SDK, it will not work out-of-the-box on either Visual C++ 2005 Express or
Visual C++ 2008 Express. The 2008 SDK will work out-of-the-box with Visual C++ 2008 Express but not with
Visual C++ 2005 Express.
2) Unpack the Anope tarball with your favorite uncompression program
(WinZip or WinRAR, etc).
3) (Note before this step: If you fall under one of the situations at the end of Step 1 where it says that the
SDK will not work out of the box, do not bring up the Visual C++ Command Prompt by using the link in
the Windows Start Menu. Instead, edit vsvars32.bat in the directory where you unpacked the source code
in step 2, so the first line that says "@SET VSINSTALLDIR=<whatever>" has the directory where you installed
Visual C++ Express to, if different from the default. Save the file and then run it instead.)
Bring up the Visual C++ Command Prompt; This will launch a
3) Bring up the Visual C++ Command Prompt; This will launch a
DOS Command Prompt like window, which will set the environment
properties needed to make Anope.
@@ -84,7 +52,7 @@ Anope for Windows
4) You now need to configure Anope to your requirements. At the prompt type:
<path to source directory>\Config.bat
<path to source directory>\Config.exe
NOTE: If you run an Anti-Virus program such as McAfee or Norton, you may
be unable to run this command due to the protection in place. Some Anti-
@@ -103,6 +71,23 @@ Anope for Windows
If you cannot find whats causing the error, please visit our forums or
our IRC Support channel for assistance.
Some Anope modules require third party libraries, such as m_mysql and
m_ssl. If these libraries are installed in nonstandard locations, cmake
will probably not find them and should be told where they are by passing
additional search paths to the last question in Config, such as:
-DEXTRA_INCLUDES:STRING=c:/openssl/include;c:/openssl/lib
Which would have cmake search both C:\openssl\include and
C:\openssl\lib.
Building Anope with gettext requires libintl, libiconv, libgcc and
libmingex. We have precompiled these libraries for you that you may
use if you want. They are avaiable at http://anope.org/downloads/anope-extra.zip
The OpenSSL, MySQL, and OpenLDAP header files and libraries are also included in
this package. Once downloaded and extracted, you should run install.bat
then give Config the path to the new 'installed' directory.
5) You are now ready to compile. If you said you wanted to use NMake in step 4,
at the prompt type:
@@ -146,22 +131,10 @@ Anope for Windows
edit the file correctly.
Open services.conf, and read through it carefully and adjust the settings
you think you need to adjust. Pay special attention to these settings:
A) IRCDModule: This is the name of an IRCd Module that Anope will use
to communicate with your server. Anope supports 15 IRCds,
so ensure you set the right value here.
B) RemoteServer: This is the address to your ircd, along with the port
and password. You should consult your ircd
documentation on how to link ircds.
C) ServicesRoot: Remove the # and change the names to your nick so you
can take control of services once they are online.
D) UserKey1/2/3: Remove the # infront of the three UserKey settings, and
change the parameters to numbers; around 6-7 digits will
do.
you think you need to adjust.
If you are unsure of the settings, you can go to the dos command prompt
and run "anope.exe -nofork -debug" and watch the information as it
and run "anope.exe --nofork --debug" and watch the information as it
attempts to connect.
You can launch services in two ways. If you are sure that the entered
@@ -174,31 +147,7 @@ Anope for Windows
3) Compiling Modules
If you want to build other modules than the ones shipped by default, you
will need to modify the Makefile.inc.win32 file, in the src\modules folder.
A) Add modules; find the line stating "SRCS=" and add the name of the
file to the end of the line. So if you have two files:
SRCS=file.c file2.c
If you are compiling a folder of module components, such as the example
"catserv", you will need to add/change the "SUBS=" line. If you were
compiling the "catserv" example, the line would look like this:
SUBS=catserv
B) When you've done this, use the same command prompt you set up in part
1, change directories to the src\modules folder, and type:
nmake -f Makefile.win32
followed afterwards, by:
nmake -f Makefile.win32 install
C) You should now be able to load your modules on IRC via OperServ, or via
the services.conf file.
will need to rerun Config.exe
4) Other compile options
+26
View File
@@ -0,0 +1,26 @@
Starting with Anope 1.9.4 XMLRPC using PHP's xmlrpc_encode_request and xmlrpc_decode functions is supported.
This allows external applications, such as websites, to execute remote procedure calls to Anope in real time.
Currently there are 5 supported XMLRPC calls, provided by m_xmlrpc_main:
checkAuthetication - Takes two parameters, an account name and a password. Checks if the account name is valid and the password
is correct for the account name, useful for making login pages on websites.
command - Takes three parameters, a service name (BotServ, ChanServ, NickServ), a user name (whether online or not), and the command
to execute. This will execute a the given command to Anope using the given service name. If the user given is online, the
command reply will go to them, if not it is returned by XMLRPC.
stats - Takes no parameters, returns miscellaneous stats that can be found in the /operserv stats command.
channel - Takes one parameter, a channel name, and returns real time information regarding that channel, such as users, modes
(ban lists and such), topic etc.
user - Takes one parameter, a user name, and returns real time information regarding that user.
XMLRPC was designed to be used with db_mysql, and will not return any information that can be pulled from the SQL
database, such as accounts and registered channel information. It is instead used for pulling realtime data such
as users and channels currently onlive. For examples on how to use these calls in PHP, see xmlrpc.php in docs/XMLRPC.
Also note that the parameter named "id" is reserved for query ID. If you pass a query to Anope containing a value for id. it will
be stored by Anope and the same id will be passed back in the result.
+101
View File
@@ -0,0 +1,101 @@
<?php
/* XMLRPC Functions
*
* (C) 2003-2012 Anope Team
* Contact us at team@anope.org
*
*/
class AnopeXMLRPC
{
private $Host, $Bind, $Port;
private $Socket;
function __construct($Host, $Port, $Bind = NULL)
{
$this->Host = $Host;
$this->Port = $Port;
$this->Bind = $Bind;
$this->Socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($Bind && socket_bind($this->Socket, $this->Bind) == false)
$his->Socket = false;
if (socket_connect($this->Socket, $this->Host, $this->Port) == false)
$this->Socket = false;
}
function __destruct()
{
@socket_close($this->Socket);
}
/** Run an XMLRPC command. Name should be a query name and params an array of parameters, eg:
* $this->RunXMLRPC("checkAuthentication", array("adam", "qwerty"));
* If successful returns back an array of useful information.
*
* Note that $params["id"] is reserved for query ID, you may set it to something if you wish.
* If you do, the same ID will be passed back with the reply from Anope.
*/
function RunXMLRPC($name, $params)
{
$xmlquery = xmlrpc_encode_request($name, $params);
socket_write($this->Socket, $xmlquery);
$inbuf = socket_read($this->Socket, 4096);
$inbuf = substr($inbuf, strpos($inbuf, "\r\n\r\n") + 4);
$response = xmlrpc_decode($inbuf);
if (isset($response[0]))
return $response[0];
return NULL;
}
/** Do Command on Service as User, eg:
* $anope->DoCommand("ChanServ", "Adam", "REGISTER #adam");
* Returns an array of information regarding the command execution, if
* If 'online' is set to yes, then the reply to the command was sent to the user on IRC.
* If 'online' is set to no, then the reply to the command is in the array member 'return'
*/
function DoCommand($Service, $User, $Command)
{
return $this->RunXMLRPC("command", array($Service, $User, $Command));
}
/** Check an account/nick name and password to see if they are valid
* Returns the account display name if valid
*/
function CheckAuthentication($Account, $Pass)
{
$ret = $this->RunXMLRPC("checkAuthentication", array($Account, $Pass));
if ($ret && $ret["result"] == "Success")
return $ret["account"];
return NULL;
}
/* Returns an array of misc stats regarding Anope
*/
function DoStats()
{
return $this->RunXMLRPC("stats", NULL);
}
/* Look up data for a channel
* Returns an array containing channel information, or an array of size one
* (just containing the name) if the channel does not exist
*/
function DoChannel($Channel)
{
return $this->RunXMLRPC("channel", NULL);
}
/* Like DoChannel(), but different.
*/
function DoUser($User)
{
return $this->RunXMLRPC("user", array($User));
}
}
?>
+45 -27
View File
@@ -1,30 +1,48 @@
# If we are building for Visual Studio OR if the system we are on doesn't have sh (which would be odd on a *nix system...), we'll build a C++ program to create version.h
if(MSVC OR NOT SH)
# Set version.sh.c to use C++ as well as set it's compile flags
set_source_files_properties(version.sh.c PROPERTIES LANGUAGE CXX COMPILE_FLAGS "${CXXFLAGS}")
# Generate version_sh executable to create version.h from the contents of version.sh, setting it's linker flags as well
add_executable(version_sh version.sh.c)
set_target_properties(version_sh PROPERTIES LINKER_LANGUAGE CXX LINK_FLAGS "${LDFLAGS}")
# Generate version.h from the above executable and the version.log file from the main source directory, with dependencies to the given headers and all source files in the main Anope build
add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/version.h
COMMAND version_sh ${Anope_SOURCE_DIR}/version.log ${CMAKE_CURRENT_SOURCE_DIR}/version.sh ${CMAKE_CURRENT_BINARY_DIR}/version.h
MAIN_DEPENDENCY ${CMAKE_CURRENT_SOURCE_DIR}/version.sh DEPENDS version_sh ${CMAKE_CURRENT_SOURCE_DIR}/services.h ${CMAKE_CURRENT_SOURCE_DIR}/pseudo.h ${CMAKE_CURRENT_SOURCE_DIR}/messages.h ${SRC_SRCS}
)
# Add version_sh to list of files for CPack to ignore
get_target_property(version_sh_BINARY version_sh LOCATION)
get_filename_component(version_sh_BINARY ${version_sh_BINARY} NAME)
add_to_cpack_ignored_files("${version_sh_BINARY}$" TRUE)
# For any non-Visual Studio platforms that do have sh, we will run version.h through the version.h shell script
else(MSVC OR NOT SH)
# Generate version.h from version.sh and the version.log file from the main source directory, with dependencies to the given headers and all source files in the main Anope build
add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/version.h
COMMAND ${SH} ${CMAKE_CURRENT_SOURCE_DIR}/version.sh ${Anope_SOURCE_DIR}/version.log ${CMAKE_CURRENT_BINARY_DIR}/version.h
MAIN_DEPENDENCY ${CMAKE_CURRENT_SOURCE_DIR}/version.sh DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/services.h ${CMAKE_CURRENT_SOURCE_DIR}/pseudo.h ${CMAKE_CURRENT_SOURCE_DIR}/messages.h ${SRC_SRCS}
)
endif(MSVC OR NOT SH)
# Set version.cpp to use C++ as well as set its compile flags
set_source_files_properties(version.cpp PROPERTIES LANGUAGE CXX COMPILE_FLAGS "${CXXFLAGS}")
# Generate version executable to modify version.h, setting it's linker flags as well
add_executable(version version.cpp)
set_target_properties(version PROPERTIES LINKER_LANGUAGE CXX LINK_FLAGS "${LDFLAGS}")
get_target_property(version_BINARY version LOCATION)
# Modify version.h from the above executable, with dependencies to version.cpp
# and all of the source files in the main build
add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/version_build
COMMAND ${version_BINARY} ${Anope_SOURCE_DIR}/src/version.sh ${CMAKE_CURRENT_BINARY_DIR}/version.h
DEPENDS version ${SRC_SRCS}
)
# Add version to list of files for CPack to ignore
get_filename_component(version_BINARY ${version_BINARY} NAME)
add_to_cpack_ignored_files("${version_BINARY}$" TRUE)
if(NOT WIN32)
add_to_cpack_ignored_files("version.h$" TRUE)
endif(NOT WIN32)
# Add version.h to the list of files for CPack to ignore
add_to_cpack_ignored_files("version.h$" TRUE)
set(PCH_SOURCES_GCH "")
if(CMAKE_COMPILER_IS_GNUCXX)
string(REPLACE " " ";" PCH_CXXFLAGS ${CXXFLAGS})
file(GLOB INCLUDE_SRCS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "*.h")
remove_item_from_list(INCLUDE_SRCS "version.h")
set(PCH_SOURCES "module.h;modules.h;services.h")
foreach(PCH_SOURCE ${PCH_SOURCES})
set(PCH_EXTRAFLAGS "")
if(DEBUG_BUILD)
set(PCH_EXTRAFLAGS "-g")
endif(DEBUG_BUILD)
if(PCH_SOURCE STREQUAL "module.h")
set(PCH_EXTRAFLAGS ${PCH_EXTRAFLAGS} -fPIC)
endif(PCH_SOURCE STREQUAL "module.h")
if(GETTEXT_INCLUDE)
set(PCH_GETTEXT_INCLUDE "-I${GETTEXT_INCLUDE}")
endif(GETTEXT_INCLUDE)
set(PCH_SOURCES_GCH "${PCH_SOURCES_GCH};${CMAKE_CURRENT_BINARY_DIR}/${PCH_SOURCE}.gch")
add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${PCH_SOURCE}.gch
COMMAND ${CMAKE_CXX_COMPILER} ARGS ${PCH_CXXFLAGS} ${PCH_EXTRAFLAGS} ${PCH_GETTEXT_INCLUDE} -I${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/${PCH_SOURCE} -o ${CMAKE_CURRENT_BINARY_DIR}/${PCH_SOURCE}.gch
DEPENDS ${INCLUDE_SRCS} VERBATIM
)
endforeach(PCH_SOURCE ${PCH_SOURCES})
endif(CMAKE_COMPILER_IS_GNUCXX)
# Add a custom target to the above file
add_custom_target(headers DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/version.h)
add_custom_target(headers DEPENDS version ${CMAKE_CURRENT_BINARY_DIR}/version_build ${PCH_SOURCES_GCH})
-20
View File
@@ -1,20 +0,0 @@
all: services.h extern.h pseudo.h version.h
version.h: Makefile version.sh services.h pseudo.h messages.h $(SRCS)
sh version.sh ../version.log $@
services.h: sysconf.h config.h extern.h
touch $@
extern.h: slist.h
touch $@
pseudo.h: commands.h timeout.h encrypt.h datafiles.h slist.h
touch $@
clean:
(rm -f language.h)
distclean: clean
(rm -f sysconf.h version.h)
+85
View File
@@ -0,0 +1,85 @@
#ifndef ACCESS_H
#define ACCESS_H
enum
{
ACCESS_INVALID = -10000,
ACCESS_FOUNDER = 10001
};
struct CoreExport Privilege
{
Anope::string name;
Anope::string desc;
int rank;
Privilege(const Anope::string &n, const Anope::string &d, int r);
bool operator==(const Privilege &other) const;
};
class CoreExport PrivilegeManager
{
static std::vector<Privilege> privs;
public:
static void AddPrivilege(Privilege p);
static void RemovePrivilege(Privilege &p);
static Privilege *FindPrivilege(const Anope::string &name);
static std::vector<Privilege> &GetPrivileges();
static void ClearPrivileges();
};
class ChanAccess;
class CoreExport AccessProvider : public Service
{
public:
AccessProvider(Module *o, const Anope::string &n);
virtual ~AccessProvider();
virtual ChanAccess *Create() = 0;
};
class CoreExport ChanAccess : public Serializable
{
public:
AccessProvider *provider;
ChannelInfo *ci;
Anope::string mask;
Anope::string creator;
time_t last_seen;
time_t created;
ChanAccess(AccessProvider *p);
virtual ~ChanAccess();
Anope::string serialize_name() const;
serialized_data serialize();
static void unserialize(serialized_data &);
virtual bool Matches(User *u, NickCore *nc);
virtual bool HasPriv(const Anope::string &name) const = 0;
virtual Anope::string Serialize() = 0;
virtual void Unserialize(const Anope::string &data) = 0;
bool operator>(const ChanAccess &other) const;
bool operator<(const ChanAccess &other) const;
bool operator>=(const ChanAccess &other) const;
bool operator<=(const ChanAccess &other) const;
};
class CoreExport AccessGroup : public std::vector<ChanAccess *>
{
public:
ChannelInfo *ci;
NickCore *nc;
bool SuperAdmin, Founder;
AccessGroup();
bool HasPriv(const Anope::string &priv) const;
ChanAccess *Highest() const;
bool operator>(const AccessGroup &other) const;
bool operator<(const AccessGroup &other) const;
bool operator>=(const AccessGroup &other) const;
bool operator<=(const AccessGroup &other) const;
};
#endif
+294 -62
View File
@@ -1,86 +1,318 @@
#ifndef ACCOUNT_H
#define ACCOUNT_H
#include "anope.h"
class NickAlias;
class NickCore;
typedef Anope::insensitive_map<NickAlias *> nickalias_map;
typedef Anope::insensitive_map<NickCore *> nickcore_map;
extern CoreExport nickalias_map NickAliasList;
extern CoreExport nickcore_map NickCoreList;
/* NickServ nickname structures. */
/** XXX: this really needs to die with fire and be merged with metadata into NickCore or something.
/** Flags set on NickAliases
*/
class NickRequest
enum NickNameFlag
{
public:
NickRequest()
{
next = prev = NULL;
nick = passcode = email = NULL;
*password = 0;
requested = lastmail = 0;
}
NickRequest *next, *prev;
char *nick;
char *passcode;
char password[PASSMAX];
char *email;
time_t requested;
time_t lastmail; /* Unsaved */
NS_BEGIN,
/* Nick never expires */
NS_NO_EXPIRE,
/* This nick is being held after a kill by an enforcer client
* or is being SVSHeld. Used by ns_release to determin if something
* should be allowed to be released
*/
NS_HELD,
/* We are taking over this nick, either by SVSNICK or KILL.
* We are waiting for the confirmation of either of these actions to
* proceed. This is checked in NickAlias::OnCancel
*/
NS_COLLIDED,
NS_END
};
class NickCore;
const Anope::string NickNameFlagStrings[] = {
"BEGIN", "NO_EXPIRE", "HELD", "COLLIDED", ""
};
class NickAlias
/** Flags set on NickCores
*/
enum NickCoreFlag
{
NI_BEGIN,
/* Kill others who take this nick */
NI_KILLPROTECT,
/* Dont recognize unless IDENTIFIED */
NI_SECURE,
/* Use PRIVMSG instead of NOTICE */
NI_MSG,
/* Don't allow user to change memo limit */
NI_MEMO_HARDMAX,
/* Notify of memos at signon and un-away */
NI_MEMO_SIGNON,
/* Notify of new memos when sent */
NI_MEMO_RECEIVE,
/* Don't show in LIST to non-servadmins */
NI_PRIVATE,
/* Don't show email in INFO */
NI_HIDE_EMAIL,
/* Don't show last seen address in INFO */
NI_HIDE_MASK,
/* Don't show last quit message in INFO */
NI_HIDE_QUIT,
/* Kill in 20 seconds instead of in 60 */
NI_KILL_QUICK,
/* Kill immediatly */
NI_KILL_IMMED,
/* User gets email on memo */
NI_MEMO_MAIL,
/* Don't show services access status */
NI_HIDE_STATUS,
/* Nickname is suspended */
NI_SUSPENDED,
/* Autoop nickname in channels */
NI_AUTOOP,
/* This nickcore is forbidden, which means the nickalias for it is aswell */
NI_FORBIDDEN,
/* If set means the nick core does not have their email addrses confirmed.
*/
NI_UNCONFIRMED,
NI_END
};
const Anope::string NickCoreFlagStrings[] = {
"BEGIN", "KILLPROTECT", "SECURE", "MSG", "MEMO_HARDMAX", "MEMO_SIGNON", "MEMO_RECEIVE",
"PRIVATE", "HIDE_EMAIL", "HIDE_MASK", "HIDE_QUIT", "KILL_QUICK", "KILL_IMMED",
"MEMO_MAIL", "HIDE_STATUS", "SUSPENDED", "AUTOOP", "FORBIDDEN", "UNCONFIRMED", ""
};
class CoreExport NickAlias : public Extensible, public Flags<NickNameFlag, NS_END>, public Serializable
{
public:
NickAlias()
{
next = prev = NULL;
nick = last_quit = last_realname = last_usermask = NULL;
time_registered = last_seen = 0;
status = 0;
nc = NULL;
u = NULL;
}
/** Default constructor
* @param nickname The nick
* @param nickcore The nickcofe for this nick
*/
NickAlias(const Anope::string &nickname, NickCore *nickcore);
NickAlias *next, *prev;
char *nick; /* Nickname */
char *last_quit; /* Last quit message */
char *last_realname; /* Last realname */
char *last_usermask; /* Last usermask */
/** Default destructor
*/
~NickAlias();
Anope::string nick; /* Nickname */
Anope::string last_quit; /* Last quit message */
Anope::string last_realname; /* Last realname */
Anope::string last_usermask; /* Last usermask */
Anope::string last_realhost; /* Last uncloaked usermask, requires nickserv/auspex to see */
time_t time_registered; /* When the nick was registered */
time_t last_seen; /* When it was seen online for the last time */
uint16 status; /* See NS_* below */
NickCore *nc; /* I'm an alias of this */
time_t last_seen; /* When it was seen online for the last time */
NickCore *nc; /* I'm an alias of this */
HostInfo hostinfo;
/* Not saved */
User *u; /* Current online user that has me */
Anope::string serialize_name() const;
serialized_data serialize();
static void unserialize(serialized_data &);
/** Release a nick
* See the comment in users.cpp
*/
void Release();
/** This function is called when a user on this nick either disconnects or changes nick.
* Note that the user isnt necessarially identified to this nick
* See the comment in users.cpp
* @param u The user
*/
void OnCancel(User *u);
};
class NickCore : public Extensible
class CoreExport NickCore : public Extensible, public Flags<NickCoreFlag, NI_END>, public Serializable
{
public:
NickCore()
{
next = prev = NULL;
display = email = greet = url = NULL;
pass[0] = '\0';
icq = flags = 0;
language = accesscount = channelcount = 0;
lastmail = 0;
}
/** Default constructor
* @param display The display nick
*/
NickCore(const Anope::string &nickdisplay);
NickCore *next, *prev;
/** Default destructor
*/
~NickCore();
char *display; /* How the nick is displayed */
char pass[PASSMAX]; /* Password of the nicks */
char *email; /* E-mail associated to the nick */
char *greet; /* Greet associated to the nick */
uint32 icq; /* ICQ # associated to the nick */
char *url; /* URL associated to the nick */
uint32 flags; /* See NI_* below */
uint16 language; /* Language selected by nickname owner (LANG_*) */
uint16 accesscount; /* # of entries */
char **access; /* Array of strings */
std::list<User *> Users;
Anope::string display; /* How the nick is displayed */
Anope::string pass; /* Password of the nicks */
Anope::string email; /* E-mail associated to the nick */
Anope::string greet; /* Greet associated to the nick */
Anope::string language; /* Language name */
std::vector<Anope::string> access; /* Access list, vector of strings */
std::vector<Anope::string> cert; /* ssl certificate list, vector of strings */
MemoInfo memos;
uint16 channelcount; /* Number of channels currently registered */
Oper *o;
/* Unsaved data */
time_t lastmail; /* Last time this nick record got a mail */
SList aliases; /* List of aliases */
uint16_t channelcount; /* Number of channels currently registered */
time_t lastmail; /* Last time this nick record got a mail */
std::list<NickAlias *> aliases; /* List of aliases */
Anope::string serialize_name() const;
serialized_data serialize();
static void unserialize(serialized_data &);
/** Checks whether this account is a services oper or not.
* @return True if this account is a services oper, false otherwise.
*/
virtual bool IsServicesOper() const;
/** Add an entry to the nick's access list
*
* @param entry The nick!ident@host entry to add to the access list
*
* Adds a new entry into the access list.
*/
void AddAccess(const Anope::string &entry);
/** Get an entry from the nick's access list by index
*
* @param entry Index in the access list vector to retrieve
* @return The access list entry of the given index if within bounds, an empty string if the vector is empty or the index is out of bounds
*
* Retrieves an entry from the access list corresponding to the given index.
*/
Anope::string GetAccess(unsigned entry) const;
/** Find an entry in the nick's access list
*
* @param entry The nick!ident@host entry to search for
* @return True if the entry is found in the access list, false otherwise
*
* Search for an entry within the access list.
*/
bool FindAccess(const Anope::string &entry);
/** Erase an entry from the nick's access list
*
* @param entry The nick!ident@host entry to remove
*
* Removes the specified access list entry from the access list.
*/
void EraseAccess(const Anope::string &entry);
/** Clears the entire nick's access list
*
* Deletes all the memory allocated in the access list vector and then clears the vector.
*/
void ClearAccess();
/** Add an entry to the nick's certificate list
*
* @param entry The fingerprint to add to the cert list
*
* Adds a new entry into the cert list.
*/
void AddCert(const Anope::string &entry);
/** Get an entry from the nick's cert list by index
*
* @param entry Index in the certificaate list vector to retrieve
* @return The fingerprint entry of the given index if within bounds, an empty string if the vector is empty or the index is out of bounds
*
* Retrieves an entry from the certificate list corresponding to the given index.
*/
Anope::string GetCert(unsigned entry) const;
/** Find an entry in the nick's cert list
*
* @param entry The fingerprint to search for
* @return True if the fingerprint is found in the cert list, false otherwise
*
* Search for an fingerprint within the cert list.
*/
bool FindCert(const Anope::string &entry);
/** Erase a fingerprint from the nick's certificate list
*
* @param entry The fingerprint to remove
*
* Removes the specified fingerprint from the cert list.
*/
void EraseCert(const Anope::string &entry);
/** Clears the entire nick's cert list
*
* Deletes all the memory allocated in the certificate list vector and then clears the vector.
*/
void ClearCert();
};
/** Timer for colliding nicks to force people off of nicknames
*/
class CoreExport NickServCollide : public Timer
{
dynamic_reference<User> u;
Anope::string nick;
public:
/** Default constructor
* @param nick The nick we're colliding
* @param delay How long to delay before kicking the user off the nick
*/
NickServCollide(User *user, time_t delay);
/** Default destructor
*/
virtual ~NickServCollide();
/** Called when the delay is up
* @param t The current time
*/
void Tick(time_t t);
};
/** Timers for removing HELD status from nicks.
*/
class NickServHeld : public Timer
{
dynamic_reference<NickAlias> na;
Anope::string nick;
public:
NickServHeld(NickAlias *n, long t);
~NickServHeld();
void Tick(time_t);
};
/** Timers for releasing nicks to be available for use
*/
class CoreExport NickServRelease : public User, public Timer
{
Anope::string nick;
public:
/** Default constructor
* @param na The nick
* @param delay The delay before the nick is released
*/
NickServRelease(NickAlias *na, time_t delay);
/** Default destructor
*/
virtual ~NickServRelease();
/** Called when the delay is up
* @param t The current time
*/
void Tick(time_t t);
};
#endif // ACCOUNT_H
+565
View File
@@ -0,0 +1,565 @@
/*
* (C) 2003-2012 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
*
* Based on the original code of Epona by Lara.
* Based on the original code of Services by Andy Church.
*/
#ifndef ANOPE_H
#define ANOPE_H
#include <string>
#include <vector>
#include <set>
#include "hashcomp.h"
class Message;
namespace Anope
{
template<typename T> class map : public std::map<string, T> { };
template<typename T> class insensitive_map : public std::map<string, T, ci::less> { };
/**
* A wrapper string class around all the other string classes, this class will
* allow us to only require one type of string everywhere that can be converted
* at any time to a specific type of string.
*/
class string
{
private:
/**
* The actual string is stored in an std::string as it can be converted to
* ci::string, irc::string, or a C-style string at any time.
*/
std::string _string;
public:
/**
* Extras.
*/
typedef std::string::iterator iterator;
typedef std::string::const_iterator const_iterator;
typedef std::string::reverse_iterator reverse_iterator;
typedef std::string::const_reverse_iterator const_reverse_iterator;
typedef std::string::size_type size_type;
static const size_type npos = static_cast<size_type>(-1);
/**
* Constructors that can take in any type of string.
*/
string() : _string("") { }
string(char chr) : _string() { _string = chr; }
string(size_type n, char chr) : _string(n, chr) { }
string(const char *_str) : _string(_str) { }
string(const std::string &_str) : _string(_str) { }
string(const ci::string &_str) : _string(_str.c_str()) { }
string(const irc::string &_str) : _string(_str.c_str()) { }
string(const string &_str, size_type pos = 0, size_type n = npos) : _string(_str._string, pos, n) { }
template <class InputIterator> string(InputIterator first, InputIterator last) : _string(first, last) { }
/**
* Assignment operators, so any type of string can be assigned to this class.
*/
inline string &operator=(char chr) { this->_string = chr; return *this; }
inline string &operator=(const char *_str) { this->_string = _str; return *this; }
inline string &operator=(const std::string &_str) { this->_string = _str; return *this; }
inline string &operator=(const ci::string &_str) { this->_string = _str.c_str(); return *this; }
inline string &operator=(const irc::string &_str) { this->_string = _str.c_str(); return *this; }
inline string &operator=(const string &_str) { if (this != &_str) this->_string = _str._string; return *this; }
/**
* Equality operators, to compare to any type of string.
*/
inline bool operator==(const char *_str) const { return this->_string == _str; }
inline bool operator==(const std::string &_str) const { return this->_string == _str; }
inline bool operator==(const ci::string &_str) const { return ci::string(this->_string.c_str()) == _str; }
inline bool operator==(const irc::string &_str) const { return irc::string(this->_string.c_str()) == _str; }
inline bool operator==(const string &_str) const { return this->_string == _str._string; }
inline bool equals_cs(const char *_str) const { return this->_string == _str; }
inline bool equals_cs(const std::string &_str) const { return this->_string == _str; }
inline bool equals_cs(const ci::string &_str) const { return this->_string == _str.c_str(); }
inline bool equals_cs(const irc::string &_str) const { return this->_string == _str.c_str(); }
inline bool equals_cs(const string &_str) const { return this->_string == _str._string; }
inline bool equals_ci(const char *_str) const { return ci::string(this->_string.c_str()) == _str; }
inline bool equals_ci(const std::string &_str) const { return ci::string(this->_string.c_str()) == _str.c_str(); }
inline bool equals_ci(const ci::string &_str) const { return _str == this->_string.c_str(); }
inline bool equals_ci(const irc::string &_str) const { return ci::string(this->_string.c_str()) == _str.c_str(); }
inline bool equals_ci(const string &_str) const { return ci::string(this->_string.c_str()) == _str._string.c_str(); }
inline bool equals_irc(const char *_str) const { return irc::string(this->_string.c_str()) == _str; }
inline bool equals_irc(const std::string &_str) const { return irc::string(this->_string.c_str()) == _str.c_str(); }
inline bool equals_irc(const ci::string &_str) const { return irc::string(this->_string.c_str()) == _str.c_str(); }
inline bool equals_irc(const irc::string &_str) const { return _str == this->_string.c_str(); }
inline bool equals_irc(const string &_str) const { return irc::string(this->_string.c_str()) == _str._string.c_str(); }
/**
* Inequality operators, exact opposites of the above.
*/
inline bool operator!=(const char *_str) const { return !operator==(_str); }
inline bool operator!=(const std::string &_str) const { return !operator==(_str); }
inline bool operator!=(const ci::string &_str) const { return !operator==(_str); }
inline bool operator!=(const irc::string &_str) const { return !operator==(_str); }
inline bool operator!=(const string &_str) const { return !operator==(_str); }
/**
* Compound addition operators, overloaded to do concatenation.
*/
inline string &operator+=(char chr) { this->_string += chr; return *this; }
inline string &operator+=(const char *_str) { this->_string += _str; return *this; }
inline string &operator+=(const std::string &_str) { this->_string += _str; return *this; }
inline string &operator+=(const ci::string &_str) { this->_string += _str.c_str(); return *this; }
inline string &operator+=(const irc::string &_str) { this->_string += _str.c_str(); return *this; }
inline string &operator+=(const string &_str) { if (this != &_str) this->_string += _str._string; return *this; }
/**
* Addition operators, overloaded to do concatenation.
*/
inline const string operator+(char chr) const { return string(*this) += chr; }
inline const string operator+(const char *_str) const { return string(*this) += _str; }
inline const string operator+(const std::string &_str) const { return string(*this) += _str; }
inline const string operator+(const ci::string &_str) const { return string(*this) += _str; }
inline const string operator+(const irc::string &_str) const { return string(*this) += _str; }
inline const string operator+(const string &_str) const { return string(*this) += _str; }
friend const string operator+(char chr, const string &str);
friend const string operator+(const char *_str, const string &str);
friend const string operator+(const std::string &_str, const string &str);
friend const string operator+(const ci::string &_str, const string &str);
friend const string operator+(const irc::string &_str, const string &str);
/**
* Less-than operator.
*/
inline bool operator<(const string &_str) const { return this->_string < _str._string; }
/**
* The following functions return the various types of strings.
*/
inline const char *c_str() const { return this->_string.c_str(); }
inline std::string &str() { return this->_string; }
inline const std::string &str() const { return this->_string; }
inline ci::string ci_str() const { return ci::string(this->_string.c_str()); }
inline irc::string irc_str() const { return irc::string(this->_string.c_str()); }
/**
* Returns if the string is empty or not.
*/
inline bool empty() const { return this->_string.empty(); }
/**
* Returns the string's length.
*/
inline size_type length() const { return this->_string.length(); }
/**
* Returns the size of the currently allocated storage space in the string object.
* This can be equal or greater than the length of the string.
*/
inline size_type capacity() const { return this->_string.capacity(); }
/**
* Add a char to the end of the string.
*/
inline void push_back(char c) { return this->_string.push_back(c); }
/**
* Resizes the string content to n characters.
*/
inline void resize(size_type n) { return this->_string.resize(n); }
/**
* Erases characters from the string.
*/
inline iterator erase(const iterator &i) { return this->_string.erase(i); }
inline iterator erase(const iterator &first, const iterator &last) { return this->_string.erase(first, last); }
inline void erase(size_type pos = 0, size_type n = std::string::npos) { this->_string.erase(pos, n); }
/**
* Trim leading and trailing white spaces from the string.
*/
inline void trim()
{
while (!this->_string.empty() && isspace(this->_string[0]))
this->_string.erase(this->_string.begin());
while (!this->_string.empty() && isspace(this->_string[this->_string.length() - 1]))
this->_string.erase(this->_string.length() - 1);
}
/**
* Clears the string.
*/
inline void clear() { this->_string.clear(); }
/**
* Find substrings of the string.
*/
inline size_type find(const string &_str, size_type pos = 0) const { return this->_string.find(_str._string, pos); }
inline size_type find(char chr, size_type pos = 0) const { return this->_string.find(chr, pos); }
inline size_type find_ci(const string &_str, size_type pos = 0) const { return ci::string(this->_string.c_str()).find(ci::string(_str._string.c_str()), pos); }
inline size_type find_ci(char chr, size_type pos = 0) const { return ci::string(this->_string.c_str()).find(chr, pos); }
inline size_type rfind(const string &_str, size_type pos = npos) const { return this->_string.rfind(_str._string, pos); }
inline size_type rfind(char chr, size_type pos = npos) const { return this->_string.rfind(chr, pos); }
inline size_type rfind_ci(const string &_str, size_type pos = npos) const { return ci::string(this->_string.c_str()).rfind(ci::string(_str._string.c_str()), pos); }
inline size_type rfind_ci(char chr, size_type pos = npos) const { return ci::string(this->_string.c_str()).rfind(chr, pos); }
inline size_type find_first_of(const string &_str, size_type pos = 0) const { return this->_string.find_first_of(_str._string, pos); }
inline size_type find_first_of_ci(const string &_str, size_type pos = 0) const { return ci::string(this->_string.c_str()).find_first_of(ci::string(_str._string.c_str()), pos); }
inline size_type find_first_not_of(const string &_str, size_type pos = 0) const { return this->_string.find_first_not_of(_str._string, pos); }
inline size_type find_first_not_of_ci(const string &_str, size_type pos = 0) const { return ci::string(this->_string.c_str()).find_first_not_of(ci::string(_str._string.c_str()), pos); }
inline size_type find_last_of(const string &_str, size_type pos = npos) const { return this->_string.find_last_of(_str._string, pos); }
inline size_type find_last_of_ci(const string &_str, size_type pos = npos) const { return ci::string(this->_string.c_str()).find_last_of(ci::string(_str._string.c_str()), pos); }
inline size_type find_last_not_of(const string &_str, size_type pos = npos) const { return this->_string.find_last_not_of(_str._string, pos); }
inline size_type find_last_not_of_ci(const string &_str, size_type pos = npos) const { return ci::string(this->_string.c_str()).find_last_not_of(ci::string(_str._string.c_str()), pos); }
/**
* Determine if string consists of only numbers.
*/
inline bool is_number_only() const { return this->find_first_not_of("0123456789.-") == npos; }
inline bool is_pos_number_only() const { return this->find_first_not_of("0123456789.") == npos; }
/**
* Replace parts of the string.
*/
inline string replace(size_type pos, size_type n, const string &_str) { return string(this->_string.replace(pos, n, _str._string)); }
inline string replace(size_type pos, size_type n, const string &_str, size_type pos1, size_type n1) { return string(this->_string.replace(pos, n, _str._string, pos1, n1)); }
inline string replace(size_type pos, size_type n, size_type n1, char chr) { return string(this->_string.replace(pos, n, n1, chr)); }
inline string replace(iterator first, iterator last, const string &_str) { return string(this->_string.replace(first, last, _str._string)); }
inline string replace(iterator first, iterator last, size_type n, char chr) { return string(this->_string.replace(first, last, n, chr)); }
template <class InputIterator> inline string replace(iterator first, iterator last, InputIterator f, InputIterator l) { return string(this->_string.replace(first, last, f, l)); }
inline string replace_all_cs(const string &_orig, const string &_repl)
{
Anope::string new_string = *this;
size_type pos = new_string.find(_orig), orig_length = _orig.length(), repl_length = _repl.length();
while (pos != npos)
{
new_string = new_string.substr(0, pos) + _repl + new_string.substr(pos + orig_length);
pos = new_string.find(_orig, pos + repl_length);
}
return new_string;
}
inline string replace_all_ci(const string &_orig, const string &_repl)
{
Anope::string new_string = *this;
size_type pos = new_string.find_ci(_orig), orig_length = _orig.length(), repl_length = _repl.length();
while (pos != npos)
{
new_string = new_string.substr(0, pos) + _repl + new_string.substr(pos + orig_length);
pos = new_string.find_ci(_orig, pos + repl_length);
}
return new_string;
}
/**
* Get the string in lowercase.
*/
inline string lower()
{
Anope::string new_string = *this;
for (size_type i = 0; i < new_string.length(); ++i)
new_string[i] = static_cast<char>(tolower(new_string[i]));
return new_string;
}
/**
* Get the string in uppercase.
*/
inline string upper()
{
Anope::string new_string = *this;
for (size_type i = 0; i < new_string.length(); ++i)
new_string[i] = static_cast<char>(toupper(new_string[i]));
return new_string;
}
/**
* Get a substring of the string.
*/
inline string substr(size_type pos = 0, size_type n = npos) const { return string(this->_string.substr(pos, n)); }
/**
* Iterators to the string.
*/
inline iterator begin() { return this->_string.begin(); }
inline const_iterator begin() const { return this->_string.begin(); }
inline iterator end() { return this->_string.end(); }
inline const_iterator end() const { return this->_string.end(); }
inline reverse_iterator rbegin() { return this->_string.rbegin(); }
inline const_reverse_iterator rbegin() const { return this->_string.rbegin(); }
inline reverse_iterator rend() { return this->_string.rend(); }
inline const_reverse_iterator rend() const { return this->_string.rend(); }
/**
* Subscript operator, to access individual characters of the string.
*/
inline char &operator[](size_type n) { return this->_string[n]; }
inline const char &operator[](size_type n) const { return this->_string[n]; }
/**
* Stream insertion operator, must be friend because they cannot be inside the class.
*/
friend std::ostream &operator<<(std::ostream &os, const string &_str);
};
/** Hash an Anope::string for unorderd_map, passed as the third template arg to unordered_map
*/
struct hash
{
/* VS 2008 specific code */
enum { bucket_size = 4, min_buckets = 8 };
bool operator()(const string &s1, const string &s2) const;
/* End of 2008 specific code */
/** Hash an Anope::string for unordered_map
* @param s The string
* @return A hash value for the string
*/
bool operator()(const string &s) const;
};
inline std::ostream &operator<<(std::ostream &os, const string &_str) { return os << _str._string; }
inline const string operator+(char chr, const string &str) { string tmp(chr); tmp += str; return tmp; }
inline const string operator+(const char *_str, const string &str) { string tmp(_str); tmp += str; return tmp; }
inline const string operator+(const std::string &_str, const string &str) { string tmp(_str); tmp += str; return tmp; }
inline const string operator+(const ci::string &_str, const string &str) { string tmp(_str); tmp += str; return tmp; }
inline const string operator+(const irc::string &_str, const string &str) { string tmp(_str); tmp += str; return tmp; }
static const char *const compiled = __TIME__ " " __DATE__;
/** The current system time, which is pretty close to being accurate.
* Use this unless you need very specific time checks
*/
extern CoreExport time_t CurTime;
extern CoreExport string Version();
extern CoreExport string VersionShort();
extern CoreExport string VersionBuildString();
extern CoreExport int VersionMajor();
extern CoreExport int VersionMinor();
extern CoreExport int VersionPatch();
extern CoreExport int VersionBuild();
/** Check whether two strings match.
* @param str The string to check against the pattern (e.g. foobar)
* @param mask The pattern to check (e.g. foo*bar)
* @param case_sensitive Whether or not the match is case sensitive, default false.
*/
extern CoreExport bool Match(const Anope::string &str, const Anope::string &mask, bool case_sensitive = false);
/** Find a message in the message table
* @param name The name of the message were looking for
* @return NULL if we cant find it, or a pointer to the Message if we can
*/
extern CoreExport std::vector<Message *> FindMessage(const string &name);
/** Converts a string to hex
* @param the data to be converted
* @return a anope::string containing the hex value
*/
extern CoreExport string Hex(const string &data);
extern CoreExport string Hex(const char *data, unsigned len);
/** Converts a string from hex
* @param src The data to be converted
* @param dest The destination string
*/
extern CoreExport void Unhex(const Anope::string &src, Anope::string &dest);
extern CoreExport void Unhex(const Anope::string &src, char *dest);
/** Base 64 encode a string
* @param src The string to encode
* @param target Where the encoded string is placed
*/
extern CoreExport void B64Encode(const Anope::string &src, Anope::string &target);
/** Base 64 decode a string
* @param src The base64 encoded string
* @param target The plain text result
*/
extern CoreExport void B64Decode(const Anope::string &src, Anope::string &target);
/** Returns a sequence of data formatted as the format argument specifies.
** After the format parameter, the function expects at least as many
** additional arguments as specified in format.
* @param fmt Format of the Message
* @param ... any number of parameters
* @return a Anope::string
*/
extern CoreExport string printf(const char *fmt, ...);
/** Return the last error code
* @return The error code
*/
extern CoreExport int LastErrorCode();
/** Return the last error, uses errno/GetLastError() to determine this
* @return An error message
*/
extern CoreExport const Anope::string LastError();
}
/** sepstream allows for splitting token seperated lists.
* Each successive call to sepstream::GetToken() returns
* the next token, until none remain, at which point the method returns
* an empty string.
*/
class CoreExport sepstream
{
private:
/** Original string.
*/
Anope::string tokens;
/** Last position of a seperator token
*/
Anope::string::iterator last_starting_position;
/** Current string position
*/
Anope::string::iterator n;
/** Seperator value
*/
char sep;
public:
/** Create a sepstream and fill it with the provided data
*/
sepstream(const Anope::string &source, char seperator);
virtual ~sepstream() { }
/** Fetch the next token from the stream
* @param token The next token from the stream is placed here
* @return True if tokens still remain, false if there are none left
*/
virtual bool GetToken(Anope::string &token);
/** Fetch the entire remaining stream, without tokenizing
* @return The remaining part of the stream
*/
virtual const Anope::string GetRemaining();
/** Returns true if the end of the stream has been reached
* @return True if the end of the stream has been reached, otherwise false
*/
virtual bool StreamEnd();
};
/** A derived form of sepstream, which seperates on commas
*/
class commasepstream : public sepstream
{
public:
/** Initialize with comma seperator
*/
commasepstream(const Anope::string &source) : sepstream(source, ',') { }
};
/** A derived form of sepstream, which seperates on spaces
*/
class spacesepstream : public sepstream
{
public:
/** Initialize with space seperator
*/
spacesepstream(const Anope::string &source) : sepstream(source, ' ') { }
};
/** The base class that most classes in Anope inherit from
*/
class dynamic_reference_base;
class CoreExport Base
{
/* References to this base class */
std::set<dynamic_reference_base *> References;
public:
Base();
virtual ~Base();
void AddReference(dynamic_reference_base *r);
void DelReference(dynamic_reference_base *r);
};
class dynamic_reference_base
{
protected:
bool invalid;
public:
dynamic_reference_base() : invalid(false) { }
virtual ~dynamic_reference_base() { }
inline void Invalidate() { this->invalid = true; }
};
template<typename T>
class dynamic_reference : public dynamic_reference_base
{
protected:
T *ref;
public:
dynamic_reference(T *obj) : ref(obj)
{
if (ref)
ref->AddReference(this);
}
dynamic_reference(const dynamic_reference<T> &obj) : ref(obj.ref)
{
if (ref)
ref->AddReference(this);
}
virtual ~dynamic_reference()
{
if (this->invalid)
{
this->invalid = false;
this->ref = NULL;
}
else if (this->operator bool())
ref->DelReference(this);
}
virtual operator bool()
{
if (this->invalid)
{
this->invalid = false;
this->ref = NULL;
}
return this->ref != NULL;
}
virtual inline operator T*()
{
if (this->operator bool())
return this->ref;
return NULL;
}
virtual inline T *operator->()
{
if (this->operator bool())
return this->ref;
return NULL;
}
virtual inline void operator=(T *newref)
{
if (this->invalid)
{
this->invalid = false;
this->ref = NULL;
}
else if (this->operator bool())
this->ref->DelReference(this);
this->ref = newref;
if (this->operator bool())
this->ref->AddReference(this);
}
};
#endif // ANOPE_H
+83 -28
View File
@@ -1,55 +1,72 @@
/*
* Copyright (C) 2008-2009 Robin Burchell <w00t@inspircd.org>
* Copyright (C) 2008-2009 Anope Team <team@anope.org>
* Copyright (C) 2008-2011 Robin Burchell <w00t@inspircd.org>
* Copyright (C) 2008-2012 Anope Team <team@anope.org>
*
* Please read COPYING and README for further details.
*
*
* $Id$
*
*/
#ifndef BOTS_H
#define BOTS_H
struct CommandHash;
class BotInfo;
class CoreExport BotInfo
extern CoreExport Anope::insensitive_map<BotInfo *> BotListByNick;
extern CoreExport Anope::map<BotInfo *> BotListByUID;
typedef Anope::insensitive_map<BotInfo *> botinfo_map;
/** Flags settable on a bot
*/
enum BotFlag
{
BI_BEGIN,
/* This bot is a core bot. NickServ, ChanServ, etc */
BI_CORE,
/* This bot can only be assigned by IRCops */
BI_PRIVATE,
/* This bot is defined in the config */
BI_CONF,
BI_END
};
static const Anope::string BotFlagString[] = { "BEGIN", "CORE", "PRIVATE", "CONF", "" };
class CoreExport BotInfo : public User, public Flags<BotFlag, BI_END>, public Serializable
{
public:
BotInfo *next, *prev;
std::string uid; /* required for UID supporting servers, as opposed to the shitty struct Uid. */
char *nick; /* Nickname of the bot */
char *user; /* Its user name */
char *host; /* Its hostname */
char *real; /* Its real name */
int16 flags; /* Bot flags -- see BI_* below */
time_t created; /* Birth date ;) */
int16 chancount; /* Number of channels that use the bot. */
/* Dynamic data */
uint32_t chancount;
time_t created; /* Birth date ;) */
time_t lastmsg; /* Last time we said something */
CommandHash **cmdTable;
typedef Anope::insensitive_map<CommandInfo> command_map;
command_map commands; /* Commands, actual name to service name */
Anope::string botmodes; /* Modes the bot should have as configured in service:modes */
std::vector<Anope::string> botchannels; /* Channels the bot should be in as configured in service:channels */
bool introduced; /* Whether or not this bot is introduced */
/** Create a new bot.
* XXX: Note - this constructor is considered obsolete. Use the four parameter form.
* @param nick The nickname to assign to the bot.
*/
BotInfo(const char *nick);
/** Create a new bot.
* @param nick The nickname to assign to the bot.
* @param user The ident to give the bot.
* @param host The hostname to give the bot.
* @param real The realname to give the bot.
* @param bmodes The modes to give the bot.
*/
BotInfo(const char *nick, const char *user, const char *host, const char *real);
BotInfo(const Anope::string &nick, const Anope::string &user = "", const Anope::string &host = "", const Anope::string &real = "", const Anope::string &bmodes = "");
/** Destroy a bot, clearing up appropriately.
*/
virtual ~BotInfo();
/** Change the nickname set on a bot.
Anope::string serialize_name() const;
serialized_data serialize();
static void unserialize(serialized_data &);
void GenerateUID();
/** Change the nickname for the bot.
* @param newnick The nick to change to
*/
void ChangeNick(const char *newnick);
void SetNewNick(const Anope::string &newnick);
/** Rejoins all channels that this bot is assigned to.
* Used on /kill, rename, etc.
@@ -67,5 +84,43 @@ class CoreExport BotInfo
* @param ci The channel registration to remove the bot from.
*/
void UnAssign(User *u, ChannelInfo *ci);
/** Join this bot to a channel
* @param c The channel
* @param status The status the bot should have on the channel
*/
void Join(Channel *c, ChannelStatus *status = NULL);
/** Join this bot to a channel
* @param chname The channel name
* @param status The status the bot should have on the channel
*/
void Join(const Anope::string &chname, ChannelStatus *status = NULL);
/** Part this bot from a channel
* @param c The channel
* @param reason The reason we're parting
*/
void Part(Channel *c, const Anope::string &reason = "");
/** Called when a user messages this bot
* @param u The user
* @param message The users' message
*/
virtual void OnMessage(User *u, const Anope::string &message);
/** Link a command name to a command in services
* @param cname The command name
* @param sname The service name
* @param permission Permission required to execute the command, if any
*/
void SetCommand(const Anope::string &cname, const Anope::string &sname, const Anope::string &permission = "");
/** Get command info for a command
* @param cname The command name
* @return A struct containing service name and permission
*/
CommandInfo *GetCommand(const Anope::string &cname);
};
#endif // BOTS_H
+234
View File
@@ -0,0 +1,234 @@
/* Channel support
*
* (C) 2008-2012 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
*/
#ifndef CHANNELS_H
#define CHANNELS_H
typedef Anope::insensitive_map<Channel *> channel_map;
extern CoreExport channel_map ChannelList;
struct UserContainer : public Extensible
{
User *user;
ChannelStatus *Status;
UserContainer(User *u) : user(u) { }
virtual ~UserContainer() { }
};
typedef std::list<UserContainer *> CUserList;
enum ChannelFlag
{
/* ChanServ is currently holding the channel */
CH_INHABIT,
/* Channel still exists when emptied */
CH_PERSIST,
/* If set the channel is syncing users (channel was just created) and it should not be deleted */
CH_SYNCING
};
const Anope::string ChannelFlagString[] = { "CH_INABIT", "CH_PERSIST", "CH_SYNCING", "" };
class CoreExport Channel : public Extensible, public Flags<ChannelFlag, 3>
{
public:
typedef std::multimap<ChannelModeName, Anope::string> ModeList;
private:
/** A map of channel modes with their parameters set on this channel
*/
ModeList modes;
public:
/** Default constructor
* @param name The channel name
* @param ts The time the channel was created
*/
Channel(const Anope::string &nname, time_t ts = Anope::CurTime);
/** Default destructor
*/
~Channel();
Anope::string name; /* Channel name */
ChannelInfo *ci; /* Corresponding ChannelInfo */
time_t creation_time; /* When channel was created */
/* List of users in the channel */
CUserList users;
Anope::string topic; /* Current topic of the channel */
Anope::string topic_setter; /* Who set the topic */
time_t topic_time; /* When the topic was set*/
time_t server_modetime; /* Time of last server MODE */
time_t chanserv_modetime; /* Time of last check_modes() */
int16_t server_modecount; /* Number of server MODEs this second */
int16_t chanserv_modecount; /* Number of check_mode()'s this sec */
int16_t bouncy_modes; /* Did we fail to set modes here? */
/** Call if we need to unset all modes and clear all user status (internally).
* Only useful if we get a SJOIN with a TS older than what we have here
*/
void Reset();
/** Restore the channel topic, set mlock (key), set stickied bans, etc
*/
void Sync();
/** Join a user internally to the channel
* @param u The user
*/
void JoinUser(User *u);
/** Remove a user internally from the channel
* @param u The user
*/
void DeleteUser(User *u);
/** Check if the user is on the channel
* @param u The user
* @return A user container if found, else NULL
*/
UserContainer *FindUser(User *u);
/** Check if a user has a status on a channel
* @param u The user
* @param cms The status mode, or NULL to represent no status
* @return true or false
*/
bool HasUserStatus(User *u, ChannelModeStatus *cms) const;
/** Check if a user has a status on a channel
* Use the overloaded function for ChannelModeStatus* to check for no status
* @param u The user
* @param Name The Mode name, eg CMODE_OP, CMODE_VOICE
* @return true or false
*/
bool HasUserStatus(User *u, ChannelModeName Name) const;
/** See if a channel has a mode
* @param Name The mode name
* @return The number of modes set
* @param param The optional mode param
*/
size_t HasMode(ChannelModeName Name, const Anope::string &param = "");
/** Get a list of modes on a channel
* @param Name A mode name to get the list of
* @return a pair of iterators for the beginning and end of the list
*/
std::pair<ModeList::iterator, ModeList::iterator> GetModeList(ChannelModeName Name);
/** Set a mode internally on a channel, this is not sent out to the IRCd
* @param cm The mode
* @param param The param
* @param EnforceMLock true if mlocks should be enforced, false to override mlock
*/
void SetModeInternal(ChannelMode *cm, const Anope::string &param = "", bool EnforceMLock = true);
/** Remove a mode internally on a channel, this is not sent out to the IRCd
* @param cm The mode
* @param param The param
* @param EnforceMLock true if mlocks should be enforced, false to override mlock
*/
void RemoveModeInternal(ChannelMode *cm, const Anope::string &param = "", bool EnforceMLock = true);
/** Set a mode on a channel
* @param bi The client setting the modes
* @param cm The mode
* @param param Optional param arg for the mode
* @param EnforceMLock true if mlocks should be enforced, false to override mlock
*/
void SetMode(BotInfo *bi, ChannelMode *cm, const Anope::string &param = "", bool EnforceMLock = true);
/**
* Set a mode on a channel
* @param bi The client setting the modes
* @param Name The mode name
* @param param Optional param arg for the mode
* @param EnforceMLock true if mlocks should be enforced, false to override mlock
*/
void SetMode(BotInfo *bi, ChannelModeName Name, const Anope::string &param = "", bool EnforceMLock = true);
/** Remove a mode from a channel
* @param bi The client setting the modes
* @param cm The mode
* @param param Optional param arg for the mode
* @param EnforceMLock true if mlocks should be enforced, false to override mlock
*/
void RemoveMode(BotInfo *bi, ChannelMode *cm, const Anope::string &param = "", bool EnforceMLock = true);
/**
* Remove a mode from a channel
* @param bi The client setting the modes
* @param Name The mode name
* @param param Optional param arg for the mode
* @param EnforceMLock true if mlocks should be enforced, false to override mlock
*/
void RemoveMode(BotInfo *bi, ChannelModeName Name, const Anope::string &param = "", bool EnforceMLock = true);
/** Get a param from the channel
* @param Name The mode
* @param Target a string to put the param into
* @return true on success
*/
bool GetParam(ChannelModeName Name, Anope::string &Target) const;
/** Set a string of modes on the channel
* @param bi The client setting the modes
* @param EnforceMLock Should mlock be enforced on this mode change
* @param cmodes The modes to set
*/
void SetModes(BotInfo *bi, bool EnforceMLock, const char *cmodes, ...);
/** Set a string of modes internally on a channel
* @param setter the setter (if it is a user)
* @param mode the modes
* @param EnforceMLock true to enforce mlock
*/
void SetModesInternal(User *setter, const Anope::string &mode, bool EnforceMLock = true);
/** Kick a user from a channel internally
* @param source The sender of the kick
* @param nick The nick being kicked
* @param reason The reason for the kick
*/
void KickInternal(const Anope::string &source, const Anope::string &nick, const Anope::string &reason);
/** Kick a user from the channel
* @param bi The sender, can be NULL for the service bot for this channel
* @param u The user being kicked
* @param reason The reason for the kick
* @return true if the kick was scucessful, false if a module blocked the kick
*/
bool Kick(BotInfo *bi, User *u, const char *reason = NULL, ...);
/** Get a string of the modes set on this channel
* @param complete Include mode parameters
* @param plus If set to false (with complete), mode parameters will not be given for modes requring no parameters to be unset
* @return A mode string
*/
Anope::string GetModes(bool complete, bool plus);
/** Update the topic of the channel internally, and reset it if topiclock etc says to
* @param user THe user setting the new topic
* @param newtopic The new topic
* @param ts The time the new topic is being set
*/
void ChangeTopicInternal(const Anope::string &user, const Anope::string &newtopic, time_t ts = Anope::CurTime);
/** Update the topic of the channel, and reset it if topiclock etc says to
* @param user The user setting the topic
* @param newtopic The new topic
* @param ts The time when the new topic is being set
*/
void ChangeTopic(const Anope::string &user, const Anope::string &newtopic, time_t ts = Anope::CurTime);
};
#endif // CHANNELS_H
+111 -15
View File
@@ -1,28 +1,124 @@
/* Declarations for command data.
*
* (C) 2003-2009 Anope Team
* (C) 2003-2012 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for furhter details.
* Please read COPYING and README for further details.
*
* Based on the original code of Epona by Lara.
* Based on the original code of Services by Andy Church.
*
* $Id$
*
* Based on the original code of Services by Andy Church.
*/
#include "modules.h"
#ifndef COMMAND_H
#define COMMAND_H
/*************************************************************************/
#include "services.h"
/* Routines for looking up commands. Command lists are arrays that must be
* terminated with a NULL name.
class Module;
class BotInfo;
class Command;
enum CommandFlag
{
CFLAG_ALLOW_UNREGISTERED,
CFLAG_STRIP_CHANNEL
};
const Anope::string CommandFlagStrings[] = {
"CFLAG_ALLOW_UNREGISTERED",
"CFLAG_STRIP_CHANNEL",
""
};
struct CommandInfo
{
Anope::string name;
Anope::string permission;
};
/* The source for a command */
struct CoreExport CommandSource
{
/* User executing the command */
User *u;
/* Channel the command was executed on (fantasy) */
Channel *c;
/* The service this command is on */
BotInfo *owner;
/* The service the reply should come from, *not* necessarily the service the command is on */
BotInfo *service;
/* The actual name of the command being executed */
Anope::string command;
/* The permission of the command being executed */
Anope::string permission;
void Reply(const char *message, ...);
void Reply(const Anope::string &message);
};
/** Every services command is a class, inheriting from Command.
*/
class CoreExport Command : public Service, public Flags<CommandFlag>
{
Anope::string desc;
std::vector<Anope::string> syntax;
extern MDE Command *lookup_cmd(Command *list, char *name);
extern MDE void mod_help_cmd(char *service, User *u, CommandHash *cmdTable[],const char *cmd);
extern MDE void mod_run_cmd(char *service, User *u, CommandHash *cmdTable[],const char *cmd);
extern MDE void do_help_limited(char *service, User * u, Command * c);
public:
/* Maximum paramaters accepted by this command */
size_t MaxParams;
/* Minimum parameters required to use this command */
size_t MinParams;
/*************************************************************************/
/* Module which owns us */
Module *module;
/** Create a new command.
* @param owner The owner of the command
* @param sname The command name
* @param min_params The minimum number of parameters the parser will require to execute this command
* @param max_params The maximum number of parameters the parser will create, after max_params, all will be combined into the last argument.
* NOTE: If max_params is not set (default), there is no limit to the max number of params.
*/
Command(Module *owner, const Anope::string &sname, size_t min_params, size_t max_params = 0);
virtual ~Command();
protected:
void SetDesc(const Anope::string &d);
void ClearSyntax();
void SetSyntax(const Anope::string &s);
void SendSyntax(CommandSource &);
void SendSyntax(CommandSource &, const Anope::string &syntax);
public:
/** Get the command description
* @return The commands description
*/
const Anope::string &GetDesc() const;
/** Execute this command.
* @param source The source
* @param params Command parameters
*/
virtual void Execute(CommandSource &source, const std::vector<Anope::string> &params) = 0;
/** Called when HELP is requsted for the client this command is on.
* @param source The source
*/
virtual void OnServHelp(CommandSource &source);
/** Requested when the user is requesting help on this command. Help on this command should be sent to the user.
* @param source The source
* @param subcommand The subcommand the user is requesting help on, or an empty string. (e.g. /ns help set foo bar lol gives a subcommand of "FOO BAR LOL")
* @return true if help was provided to the user, false otherwise.
*/
virtual bool OnHelp(CommandSource &source, const Anope::string &subcommand);
/** Requested when the user provides bad syntax to this command (not enough params, etc).
* @param source The source
* @param subcommand The subcommand the user tried to use
*/
virtual void OnSyntaxError(CommandSource &source, const Anope::string &subcommand);
};
#endif // COMMANDS_H
+767 -59
View File
@@ -1,72 +1,780 @@
/* Services configuration.
*
* (C) 2003-2009 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for furhter details.
*
* Based on the original code of Epona by Lara.
* Based on the original code of Services by Andy Church.
*
* $Id$
*
*/
#ifndef CONFIG_H
#define CONFIG_H
/* Note that most of the options which used to be here have been moved to
* services.conf. */
#include <string>
#include <fstream>
#include <sstream>
#include <vector>
#include <map>
#include <deque>
/*************************************************************************/
#include "anope.h"
/******* General configuration *******/
/* Name of configuration file (in Services directory) */
#define SERVICES_CONF "services.conf"
/* Name of log file (in Services directory) */
#define LOG_FILENAME "services.log"
/* Maximum amount of data from/to the network to buffer (bytes). */
#define NET_BUFSIZE 65536
/******* OperServ configuration *******/
/* Define this to enable OperServ's svs commands (superadmin only). */
#define USE_OSSVS
/******************* END OF USER-CONFIGURABLE SECTION ********************/
/* Size of input buffer (note: this is different from BUFSIZ)
* This must be big enough to hold at least one full IRC message, or messy
* things will happen. */
#define BUFSIZE 1024
/* Extra warning: If you change CHANMAX, your ChanServ database will be
* unusable.
/** A configuration key and value pair
*/
typedef std::pair<Anope::string, Anope::string> KeyVal;
/* Maximum length of a channel name, including the trailing null. Any
* channels with a length longer than (CHANMAX-1) including the leading #
* will not be usable with ChanServ. */
#define CHANMAX 64
/** A list of related configuration keys and values
*/
typedef std::vector<KeyVal> KeyValList;
/* Maximum length of a nickname, including the trailing null. This MUST be
* at least one greater than the maximum allowable nickname length on your
* network, or people will run into problems using Services! The default
* (32) works with all servers I know of. */
#define NICKMAX 32
/** An entire config file, built up of KeyValLists
*/
typedef std::multimap<Anope::string, KeyValList> ConfigDataHash;
/* Maximum length of a password */
#define PASSMAX 32
// Required forward definitions
class ServerConfig;
/* Maximum length of a username */
#define USERMAX 10
/** Types of data in the core config
*/
enum ConfigDataType
{
DT_NOTHING, // No data
DT_INTEGER, // Integer
DT_UINTEGER, // Unsigned Integer
DT_LUINTEGER, // Long Unsigned Integer
DT_STRING, // Anope::string
DT_BOOLEAN, // Boolean
DT_HOSTNAME, // Hostname syntax
DT_NOSPACES, // No spaces
DT_IPADDRESS, // IP address (v4, v6)
DT_TIME, // Time value
DT_NORELOAD = 32, // Item can't be reloaded after startup
DT_ALLOW_WILD = 64, // Allow wildcards/CIDR in DT_IPADDRESS
DT_ALLOW_NEWLINE = 128, // New line characters allowed in DT_STRING
DT_ALLOW_EMPTY = 256 // Allow empty value
};
/* Maximum length of a domain */
#define HOSTMAX 64
/** Holds a config value, either string, integer or boolean.
* Callback functions receive one or more of these, either on
* their own as a reference, or in a reference to a deque of them.
* The callback function can then alter the values of the ValueItem
* classes to validate the settings.
*/
class CoreExport ValueItem
{
private:
/** Actual data */
Anope::string v;
public:
/** Initialize with nothing */
ValueItem();
/** Initialize with an int */
ValueItem(int);
/** Initialize with a bool */
ValueItem(bool);
/** Initialize with an Anope::string */
ValueItem(const Anope::string &);
/** Initialize with a long */
ValueItem(long);
/** Change value to an Anope::string */
void Set(const Anope::string &);
/** Change value to an int */
void Set(int);
/** Get value as an int */
int GetInteger() const;
/** Get value as a string */
const char *GetString() const;
/** Get value as an Anope::string */
inline const Anope::string &GetValue() const { return v; }
/** Get value as a bool */
bool GetBool() const;
};
/**************************************************************************/
/** The base class of the container 'ValueContainer'
* used internally by the core to hold core values.
*/
class ValueContainerBase
{
public:
/** Constructor */
ValueContainerBase() { }
/** Destructor */
virtual ~ValueContainerBase() { }
};
#endif /* CONFIG_H */
/** ValueContainer is used to contain pointers to different
* core values such as the server name, maximum number of
* clients etc.
* It is specialized to hold a data type, then pointed at
* a value in the ServerConfig class. When the value has been
* read and validated, the Set method is called to write the
* value safely in a type-safe manner.
*/
template<typename T> class ValueContainer : public ValueContainerBase
{
private:
/** Contained item */
T val;
public:
/** Initialize with nothing */
ValueContainer() : ValueContainerBase(), val(NULL) { }
/** Initialize with a value of type T */
ValueContainer(T Val) : ValueContainerBase(), val(Val) { }
/** Initialize with a copy */
ValueContainer(const ValueContainer &Val) : ValueContainerBase(), val(Val.val) { }
ValueContainer &operator=(const ValueContainer &Val)
{
val = Val.val;
return *this;
}
/** Change value to type T of size s */
void Set(const T newval, size_t s)
{
memcpy(val, newval, s);
}
};
/** This a specific version of ValueContainer to handle Anope::string specially
*/
template<> class ValueContainer<Anope::string *> : public ValueContainerBase
{
private:
/** Contained item */
Anope::string *val;
public:
/** Initialize with nothing */
ValueContainer() : ValueContainerBase(), val(NULL) { }
/** Initialize with an std::string */
ValueContainer(Anope::string *Val) : ValueContainerBase(), val(Val) { }
/** Initialize with a copy */
ValueContainer(const ValueContainer &Val) : ValueContainerBase(), val(Val.val) { }
ValueContainer &operator=(const ValueContainer &Val)
{
val = Val.val;
return *this;
}
/** Change value to given Anope::string */
void Set(const Anope::string &newval)
{
*val = newval;
}
/** Change value to given char pointer */
void Set(const char *newval)
{
*val = newval;
}
};
/** A specialization of ValueContainer to hold a pointer to a bool
*/
typedef ValueContainer<bool *> ValueContainerBool;
/** A specialization of ValueContainer to hold a pointer to
* an unsigned int
*/
typedef ValueContainer<unsigned *> ValueContainerUInt;
/** A specialization of ValueContainer to hold a pointer to
* a long unsigned int
*/
typedef ValueContainer<long unsigned *> ValueContainerLUInt;
/** A specialization of ValueContainer to hold a pointer to
* an int
*/
typedef ValueContainer<int *> ValueContainerInt;
/** A specialization of ValueContainer to hold a pointer to
* a time_t
*/
typedef ValueContainer<time_t *> ValueContainerTime;
/** A specialization of ValueContainer to hold a pointer to
* an Anope::string
*/
typedef ValueContainer<Anope::string *> ValueContainerString;
/** A set of ValueItems used by multi-value validator functions
*/
typedef std::deque<ValueItem> ValueList;
/** A callback for validating a single value
*/
typedef bool (*Validator)(ServerConfig *, const Anope::string &, const Anope::string &, ValueItem &);
/** A callback for validating multiple value entries
*/
typedef bool (*MultiValidator)(ServerConfig *, const Anope::string &, const Anope::string *, ValueList &, int *);
/** A callback indicating the end of a group of entries
*/
typedef bool (*MultiNotify)(ServerConfig *, const Anope::string &);
bool ValidateNotEmpty(ServerConfig *, const Anope::string &tag, const Anope::string &value, ValueItem &data);
bool ValidateNotZero(ServerConfig *, const Anope::string &tag, const Anope::string &value, ValueItem &data);
bool ValidateEmailReg(ServerConfig *config, const Anope::string &tag, const Anope::string &value, ValueItem &data);
bool ValidatePort(ServerConfig *, const Anope::string &tag, const Anope::string &value, ValueItem &data);
bool ValidateGuestPrefix(ServerConfig *conf, const Anope::string &tag, const Anope::string &value, ValueItem &data);
bool ValidateBantype(ServerConfig *, const Anope::string &, const Anope::string &, ValueItem &data);
bool ValidateChanServ(ServerConfig *config, const Anope::string &tag, const Anope::string &value, ValueItem &data);
bool ValidateMemoServ(ServerConfig *config, const Anope::string &tag, const Anope::string &value, ValueItem &data);
bool ValidateBotServ(ServerConfig *config, const Anope::string &tag, const Anope::string &value, ValueItem &data);
bool ValidateHostServ(ServerConfig *config, const Anope::string &tag, const Anope::string &value, ValueItem &data);
bool ValidateLimitSessions(ServerConfig *config, const Anope::string &tag, const Anope::string &value, ValueItem &data);
bool ValidateOperServ(ServerConfig *config, const Anope::string &tag, const Anope::string &value, ValueItem &data);
bool ValidateGlobal(ServerConfig *config, const Anope::string &tag, const Anope::string &value, ValueItem &data);
bool ValidateNickLen(ServerConfig *, const Anope::string &, const Anope::string &, ValueItem &data);
bool ValidateMail(ServerConfig *config, const Anope::string &tag, const Anope::string &value, ValueItem &data);
bool ValidateGlobalOnCycle(ServerConfig *config, const Anope::string &tag, const Anope::string &value, ValueItem &data);
/** Represents a configuration file
*/
class ConfigurationFile
{
Anope::string name;
bool executable;
FILE *fp;
public:
ConfigurationFile(const Anope::string &, bool);
~ConfigurationFile();
const Anope::string &GetName() const;
bool IsOpen() const;
bool Open();
void Close();
bool End() const;
Anope::string Read();
};
/** Holds all of the core configuration items
*/
class CoreExport ConfigItems
{
public:
/** Holds a core configuration item and its callbacks
*/
struct Item
{
/** Tag name */
Anope::string tag;
/** Value name */
Anope::string value;
/** Default, if not defined */
Anope::string default_value;
/** Value containers */
ValueContainerBase *val;
/** Data types */
int datatype;
/** Validation function */
Validator validation_function;
} *Values;
/** Holds a core configuration item and its callbacks
* where there may be more than one item
*/
struct MultiItem
{
/** Tag name */
Anope::string tag;
/** One or more items within tag */
Anope::string items[17];
/** One or more defaults for items within tags */
Anope::string items_default[17];
/** One or more data types */
int datatype[17];
/** Initialization function */
MultiNotify init_function;
/** Validation function */
MultiValidator validation_function;
/** Completion function */
MultiNotify finish_function;
} *MultiValues;
ConfigItems(ServerConfig *conf);
~ConfigItems();
};
/** This class holds the bulk of the runtime configuration for Anope.
* It allows for reading new config values, accessing configuration files,
* and storage of the configuration data needed to run Anope.
*/
class CoreExport ServerConfig
{
private:
/** Check that there is only one of each configuration item
*/
bool CheckOnce(const Anope::string &);
public:
/** This holds all the information in the config file,
* it's indexed by tag name to a vector of key/values.
*/
ConfigDataHash config_data;
/** Construct a new ServerConfig
*/
ServerConfig();
/** Read the entire configuration into memory
* and initialize this class. All other methods
* should be used only by the core.
*/
void Read();
/** Load the configuration file into 'this'. With the new config parser everything is parsed into
* tag/key/value at load-time rather than at read-value time.
*/
void LoadConf(ConfigurationFile &file);
// Both these return true if the value existed or false otherwise
/** Writes 'length' chars into 'result' as a string
*/
bool ConfValue(ConfigDataHash &, const Anope::string &, const Anope::string &, int, Anope::string &, bool = false);
/** Writes 'length' chars into 'result' as a string
*/
bool ConfValue(ConfigDataHash &, const Anope::string &, const Anope::string &, const Anope::string &, int, Anope::string &, bool = false);
/** Tries to convert the value to an integer and write it to 'result'
*/
bool ConfValueInteger(ConfigDataHash &, const Anope::string &, const Anope::string &, int, int &);
/** Tries to convert the value to an integer and write it to 'result'
*/
bool ConfValueInteger(ConfigDataHash &, const Anope::string &, const Anope::string &, const Anope::string &, int, int &);
/** Returns true if the value exists and has a true value, false otherwise
*/
bool ConfValueBool(ConfigDataHash &, const Anope::string &, const Anope::string &, int);
/** Returns true if the value exists and has a true value, false otherwise
*/
bool ConfValueBool(ConfigDataHash &, const Anope::string &, const Anope::string &, const Anope::string &, int);
/** Returns the number of occurences of tag in the config file
*/
int ConfValueEnum(const ConfigDataHash &, const Anope::string &);
/** Returns the numbers of vars inside the index'th 'tag in the config file
*/
int ConfVarEnum(ConfigDataHash &, const Anope::string &, int);
void ValidateHostname(const Anope::string &, const Anope::string &, const Anope::string &) const;
void ValidateIP(const Anope::string &p, const Anope::string &, const Anope::string &, bool) const;
void ValidateNoSpaces(const Anope::string &, const Anope::string &, const Anope::string &) const;
/** Below here is a list of variables which contain the config files values
*/
/* Host to bind to */
Anope::string LocalHost;
/* List of uplink servers to try and connect to */
std::vector<Uplink *> Uplinks;
/* Our server name */
Anope::string ServerName;
/* Our servers description */
Anope::string ServerDesc;
/* Name of the network were on */
Anope::string NetworkName;
/* The max legnth of nicks */
unsigned NickLen;
/* Max length of idents */
unsigned UserLen;
/* Max lenght of hostnames */
unsigned HostLen;
/* Max length of passwords */
unsigned PassLen;
/* Filename for the PID file */
Anope::string PIDFilename;
/* MOTD filename */
Anope::string MOTDFilename;
Anope::string BotServ;
Anope::string ChanServ;
Anope::string Global;
Anope::string HostServ;
Anope::string NickServ;
Anope::string OperServ;
Anope::string MemoServ;
/* True if its ok to not be able to save backs */
bool NoBackupOkay;
/* Do password checking when new people register */
bool StrictPasswords;
/* How many times you're allowed to give a bad password before being killed */
unsigned BadPassLimit;
/* How long before bad passwords are forgotten */
time_t BadPassTimeout;
/* Delay between automatic database updates */
time_t UpdateTimeout;
/* Delay between checks for expired nicks and channels */
time_t ExpireTimeout;
/* How long to wait for something from the uplink, this is passed to select() */
time_t ReadTimeout;
/* How often to send program errors */
time_t WarningTimeout;
/* How long to process things such as timers to see if there is anything to calll */
time_t TimeoutCheck;
/* Number of days backups are kept */
int KeepBackups;
/* Forbidding requires a reason */
bool ForceForbidReason;
/* Services should use privmsgs instead of notices */
bool UsePrivmsg;
/* Services only respond to full PRIVMSG client@services.server.name messages */
bool UseStrictPrivMsg;
/* This is not a configurable option.
* Config::Config will set it depending on the value of UseStrictPrivMsg */
Anope::string UseStrictPrivMsgString;
/* Number of seconds between consecutive uses of the REGISTER command
* Not to be confused with NSRegDelay */
unsigned NickRegDelay;
/* Max number if news items allowed in the list */
unsigned NewsCount;
/* Default mlock modes */
Anope::string MLock;
/* Unmlockable modes */
Anope::string NoMLock;
/* Default botmodes on channels, defaults to ao */
Anope::string BotModes;
/* THe actual modes */
ChannelStatus BotModeList;
/* How long to wait between connection attempts */
int RetryWait;
/* If services should hide unprivileged commands */
bool HidePrivilegedCommands;
/* If set, nicks cant be owned/everything is entirely account based */
bool NoNicknameOwnership;
/* A vector of our logfile options */
std::vector<LogInfo *> LogInfos;
/* Services can use email */
bool UseMail;
/* Path to the sendmail executable */
Anope::string SendMailPath;
/* Address to send from */
Anope::string SendFrom;
/* Only opers can have services send mail */
bool RestrictMail;
/* Delay between sending mail */
time_t MailDelay;
/* Don't quote the To: address */
bool DontQuoteAddresses;
/* Mail messages to send */
Anope::string MailRegistrationSubject, MailRegistrationMessage;
Anope::string MailResetSubject, MailResetMessage;
Anope::string MailSendpassSubject, MailSendpassMessage;
Anope::string MailEmailchangeSubject, MailEmailchangeMessage;
Anope::string MailMemoSubject, MailMemoMessage;
/* Nameserver to use for resolving hostnames */
Anope::string NameServer;
/* TIme before a DNS query is considered dead */
time_t DNSTimeout;
/* Prefix of guest nicks when a user gets forced off of a nick */
Anope::string NSGuestNickPrefix;
/* Allow users to set kill immed on */
bool NSAllowKillImmed;
/* Don't allow nicks to use /ns group to regroup nicks */
bool NSNoGroupChange;
/* Default flags for newly registered nicks */
Flags<NickCoreFlag, NI_END> NSDefFlags;
/* All languages Anope is aware about */
Anope::string Languages;
/* Default language used by services */
Anope::string NSDefLanguage;
/* Users must be connected this long before they can register
* Not to be confused with NickRegDelay */
time_t NSRegDelay;
/* Time before the registering mail will be resent */
time_t NSResendDelay;
/* How long before nicks expire */
time_t NSExpire;
/* How long before suspended nicks expire */
time_t NSSuspendExpire;
/* Time before unconfirmed nicks expire */
time_t NSUnconfirmedExpire;
/* Force email when registering */
bool NSForceEmail;
/* Force users to validate new email addresses */
bool NSConfirmEmailChanges;
/* Max number of nicks in a group */
unsigned NSMaxAliases;
/* Max number of allowed strings on the access list */
unsigned NSAccessMax;
/* Enforcer client user name */
Anope::string NSEnforcerUser;
/* Enforcer client hostname */
Anope::string NSEnforcerHost;
/* How long before recovered nicks are released */
time_t NSReleaseTimeout;
/* Max number of entries that can be returned from the list command */
unsigned NSListMax;
/* Only allow usermode +a etc on real services admins */
bool NSSecureAdmins;
/* Services opers must be /operd on the ircd aswell */
bool NSStrictPrivileges;
/* Use email to verify new users registering */
bool NSEmailReg;
/* Core NickServ modules */
Anope::string NickCoreModules;
/* Set the proper channel modes on users when they identify */
bool NSModeOnID;
/* Add the users hostnask their access list when they register */
bool NSAddAccessOnReg;
/* Maximum number of channels on AJoin */
unsigned AJoinMax;
/* Core ChanServ modules */
Anope::string ChanCoreModules;
/* Default flags for newly registered channels */
Flags<ChannelInfoFlag, CI_END> CSDefFlags;
/* Max number of channels a user can own */
unsigned CSMaxReg;
/* Time before a channel expires */
time_t CSExpire;
/* How long before suspended channels expire */
time_t CSSuspendExpire;
/* How long before forbidden channels expire */
time_t CSForbidExpire;
/* Default ban type to use for channels */
int CSDefBantype;
/* Max number of entries allowed on channel access lists */
unsigned CSAccessMax;
/* Max number of entries allowed on autokick lists */
unsigned CSAutokickMax;
/* Default autokick reason */
Anope::string CSAutokickReason;
/* Time ChanServ should stay in the channel to hold it to keep users from getting in */
time_t CSInhabit;
/* Max number of entries allowed to be returned from the LIST command */
unsigned CSListMax;
/* true to make ChanServ oper only */
bool CSOpersOnly;
/* Max number of memos allowed */
unsigned MSMaxMemos;
/* Time you must wait between sending memos */
time_t MSSendDelay;
/* Notify all of the aliases of the core the memo was sent to */
bool MSNotifyAll;
/* Who can use memos reciepts */
unsigned MSMemoReceipt;
/* Valid chars allowed in vhosts */
Anope::string VhostChars;
/* Allow undotted vhosts? */
bool VhostUndotted;
/* Chars disallowed at the beginning or end of vhosts */
Anope::string VhostDisallowBE;
/* Core BotServ modules */
Anope::string BotCoreModules;
/* Default BotServ flags */
Flags<BotServFlag> BSDefFlags;
/* How long before botserv forgets a user. This is used for flood kickers etc */
time_t BSKeepData;
/* Min number of users to have in the channel before the service bot joins */
unsigned BSMinUsers;
/* Max number of words allowed on the badwordslist */
unsigned BSBadWordsMax;
/* BotServ bot only joins if it would normally allowed to, abides by bans etc */
bool BSSmartJoin;
/* Dont tell users what badword they used */
bool BSGentleBWReason;
/* Case sensitive badwords matching */
bool BSCaseSensitive;
/* Char to use for the fantasy char, eg ! */
Anope::string BSFantasyCharacter;
/* Only show /stats o to opers */
bool HideStatsO;
/* Send out a global when services shut down or restart */
bool GlobalOnCycle;
/* Don't include the opers name in globals */
bool AnonymousGlobal;
/* Dont allow users to register nicks with oper names in them */
bool RestrictOperNicks;
/* Message to send when shutting down */
Anope::string GlobalOnCycleMessage;
/* Message to send when starting up */
Anope::string GlobalOnCycleUP;
/* Super admin is allowed */
bool SuperAdmin;
/* Default expiry time for akills */
time_t AutokillExpiry;
/* Default expiry time for chan kills */
time_t ChankillExpiry;
/* Default expiry time for SNLine Expire */
time_t SNLineExpiry;
/* Default expiry time for SQLines */
time_t SQLineExpiry;
/* Actually akill the user when the akill is added */
bool AkillOnAdd;
/* Kill users on SNLine */
bool KillonSNline;
/* Kill users on SQline */
bool KillonSQline;
/* Send a WALLOPS/GLOBOPS when a user opers */
bool WallOper;
/* Send a WALLOPS/GLOBOPS when a nonoper tries to use OperServ */
bool WallBadOS;
/* Send a WALLOPS/GLOBOPS when an akill expires */
bool WallAkillExpire;
/* Send a WALLOPS/GLOBOPS when SNLines expire */
bool WallSNLineExpire;
/* Send a WALLOPS/GLOBOPS when SQLines expire */
bool WallSQLineExpire;
/* Send a WALLOPS/GLOBOPS when exceptions expire */
bool WallExceptionExpire;
/* Add the akillers nick to the akill reason */
bool AddAkiller;
/* Add akill ids to akill reason */
bool AkillIds;
/* Limit sessions */
bool LimitSessions;
/* The default session limit */
unsigned DefSessionLimit;
/* How long before exceptions expire */
time_t ExceptionExpiry;
/* How many times to kill before adding an KILL */
unsigned MaxSessionKill;
/* Max limit that can be used for exceptions */
unsigned MaxSessionLimit;
/* How long session akills should last */
time_t SessionAutoKillExpiry;
/* Reason to use for session kills */
Anope::string SessionLimitExceeded;
/* Optional second reason */
Anope::string SessionLimitDetailsLoc;
/* OperServ requires you to be an operator */
bool OSOpersOnly;
/* List of modules to autoload */
std::list<Anope::string> ModulesAutoLoad;
/* User keys to use for generating random hashes for pass codes etc */
unsigned long UserKey1;
unsigned long UserKey2;
unsigned long UserKey3;
/* Numeric */
Anope::string Numeric;
/* Array of ulined servers */
std::list<Anope::string> Ulines;
/* List of available opertypes */
std::list<OperType *> MyOperTypes;
/* List of pairs of opers and their opertype from the config */
std::vector<Oper *> Opers;
};
/** This class can be used on its own to represent an exception, or derived to represent a module-specific exception.
* When a module whishes to abort, e.g. within a constructor, it should throw an exception using ModuleException or
* a class derived from ModuleException. If a module throws an exception during its constructor, the module will not
* be loaded. If this happens, the error message returned by ModuleException::GetReason will be displayed to the user
* attempting to load the module, or dumped to the console if the ircd is currently loading for the first time.
*/
class ConfigException : public CoreException
{
public:
/** Default constructor, just uses the error mesage 'Config threw an exception'.
*/
ConfigException() : CoreException("Config threw an exception", "Config Parser") { }
/** This constructor can be used to specify an error message before throwing.
*/
ConfigException(const Anope::string &message) : CoreException(message, "Config Parser") { }
/** This destructor solves world hunger, cancels the world debt, and causes the world to end.
* Actually no, it does nothing. Never mind.
* @throws Nothing!
*/
virtual ~ConfigException() throw() { }
};
#define CONF_NO_ERROR 0x000000
#define CONF_NOT_A_NUMBER 0x000010
#define CONF_INT_NEGATIVE 0x000080
#define CONF_VALUE_NOT_FOUND 0x000100
#define CONF_FILE_NOT_FOUND 0x000200
/** Allows reading of values from configuration files
* This class allows a module to read from either the main configuration file (inspircd.conf) or from
* a module-specified configuration file. It may either be instantiated with one parameter or none.
* Constructing the class using one parameter allows you to specify a path to your own configuration
* file, otherwise, inspircd.conf is read.
*/
class CoreExport ConfigReader
{
protected:
/** True if an error occured reading the config file
*/
bool readerror;
/** Error code
*/
long error;
public:
/** Default constructor.
* This constructor initialises the ConfigReader class to read the configuration file(s).
*/
ConfigReader();
/** Overloaded constructor.
* This constructor initialises the ConfigReader class to read a user-specified config file
*/
ConfigReader(const Anope::string &);
/** Default destructor.
* This method destroys the ConfigReader class.
*/
~ConfigReader();
/** Retrieves a value from the config file.
* This method retrieves a value from the config file. Where multiple copies of the tag
* exist in the config file, index indicates which of the values to retrieve.
*/
Anope::string ReadValue(const Anope::string &, const Anope::string &, int, bool = false);
/** Retrieves a value from the config file.
* This method retrieves a value from the config file. Where multiple copies of the tag
* exist in the config file, index indicates which of the values to retrieve. If the
* tag is not found the default value is returned instead.
*/
Anope::string ReadValue(const Anope::string &, const Anope::string &, const Anope::string &, int, bool = false);
/** Retrieves a boolean value from the config file.
* This method retrieves a boolean value from the config file. Where multiple copies of the tag
* exist in the config file, index indicates which of the values to retrieve. The values "1", "yes"
* and "true" in the config file count as true to ReadFlag, and any other value counts as false.
*/
bool ReadFlag(const Anope::string &, const Anope::string &, int);
/** Retrieves a boolean value from the config file.
* This method retrieves a boolean value from the config file. Where multiple copies of the tag
* exist in the config file, index indicates which of the values to retrieve. The values "1", "yes"
* and "true" in the config file count as true to ReadFlag, and any other value counts as false.
* If the tag is not found, the default value is used instead.
*/
bool ReadFlag(const Anope::string &, const Anope::string &, const Anope::string &, int);
/** Retrieves an integer value from the config file.
* This method retrieves an integer value from the config file. Where multiple copies of the tag
* exist in the config file, index indicates which of the values to retrieve. Any invalid integer
* values in the tag will cause the objects error value to be set, and any call to GetError() will
* return CONF_INVALID_NUMBER to be returned. need_positive is set if the number must be non-negative.
* If a negative number is placed into a tag which is specified positive, 0 will be returned and GetError()
* will return CONF_INT_NEGATIVE. Note that need_positive is not suitable to get an unsigned int - you
* should cast the result to achieve that effect.
*/
int ReadInteger(const Anope::string &, const Anope::string &, int, bool);
/** Retrieves an integer value from the config file.
* This method retrieves an integer value from the config file. Where multiple copies of the tag
* exist in the config file, index indicates which of the values to retrieve. Any invalid integer
* values in the tag will cause the objects error value to be set, and any call to GetError() will
* return CONF_INVALID_NUMBER to be returned. needs_unsigned is set if the number must be unsigned.
* If a signed number is placed into a tag which is specified unsigned, 0 will be returned and GetError()
* will return CONF_NOT_UNSIGNED. If the tag is not found, the default value is used instead.
*/
int ReadInteger(const Anope::string &, const Anope::string &, const Anope::string &, int, bool);
/** Returns the last error to occur.
* Valid errors can be found by looking in modules.h. Any nonzero value indicates an error condition.
* A call to GetError() resets the error flag back to 0.
*/
long GetError();
/** Counts the number of times a given tag appears in the config file.
* This method counts the number of times a tag appears in a config file, for use where
* there are several tags of the same kind, e.g. with opers and connect types. It can be
* used with the index value of ConfigReader::ReadValue to loop through all copies of a
* multiple instance tag.
*/
int Enumerate(const Anope::string &) const;
/** Returns true if a config file is valid.
* This method is partially implemented and will only return false if the config
* file does not exist or could not be opened.
*/
bool Verify();
/** Returns the number of items within a tag.
* For example if the tag was &lt;test tag="blah" data="foo"&gt; then this
* function would return 2. Spaces and newlines both qualify as valid seperators
* between values.
*/
int EnumerateValues(const Anope::string &, int);
};
#endif // CONFIG_H
-518
View File
@@ -1,518 +0,0 @@
#ifndef _CONFIGREADER_H_
#define _CONFIGREADER_H_
#include <string>
#include <fstream>
#include <sstream>
#include <vector>
#include <map>
#include <deque>
/** A configuration key and value pair
*/
typedef std::pair<std::string, std::string> KeyVal;
/** A list of related configuration keys and values
*/
typedef std::vector<KeyVal> KeyValList;
/** An entire config file, built up of KeyValLists
*/
typedef std::multimap<std::string, KeyValList> ConfigDataHash;
// Required forward definitions
class ServerConfig;
/** Types of data in the core config
*/
enum ConfigDataType {
DT_NOTHING, // No data
DT_INTEGER, // Integer
DT_UINTEGER, // Unsigned Integer
DT_LUINTEGER, // Long Unsigned Integer
DT_CHARPTR, // Char pointer
DT_STRING, // std::string
DT_BOOLEAN, // Boolean
DT_HOSTNAME, // Hostname syntax
DT_NOSPACES, // No spaces
DT_IPADDRESS, // IP address (v4, v6)
DT_TIME, // Time value
DT_NORELOAD = 32, // Item can't be reloaded after startup
DT_ALLOW_WILD = 64, // Allow wildcards/CIDR in DT_IPADDRESS
DT_ALLOW_NEWLINE = 128 // New line characters allowed in DT_CHARPTR
};
/** Holds a config value, either string, integer or boolean.
* Callback functions receive one or more of these, either on
* their own as a reference, or in a reference to a deque of them.
* The callback function can then alter the values of the ValueItem
* classes to validate the settings.
*/
class ValueItem
{
/** Actual data */
std::string v;
public:
/** Initialize with an int */
ValueItem(int);
/** Initialize with a bool */
ValueItem(bool);
/** Initialize with a char pointer */
ValueItem(const char *);
/** Initialize with an std::string */
ValueItem(const std::string &);
/** Change value to a char pointer */
//void Set(char *);
/** Change value to a const char pointer */
void Set(const char *);
/** Change value to an std::string */
void Set(const std::string &);
/** Change value to an int */
void Set(int);
/** Get value as an int */
int GetInteger();
/** Get value as a string */
char *GetString();
/** Get value as a bool */
bool GetBool();
};
/** The base class of the container 'ValueContainer'
* used internally by the core to hold core values.
*/
class ValueContainerBase
{
public:
/** Constructor */
ValueContainerBase() { }
/** Destructor */
virtual ~ValueContainerBase() { }
};
/** ValueContainer is used to contain pointers to different
* core values such as the server name, maximum number of
* clients etc.
* It is specialized to hold a data type, then pointed at
* a value in the ServerConfig class. When the value has been
* read and validated, the Set method is called to write the
* value safely in a type-safe manner.
*/
template<typename T> class ValueContainer : public ValueContainerBase
{
/** Contained item */
T val;
public:
/** Initialize with nothing */
ValueContainer() : ValueContainerBase(), val(NULL) { }
/** Initialize with a value of type T */
ValueContainer(T Val) : ValueContainerBase(), val(Val) { }
/** Initialize with a copy */
ValueContainer(const ValueContainer &Val) : ValueContainerBase(), val(Val.val) { }
ValueContainer &operator=(const ValueContainer &Val)
{
val = Val.val;
return *this;
}
/** Change value to type T of size s */
void Set(const T newval, size_t s)
{
memcpy(val, newval, s);
}
};
/** This a specific version of ValueContainer to handle character arrays specially
*/
template<> class ValueContainer<char **> : public ValueContainerBase
{
/** Contained item */
char **val;
public:
/** Initialize with nothing */
ValueContainer() : ValueContainerBase(), val(NULL) { }
/** Initialize with a value of type T */
ValueContainer(char **Val) : ValueContainerBase(), val(Val) { }
/** Initialize with a copy */
ValueContainer(const ValueContainer &Val) : ValueContainerBase(), val(Val.val) { }
ValueContainer &operator=(const ValueContainer &Val)
{
val = Val.val;
return *this;
}
/** Change value to type T of size s */
void Set(const char *newval, size_t s)
{
if (*val) delete [] *val;
if (!*newval) {
*val = NULL;
return;
}
*val = new char[s];
strlcpy(*val, newval, s);
}
};
/** This a specific version of ValueContainer to handle std::string specially
*/
template<> class ValueContainer<std::string *> : public ValueContainerBase
{
/** Contained item */
std::string *val;
public:
/** Initialize with nothing */
ValueContainer() : ValueContainerBase(), val(NULL) { }
/** Initialize with an std::string */
ValueContainer(std::string *Val) : ValueContainerBase(), val(Val) { }
/** Initialize with a copy */
ValueContainer(const ValueContainer &Val) : ValueContainerBase(), val(Val.val) { }
ValueContainer &operator=(const ValueContainer &Val)
{
val = Val.val;
return *this;
}
/** Change value to given std::string */
void Set(const std::string &newval)
{
*val = newval;
}
/** Change value to given char pointer */
void Set(const char *newval)
{
*val = newval;
}
};
/** A specialization of ValueContainer to hold a pointer to a bool
*/
typedef ValueContainer<bool *> ValueContainerBool;
/** A specialization of ValueContainer to hold a pointer to
* an unsigned int
*/
typedef ValueContainer<unsigned *> ValueContainerUInt;
/** A specialization of ValueContainer to hold a pointer to
* a long unsigned int
*/
typedef ValueContainer<long unsigned *> ValueContainerLUInt;
/** A specialization of ValueContainer to hold a pointer to
* a char array.
*/
typedef ValueContainer<char **> ValueContainerChar;
/** A specialization of ValueContainer to hold a pointer to
* an int
*/
typedef ValueContainer<int *> ValueContainerInt;
/** A specialization of ValueContainer to hold a pointer to
* a time_t
*/
typedef ValueContainer<time_t *> ValueContainerTime;
/** A specialization of ValueContainer to hold a pointer to
* an std::string
*/
typedef ValueContainer<std::string *> ValueContainerString;
/** A set of ValueItems used by multi-value validator functions
*/
typedef std::deque<ValueItem> ValueList;
/** A callback for validating a single value
*/
typedef bool (*Validator)(ServerConfig *, const char *, const char *, ValueItem &);
/** A callback for validating multiple value entries
*/
typedef bool (*MultiValidator)(ServerConfig *, const char *, const char **, ValueList &, int *, bool);
/** A callback indicating the end of a group of entries
*/
typedef bool (*MultiNotify)(ServerConfig *, const char *, bool);
/** Holds a core configuration item and its callbacks
*/
struct InitialConfig
{
/** Tag name */
const char *tag;
/** Value name */
const char *value;
/** Default, if not defined */
const char *default_value;
/** Value containers */
ValueContainerBase *val;
/** Data types */
int datatype;
/** Validation function */
Validator validation_function;
};
/** Holds a core configuration item and its callbacks
* where there may be more than one item
*/
struct MultiConfig
{
/** Tag name */
const char *tag;
/** One or more items within tag */
const char *items[17];
/** One or more defaults for items within tags */
const char *items_default[17];
/** One or more data types */
int datatype[17];
/** Initialization function */
MultiNotify init_function;
/** Validation function */
MultiValidator validation_function;
/** Completion function */
MultiNotify finish_function;
};
/** This class holds the bulk of the runtime configuration for the ircd.
* It allows for reading new config values, accessing configuration files,
* and storage of the configuration data needed to run the ircd, such as
* the servername, connect classes, /ADMIN data, MOTDs and filenames etc.
*/
class ServerConfig
{
private:
/** This variable holds the names of all
* files included from the main one. This
* is used to make sure that no files are
* recursively included.
*/
std::vector<std::string> include_stack;
/** Check that there is only one of each configuration item
*/
bool CheckOnce(const char *);
public:
std::ostringstream errstr;
ConfigDataHash newconfig;
/** This holds all the information in the config file,
* it's indexed by tag name to a vector of key/values.
*/
ConfigDataHash config_data;
/** Construct a new ServerConfig
*/
ServerConfig();
/** Clears the include stack in preperation for a Read() call.
*/
void ClearStack();
/** Read the entire configuration into memory
* and initialize this class. All other methods
* should be used only by the core.
*/
int Read(bool);
/** Report a configuration error given in errormessage.
* @param bail If this is set to true, the error is sent to the console, and the program exits
* @param connection If this is set to a non-null value, and bail is false, the errors are spooled to
* this connection as SNOTICEs.
* If the parameter is NULL, the messages are spooled to all connections via WriteOpers as SNOTICEs.
*/
void ReportConfigError(const std::string &, bool);
/** Load 'filename' into 'target', with the new config parser everything is parsed into
* tag/key/value at load-time rather than at read-value time.
*/
bool LoadConf(ConfigDataHash &, const char *, std::ostringstream &);
/** Load 'filename' into 'target', with the new config parser everything is parsed into
* tag/key/value at load-time rather than at read-value time.
*/
bool LoadConf(ConfigDataHash &, const std::string &, std::ostringstream &);
// Both these return true if the value existed or false otherwise
/** Writes 'length' chars into 'result' as a string
*/
bool ConfValue(ConfigDataHash &, const char *, const char *, int, char *, int, bool = false);
/** Writes 'length' chars into 'result' as a string
*/
bool ConfValue(ConfigDataHash &, const char *, const char *, const char *, int, char *, int, bool = false);
/** Writes 'length' chars into 'result' as a string
*/
bool ConfValue(ConfigDataHash &, const std::string &, const std::string &, int, std::string &, bool = false);
/** Writes 'length' chars into 'result' as a string
*/
bool ConfValue(ConfigDataHash &, const std::string &, const std::string &, const std::string &, int, std::string &, bool = false);
/** Tries to convert the value to an integer and write it to 'result'
*/
bool ConfValueInteger(ConfigDataHash &, const char *, const char *, int, int &);
/** Tries to convert the value to an integer and write it to 'result'
*/
bool ConfValueInteger(ConfigDataHash &, const char *, const char *, const char *, int, int &);
/** Tries to convert the value to an integer and write it to 'result'
*/
bool ConfValueInteger(ConfigDataHash &, const std::string &, const std::string &, int, int &);
/** Tries to convert the value to an integer and write it to 'result'
*/
bool ConfValueInteger(ConfigDataHash &, const std::string &, const std::string &, const std::string &, int, int &);
/** Returns true if the value exists and has a true value, false otherwise
*/
bool ConfValueBool(ConfigDataHash &, const char *, const char *, int);
/** Returns true if the value exists and has a true value, false otherwise
*/
bool ConfValueBool(ConfigDataHash &, const char *, const char *, const char *, int);
/** Returns true if the value exists and has a true value, false otherwise
*/
bool ConfValueBool(ConfigDataHash &, const std::string &, const std::string &, int);
/** Returns true if the value exists and has a true value, false otherwise
*/
bool ConfValueBool(ConfigDataHash &, const std::string &, const std::string &, const std::string &, int);
/** Returns the number of occurences of tag in the config file
*/
int ConfValueEnum(ConfigDataHash &, const char *);
/** Returns the number of occurences of tag in the config file
*/
int ConfValueEnum(ConfigDataHash &, const std::string &);
/** Returns the numbers of vars inside the index'th 'tag in the config file
*/
int ConfVarEnum(ConfigDataHash &, const char *, int);
/** Returns the numbers of vars inside the index'th 'tag in the config file
*/
int ConfVarEnum(ConfigDataHash &, const std::string &, int);
void ValidateHostname(const char *, const std::string &, const std::string &);
void ValidateIP(const char *p, const std::string &, const std::string &, bool);
void ValidateNoSpaces(const char *, const std::string &, const std::string &);
};
/** This class can be used on its own to represent an exception, or derived to represent a module-specific exception.
* When a module whishes to abort, e.g. within a constructor, it should throw an exception using ModuleException or
* a class derived from ModuleException. If a module throws an exception during its constructor, the module will not
* be loaded. If this happens, the error message returned by ModuleException::GetReason will be displayed to the user
* attempting to load the module, or dumped to the console if the ircd is currently loading for the first time.
*/
class ConfigException : public CoreException
{
public:
/** Default constructor, just uses the error mesage 'Config threw an exception'.
*/
ConfigException() : CoreException("Config threw an exception", "Config Parser") {}
/** This constructor can be used to specify an error message before throwing.
*/
ConfigException(const std::string &message) : CoreException(message, "Config Parser") {}
/** This destructor solves world hunger, cancels the world debt, and causes the world to end.
* Actually no, it does nothing. Never mind.
* @throws Nothing!
*/
virtual ~ConfigException() throw() { };
};
#define CONF_NO_ERROR 0x000000
#define CONF_NOT_A_NUMBER 0x000010
#define CONF_INT_NEGATIVE 0x000080
#define CONF_VALUE_NOT_FOUND 0x000100
#define CONF_FILE_NOT_FOUND 0x000200
/** Allows reading of values from configuration files
* This class allows a module to read from either the main configuration file (inspircd.conf) or from
* a module-specified configuration file. It may either be instantiated with one parameter or none.
* Constructing the class using one parameter allows you to specify a path to your own configuration
* file, otherwise, inspircd.conf is read.
*/
class CoreExport ConfigReader
{
protected:
/** The contents of the configuration file
* This protected member should never be accessed by a module (and cannot be accessed unless the
* core is changed). It will contain a pointer to the configuration file data with unneeded data
* (such as comments) stripped from it.
*/
ConfigDataHash *data;
/** Used to store errors
*/
std::ostringstream *errorlog;
/** If we're using our own config data hash or not
*/
bool privatehash;
/** True if an error occured reading the config file
*/
bool readerror;
/** Error code
*/
long error;
public:
/** Default constructor.
* This constructor initialises the ConfigReader class to read services.conf.
*/
ConfigReader();
/** Overloaded constructor.
* This constructor initialises the ConfigReader class to read a user-specified config file
*/
ConfigReader(const std::string &);
/** Default destructor.
* This method destroys the ConfigReader class.
*/
~ConfigReader();
/** Retrieves a value from the config file.
* This method retrieves a value from the config file. Where multiple copies of the tag
* exist in the config file, index indicates which of the values to retrieve.
*/
std::string ReadValue(const std::string &, const std::string &, int, bool = false);
/** Retrieves a value from the config file.
* This method retrieves a value from the config file. Where multiple copies of the tag
* exist in the config file, index indicates which of the values to retrieve. If the
* tag is not found the default value is returned instead.
*/
std::string ReadValue(const std::string &, const std::string &, const std::string &, int, bool = false);
/** Retrieves a boolean value from the config file.
* This method retrieves a boolean value from the config file. Where multiple copies of the tag
* exist in the config file, index indicates which of the values to retrieve. The values "1", "yes"
* and "true" in the config file count as true to ReadFlag, and any other value counts as false.
*/
bool ReadFlag(const std::string &, const std::string &, int);
/** Retrieves a boolean value from the config file.
* This method retrieves a boolean value from the config file. Where multiple copies of the tag
* exist in the config file, index indicates which of the values to retrieve. The values "1", "yes"
* and "true" in the config file count as true to ReadFlag, and any other value counts as false.
* If the tag is not found, the default value is used instead.
*/
bool ReadFlag(const std::string &, const std::string &, const std::string &, int);
/** Retrieves an integer value from the config file.
* This method retrieves an integer value from the config file. Where multiple copies of the tag
* exist in the config file, index indicates which of the values to retrieve. Any invalid integer
* values in the tag will cause the objects error value to be set, and any call to GetError() will
* return CONF_INVALID_NUMBER to be returned. need_positive is set if the number must be non-negative.
* If a negative number is placed into a tag which is specified positive, 0 will be returned and GetError()
* will return CONF_INT_NEGATIVE. Note that need_positive is not suitable to get an unsigned int - you
* should cast the result to achieve that effect.
*/
int ReadInteger(const std::string &, const std::string &, int, bool);
/** Retrieves an integer value from the config file.
* This method retrieves an integer value from the config file. Where multiple copies of the tag
* exist in the config file, index indicates which of the values to retrieve. Any invalid integer
* values in the tag will cause the objects error value to be set, and any call to GetError() will
* return CONF_INVALID_NUMBER to be returned. needs_unsigned is set if the number must be unsigned.
* If a signed number is placed into a tag which is specified unsigned, 0 will be returned and GetError()
* will return CONF_NOT_UNSIGNED. If the tag is not found, the default value is used instead.
*/
int ReadInteger(const std::string &, const std::string &, const std::string &, int, bool);
/** Returns the last error to occur.
* Valid errors can be found by looking in modules.h. Any nonzero value indicates an error condition.
* A call to GetError() resets the error flag back to 0.
*/
long GetError();
/** Counts the number of times a given tag appears in the config file.
* This method counts the number of times a tag appears in a config file, for use where
* there are several tags of the same kind, e.g. with opers and connect types. It can be
* used with the index value of ConfigReader::ReadValue to loop through all copies of a
* multiple instance tag.
*/
int Enumerate(const std::string &);
/** Returns true if a config file is valid.
* This method is partially implemented and will only return false if the config
* file does not exist or could not be opened.
*/
bool Verify();
/** Dumps the list of errors in a config file to an output location. If bail is true,
* then the program will abort. If bail is false and user points to a valid user
* record, the error report will be spooled to the given user by means of NOTICE.
* if bool is false AND user is false, the error report will be spooled to all opers
* by means of a NOTICE to all opers.
*/
void DumpErrors(bool);
/** Returns the number of items within a tag.
* For example if the tag was &lt;test tag="blah" data="foo"&gt; then this
* function would return 2. Spaces and newlines both qualify as valid seperators
* between values.
*/
int EnumerateValues(const std::string &, int);
};
#endif
-71
View File
@@ -1,71 +0,0 @@
/* Database file descriptor structure and file handling routine prototypes.
*
* (C) 2003-2009 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for furhter details.
*
* Based on the original code of Epona by Lara.
* Based on the original code of Services by Andy Church.
*
* $Id$
*
*/
#ifndef DATAFILES_H
#define DATAFILES_H
#ifndef _WIN32
#include <sys/param.h>
#endif
/*************************************************************************/
typedef struct dbFILE_ dbFILE;
struct dbFILE_ {
int mode; /* 'r' for reading, 'w' for writing */
FILE *fp; /* The normal file descriptor */
FILE *backupfp; /* Open file pointer to a backup copy of
* the database file (if non-NULL) */
char filename[MAXPATHLEN]; /* Name of the database file */
char backupname[MAXPATHLEN]; /* Name of the backup file */
};
/*************************************************************************/
/* Prototypes and macros: */
E void check_file_version(dbFILE *f);
E int get_file_version(dbFILE *f);
E int write_file_version(dbFILE *f, uint32 version);
E dbFILE *open_db(const char *service, const char *filename, const char *mode, uint32 version);
E void restore_db(dbFILE *f); /* Restore to state before open_db() */
E void close_db(dbFILE *f);
E void backup_databases();
#define read_db(f,buf,len) (fread((buf),1,(len),(f)->fp))
#define write_db(f,buf,len) (fwrite((buf),1,(len),(f)->fp))
#define getc_db(f) (fgetc((f)->fp))
E int read_int16(uint16 *ret, dbFILE *f);
E int write_int16(uint16 val, dbFILE *f);
E int read_int32(uint32 *ret, dbFILE *f);
E int write_int32(uint32 val, dbFILE *f);
E int read_ptr(void **ret, dbFILE *f);
E int write_ptr(const void *ptr, dbFILE *f);
E int read_string(char **ret, dbFILE *f);
E int write_string(const char *s, dbFILE *f);
#define read_int8(ret,f) ((*(ret)=fgetc((f)->fp))==EOF ? -1 : 0)
#define write_int8(val,f) (fputc((val),(f)->fp)==EOF ? -1 : 0)
#define read_buffer(buf,f) (read_db((f),(buf),sizeof(buf)) == sizeof(buf))
#define write_buffer(buf,f) (write_db((f),(buf),sizeof(buf)) == sizeof(buf))
#define read_buflen(buf,len,f) (read_db((f),(buf),(len)) == (len))
#define write_buflen(buf,len,f) (write_db((f),(buf),(len)) == (len))
#define read_variable(var,f) (read_db((f),&(var),sizeof(var)) == sizeof(var))
#define write_variable(var,f) (write_db((f),&(var),sizeof(var)) == sizeof(var))
/*************************************************************************/
#endif /* DATAFILES_H */
-40
View File
@@ -1,40 +0,0 @@
/* Set default values for any constants that should be in include files but
*
* (C) 2003-2009 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for furhter details.
*
* Based on the original code of Epona by Lara.
* Based on the original code of Services by Andy Church.
*
*
* $Id$
*
*/
/*************************************************************************/
#ifndef NAME_MAX
# define NAME_MAX 255
#endif
#ifndef BUFSIZ
# define BUFSIZ 256
#else
# if BUFSIZ < 256
# define BUFSIZ 256
# endif
#endif
/* Length of an array: */
#define lenof(a) (sizeof(a) / sizeof(*(a)))
/* Telling compilers about printf()-like functions: */
#ifdef __GNUC__
# define FORMAT(type,fmt,start) __attribute__((format(type,fmt,start)))
#else
# define FORMAT(type,fmt,start)
#endif
/*************************************************************************/
+188
View File
@@ -0,0 +1,188 @@
#ifndef DNS_H
#define DNS_H
/** Valid query types
*/
enum QueryType
{
/* Nothing */
DNS_QUERY_NONE,
/* A simple A lookup */
DNS_QUERY_A = 1,
/* A CNAME lookup */
DNS_QUERY_CNAME = 5,
/* Reverse DNS lookup */
DNS_QUERY_PTR = 12,
/* IPv6 AAAA lookup */
DNS_QUERY_AAAA = 28
};
/** Flags that can be AND'd into DNSPacket::flags to receive certain values
*/
enum
{
DNS_QUERYFLAGS_QR = 0x8000,
DNS_QUERYFLAGS_OPCODE = 0x7800,
DNS_QUERYFLAGS_AA = 0x400,
DBS_QUERYFLAGS_TC = 0x200,
DNS_QUERYFLAGS_RD = 0x100,
DNS_QUERYFLAGS_RA = 0x80,
DNS_QUERYFLAGS_Z = 0x70,
DNS_QUERYFLAGS_RCODE = 0xF
};
enum DNSError
{
DNS_ERROR_NONE,
DNS_ERROR_UNKNOWN,
DNS_ERROR_UNLOADED,
DNS_ERROR_TIMEOUT,
DNS_ERROR_NOT_AN_ANSWER,
DNS_ERROR_NONSTANDARD_QUERY,
DNS_ERROR_FORMAT_ERROR,
DNS_ERROR_SERVER_FAILURE,
DNS_ERROR_DOMAIN_NOT_FOUND,
DNS_ERROR_NOT_IMPLEMENTED,
DNS_ERROR_REFUSED,
DNS_ERROR_NO_RECORDS,
DNS_ERROR_INVALIDTYPE
};
class Module;
struct DNSQuery;
class DNSPacket;
struct CoreExport Question
{
Anope::string name;
QueryType type;
unsigned short qclass;
Question();
Question(const Anope::string &, QueryType, unsigned short = 1);
};
struct CoreExport ResourceRecord : public Question
{
unsigned int ttl;
Anope::string rdata;
time_t created;
ResourceRecord(const Anope::string &, QueryType, unsigned short = 1);
ResourceRecord(const Question &);
};
struct CoreExport DNSQuery
{
std::vector<Question> questions;
std::vector<ResourceRecord> answers, authorities, additional;
DNSError error;
DNSQuery();
DNSQuery(const Question &q);
DNSQuery(const DNSPacket &p);
};
/** The request
*/
class CoreExport DNSRequest : public Timer, public Question
{
/* Use result cache if available */
bool use_cache;
public:
/* Request id */
unsigned short id;
/* Creator of this request */
Module *creator;
DNSRequest(const Anope::string &addr, QueryType qt, bool cache = false, Module *c = NULL);
virtual ~DNSRequest();
void Process();
virtual void OnLookupComplete(const DNSQuery *r) = 0;
virtual void OnError(const DNSQuery *r);
void Tick(time_t);
};
/** A full packet sent or recieved to/from the nameserver, may contain multiple queries
*/
class DNSPacket : public DNSQuery
{
static const int DNS_POINTER = 0xC0;
static const int DNS_LABEL = 0x3F;
void PackName(unsigned char *output, unsigned short output_size, unsigned short &pos, const Anope::string &name);
Anope::string UnpackName(const unsigned char *input, unsigned short input_size, unsigned short &pos);
Question UnpackQuestion(const unsigned char *input, unsigned short input_size, unsigned short &pos);
ResourceRecord UnpackResourceRecord(const unsigned char *input, unsigned short input_size, unsigned short &poss);
public:
static const int HEADER_LENGTH = 12;
/* Our 16-bit id for this header */
unsigned short id;
/* Flags on the query */
unsigned short flags;
DNSPacket();
void Fill(const unsigned char *input, const unsigned short len);
unsigned short Pack(unsigned char *output, unsigned short output_size);
};
/** DNS manager, manages all requests
*/
class CoreExport DNSManager : public Timer, public Socket
{
typedef std::multimap<Anope::string, ResourceRecord, ci::less> cache_map;
cache_map cache;
sockaddrs addrs;
public:
std::deque<DNSPacket *> packets;
std::map<short, DNSRequest *> requests;
static const int DNSPort = 53;
DNSManager(const Anope::string &nameserver, int port);
~DNSManager();
bool ProcessRead();
bool ProcessWrite();
/** Add a record to the dns cache
* @param r The record
*/
void AddCache(DNSQuery &r);
/** Check the DNS cache to see if request can be handled by a cached result
* @return true if a cached result was found.
*/
bool CheckCache(DNSRequest *request);
/** Tick this timer, used to clear the DNS cache.
*/
void Tick(time_t now);
/** Cleanup all pending DNS queries for a module
* @param mod The module
*/
void Cleanup(Module *mod);
/** Does a BLOCKING DNS query and returns the first IP.
* Only use this if you know what you are doing. Unless you specifically
* need a blocking query use the DNSRequest system
*/
static DNSQuery BlockingQuery(const Anope::string &mask, QueryType qt);
};
extern DNSManager *DNSEngine;
#endif // DNS_H
-22
View File
@@ -1,22 +0,0 @@
/* Include file for high-level encryption routines.
*
* (C) 2003-2009 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for furhter details.
*
* Based on the original code of Epona by Lara.
* Based on the original code of Services by Andy Church.
*
* $Id$
*
*/
typedef struct encryption_ {
int (*encrypt)(const char *src, int len, char *dest, int size);
int (*encrypt_in_place)(char *buf, int size);
int (*encrypt_check_len)(int passlen, int bufsize);
int (*decrypt)(const char *src, char *dest, int size);
int (*check_password)(const char *plaintext, const char *password);
} Encryption;
-64
View File
@@ -1,64 +0,0 @@
/* Prototypes and external variable declarations.
*
* (C) 2003-2009 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for furhter details.
*
* Based on the original code of Epona by Lara.
* Based on the original code of Services by Andy Church.
*
* $Id$
*
*/
#define EVENT_START "start"
#define EVENT_STOP "stop"
#define EVENT_DB_SAVING "db_saving"
#define EVENT_DB_BACKUP "db_backup"
#define EVENT_NEWNICK "newnick"
#define EVENT_BOT_UNASSIGN "bot_unassign"
#define EVENT_BOT_JOIN "bot_join"
#define EVENT_BOT_CREATE "bot_create"
#define EVENT_BOT_CHANGE "bot_change"
#define EVENT_BOT_FANTASY "bot_command"
#define EVENT_BOT_FANTASY_NO_ACCESS "bot_command_no_access"
#define EVENT_BOT_DEL "bot_del"
#define EVENT_BOT_ASSIGN "bot_assign"
#define EVENT_BOT_KICK "bot_kick"
#define EVENT_BOT_BAN "bot_ban"
#define EVENT_TOPIC_UPDATED "chan_topic_updated"
#define EVENT_CHAN_EXPIRE "chan_expire"
#define EVENT_CHAN_REGISTERED "chan_registered"
#define EVENT_CHAN_DROP "chan_dropped"
#define EVENT_CHAN_FORBIDDEN "chan_forbidden"
#define EVENT_CHAN_SUSPENDED "chan_suspended"
#define EVENT_CHAN_UNSUSPEND "chan_unsuspend"
#define EVENT_CONNECT "connect"
#define EVENT_DB_EXPIRE "db_expire"
#define EVENT_RESTART "restart"
#define EVENT_RELOAD "reload"
#define EVENT_SHUTDOWN "shutdown"
#define EVENT_SIGNAL "signal"
#define EVENT_NICK_REGISTERED "nick_registered"
#define EVENT_NICK_DROPPED "nick_dropped"
#define EVENT_NICK_FORBIDDEN "nick_forbidden"
#define EVENT_NICK_EXPIRE "nick_expire"
#define EVENT_CHANGE_NICK "change_nick"
#define EVENT_USER_LOGOFF "user_logoff"
#define EVENT_GROUP "nick_group"
#define EVENT_NICK_IDENTIFY "nick_id"
#define EVENT_SERVER_SQUIT "server_squit"
#define EVENT_SERVER_CONNECT "server_connect"
#define EVENT_DEFCON_LEVEL "defcon_level"
#define EVENT_NICK_SUSPENDED "nick_suspended"
#define EVENT_NICK_UNSUSPEND "nick_unsuspend"
#define EVENT_JOIN_CHANNEL "join_channel"
#define EVENT_PART_CHANNEL "part_channel"
#define EVENT_ACCESS_ADD "access_add"
#define EVENT_ACCESS_CHANGE "access_change"
#define EVENT_ACCESS_DEL "access_del"
#define EVENT_ACCESS_CLEAR "access_clear"
#define EVENT_NICK_LOGOUT "nick_logout"
#define EVENT_CHAN_KICK "chan_kick"
+127
View File
@@ -0,0 +1,127 @@
/*
* Copyright (C) 2008-2012 Anope Team <team@anope.org>
*
* Please read COPYING and README for further details.
*/
#ifndef EXTENSIBLE_H
#define EXTENSIBLE_H
#include "anope.h"
#include "hashcomp.h"
class CoreExport ExtensibleItem
{
public:
ExtensibleItem();
virtual ~ExtensibleItem();
virtual void OnDelete();
};
class ExtensibleString : public Anope::string, public ExtensibleItem
{
public:
ExtensibleString(const Anope::string &s) : Anope::string(s), ExtensibleItem() { }
};
class CoreExport Extensible : public Base
{
private:
typedef Anope::map<ExtensibleItem *> extensible_map;
extensible_map extension_items;
public:
/** Default constructor, does nothing
*/
Extensible() { }
/** Default destructor, deletes all of the extensible items in this object
* then clears the map
*/
virtual ~Extensible()
{
for (extensible_map::iterator it = extension_items.begin(), it_end = extension_items.end(); it != it_end; ++it)
if (it->second)
it->second->OnDelete();
extension_items.clear();
}
/** Extend an Extensible class.
*
* @param key The key parameter is an arbitary string which identifies the extension data
* @param p This parameter is a pointer to an ExtensibleItem or ExtensibleItemBase derived class
*
* You must provide a key to store the data as via the parameter 'key'.
* The data will be inserted into the map. If the data already exists, you may not insert it
* twice, Extensible::Extend will return false in this case.
*
* @return Returns true on success, false if otherwise
*/
void Extend(const Anope::string &key, ExtensibleItem *p)
{
this->Shrink(key);
this->extension_items[key] = p;
}
/** Shrink an Extensible class.
*
* @param key The key parameter is an arbitary string which identifies the extension data
*
* You must provide a key name. The given key name will be removed from the classes data. If
* you provide a nonexistent key (case is important) then the function will return false.
* @return Returns true on success.
*/
bool Shrink(const Anope::string &key)
{
extensible_map::iterator it = this->extension_items.find(key);
if (it != this->extension_items.end())
{
if (it->second != NULL)
it->second->OnDelete();
/* map::size_type map::erase( const key_type& key );
* returns the number of elements removed, std::map
* is single-associative so this should only be 0 or 1
*/
return this->extension_items.erase(key) > 0;
}
return false;
}
/** Get an extension item.
*
* @param key The key parameter is an arbitary string which identifies the extension data
* @return The item found
*/
template<typename T> T GetExt(const Anope::string &key)
{
extensible_map::iterator it = this->extension_items.find(key);
if (it != this->extension_items.end())
return debug_cast<T>(it->second);
return NULL;
}
/** Check if an extension item exists.
*
* @param key The key parameter is an arbitary string which identifies the extension data
* @return True if the item was found.
*/
bool HasExt(const Anope::string &key)
{
return this->extension_items.count(key) > 0;
}
/** Get a list of all extension items names.
* @param list A deque of strings to receive the list
* @return This function writes a list of all extension items stored
* in this object by name into the given deque and returns void.
*/
void GetExtList(std::deque<Anope::string> &list)
{
for (extensible_map::iterator it = extension_items.begin(), it_end = extension_items.end(); it != it_end; ++it)
list.push_back(it->first);
}
};
#endif // EXTENSIBLE_H
+146 -924
View File
File diff suppressed because it is too large Load Diff
+355 -57
View File
@@ -1,82 +1,380 @@
/*
* Copyright (C) 2002-2009 InspIRCd Development Team
* Copyright (C) 2009 Anope Team <team@anope.org>
* Copyright (C) 2002-2011 InspIRCd Development Team
* Copyright (C) 2009-2012 Anope Team <team@anope.org>
*
* Please read COPYING and README for further details.
*
* These classes have been copied from InspIRCd and modified
* for use in Anope.
*
* $Id$
*
*/
#ifndef _HASHCOMP_H_
#define _HASHCOMP_H_
#ifndef HASHCOMP_H
#define HASHCOMP_H
#ifdef _WIN32
# ifdef MODULE_COMPILE
# define CoreExport __declspec(dllimport)
# define DllExport __declspec(dllexport)
# else
# define CoreExport __declspec(dllexport)
# define DllExport __declspec(dllimport)
# endif
#else
# define CoreExport
# define DllExport
#endif
#include <string>
/** sepstream allows for splitting token seperated lists.
* Each successive call to sepstream::GetToken() returns
* the next token, until none remain, at which point the method returns
* an empty string.
*/
class sepstream
namespace Anope
{
private:
/** Original string.
*/
std::string tokens;
/** Last position of a seperator token
*/
std::string::iterator last_starting_position;
/** Current string position
*/
std::string::iterator n;
/** Seperator value
*/
char sep;
public:
/** Create a sepstream and fill it with the provided data
*/
sepstream(const std::string &source, char seperator);
virtual ~sepstream() { }
class string;
}
/** Fetch the next token from the stream
* @param token The next token from the stream is placed here
* @return True if tokens still remain, false if there are none left
*/
virtual bool GetToken(std::string &token);
/*******************************************************
* This file contains classes and templates that deal
* with the comparison and hashing of 'irc strings'.
* An 'irc string' is a string which compares in a
* case insensitive manner, and as per RFC 1459 will
* treat [ identical to {, ] identical to }, and \
* as identical to |.
*
* Our hashing functions are designed to accept
* std::string and compare/hash them as type irc::string
* by converting them internally. This makes them
* backwards compatible with other code which is not
* aware of irc::string.
*******************************************************/
/** Fetch the entire remaining stream, without tokenizing
* @return The remaining part of the stream
*/
virtual const std::string GetRemaining();
/** Returns true if the end of the stream has been reached
* @return True if the end of the stream has been reached, otherwise false
*/
virtual bool StreamEnd();
/** A mapping of uppercase to lowercase, including scandinavian
* 'oddities' as specified by RFC1459, e.g. { -> [, and | -> \
*/
unsigned const char rfc_case_insensitive_map[256] = {
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, /* 0-19 */
20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, /* 20-39 */
40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, /* 40-59 */
60, 61, 62, 63, 64, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, /* 60-79 */
112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 94, 95, 96, 97, 98, 99, /* 80-99 */
100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, /* 100-119 */
120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, /* 120-139 */
140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, /* 140-159 */
160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, /* 160-179 */
180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, /* 180-199 */
200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, /* 200-219 */
220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, /* 220-239 */
240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255 /* 240-255 */
};
/** A derived form of sepstream, which seperates on commas
/** Case insensitive map, ASCII rules.
* That is;
* [ != {, but A == a.
*/
class commasepstream : public sepstream
{
public:
/** Initialize with comma seperator
*/
commasepstream(const std::string &source) : sepstream(source, ',') { }
unsigned const char ascii_case_insensitive_map[256] = {
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, /* 0-19 */
20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, /* 20-39 */
40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, /* 40-59 */
60, 61, 62, 63, 64, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, /* 60-79 */
112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 91, 92, 93, 94, 95, 96, 97, 98, 99, /* 80-99 */
100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, /* 100-119 */
120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, /* 120-139 */
140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, /* 140-159 */
160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, /* 160-179 */
180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, /* 180-199 */
200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, /* 200-219 */
220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, /* 220-239 */
240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255 /* 240-255 */
};
/** A derived form of sepstream, which seperates on spaces
/** The irc namespace contains a number of helper classes.
*/
class spacesepstream : public sepstream
namespace irc
{
public:
/** Initialize with space seperator
/** The irc_char_traits class is used for RFC-style comparison of strings.
* This class is used to implement irc::string, a case-insensitive, RFC-
* comparing string class.
*/
spacesepstream(const std::string &source) : sepstream(source, ' ') { }
};
struct irc_char_traits : std::char_traits<char>
{
/** Check if two chars match.
* @param c1st First character
* @param c2nd Second character
* @return true if the characters are equal
*/
static bool eq(char c1st, char c2nd);
#endif
/** Check if two chars do NOT match.
* @param c1st First character
* @param c2nd Second character
* @return true if the characters are unequal
*/
static bool ne(char c1st, char c2nd);
/** Check if one char is less than another.
* @param c1st First character
* @param c2nd Second character
* @return true if c1st is less than c2nd
*/
static bool lt(char c1st, char c2nd);
/** Compare two strings of size n.
* @param str1 First string
* @param str2 Second string
* @param n Length to compare to
* @return similar to strcmp, zero for equal, less than zero for str1
* being less and greater than zero for str1 being greater than str2.
*/
static int compare(const char *str1, const char *str2, size_t n);
/** Find a char within a string up to position n.
* @param s1 String to find in
* @param n Position to search up to
* @param c Character to search for
* @return Pointer to the first occurance of c in s1
*/
static const char *find(const char *s1, int n, char c);
};
/** This typedef declares irc::string based upon irc_char_traits.
*/
typedef std::basic_string<char, irc_char_traits, std::allocator<char> > string;
struct CoreExport less
{
/** Compare two Anope::strings as irc::strings and find which one is less
* @param s1 The first string
* @param s2 The second string
* @return true if s1 < s2, else false
*/
bool operator()(const Anope::string &s1, const Anope::string &s2) const;
};
}
/** The ci namespace contains a number of helper classes.
*/
namespace ci
{
/** The ci_char_traits class is used for ASCII-style comparison of strings.
* This class is used to implement ci::string, a case-insensitive, ASCII-
* comparing string class.
*/
struct CoreExport ci_char_traits : std::char_traits<char>
{
/** Check if two chars match.
* @param c1st First character
* @param c2nd Second character
* @return true if the characters are equal
*/
static bool eq(char c1st, char c2nd);
/** Check if two chars do NOT match.
* @param c1st First character
* @param c2nd Second character
* @return true if the characters are unequal
*/
static bool ne(char c1st, char c2nd);
/** Check if one char is less than another.
* @param c1st First character
* @param c2nd Second character
* @return true if c1st is less than c2nd
*/
static bool lt(char c1st, char c2nd);
/** Compare two strings of size n.
* @param str1 First string
* @param str2 Second string
* @param n Length to compare to
* @return similar to strcmp, zero for equal, less than zero for str1
* being less and greater than zero for str1 being greater than str2.
*/
static int compare(const char *str1, const char *str2, size_t n);
/** Find a char within a string up to position n.
* @param s1 String to find in
* @param n Position to search up to
* @param c Character to search for
* @return Pointer to the first occurance of c in s1
*/
static const char *find(const char *s1, int n, char c);
};
/** This typedef declares ci::string based upon ci_char_traits.
*/
typedef std::basic_string<char, ci_char_traits, std::allocator<char> > string;
struct CoreExport less
{
/** Compare two Anope::strings as ci::strings and find which one is less
* @param s1 The first string
* @param s2 The second string
* @return true if s1 < s2, else false
*/
bool operator()(const Anope::string &s1, const Anope::string &s2) const;
};
}
/* Define operators for + and == with irc::string to std::string for easy assignment
* and comparison
*
* Operator +
*/
inline std::string operator+(std::string &leftval, irc::string &rightval)
{
return leftval + std::string(rightval.c_str());
}
/* Define operators for + and == with irc::string to std::string for easy assignment
* and comparison
*
* Operator +
*/
inline irc::string operator+(irc::string &leftval, std::string &rightval)
{
return leftval + irc::string(rightval.c_str());
}
/* Define operators for + and == with ci::string to std::string for easy assignment
* and comparison
*
* Operator +
*/
inline std::string operator+(std::string &leftval, ci::string &rightval)
{
return leftval + std::string(rightval.c_str());
}
/* Define operators for + and == with ci::string to std::string for easy assignment
* and comparison
*
* Operator +
*/
inline ci::string operator+(ci::string &leftval, std::string &rightval)
{
return leftval + ci::string(rightval.c_str());
}
/* Define operators for + and == with irc::string to ci::string for easy assignment
* and comparison
*
* Operator +
*/
inline irc::string operator+(irc::string &leftval, ci::string &rightval)
{
return leftval + irc::string(rightval.c_str());
}
/* Define operators for + and == with irc::string to ci::string for easy assignment
* and comparison
*
* Operator +
*/
inline ci::string operator+(ci::string &leftval, irc::string &rightval)
{
return leftval + ci::string(rightval.c_str());
}
/* Define operators for + and == with irc::string to std::string for easy assignment
* and comparison
*
* Operator ==
*/
inline bool operator==(const std::string &leftval, const irc::string &rightval)
{
return leftval.c_str() == rightval;
}
/* Define operators for + and == with irc::string to std::string for easy assignment
* and comparison
*
* Operator ==
*/
inline bool operator==(const irc::string &leftval, const std::string &rightval)
{
return leftval == rightval.c_str();
}
/* Define operators for + and == with ci::string to std::string for easy assignment
* and comparison
*
* Operator ==
*/
inline bool operator==(const std::string &leftval, const ci::string &rightval)
{
return leftval.c_str() == rightval;
}
/* Define operators for + and == with ci::string to std::string for easy assignment
* and comparison
*
* Operator ==
*/
inline bool operator==(const ci::string &leftval, const std::string &rightval)
{
return leftval == rightval.c_str();
}
/* Define operators for + and == with irc::string to ci::string for easy assignment
* and comparison
*
* Operator ==
*/
inline bool operator==(const ci::string &leftval, const irc::string &rightval)
{
return leftval.c_str() == rightval;
}
/* Define operators for + and == with irc::string to ci::string for easy assignment
* and comparison
*
* Operator ==
*/
inline bool operator==(const irc::string &leftval, const ci::string &rightval)
{
return leftval == rightval.c_str();
}
/* Define operators != for irc::string to std::string for easy comparison
*/
inline bool operator!=(const irc::string &leftval, const std::string &rightval)
{
return !(leftval == rightval.c_str());
}
/* Define operators != for std::string to irc::string for easy comparison
*/
inline bool operator!=(const std::string &leftval, const irc::string &rightval)
{
return !(leftval.c_str() == rightval);
}
/* Define operators != for ci::string to std::string for easy comparison
*/
inline bool operator!=(const ci::string &leftval, const std::string &rightval)
{
return !(leftval == rightval.c_str());
}
/* Define operators != for ci::string to irc::string for easy comparison
*/
inline bool operator!=(const std::string &leftval, const ci::string &rightval)
{
return !(leftval.c_str() == rightval);
}
/* Define operators != for irc::string to ci::string for easy comparison
*/
inline bool operator!=(const irc::string &leftval, const ci::string &rightval)
{
return !(leftval == rightval.c_str());
}
/* Define operators != for irc::string to ci::string for easy comparison
*/
inline bool operator!=(const ci::string &leftval, const irc::string &rightval)
{
return !(leftval.c_str() == rightval);
}
#endif // HASHCOMP_H
+85
View File
@@ -0,0 +1,85 @@
/* Commonly used language strings
*
* (C) 2008-2012 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
*/
#define MORE_INFO _("\002%s%s HELP %s\002 for more information.")
#define BAD_USERHOST_MASK _("Mask must be in the form \037user\037@\037host\037.")
#define BAD_EXPIRY_TIME _("Invalid expiry time.")
#define USERHOST_MASK_TOO_WIDE _("%s coverage is too wide; Please use a more specific mask.")
#define READ_ONLY_MODE _("Services are in read-only mode!")
#define PASSWORD_INCORRECT _("Password incorrect.")
#define ACCESS_DENIED _("Access denied.")
#define MORE_OBSCURE_PASSWORD _("Please try again with a more obscure password. Passwords should be at least\n" \
"five characters long, should not be something easily guessed\n" \
"(e.g. your real name or your nick), and cannot contain the space or tab characters.")
#define PASSWORD_TOO_LONG _("Your password is too long. Please try again with a shorter password.")
#define NICK_NOT_REGISTERED _("Your nick isn't registered.")
#define NICK_X_NOT_REGISTERED _("Nick \002%s\002 isn't registered.")
#define NICK_X_NOT_IN_USE _("Nick \002%s\002 isn't currently in use.")
#define NICK_X_NOT_ON_CHAN _("\002%s\002 is not currently on channel %s.")
#define NICK_X_SUSPENDED _("Nick %s is currently suspended.")
#define CHAN_X_SUSPENDED _("Channel %s is currently suspended.")
#define CHAN_X_NOT_REGISTERED _("Channel \002%s\002 isn't registered.")
#define CHAN_X_NOT_IN_USE _("Channel \002%s\002 doesn't exist.")
#define NICK_IDENTIFY_REQUIRED _("Password authentication required for that command.")
#define MAIL_X_INVALID _("\002%s\002 is not a valid e-mail address.")
#define NO_REASON _("No reason")
#define UNKNOWN _("<unknown>")
#define NO_EXPIRE _("does not expire")
#define LIST_INCORRECT_RANGE _("Incorrect range specified. The correct syntax is \002#\037from\037-\037to\037\002.")
#define UNKNOWN_OPTION _("Unknown option \002%s\002.\n" \
"Type %s%s HELP %s for more information.")
#define NICK_IS_REGISTERED _("This nick is owned by someone else. Please choose another.\n" \
"(If this is your nick, type \002%s%s IDENTIFY \037password\037\002.)")
#define NICK_IS_SECURE _("This nickname is registered and protected. If it is your\n" \
"nick, type \002%s%s IDENTIFY \037password\037\002. Otherwise,\n" \
"please choose a different nick.")
#define FORCENICKCHANGE_NOW _("This nickname has been registered; you may not use it.")
#define NICK_CANNOT_BE_REGISTERED _("Nickname \002%s\002 may not be registered.")
#define NICK_ALREADY_REGISTERED _("Nickname \002%s\002 is already registered!")
#define NICK_SET_SYNTAX _("SET \037option\037 \037parameters\037")
#define NICK_SET_DISABLED _("Sorry, nickname option setting is temporarily disabled.")
#define NICK_SET_UNKNOWN_OPTION _("Unknown SET option \002%s%s\002.")
#define NICK_SET_DISPLAY_CHANGED _("The new display is now \002%s\002.")
#define NICK_LIST_SYNTAX _("LIST \037pattern\037")
#define NICK_RECOVERED _("User claiming your nick has been killed.\n" \
"\002%s%s RELEASE %s\002 to get it back before %s timeout.")
#define NICK_REQUESTED _("This nick has already been requested, please check your e-mail address for the pass code")
#define NICK_CONFIRM_INVALID _("Invalid passcode has been entered, please check the e-mail again, and retry")
#define CHAN_NOT_ALLOWED_TO_JOIN _("You are not permitted to be on this channel.")
#define CHAN_X_INVALID _("Channel %s is not a valid channel.")
#define CHAN_REACHED_CHANNEL_LIMIT _("Sorry, you have already reached your limit of \002%d\002 channels.")
#define CHAN_EXCEEDED_CHANNEL_LIMIT _("Sorry, you have already exceeded your limit of \002%d\002 channels.")
#define CHAN_SYMBOL_REQUIRED _("Please use the symbol of \002#\002 when attempting to register")
#define CHAN_SET_DISABLED _("Sorry, channel option setting is temporarily disabled.")
#define CHAN_SETTING_CHANGED _("%s for %s set to %s.")
#define CHAN_SETTING_UNSET _("%s for %s unset.")
#define CHAN_SET_MLOCK_DEPRECATED _("MLOCK is deprecated. Use \002%s%s HELP MODE\002 instead.")
#define CHAN_ACCESS_LEVEL_RANGE _("Access level must be between %d and %d inclusive.")
#define CHAN_INFO_HEADER _("Information for channel \002%s\002:")
#define CHAN_EXCEPTED _("\002%s\002 matches an except on %s and cannot be banned until the except have been removed.")
#define MEMO_NEW_X_MEMO_ARRIVED _("There is a new memo on channel %s.\n" \
"Type \002%s%s READ %s %d\002 to read it.")
#define MEMO_NEW_MEMO_ARRIVED _("You have a new memo from %s.\n" \
"Type \002%s%s READ %d\002 to read it.")
#define MEMO_HAVE_NO_MEMOS _("You have no memos.")
#define MEMO_X_HAS_NO_MEMOS _("%s has no memos.")
#define MEMO_SEND_SYNTAX _("SEND {\037nick\037 | \037channel\037} \037memo-text\037")
#define MEMO_SEND_DISABLED _("Sorry, memo sending is temporarily disabled.")
#define MEMO_HAVE_NO_NEW_MEMOS _("You have no new memos.")
#define MEMO_X_HAS_NO_NEW_MEMOS _("%s has no new memos.")
#define BOT_DOES_NOT_EXIST _("Bot \002%s\002 does not exist.")
#define BOT_NOT_ASSIGNED _("You must assign a bot to the channel before using this command.")
#define BOT_NOT_ON_CHANNEL _("Bot is not on channel \002%s\002.")
#define BOT_ASSIGN_READONLY _("Sorry, bot assignment is temporarily disabled.")
#define HOST_SET_ERROR _("A vhost must be in the format of a valid hostmask.")
#define HOST_SET_IDENT_ERROR _("A vhost ident must be in the format of a valid ident")
#define HOST_SET_TOOLONG _("Error! The vhost is too long, please use a host shorter than %d characters.")
#define HOST_SET_IDENTTOOLONG _("Error! The Ident is too long, please use an ident shorter than %d characters.")
#define HOST_NOT_ASSIGNED _("Please contact an Operator to get a vhost assigned to this nick.")
#define HOST_NO_VIDENT _("Your IRCD does not support vIdent's, if this is incorrect, please report this as a possible bug")
+105
View File
@@ -0,0 +1,105 @@
#ifndef LOGGER_H
#define LOGGER_H
enum LogType
{
LOG_ADMIN,
LOG_OVERRIDE,
LOG_COMMAND,
LOG_SERVER,
LOG_CHANNEL,
LOG_USER,
LOG_NORMAL,
LOG_TERMINAL,
LOG_RAWIO,
LOG_DEBUG,
LOG_DEBUG_2,
LOG_DEBUG_3,
LOG_DEBUG_4
};
struct LogFile
{
Anope::string filename;
public:
std::ofstream stream;
LogFile(const Anope::string &name);
Anope::string GetName() const;
};
class Command;
class CoreExport Log
{
public:
BotInfo *bi;
User *u;
Command *c;
Channel *chan;
ChannelInfo *ci;
Server *s;
LogType Type;
Anope::string Category;
std::list<Anope::string> Sources;
std::stringstream buf;
Log(LogType type = LOG_NORMAL, const Anope::string &category = "", BotInfo *bi = NULL);
/* LOG_COMMAND/OVERRIDE/ADMIN */
Log(LogType type, User *u, Command *c, ChannelInfo *ci = NULL);
/* LOG_CHANNEL */
Log(User *u, Channel *c, const Anope::string &category = "");
/* LOG_USER */
explicit Log(User *u, const Anope::string &category = "");
/* LOG_SERVER */
Log(Server *s, const Anope::string &category = "");
Log(BotInfo *b, const Anope::string &category = "");
~Log();
Anope::string BuildPrefix() const;
template<typename T> Log &operator<<(T val)
{
this->buf << val;
return *this;
}
};
class CoreExport LogInfo
{
public:
std::list<Anope::string> Targets;
std::map<Anope::string, LogFile *> Logfiles;
std::list<Anope::string> Sources;
int LogAge;
std::list<Anope::string> Admin;
std::list<Anope::string> Override;
std::list<Anope::string> Commands;
std::list<Anope::string> Servers;
std::list<Anope::string> Users;
std::list<Anope::string> Channels;
std::list<Anope::string> Normal;
bool RawIO;
bool Debug;
LogInfo(int logage, bool rawio, bool debug);
~LogInfo();
void AddType(std::list<Anope::string> &list, const Anope::string &type);
bool HasType(LogType ltype, const Anope::string &type) const;
void ProcessMessage(const Log *l);
};
#endif // LOGGER_H
+28
View File
@@ -0,0 +1,28 @@
#ifndef MAIL_H
#define MAIL_H
#include "anope.h"
extern CoreExport bool Mail(User *u, NickCore *nc, BotInfo *service, const Anope::string &subject, const Anope::string &message);
extern CoreExport bool Mail(NickCore *nc, const Anope::string &subject, const Anope::string &message);
extern CoreExport bool MailValidate(const Anope::string &email);
class MailThread : public Thread
{
private:
Anope::string MailTo;
Anope::string Addr;
Anope::string Subject;
Anope::string Message;
bool DontQuoteAddresses;
bool Success;
public:
MailThread(const Anope::string &mailto, const Anope::string &addr, const Anope::string &subject, const Anope::string &message);
~MailThread();
void Run();
};
#endif // MAIL_H
-23
View File
@@ -1,23 +0,0 @@
/* Declarations of IRC message structures, variables, and functions.
*
* (C) 2003-2009 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for furhter details.
*
* Based on the original code of Epona by Lara.
* Based on the original code of Services by Andy Church.
*
* $Id$
*
*/
/*************************************************************************/
#include "modules.h"
extern Message messages[];
extern void moduleAddMsgs();
extern Message *find_message(const char *name);
/*************************************************************************/
+500
View File
@@ -0,0 +1,500 @@
/* Mode support
*
* Copyright (C) 2008-2011 Adam <Adam@anope.org>
* Copyright (C) 2008-2012 Anope Team <team@anope.org>
*
* Please read COPYING and README for further details.
*/
#ifndef MODES_H
#define MODES_H
/** All of the valid user mode names
*/
enum UserModeName
{
UMODE_BEGIN,
UMODE_SERV_ADMIN, UMODE_BOT, UMODE_CO_ADMIN, UMODE_FILTER, UMODE_HIDEOPER, UMODE_NETADMIN,
UMODE_REGPRIV, UMODE_PROTECTED, UMODE_NO_CTCP, UMODE_WEBTV, UMODE_WEBIRC, UMODE_WHOIS, UMODE_ADMIN, UMODE_DEAF,
UMODE_GLOBOPS, UMODE_HELPOP, UMODE_INVIS, UMODE_OPER, UMODE_PRIV, UMODE_GOD, UMODE_REGISTERED,
UMODE_SNOMASK, UMODE_VHOST, UMODE_WALLOPS, UMODE_CLOAK, UMODE_SSL, UMODE_SOFTCALLERID, UMODE_CALLERID,
UMODE_COMMONCHANS, UMODE_HIDDEN, UMODE_STRIPCOLOR, UMODE_INVISIBLE_OPER, UMODE_RESTRICTED, UMODE_HIDEIDLE,
UMODE_END
};
const Anope::string UserModeNameStrings[] = {
"UMODE_BEGIN",
"UMODE_SERV_ADMIN", "UMODE_BOT", "UMODE_CO_ADMIN", "UMODE_FILTER", "UMODE_HIDEOPER", "UMODE_NETADMIN",
"UMODE_REGPRIV", "UMODE_PROTECTED", "UMODE_NO_CTCP", "UMODE_WEBTV", "UMODE_WEBIRC", "UMODE_WHOIS", "UMODE_ADMIN", "UMODE_DEAF",
"UMODE_GLOBOPS", "UMODE_HELPOP", "UMODE_INVIS", "UMODE_OPER", "UMODE_PRIV", "UMODE_GOD", "UMODE_REGISTERED",
"UMODE_SNOMASK", "UMODE_VHOST", "UMODE_WALLOPS", "UMODE_CLOAK", "UMODE_SSL", "UMODE_SOFTCALLERID", "UMODE_CALLERID",
"UMODE_COMMONCHANS", "UMODE_HIDDEN", "UMODE_STRIPCOLOR", "UMODE_INVISIBLE_OPER", "UMODE_RESTRICTED", "UMODE_HIDEIDLE",
""
};
/** All of the valid channel mode names
*/
enum ChannelModeName
{
CMODE_BEGIN,
/* Channel modes */
CMODE_BLOCKCOLOR, CMODE_FLOOD, CMODE_INVITE, CMODE_KEY, CMODE_LIMIT, CMODE_MODERATED, CMODE_NOEXTERNAL,
CMODE_PRIVATE, CMODE_REGISTERED, CMODE_SECRET, CMODE_TOPIC, CMODE_AUDITORIUM, CMODE_SSL, CMODE_ADMINONLY,
CMODE_NOCTCP, CMODE_FILTER, CMODE_NOKNOCK, CMODE_REDIRECT, CMODE_REGMODERATED, CMODE_NONICK, CMODE_OPERONLY,
CMODE_NOKICK, CMODE_REGISTEREDONLY, CMODE_STRIPCOLOR, CMODE_NONOTICE, CMODE_NOINVITE, CMODE_ALLINVITE,
CMODE_BLOCKCAPS, CMODE_PERM, CMODE_NICKFLOOD, CMODE_JOINFLOOD, CMODE_DELAYEDJOIN, CMODE_NOREJOIN,
CMODE_BANDWIDTH,
/* b/e/I */
CMODE_BAN, CMODE_EXCEPT,
CMODE_INVITEOVERRIDE,
/* v/h/o/a/q */
CMODE_VOICE, CMODE_HALFOP, CMODE_OP,
CMODE_PROTECT, CMODE_OWNER,
CMODE_END
};
const Anope::string ChannelModeNameStrings[] = {
"CMODE_BEGIN",
/* Channel modes */
"CMODE_BLOCKCOLOR", "CMODE_FLOOD", "CMODE_INVITE", "CMODE_KEY", "CMODE_LIMIT", "CMODE_MODERATED", "CMODE_NOEXTERNAL",
"CMODE_PRIVATE", "CMODE_REGISTERED", "CMODE_SECRET", "CMODE_TOPIC", "CMODE_AUDITORIUM", "CMODE_SSL", "CMODE_ADMINONLY",
"CMODE_NOCTCP", "CMODE_FILTER", "CMODE_NOKNOCK", "CMODE_REDIRECT", "CMODE_REGMODERATED", "CMODE_NONICK", "CMODE_OPERONLY",
"CMODE_NOKICK", "CMODE_REGISTEREDONLY", "CMODE_STRIPCOLOR", "CMODE_NONOTICE", "CMODE_NOINVITE", "CMODE_ALLINVITE",
"CMODE_BLOCKCAPS", "CMODE_PERM", "CMODE_NICKFLOOD", "CMODE_JOINFLOOD", "CMODE_DELAYEDJOIN", "CMODE_NOREJOIN",
"CMODE_BANDWIDTH",
/* b/e/I */
"CMODE_BAN", "CMODE_EXCEPT",
"CMODE_INVITEOVERRIDE",
/* v/h/o/a/q */
"CMODE_VOICE", "CMODE_HALFOP", "CMODE_OP",
"CMODE_PROTECT", "CMODE_OWNER",
""
};
/** The different types of modes
*/
enum ModeType
{
/* Regular mode */
MODE_REGULAR,
/* b/e/I */
MODE_LIST,
/* k/l etc */
MODE_PARAM,
/* v/h/o/a/q */
MODE_STATUS
};
/* Classes of modes, Channel modes and User modes
*/
enum ModeClass
{
/* Channel mode */
MC_CHANNEL,
/* User mode */
MC_USER
};
/** This class is the basis of all modes in Anope
*/
class CoreExport Mode : public Base
{
public:
/* Class of mode this is */
ModeClass Class;
/* Mode char for this */
char ModeChar;
/* Type of mode this is */
ModeType Type;
/** Default constructor
* @param mClass The type of mode this is
* @param modeChar The mode char
* @param type The mode type
*/
Mode(ModeClass mClass, char modeChar, ModeType type);
/** Default destructor
*/
virtual ~Mode();
};
/** This class is a user mode, all user modes use this/inherit from this
*/
class CoreExport UserMode : public Mode
{
public:
/* Mode name */
UserModeName Name;
/** Default constructor
* @param nName The mode name
* @param modeChar The mode char
*/
UserMode(UserModeName mName, char modeChar);
/** Default destructor
*/
virtual ~UserMode();
/** Returns the mode name as a string
*/
const Anope::string NameAsString();
};
class CoreExport UserModeParam : public UserMode
{
public:
/** Default constructor
* @param mName The mode name
* @param modeChar The mode char
*/
UserModeParam(UserModeName mName, char modeChar);
/** Check if the param is valid
* @param value The param
* @return true or false
*/
virtual bool IsValid(const Anope::string &value) const { return true; }
};
/** This class is a channel mode, all channel modes use this/inherit from this
*/
class CoreExport ChannelMode : public Mode
{
public:
/* Mode name */
ChannelModeName Name;
/** Default constructor
* @param mName The mode name
* @param modeChar The mode char
*/
ChannelMode(ChannelModeName mName, char modeChar);
/** Default destructor
*/
virtual ~ChannelMode();
/** Can a user set this mode, used for mlock
* NOTE: User CAN be NULL, this is for checking if it can be locked with defcon
* @param u The user, or NULL
*/
virtual bool CanSet(User *u) const;
/** Returns the mode name as a string
*/
const Anope::string NameAsString();
};
/** This is a mode for lists, eg b/e/I. These modes should inherit from this
*/
class CoreExport ChannelModeList : public ChannelMode
{
public:
/** Default constructor
* @param mName The mode name
* @param modeChar The mode char
*/
ChannelModeList(ChannelModeName mName, char modeChar);
/** Default destructor
*/
virtual ~ChannelModeList();
/** Is the mask valid
* @param mask The mask
* @return true for yes, false for no
*/
virtual bool IsValid(const Anope::string &mask) const { return true; }
/** Checks if mask affects user
* Should only be used for extbans or other weird ircd-specific things.
* @param u The user
* @param e The entry to match against
* @return true on match
*/
virtual bool Matches(User *u, const Entry *e) { return false; }
/** Called when a mask is added to a channel
* @param chan The channel
* @param mask The mask
*/
virtual void OnAdd(Channel *chan, const Anope::string &mask) { }
/** Called when a mask is removed from a channel
* @param chan The channel
* @param mask The mask
*/
virtual void OnDel(Channel *chan, const Anope::string &mask) { }
};
/** This is a mode with a paramater, eg +k/l. These modes should use/inherit from this
*/
class CoreExport ChannelModeParam : public ChannelMode
{
public:
/** Default constructor
* @param mName The mode name
* @param modeChar The mode char
* @param MinusArg true if this mode sends no arg when unsetting
*/
ChannelModeParam(ChannelModeName mName, char modeChar, bool MinusArg = false);
/** Default destructor
*/
virtual ~ChannelModeParam();
/* Should we send an arg when unsetting this mode? */
bool MinusNoArg;
/** Is the param valid
* @param value The param
* @return true for yes, false for no
*/
virtual bool IsValid(const Anope::string &value) const { return true; }
};
/** This is a mode that is a channel status, eg +v/h/o/a/q.
*/
class CoreExport ChannelModeStatus : public ChannelMode
{
public:
/* The symbol, eg @ % + */
char Symbol;
/* The "level" of the mode, used to compare with other modes.
* Used so we know op > halfop > voice etc.
*/
unsigned short Level;
/** Default constructor
* @param mName The mode name
* @param modeChar The mode char
* @param mSymbol The symbol for the mode, eg @ %
* @param mLevel A level for the mode, which is usually determined by the PREFIX capab
*/
ChannelModeStatus(ChannelModeName mName, char modeChar, char mSymbol, unsigned short mLevel = 0);
/** Default destructor
*/
virtual ~ChannelModeStatus();
};
/** Channel mode +k (key)
*/
class CoreExport ChannelModeKey : public ChannelModeParam
{
public:
ChannelModeKey(char modeChar) : ChannelModeParam(CMODE_KEY, modeChar) { }
bool IsValid(const Anope::string &value) const;
};
/** This class is used for channel mode +A (Admin only)
* Only opers can mlock it
*/
class CoreExport ChannelModeAdmin : public ChannelMode
{
public:
ChannelModeAdmin(char modeChar) : ChannelMode(CMODE_ADMINONLY, modeChar) { }
/* Opers only */
bool CanSet(User *u) const;
};
/** This class is used for channel mode +O (Opers only)
* Only opers can mlock it
*/
class CoreExport ChannelModeOper : public ChannelMode
{
public:
ChannelModeOper(char modeChar) : ChannelMode(CMODE_OPERONLY, modeChar) { }
/* Opers only */
bool CanSet(User *u) const;
};
/** This class is used for channel mode +r (registered channel)
* No one may mlock r
*/
class CoreExport ChannelModeRegistered : public ChannelMode
{
public:
ChannelModeRegistered(char modeChar) : ChannelMode(CMODE_REGISTERED, modeChar) { }
/* No one mlocks +r */
bool CanSet(User *u) const;
};
enum StackerType
{
ST_CHANNEL,
ST_USER
};
class StackerInfo
{
public:
/* Modes to be added */
std::list<std::pair<Base *, Anope::string> > AddModes;
/* Modes to be deleted */
std::list<std::pair<Base *, Anope::string> > DelModes;
/* The type of object this stacker info is for */
StackerType Type;
/* Bot this is sent from */
BotInfo *bi;
/** Add a mode to this object
* @param mode The mode
* @param Set true if setting, false if unsetting
* @param Param The param for the mode
*/
void AddMode(Mode *mode, bool Set, const Anope::string &Param);
};
/** This is mode manager
* It contains functions for adding modes to Anope so Anope can track them
* and do things such as MLOCK.
* This also contains a mode stacker that will combine multiple modes and set
* them on a channel all at once
*/
class CoreExport ModeManager
{
protected:
class ModePipe : public Pipe
{
public:
/** Called when there are modes to be set
*/
void OnNotify();
};
static ModePipe *mpipe;
/* List of pairs of user/channels and their stacker info */
static std::list<std::pair<Base *, StackerInfo *> > StackerObjects;
/** Get the stacker info for an item, if one doesnt exist it is created
* @param Item The user/channel etc
* @return The stacker info
*/
static StackerInfo *GetInfo(Base *Item);
/** Build a list of mode strings to send to the IRCd from the mode stacker
* @param info The stacker info for a channel or user
* @return a list of strings
*/
static std::list<Anope::string> BuildModeStrings(StackerInfo *info);
/** Really add a mode to the stacker, internal use only
* @param bi The client to set the modes from
* @param Object The object, user/channel
* @param mode The mode
* @param Set Adding or removing?
* @param Param A param, if there is one
* @param Type The type this is, user or channel
*/
static void StackerAddInternal(BotInfo *bi, Base *Object, Mode *mode, bool Set, const Anope::string &Param, StackerType Type);
public:
/* List of all modes Anope knows about */
static std::vector<ChannelMode *> ChannelModes;
static std::vector<UserMode *> UserModes;
/** Add a user mode to Anope
* @param um A UserMode or UserMode derived class
* @return true on success, false on error
*/
static bool AddUserMode(UserMode *um);
/** Add a channel mode to Anope
* @param cm A ChannelMode or ChannelMode derived class
* @return true on success, false on error
*/
static bool AddChannelMode(ChannelMode *cm);
/** Find a channel mode
* @param Mode The mode
* @return The mode class
*/
static ChannelMode *FindChannelModeByChar(char Mode);
/** Find a user mode
* @param Mode The mode
* @return The mode class
*/
static UserMode *FindUserModeByChar(char Mode);
/** Find a channel mode
* @param Mode The modename
* @return The mode class
*/
static ChannelMode *FindChannelModeByName(ChannelModeName Name);
/** Find a user mode
* @param Mode The modename
* @return The mode class
*/
static UserMode *FindUserModeByName(UserModeName Name);
/** Find channel mode by string
* @param name The mode name
* @return The mode
*/
static ChannelMode *FindChannelModeByString(const Anope::string &name);
/** Find user mode by string
* @param name The mode name
* @return The mode
*/
static UserMode *FindUserModeByString(const Anope::string &name);
/** Gets the channel mode char for a symbol (eg + returns v)
* @param Value The symbol
* @return The char
*/
static char GetStatusChar(char Value);
/** Add a mode to the stacker to be set on a channel
* @param bi The client to set the modes from
* @param c The channel
* @param cm The channel mode
* @param Set true for setting, false for removing
* @param Param The param, if there is one
*/
static void StackerAdd(BotInfo *bi, Channel *c, ChannelMode *cm, bool Set, const Anope::string &Param = "");
/** Add a mode to the stacker to be set on a user
* @param bi The client to set the modes from
* @param u The user
* @param um The user mode
* @param Set true for setting, false for removing
* @param param The param, if there is one
*/
static void StackerAdd(BotInfo *bi, User *u, UserMode *um, bool Set, const Anope::string &Param = "");
/** Process all of the modes in the stacker and send them to the IRCd to be set on channels/users
*/
static void ProcessModes();
/** Delete a user or channel from the stacker
* @param b The user/channel
*/
static void StackerDel(Base *b);
};
#endif // MODES_H
+3 -9
View File
@@ -2,14 +2,8 @@
#define MODULE_H
#include "services.h"
#include "commands.h"
#include "language.h"
#include "modules.h"
#include "version.h"
#define MOD_UNIQUE 0
#define MOD_HEAD 1
#define MOD_TAIL 2
#endif
#include "oper.h"
#include "commands.h"
#endif // MODULE_H
+1062 -425
View File
File diff suppressed because it is too large Load Diff
+164
View File
@@ -0,0 +1,164 @@
/* OperServ support
*
* (C) 2008-2012 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
*/
#ifndef OPER_H
#define OPER_H
class XLineManager;
class CoreExport XLine : public Serializable
{
public:
Anope::string Mask;
Anope::string By;
time_t Created;
time_t Expires;
Anope::string Reason;
XLineManager *manager;
Anope::string UID;
XLine(const Anope::string &mask, const Anope::string &reason = "", const Anope::string &uid = "");
XLine(const Anope::string &mask, const Anope::string &by, const time_t expires, const Anope::string &reason, const Anope::string &uid);
Anope::string GetNick() const;
Anope::string GetUser() const;
Anope::string GetHost() const;
sockaddrs GetIP() const;
Anope::string serialize_name() const;
serialized_data serialize();
static void unserialize(serialized_data &data);
};
class CoreExport XLineManager : public Service
{
char type;
/* List of XLines in this XLineManager */
std::vector<XLine *> XLines;
static std::map<Anope::string, XLine *, ci::less> XLinesByUID;
public:
/* List of XLine managers we check users against in XLineManager::CheckAll */
static std::list<XLineManager *> XLineManagers;
/** Register a XLineManager, places it in XLineManagers for use in XLineManager::CheckAll
* It is important XLineManagers are registered in the proper order. Eg, if you had one akilling
* clients and one handing them free olines, you would want the akilling one first. This way if a client
* matches an entry on both of the XLineManagers, they would be akilled.
* @param xlm THe XLineManager
*/
static void RegisterXLineManager(XLineManager *xlm);
/** Unregister a XLineManager
* @param xlm The XLineManager
*/
static void UnregisterXLineManager(XLineManager *xlm);
/** Check a user against all known XLineManagers
* Wparam u The user
* @return A pair of the XLineManager the user was found in and the XLine they matched, both may be NULL for no match
*/
static std::pair<XLineManager *, XLine *> CheckAll(User *u);
/** Generate a unique ID for this XLine
* @return A unique ID
*/
static Anope::string GenerateUID();
/** Constructor
*/
XLineManager(Module *creator, const Anope::string &name, char t);
/** Destructor
*/
virtual ~XLineManager();
/** The type of xline provided by this service
* @return The type
*/
const char &Type();
/** Get the number of XLines in this XLineManager
* @return The number of XLines
*/
size_t GetCount() const;
/** Get the XLine vector
* @return The vector
*/
const std::vector<XLine *> &GetList() const;
/** Add an entry to this XLineManager
* @param x The entry
*/
void AddXLine(XLine *x);
/** Delete an entry from this XLineManager
* @param x The entry
* @return true if the entry was found and deleted, else false
*/
bool DelXLine(XLine *x);
/** Gets an entry by index
* @param index The index
* @return The XLine, or NULL if the index is out of bounds
*/
XLine *GetEntry(unsigned index);
/** Clear the XLine vector
* Note: This does not remove the XLines from the IRCd
*/
void Clear();
/** Checks if a mask can/should be added to the XLineManager
* @param mask The mask
* @param expires When the mask would expire
* @return A pair of int and XLine*.
* 1 - Mask already exists
* 2 - Mask already exists, but the expiry time was changed
* 3 - Mask is already covered by another mask
* In each case the XLine it matches/is covered by is returned in XLine*
*/
std::pair<int, XLine *> CanAdd(const Anope::string &mask, time_t expires);
/** Checks if this list has an entry
* @param mask The mask
* @return The XLine the user matches, or NULL
*/
XLine *HasEntry(const Anope::string &mask);
/** Check a user against all of the xlines in this XLineManager
* @param u The user
* @return The xline the user marches, if any. Also calls OnMatch()
*/
virtual XLine *Check(User *u);
/** Called when a user matches a xline in this XLineManager
* @param u The user
* @param x The XLine they match
*/
virtual void OnMatch(User *u, XLine *x);
/** Called when an XLine expires
* @param x The xline
*/
virtual void OnExpire(XLine *x);
/** Called to send an XLine to the IRCd
* @param u The user, if we know it
* @param x The xline
*/
virtual void Send(User *u, XLine *x) = 0;
/** Called to remove an XLine from the IRCd
* @param x The XLine
*/
virtual void SendDel(XLine *x) = 0;
};
#endif // OPER_H
+121
View File
@@ -0,0 +1,121 @@
/*
* Copyright (C) 2008-2011 Robin Burchell <w00t@inspircd.org>
* Copyright (C) 2008-2012 Anope Team <team@anope.org>
*
* Please read COPYING and README for further details.
*/
#ifndef OPERTYPE_H
#define OPERTYPE_H
#include "hashcomp.h"
class OperType;
struct CoreExport Oper
{
Anope::string name;
OperType *ot;
bool require_oper;
Anope::string password;
Anope::string certfp;
bool config;
std::vector<Anope::string> hosts;
Anope::string vhost;
Oper(const Anope::string &n, OperType *o) : name(n), ot(o) { this->config = false; }
virtual ~Oper() { }
/** Find an oper block by name
* @param name The name
* @return the oper block
*/
static Oper *Find(const Anope::string &name);
};
class CoreExport OperType
{
private:
/** The name of this opertype, e.g. "sra".
*/
Anope::string name;
/** Privs that this opertype may use, e.g. 'users/auspex'.
* This *must* be std::list, see commands comment for details.
*/
std::list<Anope::string> privs;
/** Commands this user may execute, e.g:
* botserv/set/ *, botserv/set/private, botserv/ *
* et cetera.
*
* This *must* be std::list, not std::map, because
* we support full globbing here. This shouldn't be a problem
* as we don't invoke it often.
*/
std::list<Anope::string> commands;
/** Set of opertypes we inherit from
*/
std::set<OperType *> inheritances;
public:
/** Modes to set when someone identifys using this opertype
*/
Anope::string modes;
/** Find an oper type by name
* @param name The name
* @return The oper type
*/
static OperType *Find(const Anope::string &name);
/** Create a new opertype of the given name.
* @param nname The opertype name, e.g. "sra".
*/
OperType(const Anope::string &nname);
/** Check whether this opertype has access to run the given command string.
* @param cmdstr The string to check, e.g. botserv/set/private.
* @return True if this opertype may run the specified command, false otherwise.
*/
bool HasCommand(const Anope::string &cmdstr) const;
/** Check whether this opertype has access to the given special permission.
* @param privstr The priv to check for, e.g. users/auspex.
* @return True if this opertype has the specified priv, false otherwise.
*/
bool HasPriv(const Anope::string &privstr) const;
/** Add the specified command to this opertype.
* @param cmdstr The command mask to grant this opertype access to, e.g: nickserv/ *, chanserv/set/ *, botserv/set/private.
*/
void AddCommand(const Anope::string &cmdstr);
/** Add the specified priv mask to this opertype.
* @param privstr The specified mask of privs to grant this opertype access to, e.g. users/auspex, users/ *, etc.
*/
void AddPriv(const Anope::string &privstr);
/** Returns the name of this opertype.
*/
const Anope::string &GetName() const;
/** Make this opertype inherit commands and privs from another opertype
* @param ot The opertype to inherit from
*/
void Inherits(OperType *ot);
/** Gets the icommands for this opertype
* @return A list of commands
*/
const std::list<Anope::string> GetCommands() const;
/** Gets the privileges for this opertype
* @return A list of privileges
*/
const std::list<Anope::string> GetPrivs() const;
};
#endif // OPERTYPE_H
-20
View File
@@ -1,20 +0,0 @@
/* Include extra includes needed by most/all pseudo-clients.
*
* (C) 2003-2009 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for furhter details.
*
* Based on the original code of Epona by Lara.
* Based on the original code of Services by Andy Church.
*
* $Id$
*
*/
#include "commands.h"
#include "language.h"
#include "timeout.h"
#include "encrypt.h"
#include "datafiles.h"
#include "slist.h"
+800
View File
@@ -0,0 +1,800 @@
/* A portable stdint.h
****************************************************************************
* BSD License:
****************************************************************************
*
* Copyright (c) 2005-2011 Paul Hsieh
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. 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.
*
****************************************************************************
*
* Version 0.1.12
*
* The ANSI C standard committee, for the C99 standard, specified the
* inclusion of a new standard include file called stdint.h. This is
* a very useful and long desired include file which contains several
* very precise definitions for integer scalar types that is
* critically important for making portable several classes of
* applications including cryptography, hashing, variable length
* integer libraries and so on. But for most developers its likely
* useful just for programming sanity.
*
* The problem is that most compiler vendors have decided not to
* implement the C99 standard, and the next C++ language standard
* (which has a lot more mindshare these days) will be a long time in
* coming and its unknown whether or not it will include stdint.h or
* how much adoption it will have. Either way, it will be a long time
* before all compilers come with a stdint.h and it also does nothing
* for the extremely large number of compilers available today which
* do not include this file, or anything comparable to it.
*
* So that's what this file is all about. Its an attempt to build a
* single universal include file that works on as many platforms as
* possible to deliver what stdint.h is supposed to. A few things
* that should be noted about this file:
*
* 1) It is not guaranteed to be portable and/or present an identical
* interface on all platforms. The extreme variability of the
* ANSI C standard makes this an impossibility right from the
* very get go. Its really only meant to be useful for the vast
* majority of platforms that possess the capability of
* implementing usefully and precisely defined, standard sized
* integer scalars. Systems which are not intrinsically 2s
* complement may produce invalid constants.
*
* 2) There is an unavoidable use of non-reserved symbols.
*
* 3) Other standard include files are invoked.
*
* 4) This file may come in conflict with future platforms that do
* include stdint.h. The hope is that one or the other can be
* used with no real difference.
*
* 5) In the current verison, if your platform can't represent
* int32_t, int16_t and int8_t, it just dumps out with a compiler
* error.
*
* 6) 64 bit integers may or may not be defined. Test for their
* presence with the test: #ifdef INT64_MAX or #ifdef UINT64_MAX.
* Note that this is different from the C99 specification which
* requires the existence of 64 bit support in the compiler. If
* this is not defined for your platform, yet it is capable of
* dealing with 64 bits then it is because this file has not yet
* been extended to cover all of your system's capabilities.
*
* 7) (u)intptr_t may or may not be defined. Test for its presence
* with the test: #ifdef PTRDIFF_MAX. If this is not defined
* for your platform, then it is because this file has not yet
* been extended to cover all of your system's capabilities, not
* because its optional.
*
* 8) The following might not been defined even if your platform is
* capable of defining it:
*
* WCHAR_MIN
* WCHAR_MAX
* (u)int64_t
* PTRDIFF_MIN
* PTRDIFF_MAX
* (u)intptr_t
*
* 9) The following have not been defined:
*
* WINT_MIN
* WINT_MAX
*
* 10) The criteria for defining (u)int_least(*)_t isn't clear,
* except for systems which don't have a type that precisely
* defined 8, 16, or 32 bit types (which this include file does
* not support anyways). Default definitions have been given.
*
* 11) The criteria for defining (u)int_fast(*)_t isn't something I
* would trust to any particular compiler vendor or the ANSI C
* committee. It is well known that "compatible systems" are
* commonly created that have very different performance
* characteristics from the systems they are compatible with,
* especially those whose vendors make both the compiler and the
* system. Default definitions have been given, but its strongly
* recommended that users never use these definitions for any
* reason (they do *NOT* deliver any serious guarantee of
* improved performance -- not in this file, nor any vendor's
* stdint.h).
*
* 12) The following macros:
*
* PRINTF_INTMAX_MODIFIER
* PRINTF_INT64_MODIFIER
* PRINTF_INT32_MODIFIER
* PRINTF_INT16_MODIFIER
* PRINTF_LEAST64_MODIFIER
* PRINTF_LEAST32_MODIFIER
* PRINTF_LEAST16_MODIFIER
* PRINTF_INTPTR_MODIFIER
*
* are strings which have been defined as the modifiers required
* for the "d", "u" and "x" printf formats to correctly output
* (u)intmax_t, (u)int64_t, (u)int32_t, (u)int16_t, (u)least64_t,
* (u)least32_t, (u)least16_t and (u)intptr_t types respectively.
* PRINTF_INTPTR_MODIFIER is not defined for some systems which
* provide their own stdint.h. PRINTF_INT64_MODIFIER is not
* defined if INT64_MAX is not defined. These are an extension
* beyond what C99 specifies must be in stdint.h.
*
* In addition, the following macros are defined:
*
* PRINTF_INTMAX_HEX_WIDTH
* PRINTF_INT64_HEX_WIDTH
* PRINTF_INT32_HEX_WIDTH
* PRINTF_INT16_HEX_WIDTH
* PRINTF_INT8_HEX_WIDTH
* PRINTF_INTMAX_DEC_WIDTH
* PRINTF_INT64_DEC_WIDTH
* PRINTF_INT32_DEC_WIDTH
* PRINTF_INT16_DEC_WIDTH
* PRINTF_INT8_DEC_WIDTH
*
* Which specifies the maximum number of characters required to
* print the number of that type in either hexadecimal or decimal.
* These are an extension beyond what C99 specifies must be in
* stdint.h.
*
* Compilers tested (all with 0 warnings at their highest respective
* settings): Borland Turbo C 2.0, WATCOM C/C++ 11.0 (16 bits and 32
* bits), Microsoft Visual C++ 6.0 (32 bit), Microsoft Visual Studio
* .net (VC7), Intel C++ 4.0, GNU gcc v3.3.3
*
* This file should be considered a work in progress. Suggestions for
* improvements, especially those which increase coverage are strongly
* encouraged.
*
* Acknowledgements
*
* The following people have made significant contributions to the
* development and testing of this file:
*
* Chris Howie
* John Steele Scott
* Dave Thorup
* John Dill
*
*/
#include <stddef.h>
#include <limits.h>
#include <signal.h>
/*
* For gcc with _STDINT_H, fill in the PRINTF_INT*_MODIFIER macros, and
* do nothing else. On the Mac OS X version of gcc this is _STDINT_H_.
*/
#if ((defined(__STDC__) && __STDC__ && __STDC_VERSION__ >= 199901L) || (defined (__WATCOMC__) && (defined (_STDINT_H_INCLUDED) || __WATCOMC__ >= 1250)) || (defined(__GNUC__) && (defined(_STDINT_H) || defined(_STDINT_H_) || defined (__UINT_FAST64_TYPE__)) )) && !defined (_PSTDINT_H_INCLUDED)
#include <stdint.h>
#define _PSTDINT_H_INCLUDED
# ifndef PRINTF_INT64_MODIFIER
# define PRINTF_INT64_MODIFIER "ll"
# endif
# ifndef PRINTF_INT32_MODIFIER
# define PRINTF_INT32_MODIFIER "l"
# endif
# ifndef PRINTF_INT16_MODIFIER
# define PRINTF_INT16_MODIFIER "h"
# endif
# ifndef PRINTF_INTMAX_MODIFIER
# define PRINTF_INTMAX_MODIFIER PRINTF_INT64_MODIFIER
# endif
# ifndef PRINTF_INT64_HEX_WIDTH
# define PRINTF_INT64_HEX_WIDTH "16"
# endif
# ifndef PRINTF_INT32_HEX_WIDTH
# define PRINTF_INT32_HEX_WIDTH "8"
# endif
# ifndef PRINTF_INT16_HEX_WIDTH
# define PRINTF_INT16_HEX_WIDTH "4"
# endif
# ifndef PRINTF_INT8_HEX_WIDTH
# define PRINTF_INT8_HEX_WIDTH "2"
# endif
# ifndef PRINTF_INT64_DEC_WIDTH
# define PRINTF_INT64_DEC_WIDTH "20"
# endif
# ifndef PRINTF_INT32_DEC_WIDTH
# define PRINTF_INT32_DEC_WIDTH "10"
# endif
# ifndef PRINTF_INT16_DEC_WIDTH
# define PRINTF_INT16_DEC_WIDTH "5"
# endif
# ifndef PRINTF_INT8_DEC_WIDTH
# define PRINTF_INT8_DEC_WIDTH "3"
# endif
# ifndef PRINTF_INTMAX_HEX_WIDTH
# define PRINTF_INTMAX_HEX_WIDTH PRINTF_INT64_HEX_WIDTH
# endif
# ifndef PRINTF_INTMAX_DEC_WIDTH
# define PRINTF_INTMAX_DEC_WIDTH PRINTF_INT64_DEC_WIDTH
# endif
/*
* Something really weird is going on with Open Watcom. Just pull some of
* these duplicated definitions from Open Watcom's stdint.h file for now.
*/
# if defined (__WATCOMC__) && __WATCOMC__ >= 1250
# if !defined (INT64_C)
# define INT64_C(x) (x + (INT64_MAX - INT64_MAX))
# endif
# if !defined (UINT64_C)
# define UINT64_C(x) (x + (UINT64_MAX - UINT64_MAX))
# endif
# if !defined (INT32_C)
# define INT32_C(x) (x + (INT32_MAX - INT32_MAX))
# endif
# if !defined (UINT32_C)
# define UINT32_C(x) (x + (UINT32_MAX - UINT32_MAX))
# endif
# if !defined (INT16_C)
# define INT16_C(x) (x)
# endif
# if !defined (UINT16_C)
# define UINT16_C(x) (x)
# endif
# if !defined (INT8_C)
# define INT8_C(x) (x)
# endif
# if !defined (UINT8_C)
# define UINT8_C(x) (x)
# endif
# if !defined (UINT64_MAX)
# define UINT64_MAX 18446744073709551615ULL
# endif
# if !defined (INT64_MAX)
# define INT64_MAX 9223372036854775807LL
# endif
# if !defined (UINT32_MAX)
# define UINT32_MAX 4294967295UL
# endif
# if !defined (INT32_MAX)
# define INT32_MAX 2147483647L
# endif
# if !defined (INTMAX_MAX)
# define INTMAX_MAX INT64_MAX
# endif
# if !defined (INTMAX_MIN)
# define INTMAX_MIN INT64_MIN
# endif
# endif
#endif
#ifndef _PSTDINT_H_INCLUDED
#define _PSTDINT_H_INCLUDED
#ifndef SIZE_MAX
# define SIZE_MAX (~(size_t)0)
#endif
/*
* Deduce the type assignments from limits.h under the assumption that
* integer sizes in bits are powers of 2, and follow the ANSI
* definitions.
*/
#ifndef UINT8_MAX
# define UINT8_MAX 0xff
#endif
#ifndef uint8_t
# if (UCHAR_MAX == UINT8_MAX) || defined (S_SPLINT_S)
typedef unsigned char uint8_t;
# define UINT8_C(v) ((uint8_t) v)
# else
# error "Platform not supported"
# endif
#endif
#ifndef INT8_MAX
# define INT8_MAX 0x7f
#endif
#ifndef INT8_MIN
# define INT8_MIN INT8_C(0x80)
#endif
#ifndef int8_t
# if (SCHAR_MAX == INT8_MAX) || defined (S_SPLINT_S)
typedef signed char int8_t;
# define INT8_C(v) ((int8_t) v)
# else
# error "Platform not supported"
# endif
#endif
#ifndef UINT16_MAX
# define UINT16_MAX 0xffff
#endif
#ifndef uint16_t
#if (UINT_MAX == UINT16_MAX) || defined (S_SPLINT_S)
typedef unsigned int uint16_t;
# ifndef PRINTF_INT16_MODIFIER
# define PRINTF_INT16_MODIFIER ""
# endif
# define UINT16_C(v) ((uint16_t) (v))
#elif (USHRT_MAX == UINT16_MAX)
typedef unsigned short uint16_t;
# define UINT16_C(v) ((uint16_t) (v))
# ifndef PRINTF_INT16_MODIFIER
# define PRINTF_INT16_MODIFIER "h"
# endif
#else
#error "Platform not supported"
#endif
#endif
#ifndef INT16_MAX
# define INT16_MAX 0x7fff
#endif
#ifndef INT16_MIN
# define INT16_MIN INT16_C(0x8000)
#endif
#ifndef int16_t
#if (INT_MAX == INT16_MAX) || defined (S_SPLINT_S)
typedef signed int int16_t;
# define INT16_C(v) ((int16_t) (v))
# ifndef PRINTF_INT16_MODIFIER
# define PRINTF_INT16_MODIFIER ""
# endif
#elif (SHRT_MAX == INT16_MAX)
typedef signed short int16_t;
# define INT16_C(v) ((int16_t) (v))
# ifndef PRINTF_INT16_MODIFIER
# define PRINTF_INT16_MODIFIER "h"
# endif
#else
#error "Platform not supported"
#endif
#endif
#ifndef UINT32_MAX
# define UINT32_MAX (0xffffffffUL)
#endif
#ifndef uint32_t
#if (ULONG_MAX == UINT32_MAX) || defined (S_SPLINT_S)
typedef unsigned long uint32_t;
# define UINT32_C(v) v ## UL
# ifndef PRINTF_INT32_MODIFIER
# define PRINTF_INT32_MODIFIER "l"
# endif
#elif (UINT_MAX == UINT32_MAX)
typedef unsigned int uint32_t;
# ifndef PRINTF_INT32_MODIFIER
# define PRINTF_INT32_MODIFIER ""
# endif
# define UINT32_C(v) v ## U
#elif (USHRT_MAX == UINT32_MAX)
typedef unsigned short uint32_t;
# define UINT32_C(v) ((unsigned short) (v))
# ifndef PRINTF_INT32_MODIFIER
# define PRINTF_INT32_MODIFIER ""
# endif
#else
#error "Platform not supported"
#endif
#endif
#ifndef INT32_MAX
# define INT32_MAX (0x7fffffffL)
#endif
#ifndef INT32_MIN
# define INT32_MIN INT32_C(0x80000000)
#endif
#ifndef int32_t
#if (LONG_MAX == INT32_MAX) || defined (S_SPLINT_S)
typedef signed long int32_t;
# define INT32_C(v) v ## L
# ifndef PRINTF_INT32_MODIFIER
# define PRINTF_INT32_MODIFIER "l"
# endif
#elif (INT_MAX == INT32_MAX)
typedef signed int int32_t;
# define INT32_C(v) v
# ifndef PRINTF_INT32_MODIFIER
# define PRINTF_INT32_MODIFIER ""
# endif
#elif (SHRT_MAX == INT32_MAX)
typedef signed short int32_t;
# define INT32_C(v) ((short) (v))
# ifndef PRINTF_INT32_MODIFIER
# define PRINTF_INT32_MODIFIER ""
# endif
#else
#error "Platform not supported"
#endif
#endif
/*
* The macro stdint_int64_defined is temporarily used to record
* whether or not 64 integer support is available. It must be
* defined for any 64 integer extensions for new platforms that are
* added.
*/
#undef stdint_int64_defined
#if (defined(__STDC__) && defined(__STDC_VERSION__)) || defined (S_SPLINT_S)
# if (__STDC__ && __STDC_VERSION__ >= 199901L) || defined (S_SPLINT_S)
# define stdint_int64_defined
typedef long long int64_t;
typedef unsigned long long uint64_t;
# define UINT64_C(v) v ## ULL
# define INT64_C(v) v ## LL
# ifndef PRINTF_INT64_MODIFIER
# define PRINTF_INT64_MODIFIER "ll"
# endif
# endif
#endif
#if !defined (stdint_int64_defined)
# if defined(__GNUC__)
# define stdint_int64_defined
__extension__ typedef long long int64_t;
__extension__ typedef unsigned long long uint64_t;
# define UINT64_C(v) v ## ULL
# define INT64_C(v) v ## LL
# ifndef PRINTF_INT64_MODIFIER
# define PRINTF_INT64_MODIFIER "ll"
# endif
# elif defined(__MWERKS__) || defined (__SUNPRO_C) || defined (__SUNPRO_CC) || defined (__APPLE_CC__) || defined (_LONG_LONG) || defined (_CRAYC) || defined (S_SPLINT_S)
# define stdint_int64_defined
typedef long long int64_t;
typedef unsigned long long uint64_t;
# define UINT64_C(v) v ## ULL
# define INT64_C(v) v ## LL
# ifndef PRINTF_INT64_MODIFIER
# define PRINTF_INT64_MODIFIER "ll"
# endif
# elif (defined(__WATCOMC__) && defined(__WATCOM_INT64__)) || (defined(_MSC_VER) && _INTEGRAL_MAX_BITS >= 64) || (defined (__BORLANDC__) && __BORLANDC__ > 0x460) || defined (__alpha) || defined (__DECC)
# define stdint_int64_defined
typedef __int64 int64_t;
typedef unsigned __int64 uint64_t;
# define UINT64_C(v) v ## UI64
# define INT64_C(v) v ## I64
# ifndef PRINTF_INT64_MODIFIER
# define PRINTF_INT64_MODIFIER "I64"
# endif
# endif
#endif
#if !defined (LONG_LONG_MAX) && defined (INT64_C)
# define LONG_LONG_MAX INT64_C (9223372036854775807)
#endif
#ifndef ULONG_LONG_MAX
# define ULONG_LONG_MAX UINT64_C (18446744073709551615)
#endif
#if !defined (INT64_MAX) && defined (INT64_C)
# define INT64_MAX INT64_C (9223372036854775807)
#endif
#if !defined (INT64_MIN) && defined (INT64_C)
# define INT64_MIN INT64_C (-9223372036854775808)
#endif
#if !defined (UINT64_MAX) && defined (INT64_C)
# define UINT64_MAX UINT64_C (18446744073709551615)
#endif
/*
* Width of hexadecimal for number field.
*/
#ifndef PRINTF_INT64_HEX_WIDTH
# define PRINTF_INT64_HEX_WIDTH "16"
#endif
#ifndef PRINTF_INT32_HEX_WIDTH
# define PRINTF_INT32_HEX_WIDTH "8"
#endif
#ifndef PRINTF_INT16_HEX_WIDTH
# define PRINTF_INT16_HEX_WIDTH "4"
#endif
#ifndef PRINTF_INT8_HEX_WIDTH
# define PRINTF_INT8_HEX_WIDTH "2"
#endif
#ifndef PRINTF_INT64_DEC_WIDTH
# define PRINTF_INT64_DEC_WIDTH "20"
#endif
#ifndef PRINTF_INT32_DEC_WIDTH
# define PRINTF_INT32_DEC_WIDTH "10"
#endif
#ifndef PRINTF_INT16_DEC_WIDTH
# define PRINTF_INT16_DEC_WIDTH "5"
#endif
#ifndef PRINTF_INT8_DEC_WIDTH
# define PRINTF_INT8_DEC_WIDTH "3"
#endif
/*
* Ok, lets not worry about 128 bit integers for now. Moore's law says
* we don't need to worry about that until about 2040 at which point
* we'll have bigger things to worry about.
*/
#ifdef stdint_int64_defined
typedef int64_t intmax_t;
typedef uint64_t uintmax_t;
# define INTMAX_MAX INT64_MAX
# define INTMAX_MIN INT64_MIN
# define UINTMAX_MAX UINT64_MAX
# define UINTMAX_C(v) UINT64_C(v)
# define INTMAX_C(v) INT64_C(v)
# ifndef PRINTF_INTMAX_MODIFIER
# define PRINTF_INTMAX_MODIFIER PRINTF_INT64_MODIFIER
# endif
# ifndef PRINTF_INTMAX_HEX_WIDTH
# define PRINTF_INTMAX_HEX_WIDTH PRINTF_INT64_HEX_WIDTH
# endif
# ifndef PRINTF_INTMAX_DEC_WIDTH
# define PRINTF_INTMAX_DEC_WIDTH PRINTF_INT64_DEC_WIDTH
# endif
#else
typedef int32_t intmax_t;
typedef uint32_t uintmax_t;
# define INTMAX_MAX INT32_MAX
# define UINTMAX_MAX UINT32_MAX
# define UINTMAX_C(v) UINT32_C(v)
# define INTMAX_C(v) INT32_C(v)
# ifndef PRINTF_INTMAX_MODIFIER
# define PRINTF_INTMAX_MODIFIER PRINTF_INT32_MODIFIER
# endif
# ifndef PRINTF_INTMAX_HEX_WIDTH
# define PRINTF_INTMAX_HEX_WIDTH PRINTF_INT32_HEX_WIDTH
# endif
# ifndef PRINTF_INTMAX_DEC_WIDTH
# define PRINTF_INTMAX_DEC_WIDTH PRINTF_INT32_DEC_WIDTH
# endif
#endif
/*
* Because this file currently only supports platforms which have
* precise powers of 2 as bit sizes for the default integers, the
* least definitions are all trivial. Its possible that a future
* version of this file could have different definitions.
*/
#ifndef stdint_least_defined
typedef int8_t int_least8_t;
typedef uint8_t uint_least8_t;
typedef int16_t int_least16_t;
typedef uint16_t uint_least16_t;
typedef int32_t int_least32_t;
typedef uint32_t uint_least32_t;
# define PRINTF_LEAST32_MODIFIER PRINTF_INT32_MODIFIER
# define PRINTF_LEAST16_MODIFIER PRINTF_INT16_MODIFIER
# define UINT_LEAST8_MAX UINT8_MAX
# define INT_LEAST8_MAX INT8_MAX
# define UINT_LEAST16_MAX UINT16_MAX
# define INT_LEAST16_MAX INT16_MAX
# define UINT_LEAST32_MAX UINT32_MAX
# define INT_LEAST32_MAX INT32_MAX
# define INT_LEAST8_MIN INT8_MIN
# define INT_LEAST16_MIN INT16_MIN
# define INT_LEAST32_MIN INT32_MIN
# ifdef stdint_int64_defined
typedef int64_t int_least64_t;
typedef uint64_t uint_least64_t;
# define PRINTF_LEAST64_MODIFIER PRINTF_INT64_MODIFIER
# define UINT_LEAST64_MAX UINT64_MAX
# define INT_LEAST64_MAX INT64_MAX
# define INT_LEAST64_MIN INT64_MIN
# endif
#endif
#undef stdint_least_defined
/*
* The ANSI C committee pretending to know or specify anything about
* performance is the epitome of misguided arrogance. The mandate of
* this file is to *ONLY* ever support that absolute minimum
* definition of the fast integer types, for compatibility purposes.
* No extensions, and no attempt to suggest what may or may not be a
* faster integer type will ever be made in this file. Developers are
* warned to stay away from these types when using this or any other
* stdint.h.
*/
typedef int_least8_t int_fast8_t;
typedef uint_least8_t uint_fast8_t;
typedef int_least16_t int_fast16_t;
typedef uint_least16_t uint_fast16_t;
typedef int_least32_t int_fast32_t;
typedef uint_least32_t uint_fast32_t;
#define UINT_FAST8_MAX UINT_LEAST8_MAX
#define INT_FAST8_MAX INT_LEAST8_MAX
#define UINT_FAST16_MAX UINT_LEAST16_MAX
#define INT_FAST16_MAX INT_LEAST16_MAX
#define UINT_FAST32_MAX UINT_LEAST32_MAX
#define INT_FAST32_MAX INT_LEAST32_MAX
#define INT_FAST8_MIN INT_LEAST8_MIN
#define INT_FAST16_MIN INT_LEAST16_MIN
#define INT_FAST32_MIN INT_LEAST32_MIN
#ifdef stdint_int64_defined
typedef int_least64_t int_fast64_t;
typedef uint_least64_t uint_fast64_t;
# define UINT_FAST64_MAX UINT_LEAST64_MAX
# define INT_FAST64_MAX INT_LEAST64_MAX
# define INT_FAST64_MIN INT_LEAST64_MIN
#endif
#undef stdint_int64_defined
/*
* Whatever piecemeal, per compiler thing we can do about the wchar_t
* type limits.
*/
#if defined(__WATCOMC__) || defined(_MSC_VER) || defined (__GNUC__)
# include <wchar.h>
# ifndef WCHAR_MIN
# define WCHAR_MIN 0
# endif
# ifndef WCHAR_MAX
# define WCHAR_MAX ((wchar_t)-1)
# endif
#endif
/*
* Whatever piecemeal, per compiler/platform thing we can do about the
* (u)intptr_t types and limits.
*/
#if defined (_MSC_VER) && defined (_UINTPTR_T_DEFINED)
# define STDINT_H_UINTPTR_T_DEFINED
#endif
#ifndef STDINT_H_UINTPTR_T_DEFINED
# if defined (__alpha__) || defined (__ia64__) || defined (__x86_64__) || defined (_WIN64)
# define stdint_intptr_bits 64
# elif defined (__WATCOMC__) || defined (__TURBOC__)
# if defined(__TINY__) || defined(__SMALL__) || defined(__MEDIUM__)
# define stdint_intptr_bits 16
# else
# define stdint_intptr_bits 32
# endif
# elif defined (__i386__) || defined (_WIN32) || defined (WIN32)
# define stdint_intptr_bits 32
# elif defined (__INTEL_COMPILER)
/* TODO -- what did Intel do about x86-64? */
# endif
# ifdef stdint_intptr_bits
# define stdint_intptr_glue3_i(a,b,c) a##b##c
# define stdint_intptr_glue3(a,b,c) stdint_intptr_glue3_i(a,b,c)
# ifndef PRINTF_INTPTR_MODIFIER
# define PRINTF_INTPTR_MODIFIER stdint_intptr_glue3(PRINTF_INT,stdint_intptr_bits,_MODIFIER)
# endif
# ifndef PTRDIFF_MAX
# define PTRDIFF_MAX stdint_intptr_glue3(INT,stdint_intptr_bits,_MAX)
# endif
# ifndef PTRDIFF_MIN
# define PTRDIFF_MIN stdint_intptr_glue3(INT,stdint_intptr_bits,_MIN)
# endif
# ifndef UINTPTR_MAX
# define UINTPTR_MAX stdint_intptr_glue3(UINT,stdint_intptr_bits,_MAX)
# endif
# ifndef INTPTR_MAX
# define INTPTR_MAX stdint_intptr_glue3(INT,stdint_intptr_bits,_MAX)
# endif
# ifndef INTPTR_MIN
# define INTPTR_MIN stdint_intptr_glue3(INT,stdint_intptr_bits,_MIN)
# endif
# ifndef INTPTR_C
# define INTPTR_C(x) stdint_intptr_glue3(INT,stdint_intptr_bits,_C)(x)
# endif
# ifndef UINTPTR_C
# define UINTPTR_C(x) stdint_intptr_glue3(UINT,stdint_intptr_bits,_C)(x)
# endif
typedef stdint_intptr_glue3(uint,stdint_intptr_bits,_t) uintptr_t;
typedef stdint_intptr_glue3( int,stdint_intptr_bits,_t) intptr_t;
# else
/* TODO -- This following is likely wrong for some platforms, and does
nothing for the definition of uintptr_t. */
typedef ptrdiff_t intptr_t;
# endif
# define STDINT_H_UINTPTR_T_DEFINED
#endif
/*
* Assumes sig_atomic_t is signed and we have a 2s complement machine.
*/
#ifndef SIG_ATOMIC_MAX
# define SIG_ATOMIC_MAX ((((sig_atomic_t) 1) << (sizeof (sig_atomic_t)*CHAR_BIT-1)) - 1)
#endif
#endif
#if defined (__TEST_PSTDINT_FOR_CORRECTNESS)
/*
* Please compile with the maximum warning settings to make sure macros are not
* defined more than once.
*/
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define glue3_aux(x,y,z) x ## y ## z
#define glue3(x,y,z) glue3_aux(x,y,z)
#define DECLU(bits) glue3(uint,bits,_t) glue3(u,bits,=) glue3(UINT,bits,_C) (0);
#define DECLI(bits) glue3(int,bits,_t) glue3(i,bits,=) glue3(INT,bits,_C) (0);
#define DECL(us,bits) glue3(DECL,us,) (bits)
#define TESTUMAX(bits) glue3(u,bits,=) glue3(~,u,bits); if (glue3(UINT,bits,_MAX) glue3(!=,u,bits)) printf ("Something wrong with UINT%d_MAX\n", bits)
int main () {
DECL(I,8)
DECL(U,8)
DECL(I,16)
DECL(U,16)
DECL(I,32)
DECL(U,32)
#ifdef INT64_MAX
DECL(I,64)
DECL(U,64)
#endif
intmax_t imax = INTMAX_C(0);
uintmax_t umax = UINTMAX_C(0);
char str0[256], str1[256];
sprintf (str0, "%d %x\n", 0, ~0);
sprintf (str1, "%d %x\n", i8, ~0);
if (0 != strcmp (str0, str1)) printf ("Something wrong with i8 : %s\n", str1);
sprintf (str1, "%u %x\n", u8, ~0);
if (0 != strcmp (str0, str1)) printf ("Something wrong with u8 : %s\n", str1);
sprintf (str1, "%d %x\n", i16, ~0);
if (0 != strcmp (str0, str1)) printf ("Something wrong with i16 : %s\n", str1);
sprintf (str1, "%u %x\n", u16, ~0);
if (0 != strcmp (str0, str1)) printf ("Something wrong with u16 : %s\n", str1);
sprintf (str1, "%" PRINTF_INT32_MODIFIER "d %x\n", i32, ~0);
if (0 != strcmp (str0, str1)) printf ("Something wrong with i32 : %s\n", str1);
sprintf (str1, "%" PRINTF_INT32_MODIFIER "u %x\n", u32, ~0);
if (0 != strcmp (str0, str1)) printf ("Something wrong with u32 : %s\n", str1);
#ifdef INT64_MAX
sprintf (str1, "%" PRINTF_INT64_MODIFIER "d %x\n", i64, ~0);
if (0 != strcmp (str0, str1)) printf ("Something wrong with i64 : %s\n", str1);
#endif
sprintf (str1, "%" PRINTF_INTMAX_MODIFIER "d %x\n", imax, ~0);
if (0 != strcmp (str0, str1)) printf ("Something wrong with imax : %s\n", str1);
sprintf (str1, "%" PRINTF_INTMAX_MODIFIER "u %x\n", umax, ~0);
if (0 != strcmp (str0, str1)) printf ("Something wrong with umax : %s\n", str1);
TESTUMAX(8);
TESTUMAX(16);
TESTUMAX(32);
#ifdef INT64_MAX
TESTUMAX(64);
#endif
return EXIT_SUCCESS;
}
#endif
+431 -71
View File
@@ -1,93 +1,453 @@
/* Modular support
*
* (C) 2008-2009 Anope Team
* (C) 2008-2012 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
*
* $Id$
*
*/
class ChannelInfo : public Extensible
#ifndef REGCHANNEL_H
#define REGCHANNEL_H
typedef Anope::insensitive_map<ChannelInfo *> registered_channel_map;
extern CoreExport registered_channel_map RegisteredChannelList;
/** Flags used for the ChannelInfo class
*/
enum ChannelInfoFlag
{
CI_BEGIN,
/* Retain the topic even after the channel is emptied */
CI_KEEPTOPIC,
/* Don't allow non-authorized users to be opped */
CI_SECUREOPS,
/* Hide channel from ChanServ LIST command */
CI_PRIVATE,
/* Topic can only be changed by SET TOPIC */
CI_TOPICLOCK,
/* Only users on the access list may join */
CI_RESTRICTED,
/* Don't allow ChanServ and BotServ commands to do bad things to users with higher access levels */
CI_PEACE,
/* Don't allow any privileges unless a user is IDENTIFIED with NickServ */
CI_SECURE,
/* Channel does not expire */
CI_NO_EXPIRE,
/* Channel memo limit may not be changed */
CI_MEMO_HARDMAX,
/* Stricter control of channel founder status */
CI_SECUREFOUNDER,
/* Sign kicks with the user who did the kick */
CI_SIGNKICK,
/* Sign kicks if level is < than the one defined by the SIGNKIGK level */
CI_SIGNKICK_LEVEL,
/* Channel is suspended */
CI_SUSPENDED,
/* Channel still exists when emptied, this can be caused by setting a perm
* channel mode (+P on InspIRCd) or /cs set #chan persist on.
* This keeps the service bot in the channel regardless if a +P type mode
* is set or not
*/
CI_PERSIST,
CI_END
};
const Anope::string ChannelInfoFlagStrings[] = {
"BEGIN", "KEEPTOPIC", "SECUREOPS", "PRIVATE", "TOPICLOCK", "RESTRICTED",
"PEACE", "SECURE", "NO_EXPIRE", "MEMO_HARDMAX", "SECUREFOUNDER",
"SIGNKICK", "SIGNKICK_LEVEL", "SUSPENDED", "PERSIST", ""
};
/** Flags for badwords
*/
enum BadWordType
{
/* Always kicks if the word is said */
BW_ANY,
/* User must way the entire word */
BW_SINGLE,
/* The word has to start with the badword */
BW_START,
/* The word has to end with the badword */
BW_END
};
/* Structure used to contain bad words. */
struct CoreExport BadWord : Serializable
{
ChannelInfo *ci;
Anope::string word;
BadWordType type;
Anope::string serialize_name() const;
serialized_data serialize();
static void unserialize(serialized_data &);
};
/** Flags for auto kick
*/
enum AutoKickFlag
{
/* Is by nick core, not mask */
AK_ISNICK
};
const Anope::string AutoKickFlagString[] = { "AK_ISNICK", "" };
/* AutoKick data. */
class CoreExport AutoKick : public Flags<AutoKickFlag>, public Serializable
{
public:
ChannelInfo()
{
next = prev = NULL;
founderpass[0] = name[0] = last_topic_setter[0] = '\0';
founder = successor = NULL;
desc = url = email = last_topic = forbidby = forbidreason = NULL;
time_registered = last_used = last_topic_time = 0;
flags = 0;
bantype = accesscount = akickcount = 0;
levels = NULL;
access = NULL;
akick = NULL;
mlock_on = mlock_off = mlock_limit = 0;
mlock_key = mlock_flood = mlock_redirect = entry_message = NULL;
c = NULL;
bi = NULL;
botflags = 0;
ttb = NULL;
bwcount = 0;
badwords = NULL;
capsmin = capspercent = 0;
floodlines = floodsecs = 0;
repeattimes = 0;
}
ChannelInfo *next, *prev;
char name[CHANMAX];
NickCore *founder;
NickCore *successor; /* Who gets the channel if the founder
* nick is dropped or expires */
char founderpass[PASSMAX];
char *desc;
char *url;
char *email;
AutoKick();
ChannelInfo *ci;
/* Only one of these can be in use */
Anope::string mask;
NickCore *nc;
Anope::string reason;
Anope::string creator;
time_t addtime;
time_t last_used;
Anope::string serialize_name() const;
serialized_data serialize();
static void unserialize(serialized_data &);
};
struct CoreExport ModeLock : Serializable
{
public:
ChannelInfo *ci;
bool set;
ChannelModeName name;
Anope::string param;
Anope::string setter;
time_t created;
ModeLock(ChannelInfo *ch, bool s, ChannelModeName n, const Anope::string &p, const Anope::string &se = "", time_t c = Anope::CurTime);
Anope::string serialize_name() const;
serialized_data serialize();
static void unserialize(serialized_data &);
};
struct CoreExport LogSetting : Serializable
{
ChannelInfo *ci;
/* Our service name of the command */
Anope::string service_name;
/* The name of the client the command is on */
Anope::string command_service;
/* Name of the command to the user, can have spaces */
Anope::string command_name;
Anope::string method, extra;
Anope::string creator;
time_t created;
Anope::string serialize_name() const;
serialized_data serialize();
static void unserialize(serialized_data &);
};
class CoreExport ChannelInfo : public Extensible, public Flags<ChannelInfoFlag, CI_END>, public Serializable
{
private:
NickCore *founder; /* Channel founder */
std::vector<ChanAccess *> access; /* List of authorized users */
std::vector<AutoKick *> akick; /* List of users to kickban */
std::vector<BadWord *> badwords; /* List of badwords */
std::map<Anope::string, int16_t> levels;
public:
typedef std::multimap<ChannelModeName, ModeLock> ModeList;
ModeList mode_locks;
std::vector<LogSetting> log_settings;
/** Default constructor
* @param chname The channel name
*/
ChannelInfo(const Anope::string &chname);
/** Copy constructor
* @param ci The ChannelInfo to copy settings to
*/
ChannelInfo(ChannelInfo &ci);
/** Default destructor
*/
~ChannelInfo();
Anope::string name; /* Channel name */
NickCore *successor; /* Who gets the channel if the founder nick is dropped or expires */
Anope::string desc;
time_t time_registered;
time_t last_used;
char *last_topic; /* Last topic on the channel */
char last_topic_setter[NICKMAX]; /* Who set the last topic */
time_t last_topic_time; /* When the last topic was set */
uint32 flags; /* See below */
char *forbidby;
char *forbidreason;
Anope::string last_topic; /* The last topic that was set on this channel */
Anope::string last_topic_setter; /* Setter */
time_t last_topic_time; /* Time */
int16 bantype;
int16 *levels; /* Access levels for commands */
uint16 accesscount;
ChanAccess *access; /* List of authorized users */
uint16 akickcount;
AutoKick *akick; /* List of users to kickban */
uint32 mlock_on, mlock_off; /* See channel modes below */
uint32 mlock_limit; /* 0 if no limit */
char *mlock_key; /* NULL if no key */
char *mlock_flood; /* NULL if no +f */
char *mlock_redirect; /* NULL if no +L */
char *entry_message; /* Notice sent on entering channel */
int16_t bantype;
MemoInfo memos;
struct channel_ *c; /* Pointer to channel record (if *
* channel is currently in use) */
Channel *c; /* Pointer to channel record (if channel is currently in use) */
/* For BotServ */
BotInfo *bi; /* Bot used on this channel */
uint32 botflags; /* BS_* below */
int16 *ttb; /* Times to ban for each kicker */
Flags<BotServFlag> botflags;
int16_t ttb[TTB_SIZE]; /* Times to ban for each kicker */
uint16 bwcount;
BadWord *badwords; /* For BADWORDS kicker */
int16 capsmin, capspercent; /* For CAPS kicker */
int16 floodlines, floodsecs; /* For FLOOD kicker */
int16 repeattimes; /* For REPEAT kicker */
int16_t capsmin, capspercent; /* For CAPS kicker */
int16_t floodlines, floodsecs; /* For FLOOD kicker */
int16_t repeattimes; /* For REPEAT kicker */
Anope::string serialize_name() const;
serialized_data serialize();
static void unserialize(serialized_data &);
/** Change the founder of the channek
* @params nc The new founder
*/
void SetFounder(NickCore *nc);
/** Get the founder of the channel
* @return The founder
*/
NickCore *GetFounder() const;
/** Find which bot should send mode/topic/etc changes for this channel
* @return The bot
*/
BotInfo *WhoSends();
/** Add an entry to the channel access list
* @param access The entry
*/
void AddAccess(ChanAccess *access);
/** Get an entry from the channel access list by index
*
* @param index The index in the access list vector
* @return A ChanAccess struct corresponding to the index given, or NULL if outside the bounds
*
* Retrieves an entry from the access list that matches the given index.
*/
ChanAccess *GetAccess(unsigned index);
/** Retrieve the access for a user or group in the form of a vector of access entries
* (as multiple entries can affect a single user).
*/
AccessGroup AccessFor(User *u);
AccessGroup AccessFor(NickCore *nc);
/** Get the size of the accss vector for this channel
* @return The access vector size
*/
unsigned GetAccessCount() const;
/** Erase an entry from the channel access list
*
* @param index The index in the access list vector
*
* Clears the memory used by the given access entry and removes it from the vector.
*/
void EraseAccess(unsigned index);
/** Erase an entry from the channel access list
*
* @param taccess The access to remove
*
* Clears the memory used by the given access entry and removes it from the vector.
*/
void EraseAccess(ChanAccess *taccess);
/** Clear the entire channel access list
*
* Clears the entire access list by deleting every item and then clearing the vector.
*/
void ClearAccess();
/** Add an akick entry to the channel by NickCore
* @param user The user who added the akick
* @param akicknc The nickcore being akicked
* @param reason The reason for the akick
* @param t The time the akick was added, defaults to now
* @param lu The time the akick was last used, defaults to never
*/
AutoKick *AddAkick(const Anope::string &user, NickCore *akicknc, const Anope::string &reason, time_t t = Anope::CurTime, time_t lu = 0);
/** Add an akick entry to the channel by reason
* @param user The user who added the akick
* @param mask The mask of the akick
* @param reason The reason for the akick
* @param t The time the akick was added, defaults to now
* @param lu The time the akick was last used, defaults to never
*/
AutoKick *AddAkick(const Anope::string &user, const Anope::string &mask, const Anope::string &reason, time_t t = Anope::CurTime, time_t lu = 0);
/** Get an entry from the channel akick list
* @param index The index in the akick vector
* @return The akick structure, or NULL if not found
*/
AutoKick *GetAkick(unsigned index);
/** Get the size of the akick vector for this channel
* @return The akick vector size
*/
unsigned GetAkickCount() const;
/** Erase an entry from the channel akick list
* @param index The index of the akick
*/
void EraseAkick(unsigned index);
/** Clear the whole akick list
*/
void ClearAkick();
/** Add a badword to the badword list
* @param word The badword
* @param type The type (SINGLE START END)
* @return The badword
*/
BadWord *AddBadWord(const Anope::string &word, BadWordType type);
/** Get a badword structure by index
* @param index The index
* @return The badword
*/
BadWord *GetBadWord(unsigned index);
/** Get how many badwords are on this channel
* @return The number of badwords in the vector
*/
unsigned GetBadWordCount() const;
/** Remove a badword
* @param index The index of the badword
*/
void EraseBadWord(unsigned index);
/** Clear all badwords from the channel
*/
void ClearBadWords();
/** Check if a mode is mlocked
* @param mode The mode
* @param An optional param
* @param status True to check mlock on, false for mlock off
* @return true on success, false on fail
*/
bool HasMLock(ChannelMode *mode, const Anope::string &param, bool status) const;
/** Set a mlock
* @param mode The mode
* @param status True for mlock on, false for mlock off
* @param param An optional param arg for + mlocked modes
* @param setter Who is setting the mlock
* @param created When the mlock was created
* @return true on success, false on failure (module blocking)
*/
bool SetMLock(ChannelMode *mode, bool status, const Anope::string &param = "", Anope::string setter = "", time_t created = Anope::CurTime);
/** Remove a mlock
* @param mode The mode
* @param param The param of the mode, required if it is a list or status mode
* @return true on success, false on failure
*/
bool RemoveMLock(ChannelMode *mode, const Anope::string &param = "");
/** Clear all mlocks on the channel
*/
void ClearMLock();
/** Get all of the mlocks for this channel
* @return The mlocks
*/
const std::multimap<ChannelModeName, ModeLock> &GetMLock() const;
/** Get a list of modes on a channel
* @param Name The mode name to get a list of
* @return a pair of iterators for the beginning and end of the list
*/
std::pair<ModeList::iterator, ModeList::iterator> GetModeList(ChannelModeName Name);
/** Get details for a specific mlock
* @param mname The mode name
* @param An optional param to match with
* @return The MLock, if any
*/
ModeLock *GetMLock(ChannelModeName mname, const Anope::string &param = "");
/** Get the current mode locks as a string
* @param complete True to show mlock parameters aswell
* @return A string of mode locks, eg: +nrt
*/
Anope::string GetMLockAsString(bool complete) const;
/** Check whether a user is permitted to be on this channel
* @param u The user
* @return true if they are allowed, false if they aren't and were kicked
*/
bool CheckKick(User *user);
/** Check the channel topic
* If topic lock is enabled will change the topic back, else it records
* the new topic in the ChannelInfo
*/
void CheckTopic();
/** Restore the channel topic, used on channel creation when not syncing with the uplink
* and after uplink sync
*/
void RestoreTopic();
/** Get the level for a privilege
* @param priv The privilege name
* @return the level
* @throws CoreException if priv is not a valid privilege
*/
int16_t GetLevel(const Anope::string &priv);
/** Set the level for a privilege
* @param priv The privilege priv
* @param level The new level
*/
void SetLevel(const Anope::string &priv, int16_t level);
/** Remove a privilege from the channel
* @param priv The privilege
*/
void RemoveLevel(const Anope::string &priv);
/** Clear all privileges from the channel
*/
void ClearLevels();
};
/** A timer used to keep the BotServ bot/ChanServ in the channel
* after kicking the last user in a channel
*/
class CoreExport ChanServTimer : public Timer
{
private:
dynamic_reference<Channel> c;
public:
/** Default constructor
* @param chan The channel
*/
ChanServTimer(Channel *chan);
/** Called when the delay is up
* @param The current time
*/
void Tick(time_t);
};
#endif // REGCHANNEL_H
+159
View File
@@ -0,0 +1,159 @@
#ifndef SERIALIZE_H
#define SERIALIZE_H
namespace Serialize
{
enum DataType
{
DT_TEXT,
DT_INT
};
class stringstream : public std::stringstream
{
private:
DataType type;
bool key;
unsigned _max;
public:
stringstream() : std::stringstream(), type(DT_TEXT), key(false), _max(0) { }
stringstream(const stringstream &ss) : std::stringstream(ss.str()), type(DT_TEXT), key(false), _max(0) { }
Anope::string astr() const { return this->str(); }
template<typename T> std::istream &operator>>(T &val)
{
std::istringstream is(this->str());
is >> val;
return *this;
}
std::istream &operator>>(Anope::string &val)
{
val = this->str();
return *this;
}
stringstream &setType(DataType t)
{
this->type = t;
return *this;
}
DataType getType() const
{
return this->type;
}
stringstream &setKey()
{
this->key = true;
return *this;
}
bool getKey() const
{
return this->key;
}
stringstream &setMax(unsigned m)
{
this->_max = m;
return *this;
}
unsigned getMax() const
{
return this->_max;
}
};
}
extern void RegisterTypes();
class CoreExport Serializable
{
private:
static std::list<Serializable *> *serizliable_items;
std::list<Serializable *>::iterator s_iter;
protected:
Serializable()
{
if (serizliable_items == NULL)
serizliable_items = new std::list<Serializable *>();
serizliable_items->push_front(this);
this->s_iter = serizliable_items->begin();
}
Serializable(const Serializable &)
{
serizliable_items->push_front(this);
this->s_iter = serizliable_items->begin();
}
virtual ~Serializable()
{
serizliable_items->erase(this->s_iter);
}
Serializable &operator=(const Serializable &)
{
return *this;
}
public:
typedef std::map<Anope::string, Serialize::stringstream> serialized_data;
virtual Anope::string serialize_name() const = 0;
virtual serialized_data serialize() = 0;
static const std::list<Serializable *> &GetItems()
{
return *serizliable_items;
}
};
class CoreExport SerializeType
{
typedef void (*unserialize_func)(Serializable::serialized_data &);
static std::vector<Anope::string> type_order;
static Anope::map<SerializeType *> types;
Anope::string name;
unserialize_func unserialize;
public:
SerializeType(const Anope::string &n, unserialize_func f) : name(n), unserialize(f)
{
type_order.push_back(this->name);
types[this->name] = this;
}
~SerializeType()
{
std::vector<Anope::string>::iterator it = std::find(type_order.begin(), type_order.end(), this->name);
if (it != type_order.end())
type_order.erase(it);
types.erase(this->name);
}
const Anope::string &GetName()
{
return this->name;
}
void Create(Serializable::serialized_data &data)
{
this->unserialize(data);
}
static SerializeType *Find(const Anope::string &name)
{
Anope::map<SerializeType *>::iterator it = types.find(name);
if (it != types.end())
return it->second;
return NULL;
}
static const std::vector<Anope::string> &GetTypeOrder()
{
return type_order;
}
};
#endif // SERIALIZE_H
+147
View File
@@ -0,0 +1,147 @@
#ifndef SERVERS_H
#define SERVERS_H
/* Anope */
extern CoreExport Server *Me;
extern CoreExport void do_server(const Anope::string &source, const Anope::string &servername, unsigned int hops, const Anope::string &descript, const Anope::string &numeric);
extern CoreExport const Anope::string ts6_uid_retrieve();
extern CoreExport const Anope::string ts6_sid_retrieve();
extern CoreExport std::set<Anope::string> Capab;
/** Flags set on servers
*/
enum ServerFlag
{
SERVER_NONE,
/* Server is syncing */
SERVER_SYNCING,
/* This server was juped */
SERVER_JUPED
};
const Anope::string ServerFlagStrings[] = { "SERVER_NONE", "SERVER_SYNCING", "SERVER_JUPED", "" };
/** Class representing a server
*/
class CoreExport Server : public Flags<ServerFlag>
{
private:
/* Server name */
Anope::string Name;
/* Hops between services and server */
unsigned int Hops;
/* Server description */
Anope::string Description;
/* Server ID */
Anope::string SID;
/* Links for this server */
std::vector<Server *> Links;
/* Uplink for this server */
Server *UplinkServer;
/* Reason this server was quit */
Anope::string QReason;
public:
/** Constructor
* @param uplink The uplink this server is from, is only NULL when creating Me
* @param name The server name
* @param hops Hops from services server
* @param description Server rdescription
* @param sid Server sid/numeric
* @param flag An optional server flag
*/
Server(Server *uplink, const Anope::string &name, unsigned hops, const Anope::string &description, const Anope::string &sid, ServerFlag flag = SERVER_NONE);
/** Destructor
*/
~Server();
/** Delete this server with a reason
* @param reason The reason
*/
void Delete(const Anope::string &reason);
/** Get the name for this server
* @return The name
*/
const Anope::string &GetName() const;
/** Get the number of hops this server is from services
* @return Number of hops
*/
unsigned GetHops() const;
/** Set the server description
* @param desc The new description
*/
void SetDescription(const Anope::string &desc);
/** Get the server description
* @return The server description
*/
const Anope::string &GetDescription() const;
/** Change this servers SID
* @param sid The new SID
*/
void SetSID(const Anope::string &sid);
/** Get the server numeric/SID
* @return The numeric/SID
*/
const Anope::string &GetSID() const;
/** Get the list of links this server has, or NULL if it has none
* @return A list of servers
*/
const std::vector<Server *> &GetLinks() const;
/** Get the uplink server for this server, if this is our uplink will be Me
* @return The servers uplink
*/
Server *GetUplink();
/** Adds a link to this server
* @param s The linking server
*/
void AddLink(Server *s);
/** Delinks a server from this server
* @param s The server
*/
void DelLink(Server *s);
/** Finish syncing this server and optionally all links to it
* @param SyncLinks True to sync the links for this server too (if any)
*/
void Sync(bool SyncLinks);
/** Check if this server is synced
* @return true or false
*/
bool IsSynced() const;
/** Check if this server is ULined
* @return true or false
*/
bool IsULined() const;
/** Send a message to alll users on this server
* @param source The source of the message
* @param message The message
*/
void Notice(BotInfo *source, const Anope::string &message);
/** Find a server
* @param name The name or SID/numeric
* @param s The server list to search for this server on, defaults to our Uplink
* @return The server
*/
static Server *Find(const Anope::string &name, Server *s = NULL);
};
#endif // SERVERS_H
+757 -1347
View File
File diff suppressed because it is too large Load Diff
-50
View File
@@ -1,50 +0,0 @@
/* Header for Services list handler.
*
* (C) 2003-2009 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for furhter details.
*
* Based on the original code of Epona by Lara.
* Based on the original code of Services by Andy Church.
*
* $Id$
*
*/
#ifndef SLIST_H
#define SLIST_H
typedef struct slist_ SList;
typedef struct slistopts_ SListOpts;
struct slist_ {
void **list;
int16 count; /* Total entries of the list */
int16 capacity; /* Capacity of the list */
int16 limit; /* Maximum possible entries on the list */
SListOpts *opts;
};
struct slistopts_ {
int32 flags; /* Flags for the list. See below. */
int (*compareitem) (SList *slist, void *item1, void *item2); /* Called to compare two items */
int (*isequal) (SList *slist, void *item1, void *item2); /* Called by slist_indexof. item1 can be an arbitrary pointer. */
void (*freeitem) (SList *slist, void *item); /* Called when an item is removed */
};
#define SLIST_DEFAULT_LIMIT 32767
#define SLISTF_NODUP 0x00000001 /* No duplicates in the list. */
#define SLISTF_SORT 0x00000002 /* Automatically sort the list. Used with compareitem member. */
/* Note that number is the index in the array + 1 */
typedef int (*slist_enumcb_t) (SList *slist, int number, void *item, va_list args);
/* Callback to know whether we can delete the entry. */
typedef int (*slist_delcheckcb_t) (SList *slist, void *item, va_list args);
#endif /* SLIST_H */
+54
View File
@@ -0,0 +1,54 @@
/*
*
* (C) 2003-2012 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
*
* Based on the original code of Epona by Lara.
* Based on the original code of Services by Andy Church.
*/
#ifndef SOCKETENGINE_H
#define SOCKETENGINE_H
class CoreExport SocketEngine
{
public:
/* Map of sockets */
static std::map<int, Socket *> Sockets;
/** Called to initialize the socket engine
*/
static void Init();
/** Called to shutdown the socket engine
*/
static void Shutdown();
/** Add a socket to the internal list
* @param s The socket
*/
static void AddSocket(Socket *s);
/** Delete a socket from the internal list
* @param s The socket
*/
static void DelSocket(Socket *s);
/** Mark a socket as writeable
* @param s The socket
*/
static void MarkWritable(Socket *s);
/** Unmark a socket as writeable
* @param s The socket
*/
static void ClearWritable(Socket *s);
/** Read from sockets and do things
*/
static void Process();
};
#endif // SOCKETENGINE_H
+466 -36
View File
@@ -1,48 +1,478 @@
/*
*
* (C) 2004-2009 Anope Team
* (C) 2003-2012 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for furhter details.
* Please read COPYING and README for further details.
*
* Based on the original code of Epona by Lara.
* Based on the original code of Services by Andy Church.
*
*
* Based on the original code of Services by Andy Church.
*/
#ifndef SOCKETS_H
#define SOCKETS_H
#ifdef _WIN32
typedef SOCKET ano_socket_t;
#define ano_sockread(fd, buf, len) recv(fd, buf, len, 0)
#define ano_sockwrite(fd, buf, len) send(fd, buf, len, 0)
#define ano_sockclose(fd) closesocket(fd)
#define ano_sockgeterr() WSAGetLastError()
#define ano_sockseterr(err) WSASetLastError(err)
/* ano_sockstrerror in sockutil.c */
extern char *ano_sockstrerror(int);
/* ano_socksetnonb in sockutil.c */
#define ano_sockerrnonb(err) (err == WSAEINPROGRESS || err == WSAEWOULDBLOCK)
#define SOCKERR_EBADF WSAENOTSOCK
#define SOCKERR_EINTR WSAEINTR
#define SOCKERR_EINVAL WSAEINVAL
#define SOCKERR_EINPROGRESS WSAEINPROGRESS
#else
typedef int ano_socket_t;
#define ano_sockread(fd, buf, len) read(fd, buf, len)
#define ano_sockwrite(fd, buf, len) write(fd, buf, len)
#define ano_sockclose(fd) close(fd)
#define ano_sockgeterr() errno
#define ano_sockseterr(err) errno = err
#define ano_sockstrerror(err) strerror(err)
#define ano_socksetnonb(fd) fcntl(fd, F_SETFL, O_NONBLOCK)
#define ano_sockerrnonb(err) (err == EINPROGRESS)
#define SOCKERR_EBADF EBADF
#define SOCKERR_EINTR EINTR
#define SOCKERR_EINVAL EINVAL
#define SOCKERR_EINPROGRESS EINPROGRESS
#endif
#include "anope.h"
#endif
#define NET_BUFSIZE 65535
/** A sockaddr union used to combine IPv4 and IPv6 sockaddrs
*/
union CoreExport sockaddrs
{
sockaddr sa;
sockaddr_in sa4;
sockaddr_in6 sa6;
/** Construct the object, sets everything to 0
*/
sockaddrs();
/** Memset the object to 0
*/
void clear();
/** Get the size of the sockaddr we represent
* @return The size
*/
size_t size() const;
/** Get the port represented by this addr
* @return The port, or -1 on fail
*/
int port() const;
/** Get the address represented by this addr
* @return The address
*/
Anope::string addr() const;
/** Check if this sockaddr has data in it
*/
bool operator()() const;
/** Compares with sockaddr with another. Compares address type, port, and address
* @return true if they are the same
*/
bool operator==(const sockaddrs &other) const;
/* The same as above but not */
inline bool operator!=(const sockaddrs &other) const { return !(*this == other); }
/** The equivalent of inet_pton
* @param type AF_INET or AF_INET6
* @param address The address to place in the sockaddr structures
* @param pport An option port to include in the sockaddr structures
* @throws A socket exception if given invalid IPs
*/
void pton(int type, const Anope::string &address, int pport = 0);
/** The equivalent of inet_ntop
* @param type AF_INET or AF_INET6
* @param address The in_addr or in_addr6 structure
* @throws A socket exception if given an invalid structure
*/
void ntop(int type, const void *src);
};
class CoreExport cidr
{
sockaddrs addr;
Anope::string cidr_ip;
unsigned char cidr_len;
public:
cidr(const Anope::string &ip);
cidr(const Anope::string &ip, unsigned char len);
Anope::string mask() const;
bool match(sockaddrs &other);
};
class SocketException : public CoreException
{
public:
/** Default constructor for socket exceptions
* @param message Error message
*/
SocketException(const Anope::string &message) : CoreException(message) { }
/** Default destructor
* @throws Nothing
*/
virtual ~SocketException() throw() { }
};
enum SocketFlag
{
SF_DEAD,
SF_WRITABLE,
SF_CONNECTING,
SF_CONNECTED,
SF_ACCEPTING,
SF_ACCEPTED
};
static const Anope::string SocketFlagStrings[] = { "SF_DEAD", "SF_WRITABLE", "SF_CONNECTING", "SF_CONNECTED", "SF_ACCEPTING", "SF_ACCEPTED", "" };
class Socket;
class ClientSocket;
class ListenSocket;
class ConnectionSocket;
class CoreExport SocketIO
{
public:
/** Receive something from the buffer
* @param s The socket
* @param buf The buf to read to
* @param sz How much to read
* @return Number of bytes received
*/
virtual int Recv(Socket *s, char *buf, size_t sz);
/** Write something to the socket
* @param s The socket
* @param buf The data to write
* @param size The length of the data
*/
virtual int Send(Socket *s, const char *buf, size_t sz);
int Send(Socket *s, const Anope::string &buf);
/** Accept a connection from a socket
* @param s The socket
* @return The new socket
*/
virtual ClientSocket *Accept(ListenSocket *s);
/** Finished accepting a connection from a socket
* @param s The socket
* @return SF_ACCEPTED if accepted, SF_ACCEPTING if still in process, SF_DEAD on error
*/
virtual SocketFlag FinishAccept(ClientSocket *cs);
/** Bind a socket
* @param s The socket
* @param ip The IP to bind to
* @param port The optional port to bind to
*/
virtual void Bind(Socket *s, const Anope::string &ip, int port = 0);
/** Connect the socket
* @param s The socket
* @param target IP to connect to
* @param port to connect to
*/
virtual void Connect(ConnectionSocket *s, const Anope::string &target, int port);
/** Called to potentially finish a pending connection
* @param s The socket
* @return SF_CONNECTED on success, SF_CONNECTING if still pending, and SF_DEAD on error.
*/
virtual SocketFlag FinishConnect(ConnectionSocket *s);
/** Called when the socket is destructing
*/
virtual void Destroy() { }
};
class CoreExport Socket : public Flags<SocketFlag>
{
protected:
/* Socket FD */
int Sock;
/* Is this an IPv6 socket? */
bool IPv6;
public:
/* Sockaddrs for bind() (if it's bound) */
sockaddrs bindaddr;
/* I/O functions used for this socket */
SocketIO *IO;
/** Empty constructor, should not be called.
*/
Socket();
/** Default constructor
* @param sock The socket to use, -1 if we need to create our own
* @param ipv6 true if using ipv6
* @param type The socket type, defaults to SOCK_STREAM
*/
Socket(int sock, bool ipv6 = false, int type = SOCK_STREAM);
/** Default destructor
*/
virtual ~Socket();
/** Get the socket FD for this socket
* @return the fd
*/
int GetFD() const;
/** Check if this socket is IPv6
* @return true or false
*/
bool IsIPv6() const;
/** Mark a socket as blockig
* @return true if the socket is now blocking
*/
bool SetBlocking();
/** Mark a socket as non-blocking
* @return true if the socket is now non-blocking
*/
bool SetNonBlocking();
/** Bind the socket to an ip and port
* @param ip The ip
* @param port The port
*/
void Bind(const Anope::string &ip, int port = 0);
/** Called when there either is a read or write event.
* @return true to continue to call ProcessRead/ProcessWrite, false to not continue
*/
virtual bool Process();
/** Called when there is something to be received for this socket
* @return true on success, false to drop this socket
*/
virtual bool ProcessRead();
/** Called when the socket is ready to be written to
* @return true on success, false to drop this socket
*/
virtual bool ProcessWrite();
/** Called when there is an error for this socket
* @return true on success, false to drop this socket
*/
virtual void ProcessError();
};
class CoreExport BufferedSocket : public virtual Socket
{
protected:
/* Things to be written to the socket */
Anope::string WriteBuffer;
/* Part of a message sent from the server, but not totally received */
Anope::string extrabuf;
/* How much data was received from this socket */
int RecvLen;
public:
/** Constructor
*/
BufferedSocket();
/** Default destructor
*/
virtual ~BufferedSocket();
/** Called when there is something to be received for this socket
* @return true on success, false to drop this socket
*/
bool ProcessRead();
/** Called when the socket is ready to be written to
* @return true on success, false to drop this socket
*/
bool ProcessWrite();
/** Called with a line received from the socket
* @param buf The line
* @return true to continue reading, false to drop the socket
*/
virtual bool Read(const Anope::string &buf);
/** Write to the socket
* @param message The message
*/
void Write(const char *message, ...);
void Write(const Anope::string &message);
/** Get the length of the read buffer
* @return The length of the read buffer
*/
int ReadBufferLen() const;
/** Get the length of the write buffer
* @return The length of the write buffer
*/
int WriteBufferLen() const;
};
class CoreExport BinarySocket : public virtual Socket
{
struct DataBlock
{
char *buf;
size_t len;
DataBlock(const char *b, size_t l);
~DataBlock();
};
std::deque<DataBlock *> WriteBuffer;
public:
/** Constructor
*/
BinarySocket();
/** Default destructor
*/
virtual ~BinarySocket();
/** Called when there is something to be received for this socket
* @return true on success, false to drop this socket
*/
bool ProcessRead();
/** Called when the socket is ready to be written to
* @return true on success, false to drop this socket
*/
bool ProcessWrite();
/** Write data to the socket
* @param buffer The data to write
* @param l The length of the data
*/
void Write(const char *buffer, size_t l);
/** Called with data from the socket
* @param buffer The data
* @param l The length of buffer
* @return true to continue reading, false to drop the socket
*/
virtual bool Read(const char *buffer, size_t l);
};
class CoreExport ListenSocket : public Socket
{
public:
/** Constructor
* @param bindip The IP to bind to
* @param port The port to listen on
* @param ipv6 true for ipv6
*/
ListenSocket(const Anope::string &bindip, int port, bool ipv6);
/** Destructor
*/
virtual ~ListenSocket();
/** Process what has come in from the connection
* @return false to destory this socket
*/
bool ProcessRead();
/** Called when a connection is accepted
* @param fd The FD for the new connection
* @param addr The sockaddr for where the connection came from
* @return The new socket
*/
virtual ClientSocket *OnAccept(int fd, const sockaddrs &addr) = 0;
};
class CoreExport ConnectionSocket : public virtual Socket
{
public:
/* Sockaddrs for connection ip/port */
sockaddrs conaddr;
/** Constructor
*/
ConnectionSocket();
/** Connect the socket
* @param TargetHost The target host to connect to
* @param Port The target port to connect to
*/
void Connect(const Anope::string &TargetHost, int Port);
/** Called when there either is a read or write event.
* Used to determine whether or not this socket is connected yet.
* @return true to continue to call ProcessRead/ProcessWrite, false to not continue
*/
bool Process();
/** Called when there is an error for this socket
* @return true on success, false to drop this socket
*/
void ProcessError();
/** Called on a successful connect
*/
virtual void OnConnect();
/** Called when a connection is not successful
* @param error The error
*/
virtual void OnError(const Anope::string &error);
};
class CoreExport ClientSocket : public virtual Socket
{
public:
/* Listen socket this connection came from */
ListenSocket *LS;
/* Clients address */
sockaddrs clientaddr;
/** Constructor
* @param ls Listen socket this connection is from
* @param addr Address the connection came from
*/
ClientSocket(ListenSocket *ls, const sockaddrs &addr);
/** Called when there either is a read or write event.
* Used to determine whether or not this socket is connected yet.
* @return true to continue to call ProcessRead/ProcessWrite, false to not continue
*/
bool Process();
/** Called when there is an error for this socket
* @return true on success, false to drop this socket
*/
void ProcessError();
/** Called when a client has been accepted() successfully.
*/
virtual void OnAccept();
/** Called when there was an error accepting the client
*/
virtual void OnError(const Anope::string &error);
};
class CoreExport Pipe : public Socket
{
public:
/** The FD of the write pipe (if this isn't evenfd)
* this->Sock is the readfd
*/
int WritePipe;
/** Constructor
*/
Pipe();
/** Destructor
*/
~Pipe();
/** Called when data is to be read
*/
bool ProcessRead();
/** Called when this pipe needs to be woken up
*/
void Notify();
/** Should be overloaded to do something useful
*/
virtual void OnNotify();
};
#endif // SOCKET_H
+15 -87
View File
@@ -1,109 +1,37 @@
#ifndef _SYSCONF_H_
#define _SYSCONF_H_
#cmakedefine DEBUG_BUILD
#cmakedefine DEFUMASK @DEFUMASK@
#cmakedefine HAVE_SYS_TYPES_H 1
#cmakedefine HAVE_CSTDINT 1
#cmakedefine HAVE_STDINT_H 1
#cmakedefine HAVE_STDDEF_H 1
#cmakedefine HAVE_BACKTRACE 1
#cmakedefine HAVE_GETHOSTBYNAME 1
#cmakedefine HAVE_GETTIMEOFDAY 1
#cmakedefine HAVE_SETGRENT 1
#cmakedefine HAVE_STRCASECMP 1
#cmakedefine HAVE_STRICMP 1
#cmakedefine HAVE_STRINGS_H 1
#cmakedefine HAVE_STRLCAT 1
#cmakedefine HAVE_STRLCPY 1
#cmakedefine HAVE_SYS_SELECT_H 1
#cmakedefine HAVE_UMASK 1
#cmakedefine HAVE_EVENTFD 1
#cmakedefine HAVE_EPOLL 1
#cmakedefine HAVE_POLL 1
#cmakedefine GETTEXT_FOUND 1
#cmakedefine RUNGROUP "@RUNGROUP@"
#cmakedefine SERVICES_BIN "@SERVICES_BIN@"
#cmakedefine HAVE_UINT8_T 1
#cmakedefine HAVE_U_INT8_T 1
#cmakedefine HAVE_INT16_T 1
#cmakedefine HAVE_UINT16_T 1
#cmakedefine HAVE_U_INT16_T 1
#cmakedefine HAVE_INT32_T 1
#cmakedefine HAVE_UINT32_T 1
#cmakedefine HAVE_U_INT32_T 1
#ifdef HAVE_SYS_TYPES_H
# include <sys/types.h>
#endif
#ifdef HAVE_STDINT_H
# include <stdint.h>
#ifdef HAVE_CSTDINT
# include <cstdint>
#else
# ifdef HAVE_STDINT_H
# include <stdint.h>
# else
# include "pstdint.h"
# endif
#endif
#ifdef HAVE_STDDEF_H
# include <stddef.h>
#endif
#ifdef HAVE_UINT8_T
typedef uint8_t uint8;
#else
# ifdef HAVE_U_INT8_T
typedef u_int8_t uint8;
# else
# ifdef _WIN32
typedef unsigned __int8 uint8;
# else
typedef unsigned short uint8;
# endif
# endif
#endif
#ifdef HAVE_INT16_T
typedef int16_t int16;
#else
# ifdef _WIN32
typedef signed __int16 int16;
# else
typedef int int16;
# endif
#endif
#ifdef HAVE_UINT16_T
typedef uint16_t uint16;
#else
# ifdef HAVE_U_INT16_T
typedef u_int16_t uint16;
# else
# ifdef _WIN32
typedef unsigned __int16 uint16;
# else
typedef unsigned int uint16;
# endif
# endif
#endif
#ifdef HAVE_INT32_T
typedef int32_t int32;
#else
# ifdef _WIN32
typedef signed __int32 int32;
# else
typedef long int32;
# endif
#endif
#ifdef HAVE_UINT32_T
typedef uint32_t uint32;
#else
# ifdef HAVE_U_INT32_T
typedef u_int32_t uint32;
# else
# ifdef _WIN32
typedef unsigned __int32 uint32;
# else
typedef unsigned long uint32;
# endif
# endif
#endif
#ifdef _WIN32
# ifdef MSVCPP
# define snprintf _snprintf
# endif
# define popen _popen
# define pclose _pclose
# define ftruncate _chsize
-121
View File
@@ -1,121 +0,0 @@
#ifndef _SYSCONF_H_
#define _SYSCONF_H_
#undef DEFUMASK
#undef HAVE_SYS_TYPES_H
#undef HAVE_STDINT_H
#undef HAVE_STDDEF_H
#undef HAVE_BACKTRACE
#undef HAVE_GETHOSTBYNAME
#undef HAVE_GETTIMEOFDAY
#undef HAVE_SETGRENT
#undef HAVE_STRCASECMP
#undef HAVE_STRICMP
#undef HAVE_STRINGS_H
#undef HAVE_STRLCAT
#undef HAVE_STRLCPY
#undef HAVE_SYS_SELECT_H
#undef HAVE_UMASK
#undef RUNGROUP
#define SERVICES_BIN "services"
#undef HAVE_UINT8_T
#undef HAVE_U_INT8_T
#undef HAVE_INT16_T
#undef HAVE_UINT16_T
#undef HAVE_U_INT16_T
#undef HAVE_INT32_T
#undef HAVE_UINT32_T
#undef HAVE_U_INT32_T
#ifdef HAVE_SYS_TYPES_H
# include <sys/types.h>
#endif
#ifdef HAVE_STDINT_H
# include <stdint.h>
#endif
#ifdef HAVE_STDDEF_H
# include <stddef.h>
#endif
#ifdef HAVE_UINT8_T
typedef uint8_t uint8;
#else
# ifdef HAVE_U_INT8_T
typedef u_int8_t uint8;
# else
# ifdef _WIN32
typedef unsigned __int8 uint8;
# else
typedef unsigned short uint8;
# endif
# endif
#endif
#ifdef HAVE_INT16_T
typedef int16_t int16;
#else
# ifdef _WIN32
typedef signed __int16 int16;
# else
typedef int int16;
# endif
#endif
#ifdef HAVE_UINT16_T
typedef uint16_t uint16;
#else
# ifdef HAVE_U_INT16_T
typedef u_int16_t uint16;
# else
# ifdef _WIN32
typedef unsigned __int16 uint16;
# else
typedef unsigned int uint16;
# endif
# endif
#endif
#ifdef HAVE_INT32_T
typedef int32_t int32;
#else
# ifdef _WIN32
typedef signed __int32 int32;
# else
typedef long int32;
# endif
#endif
#ifdef HAVE_UINT32_T
typedef uint32_t uint32;
#else
# ifdef HAVE_U_INT32_T
typedef u_int32_t uint32;
# else
# ifdef _WIN32
typedef unsigned __int32 uint32;
# else
typedef unsigned long uint32;
# endif
# endif
#endif
#ifdef _WIN32
# ifdef MSVCPP
# define snprintf _snprintf
# endif
# define popen _popen
# define pclose _pclose
# define ftruncate _chsize
# ifdef MSVCPP
# define PATH_MAX MAX_PATH
# endif
# define MAXPATHLEN MAX_PATH
# define bzero(buf, size) memset(buf, 0, size)
# ifdef MSVCPP
# define strcasecmp stricmp
# endif
# define sleep(x) Sleep(x * 1000)
#endif
#endif
+108
View File
@@ -0,0 +1,108 @@
#ifndef THREADENGINE_H
#define THREADENGINE_H
class Thread;
class CoreExport Thread : public Pipe, public Extensible
{
private:
/* Set to true to tell the thread to finish and we are waiting for it */
bool exit;
public:
/* Handle for this thread */
pthread_t Handle;
/** Threads constructor
*/
Thread();
/** Threads destructor
*/
virtual ~Thread();
/** Join to the thread, sets the exit state to true
*/
void Join();
/** Sets the exit state as true informing the thread we want it to shut down
*/
void SetExitState();
/** Exit the thread. Note that the thread still must be joined to free resources!
*/
void Exit();
/** Launch the thread
*/
void Start();
/** Returns the exit state of the thread
* @return true if we want to exit
*/
bool GetExitState() const;
/** Called when this thread should be joined to
*/
void OnNotify();
/** Called when the thread is run.
*/
virtual void Run() = 0;
};
class CoreExport Mutex
{
protected:
/* A mutex, used to keep threads in sync */
pthread_mutex_t mutex;
public:
/** Constructor
*/
Mutex();
/** Destructor
*/
~Mutex();
/** Attempt to lock the mutex, will hang until a lock can be achieved
*/
void Lock();
/** Unlock the mutex, it must be locked first
*/
void Unlock();
/** Attempt to lock the mutex, will return true on success and false on fail
* Does not block
* @return true or false
*/
bool TryLock();
};
class CoreExport Condition : public Mutex
{
private:
/* A condition */
pthread_cond_t cond;
public:
/** Constructor
*/
Condition();
/** Destructor
*/
~Condition();
/** Called to wakeup the waiter
*/
void Wakeup();
/** Called to wait for a Wakeup() call
*/
void Wait();
};
#endif // THREADENGINE_H

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