1
0
mirror of https://github.com/anope/anope.git synced 2026-06-17 22:44:47 +02:00

Compare commits

..

765 Commits

Author SHA1 Message Date
Adam 81cf9f0c71 Anope 1.9.7 Release 2012-09-02 08:31:43 -04:00
Adam 3264669e03 Update version.log 2012-09-02 08:31:34 -04:00
Adam 271d723bbd Update Changes 2012-09-02 08:31:11 -04:00
Adam a0c4575122 Regenerate language files 2012-09-02 08:31:04 -04:00
Adam 1af64a9bbb Fix Windows 2012-09-02 08:30:54 -04:00
Adam e3d5140dcc Added a web panel module + a default template 2012-09-01 18:54:51 -04:00
Adam f81d0113a2 Actually set xline's manager... 2012-08-28 00:39:50 -04:00
Adam fde42899e7 Fixed db_old loading encrypted passwords from 1.8 2012-08-09 23:28:02 -04:00
Robby f7bf2fa960 Put motd in conf/ not data/ and fixed the default values in the config 2012-08-08 17:09:34 -04:00
Cronus b894a569c9 Update pid and motd file paths 2012-08-08 04:28:33 -04:00
Adam 48022c3ddf Warn about really big integer values in the config 2012-07-18 16:52:14 -04:00
Adam 28aa981464 Actually the core can't handle empty realnames, just ignore them 2012-07-01 23:50:38 -04:00
Adam 2b8a09bf55 Remove some unused code in inspircd20 protocol module & allow /chghost/ident/naming services clients 2012-07-01 22:26:05 -04:00
Adam a12788e8f4 Don't crash on empty setnames on inspircd1.2 2012-07-01 22:26:05 -04:00
Adam 9b5f6d3c45 Remove ExtensibleString everywhere 2012-07-01 22:26:05 -04:00
lethality af24dc6050 Removed old set xop references and cleared up some other stuff. 2012-06-26 16:21:24 +01:00
lethality f27560cc1e Merge branch '1.9' of ssh://anope.git.sf.net/gitroot/anope/anope into 1.9 2012-06-26 02:01:01 +01:00
Adam 4b309b5044 Fixed accidentally recursion in User::SendMessage from last commit 2012-06-25 20:51:08 -04:00
lethality d8a99d619f Merge branch '1.9' of ssh://anope.git.sf.net/gitroot/anope/anope into 1.9 2012-06-22 21:26:33 +01:00
Adam 2dec8e767a Allow userless command sources 2012-06-18 05:04:30 -04:00
lethality ba53c7eb03 Updated MODULES somewhat 2012-06-17 22:23:22 +01:00
Adam 873d4287de Split up bs_set 2012-06-11 15:44:48 -04:00
Adam 3626fb246e Fixed fd leak in win32/pipe.cpp 2012-06-06 15:16:46 -04:00
lethality a661098ef2 Some more fantasy character help output 2012-06-04 05:45:13 +01:00
lethality a4bf5ce609 minor help output changes, including some confusion in fantasy chars 2012-06-04 04:50:35 +01:00
Adam 437944d416 Merge branch '1.9' of anope.git.sf.net:/gitroot/anope/anope into 1.9 2012-06-01 04:43:26 -04:00
DukePyrolator db37b1c634 updated chanstats 2012-06-01 07:37:34 +02:00
Adam 1e49e9b9dc This should actually be LOG_TERMINAL, quitmsg isn't logged to terminal on shutdown 2012-05-26 02:36:02 -04:00
Adam 2cbfbc98e9 Some access level fixes from Robby to more closely match the historic levels, and some code cleanup 2012-05-26 02:15:48 -04:00
Adam 38d5f20deb Added a ./Config option for using precompiled headers 2012-05-24 21:54:15 -04:00
Adam 70fb5900a2 Add support for inspircd2.0+s mlock, improved on Unreal's, and made server side mlock usage configurable 2012-05-23 19:35:56 -04:00
Adam bf7d1a55af Fixed some problems found by Robby 2012-05-23 15:09:41 -04:00
Robby 1f73e27870 Updated help messages for ns_list, cs_list, cs_entrymsg, and cs_info. Also fixed logging for cs_entrymsg. 2012-05-20 04:14:26 -04:00
Adam 699087b2bf Fixed cs_entrymsg loading entries from the database 2012-05-20 03:57:22 -04:00
Adam ccd29085a9 reinterpret_cast off of a virtual base does Bad Things 2012-05-17 03:57:19 -04:00
Adam a883362c14 Fixed not always calling operator bool() in dynamic_reference, which would mess up service references and do weird things 2012-05-17 02:03:22 -04:00
Jeremy ef88385d85 m_ldap_authentication: Removed the dependency on a specific binddn in favour of searching the tree for matching criteria and using the returned DN 2012-05-15 17:19:50 -04:00
Adam 90b0283160 Grab the DN for every LDAP query and send it in the result 2012-05-15 04:27:36 -04:00
Adam 0a8d46b538 Fixed parsing FMODE on inspircd 1.1 2012-05-14 22:30:03 -04:00
Adam a84226edf0 Do not show help for set message if useprivmsg is disabled 2012-05-11 00:50:58 -04:00
Adam 9370b063d0 Fixed crash on access del + valgrind errors 2012-05-10 17:53:53 -04:00
Adam d5ffae0e46 Made ssl cert and keyfiles configurable 2012-05-09 03:37:37 -04:00
lethality f89599726e fixed paste error (failed awesomeness) in last commit. 2012-05-09 03:11:57 +01:00
lethality a81b3aaff1 Fixed saving backups 2012-05-09 01:23:34 +01:00
Adam 820e4edc2b Fixed some 100% cpu bugs with the new SQL stuff, and fixed sqlite+db_sql_live 2012-05-08 18:04:49 -04:00
Robby 25586f3246 Allow services operators to release other user's nicks, and allow services operators to view the access list of other operators 2012-05-08 02:01:44 -04:00
Adam b7149fc940 Merge branch '1.9' of anope.git.sf.net:/gitroot/anope/anope into 1.9 2012-05-06 21:44:11 -04:00
Adam 675b113c3e Split up db/conf/lib/locale install directories, and allow alternate ones to be specified at runtime 2012-05-06 21:43:50 -04:00
DukePyrolator c797987615 Readding missing valid nick check to ns register/group removed in os_forbid commit 2012-05-05 09:35:18 +02:00
Adam eb0e07d564 Use Unreal's MLOCK command if supported 2012-05-04 16:03:02 -04:00
Adam 1b5805eeb0 Set quitmsg on ERROR 2012-04-29 20:39:33 -04:00
Adam 42e652cae7 Pull table schemas from SQL on startup so we can alter the schemas if we need to, fixed sqlite to work again 2012-04-29 19:24:37 -04:00
Adam 62818abbf4 Added options:casemap to chose how case insensitive strings are compared, using ascii, rfc1459, or a locale installed on the system 2012-04-29 15:43:51 -04:00
Adam 4d9a96e8df Fixes to db_sql 2012-04-27 17:06:16 -04:00
Adam e490a5461f Process defines even before includes, fixes defining{} pseudoclient names to something else in their respective configurations 2012-04-27 16:05:49 -04:00
Adam 5068483cb9 Add db_sql:prefix allow prefixing all anope tables similarly, and changed db_sql to update the databases incrementally instead of one big flush 2012-04-27 15:38:50 -04:00
Adam 83ee20fc29 Clarify access denied messages caused by NSSecureAdmins 2012-04-25 19:02:09 -04:00
Adam b08aa4ed92 Check for os_sesion to exist before having defcon try and place session bans 2012-04-25 18:49:53 -04:00
Adam 1081ecdae8 Fixed non-debug build 2012-04-25 14:29:50 -04:00
Adam 2370c16f1e Fixed build from the previous merge 2012-04-24 16:02:07 -04:00
Adam 3d84dc91f6 Merge branch '1.9' of anope.git.sf.net:/gitroot/anope/anope into 1.9 2012-04-23 05:17:02 -04:00
Adam 573e49a7ea Reworked live SQL support yet again 2012-04-23 05:08:26 -04:00
Adam 63c639e108 Fixed hashm checking in db_old and loading 1.9.1 databases 2012-04-23 05:07:06 -04:00
Adam fc00406079 Fixed ./services --version etc not getting printed when stdout is a file/pipe/not a tty 2012-04-22 02:57:17 -04:00
DukePyrolator b752c3a668 fixed a bug in chanstats 2012-04-13 18:33:22 +02:00
DukePyrolator 7372b457cc fixed a compile error in m_sqlite 2012-04-08 19:29:56 +02:00
DukePyrolator deb5196101 Added Chanstats. It uses a new, improved database format and is not compatible with current phpdenora or magirc installations. 2012-04-08 12:43:34 +02:00
DukePyrolator 9e1fda2a44 Modified the SQL API to allow unescaped parameters (useful for passing row names and NULL values) 2012-04-08 12:30:48 +02:00
Adam 9d249ef96f Fixed unpacking questions from dns packets 2012-04-06 14:41:28 -04:00
Viper e03b73e8cd Revert changes made to line endings. 2012-04-06 15:36:49 +02:00
Hal9000 6b473f22bd Revert last commit cause guess what, I screwed things up 2012-04-06 15:12:22 +02:00
Hal9000 05bb80c06c Fixed mail function causing some MTAs to sent blank messages 2012-04-06 14:35:34 +02:00
DukePyrolator e6edc6586e updated the german language file 2012-04-01 20:50:46 +02:00
DukePyrolator cf3124c063 fixed some typos 2012-04-01 20:50:04 +02:00
Adam 12a6a27b52 Merge branch '1.9' of anope.git.sf.net:/gitroot/anope/anope into 1.9 2012-03-27 19:14:55 -04:00
Adam 31a0e673b2 Fixed unpacking multiple names from dns packets when one has multiple compression pointers.
Currently this will just fail at unpacking the later name due to offsets being invalid.
Also cleaned up the existing code and made unpacking error messages more helpful.
2012-03-27 19:01:29 -04:00
DukePyrolator 8d0b4a1bf5 added a missing error message when a module file does not exist. this fixes bug #1401. also moved some debug messages to debug level 2 2012-03-22 07:30:38 +01:00
DukePyrolator 1b0ebcadfa fixed bug #1399 2012-03-21 22:20:18 +01:00
DukePyrolator 0d100ffacc fixed ns_ajoin 2012-03-21 20:25:25 +01:00
Adam 88fd1da803 Fixed typos 2012-03-13 21:07:10 -04:00
Adam a06934777c Actually check if the nicks arent registered, oops 2012-03-13 19:26:11 -04:00
Adam a26f4b9a9a Bug #1389 - readd RNG seed in the config and start DNS query ids off on a random number 2012-03-13 17:45:07 -04:00
Adam 053d6a2247 Add a nickserv:unregistered_notice config option to send a message to unregistered users on connect. Suggested by Cronus. 2012-03-13 17:18:11 -04:00
Adam beae4775cf Bug #1382 - Save maxusercount and maxusertime 2012-03-13 16:58:14 -04:00
Adam cff91a532f Made gch files depend on the header they were generated from 2012-03-11 21:21:47 -04:00
Adam 92ed5d7208 Fixed having multiple uplink blocks work right if the first uplink fails on startup 2012-03-11 16:44:44 -04:00
Adam 7800375510 Bug #1384 - Fixed spacing of connection log message if users have no vhost - patch from cbiedl 2012-03-11 05:20:28 -04:00
Adam ab25815694 Fixed backup databases having their names collide due to not separating month and day, #1383 2012-03-05 20:15:56 -05:00
Adam 8e0104363f Fixed bs_kick syntax error 2012-03-05 14:29:48 -05:00
DukePyrolator b7a6d518b0 fixed the --dir commandline parameter 2012-03-04 10:18:25 +01:00
Adam 4ed844ffd5 Escape all column names when building sql queries 2012-03-02 17:05:59 -05:00
Adam 020467d472 Fixed db_old loading noexpire 2012-02-27 00:16:15 -05:00
Adam 141b87bd14 Changed the OnChanDrop event to be called right before channels are dropped, not after 2012-02-26 23:28:02 -05:00
Adam a5b9e235ae Added chanserv:require config option to set which modes must be on all registered channels. Prevents the core from always enforcing +r on every channel, even if chanserv is not loaded. 2012-02-26 23:23:15 -05:00
Adam a78790eac4 Fixed vhost check on identify 2012-02-26 20:18:22 -05:00
Adam 07226feec4 Track plexus umode and cmode +C and renamed UMODE_NO_CTCP to match up with the names of other modes. 2012-02-26 19:49:02 -05:00
Adam e73013830d Fixed missing #include in init.cpp 2012-02-25 22:45:51 -05:00
Adam 2bc3bd3fcf Do not send kills after sending XLines because it causes us to internally remove the user and then recieve a quit from the user (who is now nonexistant) once the IRCd processes the XLine 2012-02-25 00:06:02 -05:00
Adam 83456f6040 Fixed akill setter and ids showing in akill reasons 2012-02-24 23:25:29 -05:00
Adam 601dc41baf Merge branch '1.9' of anope.git.sf.net:/gitroot/anope/anope into 1.9 2012-02-24 14:54:44 -05:00
Adam 2337b7717d Fixed calculating bots channel count of assigned channels and fixed the order of saving memos (among other things) 2012-02-24 14:53:34 -05:00
lethality fde40dee7a Tell users to use NickServ for registering nicks, not chanserv... 2012-02-24 01:50:21 +00:00
lethality ba32aad4cb Merge branch '1.9' of ssh://anope.git.sf.net/gitroot/anope/anope into 1.9 2012-02-23 02:32:49 +00:00
Adam 24811e5970 Added a configuration option to make all nick registrations require admin verification 2012-02-22 20:55:59 -05:00
lethality f01aab5f9b Merge branch '1.9' of ssh://anope.git.sf.net/gitroot/anope/anope into 1.9 2012-02-23 00:04:36 +00:00
Adam 3850b073dd Added regex support for many commands, such as akill, sqline, snline,
all of the */list commands, etc.

Also extended the ability of akill to match a full nick!user@host and
real name of users.
2012-02-22 18:12:02 -05:00
Adam 81e50dd1f4 Fixed db_old loading memo owners 2012-02-22 16:25:20 -05:00
Adam bd31fbb9f0 Also fixed m_proxyscan to handle users with invalid ips 2012-02-22 14:41:36 -05:00
Adam 000660608e Fixed m_dnsbl handling users with spoofs/other non ips 2012-02-21 20:50:14 -05:00
lethality 826de43724 Fixed some trivial formatting 2012-02-22 00:28:58 +00:00
Adam b84e080463 Made our message sources actual clients/servers, and put in a few more default messages for very standard things (KICK etc) 2012-02-19 20:54:55 -05:00
Adam 0ba58d7d0e Fixed some events 2012-02-18 18:07:34 -05:00
Adam 1536c5cf60 Add users hostmask to access lists not nick when access add is used on a non registered user 2012-02-18 17:21:55 -05:00
Adam f2ce9cd85c Made mode lock del check status of the mode lock before removing it 2012-02-18 15:47:16 -05:00
Adam ee5cd8493e Use C++11's explicit override feature if available 2012-02-18 15:04:26 -05:00
Adam 41e8d27602 Fixed FreeBSD build 2012-02-16 16:02:17 -05:00
Adam e1f5fc6a0c Remove revision numbers as they're only ever set by Config reading git since we've switched off of SVN. Instead just use the hash for the current head when building. Also recheck the hash on every make not just Config. 2012-02-15 00:06:25 -05:00
Adam db59f1a70f Fixed detecting when to set +r and fixed crash on shutdown introduced by the last commit 2012-02-14 19:03:09 -05:00
Adam a9772cde21 Clean up and reorganize our header files 2012-02-14 15:13:27 -05:00
Adam 086790d633 Removed our RNG and just use the systems, it's not very widely used. Also made DNS query ids not random as they don't need to be. 2012-02-13 00:10:45 -05:00
Adam 1bc8e2ab82 Removed operserv:notifications in favor of log blocks, as well as some other notifiications 2012-02-08 18:00:24 -05:00
Adam 089c85b27e Fixed WallBadOS 2012-02-04 17:28:38 -05:00
Adam 01194e3958 Bump for 1.9.7-git 2012-02-04 13:12:11 -05:00
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
624 changed files with 184614 additions and 200339 deletions
-1
View File
@@ -1,4 +1,3 @@
config.cache
include/version.h
include/sysconf.h
build/
+54 -32
View File
@@ -218,13 +218,18 @@ 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)
option(USE_PCH "Use precompiled headers" 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
@@ -234,7 +239,7 @@ 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 /wd4100 /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)
@@ -242,9 +247,9 @@ else(MSVC)
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 (only on GNU compiler)
if(UNIX)
set(CXXFLAGS "${CXXFLAGS} -ansi -pedantic")
set(CXXFLAGS "${CXXFLAGS} -ansi -pedantic ${CMAKE_CXX_FLAGS}")
if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
set(CXXFLAGS "${CXXFLAGS} -fno-leading-underscore")
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)
@@ -257,7 +262,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
@@ -293,12 +298,12 @@ 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)
set(LDFLAGS "${LDFLAGS} -lnsl")
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)
@@ -325,31 +330,25 @@ if(CMAKE_BUILD_TYPE STREQUAL "DEBUG" OR CMAKE_BUILD_TYPE STREQUAL "RELWITHDEBINF
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_include_file(sys/eventfd.h HAVE_SYS_EVENTFD_H)
# Check for the existance of the following functions
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(eventfd HAVE_EVENTFD)
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)
# Strip the leading and trailing spaces from the compile flags
if(CXXFLAGS)
@@ -381,6 +380,29 @@ else(INSTDIR)
set(CMAKE_INSTALL_PREFIX "$ENV{HOME}/services")
endif(INSTDIR)
# Set default paths for various directories if not already defined
if(NOT BIN_DIR)
set(BIN_DIR "bin")
endif(NOT BIN_DIR)
if(NOT DB_DIR)
set(DB_DIR "data")
endif(NOT DB_DIR)
if(NOT DOC_DIR)
set(DOC_DIR "doc")
endif(NOT DOC_DIR)
if(NOT CONF_DIR)
set(CONF_DIR "conf")
endif(NOT CONF_DIR)
if(NOT LIB_DIR)
set(LIB_DIR "lib")
endif(NOT LIB_DIR)
if(NOT LOCALE_DIR)
set(LOCALE_DIR "locale")
endif(NOT LOCALE_DIR)
if(NOT LOGS_DIR)
set(LOGS_DIR "logs")
endif(NOT LOGS_DIR)
# Version number processing
# Find all lines in src/version.sh that start with VERSION_
read_from_file(${Anope_SOURCE_DIR}/src/version.sh "^VERSION_" VERSIONS)
@@ -449,7 +471,7 @@ 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)
@@ -459,20 +481,20 @@ get_target_property(SERVICES_BINARY ${PROGRAM_NAME} LOCATION)
get_filename_component(SERVICES_BINARY ${SERVICES_BINARY} NAME)
# At install time, create the following additional directories
install(CODE "file(MAKE_DIRECTORY \"\${CMAKE_INSTALL_PREFIX}/data/backups\")")
install(CODE "file(MAKE_DIRECTORY \"\${CMAKE_INSTALL_PREFIX}/data/logs\")")
install(CODE "file(MAKE_DIRECTORY \"\${CMAKE_INSTALL_PREFIX}/data/modules/runtime\")")
install(CODE "file(MAKE_DIRECTORY \"${DB_DIR}/backups\")")
install(CODE "file(MAKE_DIRECTORY \"${LOGS_DIR}\")")
install(CODE "file(MAKE_DIRECTORY \"${LIB_DIR}/modules/runtime\")")
# On non-Windows platforms, if RUNGROUP is set, change the permissions of the below directories, as well as the group of the data directory
if(NOT WIN32 AND RUNGROUP)
install(CODE "execute_process(COMMAND ${CHMOD} 2775 \"\${CMAKE_INSTALL_PREFIX}/data/backups\")")
install(CODE "execute_process(COMMAND ${CHMOD} 2775 \"\${CMAKE_INSTALL_PREFIX}/data/logs\")")
install(CODE "execute_process(COMMAND ${CHMOD} 2775 \"\${CMAKE_INSTALL_PREFIX}/data/modules/runtime\")")
install(CODE "execute_process(COMMAND ${CHMOD} 2775 \"\${DB_DIR}/backups\")")
install(CODE "execute_process(COMMAND ${CHMOD} 2775 \"\${LOGS_DIR}\")")
install(CODE "execute_process(COMMAND ${CHMOD} 2775 \"\${LIB_DIR}/modules/runtime\")")
install(CODE "execute_process(COMMAND ${CHGRP} -R ${RUNGROUP} \"\${CMAKE_INSTALL_PREFIX}\")")
endif(NOT WIN32 AND RUNGROUP)
# On Windows platforms, install extra files
if(WIN32)
install(FILES ${Anope_SOURCE_DIR}/src/win32/anope.bat
DESTINATION bin
DESTINATION ${BIN_DIR}
)
endif(WIN32)
+76 -14
View File
@@ -2,7 +2,7 @@
#
# Configuration script for Services.
#
# Anope (c) 2003-2010 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
@@ -67,6 +67,12 @@ Run_Build_System () {
RUN_CC_PL="-DUSE_RUN_CC_PL:BOOLEAN=OFF"
fi
if [ "$USE_PCH" = "yes" ] ; then
PCH="-DUSE_PCH:BOOLEAN=ON"
else
PCH="-DUSE_PCH:BOOLEAN=OFF"
fi
case `uname -s` in
MINGW*)
GEN_TYPE="-G\"MSYS Makefiles\""
@@ -82,9 +88,9 @@ Run_Build_System () {
REAL_SOURCE_DIR="$SOURCE_DIR"
fi
echo "cmake $GEN_TYPE $WITH_INST $WITH_RUN $WITH_PERM $BUILD_TYPE $RUN_CC_PL $EXTRA_CONFIG_ARGS $REAL_SOURCE_DIR"
echo "cmake $GEN_TYPE $WITH_INST $WITH_RUN $WITH_PERM $BUILD_TYPE $RUN_CC_PL $PCH $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
cmake $GEN_TYPE $WITH_INST $WITH_RUN $WITH_PERM $BUILD_TYPE $RUN_CC_PL $PCH $EXTRA_CONFIG_ARGS $REAL_SOURCE_DIR
echo ""
if [ "$SOURCE_DIR" = "." ] ; then
@@ -117,6 +123,7 @@ RUNGROUP=
UMASK=
DEBUG="yes"
USE_RUN_CC_PL="no"
USE_PCH="no"
EXTRA_CONFIG_ARGS=
CAN_QUICK="no"
SOURCE_DIR=`dirname $0`
@@ -151,6 +158,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
@@ -164,17 +216,7 @@ if [ ! "$NO_INTRO" ] ; then
;;
esac
. $SOURCE_DIR/src/version.sh
if [ -d .git ] ; then
VERSION=`git describe --tags`
VERSION_BUILD=`echo "$VERSION" | cut -d'-' -f2`
VERSION_EXTRA=`echo "$VERSION" | cut -d'-' -f3`
if [ "$VERSION_BUILD" == "$VERSION_EXTRA" ] ; then
VERSION_EXTRA=""
fi
echo "#define VERSION_BUILD $VERSION_BUILD" > include/version.h
echo "#define VERSION_EXTRA \"$VERSION_EXTRA\"" >> include/version.h
fi
cat $SOURCE_DIR/.BANNER | sed "s/CURVER/$VERSION/" | sed "s@SOURCE_DIR@$SOURCE_DIR@" | $PAGER
cat $SOURCE_DIR/.BANNER | sed "s/CURVER/$VERSION_MAJOR.$VERSION_MINOR.$VERSION_PATCH$VERSION_EXTRA/" | sed "s@SOURCE_DIR@$SOURCE_DIR@" | $PAGER
echo ""
else
echo ""
@@ -325,6 +367,25 @@ echo ""
####
TEMP_YN="n"
if [ "$USE_PCH" = "yes" ] ; then
TEMP_YN="y"
fi
echo "Do you want to build using precompiled headers? This can speed up"
echo "the build, but uses more disk space."
echo2 "[$TEMP_YN] "
read YN
if [ "$YN" ] ; then
if [ "$YN" = "y" ] ; then
USE_PCH="yes"
else
USE_PCH="no"
fi
fi
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."
@@ -350,6 +411,7 @@ RUNGROUP="$RUNGROUP"
UMASK=$UMASK
DEBUG="$DEBUG"
USE_RUN_CC_PL="$USE_RUN_CC_PL"
USE_PCH="$USE_PCH"
EXTRA_CONFIG_ARGS="$EXTRA_CONFIG_ARGS"
EOT
echo "done."
+1 -1
View File
@@ -479,7 +479,7 @@ macro(calculate_libraries SRC SKIP SRC_LDFLAGS EXTRA_DEPENDS)
endforeach(LIBRARY_PATH)
# Iterate through libraries and add them to the linker flags
foreach(LIBRARY ${LIBRARIES})
set(THIS_LDFLAGS "${THIS_LDFLAGS} -l${LIBRARY}")
append_to_list(EXTRA_DEPENDENCIES "${LIBRARY}")
endforeach(LIBRARY)
set(${SRC_LDFLAGS} "${THIS_LDFLAGS}")
set(${EXTRA_DEPENDS} "${EXTRA_DEPENDENCIES}")
+1 -1
View File
@@ -20,7 +20,7 @@ endif(NOT WIN32)
# If we found everything we need set variables correctly for lang/CMakeLists.txt to use
if(GETTEXT_FOUND)
set(LIBINTL_INCLUDE "${GETTEXT_INCLUDE}/libintl.h")
include_directories("${GETTEXT_INCLUDE}")
set(GETTEXT_MSGFMT_EXECUTABLE ${GETTEXT_MSGFMT})
if(WIN32)
+8
View File
@@ -0,0 +1,8 @@
#include <sys/eventfd.h>
int main()
{
int i = eventfd(0, EFD_NONBLOCK);
return i >= 0 ? 1 : 0;
}
+2 -2
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 mysql/tables.sql)
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 chanstats.example.conf)
install(FILES ${DATA}
DESTINATION data
DESTINATION ${CONF_DIR}
)
+310
View File
@@ -0,0 +1,310 @@
/*
* Example configuration file for BotServ.
*/
/*
* First, create the service.
* Note that an easy way to rename this service is to define{} the client name to something else.
*/
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"; }
/*
* bs_set_dontkickops
*
* Provides the command botserv/set/dontkickops.
*
* Used for preventing BotServ from kicking channel operators.
*/
module { name = "bs_set_dontkickops" }
command { service = "BotServ"; name = "SET DONTKICKOPS"; command = "botserv/set/dontkickops"; }
/*
* bs_set_dontkickvoices
*
* Provides the command botserv/set/dontkickvoices.
*
* Used for preventing BotServ from kicking voices.
*/
module { name = "bs_set_dontkickvoices" }
command { service = "BotServ"; name = "SET DONTKICKVOICES"; command = "botserv/set/dontkickvoices"; }
/*
* bs_set_fantasy
*
* Provides the command botserv/set/fantasy.
*
* Used for enabling or disabling BotServ's fantaisist commands.
*/
module { name = "bs_set_fantasy" }
command { service = "BotServ"; name = "SET FANTASY"; command = "botserv/set/fantasy"; }
/*
* bs_set_greet
*
* Provides the command botserv/set/greet.
*
* Used for enabling or disabling BotServ's greet messages in a channel.
*/
module { name = "bs_set_greet" }
command { service = "BotServ"; name = "SET GREET"; command = "botserv/set/greet"; }
/*
* bs_set_nobot
*
* Provides the command botserv/set/nobot.
*
* Used by Services Operators to prohibit specific channels from being assigned BotServ bots.
*/
module { name = "bs_set_nobot" }
command { service = "BotServ"; name = "SET NOBOT"; command = "botserv/set/nobot"; }
/*
* bs_set_private
*
* Provides the command botserv/set/private.
*
* Used by Services Operators to prohibit specific BotServ bots from being assigned to channels.
*/
module { name = "bs_set_private" }
command { service = "BotServ"; name = "SET PRIVATE"; command = "botserv/set/private"; }
File diff suppressed because it is too large Load Diff
+50
View File
@@ -0,0 +1,50 @@
/*
* Example configuration file for chanstats
* Make sure BotServ, ChanServ and NickServ are running.
*/
module { name = "m_chanstats" }
chanstats
{
/*
* The name of this engine.
* This must match with the name of a SQL engine block
*/
engine = "mysql/main"
/*
* An optional prefix to prepended to the name of each created table.
* Do not use the same prefix for other programs.
*/
prefix = "anope_"
smileyshappy = ":) :-) ;) :D :-D"
smileyssad = ":( :-( ;( ;-("
smileysother = ":/"
/*
* Enable Chanstats for new registered nicks / channels
* set it to 0 to disable it.
*/
NSDefChanstats = 1
CSDefChanstats = 1
}
module { name = "cs_set_chanstats" }
command { service = "ChanServ"; name = "SET CHANSTATS"; command = "chanserv/set/chanstats"; }
module { name = "ns_set_chanstats" }
command { service = "NickServ"; name = "SET CHANSTATS"; command = "nickserv/set/chanstats"; }
module { name = "cs_fantasy_stats" }
command { service = "ChanServ"; name = "STATS"; command = "chanserv/stats"; }
command { service = "ChanServ"; name = "GSTATS"; command = "chanserv/gstats"; }
module { name = "cs_fantasy_top" }
command { service = "ChanServ"; name = "TOP"; command = "chanserv/top"; }
command { service = "ChanServ"; name = "TOP10"; command = "chanserv/top10"; }
command { service = "ChanServ"; name = "GTOP"; command = "chanserv/gtop"; }
command { service = "ChanServ"; name = "GTOP10"; command = "chanserv/gtop10"; }
+507 -1113
View File
File diff suppressed because it is too large Load Diff
+125
View File
@@ -0,0 +1,125 @@
/*
* Example configuration file for Global.
*/
/*
* First, create the service.
* Note that an easy way to rename this service is to define{} the client name to something else.
*/
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"; }
+201
View File
@@ -0,0 +1,201 @@
/*
* Example configuration file for HostServ.
*/
/*
* First, create the service.
* Note that an easy way to rename this service is to define{} the client name to something else.
*/
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"; }
+238
View File
@@ -0,0 +1,238 @@
/*
* Example configuration file for MemoServ.
*/
/*
* First, create the service.
* Note that an easy way to rename this service is to define{} the client name to something else.
*/
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"; }
+497
View File
@@ -0,0 +1,497 @@
/*
* [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_httpd
*
* Allows services to serve web pages. By itself, this module does nothing useful.
*
* Note that using this will allow users to get the IP of your services.
* To prevent this we recommend using a reverse proxy or a tunnel.
*/
#module { name = "m_httpd" }
httpd
{
/* Name of this service */
name = "httpd/main"
/* IP to listen on */
ip = "0.0.0.0"
/* Port to listen on */
port = 8080
/* Time before connections to this server are timed out */
timeout = 30
/* If you are using a reverse proxy that sends one of the
* extforward_headers set below, set this to its IP.
* This allows services to obtain the real IP of users by
* reading the forwarded-for HTTP header.
*/
#extforward_ip = "192.168.0.255"
/* The header to look for. These probably work as is. */
extforward_header = "X-Forwarded-For Forwarded-For"
}
/*
* 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 credentials used for performing searches and adding users.
*/
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 used for searching for users's accounts.
*/
basedn = "ou=users,dc=anope,dc=org"
/*
* The search filter used to look up users's accounts.
* %account is replaced with the user's account
* %object_class is replaced with the object_class configured below.
*/
search_filter = "(&(uid=%account)(objectClass=%object_class))"
/*
* 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 of 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_regex_pcre
*
* Provides the regex engine regex/pcre, which uses the Perl Compatible Regular Expressions library.
*/
module { name = "m_regex_pcre" }
/*
* m_regex_posix
*
* Provides the regex engine regex/posix, which uses the POSIX compliant regular expressions.
* This is likely the only regex module you will not need extra libraries for.
*/
#module { name = "m_regex_posix" }
/*
* m_regex_tre
*
* Provides the regex engine regex/tre, which uses the TRE regex library.
*/
#module { name = "m_regex_tre" }
/*
* 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" }
ssl
{
/*
* An optional certificate and key for m_ssl to give to the uplink.
*
* You can generate your own certificate and key pair by using:
*
* openssl genrsa -out anope.key 2048
* openssl req -new -x509 -key anope.key -out anope.crt -days 1095
*/
cert = "data/anope.crt"
key = "data/anope.key"
}
/*
* 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
}
/*
* webcpanel
*
* This module creates a web configuration panel that allows users and operators to perform any task
* as they could over IRC. If you are using the default configuration you should be able to access
* this panel by visiting http://127.0.0.1:8080 in your web browser from the machine Anope is running on.
*
* This module requires m_httpd.
*/
#module { name = "webcpanel" }
webcpanel
{
/* Web server to use */
server = "httpd/main";
/* Template to use */
template = "default";
/* Page title */
title = "Anope IRC Services";
}
-453
View File
@@ -1,453 +0,0 @@
-- phpMyAdmin SQL Dump
-- version 3.3.5
-- http://www.phpmyadmin.net
--
-- Host: localhost
-- Generation Time: Oct 31, 2010 at 03:02 AM
-- Server version: 5.1.50
-- PHP Version: 5.3.3-pl1-gentoo
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
--
-- Database: `anope`
--
-- --------------------------------------------------------
--
-- Table structure for table `anope_bs_badwords`
--
CREATE TABLE IF NOT EXISTS `anope_bs_badwords` (
`channel` varchar(255) NOT NULL DEFAULT '',
`word` varchar(255) NOT NULL,
`type` varchar(50) NOT NULL,
UNIQUE KEY `channel` (`channel`,`word`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- --------------------------------------------------------
--
-- Table structure for table `anope_bs_core`
--
CREATE TABLE IF NOT EXISTS `anope_bs_core` (
`nick` varchar(255) NOT NULL DEFAULT '',
`user` varchar(255) NOT NULL DEFAULT '',
`host` text NOT NULL,
`rname` text NOT NULL,
`flags` text NOT NULL,
`created` int(10) unsigned NOT NULL DEFAULT '0',
`chancount` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`nick`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- --------------------------------------------------------
--
-- Table structure for table `anope_bs_info_metadata`
--
CREATE TABLE IF NOT EXISTS `anope_bs_info_metadata` (
`botname` varchar(255) NOT NULL DEFAULT '',
`name` varchar(255) NOT NULL DEFAULT '',
`value` text NOT NULL,
KEY `FK_anope_bs_info_metadata_botname` (`botname`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- --------------------------------------------------------
--
-- Table structure for table `anope_cs_access`
--
CREATE TABLE IF NOT EXISTS `anope_cs_access` (
`level` int(11) NOT NULL DEFAULT '0',
`display` varchar(255) NOT NULL DEFAULT '',
`channel` varchar(255) NOT NULL DEFAULT '',
`last_seen` int(10) unsigned NOT NULL DEFAULT '0',
`creator` varchar(255) NOT NULL DEFAULT '',
UNIQUE KEY `channel` (`channel`,`display`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- --------------------------------------------------------
--
-- Table structure for table `anope_cs_akick`
--
CREATE TABLE IF NOT EXISTS `anope_cs_akick` (
`channel` varchar(255) NOT NULL DEFAULT '',
`flags` varchar(255) NOT NULL DEFAULT '',
`mask` varchar(255) NOT NULL DEFAULT '',
`reason` text NOT NULL,
`creator` varchar(255) NOT NULL DEFAULT '',
`created` int(10) unsigned NOT NULL DEFAULT '0',
`last_used` int(10) unsigned NOT NULL DEFAULT '0',
UNIQUE KEY `channel` (`channel`,`mask`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- --------------------------------------------------------
--
-- Table structure for table `anope_cs_info`
--
CREATE TABLE IF NOT EXISTS `anope_cs_info` (
`name` varchar(255) NOT NULL DEFAULT '',
`founder` text NOT NULL,
`successor` text NOT NULL,
`descr` text NOT NULL,
`time_registered` int(10) unsigned NOT NULL DEFAULT '0',
`last_used` int(10) unsigned NOT NULL DEFAULT '0',
`last_topic` text NOT NULL,
`last_topic_setter` text NOT NULL,
`last_topic_time` int(10) unsigned NOT NULL DEFAULT '0',
`flags` text NOT NULL,
`forbidby` text NOT NULL,
`forbidreason` text NOT NULL,
`bantype` smallint(6) NOT NULL DEFAULT '0',
`mlock_on` text NOT NULL,
`mlock_off` text NOT NULL,
`mlock_params` text NOT NULL,
`entry_message` text NOT NULL,
`memomax` smallint(5) unsigned NOT NULL DEFAULT '0',
`botnick` varchar(255) NOT NULL DEFAULT '',
`botflags` text NOT NULL,
`capsmin` smallint(6) NOT NULL DEFAULT '0',
`capspercent` smallint(6) NOT NULL DEFAULT '0',
`floodlines` smallint(6) NOT NULL DEFAULT '0',
`floodsecs` smallint(6) NOT NULL DEFAULT '0',
`repeattimes` smallint(6) NOT NULL DEFAULT '0',
PRIMARY KEY (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- --------------------------------------------------------
--
-- Table structure for table `anope_cs_info_metadata`
--
CREATE TABLE IF NOT EXISTS `anope_cs_info_metadata` (
`channel` varchar(255) NOT NULL DEFAULT '',
`name` varchar(255) NOT NULL DEFAULT '',
`value` text NOT NULL,
KEY `FK_anope_cs_info_metadata_channel` (`channel`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- --------------------------------------------------------
--
-- Table structure for table `anope_cs_levels`
--
CREATE TABLE IF NOT EXISTS `anope_cs_levels` (
`channel` varchar(255) NOT NULL DEFAULT '',
`position` int(11) NOT NULL DEFAULT '0',
`level` int(11) NOT NULL DEFAULT '0',
UNIQUE KEY `channel` (`channel`,`position`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- --------------------------------------------------------
--
-- Table structure for table `anope_cs_ttb`
--
CREATE TABLE IF NOT EXISTS `anope_cs_ttb` (
`channel` varchar(255) NOT NULL DEFAULT '',
`ttb_id` int(11) NOT NULL DEFAULT '0',
`value` int(11) NOT NULL DEFAULT '0',
UNIQUE KEY `channel` (`channel`,`ttb_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- --------------------------------------------------------
--
-- Table structure for table `anope_extra`
--
CREATE TABLE IF NOT EXISTS `anope_extra` (
`data` text NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- --------------------------------------------------------
--
-- Table structure for table `anope_hs_core`
--
CREATE TABLE IF NOT EXISTS `anope_hs_core` (
`nick` varchar(255) NOT NULL,
`vident` varchar(64) NOT NULL,
`vhost` varchar(255) NOT NULL,
`creator` varchar(255) NOT NULL,
`time` int(11) NOT NULL,
KEY `FK_anope_hs_core_nick` (`nick`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- --------------------------------------------------------
--
-- Table structure for table `anope_info`
--
CREATE TABLE IF NOT EXISTS `anope_info` (
`version` int(11) DEFAULT NULL,
`date` datetime DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- --------------------------------------------------------
--
-- Table structure for table `anope_ms_info`
--
CREATE TABLE IF NOT EXISTS `anope_ms_info` (
`receiver` varchar(255) NOT NULL,
`flags` int(11) NOT NULL DEFAULT '0',
`time` int(10) unsigned NOT NULL DEFAULT '0',
`sender` text NOT NULL,
`text` blob NOT NULL,
`serv` enum('NICK','CHAN') NOT NULL DEFAULT 'NICK',
KEY `FK_anope_ms_info_receiver` (`receiver`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- --------------------------------------------------------
--
-- Table structure for table `anope_ns_access`
--
CREATE TABLE IF NOT EXISTS `anope_ns_access` (
`display` varchar(255) NOT NULL DEFAULT '',
`access` varchar(160) NOT NULL,
KEY `FK_anope_ns_access_display` (`display`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- --------------------------------------------------------
--
-- Table structure for table `anope_ns_alias`
--
CREATE TABLE IF NOT EXISTS `anope_ns_alias` (
`nick` varchar(255) NOT NULL DEFAULT '',
`last_quit` text NOT NULL,
`last_realname` text NOT NULL,
`last_usermask` text NOT NULL,
`time_registered` int(10) unsigned NOT NULL DEFAULT '0',
`last_seen` int(10) unsigned NOT NULL DEFAULT '0',
`flags` text NOT NULL,
`display` varchar(255) NOT NULL DEFAULT '',
PRIMARY KEY (`nick`),
KEY `FK_anope_ns_alias_display` (`display`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- --------------------------------------------------------
--
-- Table structure for table `anope_ns_alias_metadata`
--
CREATE TABLE IF NOT EXISTS `anope_ns_alias_metadata` (
`nick` varchar(255) NOT NULL DEFAULT '',
`name` varchar(255) NOT NULL DEFAULT '',
`value` text NOT NULL,
KEY `FK_anope_ns_alias_metadata_nick` (`nick`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- --------------------------------------------------------
--
-- Table structure for table `anope_ns_core`
--
CREATE TABLE IF NOT EXISTS `anope_ns_core` (
`display` varchar(255) NOT NULL DEFAULT '',
`pass` text NOT NULL,
`email` text NOT NULL,
`greet` text NOT NULL,
`flags` text NOT NULL,
`language` smallint(5) unsigned NOT NULL DEFAULT '0',
`channelcount` smallint(5) unsigned NOT NULL DEFAULT '0',
`memomax` smallint(5) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (`display`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- --------------------------------------------------------
--
-- Table structure for table `anope_ns_core_metadata`
--
CREATE TABLE IF NOT EXISTS `anope_ns_core_metadata` (
`nick` varchar(255) NOT NULL DEFAULT '',
`name` varchar(255) NOT NULL DEFAULT '',
`value` text NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- --------------------------------------------------------
--
-- Table structure for table `anope_ns_request`
--
CREATE TABLE IF NOT EXISTS `anope_ns_request` (
`nick` varchar(255) NOT NULL DEFAULT '',
`passcode` text NOT NULL,
`password` text NOT NULL,
`email` text NOT NULL,
`requested` int(10) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (`nick`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- --------------------------------------------------------
--
-- Table structure for table `anope_os_akills`
--
CREATE TABLE IF NOT EXISTS `anope_os_akills` (
`user` varchar(255) NOT NULL,
`host` varchar(255) NOT NULL,
`xby` text NOT NULL,
`reason` text NOT NULL,
`seton` int(10) unsigned NOT NULL DEFAULT '0',
`expire` int(10) unsigned NOT NULL DEFAULT '0'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- --------------------------------------------------------
--
-- Table structure for table `anope_os_core`
--
CREATE TABLE IF NOT EXISTS `anope_os_core` (
`maxusercnt` int(11) NOT NULL DEFAULT '0',
`maxusertime` int(10) unsigned NOT NULL DEFAULT '0',
`akills_count` int(11) NOT NULL DEFAULT '0',
`snlines_count` int(11) NOT NULL DEFAULT '0',
`sqlines_count` int(11) NOT NULL DEFAULT '0',
`szlines_count` int(11) NOT NULL DEFAULT '0'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- --------------------------------------------------------
--
-- Table structure for table `anope_os_exceptions`
--
CREATE TABLE IF NOT EXISTS `anope_os_exceptions` (
`mask` varchar(255) NOT NULL,
`slimit` int(11) NOT NULL DEFAULT '0',
`who` text NOT NULL,
`reason` text NOT NULL,
`time` int(10) unsigned NOT NULL DEFAULT '0',
`expires` int(10) unsigned NOT NULL DEFAULT '0'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- --------------------------------------------------------
--
-- Table structure for table `anope_os_xlines`
--
CREATE TABLE IF NOT EXISTS `anope_os_xlines` (
`type` varchar(20) NOT NULL,
`mask` varchar(255) NOT NULL,
`xby` text NOT NULL,
`reason` text NOT NULL,
`seton` int(10) unsigned NOT NULL DEFAULT '0',
`expire` int(10) unsigned NOT NULL DEFAULT '0'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
--
-- Constraints for dumped tables
--
--
-- Constraints for table `anope_bs_badwords`
--
ALTER TABLE `anope_bs_badwords`
ADD CONSTRAINT `FK_anope_bs_badwords_channel` FOREIGN KEY (`channel`) REFERENCES `anope_cs_info` (`name`) ON DELETE CASCADE
ON UPDATE CASCADE;
--
-- Constraints for table `anope_bs_info_metadata`
--
ALTER TABLE `anope_bs_info_metadata`
ADD CONSTRAINT `FK_anope_bs_info_metadata_botname` FOREIGN KEY (`botname`) REFERENCES `anope_bs_core` (`nick`) ON DELETE
CASCADE ON UPDATE CASCADE;
--
-- Constraints for table `anope_cs_access`
--
ALTER TABLE `anope_cs_access`
ADD CONSTRAINT `FK_anope_cs_access_channel` FOREIGN KEY (`channel`) REFERENCES `anope_cs_info` (`name`) ON DELETE CASCADE ON
UPDATE CASCADE;
--
-- Constraints for table `anope_cs_akick`
--
ALTER TABLE `anope_cs_akick`
ADD CONSTRAINT `FK_anope_cs_akick_channel` FOREIGN KEY (`channel`) REFERENCES `anope_cs_info` (`name`) ON DELETE CASCADE ON
UPDATE CASCADE;
--
-- Constraints for table `anope_cs_info_metadata`
--
ALTER TABLE `anope_cs_info_metadata`
ADD CONSTRAINT `FK_anope_cs_info_metadata_channel` FOREIGN KEY (`channel`) REFERENCES `anope_cs_info` (`name`) ON DELETE
CASCADE ON UPDATE CASCADE;
--
-- Constraints for table `anope_cs_levels`
--
ALTER TABLE `anope_cs_levels`
ADD CONSTRAINT `FK_anope_cs_levels_channel` FOREIGN KEY (`channel`) REFERENCES `anope_cs_info` (`name`) ON DELETE CASCADE ON
UPDATE CASCADE;
--
-- Constraints for table `anope_cs_ttb`
--
ALTER TABLE `anope_cs_ttb`
ADD CONSTRAINT `FK_anope_cs_ttb_channel` FOREIGN KEY (`channel`) REFERENCES `anope_cs_info` (`name`) ON DELETE CASCADE ON
UPDATE CASCADE;
--
-- Constraints for table `anope_hs_core`
--
ALTER TABLE `anope_hs_core`
ADD CONSTRAINT `FK_anope_hs_core_nick` FOREIGN KEY (`nick`) REFERENCES `anope_ns_alias` (`nick`) ON DELETE CASCADE ON UPDATE
CASCADE;
--
-- Constraints for table `anope_ms_info`
--
ALTER TABLE `anope_ms_info`
ADD CONSTRAINT `FK_anope_ms_info_receiver` FOREIGN KEY (`receiver`) REFERENCES `anope_ns_alias` (`nick`) ON DELETE CASCADE ON
UPDATE CASCADE;
--
-- Constraints for table `anope_ns_access`
--
ALTER TABLE `anope_ns_access`
ADD CONSTRAINT `FK_anope_ns_access_display` FOREIGN KEY (`display`) REFERENCES `anope_ns_core` (`display`) ON DELETE CASCADE
ON UPDATE CASCADE;
--
-- Constraints for table `anope_ns_alias`
--
ALTER TABLE `anope_ns_alias`
ADD CONSTRAINT `FK_anope_ns_alias_display` FOREIGN KEY (`display`) REFERENCES `anope_ns_core` (`display`) ON DELETE CASCADE
ON UPDATE CASCADE;
--
-- Constraints for table `anope_ns_alias_metadata`
--
ALTER TABLE `anope_ns_alias_metadata`
ADD CONSTRAINT `FK_anope_ns_alias_metadata_nick` FOREIGN KEY (`nick`) REFERENCES `anope_ns_alias` (`nick`) ON DELETE CASCADE
ON UPDATE CASCADE;
+647
View File
@@ -0,0 +1,647 @@
/*
* Example configuration file for NickServ.
*/
/*
* First, create the service.
* Note that an easy way to rename this service is to define{} the client name to something else.
*/
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
/*
* Registration confirmation setting. Set to "none" for no registration confirmation,
* "mail" for email confirmation, and "admin" to have services operators manually confirm
* every registration. Set to "disable" to completely disable all registrations.
*/
registration = "none"
/*
* A message sent to users on connect if they user an unregistered nick.
*
* This directive is optional.
*/
#unregistered_notice = "Your nickname is not registered. To register it use /nickserv register password email."
/*
* 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 (excluding the LIST subcommand), DROP, FORBID, SUSPEND,
* GETPASS and SET PASSWORD commands by services operators on other services operators.
*
* 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"; }
+592
View File
@@ -0,0 +1,592 @@
/*
* Example configuration file for OperServ.
*/
/*
* First, create the service.
* Note that an easy way to rename this service is to define{} the client name to something else.
*/
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
/*
* 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"; }
+768 -2
View File
@@ -1,3 +1,769 @@
Revision 271d723 - Sun, 2 Sep 2012 08:31:11 -0400 - Update Changes
Revision a0c4575 - Sun, 2 Sep 2012 08:31:04 -0400 - Regenerate language files
Revision 1af64a9 - Sun, 2 Sep 2012 08:30:54 -0400 - Fix Windows
Revision e3d5140 - Sat, 1 Sep 2012 18:54:51 -0400 - Added a web panel module + a default template
Revision f81d011 - Tue, 28 Aug 2012 00:39:50 -0400 - Actually set xline's manager...
Revision fde4289 - Thu, 9 Aug 2012 23:28:02 -0400 - Fixed db_old loading encrypted passwords from 1.8
Revision f7bf2fa - Wed, 8 Aug 2012 17:09:34 -0400 - Put motd in conf/ not data/ and fixed the default values in the config
Revision b894a56 - Wed, 8 Aug 2012 04:28:33 -0400 - Update pid and motd file paths
Revision 48022c3 - Wed, 18 Jul 2012 16:52:14 -0400 - Warn about really big integer values in the config
Revision 28aa981 - Sun, 1 Jul 2012 23:50:38 -0400 - Actually the core can't handle empty realnames, just ignore them
Revision 2b8a09b - Sun, 1 Jul 2012 22:26:05 -0400 - Remove some unused code in inspircd20 protocol module & allow /chghost/ident/naming services clients
Revision a12788e - Sun, 1 Jul 2012 22:26:05 -0400 - Don't crash on empty setnames on inspircd1.2
Revision 9b5f6d3 - Sun, 1 Jul 2012 22:26:05 -0400 - Remove ExtensibleString everywhere
Revision af24dc6 - Tue, 26 Jun 2012 16:21:24 +0100 - Removed old set xop references and cleared up some other stuff.
Revision f27560c - Tue, 26 Jun 2012 02:01:01 +0100 - Merge branch '1.9' of ssh://anope.git.sf.net/gitroot/anope/anope into 1.9
Revision 4b309b5 - Mon, 25 Jun 2012 20:51:08 -0400 - Fixed accidentally recursion in User::SendMessage from last commit
Revision d8a99d6 - Fri, 22 Jun 2012 21:26:33 +0100 - Merge branch '1.9' of ssh://anope.git.sf.net/gitroot/anope/anope into 1.9
Revision 2dec8e7 - Mon, 18 Jun 2012 05:04:30 -0400 - Allow userless command sources
Revision ba53c7e - Sun, 17 Jun 2012 22:23:22 +0100 - Updated MODULES somewhat
Revision 873d428 - Mon, 11 Jun 2012 15:44:48 -0400 - Split up bs_set
Revision 3626fb2 - Wed, 6 Jun 2012 15:16:46 -0400 - Fixed fd leak in win32/pipe.cpp
Revision a661098 - Mon, 4 Jun 2012 05:45:13 +0100 - Some more fantasy character help output
Revision a4bf5ce - Mon, 4 Jun 2012 04:50:35 +0100 - minor help output changes, including some confusion in fantasy chars
Revision 437944d - Fri, 1 Jun 2012 04:43:26 -0400 - Merge branch '1.9' of anope.git.sf.net:/gitroot/anope/anope into 1.9
Revision db37b1c - Fri, 1 Jun 2012 07:37:34 +0200 - updated chanstats
Revision 1e49e9b - Sat, 26 May 2012 02:36:02 -0400 - This should actually be LOG_TERMINAL, quitmsg isn't logged to terminal on shutdown
Revision 2cbfbc9 - Sat, 26 May 2012 02:15:48 -0400 - Some access level fixes from Robby to more closely match the historic levels, and some code cleanup
Revision 38d5f20 - Thu, 24 May 2012 21:54:15 -0400 - Added a ./Config option for using precompiled headers
Revision 70fb590 - Wed, 23 May 2012 19:35:56 -0400 - Add support for inspircd2.0+s mlock, improved on Unreal's, and made server side mlock usage configurable
Revision bf7d1a5 - Wed, 23 May 2012 15:09:41 -0400 - Fixed some problems found by Robby
Revision 1f73e27 - Sun, 20 May 2012 04:14:26 -0400 - Updated help messages for ns_list, cs_list, cs_entrymsg, and cs_info. Also fixed logging for cs_entrymsg.
Revision 699087b - Sun, 20 May 2012 03:57:22 -0400 - Fixed cs_entrymsg loading entries from the database
Revision ccd2908 - Thu, 17 May 2012 03:57:19 -0400 - reinterpret_cast off of a virtual base does Bad Things
Revision a883362 - Thu, 17 May 2012 02:03:22 -0400 - Fixed not always calling operator bool() in dynamic_reference, which would mess up service references and do weird things
Revision ef88385 - Tue, 15 May 2012 17:19:50 -0400 - m_ldap_authentication: Removed the dependency on a specific binddn in favour of searching the tree for matching criteria and using the returned DN
Revision 90b0283 - Tue, 15 May 2012 04:27:36 -0400 - Grab the DN for every LDAP query and send it in the result
Revision 0a8d46b - Mon, 14 May 2012 22:30:03 -0400 - Fixed parsing FMODE on inspircd 1.1
Revision a84226e - Fri, 11 May 2012 00:50:58 -0400 - Do not show help for set message if useprivmsg is disabled
Revision 9370b06 - Thu, 10 May 2012 17:53:53 -0400 - Fixed crash on access del + valgrind errors
Revision d5ffae0 - Wed, 9 May 2012 03:37:37 -0400 - Made ssl cert and keyfiles configurable
Revision f895997 - Wed, 9 May 2012 03:11:57 +0100 - fixed paste error (failed awesomeness) in last commit.
Revision a81b3aa - Wed, 9 May 2012 01:23:34 +0100 - Fixed saving backups
Revision 820e4ed - Tue, 8 May 2012 18:04:49 -0400 - Fixed some 100% cpu bugs with the new SQL stuff, and fixed sqlite+db_sql_live
Revision 25586f3 - Tue, 8 May 2012 02:01:44 -0400 - Allow services operators to release other user's nicks, and allow services operators to view the access list of other operators
Revision b7149fc - Sun, 6 May 2012 21:44:11 -0400 - Merge branch '1.9' of anope.git.sf.net:/gitroot/anope/anope into 1.9
Revision 675b113 - Sun, 6 May 2012 21:43:50 -0400 - Split up db/conf/lib/locale install directories, and allow alternate ones to be specified at runtime
Revision c797987 - Sat, 5 May 2012 09:35:18 +0200 - Readding missing valid nick check to ns register/group removed in os_forbid commit
Revision eb0e07d - Fri, 4 May 2012 16:03:02 -0400 - Use Unreal's MLOCK command if supported
Revision 1b5805e - Sun, 29 Apr 2012 20:39:33 -0400 - Set quitmsg on ERROR
Revision 42e652c - Sun, 29 Apr 2012 19:24:37 -0400 - Pull table schemas from SQL on startup so we can alter the schemas if we need to, fixed sqlite to work again
Revision 62818ab - Sun, 29 Apr 2012 15:43:51 -0400 - Added options:casemap to chose how case insensitive strings are compared, using ascii, rfc1459, or a locale installed on the system
Revision 4d9a96e - Fri, 27 Apr 2012 17:06:16 -0400 - Fixes to db_sql
Revision e490a54 - Fri, 27 Apr 2012 16:05:49 -0400 - Process defines even before includes, fixes defining{} pseudoclient names to something else in their respective configurations
Revision 5068483 - Fri, 27 Apr 2012 15:38:50 -0400 - Add db_sql:prefix allow prefixing all anope tables similarly, and changed db_sql to update the databases incrementally instead of one big flush
Revision 83ee20f - Wed, 25 Apr 2012 19:02:09 -0400 - Clarify access denied messages caused by NSSecureAdmins
Revision b08aa4e - Wed, 25 Apr 2012 18:49:53 -0400 - Check for os_sesion to exist before having defcon try and place session bans
Revision 1081ecd - Wed, 25 Apr 2012 14:29:50 -0400 - Fixed non-debug build
Revision 2370c16 - Tue, 24 Apr 2012 16:02:07 -0400 - Fixed build from the previous merge
Revision 3d84dc9 - Mon, 23 Apr 2012 05:17:02 -0400 - Merge branch '1.9' of anope.git.sf.net:/gitroot/anope/anope into 1.9
Revision 573e49a - Mon, 23 Apr 2012 05:08:26 -0400 - Reworked live SQL support yet again
Revision 63c639e - Mon, 23 Apr 2012 05:07:06 -0400 - Fixed hashm checking in db_old and loading 1.9.1 databases
Revision fc00406 - Sun, 22 Apr 2012 02:57:17 -0400 - Fixed ./services --version etc not getting printed when stdout is a file/pipe/not a tty
Revision b752c3a - Fri, 13 Apr 2012 18:33:22 +0200 - fixed a bug in chanstats
Revision 7372b45 - Sun, 8 Apr 2012 19:29:56 +0200 - fixed a compile error in m_sqlite
Revision deb5196 - Sun, 8 Apr 2012 12:43:34 +0200 - Added Chanstats. It uses a new, improved database format and is not compatible with current phpdenora or magirc installations.
Revision 9e1fda2 - Sun, 8 Apr 2012 12:30:48 +0200 - Modified the SQL API to allow unescaped parameters (useful for passing row names and NULL values)
Revision 9d249ef - Fri, 6 Apr 2012 14:41:28 -0400 - Fixed unpacking questions from dns packets
Revision e03b73e - Fri, 6 Apr 2012 15:36:49 +0200 - Revert changes made to line endings.
Revision 6b473f2 - Fri, 6 Apr 2012 15:12:22 +0200 - Revert last commit cause guess what, I screwed things up
Revision 05bb80c - Fri, 6 Apr 2012 14:35:34 +0200 - Fixed mail function causing some MTAs to sent blank messages
Revision e6edc65 - Sun, 1 Apr 2012 20:50:46 +0200 - updated the german language file
Revision cf3124c - Sun, 1 Apr 2012 20:50:04 +0200 - fixed some typos
Revision 12a6a27 - Tue, 27 Mar 2012 19:14:55 -0400 - Merge branch '1.9' of anope.git.sf.net:/gitroot/anope/anope into 1.9
Revision 31a0e67 - Tue, 27 Mar 2012 19:01:29 -0400 - Fixed unpacking multiple names from dns packets when one has multiple compression pointers. Currently this will just fail at unpacking the later name due to offsets being invalid. Also cleaned up the existing code and made unpacking error messages more helpful.
Revision 8d0b4a1 - Thu, 22 Mar 2012 07:30:38 +0100 - added a missing error message when a module file does not exist. this fixes bug #1401. also moved some debug messages to debug level 2
Revision 1b0ebca - Wed, 21 Mar 2012 22:20:18 +0100 - fixed bug #1399
Revision 0d100ff - Wed, 21 Mar 2012 20:25:25 +0100 - fixed ns_ajoin
Revision 88fd1da - Tue, 13 Mar 2012 21:07:10 -0400 - Fixed typos
Revision a069347 - Tue, 13 Mar 2012 19:26:11 -0400 - Actually check if the nicks arent registered, oops
Revision a26f4b9 - Tue, 13 Mar 2012 17:45:07 -0400 - Bug #1389 - readd RNG seed in the config and start DNS query ids off on a random number
Revision 053d6a2 - Tue, 13 Mar 2012 17:18:11 -0400 - Add a nickserv:unregistered_notice config option to send a message to unregistered users on connect. Suggested by Cronus.
Revision beae477 - Tue, 13 Mar 2012 16:58:14 -0400 - Bug #1382 - Save maxusercount and maxusertime
Revision cff91a5 - Sun, 11 Mar 2012 21:21:47 -0400 - Made gch files depend on the header they were generated from
Revision 92ed5d7 - Sun, 11 Mar 2012 16:44:44 -0400 - Fixed having multiple uplink blocks work right if the first uplink fails on startup
Revision 7800375 - Sun, 11 Mar 2012 05:20:28 -0400 - Bug #1384 - Fixed spacing of connection log message if users have no vhost - patch from cbiedl
Revision ab25815 - Mon, 5 Mar 2012 20:15:56 -0500 - Fixed backup databases having their names collide due to not separating month and day, #1383
Revision 8e01043 - Mon, 5 Mar 2012 14:29:48 -0500 - Fixed bs_kick syntax error
Revision b7a6d51 - Sun, 4 Mar 2012 10:18:25 +0100 - fixed the --dir commandline parameter
Revision 4ed844f - Fri, 2 Mar 2012 17:05:59 -0500 - Escape all column names when building sql queries
Revision 020467d - Mon, 27 Feb 2012 00:16:15 -0500 - Fixed db_old loading noexpire
Revision 141b87b - Sun, 26 Feb 2012 23:28:02 -0500 - Changed the OnChanDrop event to be called right before channels are dropped, not after
Revision a5b9e23 - Sun, 26 Feb 2012 23:23:15 -0500 - Added chanserv:require config option to set which modes must be on all registered channels. Prevents the core from always enforcing +r on every channel, even if chanserv is not loaded.
Revision a78790e - Sun, 26 Feb 2012 20:18:22 -0500 - Fixed vhost check on identify
Revision 07226fe - Sun, 26 Feb 2012 19:49:02 -0500 - Track plexus umode and cmode +C and renamed UMODE_NO_CTCP to match up with the names of other modes.
Revision e730138 - Sat, 25 Feb 2012 22:45:51 -0500 - Fixed missing #include in init.cpp
Revision 2bc3bd3 - Sat, 25 Feb 2012 00:06:02 -0500 - Do not send kills after sending XLines because it causes us to internally remove the user and then recieve a quit from the user (who is now nonexistant) once the IRCd processes the XLine
Revision 83456f6 - Fri, 24 Feb 2012 23:25:29 -0500 - Fixed akill setter and ids showing in akill reasons
Revision 601dc41 - Fri, 24 Feb 2012 14:54:44 -0500 - Merge branch '1.9' of anope.git.sf.net:/gitroot/anope/anope into 1.9
Revision 2337b77 - Fri, 24 Feb 2012 14:53:34 -0500 - Fixed calculating bots channel count of assigned channels and fixed the order of saving memos (among other things)
Revision fde40de - Fri, 24 Feb 2012 01:50:21 +0000 - Tell users to use NickServ for registering nicks, not chanserv...
Revision ba32aad - Thu, 23 Feb 2012 02:32:49 +0000 - Merge branch '1.9' of ssh://anope.git.sf.net/gitroot/anope/anope into 1.9
Revision 24811e5 - Wed, 22 Feb 2012 20:55:59 -0500 - Added a configuration option to make all nick registrations require admin verification
Revision f01aab5 - Thu, 23 Feb 2012 00:04:36 +0000 - Merge branch '1.9' of ssh://anope.git.sf.net/gitroot/anope/anope into 1.9
Revision 3850b07 - Wed, 22 Feb 2012 18:12:02 -0500 - Added regex support for many commands, such as akill, sqline, snline, all of the */list commands, etc.
Revision 81e50dd - Wed, 22 Feb 2012 16:25:20 -0500 - Fixed db_old loading memo owners
Revision bd31fbb - Wed, 22 Feb 2012 14:41:36 -0500 - Also fixed m_proxyscan to handle users with invalid ips
Revision 0006606 - Tue, 21 Feb 2012 20:50:14 -0500 - Fixed m_dnsbl handling users with spoofs/other non ips
Revision 826de43 - Wed, 22 Feb 2012 00:28:58 +0000 - Fixed some trivial formatting
Revision b84e080 - Sun, 19 Feb 2012 20:54:55 -0500 - Made our message sources actual clients/servers, and put in a few more default messages for very standard things (KICK etc)
Revision 0ba58d7 - Sat, 18 Feb 2012 18:07:34 -0500 - Fixed some events
Revision 1536c5c - Sat, 18 Feb 2012 17:21:55 -0500 - Add users hostmask to access lists not nick when access add is used on a non registered user
Revision f2ce9cd - Sat, 18 Feb 2012 15:47:16 -0500 - Made mode lock del check status of the mode lock before removing it
Revision ee5cd84 - Sat, 18 Feb 2012 15:04:26 -0500 - Use C++11's explicit override feature if available
Revision 41e8d27 - Thu, 16 Feb 2012 16:02:17 -0500 - Fixed FreeBSD build
Revision e1f5fc6 - Wed, 15 Feb 2012 00:06:25 -0500 - Remove revision numbers as they're only ever set by Config reading git since we've switched off of SVN. Instead just use the hash for the current head when building. Also recheck the hash on every make not just Config.
Revision db59f1a - Tue, 14 Feb 2012 19:03:09 -0500 - Fixed detecting when to set +r and fixed crash on shutdown introduced by the last commit
Revision a9772cd - Tue, 14 Feb 2012 15:13:27 -0500 - Clean up and reorganize our header files
Revision 086790d - Mon, 13 Feb 2012 00:10:45 -0500 - Removed our RNG and just use the systems, it's not very widely used. Also made DNS query ids not random as they don't need to be.
Revision 1bc8e2a - Wed, 8 Feb 2012 18:00:24 -0500 - Removed operserv:notifications in favor of log blocks, as well as some other notifiications
Revision 089c85b - Sat, 4 Feb 2012 17:28:38 -0500 - Fixed WallBadOS
Revision 01194e3 - Sat, 4 Feb 2012 13:12:11 -0500 - Bump for 1.9.7-git
Revision f082530 - Fri, 3 Feb 2012 15:19:09 -0500 - Anope 1.9.6 Release
Revision b906656 - Fri, 3 Feb 2012 15:18:27 -0500 - Update version.log
Revision 378ae4c - Fri, 3 Feb 2012 15:18:06 -0500 - Regenerate language files
Revision ce2a0f7 - Tue, 31 Jan 2012 16:19:47 -0500 - Fixed a memory leak in m_ldap
Revision be5ba49 - Tue, 31 Jan 2012 15:44:04 -0500 - Not sure what I was thinking here
Revision b4f27da - Tue, 31 Jan 2012 15:35:51 -0500 - Bug #1365 - Fixed nickserv/confirm syntax for services opers
Revision d09a302 - Thu, 26 Jan 2012 17:04:59 -0500 - Also refuse to load memoserv modules if memoserv isn't loaded
Revision 0f90927 - Wed, 25 Jan 2012 16:13:38 -0500 - Added two common warning messages on Windows to ignore
Revision 52eaa7d - Wed, 25 Jan 2012 15:48:07 -0500 - Windows
Revision e88e37c - Tue, 24 Jan 2012 18:28:37 -0500 - Add some checks in ms_* to make sure memoserv really exists
Revision f10f49d - Tue, 24 Jan 2012 16:42:21 -0500 - Added missing expires column in /os akill view
Revision d06cdaa - Tue, 24 Jan 2012 16:35:54 -0500 - Fixed os_ignore to check against users real IPs, not to match against opers, and check for expired ignores on /os ignore list
Revision fc20bd7 - Tue, 24 Jan 2012 16:03:44 -0500 - Add tracking for Unreal's usermode +I
Revision b3d9412 - Sun, 22 Jan 2012 17:49:23 +0100 - added a french INSTALL file, thanks to MacLeod for translating
Revision 98feb1b - Sat, 21 Jan 2012 00:50:48 -0500 - Cleaned up bs_kick and fixed amsg kicker
Revision 94c302b - Fri, 20 Jan 2012 20:50:36 +0000 - Fixed param check from last commit
Revision cdb6bb8 - Fri, 20 Jan 2012 17:50:09 +0000 - Updated DEFCON and fixed Defcons disabling of the removed mlock command
Revision a851f84 - Fri, 20 Jan 2012 15:03:49 +0000 - Corrected some incorrect English
Revision a270a13 - Sun, 15 Jan 2012 02:59:09 -0500 - Fixed crash from last commit
Revision 964d63c - Sun, 15 Jan 2012 01:47:31 -0500 - Improve on db_sql_live_read
Revision f38faed - Sat, 14 Jan 2012 15:58:51 +0000 - Fixed an incorrect crash-causing response when an invalid option is specified in botservs kickers
Revision c462a69 - Fri, 13 Jan 2012 15:37:17 -0500 - Only match users nicks against access list entries if the entry is a mask... accidentally removed from an earlier fix for #1368
Revision 14a2c9c - Wed, 11 Jan 2012 19:04:40 -0500 - Fixed loading db_sql_live_read's configuration values on startup
Revision a52ed70 - Tue, 10 Jan 2012 17:58:56 -0500 - Don't ever attempt to process CTCPs as regular messages
Revision 7c03e60 - Tue, 10 Jan 2012 17:53:48 -0500 - 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
Revision 1e9d88a - Tue, 10 Jan 2012 17:06:08 -0500 - Add support for Unreals extban ~a:
Revision 815e140 - Sun, 8 Jan 2012 19:42:48 -0500 - Fixed loading akill reasons
Revision f824557 - Sun, 8 Jan 2012 18:14:07 -0500 - Fixed topic lock on inspircd
Revision 830c5ca - Sat, 7 Jan 2012 16:21:31 -0500 - Cleanup of cs_tban
Revision 9e71394 - Sat, 7 Jan 2012 04:10:30 -0500 - Cleaned up a lot of log messages, help replies, fixed cs_tban, and other small fixes
Revision dd64eac - Sat, 7 Jan 2012 03:44:43 -0500 - Fixed users not being able to delete their own access with /cs access when using numbers, and clean up cs_xop slightly
Revision 4204ece - Mon, 2 Jan 2012 21:28:24 -0500 - Updated Copyright to 2012
Revision 60a5cc1 - Sat, 31 Dec 2011 03:04:44 -0500 - Bug #1369 - Fixed os_svsnick to allow changing the case of a users' nick
Revision 20aa4e8 - Sat, 31 Dec 2011 01:33:32 -0500 - Bug #1368 - check all members of a users gruop against the access list
Revision f1b05ac - Wed, 28 Dec 2011 12:49:04 -0500 - Fixed this back now unreal sends 0 for non logged in users
Revision a4bf770 - Wed, 28 Dec 2011 04:31:44 -0500 - Added ESVID support to unreal32 Also fixes a crash due to unreal's ESVID change when users connect.
Revision 150831c - Tue, 27 Dec 2011 23:11:14 -0500 - Made capab management a bit simplier
Revision 1a4157b - Fri, 23 Dec 2011 12:29:30 -0500 - Add DT_ALLOW_EMPTY config flag, allow fantasychars to be empty
Revision 3bcb285 - Thu, 22 Dec 2011 03:46:35 -0500 - Somehow these two modules got mixed up..
Revision 704dbe2 - Tue, 20 Dec 2011 18:38:37 -0500 - Updated /bs info output and note db_sql can truncate entire databases
Revision bbddf50 - Mon, 19 Dec 2011 17:13:38 -0500 - Fixed botserv kickers
Revision e5851ad - Mon, 19 Dec 2011 16:07:28 -0500 - Fixed saving databases with MySQL when shut down by SIGINT
Revision 03119f2 - Mon, 19 Dec 2011 15:41:14 -0500 - Made m_dnsbl ban IPs not hostnames
Revision 45fc3ce - Mon, 19 Dec 2011 15:37:15 -0500 - Fixed formatting of many lists and INFO outputs
Revision d320c73 - Sat, 17 Dec 2011 10:30:13 +0000 - Fixed entry messages not displaying.
Revision ca8ce89 - Sat, 17 Dec 2011 02:06:53 +0000 - Fixed a slight error in email registration/resend and some minor typos.
Revision c88a751 - Thu, 15 Dec 2011 02:29:13 -0500 - Add privilege ranks to determine how powerful privileges are
Revision 9ea030d - Thu, 15 Dec 2011 01:14:13 -0500 - Fixed access comparators
Revision ad14c81 - Mon, 12 Dec 2011 15:37:08 -0500 - Update channel last used times when founders use the channel, too
Revision 255a8da - Mon, 12 Dec 2011 15:26:59 -0500 - Added oper:require_oper configuration option
Revision 4211dcf - Sun, 11 Dec 2011 17:03:33 -0500 - Merge branch '1.9' of anope.git.sf.net:/gitroot/anope/anope into 1.9
Revision 3c5337f - Sun, 11 Dec 2011 17:01:56 -0500 - Fixed translating messages with varargs sent directly to users, too
Revision d2f788c - Sun, 11 Dec 2011 05:17:19 +0000 - Added K to vhost_chars...
Revision fa54d5a - Thu, 8 Dec 2011 17:29:17 -0500 - Fixed a memory leak in m_sqlite
Revision aeefe16 - Mon, 5 Dec 2011 11:52:40 -0500 - Bug #1364 - fixed crash in /cs kick
Revision c80e784 - Sat, 3 Dec 2011 19:17:41 -0500 - Attempt to fix issue with modules having their link libraries in the wrong order.
Revision 620c08b - Fri, 25 Nov 2011 23:12:23 +0000 - Fixed some more errors in sql live-write, hopefully the last.
Revision 23a9270 - Fri, 25 Nov 2011 23:10:26 +0000 - Fixed a crash in ns saset when using mysql-write module
Revision cef3eb7 - Fri, 25 Nov 2011 00:44:31 -0500 - Remove send_cmd and replace it with a stringstream
Revision 12d0a73 - Mon, 21 Nov 2011 16:24:45 -0500 - Merge branch '1.9' of ssh://anope.git.sf.net/gitroot/anope/anope into 1.9
Revision 0dd85f7 - Mon, 21 Nov 2011 16:17:17 -0500 - Fixed not translating messages using varargs
Revision 51d6e8e - Sun, 20 Nov 2011 18:41:46 -0500 - CMake handles strings and lists differently, so this should hopefully finally fix the linking issue.
Revision 3f14882 - Sun, 20 Nov 2011 18:34:13 -0500 - Apparently pstdint.h was NOT included way back with commit 377a7a9 to use something similar to stdint.h
Revision 5a17b06 - Sun, 20 Nov 2011 18:32:47 -0500 - Really fix linking in libraries (even if gettext isn't found on *nix), and a minor nitpick about the leading spaces on LINK_LIBS.
Revision bf8e4ac - Sun, 20 Nov 2011 16:09:59 -0500 - Attempt to fix where link libraries are set when compiling to fix failed builds on systems that require -ldl.
Revision 781ed11 - Sun, 20 Nov 2011 15:31:01 -0500 - Allow services operators to modify other users access list
Revision 6f8f749 - Fri, 18 Nov 2011 16:20:17 -0500 - Allow kicking and banning by mask
Revision c43cdf4 - Fri, 18 Nov 2011 11:22:01 -0500 - Added operserv/logout
Revision 8374211 - Fri, 18 Nov 2011 00:36:54 -0500 - Allow having multiple fantasy characters
Revision 69dfc72 - Thu, 17 Nov 2011 12:46:18 -0500 - Fixed storing mode locks
Revision 5281282 - Wed, 16 Nov 2011 16:22:58 -0500 - Fixed compile error
Revision 503eb42 - Tue, 15 Nov 2011 16:30:31 -0500 - Made looking up a level for a nonexistant privilege debugg log a warning, not abort
Revision 38d90c7 - Tue, 15 Nov 2011 16:27:32 -0500 - Fixed loading ssl certs for users
Revision 1356498 - Tue, 15 Nov 2011 16:22:02 -0500 - Prevent locking mode Z on unrealircd
Revision 9ed203c - Tue, 15 Nov 2011 16:16:38 -0500 - Fixed crash on shutdown & a compiler warning
Revision b5ff856 - Tue, 8 Nov 2011 17:29:16 -0500 - Windows
Revision 97b9055 - Sat, 5 Nov 2011 15:05:15 -0400 - Remove xlines from the IRCd aswell as from our list when the clear command is used, and fixed adding timed Zlines to inspircd
Revision 5f0b933 - Sat, 5 Nov 2011 00:11:49 -0400 - Set proper expirys on ZLines if the IRCd supports it
Revision b3194a1 - Fri, 4 Nov 2011 19:39:27 -0400 - Updated Changes
Revision d01f4ea - Fri, 4 Nov 2011 18:04:12 -0400 - Allow /os userlist to match host and ip too
Revision a42cafb - Fri, 4 Nov 2011 17:55:14 -0400 - 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
Revision 066e5b3 - Fri, 4 Nov 2011 02:28:21 -0400 - Delete all tables before flushing not just ones we know about
Revision 09dba47 - Thu, 3 Nov 2011 18:59:51 -0400 - Added an assignment operator for Serializable because some STL containers use it which causes iterators to become invalidated
Revision ca33ac6 - Thu, 3 Nov 2011 02:28:29 -0400 - Bug #1354 - Allow mode chars to be used for channel prefixs in services.conf
Revision 302989b - Tue, 1 Nov 2011 01:11:26 -0400 - Clarify the message when users try to lock modes they don't have access to lock
Revision 22b7d9f - Tue, 1 Nov 2011 00:15:28 -0400 - Added a copy constructor to dynamic_reference to allow references to reference other references correctly
Revision 9dd71c4 - Sat, 29 Oct 2011 21:16:50 -0400 - Fixed the signal/fork/wait mess hopefully once and for all. fork() did not copy kqueue descriptors on freebsd which caused problems
Revision 655c1cc - Thu, 27 Oct 2011 18:21:49 -0400 - 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).
Revision d9333e0 - Thu, 27 Oct 2011 18:01:56 -0400 - Clear flags before rebuilding them from the databases. Fixes bug #1351 where default flags would always be set when unserializing objects.
Revision 39ac438 - Thu, 27 Oct 2011 15:09:31 -0400 - Ignore sigchld/usr2 sent to the child process after fork
Revision 0761a4a - Thu, 27 Oct 2011 14:46:20 -0400 - Bug #1350 + other related fixes
Revision 66ca256 - Thu, 27 Oct 2011 13:50:32 -0400 - Fixed loading exceptions in db_plain
Revision 961bb6e - Thu, 27 Oct 2011 00:13:00 +0100 - Fixed some typos/errors in the example configs comments.
Revision b14f5ea - Wed, 26 Oct 2011 16:52:00 -0400 - Fixed accidentally clearing botmodes when joins are sent
Revision bf66336 - Wed, 26 Oct 2011 15:29:45 -0400 - Bug #1347, fixed incorrect param parsing in cs_set_misc
Revision c79a575 - Wed, 26 Oct 2011 15:17:05 -0400 - Bug #1348 - Fixed /cs entrymsg list
Revision 8334128 - Wed, 26 Oct 2011 14:31:58 -0400 - Removed the old unordered_map code
Revision 7c62de1 - Mon, 24 Oct 2011 16:37:29 -0400 - Merge branch '1.9' of anope.git.sf.net:/gitroot/anope/anope into 1.9
Revision 377a7a9 - Mon, 24 Oct 2011 16:32:29 -0400 - 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.
Revision ccf29c0 - Mon, 24 Oct 2011 13:19:51 -0400 - Fixed the capab parser to parse capab tokens prefixed with :. Fixes not detecting quitstorm support on ratbox
Revision d0513d6 - Sat, 22 Oct 2011 16:11:26 -0400 - A few minor fixups
Revision f4a0bdd - Sat, 22 Oct 2011 12:45:55 -0400 - Added our own eventfd test for openvz machines which have eventfd but can not be used
Revision 3e2ac36 - Sat, 22 Oct 2011 11:35:31 -0400 - Bug #1343 - don't allow recovering and ghosting enforcers
Revision c8b3809 - Sat, 22 Oct 2011 11:21:21 -0400 - Added akill ids
Revision ad2ef75 - Sat, 22 Oct 2011 11:20:50 -0400 - Fixed a race condition with installing signal handlers and forking
Revision 6ce9010 - Fri, 21 Oct 2011 18:01:51 -0400 - Fixed extracting multiple words from our serializable stringstream
Revision d0afc8c - Fri, 21 Oct 2011 00:21:34 -0400 - Added m_rewrite
Revision 230b3bc - Thu, 20 Oct 2011 13:38:37 -0400 - Only fork if we are at term
Revision 1cfb630 - Thu, 20 Oct 2011 11:54:56 -0400 - Fixed a crash in clearusers
Revision d16f962 - Wed, 19 Oct 2011 12:59:16 -0400 - Bug #1342 - fixed tracking chmodes in bahamuts sjoin
Revision fc16746 - Tue, 18 Oct 2011 12:18:18 -0400 - Prevent chankill from akilling my clients
Revision eb5b5f9 - Tue, 18 Oct 2011 12:06:51 -0400 - Fixed compile errors on release build
Revision faea452 - Tue, 18 Oct 2011 01:48:05 -0400 - Reorder some stuff in Init & the ts6 proto mods to fix weirdness from bots being introduced by 3rd party modules
Revision 2c614d5 - Sat, 15 Oct 2011 02:08:52 -0400 - Fixed up anoperc to work with the newer startup method
Revision 89b4be6 - Sat, 15 Oct 2011 00:54:32 -0400 - Fixed crash on /os oper del
Revision 28ca0e1 - Fri, 14 Oct 2011 22:07:13 -0400 - Fork earlier in startup to prevent it messing up threads, if there are any
Revision 2504af7 - Fri, 14 Oct 2011 12:53:28 -0400 - Fixed os_forbid adds reason if no expiry is given
Revision ddc3c2f - Fri, 14 Oct 2011 12:20:07 -0400 - Added options:nonicknameownership config option
Revision 53275c3 - Tue, 11 Oct 2011 02:50:37 -0400 - Don't add new levels to existing channels default, screws with stuff when the config is reloaded
Revision f3f6727 - Tue, 11 Oct 2011 00:09:26 -0400 - Bug #1337
Revision 4681e3a - Mon, 10 Oct 2011 17:19:06 -0400 - Allow chanserv/suspend to take an expiry time
Revision 80f4f31 - Mon, 10 Oct 2011 15:04:23 -0400 - Put serialized_items on the heap to prevent weird crashes on shutdown from the list being destructed before members in it
Revision 9f3d735 - Mon, 10 Oct 2011 14:16:59 -0400 - Allow nickserv/suspend to take an expiry time
Revision 0e012f7 - Sun, 9 Oct 2011 21:29:34 -0400 - Check for being at terminal before forking
Revision 9f85033 - Sun, 9 Oct 2011 02:52:13 -0400 - Give more verbose messages on startup
Revision af273e3 - Sun, 25 Sep 2011 15:34:56 -0400 - Store flags for objects, also fixes bug #1333
Revision 1f3e96f - Sun, 25 Sep 2011 14:42:09 -0400 - Made channel privileges case insensitive
Revision e7ba639 - Sun, 25 Sep 2011 14:38:21 -0400 - Remove opnotice from example configs
Revision 1f2399d - Sun, 25 Sep 2011 04:19:15 -0400 - Added a new database format and sqlite support. Also moved db-convert to a module.
Revision 43201ea - Mon, 19 Sep 2011 18:35:40 -0400 - Fixed /os reload doing weird things to service channels, and allow setting modes by clients on burst
Revision 7dce64e - Mon, 19 Sep 2011 13:14:20 -0400 - Fixed missing _ in cs_appendtopic
Revision 1184eb5 - Mon, 19 Sep 2011 13:12:52 -0400 - Allow OnPreHelp to stop processing
Revision 4c2a492 - Mon, 19 Sep 2011 12:36:52 -0400 - Call fantasy events even if the commands for them don't exist
Revision be77a7e - Mon, 19 Sep 2011 12:29:54 -0400 - Bug #1334 - fixed crash on /os oper info
Revision 934723f - Mon, 19 Sep 2011 12:14:02 -0400 - LOG_COMMAND must now always give a valid command
Revision f07295c - Fri, 16 Sep 2011 14:07:33 -0400 - Bug #1332 - Fixed ValidateUser to not require secure off to disable nickserv kill
Revision 26c1d67 - Sat, 10 Sep 2011 16:27:10 -0400 - Fixed compile errors & warnings from 1.9.6 to 1.9 merge
Revision 3d5889c - Sat, 10 Sep 2011 16:08:58 -0400 - Updated channel flag names to remove LOGCHAN
Revision 213c1c4 - Sat, 10 Sep 2011 02:42:18 -0400 - 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.
Revision 63cb8ca - Sat, 10 Sep 2011 02:06:31 -0400 - Moved signal/thread/mode checking to use signal pipes
Revision dc5d1fa - Sat, 10 Sep 2011 02:06:31 -0400 - Made ChanServ privileges configurable
Revision 563d158 - Sat, 10 Sep 2011 02:06:31 -0400 - Allow Config to install cmake
Revision 1478b5b - Sat, 10 Sep 2011 02:06:29 -0400 - Added chanserv/log
Revision 19e0b87 - Sat, 10 Sep 2011 02:05:56 -0400 - Removed /bs set msg
Revision 17ea4ed - Sat, 10 Sep 2011 02:05:03 -0400 - Fixed service_reference to work correctly with external classes
Revision feaef7c - Sat, 10 Sep 2011 02:05:03 -0400 - Allow services to register or unregister themselves
Revision c6d3fbd - Sat, 10 Sep 2011 02:05:02 -0400 - Added kqueue
Revision 700a585 - Sat, 10 Sep 2011 02:05:00 -0400 - Allow modules to add their own channel levels
Revision 62752db - Sat, 10 Sep 2011 01:58:39 -0400 - Rewrote mlock saving/loading code to not use this silly extensible hack
Revision f025d1b - Sat, 10 Sep 2011 01:58:38 -0400 - Made service_reference type safe
Revision 8c4417c - Sat, 10 Sep 2011 01:58:38 -0400 - Removed opnotice
Revision d4db2b8 - Sat, 10 Sep 2011 01:58:38 -0400 - Made the IsValidHost checks configurable
Revision bb8e04c - Sat, 10 Sep 2011 01:58:35 -0400 - Added oper:host and oper:vhost
Revision b504791 - Sat, 10 Sep 2011 01:55:37 -0400 - Cleaned up the dns engine, and fixed sometimes parsing multiple answer queries incorrectly
Revision d5749c1 - Sat, 10 Sep 2011 01:55:37 -0400 - Fixed eventfd pipeengine to not add the same socket twice
Revision f54ab5e - Sat, 10 Sep 2011 01:55:29 -0400 - Squash merge of 1.9 to 1.9.6
Revision 1e45019 - Sat, 10 Sep 2011 01:55:11 -0400 - Added m_proxyscan
Revision 2eb708e - Sat, 10 Sep 2011 01:55:09 -0400 - 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
Revision 4fcb371 - Sat, 10 Sep 2011 01:52:59 -0400 - 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
Revision 6401d93 - Sat, 10 Sep 2011 01:52:59 -0400 - Added chanserv/up and chanserv/down
Revision 8a9a39c - Sat, 10 Sep 2011 01:52:59 -0400 - Renamed the core pseudoclient modules to match their names
Revision 13e8b26 - Sat, 10 Sep 2011 01:52:59 -0400 - Made email messages sent by services configurable
Revision 8a6d657 - Sat, 10 Sep 2011 01:52:46 -0400 - Removed log:inhabitlogchannel and replaced it with service:channels
Revision 4a7ba7e - Sat, 10 Sep 2011 00:58:35 -0400 - Removed SZLine. Instead, have AKILL determine whether or not a ZLINE should be set.
Revision 2b5d9f3 - Sat, 10 Sep 2011 00:54:29 -0400 - Bump for 1.9.6 git
Revision 3a502f2 - Fri, 9 Sep 2011 23:28:58 -0400 - Anope 1.9.5 Release
Revision b6dad37 - Fri, 9 Sep 2011 23:28:37 -0400 - Update version.log
Revision 3cbad7f - Fri, 9 Sep 2011 23:27:15 -0400 - Regenerate language files
Revision b80a0a8 - Fri, 9 Sep 2011 22:27:51 -0400 - Updated Greek language file
Revision f844b0a - Fri, 9 Sep 2011 19:18:43 -0400 - Changed User::IsRecognized check to default to secure
Revision 6bd31b0 - Thu, 8 Sep 2011 19:00:30 -0400 - Bug #1330 & many other small fixes
Revision 7de1a7a - Mon, 5 Sep 2011 18:40:34 -0400 - Don't try and part service bots twice when channels drop
Revision 3815e7d - Sat, 3 Sep 2011 14:39:12 -0400 - Translate whole messages before splitting them up to send to users
Revision 30e6fc0 - Sat, 3 Sep 2011 14:13:14 -0400 - Merge branch '1.9' of anope.git.sf.net:/gitroot/anope/anope into 1.9
Revision fe1c5d4 - Sat, 3 Sep 2011 14:10:48 -0400 - Bug #1328 - Fixed fantasy to re-split message parameters correctly
Revision fa5ba63 - Sat, 3 Sep 2011 13:44:20 +0100 - Fixed a typo in the OperServ Global command
Revision 073db54 - Sat, 3 Sep 2011 01:29:57 -0400 - Added permission check in cs_sync
Revision ef10b5a - Sat, 3 Sep 2011 06:58:49 +0200 - Fixed operserv global
Revision 1c5ff92 - Mon, 29 Aug 2011 17:08:26 -0400 - Changed a few fatal exceptions to shutdown a bit more gracefully
Revision b24ea29 - Mon, 29 Aug 2011 16:13:37 -0400 - Fixed the /ms del message sent to users when they use /ms read
Revision 5cf3ddb - Mon, 29 Aug 2011 16:03:33 -0400 - Made config rehashing not wipe opers configured with opersev/oper
Revision 1e1a41f - Sat, 27 Aug 2011 20:58:09 -0400 - Added missing ` in docs/LANGUAGE
Revision 28e8190 - Sat, 27 Aug 2011 20:47:30 -0400 - Fixed some cmake warnings
Revision 670c928 - Sat, 27 Aug 2011 17:13:28 -0400 - Tweaked the access operators to allow superadmins to be > channel founders
Revision d07a692 - Sat, 27 Aug 2011 16:52:07 -0400 - Fixed /cs clone to set botmodes on the botserv bot when cloning channels
Revision bb52530 - Sat, 27 Aug 2011 16:45:14 -0400 - Fixed mlock with param modes if you change (but not unset) the mode
Revision 309dfa3 - Sat, 27 Aug 2011 16:14:04 -0400 - Fixed a few mysql problems, including bug #1326
Revision 5c57f5a - Sat, 27 Aug 2011 15:34:09 -0400 - Fixed /ns logout on other users
Revision a36e575 - Thu, 25 Aug 2011 19:01:40 -0400 - Merge branch '1.9' of anope.git.sf.net:/gitroot/anope/anope into 1.9
Revision 8702031 - Thu, 25 Aug 2011 19:01:01 -0400 - Set the creator of default mlocks to the channel founder when a channel is registered
Revision 1571508 - Thu, 25 Aug 2011 10:16:56 +0200 - Only match users against the more "serious" extbans (ones which prevent users from joining)
Revision 6dacec2 - Wed, 24 Aug 2011 21:11:23 +0200 - guested nicks are now logged out from the recovered account on /nickserv recover
Revision fdbbea2 - Wed, 24 Aug 2011 14:27:01 -0400 - Fixed cs_set_misc
Revision dffed5a - Wed, 24 Aug 2011 13:57:56 -0400 - Merge branch '1.9' of anope.git.sf.net:/gitroot/anope/anope into 1.9
Revision 5d681a7 - Wed, 24 Aug 2011 13:56:48 -0400 - Clear NS_HELD from nicks when recover expiry is up
Revision d80e00f - Wed, 24 Aug 2011 13:57:40 +0200 - Fixed automatic fingerprint identify on nickchange between registered nicks
Revision 21a8bff - Tue, 23 Aug 2011 19:04:27 -0400 - Merge branch '1.9' of anope.git.sf.net:/gitroot/anope/anope into 1.9
Revision fb14f77 - Tue, 23 Aug 2011 19:03:04 -0400 - Set os_session as having first priority for events
Revision 2284c31 - Tue, 23 Aug 2011 11:42:40 +0200 - Replaced some chanserv/forbid with operserv/forbid in example.conf and added a check for ForceForbidReason in os_forbid
Revision b5b2c42 - Mon, 22 Aug 2011 17:14:18 -0400 - Removed this ondeleteobject event, was for m_async_commands which died
Revision a2f92b6 - Mon, 22 Aug 2011 13:14:08 -0400 - Fixed the db_mysql metadata load events to use the right keys
Revision c996356 - Sun, 21 Aug 2011 16:35:22 -0400 - Bugs #1321 & 1322
Revision d71ae41 - Sun, 21 Aug 2011 14:54:06 -0400 - Fixed /cs access add log message to not show override for channel founders
Revision 68a125b - Sun, 21 Aug 2011 14:33:11 -0400 - Fixed ns_set_misc and cs_set_misc to allow unsetting values
Revision 37c7ca8 - Sun, 21 Aug 2011 14:09:55 -0400 - Fixed AddAkiller
Revision 4663970 - Sat, 20 Aug 2011 00:57:35 -0400 - Removed m_async_commands, it can still cause crashes from invalid pointers on the stack & is a giant mess anyway
Revision a68d17c - Sat, 20 Aug 2011 00:51:39 -0400 - Moved the ERROR log message out of debug
Revision fa3b74a - Sat, 20 Aug 2011 00:50:26 -0400 - 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
Revision fd999b9 - Fri, 19 Aug 2011 16:14:26 -0400 - Fixed some problems with deleting access
Revision b4f5724 - Fri, 19 Aug 2011 04:20:11 -0400 - Fixed AccessGroup::operator> fail
Revision abdc69a - Fri, 19 Aug 2011 09:07:19 +0200 - added some log message for automatic fingerprint identify and removed a unused function from ns_cert
Revision 1b02216 - Thu, 18 Aug 2011 23:08:27 -0400 - Fixed crash in /cs mode
Revision db340f9 - Thu, 18 Aug 2011 22:04:59 -0400 - Fixed some permission checking fail in modules that got messed up from the big commands sed
Revision 0cdca53 - Thu, 18 Aug 2011 17:30:49 -0400 - 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.
Revision 71b9bbd - Thu, 18 Aug 2011 16:48:51 -0400 - Bug #1315 - moved CA_ASSIGN permission from sop to qop
Revision 2f3969b - Thu, 18 Aug 2011 07:59:58 +0200 - Bug #1317 - fixed sha1 fingerprint hashes in the inspircd protocol modules
Revision ff7479f - Thu, 18 Aug 2011 00:47:34 -0400 - Fixed attaching to events in db_mysql & possibly having ChannelInfo::WhoSends return NULL if there really are *no* bots
Revision 487d828 - Wed, 17 Aug 2011 22:05:47 -0400 - Actually made the nickserv block optional
Revision f41081b - Wed, 17 Aug 2011 21:41:30 -0400 - Include when an access entry was created in access view
Revision ede910d - Wed, 17 Aug 2011 15:56:40 -0400 - Made /os oper info also show all inherited commands/privs
Revision 0f4c9a4 - Tue, 16 Aug 2011 16:38:42 -0400 - List supported languages in /ns help saset language
Revision 9aa414b - Tue, 16 Aug 2011 15:28:21 -0400 - Fixed matching acount access entries against nicknames
Revision 2d9ddb0 - Tue, 16 Aug 2011 13:43:01 -0400 - Bug #1316 - added permissions for hs_request commands
Revision 1f542e1 - Tue, 16 Aug 2011 00:16:00 -0400 - Moved cs_seens data purger log message to debug
Revision 68e0d99 - Tue, 16 Aug 2011 00:09:09 -0400 - Fixed select()ing 0 sockets on Windows
Revision f43287f - Sun, 14 Aug 2011 22:10:17 -0400 - Fixed grammar problem in cs_clone
Revision 2e7bd64 - Sun, 14 Aug 2011 21:46:14 -0400 - Fixed /cs clone access
Revision 786397f - Sun, 14 Aug 2011 21:33:07 -0400 - Massive cleanup of cs_seen, added help, syntax messages, command descriptions, removed lots of dead code, fixed memory leaks, etc
Revision 960c339 - Sun, 14 Aug 2011 18:50:22 -0400 - Brought back the old 1.7 behavior of a level -1 matching all users and 0 matching all identified users
Revision fddb230 - Sun, 14 Aug 2011 17:01:28 -0400 - Bug #1312, fixed loading autoowner from db_plain
Revision 1b8dc4d - Sun, 14 Aug 2011 16:34:20 -0400 - Fixed updating exceptions
Revision fcc03f4 - Sun, 14 Aug 2011 15:59:14 -0400 - Do not put users hosts in session akills
Revision 78b8b30 - Sun, 14 Aug 2011 15:27:20 -0400 - Fixed resolving hosts when connecting to our uplink
Revision 91d8cc4 - Sun, 14 Aug 2011 15:25:02 -0400 - Revert "Fixed resolving hosts on connect"
Revision 11619be - Sun, 14 Aug 2011 21:21:50 +0200 - Fixed resolving hosts on connect
Revision e767ded - Sun, 14 Aug 2011 01:01:38 -0400 - Fixed default settings for log blocks
Revision 83a579f - Sat, 13 Aug 2011 23:05:30 -0400 - Fixed number list position when requesting custom lists from akill
Revision 244f879 - Sat, 13 Aug 2011 20:00:45 +0200 - Fixed permission check in botserv set
Revision 6f0da68 - Sat, 13 Aug 2011 09:43:38 -0400 - Fixed anope_os_core insert statement
Revision af43852 - Sat, 13 Aug 2011 09:27:42 -0400 - Fixed /cs saset noexpire syntax
Revision ad4c4e4 - Fri, 12 Aug 2011 13:08:53 -0400 - Send replies back to uses after m_ldap_authentication processes
Revision ed33a4f - Fri, 12 Aug 2011 12:48:29 -0400 - Merge branch '1.9' of anope.git.sf.net:/gitroot/anope/anope into 1.9
Revision f3d7d4e - Fri, 12 Aug 2011 12:46:11 -0400 - Track when our clients are introduced or not
Revision bd4916e - Fri, 12 Aug 2011 14:54:31 +0200 - Fixed loading/saving XLines in db_plain
Revision feee50e - Fri, 12 Aug 2011 03:13:56 -0400 - Allow bot usermodes to be configurable
Revision 54710a7 - Fri, 12 Aug 2011 01:51:14 -0400 - Removed the unused ChannelModeBan code
Revision d44a1d0 - Thu, 11 Aug 2011 23:10:08 -0400 - Fixed Windows runtime problems
Revision c2780e1 - Thu, 11 Aug 2011 22:21:40 +0200 - Added a separate field for last seen realhost to ns_info, shown to services admins only
Revision 4e1f54f - Thu, 11 Aug 2011 07:03:20 +0200 - added cs_seen
Revision 3755bf5 - Wed, 10 Aug 2011 15:50:45 -0400 - Ignore SIGPIPE
Revision 25d422d - Wed, 10 Aug 2011 15:47:02 -0400 - Fixed flags +* and -*
Revision 697bc8d - Wed, 10 Aug 2011 05:05:09 -0400 - Added a services.host define to easily change every clients hostname
Revision 4bdc982 - Wed, 10 Aug 2011 01:34:14 -0400 - Added two missing files
Revision ded98ed - Wed, 10 Aug 2011 01:32:07 -0400 - Fixed windows build
Revision 13bcc4e - Wed, 10 Aug 2011 00:28:31 -0400 - Replace the old sigaction for a signal when our Signal destructs
Revision ce92c9b - Tue, 9 Aug 2011 22:18:31 -0400 - Remove +P from unregistered channels if persist is set
Revision b332fbd - Tue, 9 Aug 2011 18:34:17 -0400 - Fixed parsing TMODE on ratbox
Revision eaf4e69 - Tue, 9 Aug 2011 17:07:20 -0400 - Updated Changes
Revision 2f67c70 - Tue, 9 Aug 2011 16:38:10 +0200 - fixed the operserv forbid del command
Revision 8348392 - Tue, 9 Aug 2011 13:36:33 +0200 - fixed wrong syntax-message for botserv set msg
Revision 8116ad9 - Tue, 9 Aug 2011 04:38:35 -0400 - 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
Revision cb74359 - Tue, 9 Aug 2011 01:56:08 -0400 - Fixed a typo in init.cpp
Revision 776583a - Tue, 9 Aug 2011 01:55:34 -0400 - Simiplied a bit of the access system
Revision 91c3363 - Tue, 9 Aug 2011 00:06:44 -0400 - Hopefully sort this AccessGroup::HasPriv once and for all
Revision b7542fd - Mon, 8 Aug 2011 23:41:03 -0400 - Added a few sanity checks which never really should happen to db-convert
Revision 0c860a7 - Mon, 8 Aug 2011 23:32:52 -0400 - Fixed CMakeLists.txt detecting epoll
Revision 2d591f7 - Mon, 8 Aug 2011 20:34:27 -0400 - When we split from the uplink send a quit for *all* of our clients not just bots
Revision 9cb96f3 - Mon, 8 Aug 2011 06:24:29 +0100 - Merge branch '1.9' of ssh://anope.git.sf.net/gitroot/anope/anope into 1.9
Revision 286a9ed - Mon, 8 Aug 2011 06:19:35 +0100 - Standardized some of the SyntaxError/Help replies and corrected some syntax in BotServ set
Revision c4da496 - Mon, 8 Aug 2011 00:32:09 -0400 - 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.
Revision ade9239 - Sun, 7 Aug 2011 22:34:16 -0400 - Fixed the pipengines
Revision c6741d3 - Sun, 7 Aug 2011 19:04:27 -0400 - Always reset the levels of newly created channels, fixed DetermineLevel matching ACCESS_INVALID levels, and added in a disabled config option for levels
Revision 25e3408 - Sun, 7 Aug 2011 17:43:23 -0400 - Fixed generating sid on startup
Revision 35588cc - Sun, 7 Aug 2011 16:04:40 -0400 - 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
Revision 32bb63f - Sun, 7 Aug 2011 15:56:35 -0400 - Updated tables.sql
Revision 27912e1 - Sat, 6 Aug 2011 19:43:06 -0400 - Fixed two of the xop log messages
Revision b678aa6 - Sat, 6 Aug 2011 19:41:37 -0400 - Give channel founders +qo by default
Revision c3e9fc4 - Sat, 6 Aug 2011 18:33:44 -0400 - Show channel founders their channels in /ns alist
Revision 66ab59d - Sat, 6 Aug 2011 18:21:59 -0400 - Fixed loading older access entries
Revision deb79e8 - Sat, 6 Aug 2011 18:05:16 -0400 - sed'd a few typos
Revision a6dd65f - Sat, 6 Aug 2011 17:33:59 -0400 - Fixed suepradmin
Revision 0448e38 - Sat, 6 Aug 2011 16:49:55 -0400 - Document what /os oline does
Revision 749de00 - Sat, 6 Aug 2011 04:32:50 -0400 - Update last used times on channels when someone with access uses them
Revision 7849667 - Sat, 6 Aug 2011 04:16:10 -0400 - Added a define{} block which can be used to easially rename things
Revision e03efde - Sat, 6 Aug 2011 00:31:24 +0100 - Fixed ns_ajoin to check if adding a duplicate channel
Revision d6a8d27 - Fri, 5 Aug 2011 16:07:41 +0100 - Fixed an error and typo in CS SET OPNOTICE
Revision 5e18a72 - Fri, 5 Aug 2011 06:18:38 -0400 - Mark the new commands/ modules as CORE and fixed a typo in the example.conf
Revision e66063e - Fri, 5 Aug 2011 05:35:31 -0400 - Rewrote the example configurations and split them up into seperate files for each pseudo client.
Revision 9ec18a3 - Thu, 4 Aug 2011 21:59:01 -0400 - Added a command:permission setting
Revision 773a1f3 - Thu, 4 Aug 2011 16:41:36 -0400 - Updated a bit of the TODO
Revision b3f4ba0 - Wed, 3 Aug 2011 06:09:27 -0400 - Start the ts6 sid generator off at 00A if none is given
Revision 34da226 - Wed, 3 Aug 2011 05:54:03 -0400 - Generate random SIDs for us if one is not specified
Revision 16280f4 - Wed, 3 Aug 2011 05:42:41 -0400 - Added operserv/kill and removed version.h from .gitignore
Revision 42f954f - Tue, 2 Aug 2011 22:39:14 -0400 - Fixed reintroducing our clients if we disconnect and reconnect to the uplink
Revision 09f5591 - Tue, 2 Aug 2011 05:07:59 -0400 - Fixed /cs clone copying channel access, fixed restricted, and fixed some compiler warnings
Revision f690cd8 - Tue, 2 Aug 2011 02:02:13 -0400 - Made /ns info default to your account or your nick if no arguments are given
Revision d43e1fb - Tue, 2 Aug 2011 01:50:09 -0400 - Added opertype:modes
Revision 41b40f6 - Mon, 1 Aug 2011 23:42:20 -0400 - Split /os mode into /os mode and /os umode to make giving permission to just one possible
Revision f7adc0b - Mon, 1 Aug 2011 22:37:27 -0400 - Rewrote the access systems and added a flags access system
Revision 710c02f - Sun, 31 Jul 2011 19:11:26 +0100 - Fixed bug #1301 - Changed operserv/staff to reflect its renaming to operserv/oper
Revision 7f69d2b - Sun, 31 Jul 2011 14:41:59 +0100 - Fixed bug #1300
Revision a18e3f3 - Sun, 31 Jul 2011 07:00:27 -0400 - Bugs 1297-1299 and made /os stats work like the help describes it does
Revision 63a4201 - Sun, 31 Jul 2011 06:24:24 -0400 - Fixed these ModuleManager::Attach calls once and for all..
Revision b751800 - Sun, 31 Jul 2011 06:24:11 -0400 - Fixed os_defcon
Revision f321491 - Sun, 31 Jul 2011 04:00:35 -0400 - Fixed error message from being unable to connect
Revision 1cb11bb - Sun, 31 Jul 2011 03:22:23 -0400 - Fixed a few small problems, including m_ssl's connect feature sometimes failing for no good reason
Revision f29c88b - Fri, 29 Jul 2011 22:50:45 +0100 - Fixed bug #1294, Crash on NS SET HIDE
Revision f5e78d7 - Thu, 28 Jul 2011 07:06:08 +0100 - Fixed a typo in the nickserv/auspex oper privilege
Revision 25c4985 - Thu, 28 Jul 2011 06:36:29 +0100 - Fixed OS LOGONNEWS
Revision cd4f6da - Wed, 27 Jul 2011 19:24:58 -0400 - Bug #1289 - Fixed hooking to delcore event in cs_main
Revision 6e032de - Wed, 27 Jul 2011 19:17:21 -0400 - Bug #1288 - Fixed crash on /cs help access
Revision e2b47e0 - Wed, 27 Jul 2011 19:06:42 -0400 - Bug #1291 - fixed parsing JOIN on ratbox
Revision b32c961 - Wed, 27 Jul 2011 16:54:50 +0100 - Show the description in cs help set instead of the syntax
Revision 088337e - Tue, 26 Jul 2011 23:18:54 -0400 - Fixed /os ignore, /os exception del, and a crash in /cs entrymsg
Revision e8c00b9 - Tue, 26 Jul 2011 05:44:14 -0400 - A few small fixes
Revision 023d4b4 - Sat, 23 Jul 2011 13:22:56 +0100 - Fixed a typo that broke CS SET RESTRICTD and re-added abbreviation for CS SET DESC
Revision 87d2f4b - Sat, 23 Jul 2011 13:07:19 +0100 - Fix couple of typos in modules
Revision 39ca53c - Sun, 17 Jul 2011 21:58:27 +0100 - Fixed hs_request and corrected a typo(?) in hs activate
Revision 46f2f3b - Sun, 17 Jul 2011 13:08:15 +0100 - Fixed some of the extra modules
Revision cb56d50 - Sun, 17 Jul 2011 06:08:35 -0400 - Fixed up cs_set_misc and ns_set_misc
Revision b19dddb - Sat, 16 Jul 2011 07:03:04 -0400 - Fixed a few of the /cs set syntax messages to reflect the new syntax
Revision acceabe - Sat, 16 Jul 2011 06:52:13 -0400 - Bug #1287 - Only check if users should be deopped on syncing channels when the user is on a server that is also syncing.
Revision c3993b3 - Thu, 14 Jul 2011 22:37:46 -0400 - Fixed appending !*@* to some access list entries that are valid hosts
Revision f277be0 - Thu, 14 Jul 2011 21:40:21 -0400 - Fixed OSOpersOnly & CSOpersOnly
Revision 1a2486d - Thu, 14 Jul 2011 20:52:24 -0400 - These .pot files don't need to be under version control
Revision a735095 - Thu, 14 Jul 2011 20:00:39 -0400 - Added cs_sync
Revision ef75e17 - Thu, 14 Jul 2011 19:11:13 -0400 - Added bs_autoassign
Revision 5bf7dee - Thu, 14 Jul 2011 18:29:03 -0400 - Made channel descriptions optional
Revision f858164 - Thu, 14 Jul 2011 02:31:12 -0400 - Rewrote how commands are handled within Anope. This allows naming commands and having spaces within command names.
Revision 924f684 - Sun, 10 Jul 2011 19:32:10 -0400 - Bug #1283 - Upped the buffer used for messge replies, as some can be really big
Revision b5ec57a - Sun, 10 Jul 2011 19:07:45 -0400 - Bug #1285 - Fixed setting -P on channels with only a service bot in it
Revision 6d97848 - Sun, 10 Jul 2011 18:27:48 -0400 - Bug #1286 - Dont allow actions to mess up the caps kicker
Revision d2832b1 - Thu, 7 Jul 2011 02:23:11 -0400 - Use getrlimit instead of ulimit, fixes freebsd build
Revision 1a4fc39 - Wed, 6 Jul 2011 22:06:07 -0400 - Do not send news when a server is syncing
Revision 97388ab - Wed, 6 Jul 2011 22:05:01 -0400 - Fixed /hs set and /hs setall not allowing only a host
Revision 57ec310 - Wed, 6 Jul 2011 05:20:25 -0400 - Only call send once per write event in dns manager
Revision ffd5c04 - Wed, 6 Jul 2011 00:33:25 -0400 - Fixed chanserv/access/modify permission on non-xop channels
Revision cc3c2b6 - Tue, 5 Jul 2011 01:39:11 -0400 - Send account data once an account is confirmed
Revision c549aa4 - Mon, 4 Jul 2011 22:39:13 -0400 - Bug #1279 - Fixed strftime
Revision 714831b - Mon, 4 Jul 2011 22:34:21 -0400 - Bug #1282
Revision d6879c4 - Mon, 4 Jul 2011 14:25:13 -0400 - Bug #1280 - Fixed reading some na and bi flags in db_plain
Revision 2caf586 - Sun, 3 Jul 2011 00:19:54 -0400 - Clean up some of the dns code, udp is connectionless anyway so this isnt required
Revision c585964 - Mon, 27 Jun 2011 19:14:30 -0400 - Fixed the mode manager from complaining about prefixless modes on insp20
Revision 936a50d - Mon, 27 Jun 2011 15:35:09 -0400 - Fixed build on older cmake versions
Revision 3e98880 - Fri, 24 Jun 2011 03:40:18 -0400 - Fixed mail delay time
Revision 821826a - Fri, 24 Jun 2011 02:58:40 -0400 - The other part of #1277
Revision 7ec803f - Thu, 23 Jun 2011 15:31:57 -0400 - Bug #1277 - Dont send account data for unconfirmed nicks
Revision b1a075b - Thu, 23 Jun 2011 15:10:50 -0400 - Fixed bug #1276 and some other valgrind warnings
Revision 3be75cb - Mon, 20 Jun 2011 23:28:25 -0400 - Merge branch '1.9' of anope.git.sf.net:/gitroot/anope/anope into 1.9
Revision 2667f90 - Mon, 20 Jun 2011 23:25:46 -0400 - 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
Revision 2601871 - Mon, 20 Jun 2011 23:09:03 -0400 - Fix long-standing issue with the get token functions if the delimiter wasn't found in the string but you wanted the first "token".
Revision a3d0ab3 - Mon, 20 Jun 2011 23:00:49 -0400 - Use case insensitive matching when looking up servers by name
Revision a1b36ec - Fri, 17 Jun 2011 19:57:43 -0400 - Search all domains for language strings, fixes the mess that we used to use to translate strings in 3rd party modules
Revision 48e995d - Fri, 17 Jun 2011 13:34:47 -0400 - Bug #1275 - Don't log absolutely everything sent to operserv, most of its commands already have their own logs
Revision df971be - Tue, 14 Jun 2011 18:23:53 -0400 - Fixed a few small things
Revision 1cd6587 - Mon, 13 Jun 2011 18:20:22 +0200 - changed some _() to gtl() and updated do_strftime() and duration()
Revision 6148ffa - Sun, 12 Jun 2011 06:28:22 +0200 - added a Anope::string::capacity() function
Revision 717b4c3 - Thu, 9 Jun 2011 06:16:31 +0200 - small improvement for Timer::SetSecs()
Revision 74361be - Tue, 7 Jun 2011 06:16:57 +0200 - added a Timer::SetSecs() function
Revision a087e7f - Sun, 5 Jun 2011 18:18:50 -0400 - Fixed clearing bandata
Revision 3ad93a3 - Thu, 2 Jun 2011 14:59:34 -0400 - Burst our channels with the uplink when we connect & fixed bug #1274
Revision 184b346 - Thu, 2 Jun 2011 12:45:08 -0400 - Place version.h in build/ not include/
Revision b2c807d - Mon, 30 May 2011 13:14:33 -0400 - Fixed /ns alist
Revision 60548aa - Sun, 29 May 2011 19:05:28 -0400 - Fixed ns_update and db_mysql_live sql queries
Revision a45d155 - Mon, 23 May 2011 14:47:14 -0400 - Added an IsServicesOper event
Revision 121ae0b - Mon, 23 May 2011 13:32:01 -0400 - Added m_statusupdate
Revision 8bf8832 - Mon, 23 May 2011 04:41:51 -0400 - Rewrote the signal handling to use sigaction
Revision 4dd7e26 - Sun, 22 May 2011 09:05:21 +0200 - fixed a possible crash on database saving
Revision f4329df - Sat, 21 May 2011 15:33:10 -0400 - Merge branch '1.9' of anope.git.sf.net:/gitroot/anope/anope into 1.9
Revision 98729a6 - Sat, 21 May 2011 15:32:47 -0400 - Bug #1271
Revision 742ba97 - Sat, 21 May 2011 15:15:46 +0200 - fixed bug #1272
Revision 115f94b - Sat, 21 May 2011 04:57:27 -0400 - 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.
Revision 7e57272 - Thu, 19 May 2011 20:36:39 -0400 - Fixed compile from the earlier merge
Revision 13915d8 - Mon, 16 May 2011 04:10:18 -0400 - Modularized os_news
Revision 9962fae - Mon, 16 May 2011 04:10:18 -0400 - Calculate nc::channelcount at runtime
Revision 9fcbe29 - Mon, 16 May 2011 04:10:18 -0400 - Added os_oper
Revision fd4b52e - Mon, 16 May 2011 04:10:18 -0400 - Added os_forbid
Revision b59602a - Mon, 16 May 2011 04:10:18 -0400 - Check for a valid server in /operserv noop
Revision fd21c36 - Mon, 16 May 2011 04:10:18 -0400 - Fixed some logic fail in ts6_uid_retrieve
Revision b999c6c - Mon, 16 May 2011 04:10:15 -0400 - Expand more on m_alias and changed some std::string usage in sockets.cpp to use Anope::string
Revision 583954d - Mon, 16 May 2011 04:09:32 -0400 - Use module type to determine what type each module is instead of its location in the configuration file.
Revision 8fb1604 - Mon, 16 May 2011 04:09:07 -0400 - Fixed reading empty config values in the multiconfig code, caused by removal of DT_CHARPTR
Revision 284af25 - Mon, 16 May 2011 04:09:07 -0400 - 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
Revision e7887c1 - Mon, 16 May 2011 04:08:47 -0400 - Unmodularized the socket engine because its causing problems and really is unnecessary
Revision 076ebaf - Mon, 16 May 2011 04:07:56 -0400 - Moved some global functions to be member functions and misc cleanup
Revision 6922bd2 - Mon, 16 May 2011 04:07:30 -0400 - Fixed up the MySQL Query code and finished some command code I forgot earlier
Revision 13aa58c - Mon, 16 May 2011 04:06:22 -0400 - Removed DT_CHARPTR from the config reader, its unneeded
Revision c8c2315 - Mon, 16 May 2011 04:06:17 -0400 - Moved the core pseudo clients out into their own modules
Revision 1782ce2 - Mon, 16 May 2011 04:01:50 -0400 - Use std::map instead of unordered_map
Revision b28d374 - Mon, 16 May 2011 04:01:46 -0400 - Branch for 1.9.5
Revision 469a04e - Mon, 16 May 2011 02:58:06 -0400 - Anope 1.9.4 Release
Revision 605b5d5 - Mon, 16 May 2011 02:57:28 -0400 - Removed ngircd as we've decided not to support it at this time
Revision f7aa46f - Mon, 16 May 2011 02:47:23 -0400 - Note m_async_commands is experimental
Revision b445029 - Sun, 15 May 2011 21:02:06 -0400 - Fixed Windows build
Revision 57327a5 - Sun, 15 May 2011 19:54:35 -0400 - Fixed akill log message when there is no expiry time
Revision 4a3c642 - Sun, 1 May 2011 18:41:54 -0400 - Fixed sometimes not removing nick masks from the access list when the group is dropped
Revision 036b3c9 - Fri, 29 Apr 2011 18:03:04 -0400 - Temporary fix for /os restart with m_async_commands loaded, is fixed properly in 1.9.5
Revision 7da3334 - Thu, 28 Apr 2011 19:13:44 -0400 - Added a unique key for the anope_cs_mlock table
Revision cbdb9f5 - Wed, 27 Apr 2011 11:15:02 -0400 - Fixed bug #1265
Revision 5d3d6bc - Wed, 27 Apr 2011 09:26:51 -0400 - Fixed a crash if an expiring channel had the founder also on the access list
Revision 0cdc628 - Mon, 25 Apr 2011 15:58:46 -0400 - Fixed crash when certain nicks expire
Revision 4a733c9 - Mon, 25 Apr 2011 04:17:21 -0400 - Don't attempt to connect to the uplink if given invalid hostnames
Revision 03d2378 - Mon, 25 Apr 2011 07:08:57 +0200 - resolve hosts when connecting with ssl
Revision 5e027c1 - Sat, 23 Apr 2011 02:36:42 -0400 - Two small SQL fixes
Revision 3aeaef5 - Wed, 20 Apr 2011 15:39:44 -0400 - A few more small fixes
Revision 4d26070 - Wed, 20 Apr 2011 09:35:09 -0400 - This actually isn't necessary
Revision f601b04 - Tue, 19 Apr 2011 23:42:16 -0400 - Fixed logging messages with an empty category to everything
Revision ca16948 - Mon, 18 Apr 2011 21:07:54 -0400 - Allow unidentified users to still get access by non nickcore access entries
Revision 713c2eb - Mon, 18 Apr 2011 17:09:30 -0400 - Fixed /ns help register reply
Revision 660e0c7 - Sun, 17 Apr 2011 19:00:01 -0400 - Fixed /ns help access
Revision 0862de6 - Sat, 16 Apr 2011 16:06:52 -0400 - Fixed the mlock depreciated message
Revision 2cd511d - Sat, 16 Apr 2011 04:35:14 -0400 - Fixed botserv kicker logic
Revision efe5fed - Fri, 15 Apr 2011 19:51:34 -0400 - Fixed caps kicker
Revision c8c6845 - Sun, 10 Apr 2011 22:05:48 -0400 - Fixed /ns list unconfirmed
Revision bd62c48 - Sat, 9 Apr 2011 20:52:25 -0400 - Fixed disabling channel levels
Revision 9535541 - Wed, 6 Apr 2011 10:13:03 -0400 - Fixed setting +r on nick ownership, lost somewhere in revision fbae33
Revision 711a570 - Wed, 6 Apr 2011 09:41:39 -0400 - Run OnCheckAuthentication with the account name if there is one
Revision cb9ccc4 - Tue, 5 Apr 2011 19:11:23 -0400 - Fixed bug #1261
Revision c681bdd - Sun, 3 Apr 2011 18:23:17 -0400 - Merge branch '1.9' of anope.git.sf.net:/gitroot/anope/anope into 1.9
Revision 74844c0 - Sun, 3 Apr 2011 18:19:29 -0400 - Use dynamic_reference to check for users being killed from commands
Revision 9052070 - Sun, 3 Apr 2011 18:07:58 -0400 - Made LDAP support recover, release, resetpass, etc.
Revision 73a944f - Sun, 3 Apr 2011 08:54:40 +0200 - fixed some duplicate messages and updated the german langfile (10% done)
Revision d1328d8 - Fri, 1 Apr 2011 01:57:12 -0400 - Fixed a typo making ns_register crash
Revision faa8556 - Thu, 31 Mar 2011 14:41:30 -0400 - Removed some unneeded/unused code from m_ldap
Revision 8dec0c1 - Wed, 30 Mar 2011 23:59:57 -0400 - Fixed bug #1258, more Windows stuff, and more language strings
Revision 8098ed8 - Wed, 30 Mar 2011 00:55:45 -0400 - Fixed windows build more, including ldap
Revision 77c98f0 - Tue, 29 Mar 2011 14:02:35 -0400 - Regenerated language files.
Revision 8dbdfa9 - Tue, 29 Mar 2011 13:43:40 -0400 - Fixed windows build
Revision 685e99b - Tue, 29 Mar 2011 13:43:22 -0400 - Fixed some left over useprivmsg problems and fixed some compiler warnings.
Revision b14b7bd - Sat, 26 Mar 2011 08:44:21 +0100 - burned all %R and %S in the .po files
Revision 365769d - Sat, 26 Mar 2011 08:20:05 +0100 - replaced all %R with %s in the language strings
Revision 01b901e - Fri, 25 Mar 2011 20:56:42 +0100 - ignore additional parameters for /chanserv info
Revision 26de1d9 - Fri, 25 Mar 2011 17:42:13 +0100 - 1. when dropping nicks, dont add the dropped nick as successor for a channel 2. set -r on dropped channels
Revision 451fb82 - Tue, 22 Mar 2011 23:58:53 -0400 - Bug #1203
Revision c02d51f - Tue, 22 Mar 2011 18:16:05 -0400 - Bug #1256
Revision b95027b - Wed, 16 Mar 2011 01:16:15 -0400 - Merge branch '1.9' of anope.git.sf.net:/gitroot/anope/anope into 1.9
Revision 5b476a2 - Wed, 16 Mar 2011 06:14:28 +0100 - added a description for the HELP command
Revision bceeda8 - Wed, 16 Mar 2011 05:36:12 +0100 - fixed displaying the RESEND command in /nickserv help output
Revision ee9636b - Tue, 15 Mar 2011 19:23:08 -0400 - Fixed some logic fail in User::IsRecognized
Revision ddfb16d - Mon, 14 Mar 2011 20:16:38 -0400 - Fixed compile
Revision 2555d0d - Mon, 14 Mar 2011 21:39:53 +0000 - Removed include/patricia.h due to oversight in attribution. This breaks compile, please do not use until this is fixed later.
Revision ed73d76 - Mon, 14 Mar 2011 13:52:26 -0400 - Rewrote some of the opertype system, added os_login
Revision 4fe49af - Sun, 13 Mar 2011 22:59:50 -0400 - Fixed a crash in m_ldap is unloaded
Revision beabbb3 - Sun, 13 Mar 2011 19:15:53 -0400 - When a server quits use its quit reason for all of its links
Revision b4888c2 - Sun, 13 Mar 2011 17:20:44 -0400 - Fixed a typo in os_stats
Revision b75fa1c - Sun, 13 Mar 2011 14:03:02 -0400 - Fixed a crash in /cs help register
Revision 3fbf39b - Sun, 13 Mar 2011 03:42:30 -0400 - Added some useful Anope::Version functions to prevent some files from unnecessarily rebuilding on every make
Revision 15a8332 - Sun, 13 Mar 2011 03:38:42 -0400 - Set the locale to the default system locale on startup
Revision 5a0d04b - Sun, 13 Mar 2011 07:09:17 +0100 - fixed a typo in os_news, thanks to Dan for reporting it
Revision fbae334 - Sat, 12 Mar 2011 09:27:16 +0100 - added ns_cert
Revision 95469fd - Sat, 12 Mar 2011 02:40:08 -0500 - Added some access checks to cs_mode and fixed some language strings
Revision 9f46972 - Fri, 11 Mar 2011 17:26:27 -0500 - _()ify Command::SetDesc
Revision 46a3afa - Fri, 11 Mar 2011 17:09:49 -0500 - Fixed validating users on all server syncs
Revision 1b2f3bf - Fri, 11 Mar 2011 15:10:30 -0500 - Fixed some problems with m_alias and fantasy
Revision bb3b421 - Fri, 11 Mar 2011 04:27:32 -0500 - Global should send logon news
Revision 1ee3d3d - Fri, 11 Mar 2011 00:47:28 -0500 - Added os_config and support for including additional configuration files.
Revision 97c2e09 - Thu, 10 Mar 2011 19:20:58 -0500 - Bug #1251 - Fixed logging inspircd logging us logging inspircd. Also moved the Server::Find messages to debug level 2
Revision 09a5791 - Wed, 9 Mar 2011 12:29:59 -0500 - ngIRCd protocol: announce Anope with its version
Revision 8db5ecd - Wed, 9 Mar 2011 12:28:24 -0500 - Fixed sending CHANINFO on ngIRCd with two parameters if the channel has no modes locked.
Revision e9aa04a - Wed, 9 Mar 2011 01:25:49 -0500 - Store mlock in the databases and removed some unused functions from misc.cpp
Revision 8eb23e7 - Mon, 7 Mar 2011 19:54:51 -0500 - Added support for extbans
Revision 093b3d2 - Sun, 6 Mar 2011 19:36:52 -0500 - Change the mode name code to use Flags names in preparation for extban support
Revision 48e6221 - Sat, 5 Mar 2011 22:00:27 -0500 - Expire unconfirmed nicks, forgot to add this earlier..
Revision ef0c095 - Sat, 5 Mar 2011 18:18:51 -0500 - Made m_ldap_oper understand deopering
Revision a0355df - Sat, 5 Mar 2011 17:43:51 -0500 - Fixed /bs badword del to show what word was deleted
Revision 6fe2d8a - Sat, 5 Mar 2011 17:23:22 -0500 - Removed nickrequests, instead have unconfirmed registrations. Also made ns_resetpass allow remote-id to get past things such as kill immed.
Revision 90e5d0f - Fri, 4 Mar 2011 20:47:58 -0500 - Added LDAP support
Revision d79e22b - Fri, 4 Mar 2011 12:50:50 -0500 - Updated TODO
Revision a9fb6ba - Fri, 4 Mar 2011 02:41:29 -0500 - Just use blocking sql queries if m_asynch_commands isn't loaded - it's not that bad.
Revision dd968c0 - Fri, 4 Mar 2011 02:19:20 -0500 - Fixed some logic fail when detecting who should be akicked
Revision feb81c5 - Fri, 4 Mar 2011 02:17:51 -0500 - Clarify the module dependency messages generated by cmake are non fatal
Revision aecf675 - Sun, 27 Feb 2011 23:32:07 -0500 - Fixed os_sqline del
Revision bcaf406 - Sun, 27 Feb 2011 16:47:23 -0500 - Made akills work on IRCds that do not support bans (ngircd)
Revision f234a2b - Sat, 26 Feb 2011 17:54:03 -0500 - Replaced the few language strings we use with #defines to prevent accidentally translating them if we shouldnt
Revision 28d17a4 - Fri, 25 Feb 2011 21:41:27 -0500 - Fixed session exception limit of 0 to mean unlimited
Revision 7cfca37 - Fri, 25 Feb 2011 21:41:18 -0500 - Fixed build on freebsd with precompiled headers
Revision c38b639 - Fri, 25 Feb 2011 21:41:08 -0500 - More fixes. Also made db_mysql_live not keep bots updated because thats pointless and made m_asynch_commands respect user language settings.
Revision ee38756 - Fri, 25 Feb 2011 21:40:43 -0500 - Fixed a lot of small problems
Revision eea7d2e - Tue, 22 Feb 2011 20:44:47 -0500 - Fixed the first half of #1235
Revision b15410f - Tue, 22 Feb 2011 20:30:45 -0500 - 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
Revision c83b2b7 - Sun, 20 Feb 2011 01:05:16 -0500 - Much more work on the live SQL. Should work pretty decently now under heavy load.
Revision dfbb526 - Sat, 19 Feb 2011 21:17:53 -0500 - Inspircd does not send CAPAB NOQUIT, assume it
Revision f49a3e0 - Sat, 19 Feb 2011 19:03:05 -0500 - Fixed aborting because of invalid values given to mode +f on inspircd
Revision 109d174 - Fri, 18 Feb 2011 11:49:52 -0500 - Update SQL when a nick is deleted
Revision 470f8af - Fri, 18 Feb 2011 11:48:29 -0500 - Fixed some logic fail when determining when a recognized user gets access
Revision a1296a3 - Fri, 18 Feb 2011 11:48:20 -0500 - Changed the OnNickDrop event to call before the nick is deleted
Revision f38fe24 - Thu, 17 Feb 2011 14:32:51 -0500 - Merge branch '1.9' of anope.git.sf.net:/gitroot/anope/anope into 1.9
Revision 536ea21 - Thu, 17 Feb 2011 14:31:21 -0500 - Split db_mysql_live into two modules so other modules can make use of the asynchronous command interface
Revision ab0422b - Thu, 17 Feb 2011 07:00:03 +0100 - set the vhost before we call ns_ajoin or other modules on identify
Revision 18bd33f - Wed, 16 Feb 2011 12:50:23 -0500 - Use precompiled headers when building with gnu g++ to speed up build time
Revision d436e4c - Sun, 13 Feb 2011 20:06:01 +0100 - added Anope::printf()
Revision 1372dc1 - Sat, 12 Feb 2011 16:17:17 -0500 - Removed the Wallop config options and replaced them with the new log system
Revision 9ef7352 - Fri, 11 Feb 2011 18:30:58 -0500 - Merged os_umode into os_mode
Revision 2529ff6 - Fri, 11 Feb 2011 03:12:39 -0500 - Made the help command description code more sane
Revision 7bdf592 - Wed, 9 Feb 2011 21:54:28 -0500 - Log rawio when in debug mode and fixed expiring session exceptions
Revision f463b77 - Wed, 9 Feb 2011 20:09:26 -0500 - Removed a lot of the old capab flags we dont/have never used
Revision eec8977 - Wed, 9 Feb 2011 17:41:07 -0500 - Enable quitstorm for ngircd
Revision f87c665 - Wed, 9 Feb 2011 13:31:47 -0500 - Foward port ebe0ce6610e1 / b6ab031fc1822
Revision 36d3fd1 - Wed, 9 Feb 2011 13:25:28 -0500 - Do not crash if a user is introduced with a nonexistant server
Revision d26a19b - Wed, 9 Feb 2011 01:12:43 -0500 - Made ./Config output a userful error message if cmake is not found
Revision a55b374 - Sat, 5 Feb 2011 18:35:20 -0500 - Removed the LIBINTL include hack
Revision 8355666 - Fri, 4 Feb 2011 21:01:33 -0500 - try/catch-ified all instances of convertTo to keep from aborting when a user gives too large or too small a number
Revision faf5f31 - Fri, 4 Feb 2011 19:31:02 -0500 - Merge 032c30dd5dc4
Revision a53a797 - Fri, 4 Feb 2011 18:32:04 -0500 - Replaced all of the old %S's in the language strings that were used for service nicks
Revision 08583dc - Fri, 4 Feb 2011 15:30:31 -0500 - Moved the language strings which are only used once out of the core and into the modules that use them.
Revision c362a1e - Sat, 29 Jan 2011 12:05:34 +0000 - DP in "an user" grammar police mode.
Revision 140208e - Sat, 29 Jan 2011 12:00:12 +0000 - Another typo pointed out by the grammar police. ;)
Revision 679d3c3 - Sat, 29 Jan 2011 11:58:59 +0000 - Fixing leftover spaces and other rubbish I missed on the first pass.
Revision 557ecee - Sat, 29 Jan 2011 11:06:38 +0000 - Updated some docs/ & removed TROUBLESHOOTING as it is redundant.
Revision 9704ccc - Sat, 29 Jan 2011 10:44:27 +0000 - QA fixes / refinements for example.conf
Revision e626641 - Fri, 28 Jan 2011 23:09:25 -0500 - Added patricia_tree::iterator
Revision 3eadc15 - Fri, 28 Jan 2011 13:19:26 -0500 - Fixed setting usermode +k on our clients on InspIRCd 2.0
Revision 9910aa3 - Fri, 28 Jan 2011 00:09:34 +0000 - Bug #1237 - only set umode +h on a user joining help chan if they have op access
Revision 2a53e5f - Mon, 24 Jan 2011 19:03:15 -0500 - Fixed the order queries are done during sqlsync to make the new foreign keys happy
Revision 2e8acfb - Mon, 24 Jan 2011 17:50:34 -0500 - Fixed some SQL queries
Revision 48fa096 - Mon, 24 Jan 2011 02:54:09 -0500 - Added %N for network name in dnsbl:reason
Revision bf559d7 - Mon, 24 Jan 2011 01:11:10 -0500 - Fixed loading forbidden nicks
Revision 3bfc8e9 - Sun, 23 Jan 2011 12:56:21 -0500 - std::stringstream::clear doesn't clear it
Revision a162f1d - Fri, 21 Jan 2011 23:01:48 -0500 - Bug #1234 - Fix reading resolv.conf if it has multiple spaces or tabs
Revision a86873c - Fri, 21 Jan 2011 16:49:25 +0000 - fixed some minor presentation, grammar mis-use and copyright date in DP's ngircd
Revision 05933e9 - Thu, 20 Jan 2011 19:42:27 -0500 - Removed db-upgrade, its no longer needed
Revision ab2e34d - Wed, 19 Jan 2011 00:31:18 -0500 - Added options:nomlock
Revision e7a8bcc - Tue, 18 Jan 2011 18:47:08 -0500 - Bug #1232 - Fixed db-convert to properly convert mode lock parameters
Revision 34c6c66 - Tue, 18 Jan 2011 18:41:16 -0500 - Added amsg kicker settings to /bs info
Revision 4a3ee91 - Tue, 18 Jan 2011 19:05:20 +0100 - fixed a bug in the ngircd protocol module
Revision 6f0d1af - Mon, 17 Jan 2011 20:41:57 -0500 - 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.
Revision 01feb5b - Mon, 17 Jan 2011 20:29:33 -0500 - Fixed ns_ajoins list output formatting
Revision 8975b52 - Mon, 17 Jan 2011 15:46:53 -0500 - Added ns_ajoin
Revision 7acbbbb - Sat, 15 Jan 2011 21:02:14 -0500 - Fixed flag names to match 1.9.3s
Revision 4fecafa - Sat, 15 Jan 2011 16:45:48 -0500 - Made db_plain save amsg settings
Revision a4ded88 - Sat, 15 Jan 2011 16:29:17 -0500 - Made CA_SET always be accessable, even if db-converter messes up levels
Revision 1b6aab0 - Sat, 15 Jan 2011 16:13:31 -0500 - Fixed /ns confirm's log message to show the nick of who was confirmed
Revision c669820 - Sat, 15 Jan 2011 16:11:31 -0500 - Added an amsg kicker
Revision ecc2fc6 - Fri, 14 Jan 2011 04:50:01 +0000 - Fix CODINGs formatting and a missed typo
Revision e490202 - Tue, 11 Jan 2011 22:19:46 -0500 - Bug #1230 - Fixed unknown CTCPs from crashing services
Revision fd2412a - Mon, 10 Jan 2011 17:41:09 -0500 - Send new memo replies to the receiver of the memo
Revision 07528ea - Sun, 9 Jan 2011 13:38:15 -0500 - Fixed CanAdd() to use safe iteration and make SNLine::Check really work (cherry picked from commit 1bdadde68aed5a93225a5a625484505f1126a8a9)
Revision ce8a069 - Sat, 8 Jan 2011 18:55:12 -0500 - Changed db_mysql_live to use a safer mutex system to prevent deadlocks
Revision 2ba97ae - Sat, 8 Jan 2011 03:35:04 -0500 - Ignore EINTR error from poll()
Revision a674d81 - Sat, 8 Jan 2011 08:38:16 +0100 - updated the README file
Revision efb61ed - Sat, 8 Jan 2011 08:21:18 +0100 - enabled modeonid in example.conf
Revision 2e7d08c - Sat, 8 Jan 2011 08:18:46 +0100 - fixed a small bug in the ratbox protocol module
Revision 47b87e9 - Sat, 8 Jan 2011 08:15:48 +0100 - added support for ngIRCd protocol
Revision ddeff72 - Sat, 8 Jan 2011 00:52:46 -0500 - Process flag changes from SQL
Revision 43995b4 - Sat, 8 Jan 2011 00:25:30 -0500 - Merge branch '1.9' of anope.git.sf.net:/gitroot/anope/anope into 1.9
Revision 512d23d - Sat, 8 Jan 2011 00:25:11 -0500 - Made the Flag class able to convert flags to strings and back
Revision 0eb9152 - Fri, 7 Jan 2011 23:01:19 +0000 - fix some more copyright and typos (not mine) spotted by chaz :P
Revision 4403849 - Fri, 7 Jan 2011 15:57:13 -0500 - 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.
Revision 9efebe5 - Wed, 5 Jan 2011 18:34:38 +0000 - update copyrights for 2011
Revision 7198fa7 - Tue, 4 Jan 2011 07:33:34 +0100 - removed SendSVSPart(), we dont use it
Revision 03ba592 - Tue, 4 Jan 2011 07:14:50 +0100 - removed SendSVSMode(), we dont use it
Revision 57a06f7 - Fri, 31 Dec 2010 21:20:34 +0000 - fixed a crash bug when a server squits
Revision 3019ba6 - Thu, 30 Dec 2010 06:44:18 +0100 - restoring topic for permchans on burst
Revision 2784cd1 - Thu, 30 Dec 2010 05:50:55 +0100 - Merge branch '1.9' of ssh://anope.git.sourceforge.net/gitroot/anope/anope into 1.9
Revision 03cc9eb - Wed, 29 Dec 2010 23:30:28 -0500 - Assign bots to new empty permanent channels on IRCds without permchannel mode not just join
Revision 72b8f46 - Wed, 29 Dec 2010 23:12:26 -0500 - Use empty SJOINs when allowed to create empty permanent channels
Revision d36e53f - Wed, 29 Dec 2010 20:19:37 -0500 - Added a ConvertException to be thrown when convertTo fails
Revision a36f14c - Wed, 29 Dec 2010 19:59:26 -0500 - Automatically quit bots when they are deleted
Revision 292e187 - Wed, 29 Dec 2010 22:39:20 +0100 - Merge branch '1.9' of ssh://anope.git.sourceforge.net/gitroot/anope/anope into 1.9
Revision 16cab97 - Tue, 28 Dec 2010 16:32:18 -0500 - Bug #1225 - Made REGISTER show in /cs help
Revision fd7f542 - Tue, 28 Dec 2010 07:00:47 +0100 - Merge branch '1.9' of ssh://anope.git.sourceforge.net/gitroot/anope/anope into 1.9
Revision 5ead326 - Mon, 27 Dec 2010 15:33:49 -0500 - Fixed build on debian lenny
Revision a1c635b - Mon, 27 Dec 2010 01:35:08 -0500 - Load session exceptions on start when using SQL
Revision d896bf9 - Mon, 27 Dec 2010 01:00:12 -0500 - Bug #1222 - Fixed crash from reading to read a range of memos
Revision 49dd1c3 - Mon, 27 Dec 2010 00:42:38 -0500 - Bug #1220 - Fixed an event in /hs activate and /ms del
Revision fce491e - Mon, 27 Dec 2010 00:41:04 -0500 - Made socket engine stop processing once all sockets have been checked
Revision 87d0fc8 - Sun, 26 Dec 2010 20:15:54 -0500 - Fixed poll engine to not reorder sockets if we remove the last socket because there is no need
Revision f638d10 - Sun, 26 Dec 2010 09:36:45 +0100 - Merge branch '1.9' of ssh://anope.git.sourceforge.net/gitroot/anope/anope into 1.9
Revision 8af2465 - Sun, 26 Dec 2010 00:31:11 -0500 - Bug #1219 - Correctly restrict people from registering potentential guest names
Revision 1b3f256 - Sun, 26 Dec 2010 00:14:49 -0500 - Fixed a potential crash from dropping nicks
Revision 036d451 - Sat, 25 Dec 2010 15:27:02 +0000 - updated crontab instructions in INSTALL
Revision 80721d1 - Sat, 25 Dec 2010 02:30:39 -0500 - Forward port part of 821995bf604b5c6e18e6c0c93a31e149565160c8
Revision aa9e33c - Fri, 24 Dec 2010 19:55:09 -0500 - Bug #1216 - Do not apply SQLines on our own clients
Revision 8690017 - Fri, 24 Dec 2010 19:07:47 -0500 - Made clearing SXLines remove the XLine from the IRCd too
Revision d5c1d6e - Fri, 24 Dec 2010 16:12:08 -0500 - Do not allow xop del to delete users on another list
Revision 35e328b - Fri, 24 Dec 2010 01:23:22 -0500 - Fixed Windows build
Revision befb4b3 - Fri, 24 Dec 2010 01:22:07 -0500 - Made the default socket poller use poll() because it is supported on most platforms
Revision 4235df2 - Fri, 24 Dec 2010 06:42:55 +0100 - Merge branch '1.9' of ssh://anope.git.sourceforge.net/gitroot/anope/anope into 1.9
Revision a6c8a6a - Thu, 23 Dec 2010 23:33:02 -0500 - Prevent version.cpp from prepending version.sh's VERSION_EXTRA on every build
Revision 1a3ba00 - Thu, 23 Dec 2010 21:56:06 -0500 - Fixed noexpire channels expiring
Revision e8a2072 - Thu, 23 Dec 2010 19:18:25 -0500 - Added a missing os_ignore.h
Revision 4886b56 - Thu, 23 Dec 2010 19:14:07 -0500 - Fixed a crash in m_alias
Revision 15d29ed - Thu, 23 Dec 2010 18:50:27 -0500 - Do not clear want write on a socket if we are unable to completely write its buffer
Revision 3009540 - Thu, 23 Dec 2010 18:39:54 -0500 - Rewrote the ignore code. Adds creator and reason to /os ignore list.
Revision a0ad3c4 - Thu, 23 Dec 2010 07:15:32 +0100 - Merge branch '1.9' of ssh://anope.git.sourceforge.net/gitroot/anope/anope into 1.9
Revision 265006b - Thu, 23 Dec 2010 00:03:50 -0500 - Fixed deleting expired SXLines
Revision 11b3b8a - Wed, 22 Dec 2010 19:12:04 -0500 - Made SQLine clear work
Revision 2783c82 - Wed, 22 Dec 2010 18:28:22 -0500 - Removed match_usermask
Revision 184e7b3 - Wed, 22 Dec 2010 07:05:40 +0100 - Merge branch '1.9' of ssh://anope.git.sourceforge.net/gitroot/anope/anope into 1.9
Revision 18377ac - Tue, 21 Dec 2010 15:57:57 -0500 - Allow hostmasks to be in uplink:host
Revision 184e14e - Sun, 19 Dec 2010 08:56:31 +0100 - Merge branch '1.9' of ssh://anope.git.sourceforge.net/gitroot/anope/anope into 1.9
Revision 21125cf - Sat, 18 Dec 2010 19:53:32 -0500 - Made the version generator code work right when we are on a tag because git describe just gives the tag name and nothing else.
Revision 0d20c47 - Sat, 18 Dec 2010 19:41:13 -0500 - Don't send SXLines until after we start bursting with our uplink
Revision 7f9a5e0 - Fri, 17 Dec 2010 03:09:51 -0500 - NULL the core *serv pointers when core clients are deleted
Revision eb9b12e - Wed, 15 Dec 2010 12:47:35 -0500 - Bug #1211 - Fixed loading and saving anope_os_sxlines
Revision 4a4c088 - Wed, 15 Dec 2010 12:18:20 -0500 - Bug #1212 - Fixed some bad logic in /os exception preventing valid exceptions from being added
Revision 0247633 - Tue, 14 Dec 2010 08:13:09 +0100 - Merge branch '1.9' of ssh://anope.git.sourceforge.net/gitroot/anope/anope into 1.9
Revision 49d3c97 - Mon, 13 Dec 2010 16:36:36 -0500 - 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.
Revision 97467cb - Mon, 13 Dec 2010 13:26:01 -0500 - Bug #1113 - Document the fantasy character in /bs help
Revision 6a43886 - Mon, 13 Dec 2010 07:34:06 +0100 - removed an unused variable
Revision 5d56a24 - Mon, 13 Dec 2010 07:26:05 +0100 - changed a few 'if' to 'else if'
Revision eb138a0 - Sun, 12 Dec 2010 19:37:04 -0500 - Do not validate users during netburst until after the server is done syncing
Revision 2a4d0e3 - Sun, 12 Dec 2010 19:37:04 -0500 - Allow getting users opertype from XMLRPC requests
Revision 9f7a2e4 - Sun, 12 Dec 2010 19:37:04 -0500 - Bug #1177 - Readded in support for cs_mode to act on every channel
Revision 25e995b - Sun, 12 Dec 2010 19:37:04 -0500 - Fixed a few places in the plexus protocol module where we were sending nick not UID
Revision ad5da2a - Sun, 12 Dec 2010 19:37:03 -0500 - Handle not being able to completely flush our write buffer correctly
Revision 6ab7cf9 - Sun, 12 Dec 2010 19:37:03 -0500 - fixed a compile error in plexus protocol module
Revision 099ead0 - Sun, 12 Dec 2010 19:37:03 -0500 - store the ssl fingerprint in the userstruct
Revision f1d04a2 - Sun, 12 Dec 2010 19:37:03 -0500 - Allow command aliases to be redirected to different pseudo clients
Revision aed53db - Sun, 12 Dec 2010 19:37:03 -0500 - 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.
Revision a507816 - Sun, 12 Dec 2010 19:37:03 -0500 - Fixed looking up users to use case insensitivity
Revision c41c828 - Sun, 12 Dec 2010 19:37:03 -0500 - Do not use wildcard matching when looking up hosts on access add/del
Revision 5fe41fb - Sun, 12 Dec 2010 19:37:02 -0500 - Document that /cs owner and deowner allow nick args
Revision 0ba5664 - Sun, 12 Dec 2010 19:37:02 -0500 - Allowing adding hostmasks to channel access lists
Revision 2a4d57a - Sun, 12 Dec 2010 19:37:02 -0500 - Fixed subcommands
Revision 71c433c - Sun, 12 Dec 2010 19:37:00 -0500 - The rest of the earlier command changes
Revision 2b10cc8 - Sun, 12 Dec 2010 19:36:19 -0500 - Added /bs set msg
Revision cb6ef57 - Sun, 12 Dec 2010 19:36:19 -0500 - Send replies from fantasy commands back to the channel, this will be expanded on later
Revision 37e02a3 - Sun, 12 Dec 2010 19:36:19 -0500 - Added cs_entrymsg
Revision 7d1cfe9 - Sun, 12 Dec 2010 19:36:18 -0500 - Fixed some sed failure
Revision 9870ee0 - Sun, 12 Dec 2010 19:36:18 -0500 - Removed some unused code paths in some of the modules
Revision 1a28639 - Sun, 12 Dec 2010 19:36:16 -0500 - Added a plexus3 protocol module
Revision 697dc89 - Sun, 12 Dec 2010 19:36:01 -0500 - Added a default expiry time for suspended and forbidden nicks and channels
Revision 4d342d9 - Sun, 12 Dec 2010 19:35:58 -0500 - Fixed some of the language strings
Revision c5eb349 - Sun, 12 Dec 2010 19:35:30 -0500 - Removed the AUTODEOP level, it is unnecessary now because of cs_mode
Revision 7790a7f - Sun, 12 Dec 2010 19:35:30 -0500 - Allow the patricia tree to store non-pointers
Revision 246f44b - Sun, 12 Dec 2010 19:35:27 -0500 - Added cs_mode, rewrote the old list mode code, and added CIDR support
Revision a851121 - Sun, 12 Dec 2010 19:33:59 -0500 - Removed and deprecated /cs set mlock, removed /cs clear, removed /os clearmodes, removed /cs akick (un)stick, added /cs clearusers
Revision 5f18cb0 - Sun, 12 Dec 2010 19:33:58 -0500 - Allow users to drop their own nickrequests
Revision 872bc3f - Sun, 12 Dec 2010 19:33:58 -0500 - Allow users to remove their own access in channels
Revision 1625a5a - Sun, 12 Dec 2010 19:33:58 -0500 - Added /chanserv clone command
Revision 2e9a632 - Sun, 12 Dec 2010 19:33:58 -0500 - Allow akill/szline/sqline to accept user names as a mask argument
Revision 3c9d4e9 - Sun, 12 Dec 2010 19:33:58 -0500 - Added command aliases
Revision c792c7f - Sun, 12 Dec 2010 19:33:58 -0500 - Switched the system for storing users, channels, and sesions to a patricia tree from STL's unordered_map, which was giving horrible performance.
Revision e512760 - Sun, 12 Dec 2010 19:33:50 -0500 - Fixed DNS caching and made DNS cache empty results
Revision ac41137 - Sun, 12 Dec 2010 19:31:00 -0500 - Added /ms ignore
Revision 28aba58 - Sun, 12 Dec 2010 19:30:28 -0500 - Just store lang strings in a char array, no need for the extra overhead of STL strings
Revision 4ec661c - Sun, 12 Dec 2010 19:30:14 -0500 - If a channel drops because a nick drops, set the channel founder to the user with the highest access if there is no successor
Revision 87bdf73 - Sun, 12 Dec 2010 19:30:14 -0500 - Document XMLRPC calls and added a .php class wrapper for them
Revision 21c8e89 - Sun, 12 Dec 2010 19:30:14 -0500 - Do not allow ghosting unidentified users if the recover command exists
Revision 8fbe366 - Sun, 12 Dec 2010 19:30:14 -0500 - Added m_xmlrpc and m_xmlrpc main, which allows remote programs to execute remote RPC calls to Anope in realtime and receive responses
Revision 5cd4fef - Sun, 12 Dec 2010 19:30:11 -0500 - Bump for 1.9.4-git
Revision 82e588a - Sun, 12 Dec 2010 18:42:14 -0500 - Anope 1.9.3 Release
Revision 7b7301e - Sun, 12 Dec 2010 18:40:04 -0500 - Made ./Config with a .git directory work ok if we are on a git tag
Revision 70d6537 - Sun, 12 Dec 2010 17:58:19 -0500 - Updated version.log
Revision af8cf44 - Sun, 12 Dec 2010 17:58:09 -0500 - Made version.cpp ok with an empty VERSION_EXTRA
Revision be4ec3c - Sun, 12 Dec 2010 16:54:46 -0500 - Updated docs/WIN32.txt with instructions on how to get the libraries to build with gettext, ssl, and mysql
Revision 587e5d9 - Thu, 9 Dec 2010 19:58:41 -0500 - Fixed build on cmake 2.4.x
@@ -304,7 +1070,7 @@ Revision 0d2d7e9 - Sun, 20 Jun 2010 20:05:23 -0400 - Fixed Windows build
Revision 63d7bee - Sun, 20 Jun 2010 18:51:03 -0400 - Merge branch '1.9' of ssh://anope.git.sf.net/gitroot/anope/anope into 1.9
Revision 381c9c8 - Sun, 20 Jun 2010 18:42:58 -0400 - The first of a few "CBX OCDing over code style" commits, focusing on include/* and src/* but not src/core/* or src/modules/*.
Revision e8a1570 - Sun, 20 Jun 2010 14:04:17 -0400 - Added m_helpchan to replace the cores helpchannel functionality
Revision 968e4d0 - Sun, 20 Jun 2010 13:11:31 -0400 - Fixed the name of cs_forbid in chanserv:modules so it really loads
Revision 968e4d0b - Sun, 20 Jun 2010 13:11:31 -0400 - Fixed the name of cs_forbid in chanserv:modules so it really loads
Revision 7b7e2a6 - Sat, 19 Jun 2010 21:22:48 -0400 - Updated TODO
Revision 448eadd - Sat, 19 Jun 2010 20:53:53 -0400 - Made db-converter add all of the core clients when converting a 1.8 database
Revision 68b54f3 - Sat, 19 Jun 2010 13:39:12 -0400 - Made db-converter only write mlock params if there really is one, fixes some problems with converting mlock for certain databases
@@ -2687,7 +3453,7 @@ Revision 17d9d5a - Fri, 31 Dec 2004 06:09:37 +0000 - BUILD : 1.7.6 (517) BUGS :
Revision 2a8bc51 - Thu, 30 Dec 2004 17:38:35 +0000 - BUILD : 1.7.6 (516) BUGS : 261 NOTES : This should be it finally! The moduleAddData function was using the old head to append/prepend the new moduleData to, but it had to use the new head. Thanks to DrStein for finding the cause! :)
Revision 35096db - Thu, 30 Dec 2004 17:12:06 +0000 - BUILD : 1.7.6 (515) BUGS : 261 NOTES : Fixed a few memleaks with moduleData functions returning early, and fixed the list handling with deleting moduleData (thanks DrStein)
Revision ae23e2f - Thu, 30 Dec 2004 16:51:04 +0000 - BUILD : 1.7.6 (514) BUGS : 261 NOTES : Modules can no longer call addCommand directly. The mod_name of the command MUST be set if it is a module.
Revision ae0f3c4 - Thu, 30 Dec 2004 15:00:22 +0000 - BUILD : 1.7.6 (513) BUGS : NOTES : Added warnings for NULL-args with sstrdup, and NULL modname with module*Data functions. Fixed Catserv to use moduleAddCommand instead of addCommand.
Revision ae0f3c48 - Thu, 30 Dec 2004 15:00:22 +0000 - BUILD : 1.7.6 (513) BUGS : NOTES : Added warnings for NULL-args with sstrdup, and NULL modname with module*Data functions. Fixed Catserv to use moduleAddCommand instead of addCommand.
Revision 2be6713 - Thu, 30 Dec 2004 14:27:22 +0000 - BUILD : 1.7.6 (512) BUGS : NOTES : Indenting src/modules.c correctly.... it got skipped somehow...
Revision 1fe375c - Thu, 30 Dec 2004 14:25:56 +0000 - BUILD : 1.7.6 (511) BUGS : NOTES : Rollback to 507
Revision 428c78c - Thu, 30 Dec 2004 05:55:10 +0000 - BUILD : 1.7.6 (510) BUGS : N/A NOTES : Clean up after the last commit
+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
+1 -1
View File
@@ -9,7 +9,7 @@ if(WIN32)
endif(IN_SOURCE)
set(DOCS Changes Changes.conf DEFCON FAQ INSTALL LANGUAGE MODULES NEWS ${CMAKE_CURRENT_BINARY_DIR}/README.txt WIN32.txt)
install(FILES ${DOCS}
DESTINATION docs
DESTINATION ${DOC_DIR}
)
set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${CMAKE_CURRENT_BINARY_DIR}/README.txt")
endif(WIN32)
+209 -140
View File
@@ -1,170 +1,239 @@
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.
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 */
* Multi Line
Multiple line comments should follow the C-style comment, for example:
/*
* This is a multiple line comment, huzzah..
*/
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.
* Single Line
Single line comments should also be in the C style, for example:
/* This is a boring one-line comment */
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>}
}
* 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.
Separation
Always put a space in between a keyword like if/while and the condition, for example:
if (foo == bar)
NOT
if(foo == bar)
2. Indentation
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;
}
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>}
}
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.)
3. Separation
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".
Always put a space in between a keyword like if/while and the condition,
for example:
if (foo == bar)
NOT
if(foo == bar)
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.
4. Braces
Use of STL
For more information on use of STL in InspIRCd, please see the separate STL FAQ.
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;
}
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.
and not:
if (apples == "green") {
cout << "Apples are green" << endl;
}
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.
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(); }
};
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.
5. Templates
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!
Where possible, use templates rather than #defines. Avoid use of RTTI.
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.
6. Structs
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.
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;
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.
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.
+68
View File
@@ -1,3 +1,71 @@
Anope Version 1.9.7
--------------------
A Added ability for using regex as patterns for various commands
A Extended ability of operserv/akill to also match against nick and realname
A Added chanserv:require configuration option
A Added nickserv:unregistered_notice and nickserv:registration configuration option
A Added options:casemap configuration option
A Added a web panel
A db_sql_live now allows all tables to be "live", not just a select few
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
+45
View File
@@ -1,3 +1,48 @@
Anope Version 1.9.7
-------------------
operserv:notifications removed in favor of log{} blocks
options:regexengine added
options:casemap added
chanserv:require added
nickserv:registration added, emailregistration removed.
nickserv:unregistered_notice added
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 **
+9 -12
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. The defcon module will not unload unless all non-optional
directives are set. Look for the defcon block
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.
@@ -45,7 +46,7 @@ Anope DefCon
No new channel registrations
No New Nick Registrations
No MLOCK changes
No Mode Lock changes
Force Chan Mode
Use Reduced Session Limit
KILL any new clients trying to connect
@@ -55,7 +56,7 @@ Anope DefCon
No new memos sent to block MemoServ attacks
Information regarding how to enable this for specific defcon levels can
be found in services.conf
be found in operserv.conf
4) Usage
@@ -70,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
+6 -8
View File
@@ -162,7 +162,7 @@ Note: You should also read the README and FAQ files!
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é.
+8 -77
View File
@@ -106,18 +106,10 @@ How To Add IRCd Support
23) TS6: Does the IRCd support TS6? Use 1 for yes, 0 for no.
24) 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.
25) Global TLD Prefix: Prefix used to send global messages, should probably
24) Global TLD Prefix: Prefix used to send global messages, should probably
be "$"
26) Max Modes: The max number of mode changes we can send in one line
25) Max Modes: The max number of mode changes we can send in one line
3) Modes
@@ -155,12 +147,6 @@ How To Add IRCd Support
ModeManager::AddChannelMode(new ChannelModeOper('O'));
The CMODE_FLOOD param also has its own class, but due to the wide range of
valid parameters accepted across IRCds, your protocol module MUST have the
IsValid function for this.
bool ChannelModeFlood::IsValid(const Anope::string &value) { }
4) Functions and Events
A brief word about functions and events. All events are captured by creating a Message struct
@@ -183,74 +169,19 @@ How To Add IRCd Support
5) 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.
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:
1) In the module constructor you must tell Anope what the uplink is capable of that
isn't already passed in the CAPAB/PROTOCTL, you do this by something similar to:
CapabType c[] = { CAPAB_NOQUIT, CAPAB_NICKIP, CAPAB_ZIP, CAPAB_TOKEN, CAPAB_SSJ3, CAPAB_NICK2, CAPAB_VL, CAPAB_TLKEXT, CAPAB_CHANMODE, CAPAB_SJB64, CAPAB_NICKCHARS };
for (unsigned i = 0; i < 11; ++i)
Capab.SetFlag(c[i]);
Anything else given to Anope in the CAPAB/PROTOCTL message will be handled later by CapabParse.
The available CAPAB options are:
--------------------------------------------------------------------------
Define | Description
----------------|------------|-----------|--------------------------------
----------------|---------------------------------------------------------
CAPAB_NOQUIT | NOQUIT protocol support
CAPAB_TSMODE | Chanmodes are timestamped
CAPAB_UNCONNECT | UNCONNECT protocol support
CAPAB_NICKIP | IP sent in the NICK line
CAPAB_NSJOIN | Smart SJOIN support
CAPAB_ZIP | Support for gzipped links
CAPAB_BURST | Supports BURST command
CAPAB_TS3 | Support for TS3 protocol
CAPAB_TS5 | Support for TS5 protocol
CAPAB_DKEY | DH-Key exchange using DKEY
CAPAB_DOZIP | Link traffic will be gzipped
CAPAB_DODKEY | Do DKEY with this link
CAPAB_QS | Supports quit storm removal
CAPAB_SCS | String Cache System support
CAPAB_PT4 | Support for PT4 protocol
CAPAB_UID | Support for UIDs
CAPAB_KNOCK | Supports KNOCK
CAPAB_CLIENT | Supports CLIENT
CAPAB_IPV6 | Support for IPv6 addresses
CAPAB_SSJ5 | Smart Join protocol 5 support
CAPAB_SN2 | Support for SN2 protocol
CAPAB_VHOST | Supports VHOST protocol
CAPAB_TOKEN | Supports s2s tokens
CAPAB_SSJ3 | Smart Join protocol 3 support
CAPAB_NICK2 | Support for extended NICK (v2)
CAPAB_UMODE2 | Supports UMODE2 command
CAPAB_VL | VLine information in info field
CAPAB_TLKEXT | Not 8, but 10 params in TKL's
CAPAB_CHANMODE | Channel modes are passed here
CAPAB_SJB64 | SJOIN timestamps are base64 encoded
CAPAB_NICKCHARS | Character set used by the IRCD for nicks
CAPAB_QS | Quitstorm - same as NOQUIT
2) Ensure that the CAPAB/PROTOCTL event his handled correctly.
A) In the function module constructor make sure that you have the
following two lines:
Message message_capab("CAPAB", event_capab);
B) Add the function to handle the event
bool event_capab(const Anope::string &source, const std::vector<Anope::string> &params)
{
CapabParse(params);
return true;
}
This function should call the CapabParse function which parses
the received CAPAB/PROTOCTL line.
You can override the default OnCapab method in IRCdMessage if required.
6) IRCDProto Class
+15 -6
View File
@@ -7,7 +7,7 @@ Anope Mutli Language Support
1) Building Anope with gettext support
To build Anope with gettext support gettext and its devlopmental libraries must be installed on the system.
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.
@@ -27,11 +27,20 @@ Anope Mutli Language Support
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
need translated (messages to the user, etc). See a few of the modules in /modules/extras (cs_appendtopic, hs_request)
for examples of this. If you want to translate a module someone has made, first generate a .pot file if there is none.
Run `xgettext -s -d modulename -o modulename.pot --from-code=utf-8 modulename.cpp`. Then, run msginit on the .pot file
with `msginit -l language -o modulename.language.po -i modulename.pot`. Translate the new .po file, then place it in
the lang folder and rerun ./Config; make && make install.
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.
+42 -38
View File
@@ -22,16 +22,16 @@ Anope Modules
1. If modules are supported by your system, they will be configured
automatically when you run ./Config. The modules will be installed
to the modules directory in your data path (by default this will
be ~/services/modules).
be ~/services/data/modules).
Note: you might need to run "make distclean" prior to running ./Config
2. Compile Anope as usual using ./Config. The "make" process will now
compile module support into Anope, and compile the default sample
modules, and any other module located in the modules folder or any
of its sub-directories, eg. modules/extra.
2. Compile Anope as usual. The (g)make process will now compile module
support into Anope, and compile the default sample modules, and/or
any other module located on the modules folder ("src/modules/").
3. Install Anope as usual. The install process will place the compiled
modules in their runtime location, making them available for loading.
3. Install Anope as usual. The "make install" process will place the
compiled modules in their runtime location, making them available
for loading.
4. Start or restart services to make use of the new Anope executable.
Note that you do not need to restart to load new or changed modules,
@@ -42,59 +42,64 @@ Anope Modules
All module manipulation commands are done through OperServ. These are:
MODLOAD Load a module
MODRELOAD Reload a module
MODUNLOAD Un-Load a module
MODLIST List loaded modules
MODINFO Info about a loaded module
These commands available to Service Roots only.
Access to the above commands require the operserv/modload and modlist
permissions. Refer to operserv.example.conf.
You can also load (and pre-load) Modules automatically by loading them
on startup. To do so, edit your services.conf file and change the values
of "ModuleAutoload" and "ModuleDelayedAutoload" to include the modules
you want to load every time Anope starts.
on startup. To do so, edit any one of the configuration files (you may
want to use modules.conf for third-party/extra modules, or a config
file relevant to the *Serv your module operates on, eg. hostserv.conf),
and use the following method to load a module on startup or reload:
module { name="hs_modname" }
4) Usage Example
/msg OperServ modload hs_moo
*** Global -- from OperServ: dengel loaded module hs_moo
-OperServ- Module hs_moo loaded
/msg OperServ modload ns_identify
-OperServ- Module ns_identify loaded
/msg OperServ modinfo hs_moo
-OperServ- Module: hs_moo Version: 1.1 Author: Anope loaded: Mar 21 10:54:37 2004 CLT
-OperServ- Providing command: /msg HostServ moo
/msg OperServ modinfo ns_identify
-OperServ- Module: ns_identify Version: 1.9.7 Author: Anope loaded: Jun 17 18:43:08 2012 BST (2 minutes ago)
-OperServ- Providing service: nickserv/identify
-OperServ- Command ID on NickServ is linked to nickserv/identify
-OperServ- Command IDENTIFY on NickServ is linked to nickserv/identify
/msg HostServ moo
-HostServ- MOO! - This command was loaded via a module!
/msg OperServ modreload ns_identify
-OperServ- Module ns_identify reloaded
/msg OperServ modunload hs_moo
*** Global -- from OperServ: dengel unloaded module hs_moo
-OperServ- Module hs_moo unloaded
/msg OperServ modunload ns_identify
-OperServ- Module ns_identify unloaded
/msg HostServ moo
-HostServ- Unknown command moo. "/msg HostServ HELP" for help.
/msg NickServ IDENTIFY
-NickServ- Unknown command identify. "/msg NickServ HELP" for help.
NOTE: Doing the above, with the command still existing in a config file,
will result in a log message, similar to the following:
<@NickServ> Command IDENTIFY exists on me, but its service nickserv/identify was not found!
* Note that the name of the module file is "hs_moo.c", yet we load
and reference the module as "hs_moo" only. By naming convention
* Note that the name of the module source file is "ns_identify.cpp", yet we
load and reference the module as "ns_identify" only. By naming convention
modules have an abbreviated service name they attach to (hs_ for
HostServ, cs_ for ChanServ, etc) followed by a descriptive keyword.
5) More Modules
Anope ships with three sample modules that only illustrates some of the
implemented module capabilities. They don't really do much or anything
useful.
You can download more useful modules from http://modules.anope.org/. Just
grab the module file (usually with a .c extension). Place the module
file in your modules (src/modules) folder; the same folder that contains
both hs_moo.c and catserv.c module files.
grab the module file (usually with a .cpp extension). Place the module
file in your modules (anope-1.9.x/modules/third) folder; although any of
the other folders within the modules directory will work.
The new modules need to be compiled and installed before you can make
use of them:
1. Make sure you're in the main source directory. (usually anope-1.X.XX/)
2. Run `make modules` to compile any new or changed modules.
3. Run `make install` to install the modules.
2. Run ./Config to find and configure modules, then `cd build`.
3. Run `make` to compile Anope, and any modules.
4. Run `make install` to copy the compiled binaries to the ~/services/
directory.
You can now use /msg OperServ MODLOAD to load the new modules.
@@ -115,7 +120,6 @@ Anope Modules
* http://wiki.anope.org/
8) Modules Repository
You can find modules at http://modules.anope.org
+253 -321
View File
@@ -1,321 +1,253 @@
Anope -- a set of IRC services for IRC networks
-----------------------------------------------
Anope is 2003-2010 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>
* 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.
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
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
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. :)
+9 -42
View File
@@ -3,56 +3,23 @@ Legend:
? = unsure
+ = in progress
1.9.3
-----
[x] Add in a subcommand system, ns_set, cs_set, etc.
[x] Threading
[x] Mail sending needs to be threaded
[x] process_numlist needs to die
[x] SList needs to die
[x] SSL
[x] Command handling system needs to die, strtok() needs to die more
[x] Asynchronous DNS
[x] Hashing system for storing just about everything needs to die
[x] Add support for +k, +q, etc type umodes
[x] Language system is disgusting, it must die.
[x] Modules should also have a way to add strings programatically
[x] Should be able to add many strings by dropping a file in a set location.
[x] Config bailing on /os reload needs to be non fatal
[x] AutoID needs to be able to live through /os restart, current system is just annoying.
[x] SQL tables need to changed to have references etc
[x] Merge NS INFO blah ALL with NS INFO blah, if you're requesting info, you really want the info anyway.
[x] More "friendly" date displays of some things like registration time ("November 7th 2006 (2 years, 0 months, 0 days ago)")
[?] Remote identification
[x] Move a (lot) of stuff to class members as a defined interface rather than copypasta everywhere (ns_set, ns_saset!)
[x] Store vhosts in SQL.
Future
------
[+] Method to store listmodes (more generically than AKICK, too) for e.g. +beI and extbans, etc.
[ ] XMLRPC to execute commands and get data from Anope
[ ] 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 INFO: seperate field for last seen realhost, shown to SRA only
[ ] NS SUSPEND: show suspender and reason, probably to sopers only (see CS SUSPEND)
[ ] MS IGNORE. Make it take nick (accounts) or n!u@h masks. Fake success of memo send still, but send to opers?
[ ] 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?)
[ ] fantasy: allow replies/notifications to fantasy commands to go to the channel via notice
[+] 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
[ ] NS AJOIN
[ ] CS ENTRYMSG
[+] 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
[x] AKILL/SGLINE/etc..
[x] Setter
[x] Time added
[+] Time modified (can they be modified?)
[ ] Time until expiry/expiry time (YES, time until expiry *instead of* expiry time, more human)
[x] Reason
[ ] Unique IDs on each AKILL/blah so that networks may use them as ticket IDs
[ ] Unique IDs on each AKILL/blah so that networks may use them as ticket IDs
[ ] HS ACTIVATE -ALL (rob sez this all needs reviewing)
[?] Drop CS SET ENTRYMSG, replace with a 'news' type system? (limited to a configured number of items, default 3)
[ ] 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
+2 -2
View File
@@ -10,10 +10,10 @@ Anope Bundled Tools
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 "tools/anopesmtp" and the IP address of a valid SMTP server. It
followed by "bin/anopesmtp" and the IP address of a valid SMTP server. It
should look like this:
sendmailpath = "/home/anope/services/tools/anopesmtp 127.0.0.1"
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
-309
View File
@@ -1,309 +0,0 @@
Troubleshooting Guide for Anope 1.9
------------------------------------------------
NOTE:
An updated version of this guide can be found on our wiki:
http://wiki.anope.org/index.php/Troubleshooting
Table of Contents
-----------------
1) General
1.1) Anope complains in the logfile about being unable to load the default
language.
1.2) Anope spricht kein Deutsch!, etc. (Anope doesn't speak my language!)
1.3) I selected a language other than English, but sometimes Anope sends
responses in English instead.
1.4) Anope always dies after about five minutes, saying "FATAL ERROR! Can't
back up nick.db".
1.5) Anope crashed with a segmentation fault.
1.6) I've found a bug that's not mentioned here or in the README or BUGS
files. What should I do?
1.7) My FreeBSD box complains about 'Shared object "nss_dns.so.1" not
found'
1.8) Anope and long (more then 30 character) nicknames.
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) BotServ
3.1) How do I add bots to BotServ?
3.2) Why do kick triggers and fantasy commands fail to work with my Bahamut
IRCd?
4) ChanServ
4.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.
4.2) Anope ignored the SET SUCCESSOR setting and deleted a channel when the
founder expired.
4.3) How to auto voice all those whom join my #channel?
4.4) Channel options like RESTRICTED or SECUREOPS don't work. What's wrong?
5) OperServ
5.1) Using the OperServ JUPE command results in server messages like
"Server juped.server introduced by non-hub server services.my.net".
5.2) When I add an AKILL, the users matching it don't get killed.
5.3) Trying to use OperServ gives me "Access denied".
5.4) I can't get /OS UMODES and /OS SVSNICK to work!
5.5) What is a Super-Admin? How does it work? Why might it not work?
-------------------------------------------------------------------------------
1) General
1.1) Anope complains in the logfile about being unable to load the default
language.
You forgot to run "make install".
1.2) Anope spricht kein Deutsch!, etc. (Anope doesn't speak my language!)
See section 5 of the README file.
1.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 only have a
translation of some of the message Anope uses. 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.
1.4) 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.
1.5) 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.
1.6) 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.
1.7) 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.
1.8) 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 clean Anope
installation 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.
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/make/ (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 IRCd or RemoteServer in
the configuration file. Check to make sure that you are actually running one of
the supported IRCds, also. A list of supported IRCds can be found in the README
file.
You can also check the log file (services.log by default) for error
messages. Starting services with the -support command line option
will prevent it from running in the background will output the
messages written to the log file to the console as well. Please note that this
will also prevent 3rd party modules from loading and will put Anope into
debug mode.
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!
You cannot /connect services. When you start Anope, it will attempt to
connect to the server you specified in services.conf. Please see the answer
above for more information.
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 section 3 of the INSTALL file 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) BotServ
3.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 in Anope before you
can use the BOT command.
3.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 that 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'.
4) ChanServ
4.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:*:*
4.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 in section 6 of the README file.
4.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
4.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.
5) OperServ
5.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
5.2) When I add an AKILL, the users matching it don't get killed.
Use the AkillOnAdd configuration directive.
5.3) Trying to use OperServ gives me "Access denied".
Check that you're opered on your IRCd (ie, moded +o)
Check that you're identified to a nickname listed within an opertype allowed to do the command you're trying.
Check whether you can use /msg operserv staff
5.4) I can't get /OS UMODES and /OS SVSNICK to work!
You need to be a SuperAdmin to be able to use these commands.
5.5) What is a Super-Admin? How does it work? Why might it not work?
SuperAdmin'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,
which is commented out by default. Read /msg OperServ HELP SET SUPERADMIN
for further help.
+3 -23
View File
@@ -26,36 +26,16 @@ Anope for Windows
(NOTE: When installing, tell CMake to add itself to the PATH.)
If you have Visual C++ 10 (2010) skip ahead to step 2, else you
need to download the following free components from Microsoft. Once
need to download the following free component from Microsoft. Once
downloaded, install these packages.
* Microsoft Visual C++ 2010 Express Edition:
http://www.microsoft.com/express/vc/
or
then download and install:
* Microsoft Windows 2008 SDK:
http://www.microsoft.com/downloads/details.aspx?FamilyId=E6E1C3DF-A74F-4207-8586-711EBE331CDC&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.)
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.
@@ -104,7 +84,7 @@ Anope for Windows
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 and MySQL header files and libraries are also included in
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.
+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_sql, 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 online. 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));
}
}
?>
+47 -4
View File
@@ -4,9 +4,10 @@ set_source_files_properties(version.cpp PROPERTIES LANGUAGE CXX COMPILE_FLAGS "$
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 the given headers, version.cpp, and all source files in the main Anope build
add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/version.h
COMMAND ${version_BINARY} ${Anope_SOURCE_DIR}/src/version.sh ${CMAKE_CURRENT_SOURCE_DIR}/version.h
# 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} ${CMAKE_CURRENT_BINARY_DIR}/version.h
DEPENDS version ${SRC_SRCS}
)
# Add version to list of files for CPack to ignore
@@ -16,5 +17,47 @@ if(NOT WIN32)
add_to_cpack_ignored_files("version.h$" TRUE)
endif(NOT WIN32)
set(PCH_SOURCES_GCH "")
if(USE_PCH AND CMAKE_COMPILER_IS_GNUCXX)
string(REPLACE " " ";" PCH_CXXFLAGS "${CXXFLAGS} ${CMAKE_CXX_FLAGS}")
file(GLOB PCH_SOURCES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "*.h")
sort_list(PCH_SOURCES)
foreach(PCH_SOURCE ${PCH_SOURCES})
find_includes(${PCH_SOURCE} INCLUDES)
set(INCLUDES_LIST)
append_to_list(INCLUDES_LIST ${PCH_SOURCE})
foreach(INCLUDE ${INCLUDES})
# Extract the filename from the #include line
extract_include_filename(${INCLUDE} FILENAME QUOTE_TYPE)
if(QUOTE_TYPE STREQUAL "quotes")
find_in_list(PCH_SOURCES "${FILENAME}" FOUND)
if(NOT FOUND EQUAL -1)
append_to_list(INCLUDES_LIST ${FILENAME})
endif(NOT FOUND EQUAL -1)
endif(QUOTE_TYPE STREQUAL "quotes")
endforeach(INCLUDE)
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} -I${Anope_SOURCE_DIR}/modules/pseudoclients ${CMAKE_CURRENT_SOURCE_DIR}/${PCH_SOURCE} -o ${CMAKE_CURRENT_BINARY_DIR}/${PCH_SOURCE}.gch
DEPENDS ${INCLUDES_LIST} VERBATIM
)
endforeach(PCH_SOURCE ${PCH_SOURCES})
endif(USE_PCH AND CMAKE_COMPILER_IS_GNUCXX)
# Add a custom target to the above file
add_custom_target(headers DEPENDS version ${CMAKE_CURRENT_BINARY_DIR}/version.h)
add_custom_target(headers DEPENDS version ${CMAKE_CURRENT_BINARY_DIR}/version_build ${PCH_SOURCES_GCH})
+107
View File
@@ -0,0 +1,107 @@
/*
*
* (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 ACCESS_H
#define ACCESS_H
#include "services.h"
#include "anope.h"
#include "serialize.h"
#include "service.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 CoreExport AccessProvider : public Service
{
public:
AccessProvider(Module *o, const Anope::string &n);
virtual ~AccessProvider();
virtual ChanAccess *Create() = 0;
private:
static std::list<AccessProvider *> providers;
public:
static const std::list<AccessProvider *>& GetProviders();
};
class CoreExport ChanAccess : public Serializable
{
public:
AccessProvider *provider;
serialize_obj<ChannelInfo> ci;
Anope::string mask;
Anope::string creator;
time_t last_seen;
time_t created;
ChanAccess(AccessProvider *p);
virtual ~ChanAccess();
const Anope::string serialize_name() const anope_override;
Serialize::Data serialize() const anope_override;
static Serializable* unserialize(Serializable *obj, Serialize::Data &);
virtual bool Matches(const User *u, const NickCore *nc) const;
virtual bool HasPriv(const Anope::string &name) const = 0;
virtual Anope::string Serialize() const = 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:
const ChannelInfo *ci;
const NickCore *nc;
bool SuperAdmin, Founder;
AccessGroup();
bool HasPriv(const Anope::string &priv) const;
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
+136 -91
View File
@@ -1,19 +1,30 @@
/*
*
* (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 ACCOUNT_H
#define ACCOUNT_H
#include "extensible.h"
#include "serialize.h"
#include "anope.h"
#include "memo.h"
#include "base.h"
class NickAlias;
class NickCore;
class NickRequest;
typedef Anope::insensitive_map<NickAlias *> nickalias_map;
typedef Anope::insensitive_map<NickCore *> nickcore_map;
typedef unordered_map_namespace::unordered_map<Anope::string, NickAlias *, ci::hash, std::equal_to<ci::string> > nickalias_map;
typedef unordered_map_namespace::unordered_map<Anope::string, NickCore *, ci::hash, std::equal_to<ci::string> > nickcore_map;
typedef unordered_map_namespace::unordered_map<Anope::string, NickRequest *, ci::hash, std::equal_to<ci::string> > nickrequest_map;
extern CoreExport nickalias_map NickAliasList;
extern CoreExport nickcore_map NickCoreList;
extern CoreExport nickrequest_map NickRequestList;
extern CoreExport serialize_checker<nickalias_map> NickAliasList;
extern CoreExport serialize_checker<nickcore_map> NickCoreList;
/* NickServ nickname structures. */
@@ -23,8 +34,6 @@ enum NickNameFlag
{
NS_BEGIN,
/* Nick may not be registered or used */
NS_FORBIDDEN,
/* Nick never expires */
NS_NO_EXPIRE,
/* This nick is being held after a kill by an enforcer client
@@ -41,6 +50,10 @@ enum NickNameFlag
NS_END
};
const Anope::string NickNameFlagStrings[] = {
"BEGIN", "NO_EXPIRE", "HELD", "COLLIDED", ""
};
/** Flags set on NickCores
*/
enum NickCoreFlag
@@ -81,33 +94,30 @@ enum NickCoreFlag
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,
/* Chanstats are enabled for this user */
NI_STATS,
NI_END
};
class CoreExport NickRequest : public Extensible
{
public:
NickRequest(const Anope::string &nickname);
~NickRequest();
Anope::string nick;
Anope::string passcode;
Anope::string password;
Anope::string email;
time_t requested;
time_t lastmail; /* Unsaved */
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", "STATS", ""
};
class NickCore;
class CoreExport NickAlias : public Extensible, public Flags<NickNameFlag, NS_END>
class CoreExport NickAlias : public Extensible, public Flags<NickNameFlag, NS_END>, public Serializable
{
Anope::string vhost_ident, vhost_host, vhost_creator;
time_t vhost_created;
public:
/** Default constructor
* @param nickname The nick
* @param nickcore The nickcofe for this nick
* @param nickcore The nickcore for this nick
*/
NickAlias(const Anope::string &nickname, NickCore *nickcore);
@@ -119,10 +129,14 @@ class CoreExport NickAlias : public Extensible, public Flags<NickNameFlag, NS_EN
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 */
NickCore *nc; /* I'm an alias of this */
HostInfo hostinfo;
serialize_obj<NickCore> nc; /* I'm an alias of this */
const Anope::string serialize_name() const anope_override;
Serialize::Data serialize() const anope_override;
static Serializable* unserialize(Serializable *obj, Serialize::Data &);
/** Release a nick
* See the comment in users.cpp
@@ -135,9 +149,46 @@ class CoreExport NickAlias : public Extensible, public Flags<NickNameFlag, NS_EN
* @param u The user
*/
void OnCancel(User *u);
/** Set a vhost for the user
* @param ident The ident
* @param host The host
* @param creator Who created the vhost
* @param time When the vhost was craated
*/
void SetVhost(const Anope::string &ident, const Anope::string &host, const Anope::string &creator, time_t created = Anope::CurTime);
/** Remove a users vhost
**/
void RemoveVhost();
/** Check if the user has a vhost
* @return true or false
*/
bool HasVhost() const;
/** Retrieve the vhost ident
* @return the ident
*/
const Anope::string &GetVhostIdent() const;
/** Retrieve the vhost host
* @return the host
*/
const Anope::string &GetVhostHost() const;
/** Retrieve the vhost creator
* @return the creator
*/
const Anope::string &GetVhostCreator() const;
/** Retrieve when the vhost was created
* @return the time it was created
*/
time_t GetVhostCreated() const;
};
class CoreExport NickCore : public Extensible, public Flags<NickCoreFlag, NI_END>
class CoreExport NickCore : public Extensible, public Flags<NickCoreFlag, NI_END>, public Serializable
{
public:
/** Default constructor
@@ -157,32 +208,25 @@ class CoreExport NickCore : public Extensible, public Flags<NickCoreFlag, NI_END
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 */
OperType *ot;
Oper *o;
/* Unsaved data */
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 */
std::list<serialize_obj<NickAlias> > aliases; /* List of aliases */
/** 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.
*/
virtual bool HasCommand(const Anope::string &cmdstr) const;
const Anope::string serialize_name() const anope_override;
Serialize::Data serialize() const anope_override;
static Serializable* unserialize(Serializable *obj, Serialize::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;
/** 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.
*/
virtual bool HasPriv(const Anope::string &privstr) const;
/** Add an entry to the nick's access list
*
* @param entry The nick!ident@host entry to add to the access list
@@ -222,53 +266,54 @@ class CoreExport NickCore : public Extensible, public Flags<NickCoreFlag, NI_END
* 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) const;
/** 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 NickServCollide : public Timer
{
dynamic_reference<User> u;
Anope::string nick;
extern CoreExport void change_core_display(NickCore *nc);
extern CoreExport void change_core_display(NickCore *nc, const Anope::string &newdisplay);
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 releasing nicks to be available for use
*/
class 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);
};
extern CoreExport NickAlias *findnick(const Anope::string &nick);
extern CoreExport NickCore *findcore(const Anope::string &nick);
extern CoreExport bool is_on_access(const User *u, const NickCore *nc);
#endif // ACCOUNT_H
+322 -99
View File
@@ -1,8 +1,8 @@
/*
* (C) 2003-2010 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.
@@ -11,26 +11,24 @@
#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
class CoreExport 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.
* ci::string, or a C-style string at any time.
*/
std::string _string;
public:
@@ -53,7 +51,6 @@ namespace Anope
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) { }
@@ -63,8 +60,6 @@ namespace Anope
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; }
/**
@@ -72,35 +67,21 @@ namespace Anope
*/
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); }
/**
@@ -109,8 +90,6 @@ namespace Anope
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; }
/**
@@ -119,15 +98,11 @@ namespace Anope
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.
@@ -141,7 +116,6 @@ namespace Anope
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.
@@ -153,6 +127,17 @@ namespace Anope
*/
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.
*/
@@ -165,6 +150,17 @@ namespace Anope
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.
*/
@@ -233,6 +229,28 @@ namespace Anope
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] = std::tolower(new_string[i], Anope::casemap);
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] = std::toupper(new_string[i], Anope::casemap);
return new_string;
}
/**
* Get a substring of the string.
*/
@@ -283,8 +301,6 @@ namespace Anope
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__;
@@ -294,19 +310,23 @@ namespace Anope
extern CoreExport time_t CurTime;
extern CoreExport string Version();
extern CoreExport string Build();
extern CoreExport string VersionShort();
extern CoreExport string VersionBuildString();
extern CoreExport int VersionMajor();
extern CoreExport int VersionMinor();
extern CoreExport int VersionPatch();
/** 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.
* @param use_regex Whether or not to try regex. case_sensitive is not used in regex.
*/
extern CoreExport bool Match(const Anope::string &str, const Anope::string &mask, bool case_sensitive = false);
extern CoreExport bool Match(const string &str, const string &mask, bool case_sensitive = false, bool use_regex = false);
/** Returns a list of pointers to message handlers
* @param The message name as sent by the IRCd
* @return a vector with pointers to the messagehandlers (you can bind more than one handler to a message)
/** 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);
@@ -321,13 +341,39 @@ namespace Anope
* @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);
extern CoreExport void Unhex(const string &src, string &dest);
extern CoreExport void Unhex(const string &src, char *dest, size_t sz);
/** Base 64 encode a string
* @param src The string to encode
* @param target Where the encoded string is placed
*/
extern CoreExport void B64Encode(const string &src, string &target);
/** Base 64 decode a string
* @param src The base64 encoded string
* @param target The plain text result
*/
extern CoreExport void B64Decode(const string &src, string &target);
/** Return the last error, uses errno/GetLastError() to determin this
/** 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();
extern CoreExport const string LastError();
}
/** sepstream allows for splitting token seperated lists.
@@ -393,85 +439,262 @@ class spacesepstream : public sepstream
spacesepstream(const Anope::string &source) : sepstream(source, ' ') { }
};
/** The base class that most classes in Anope inherit from
/** 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 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 : public Base
class CoreException : public std::exception
{
protected:
bool invalid;
/** Holds the error message to be displayed
*/
Anope::string err;
/** Source of the exception
*/
Anope::string source;
public:
dynamic_reference_base() : invalid(false) { }
virtual ~dynamic_reference_base() { }
inline void Invalidate() { this->invalid = true; }
/** Default constructor, just uses the error mesage 'Core threw an exception'.
*/
CoreException() : err("Core threw an exception"), source("The core") { }
/** This constructor can be used to specify an error message before throwing.
*/
CoreException(const Anope::string &message) : err(message), source("The core") { }
/** This constructor can be used to specify an error message before throwing,
* and to specify the source of the exception.
*/
CoreException(const Anope::string &message, const Anope::string &src) : err(message), source(src) { }
/** 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 ~CoreException() throw() { }
/** Returns the reason for the exception.
* The module should probably put something informative here as the user will see this upon failure.
*/
virtual const Anope::string &GetReason() const
{
return err;
}
virtual const Anope::string &GetSource() const
{
return source;
}
};
template<typename T>
class dynamic_reference : public dynamic_reference_base
class FatalException : public CoreException
{
public:
FatalException(const Anope::string &reason = "") : CoreException(reason) { }
virtual ~FatalException() throw() { }
};
class ModuleException : public CoreException
{
public:
/** Default constructor, just uses the error mesage 'Module threw an exception'.
*/
ModuleException() : CoreException("Module threw an exception", "A Module") { }
/** This constructor can be used to specify an error message before throwing.
*/
ModuleException(const Anope::string &message) : CoreException(message, "A Module") { }
/** 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 ~ModuleException() throw() { }
};
class ConvertException : public CoreException
{
public:
ConvertException(const Anope::string &reason = "") : CoreException(reason) { }
virtual ~ConvertException() throw() { }
};
/** Convert something to a string
*/
template<typename T> inline Anope::string stringify(const T &x)
{
std::ostringstream stream;
if (!(stream << x))
throw ConvertException("Stringify fail");
return stream.str();
}
template<typename T> inline void convert(const Anope::string &s, T &x, Anope::string &leftover, bool failIfLeftoverChars = true)
{
leftover.clear();
std::istringstream i(s.str());
char c;
bool res = i >> x;
if (!res)
throw ConvertException("Convert fail");
if (failIfLeftoverChars)
{
if (i.get(c))
throw ConvertException("Convert fail");
}
else
{
std::string left;
getline(i, left);
leftover = left;
}
}
template<typename T> inline void convert(const Anope::string &s, T &x, bool failIfLeftoverChars = true)
{
Anope::string Unused;
convert(s, x, Unused, failIfLeftoverChars);
}
template<typename T> inline T convertTo(const Anope::string &s, Anope::string &leftover, bool failIfLeftoverChars = true)
{
T x;
convert(s, x, leftover, failIfLeftoverChars);
return x;
}
template<typename T> inline T convertTo(const Anope::string &s, bool failIfLeftoverChars = true)
{
T x;
convert(s, x, failIfLeftoverChars);
return x;
}
/** Casts to be used instead of dynamic_cast, this uses dynamic_cast
* for debug builds and static_cast/reinterpret_cast on releass builds
* to speed up the program because dynamic_cast relies on RTTI.
*/
#ifdef DEBUG_BUILD
# include <typeinfo>
#endif
template<typename T, typename O> inline T anope_dynamic_static_cast(O ptr)
{
#ifdef DEBUG_BUILD
T ret = dynamic_cast<T>(ptr);
if (ptr != NULL && ret == NULL)
throw CoreException(Anope::string("anope_dynamic_static_cast<") + typeid(T).name() + ">(" + typeid(O).name() + ") fail");
return ret;
#else
return static_cast<T>(ptr);
#endif
}
template<typename T, typename O> inline T anope_dynamic_reinterpret_cast(O ptr)
{
#ifdef DEBUG_BUILD
T ret = dynamic_cast<T>(ptr);
if (ptr != NULL && ret == NULL)
throw CoreException(Anope::string("anope_dynamic_reinterpret_cast<") + typeid(T).name() + ">(" + typeid(O).name() + ") fail");
return ret;
#else
return reinterpret_cast<T>(ptr);
#endif
}
/*************************************************************************/
/** Class with the ability to keep flags on items, they should extend from this
* where T is an enum.
*/
template<typename T, size_t Size = 32> class Flags
{
protected:
T *ref;
std::bitset<Size> Flag_Values;
const Anope::string *Flag_Strings;
public:
dynamic_reference(T *obj) : ref(obj)
Flags() : Flag_Strings(NULL) { }
Flags(const Anope::string *flag_strings) : Flag_Strings(flag_strings) { }
/** Add a flag to this item
* @param Value The flag
*/
void SetFlag(T Value)
{
if (ref)
ref->AddReference(this);
Flag_Values[Value] = true;
}
virtual ~dynamic_reference()
/** Remove a flag from this item
* @param Value The flag
*/
void UnsetFlag(T Value)
{
if (this->invalid)
{
this->invalid = false;
this->ref = NULL;
}
else if (ref)
ref->DelReference(this);
Flag_Values[Value] = false;
}
virtual operator bool()
/** Check if this item has a flag
* @param Value The flag
* @return true or false
*/
bool HasFlag(T Value) const
{
if (this->invalid)
{
this->invalid = false;
this->ref = NULL;
}
return this->ref;
return Flag_Values.test(Value);
}
virtual inline void operator=(T *newref)
/** Check how many flags are set
* @return The number of flags set
*/
size_t FlagCount() const
{
if (this->invalid)
{
this->invalid = false;
this->ref = NULL;
}
else if (this->ref)
this->ref->DelReference(this);
this->ref = newref;
if (this->ref)
this->ref->AddReference(this);
return Flag_Values.count();
}
virtual inline T *operator->()
/** Unset all of the flags
*/
void ClearFlags()
{
return this->ref;
Flag_Values.reset();
}
virtual inline T *operator*()
Anope::string ToString() const
{
return this->ref;
std::vector<Anope::string> v = ToVector();
Anope::string flag_buf;
for (unsigned i = 0; i < v.size(); ++i)
flag_buf += v[i] + " ";
flag_buf.trim();
return flag_buf;
}
void FromString(const Anope::string &str)
{
spacesepstream sep(str);
Anope::string buf;
std::vector<Anope::string> v;
while (sep.GetToken(buf))
v.push_back(buf);
FromVector(v);
}
std::vector<Anope::string> ToVector() const
{
std::vector<Anope::string> ret;
for (unsigned i = 0; this->Flag_Strings && !this->Flag_Strings[i].empty(); ++i)
if (this->HasFlag(static_cast<T>(i)))
ret.push_back(this->Flag_Strings[i]);
return ret;
}
void FromVector(const std::vector<Anope::string> &strings)
{
this->ClearFlags();
for (unsigned i = 0; this->Flag_Strings && !this->Flag_Strings[i].empty(); ++i)
for (unsigned j = 0; j < strings.size(); ++j)
if (this->Flag_Strings[i] == strings[j])
this->SetFlag(static_cast<T>(i));
}
};
+115
View File
@@ -0,0 +1,115 @@
/*
*
* 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 BASE_H
#define BASE_H
#include "services.h"
/** The base class that most classes in Anope inherit from
*/
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) { }
dynamic_reference_base(const dynamic_reference_base &other) : invalid(other.invalid) { }
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() : ref(NULL)
{
}
dynamic_reference(T *obj) : ref(obj)
{
if (ref)
ref->AddReference(this);
}
dynamic_reference(const dynamic_reference<T> &other) : dynamic_reference_base(other), ref(other.ref)
{
if (operator bool())
ref->AddReference(this);
}
virtual ~dynamic_reference()
{
if (operator bool())
ref->DelReference(this);
}
/* We explicitly call operator bool here in several places to prevent other
* operators, such operator T*, from being called instead, which will mess
* with any class inheriting from this that overloads this operator.
*/
virtual operator bool()
{
if (!this->invalid)
return this->ref != NULL;
return false;
}
inline operator T*()
{
if (operator bool())
return this->ref;
return NULL;
}
inline T* operator->()
{
if (operator bool())
return this->ref;
return NULL;
}
inline void operator=(T *newref)
{
if (operator bool())
this->ref->DelReference(this);
this->ref = newref;
this->invalid = false;
if (operator bool())
this->ref->AddReference(this);
}
inline bool operator<(const dynamic_reference<T> &other) const
{
return this < &other;
}
inline bool operator==(const dynamic_reference<T> &other)
{
if (!this->invalid)
return this->ref == other;
return false;
}
};
#endif // BASE_H
+60 -15
View File
@@ -1,6 +1,6 @@
/*
* Copyright (C) 2008-2010 Robin Burchell <w00t@inspircd.org>
* Copyright (C) 2008-2010 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.
*/
@@ -8,14 +8,17 @@
#ifndef BOTS_H
#define BOTS_H
#include "users.h"
#include "anope.h"
#include "serialize.h"
#include "commands.h"
class BotInfo;
typedef unordered_map_namespace::unordered_map<Anope::string, BotInfo *, ci::hash, std::equal_to<ci::string> > botinfo_map;
typedef unordered_map_namespace::unordered_map<Anope::string, BotInfo *, Anope::hash> botinfo_uid_map;
extern CoreExport botinfo_map BotListByNick;
extern CoreExport botinfo_uid_map BotListByUID;
typedef Anope::insensitive_map<BotInfo *> botinfo_map;
typedef Anope::map<BotInfo *> botinfouid_map;
extern CoreExport serialize_checker<botinfo_map> BotListByNick;
extern CoreExport serialize_checker<botinfouid_map> BotListByUID;
/** Flags settable on a bot
*/
@@ -27,30 +30,44 @@ enum BotFlag
BI_CORE,
/* This bot can only be assigned by IRCops */
BI_PRIVATE,
/* This bot is defined in the config */
BI_CONF,
BI_END
};
class CoreExport BotInfo : public User, public Flags<BotFlag, BI_END>
static const Anope::string BotFlagString[] = { "BEGIN", "CORE", "PRIVATE", "CONF", "" };
class CoreExport BotInfo : public User, public Flags<BotFlag, BI_END>, public Serializable
{
public:
uint32 chancount;
time_t created; /* Birth date ;) */
time_t lastmsg; /* Last time we said something */
CommandMap Commands; /* Commands on this bot */
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.
* @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 Anope::string &nick, const Anope::string &user = "", const Anope::string &host = "", const Anope::string &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();
const Anope::string serialize_name() const;
Serialize::Data serialize() const;
static Serializable* unserialize(Serializable *obj, Serialize::Data &);
void GenerateUID();
/** Change the nickname for the bot.
* @param newnick The nick to change to
*/
@@ -73,23 +90,51 @@ class CoreExport BotInfo : public User, public Flags<BotFlag, BI_END>
*/
void UnAssign(User *u, ChannelInfo *ci);
/** Get the number of channels this bot is assigned to
*/
unsigned GetChannelCount() const;
/** Join this bot to a channel
* @param c The channel
* @param update_ts Assume we're updating the TS for this channel
* @param status The status the bot should have on the channel
*/
void Join(Channel *c, bool update_ts = false);
void Join(Channel *c, ChannelStatus *status = NULL);
/** Join this bot to a channel
* @param chname The channel name
* @param update_ts Assume we're updating the TS for this channel
* @param status The status the bot should have on the channel
*/
void Join(const Anope::string &chname, bool update_ts = false);
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);
};
extern CoreExport BotInfo *findbot(const Anope::string &nick);
extern CoreExport void bot_raw_ban(User *requester, ChannelInfo *ci, const Anope::string &nick, const Anope::string &reason);
extern CoreExport void bot_raw_kick(User *requester, ChannelInfo *ci, const Anope::string &nick, const Anope::string &reason);
#endif // BOTS_H
+79
View File
@@ -0,0 +1,79 @@
/*
*
* (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 BOTSERV_H
#define BOTSERV_H
#include "anope.h"
/* BotServ SET flags */
enum BotServFlag
{
BS_BEGIN,
/* BotServ won't kick ops */
BS_DONTKICKOPS,
/* BotServ won't kick voices */
BS_DONTKICKVOICES,
/* BotServ bot accepts fantasy commands */
BS_FANTASY,
/* BotServ should show greets */
BS_GREET,
/* BotServ bots are not allowed to be in this channel */
BS_NOBOT,
/* BotServ kicks for bolds */
BS_KICK_BOLDS,
/* BotServ kicks for colors */
BS_KICK_COLORS,
/* BOtServ kicks for reverses */
BS_KICK_REVERSES,
/* BotServ kicks for underlines */
BS_KICK_UNDERLINES,
/* BotServ kicks for badwords */
BS_KICK_BADWORDS,
/* BotServ kicks for caps */
BS_KICK_CAPS,
/* BotServ kicks for flood */
BS_KICK_FLOOD,
/* BotServ kicks for repeating */
BS_KICK_REPEAT,
/* BotServ kicks for italics */
BS_KICK_ITALICS,
/* BotServ kicks for amsgs */
BS_KICK_AMSGS,
BS_END
};
const Anope::string BotServFlagStrings[] = {
"BEGIN", "DONTKICKOPS", "DONTKICKVOICES", "FANTASY", "GREET", "NOBOT",
"KICK_BOLDs", "KICK_COLORS", "KICK_REVERSES", "KICK_UNDERLINES", "KICK_BADWORDS", "KICK_CAPS",
"KICK_FLOOD", "KICK_REPEAT", "KICK_ITALICS", "KICK_AMSGS", "MSG_PRIVMSG", "MSG_NOTICE",
"MSG_NOTICEOPS", ""
};
/* Indices for TTB (Times To Ban) */
enum
{
TTB_BOLDS,
TTB_COLORS,
TTB_REVERSES,
TTB_UNDERLINES,
TTB_BADWORDS,
TTB_CAPS,
TTB_FLOOD,
TTB_REPEAT,
TTB_ITALICS,
TTB_AMSGS,
TTB_SIZE
};
#endif // BOTSERV_H
+57 -92
View File
@@ -1,6 +1,6 @@
/* Channel support
*
* (C) 2008-2010 Anope Team
* (C) 2008-2012 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
@@ -9,41 +9,17 @@
#ifndef CHANNELS_H
#define CHANNELS_H
typedef unordered_map_namespace::unordered_map<Anope::string, Channel *, ci::hash, std::equal_to<ci::string> > channel_map;
#include "anope.h"
#include "extensible.h"
#include "modes.h"
#include "serialize.h"
typedef Anope::insensitive_map<Channel *> channel_map;
extern CoreExport channel_map ChannelList;
struct UserData
{
UserData()
{
Clear();
}
virtual ~UserData() { }
void Clear()
{
last_use = last_start = Anope::CurTime;
lines = times = 0;
lastline.clear();
}
/* Data validity */
time_t last_use;
/* for flood kicker */
int16 lines;
time_t last_start;
/* for repeat kicker */
Anope::string lastline;
int16 times;
};
struct UserContainer
struct UserContainer : public Extensible
{
User *user;
UserData ud;
ChannelStatus *Status;
UserContainer(User *u) : user(u) { }
@@ -52,26 +28,27 @@ struct UserContainer
typedef std::list<UserContainer *> CUserList;
enum ChannelFlags
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,
/* Is a services log channel */
CH_LOGCHAN
CH_SYNCING
};
class CoreExport Channel : public Extensible, public Flags<ChannelFlags>
const Anope::string ChannelFlagString[] = { "CH_INABIT", "CH_PERSIST", "CH_SYNCING", "" };
class CoreExport Channel : public virtual Base, 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
*/
std::map<ChannelModeName, Anope::string> Params;
ModeList modes;
/* Modes set on the channel */
Flags<ChannelModeName, CMODE_END * 2> modes;
public:
/** Default constructor
* @param name The channel name
@@ -84,13 +61,9 @@ class CoreExport Channel : public Extensible, public Flags<ChannelFlags>
~Channel();
Anope::string name; /* Channel name */
ChannelInfo *ci; /* Corresponding ChannelInfo */
serialize_obj<ChannelInfo> ci; /* Corresponding ChannelInfo */
time_t creation_time; /* When channel was created */
EList *bans;
EList *excepts;
EList *invites;
/* List of users in the channel */
CUserList users;
@@ -98,13 +71,11 @@ class CoreExport Channel : public Extensible, public Flags<ChannelFlags>
Anope::string topic_setter; /* Who set the topic */
time_t topic_time; /* When the topic was set*/
std::list<BanData *> bd;
time_t server_modetime; /* Time of last server MODE */
time_t chanserv_modetime; /* Time of last check_modes() */
int16 server_modecount; /* Number of server MODEs this second */
int16 chanserv_modecount; /* Number of check_mode()'s this sec */
int16 bouncy_modes; /* Did we fail to set modes here? */
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
@@ -115,6 +86,10 @@ class CoreExport Channel : public Extensible, public Flags<ChannelFlags>
*/
void Sync();
/** Check if a channels modes are correct.
*/
void CheckModes();
/** Join a user internally to the channel
* @param u The user
*/
@@ -129,14 +104,14 @@ class CoreExport Channel : public Extensible, public Flags<ChannelFlags>
* @param u The user
* @return A user container if found, else NULL
*/
UserContainer *FindUser(User *u);
UserContainer *FindUser(const User *u) const;
/** 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;
bool HasUserStatus(const 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
@@ -144,32 +119,36 @@ class CoreExport Channel : public Extensible, public Flags<ChannelFlags>
* @param Name The Mode name, eg CMODE_OP, CMODE_VOICE
* @return true or false
*/
bool HasUserStatus(User *u, ChannelModeName Name) const;
/** See if the channel has any modes at all
* @return true or false
*/
inline bool HasModes() const { return modes.FlagCount(); }
bool HasUserStatus(const User *u, ChannelModeName Name) const;
/** See if a channel has a mode
* @param Name The mode name
* @return true or false
* @return The number of modes set
* @param param The optional mode param
*/
bool HasMode(ChannelModeName Name) const;
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 setter The setter
* @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);
void SetModeInternal(User *setter, 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 setter The Setter
* @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);
void RemoveModeInternal(User *setter, ChannelMode *cm, const Anope::string &param = "", bool EnforceMLock = true);
/** Set a mode on a channel
* @param bi The client setting the modes
@@ -205,30 +184,6 @@ class CoreExport Channel : public Extensible, public Flags<ChannelFlags>
*/
void RemoveMode(BotInfo *bi, ChannelModeName Name, const Anope::string &param = "", bool EnforceMLock = true);
/** Clear all the modes from the channel
* @param bi The client unsetting the modes
* @param internal Only remove the modes internally
*/
void ClearModes(BotInfo *bi = NULL, bool internal = false);
/** Clear all the bans from the channel
* @param bi The client unsetting the modes
* @param internal Only remove the modes internally
*/
void ClearBans(BotInfo *bi = NULL, bool internal = false);
/** Clear all the excepts from the channel
* @param bi The client unsetting the modes
* @param internal Only remove the modes internally
*/
void ClearExcepts(BotInfo *bi = NULL, bool internal = false);
/** Clear all the invites from the channel
* @param bi The client unsetting the modes
* @param internal Only remove the modes internally
*/
void ClearInvites(BotInfo *bi = NULL, bool internal = false);
/** Get a param from the channel
* @param Name The mode
* @param Target a string to put the param into
@@ -236,11 +191,6 @@ class CoreExport Channel : public Extensible, public Flags<ChannelFlags>
*/
bool GetParam(ChannelModeName Name, Anope::string &Target) const;
/** Check if a mode is set and has a param
* @param Name The mode
*/
bool HasParam(ChannelModeName Name) 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
@@ -290,6 +240,21 @@ class CoreExport Channel : public Extensible, public Flags<ChannelFlags>
* @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);
/** Hold the channel open using ChanServ
*/
void Hold();
};
extern CoreExport Channel *findchan(const Anope::string &chan);
extern CoreExport User *nc_on_chan(Channel *c, const NickCore *nc);
extern CoreExport void do_cmode(const Anope::string &source, const Anope::string &channel, const Anope::string &modes, const Anope::string &ts);
extern CoreExport void do_join(const Anope::string &source, const Anope::string &channels, const Anope::string &ts);
extern CoreExport void do_kick(const Anope::string &source, const Anope::string &channel, const Anope::string &users, const Anope::string &reason);
extern CoreExport void do_part(const Anope::string &source, const Anope::string &channels, const Anope::string &reason);
extern CoreExport void chan_set_correct_modes(const User *user, Channel *c, int give_modes);
#endif // CHANNELS_H
+92 -65
View File
@@ -1,9 +1,9 @@
/* Declarations for command data.
*
* (C) 2003-2010 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.
@@ -12,109 +12,136 @@
#ifndef COMMAND_H
#define COMMAND_H
#include "services.h"
class Module;
class BotInfo;
class Command;
typedef std::map<Anope::string, Command *, std::less<ci::string> > CommandMap;
/** The return value from commands.
*/
enum CommandReturn
{
MOD_CONT,
MOD_STOP
};
extern CoreExport Command *FindCommand(BotInfo *bi, const Anope::string &cmd);
extern CoreExport void mod_help_cmd(BotInfo *bi, User *u, const Anope::string &cmd);
extern CoreExport void mod_run_cmd(BotInfo *bi, User *u, const Anope::string &message);
extern CoreExport void mod_run_cmd(BotInfo *bi, User *u, Command *c, const Anope::string &command, const Anope::string &message);
#include "service.h"
#include "anope.h"
enum CommandFlag
{
CFLAG_ALLOW_UNREGISTERED,
CFLAG_ALLOW_FORBIDDEN,
CFLAG_ALLOW_SUSPENDED,
CFLAG_ALLOW_UNREGISTEREDCHANNEL,
CFLAG_STRIP_CHANNEL,
CFLAG_DISABLE_FANTASY
CFLAG_STRIP_CHANNEL
};
const Anope::string CommandFlagStrings[] = {
"CFLAG_ALLOW_UNREGISTERED",
"CFLAG_STRIP_CHANNEL",
""
};
struct CommandInfo
{
Anope::string name;
Anope::string permission;
};
struct CommandReply
{
virtual void SendMessage(const BotInfo *source, const Anope::string &msg) = 0;
};
/* The source for a command */
class CoreExport CommandSource
{
/* The nick executing the command */
Anope::string nick;
/* User executing the command, may be NULL */
User *u;
public:
/* The account executing the command */
NickCore *nc;
/* Where the reply should go */
CommandReply *reply;
/* 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;
CommandSource(const Anope::string &n, User *user, NickCore *core, CommandReply *reply);
const Anope::string &GetNick() const;
User *GetUser() const;
AccessGroup AccessFor(ChannelInfo *ci) const;
bool IsFounder(ChannelInfo *ci) const;
void Reply(const char *message, ...);
void Reply(const Anope::string &message);
bool HasCommand(const Anope::string &cmd);
bool HasPriv(const Anope::string &cmd);
bool IsServicesOper() const;
bool IsOper() const;
};
/** Every services command is a class, inheriting from Command.
*/
class CoreExport Command : public Flags<CommandFlag>
class CoreExport Command : public Service, public Flags<CommandFlag>
{
Anope::string desc;
std::vector<Anope::string> syntax;
public:
/* Maximum paramaters accepted by this command */
size_t MaxParams;
/* Minimum parameters required to use this command */
size_t MinParams;
/* Command name */
Anope::string name;
/* Permission needed to use this comand */
Anope::string permission;
/* Module which owns us */
Module *module;
/* Service this command is on */
BotInfo *service;
/** 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(const Anope::string &sname, size_t min_params, size_t max_params = 0, const Anope::string &spermission = "");
Command(Module *owner, const Anope::string &sname, size_t min_params, size_t max_params = 0);
virtual ~Command();
/** Execute this command.
* @param u The user executing the 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
*/
virtual CommandReturn Execute(User *u, const std::vector<Anope::string> &);
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 u The user requesting help
* @param source The source
*/
virtual void OnServHelp(User *u);
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 u The user requesting help
* @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(User *u, const Anope::string &subcommand);
virtual bool OnHelp(CommandSource &source, const Anope::string &subcommand);
/** Requested when the user provides bad syntax to this command (not enough params, etc).
* @param u The user executing the command.
* @param source The source
* @param subcommand The subcommand the user tried to use
*/
virtual void OnSyntaxError(User *u, const Anope::string &subcommand);
/** Set which command permission (e.g. chanserv/forbid) is required for this command.
* @param reststr The permission required to successfully execute this command
*/
void SetPermission(const Anope::string &reststr);
/** Add a subcommand to this command
* @param c The command
*/
virtual bool AddSubcommand(Command *c);
/** Delete a subcommand from this command
* @param c The command
*/
virtual bool DelSubcommand(Command *c);
/** Find a subcommand
* @param name The subcommand name
* @return The subcommand
*/
virtual Command *FindSubcommand(const Anope::string &subcommand);
virtual void OnSyntaxError(CommandSource &source, const Anope::string &subcommand);
};
extern CoreExport void RunCommand(CommandSource &source, const Anope::string &message);
#endif // COMMANDS_H
+198 -341
View File
@@ -1,14 +1,22 @@
/*
*
* (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 CONFIG_H
#define CONFIG_H
#include <string>
#include <fstream>
#include <sstream>
#include <vector>
#include <map>
#include <deque>
#include "anope.h"
#include "account.h"
#include "regchannel.h"
#include "users.h"
/** A configuration key and value pair
*/
@@ -23,7 +31,6 @@ typedef std::vector<KeyVal> KeyValList;
typedef std::multimap<Anope::string, KeyValList> ConfigDataHash;
// Required forward definitions
class ServerConfig;
/** Types of data in the core config
*/
@@ -33,9 +40,6 @@ enum ConfigDataType
DT_INTEGER, // Integer
DT_UINTEGER, // Unsigned Integer
DT_LUINTEGER, // Long Unsigned Integer
DT_CHARPTR, // Char pointer
DT_CSSTRING, // std::string
DT_CISTRING, // ci::string
DT_STRING, // Anope::string
DT_BOOLEAN, // Boolean
DT_HOSTNAME, // Hostname syntax
@@ -44,7 +48,8 @@ enum ConfigDataType
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
DT_ALLOW_NEWLINE = 128, // New line characters allowed in DT_STRING
DT_ALLOW_EMPTY = 256 // Allow empty value
};
/** Holds a config value, either string, integer or boolean.
@@ -53,34 +58,22 @@ enum ConfigDataType
* The callback function can then alter the values of the ValueItem
* classes to validate the settings.
*/
class ValueItem
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 a char pointer */
ValueItem(const char *);
/** Initialize with an std::string */
ValueItem(const std::string &);
/** Initialize with a ci::string */
ValueItem(const ci::string &);
/** Initialize with an Anope::string */
ValueItem(const Anope::string &);
/** Initialize with a long */
ValueItem(long);
/** 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 a ci::string */
void Set(const ci::string &);
/** Change value to an Anope::string */
void Set(const Anope::string &);
/** Change value to an int */
@@ -89,11 +82,7 @@ class ValueItem
int GetInteger() const;
/** Get value as a string */
const char *GetString() const;
/** Get value as an std::string */
inline const std::string GetCSValue() const { return v.str(); }
/** Get value as a ci::string */
inline const ci::string GetCIValue() const { return v.ci_str(); }
/** Get value as a ci::string */
/** Get value as an Anope::string */
inline const Anope::string &GetValue() const { return v; }
/** Get value as a bool */
bool GetBool() const;
@@ -143,112 +132,6 @@ template<typename T> class ValueContainer : public ValueContainerBase
}
};
/** This a specific version of ValueContainer to handle character arrays specially
*/
template<> class ValueContainer<char **> : public ValueContainerBase
{
private:
/** 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
{
private:
/** 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 ci::string */
void Set(const ci::string &newval)
{
*val = newval.c_str();
}
/** Change value to given char pointer */
void Set(const char *newval)
{
*val = newval;
}
};
/** This a specific version of ValueContainer to handle ci::string specially
*/
template<> class ValueContainer<ci::string *> : public ValueContainerBase
{
private:
/** Contained item */
ci::string *val;
public:
/** Initialize with nothing */
ValueContainer() : ValueContainerBase(), val(NULL) { }
/** Initialize with an std::string */
ValueContainer(ci::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.c_str();
}
/** Change value to given ci::string */
void Set(const ci::string &newval)
{
*val = newval;
}
/** Change value to given char pointer */
void Set(const char *newval)
{
*val = newval;
}
};
/** This a specific version of ValueContainer to handle Anope::string specially
*/
template<> class ValueContainer<Anope::string *> : public ValueContainerBase
@@ -268,16 +151,7 @@ template<> class ValueContainer<Anope::string *> : public ValueContainerBase
val = Val.val;
return *this;
}
/** Change value to given std::string */
void Set(const std::string &newval)
{
*val = newval;
}
/** Change value to given ci::string */
void Set(const ci::string &newval)
{
*val = newval;
}
/** Change value to given Anope::string */
void Set(const Anope::string &newval)
{
@@ -304,11 +178,6 @@ typedef ValueContainer<unsigned *> ValueContainerUInt;
*/
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
*/
@@ -319,16 +188,6 @@ typedef ValueContainer<int *> ValueContainerInt;
*/
typedef ValueContainer<time_t *> ValueContainerTime;
/** A specialization of ValueContainer to hold a pointer to
* an std::string
*/
typedef ValueContainer<std::string *> ValueContainerCSString;
/** A specialization of ValueContainer to hold a pointer to
* an ci::string
*/
typedef ValueContainer<ci::string *> ValueContainerCIString;
/** A specialization of ValueContainer to hold a pointer to
* an Anope::string
*/
@@ -348,43 +207,88 @@ typedef bool (*MultiValidator)(ServerConfig *, const Anope::string &, const Anop
*/
typedef bool (*MultiNotify)(ServerConfig *, const Anope::string &);
/** Holds a core configuration item and its callbacks
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
*/
struct InitialConfig
class ConfigurationFile
{
/** Tag name */
const Anope::string tag;
/** Value name */
const Anope::string value;
/** Default, if not defined */
const Anope::string default_value;
/** Value containers */
ValueContainerBase *val;
/** Data types */
int datatype;
/** Validation function */
Validator validation_function;
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 a core configuration item and its callbacks
* where there may be more than one item
/** Holds all of the core configuration items
*/
struct MultiConfig
class CoreExport ConfigItems
{
/** Tag name */
const Anope::string tag;
/** One or more items within tag */
const Anope::string items[17];
/** One or more defaults for items within tags */
const 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;
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.
@@ -398,8 +302,6 @@ class CoreExport ServerConfig
*/
bool CheckOnce(const Anope::string &);
public:
/* Error from the config */
std::ostringstream errstr;
/** This holds all the information in the config file,
* it's indexed by tag name to a vector of key/values.
*/
@@ -407,15 +309,16 @@ class CoreExport ServerConfig
/** 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 'filename' into 'target', with the new config parser everything is parsed into
/** 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.
*/
bool LoadConf(ConfigDataHash &, const Anope::string &);
void LoadConf(ConfigurationFile &file);
// Both these return true if the value existed or false otherwise
/** Writes 'length' chars into 'result' as a string
*/
@@ -445,24 +348,40 @@ class CoreExport ServerConfig
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;
struct Uplink
{
Anope::string host;
unsigned port;
Anope::string password;
bool ipv6;
Uplink(const Anope::string &_host, int _port, const Anope::string &_password, bool _ipv6) : host(_host), port(_port), password(_password), ipv6(_ipv6) { }
bool operator==(const Uplink &other) const
{
if (this->host != other.host)
return false;
if (this->port != other.port)
return false;
if (this->password != other.password)
return false;
if (this->ipv6 != other.ipv6)
return false;
return true;
}
inline bool operator!=(const Uplink &other) const { return !(*this == other); }
};
/** Below here is a list of variables which contain the config files values
*/
/* IRCd module in use */
Anope::string IRCDModule;
/* Host to connect to **/
/* Host to bind to */
Anope::string LocalHost;
/* List of uplink servers to try and connect to */
std::list<Uplink *> Uplinks;
std::vector<Uplink *> Uplinks;
/* Our server name */
Anope::string ServerName;
/* Our servers description */
Anope::string ServerDesc;
/* The username/ident of services clients */
Anope::string ServiceUser;
/* The hostname if services clients */
Anope::string ServiceHost;
/* Name of the network were on */
Anope::string NetworkName;
@@ -473,44 +392,25 @@ class CoreExport ServerConfig
/* Max lenght of hostnames */
unsigned HostLen;
/* Casemapping to use */
Anope::string CaseMap;
/* Max length of passwords */
unsigned PassLen;
/* NickServ Name */
Anope::string s_NickServ;
/* ChanServ Name */
Anope::string s_ChanServ;
/* MemoServ Name */
Anope::string s_MemoServ;
/* BotServ Name */
Anope::string s_BotServ;
/* OperServ name */
Anope::string s_OperServ;
/* Global name */
Anope::string s_GlobalNoticer;
/* NickServs realname */
Anope::string desc_NickServ;
/* ChanServ realname */
Anope::string desc_ChanServ;
/* MemoServ realname */
Anope::string desc_MemoServ;
/* BotServ realname */
Anope::string desc_BotServ;
/* OperServ realname */
Anope::string desc_OperServ;
/* Global realname */
Anope::string desc_GlobalNoticer;
/* HostServ Name */
Anope::string s_HostServ;
/* HostServ realname */
Anope::string desc_HostServ;
/* 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 */
@@ -537,6 +437,9 @@ class CoreExport ServerConfig
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;
@@ -544,16 +447,24 @@ class CoreExport ServerConfig
unsigned NewsCount;
/* Default mlock modes */
Anope::string MLock;
/* Unmlockable modes */
Anope::string NoMLock;
/* Modes that are required to be on registered channels */
Anope::string CSRequire;
/* Use server side mlock */
bool UseServerSideMLock;
/* Default botmodes on channels, defaults to ao */
Anope::string BotModes;
/* THe actual modes */
std::vector<ChannelModeStatus *> BotModeList;
/* How many times to try and reconnect to the uplink before giving up */
unsigned MaxRetries;
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;
/* Regex engine to use */
Anope::string RegexEngine;
/* A vector of our logfile options */
std::vector<LogInfo *> LogInfos;
@@ -570,6 +481,12 @@ class CoreExport ServerConfig
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;
@@ -593,12 +510,16 @@ class CoreExport ServerConfig
time_t NSRegDelay;
/* Time before the registering mail will be resent */
time_t NSResendDelay;
/* How long before nicks expir */
/* How long before nicks expire */
time_t NSExpire;
/* Time before NickRequests expire */
time_t NSRExpire;
/* 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 */
@@ -609,27 +530,37 @@ class CoreExport ServerConfig
Anope::string NSEnforcerHost;
/* How long before recovered nicks are released */
time_t NSReleaseTimeout;
/* /nickserv list is oper only */
bool NSListOpersOnly;
/* 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;
/* Type of confirmation to use, or to disable registration completely */
Anope::string NSRegistration;
/* A message sent to unregistered users on connect */
Anope::string NSUnregisteredNotice;
/* 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 */
@@ -640,8 +571,6 @@ class CoreExport ServerConfig
Anope::string CSAutokickReason;
/* Time ChanServ should stay in the channel to hold it to keep users from getting in */
time_t CSInhabit;
/* ChanServ's LIST command is oper only */
bool CSListOpersOnly;
/* Max number of entries allowed to be returned from the LIST command */
unsigned CSListMax;
/* true to make ChanServ oper only */
@@ -656,7 +585,16 @@ class CoreExport ServerConfig
/* Who can use memos reciepts */
unsigned MSMemoReceipt;
/* Defai;t BotServ flags */
/* 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;
@@ -695,58 +633,16 @@ class CoreExport ServerConfig
time_t SNLineExpiry;
/* Default expiry time for SQLines */
time_t SQLineExpiry;
/* Default expiry time for SZLine */
time_t SZLineExpiry;
/* 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 someone uses the GLOBAL command */
bool WallOSGlobal;
/* Send a WALLOPS/GLOBOPS when someone uses the MODE command */
bool WallOSMode;
/* Send a WALLOPS/GLOBOPS when someone uses the CLEARMODES command */
bool WallOSClearmodes;
/* Send a WALLOPS/GLOBOPS when someone uses the KICK command */
bool WallOSKick;
/* Send a WALLOPS/GLOBOPS when someone uses the AKILL command */
bool WallOSAkill;
/* Send a WALLOPS/GLOBOPS when someone uses the SNLINE command */
bool WallOSSNLine;
/* Send a WALLOPS/GLOBOPS when someone uses the SQLINE command */
bool WallOSSQLine;
/* Send a WALLOPS/GLOBOPS when someone uses the SZLINE command */
bool WallOSSZLine;
/* Send a WALLOPS/GLOBOPS when someone uses the NOOP command */
bool WallOSNoOp;
/* Send a WALLOPS/GLOBOPS when when someone uses the JUPE command */
bool WallOSJupe;
/* 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 SZLines expire */
bool WallSZLineExpire;
/* Send a WALLOPS/GLOBOPS when exceptions expire */
bool WallExceptionExpire;
/* Send a WALLOPS/GLOBOPS when DROP is used */
bool WallDrop;
/* Send a WALLOPS/GLOBOPS when FORBID is used */
bool WallForbid;
/* Send a WALLOPS/GLOBOPS when GETPASS is used */
bool WallGetpass;
/* Send a WALLOPS/GLOBOPS when SETPASS is used */
bool WallSetpass;
/* Add the akillers nick to the akill reason */
bool AddAkiller;
/* Add akill ids to akill reason */
bool AkillIds;
/* Limit sessions */
bool LimitSessions;
@@ -769,51 +665,9 @@ class CoreExport ServerConfig
/* List of modules to autoload */
std::list<Anope::string> ModulesAutoLoad;
/* Encryption modules */
std::list<Anope::string> EncModuleList;
/* Database modules */
std::list<Anope::string> DBModuleList;
/* HostServ Core Modules */
std::list<Anope::string> HostServCoreModules;
/* MemoServ Core Modules */
std::list<Anope::string> MemoServCoreModules;
/* BotServ Core Modules */
std::list<Anope::string> BotServCoreModules;
/* OperServ Core Modules */
std::list<Anope::string> OperServCoreModules;
/* NickServ Core Modules */
std::list<Anope::string> NickServCoreModules;
/* ChanServ Core Modules */
std::list<Anope::string> ChanServCoreModules;
/* Default defcon level */
int DefConLevel;
/* Timeout before defcon is reset */
time_t DefConTimeOut;
/* Session limiit to use when using defcon */
unsigned DefConSessionLimit;
/* How long to add akills for defcon */
time_t DefConAKILL;
/* Chan modes for defcon */
Anope::string DefConChanModes;
/* Should we global on defcon */
bool GlobalOnDefcon;
/* Should we send DefconMessage aswell? */
bool GlobalOnDefconMore;
/* Message to send when defcon is off */
Anope::string DefConOffMessage;
/* Message to send when defcon is on*/
Anope::string DefconMessage;
/* Reason to akill clients for defcon */
Anope::string DefConAkillReason;
/* The socket engine in use */
Anope::string SocketEngine;
/* User keys to use for generating random hashes for pass codes etc */
unsigned long UserKey1;
unsigned long UserKey2;
unsigned long UserKey3;
/* Seed to use for RNG */
unsigned long Seed;
/* Numeric */
Anope::string Numeric;
@@ -823,7 +677,7 @@ class CoreExport ServerConfig
/* List of available opertypes */
std::list<OperType *> MyOperTypes;
/* List of pairs of opers and their opertype from the config */
std::list<std::pair<Anope::string, Anope::string> > Opers;
std::vector<Oper *> Opers;
};
/** This class can be used on its own to represent an exception, or derived to represent a module-specific exception.
@@ -871,7 +725,7 @@ class CoreExport ConfigReader
long error;
public:
/** Default constructor.
* This constructor initialises the ConfigReader class to read services.conf.
* This constructor initialises the ConfigReader class to read the configuration file(s).
*/
ConfigReader();
/** Overloaded constructor.
@@ -950,4 +804,7 @@ class CoreExport ConfigReader
int EnumerateValues(const Anope::string &, int);
};
extern ConfigurationFile services_conf;
extern CoreExport ServerConfig *Config;
#endif // CONFIG_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.
*
*/
class AccessGroup;
class AutoKick;
class BotInfo;
class CallBack;
class ChanAccess;
class Channel;
class ChannelInfo;
class ChannelStatus;
class ClientSocket;
class Command;
class CommandSource;
class ConnectionSocket;
class DNSPacket;
class dynamic_reference_base;
class Entry;
class InfoFormatter;
class ListenSocket;
class Log;
class LogInfo;
class Memo;
class Message;
class Module;
class NickAlias;
class NickCore;
class OperType;
class Regex;
class Serializable;
class Server;
class ServerConfig;
class Socket;
class Thread;
class User;
class XLine;
class XLineManager;
struct BadWord;
struct DNSQuery;
struct Exception;
struct MemoInfo;
struct ModeLock;
struct Oper;
+104 -98
View File
@@ -1,6 +1,24 @@
/*
*
* (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 DNS_H
#define DNS_H
#include "sockets.h"
#include "timers.h"
#include "extern.h"
#include "config.h"
/** Valid query types
*/
enum QueryType
@@ -19,7 +37,7 @@ enum QueryType
/** Flags that can be AND'd into DNSPacket::flags to receive certain values
*/
enum QueryFlags
enum
{
DNS_QUERYFLAGS_QR = 0x8000,
DNS_QUERYFLAGS_OPCODE = 0x7800,
@@ -48,16 +66,42 @@ enum DNSError
DNS_ERROR_INVALIDTYPE
};
class DNSRequestTimeout; // Forward declarations
struct DNSRecord;
class Module;
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
class CoreExport DNSRequest : public Timer, public Question
{
/* Timeout timer for this request */
DNSRequestTimeout *timeout;
/* Use result cache if available */
bool use_cache;
@@ -67,131 +111,93 @@ class CoreExport DNSRequest
/* Creator of this request */
Module *creator;
/* Address we're looking up */
Anope::string address;
/* QueryType, A, AAAA, PTR etc */
QueryType QT;
DNSRequest(const Anope::string &addr, QueryType qt, bool cache = false, Module *c = NULL);
virtual ~DNSRequest();
void Process();
virtual void OnLookupComplete(const DNSRecord *r) = 0;
virtual void OnLookupComplete(const DNSQuery *r) = 0;
virtual void OnError(const DNSRecord *r);
virtual void OnError(const DNSQuery *r);
void Tick(time_t) anope_override;
};
/** A full packet sent to the nameserver, may contain multiple queries
/** A full packet sent or recieved to/from the nameserver, may contain multiple queries
*/
struct DNSPacket
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;
/* Number of queries */
unsigned short qdcount;
/* Number of resource records in answer */
unsigned short ancount;
/* Number of NS resource records in authority records section */
unsigned short nscount;
/* Number of resource records in the additional records section */
unsigned short arcount;
/* How many of the bytes of the payload are in use */
unsigned short payload_count;
/* The queries, at most can be 512 bytes */
unsigned char payload[512];
inline DNSPacket();
bool AddQuestion(const Anope::string &address, QueryType qt);
inline void FillPacket(const unsigned char *input, const size_t length);
inline void FillBuffer(unsigned char *buffer);
DNSPacket();
void Fill(const unsigned char *input, const unsigned short len);
unsigned short Pack(unsigned char *output, unsigned short output_size);
};
struct DNSRecord
{
/* Name of the initial lookup */
Anope::string name;
/* Result of the lookup */
Anope::string result;
/* Type of query this was */
QueryType type;
/* Error, if there was one */
DNSError error;
/* Record class, should always be 1 */
unsigned short record_class;
/* Time to live */
time_t ttl;
/* Record length */
unsigned short rdlength;
inline DNSRecord(const Anope::string &n);
/* When this record was created in our cache */
time_t created;
};
/** The socket used to talk to the nameserver, uses UDP
/** DNS manager, manages all requests
*/
class DNSSocket : public ConnectionSocket
class CoreExport DNSManager : public Timer, public Socket
{
private:
int SendTo(const unsigned char *buf, size_t len) const;
int RecvFrom(char *buf, size_t size, sockaddrs &addrs) const;
typedef std::multimap<Anope::string, ResourceRecord, ci::less> cache_map;
cache_map cache;
sockaddrs addrs;
public:
DNSSocket();
virtual ~DNSSocket();
std::deque<DNSPacket *> packets;
std::map<unsigned short, DNSRequest *> requests;
static const int DNSPort = 53;
DNSManager(const Anope::string &nameserver, int port);
~DNSManager();
bool ProcessRead();
bool ProcessWrite();
};
/** DNS manager, manages the connection and all requests
*/
class DNSManager : public Timer
{
std::multimap<Anope::string, DNSRecord *> cache;
public:
DNSSocket *sock;
/** Add a record to the dns cache
* @param r The record
*/
void AddCache(DNSQuery &r);
std::deque<DNSPacket *> packets;
std::map<short, DNSRequest *> requests;
static const int DNSPort = 53;
DNSManager();
~DNSManager();
void AddCache(DNSRecord *rr);
/** 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);
void Tick(time_t now);
/** Tick this timer, used to clear the DNS cache.
*/
void Tick(time_t now) anope_override;
/** Cleanup all pending DNS queries for a module
* @param mod The module
*/
void Cleanup(Module *mod);
};
/** A DNS timeout, one is made for every DNS request to detect timeouts
*/
class DNSRequestTimeout : public Timer
{
DNSRequest *request;
public:
bool done;
DNSRequestTimeout(DNSRequest *r, time_t timeout);
~DNSRequestTimeout();
void Tick(time_t);
/** 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
+41 -139
View File
@@ -1,5 +1,5 @@
/*
* Copyright (C) 2008-2010 Anope Team <team@anope.org>
* Copyright (C) 2008-2012 Anope Team <team@anope.org>
*
* Please read COPYING and README for further details.
*/
@@ -7,61 +7,26 @@
#ifndef EXTENSIBLE_H
#define EXTENSIBLE_H
#include "hashcomp.h"
#include "anope.h"
/** Dummy base class we use to cast everything to/from
*/
class ExtensibleItemBase
class CoreExport ExtensibleItem
{
public:
ExtensibleItemBase() { }
virtual ~ExtensibleItemBase() { }
ExtensibleItem();
virtual ~ExtensibleItem();
virtual void OnDelete();
};
/** Class used to represent an extensible item that doesn't hold a pointer
*/
template<typename T> class ExtensibleItemRegular : public ExtensibleItemBase
template<typename T> struct CoreExport ExtensibleItemClass : T, ExtensibleItem
{
protected:
T Item;
public:
ExtensibleItemRegular(T item) : Item(item) { }
virtual ~ExtensibleItemRegular() { }
T GetItem() const { return Item; }
ExtensibleItemClass(const T& t) : T(t) { }
};
/** Class used to represent an extensible item that holds a pointer
*/
template<typename T> class ExtensibleItemPointer : public ExtensibleItemBase
{
protected:
T *Item;
public:
ExtensibleItemPointer(T *item) : Item(item) { }
virtual ~ExtensibleItemPointer() { delete Item; }
T *GetItem() const { return Item; }
};
/** Class used to represent an extensible item that holds a pointer to an arrray
*/
template<typename T> class ExtensibleItemPointerArray : public ExtensibleItemBase
{
protected:
T *Item;
public:
ExtensibleItemPointerArray(T *item) : Item(item) { }
virtual ~ExtensibleItemPointerArray() { delete [] Item; }
T *GetItem() const { return Item; }
};
class CoreExport Extensible : public Base
class CoreExport Extensible
{
private:
typedef std::map<Anope::string, ExtensibleItemBase *> extensible_map;
extensible_map Extension_Items;
typedef Anope::map<ExtensibleItem *> extensible_map;
extensible_map extension_items;
public:
/** Default constructor, does nothing
@@ -73,9 +38,10 @@ class CoreExport Extensible : public Base
*/
virtual ~Extensible()
{
for (extensible_map::iterator it = Extension_Items.begin(), it_end = Extension_Items.end(); it != it_end; ++it)
delete it->second;
Extension_Items.clear();
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.
@@ -89,26 +55,10 @@ class CoreExport Extensible : public Base
*
* @return Returns true on success, false if otherwise
*/
void Extend(const Anope::string &key, ExtensibleItemBase *p)
void Extend(const Anope::string &key, ExtensibleItem *p)
{
this->Shrink(key);
this->Extension_Items.insert(std::make_pair(key, p));
}
/** Extend an Extensible class.
*
* @param key The key parameter is an arbitary string which identifies the extension data
*
* You must provide a key to store the data as via the parameter 'key', this single-parameter
* version takes no 'data' parameter, this is used purely for boolean values.
* The key will be inserted into the map with a NULL 'data' pointer. If the key already exists
* then 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)
{
this->Extend(key, new ExtensibleItemRegular<char *>(NULL));
this->extension_items[key] = p;
}
/** Shrink an Extensible class.
@@ -121,91 +71,43 @@ class CoreExport Extensible : public Base
*/
bool Shrink(const Anope::string &key)
{
extensible_map::iterator it = this->Extension_Items.find(key);
if (it != this->Extension_Items.end())
extensible_map::iterator it = this->extension_items.find(key);
if (it != this->extension_items.end())
{
delete it->second;
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);
return this->extension_items.erase(key) > 0;
}
return false;
}
/** Get an extension item that is not a pointer.
*
* @param key The key parameter is an arbitary string which identifies the extension data
* @param p If you provide a non-existent key, this value will be 0. Otherwise a copy to the item you requested will be placed in this templated parameter.
* @return Returns true if the item was found and false if it was nor, regardless of wether 'p' is NULL. This allows you to store NULL values in Extensible.
*/
template<typename T> bool GetExtRegular(const Anope::string &key, T &p)
{
extensible_map::iterator it = this->Extension_Items.find(key);
if (it != this->Extension_Items.end())
{
p = debug_cast<ExtensibleItemRegular<T> *>(it->second)->GetItem();
return true;
}
return false;
}
/** Get an extension item that is a pointer.
*
* @param key The key parameter is an arbitary string which identifies the extension data
* * @param p If you provide a non-existent key, this value will be NULL. Otherwise a pointer to the item you requested will be placed in this templated parameter.
* @return Returns true if the item was found and false if it was nor, regardless of wether 'p' is NULL. This allows you to store NULL values in Extensible.
*/
template<typename T> bool GetExtPointer(const Anope::string &key, T *&p)
{
extensible_map::iterator it = this->Extension_Items.find(key);
if (it != this->Extension_Items.end())
{
p = debug_cast<ExtensibleItemPointer<T> *>(it->second)->GetItem();
return true;
}
p = NULL;
return false;
}
/** Get an extension item that is a pointer to an array
*
* @param key The key parameter is an arbitary string which identifies the extension data
* @param p If you provide a non-existent key, this value will be NULL. Otherwise a pointer to the item you requested will be placed in this templated parameter.
* @return Returns true if the item was found and false if it was nor, regardless of wether 'p' is NULL. This allows you to store NULL values in Extensible.
*/
template<typename T> bool GetExtArray(const Anope::string &key, T *&p)
{
extensible_map::iterator it = this->Extension_Items.find(key);
if (it != this->Extension_Items.end())
{
p = debug_cast<ExtensibleItemPointerArray<T> *>(it->second)->GetItem();
return true;
}
p = NULL;
return false;
}
/** Get an extension item.
*
* @param key The key parameter is an arbitary string which identifies the extension data
* @return Returns true if the item was found and false if it was not.
*
* This single-parameter version only checks if the key exists, it does nothing with
* the 'data' field and is probably only useful in conjunction with the single-parameter
* version of Extend().
* @return The item found
*/
bool GetExt(const Anope::string &key)
template<typename T> T GetExt(const Anope::string &key) const
{
return this->Extension_Items.find(key) != this->Extension_Items.end();
extensible_map::const_iterator it = this->extension_items.find(key);
if (it != this->extension_items.end())
return anope_dynamic_reinterpret_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) const
{
return this->extension_items.count(key) > 0;
}
/** Get a list of all extension items names.
@@ -213,9 +115,9 @@ class CoreExport Extensible : public Base
* @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)
void GetExtList(std::deque<Anope::string> &list) const
{
for (extensible_map::iterator it = Extension_Items.begin(), it_end = Extension_Items.end(); it != it_end; ++it)
for (extensible_map::const_iterator it = extension_items.begin(), it_end = extension_items.end(); it != it_end; ++it)
list.push_back(it->first);
}
};
+53 -296
View File
@@ -1,9 +1,9 @@
/* Prototypes and external variable declarations.
*
* (C) 2003-2010 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.
@@ -12,159 +12,42 @@
#ifndef EXTERN_H
#define EXTERN_H
#include "modes.h"
#define E extern CoreExport
#define EI extern DllExport
#include "hashcomp.h"
E void ModuleRunTimeDirCleanUp();
/* IRC Variables */
E IRCDVar *ircd;
E IRCDProto *ircdproto;
/**** actions.c ****/
E void kill_user(const Anope::string &source, const Anope::string &user, const Anope::string &reason);
E bool bad_password(User *u);
E void common_unban(ChannelInfo *ci, const Anope::string &nick);
E BotInfo *BotServ;
E BotInfo *ChanServ;
E BotInfo *Global;
E BotInfo *HostServ;
E BotInfo *MemoServ;
E BotInfo *NickServ;
E BotInfo *OperServ;
/**** botserv.c ****/
E void get_botserv_stats(long *nrec, long *memuse);
E void bs_init();
E void botchanmsgs(User *u, ChannelInfo *ci, const Anope::string &buf);
E BotInfo *findbot(const Anope::string &nick);
/** Finds a pseudoclient, given a UID. Useful for TS6 protocol modules.
* @param uid The UID to search for
* @return The pseudoclient structure, or NULL if one could not be found
*/
E Anope::string normalizeBuffer(const Anope::string &);
E void bot_raw_ban(User *requester, ChannelInfo *ci, const Anope::string &nick, const Anope::string &reason);
E void bot_raw_kick(User *requester, ChannelInfo *ci, const Anope::string &nick, const Anope::string &reason);
E void bot_raw_mode(User *requester, ChannelInfo *ci, const Anope::string &mode, const Anope::string &nick);
/**** channels.c ****/
E void get_channel_stats(long *nrec, long *memuse);
E Channel *findchan(const Anope::string &chan);
E User *nc_on_chan(Channel *c, const NickCore *nc);
E int get_access_level(ChannelInfo *ci, NickAlias *na);
E int get_access_level(ChannelInfo *ci, NickCore *nc);
E Anope::string get_xop_level(int level);
E void do_cmode(const Anope::string &source, const Anope::string &channel, const Anope::string &modes, const Anope::string &ts);
E void do_join(const Anope::string &source, const Anope::string &channels, const Anope::string &ts);
E void do_kick(const Anope::string &source, const Anope::string &channel, const Anope::string &users, const Anope::string &reason);
E void do_part(const Anope::string &source, const Anope::string &channels, const Anope::string &reason);
E void MassChannelModes(BotInfo *bi, const Anope::string &modes);
E void chan_set_correct_modes(User *user, Channel *c, int give_modes);
E Entry *entry_create(const Anope::string &mask);
E Entry *entry_add(EList *list, const Anope::string &mask);
E void entry_delete(EList *list, Entry *e);
E EList *list_create();
E int entry_match(Entry *e, const Anope::string &nick, const Anope::string &user, const Anope::string &host, uint32 ip);
E int entry_match_mask(Entry *e, const Anope::string &mask, uint32 ip);
E Entry *elist_match(EList *list, const Anope::string &nick, const Anope::string &user, const Anope::string &host, uint32 ip);
E Entry *elist_match_mask(EList *list, const Anope::string &mask, uint32 ip);
E Entry *elist_match_user(EList *list, User *u);
E Entry *elist_find_mask(EList *list, const Anope::string &mask);
E long get_memuse(EList *list);
inline BotInfo *whosends(ChannelInfo *ci)
{
if (!ci || !ci->bi || !ci->c || !ci->botflags.HasFlag(BS_SYMBIOSIS) || !ci->c->FindUser(ci->bi))
return ChanServ ? ChanServ : NickServ;
return ci->bi;
}
/**** chanserv.c ****/
E LevelInfo levelinfo[];
E void get_chanserv_stats(long *nrec, long *memuse);
E void reset_levels(ChannelInfo *ci);
E void cs_init();
E void expire_chans();
E void cs_remove_nick(const NickCore *nc);
E void check_modes(Channel *c);
E int check_valid_admin(User *user, Channel *chan, int servermode);
E int check_valid_op(User *user, Channel *chan, int servermode);
E ChannelInfo *cs_findchan(const Anope::string &chan);
E int check_access(User *user, ChannelInfo *ci, int what);
E bool IsFounder(User *user, ChannelInfo *ci);
E int get_access(User *user, ChannelInfo *ci);
E void update_cs_lastseen(User *user, ChannelInfo *ci);
E int get_idealban(ChannelInfo *ci, User *u, Anope::string &ret);
E AutoKick *is_stuck(ChannelInfo *ci, const Anope::string &mask);
E void stick_mask(ChannelInfo *ci, AutoKick *akick);
E void stick_all(ChannelInfo *ci);
E int levelinfo_maxwidth;
E Anope::string get_mlock_modes(ChannelInfo *ci, int complete);
/**** config.c ****/
E Anope::string services_conf;
E ServerConfig *Config;
/* hostserv.c */
E void do_on_id(User *u);
E void HostServSyncVhosts(NickAlias *na);
E void common_unban(const ChannelInfo *ci, User *u, bool full = false);
/**** encrypt.c ****/
E int enc_encrypt(const Anope::string &src, Anope::string &dest);
E int enc_decrypt(const Anope::string &src, Anope::string &dest);
E int enc_check_password(Anope::string &plaintext, Anope::string &password);
/**** hostserv.c ****/
E void get_hostserv_stats(long *nrec, long *memuse);
E void hostserv_init();
E void enc_encrypt(const Anope::string &src, Anope::string &dest);
E bool enc_decrypt(const Anope::string &src, Anope::string &dest);
/**** init.c ****/
E Anope::string conf_dir, db_dir, modules_dir, locale_dir, log_dir;
E void introduce_user(const Anope::string &user);
E bool GetCommandLineArgument(const Anope::string &name, char shortname = 0);
E bool GetCommandLineArgument(const Anope::string &name, char shortname, Anope::string &param);
E bool AtTerm();
E void Fork();
E void Init(int ac, char **av);
E Uplink *uplink_server;
/**** ircd.c ****/
E void pmodule_ircd_proto(IRCDProto *);
E void pmodule_ircd_var(IRCDVar *ircdvar);
/**** language.cpp ****/
E std::vector<Anope::string> languages;
E void InitLanguages();
E const Anope::string GetString(const Anope::string &language, LanguageString string);
E const Anope::string GetString(LanguageString string);
E const Anope::string GetString(const NickCore *nc, LanguageString string);
E const Anope::string GetString(const User *u, LanguageString string);
E const Anope::string GetString(const char *domain, Anope::string language, const Anope::string &string);
E Anope::string language_strings[LANG_STRING_COUNT];
E void SyntaxError(BotInfo *bi, User *u, const Anope::string &command, LanguageString message);
/*** logger.cpp ***/
E void InitLogChannels(ServerConfig *);
E std::vector<Anope::string> languages;
E std::vector<Anope::string> domains;
E void InitLanguages();
E const char *translate(const char *string);
E const char *translate(User *u, const char *string);
E const char *translate(const NickCore *nc, const char *string);
E const char *anope_gettext(const char *lang, const char *string);
/**** main.c ****/
@@ -178,202 +61,76 @@ E bool noexpire;
E bool protocoldebug;
E bool quitting;
E bool shutting_down;
E int return_code;
E bool restarting;
E Anope::string quitmsg;
E bool save_data;
E time_t start_time;
E ConnectionSocket *UplinkSock;
E int CurrentUplink;
E void save_databases();
E void expire_all();
E void sighandler(int signum);
E void do_restart_services();
/* The socket to our uplink */
class CoreExport UplinkSocket : public ConnectionSocket
{
public:
UplinkSocket(bool ipv6 = false);
/**** messages.cpp ****/
virtual ~UplinkSocket();
bool Read(const Anope::string &buf);
};
/**** memoserv.c ****/
E void ms_init();
E void rsend_notify(User *u, Memo *m, const Anope::string &chan);
E void check_memos(User *u);
E MemoInfo *getmemoinfo(const Anope::string &name, bool &ischan, bool &isforbid);
E void memo_send(User *u, const Anope::string &name, const Anope::string &text, int z);
/**** messages.c ****/
E int m_nickcoll(const Anope::string &user);
E int m_away(const Anope::string &source, const Anope::string &msg);
E int m_kill(const Anope::string &nick, const Anope::string &msg);
E int m_motd(const Anope::string &source);
E int m_privmsg(const Anope::string &source, const Anope::string &receiver, const Anope::string &message);
E bool m_stats(const Anope::string &source, const std::vector<Anope::string> &);
E int m_whois(const Anope::string &source, const Anope::string &who);
E bool m_time(const Anope::string &source, const std::vector<Anope::string> &);
E bool m_version(const Anope::string &source, const std::vector<Anope::string> &);
E void init_core_messages();
E bool OnStats(const Anope::string &source, const std::vector<Anope::string> &);
E bool OnTime(const Anope::string &source, const std::vector<Anope::string> &);
E bool OnVersion(const Anope::string &source, const std::vector<Anope::string> &);
E bool On436(const Anope::string &, const std::vector<Anope::string> &);
E bool OnAway(const Anope::string &, const std::vector<Anope::string> &);
E bool OnJoin(const Anope::string &, const std::vector<Anope::string> &);
E bool OnKick(const Anope::string &, const std::vector<Anope::string> &);
E bool OnKill(const Anope::string &, const std::vector<Anope::string> &);
E bool OnMode(const Anope::string &, const std::vector<Anope::string> &);
E bool OnNick(const Anope::string &, const std::vector<Anope::string> &);
E bool OnUID(const Anope::string &, const std::vector<Anope::string> &);
E bool OnPart(const Anope::string &, const std::vector<Anope::string> &);
E bool OnPing(const Anope::string &, const std::vector<Anope::string> &);
E bool OnPrivmsg(const Anope::string &, const std::vector<Anope::string> &);
E bool OnQuit(const Anope::string &, const std::vector<Anope::string> &);
E bool OnServer(const Anope::string &, const std::vector<Anope::string> &);
E bool OnSQuit(const Anope::string &, const std::vector<Anope::string> &);
E bool OnTopic(const Anope::string &, const std::vector<Anope::string> &);
E bool OnWhois(const Anope::string &, const std::vector<Anope::string> &);
E bool OnCapab(const Anope::string &, const std::vector<Anope::string> &);
E bool OnSJoin(const Anope::string &, const std::vector<Anope::string> &);
E bool OnError(const Anope::string &, const std::vector<Anope::string> &);
/**** misc.c ****/
E bool IsFile(const Anope::string &filename);
E int toupper(char);
E int tolower(char);
E char *strscpy(char *d, const char *s, size_t len);
#ifndef HAVE_STRLCPY
E size_t strlcpy(char *, const char *, size_t);
#endif
#ifndef HAVE_STRLCAT
E size_t strlcat(char *, const char *, size_t);
#endif
E char *strnrepl(char *s, int32 size, const char *old, const char *nstr);
E const char *merge_args(int argc, char **argv);
E const char *merge_args(int argc, const char **argv);
E time_t dotime(const Anope::string &s);
E Anope::string duration(const NickCore *nc, time_t seconds);
E Anope::string duration(const time_t &seconds, const NickCore *nc = NULL);
E Anope::string expire_left(const NickCore *nc, time_t expires);
E Anope::string do_strftime(const time_t &t);
E bool doValidHost(const Anope::string &host, int type);
E bool isValidHost(const Anope::string &host, int type);
E bool isvalidchar(char c);
E Anope::string do_strftime(const time_t &t, const NickCore *nc = NULL, bool short_output = false);
E bool IsValidIdent(const Anope::string &ident);
E bool IsValidHost(const Anope::string &host);
E Anope::string myStrGetToken(const Anope::string &str, char dilim, int token_number);
E Anope::string myStrGetTokenRemainder(const Anope::string &str, char dilim, int token_number);
E int myNumToken(const Anope::string &str, char dilim);
E void EnforceQlinedNick(const Anope::string &nick, const Anope::string &killer);
E bool nickIsServices(const Anope::string &nick, bool bot);
E void add_entropy_userkeys();
E void rand_init();
E unsigned char getrandom8();
E uint16 getrandom16();
E uint32 getrandom32();
E char *str_signed(unsigned char *str);
E std::list<Anope::string> BuildStringList(const Anope::string &, char = ' ');
E std::vector<Anope::string> BuildStringVector(const Anope::string &, char = ' ');
E uint32 cidr_to_netmask(uint16 cidr);
E uint16 netmask_to_cidr(uint32 mask);
E bool str_is_wildcard(const Anope::string &str);
E bool str_is_pure_wildcard(const Anope::string &str);
E bool str_is_cidr(const Anope::string &str, uint32 &ip, uint32 &mask, Anope::string &host);
E Anope::string normalizeBuffer(const Anope::string &);
/**** modes.cpp ****/
/* Number of generic modes we support */
E unsigned GenericChannelModes, GenericUserModes;
E Flags<ChannelModeName, CMODE_END * 2> DefMLockOn;
E Flags<ChannelModeName, CMODE_END * 2> DefMLockOff;
E std::map<ChannelModeName, Anope::string> DefMLockParams;
E std::multimap<ChannelModeName, ModeLock *> def_mode_locks;
E void SetDefaultMLock(ServerConfig *config);
/**** nickserv.c ****/
E NickRequest *findrequestnick(const Anope::string &nick);
E void get_aliases_stats(long &count, long &mem);
E void get_core_stats(long &count, long &mem);
E void change_core_display(NickCore *nc);
E void change_core_display(NickCore *nc, const Anope::string &newdisplay);
E int do_setmodes(User *u);
E void ns_init();
E int validate_user(User *u);
E void expire_nicks();
E void expire_requests();
E NickAlias *findnick(const Anope::string &nick);
E NickCore *findcore(const Anope::string &nick);
E bool is_on_access(const User *u, const NickCore *nc);
/**** process.c ****/
E int allow_ignore;
E std::list<IgnoreData *> ignore;
E void add_ignore(const Anope::string &nick, time_t delta);
E IgnoreData *get_ignore(const Anope::string &nick);
E int delete_ignore(const Anope::string &nick);
E int clear_ignores();
E void process(const Anope::string &buf);
/**** send.c ****/
E void send_cmd(const Anope::string &source, const char *fmt, ...) FORMAT(printf, 2, 3);
E void notice_server(const Anope::string &source, const Server *s, const char *fmt, ...) FORMAT(printf, 3, 4);
/**** sessions.c ****/
E std::vector<Exception *> exceptions;
E void get_session_stats(long &count, long &mem);
E void get_exception_stats(long &count, long &mem);
E void add_session(const Anope::string &nick, const Anope::string &host, const Anope::string &hostip);
E void del_session(const Anope::string &host);
E void expire_exceptions();
E Session *findsession(const Anope::string &host);
E Exception *find_host_exception(const Anope::string &host);
E Exception *find_hostip_exception(const Anope::string &host, const Anope::string &hostip);
E int exception_add(User *u, const Anope::string &mask, unsigned limit, const Anope::string &reason, const Anope::string &who, time_t expires);
/**** sockets.cpp ****/
E SocketEngineBase *SocketEngine;
E int32 TotalRead;
E int32 TotalWritten;
E SocketIO normalSocketIO;
/**** users.c ****/
E int32 opcnt;
E uint32 maxusercnt, usercnt;
E time_t maxusertime;
E void get_user_stats(long &count, long &mem);
E User *finduser(const Anope::string &nick);
E Anope::string TS6SID;
E User *do_nick(const Anope::string &source, const Anope::string &nick, const Anope::string &username, const Anope::string &host, const Anope::string &server, const Anope::string &realname, time_t ts, const Anope::string &ip, const Anope::string &vhost, const Anope::string &uid, const Anope::string &modes);
E void do_umode(const Anope::string &, const Anope::string &user, const Anope::string &modes);
E void do_quit(const Anope::string &source, const Anope::string &reason);
E void do_kill(const Anope::string &source, const Anope::string &reason);
E bool is_oper(User *user);
E bool is_excepted(ChannelInfo *ci, User *user);
E bool is_excepted_mask(ChannelInfo *ci, const Anope::string &mask);
E bool match_usermask(const Anope::string &mask, User *user);
E Anope::string create_mask(User *u);
/******************************************************************************/
E void b64_encode(const Anope::string &src, Anope::string &target);
E void b64_decode(const Anope::string &src, Anope::string &target);
#ifdef _WIN32
E Anope::string GetWindowsVersion();
E bool SupportedWindowsVersion();
#endif
#endif /* EXTERN_H */
+42 -359
View File
@@ -1,6 +1,6 @@
/*
* Copyright (C) 2002-2010 InspIRCd Development Team
* Copyright (C) 2009-2010 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.
*
@@ -13,176 +13,57 @@
#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>
#include <locale>
#include "services.h"
namespace Anope
{
class string;
}
#ifndef _WIN32
# if defined(__GNUC__) && __GNUC__ >= 4
/* GCC4+ has deprecated hash_map and uses tr1. But of course, uses a different include to MSVC. */
# include <tr1/unordered_map>
# define unordered_map_namespace std::tr1
# else /* GCC ver < 4 */
# include <ext/hash_map>
/* Oddball linux namespace for hash_map */
# define unordered_map_namespace __gnu_cxx
# define unordered_map hash_map
# endif
#else
# if _MSC_VER >= 1600
/* MSVC 2010+ has tr1. Though MSVC and GCC use different includes! */
# include <unordered_map>
# define unordered_map_namespace std::tr1
# else
# include <hash_map>
# define unordered_map_namespace
template<typename Key, typename Type, typename Compare, typename Unused = void>
class unordered_map : public stdext::hash_map<Key, Type, Compare>
{
public:
unordered_map() : hash_map() { }
};
# endif
#endif
extern std::locale casemap;
/*******************************************************
* 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.
*******************************************************/
/** 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 */
};
/** Case insensitive map, ASCII rules.
* That is;
* [ != {, but A == a.
*/
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 */
};
/** The irc namespace contains a number of helper classes.
*/
namespace irc
{
/** 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.
*/
struct irc_char_traits : std::char_traits<char>
template<typename charT>
class ascii_ctype : public std::ctype<charT>
{
/** 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);
public:
charT do_toupper(charT c) const anope_override
{
if (c >= 'a' && c <= 'z')
return c - 32;
else
return c;
}
/** 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);
charT do_tolower(charT c) const anope_override
{
if (c >= 'A' && c <= 'Z')
return c + 32;
else
return c;
}
};
/** This typedef declares irc::string based upon irc_char_traits.
*/
typedef std::basic_string<char, irc_char_traits, std::allocator<char> > string;
/** Used to hash irc::strings for unordered_map
*/
struct hash
template<typename charT>
class rfc1459_ctype : public ascii_ctype<charT>
{
/* VS 2008 specific code */
enum { bucket_size = 4, min_buckets = 8 };
bool operator()(const Anope::string &s1, const Anope::string &s2) const;
/* End VS 2008 specific code */
public:
charT do_toupper(charT c) const anope_override
{
if (c == '{' || c == '}' || c == '|')
return c - 32;
else
return ascii_ctype<charT>::do_toupper(c);
}
/** Hash an irc::string for unordered_map
* @param s The string
* @return A hash value for the string
*/
size_t operator()(const irc::string &s) const;
size_t operator()(const Anope::string &s) const;
charT do_tolower(charT c) const anope_override
{
if (c == '[' || c == ']' || c == '\\')
return c + 32;
else
return ascii_ctype<charT>::do_tolower(c);
}
};
}
@@ -239,60 +120,8 @@ namespace ci
*/
typedef std::basic_string<char, ci_char_traits, std::allocator<char> > string;
/** Used to hash ci::strings for unordered_map
*/
struct hash
struct CoreExport less
{
/* VS 2008 specific code */
enum { bucket_size = 4, min_buckets = 8 };
bool operator()(const Anope::string &s1, const Anope::string &s2) const;
/* End VS 2008 specific code */
/** Hash a ci::string for unordered_map
* @param s The string
* @return A hash value for the string
*/
size_t operator()(const ci::string &s) const;
size_t operator()(const Anope::string &s) const;
};
}
namespace std
{
/** An overload for std::equal_to<ci::string> that uses Anope::string, passed for the fourth temmplate
* argument for unordered_map
*/
template<> struct CoreExport equal_to<ci::string>
{
public:
/** Compare two Anope::strings as ci::strings
* @paarm s1 The first string
* @param s2 The second string
* @return true if they are equal
*/
bool operator()(const Anope::string &s1, const Anope::string &s2) const;
};
/** An overload for std::equal_to<irc::string> that uses Anope::string, passed for the fourth template
* argument for unorderd_map
*/
template<> struct CoreExport equal_to<irc::string>
{
public:
/** Compare two Anope::strings as irc::strings
* @param s1 The first string
* @param s2 The second string
* @return true if they are equal
*/
bool operator()(const Anope::string &s1, const Anope::string &s2) const;
};
/** An overload for std::less<ci::string> that uses Anope::string, passed for the third template argument
* to std::map and std::multimap
*/
template<> struct CoreExport less<ci::string>
{
public:
/** Compare two Anope::strings as ci::strings and find which one is less
* @param s1 The first string
* @param s2 The second string
@@ -300,64 +129,6 @@ namespace std
*/
bool operator()(const Anope::string &s1, const Anope::string &s2) const;
};
/** An overload for std;:less<irc::string> that uses Anope::string, passed for the third tempalte argument
* to std::map and std::multimap
*/
template<> struct CoreExport less<irc::string>
{
public:
/** 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;
};
}
/* Define operators for using >> and << with irc::string to an ostream on an istream. */
/* This was endless fun. No. Really. */
/* It was also the first core change Ommeh made, if anyone cares */
/** Operator >> for irc::string
*/
inline std::istream &operator>>(std::istream &is, irc::string &str)
{
std::string tmp;
is >> tmp;
str = tmp.c_str();
return is;
}
/** Operator >> for ci::string
*/
inline std::istream &operator>>(std::istream &is, ci::string &str)
{
std::string tmp;
is >> tmp;
str = tmp.c_str();
return is;
}
/* 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
@@ -380,46 +151,6 @@ 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
*
@@ -440,40 +171,6 @@ 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)
@@ -481,25 +178,11 @@ 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
/* Define operators != for std::string to ci::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 -1551
View File
File diff suppressed because it is too large Load Diff
+94
View File
@@ -0,0 +1,94 @@
/*
*
* (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 LISTS_H
#define LISTS_H
#include "services.h"
#include "anope.h"
/** A class to process numbered lists (passed to most DEL/LIST/VIEW commands).
* The function HandleNumber is called for every number in the list. Note that
* if descending is true it gets called in descending order. This is so deleting
* the index passed to the function from an array will not cause the other indexes
* passed to the function to be incorrect. This keeps us from having to have an
* 'in use' flag on everything.
*/
class CoreExport NumberList
{
private:
bool is_valid;
std::set<unsigned> numbers;
bool desc;
public:
/** Processes a numbered list
* @param list The list
* @param descending True to make HandleNumber get called with numbers in descending order
*/
NumberList(const Anope::string &list, bool descending);
/** Destructor, does nothing
*/
virtual ~NumberList();
/** Should be called after the constructors are done running. This calls the callbacks.
*/
void Process();
/** Called with a number from the list
* @param Number The number
*/
virtual void HandleNumber(unsigned Number);
/** Called when there is an error with the numbered list
* Return false to immediatly stop processing the list and return
* This is all done before we start calling HandleNumber, so no numbers will have been processed yet
* @param list The list
* @return false to stop processing
*/
virtual bool InvalidRange(const Anope::string &list);
};
/** This class handles formatting LIST/VIEW replies.
*/
class CoreExport ListFormatter
{
public:
typedef std::map<Anope::string, Anope::string> ListEntry;
private:
std::vector<Anope::string> columns;
std::vector<ListEntry> entries;
public:
ListFormatter &addColumn(const Anope::string &name);
void addEntry(const ListEntry &entry);
bool isEmpty() const;
void Process(std::vector<Anope::string> &);
};
/** This class handles formatting INFO replies
*/
class CoreExport InfoFormatter
{
NickCore *nc;
std::vector<std::pair<Anope::string, Anope::string> > replies;
unsigned longest;
public:
InfoFormatter(NickCore *nc);
void Process(std::vector<Anope::string> &);
Anope::string &operator[](const Anope::string &key);
};
#endif // LISTS_H
+34 -14
View File
@@ -1,6 +1,21 @@
/*
*
* (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 LOGGER_H
#define LOGGER_H
#include "anope.h"
#include "defs.h"
enum LogType
{
LOG_ADMIN,
@@ -29,34 +44,44 @@ struct LogFile
Anope::string GetName() const;
};
class CoreExport Log
{
public:
BotInfo *bi;
const BotInfo *bi;
Anope::string nick;
const User *u;
const NickCore *nc;
Command *c;
Channel *chan;
const 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 = Global);
Log(LogType type = LOG_NORMAL, const Anope::string &category = "", const BotInfo *bi = NULL);
/* LOG_COMMAND/OVERRIDE/ADMIN */
Log(LogType type, User *u, Command *c, ChannelInfo *ci = NULL);
Log(LogType type, const CommandSource &source, Command *c, const ChannelInfo *ci = NULL);
/* LOG_CHANNEL */
Log(User *u, Channel *c, const Anope::string &category = "");
Log(const User *u, Channel *c, const Anope::string &category = "");
/* LOG_USER */
explicit Log(User *u, const Anope::string &category = "");
explicit Log(const User *u, const Anope::string &category = "", const BotInfo *bi = NULL);
/* LOG_SERVER */
Log(Server *s, const Anope::string &category = "");
explicit Log(Server *s, const Anope::string &category = "", const BotInfo *bi = NULL);
Log(BotInfo *b, const Anope::string &category = "");
explicit Log(const BotInfo *b, const Anope::string &category = "");
~Log();
Anope::string BuildPrefix() const;
template<typename T> Log &operator<<(T val)
{
this->buf << val;
@@ -71,7 +96,6 @@ class CoreExport LogInfo
std::map<Anope::string, LogFile *> Logfiles;
std::list<Anope::string> Sources;
int LogAge;
bool Inhabit;
std::list<Anope::string> Admin;
std::list<Anope::string> Override;
std::list<Anope::string> Commands;
@@ -82,17 +106,13 @@ class CoreExport LogInfo
bool RawIO;
bool Debug;
LogInfo(int logage, bool inhabit, 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(std::list<Anope::string> &list, const Anope::string &type) const;
std::list<Anope::string> &GetList(LogType type);
bool HasType(LogType Type);
bool HasType(LogType ltype, const Anope::string &type) const;
void ProcessMessage(const Log *l);
};
+16 -2
View File
@@ -1,10 +1,24 @@
/*
*
* (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 MAIL_H
#define MAIL_H
#include "anope.h"
#include "threadengine.h"
#include "serialize.h"
extern CoreExport bool Mail(User *u, NickRequest *nr, BotInfo *service, const Anope::string &subject, const Anope::string &message);
extern CoreExport bool Mail(User *u, NickCore *nc, BotInfo *service, const Anope::string &subject, const Anope::string &message);
extern CoreExport bool Mail(User *u, NickCore *nc, const 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);
+65
View File
@@ -0,0 +1,65 @@
/*
*
* (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 MEMO_H
#define MEMO_H
#include "anope.h"
#include "serialize.h"
/** Memo Flags
*/
enum MemoFlag
{
/* Memo is unread */
MF_UNREAD,
/* Sender requests a receipt */
MF_RECEIPT
};
const Anope::string MemoFlagStrings[] = {
"MF_UNREAD", "MF_RECEIPT", ""
};
/* Memo info structures. Since both nicknames and channels can have memos,
* we encapsulate memo data in a MemoList to make it easier to handle. */
class CoreExport Memo : public Flags<MemoFlag>, public Serializable
{
public:
Memo();
const Anope::string serialize_name() const anope_override;
Serialize::Data serialize() const anope_override;
static Serializable* unserialize(Serializable *obj, Serialize::Data &);
Anope::string owner;
time_t time; /* When it was sent */
Anope::string sender;
Anope::string text;
};
struct CoreExport MemoInfo
{
int16_t memomax;
serialize_checker<std::vector<Memo *> > memos;
std::vector<Anope::string> ignores;
MemoInfo();
Memo *GetMemo(unsigned index) const;
unsigned GetIndex(Memo *m) const;
void Del(unsigned index);
void Del(Memo *m);
bool HasIgnore(User *u);
};
#endif // MEMO_H
+150 -129
View File
@@ -1,7 +1,7 @@
/* Mode support
*
* Copyright (C) 2008-2010 Adam <Adam@anope.org>
* Copyright (C) 2008-2010 Anope Team <team@anope.org>
* 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.
*/
@@ -9,6 +9,9 @@
#ifndef MODES_H
#define MODES_H
#include "anope.h"
#include "base.h"
/** All of the valid user mode names
*/
enum UserModeName
@@ -16,14 +19,26 @@ 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_WHOIS, UMODE_ADMIN, UMODE_DEAF,
UMODE_REGPRIV, UMODE_PROTECTED, UMODE_NOCTCP, 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_CALLERID, UMODE_COMMONCHANS,
UMODE_HIDDEN, UMODE_STRIPCOLOR, UMODE_INVISIBLE_OPER,
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_NOCTCP", "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
@@ -36,6 +51,7 @@ enum ChannelModeName
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,
@@ -48,6 +64,29 @@ enum ChannelModeName
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
@@ -79,8 +118,6 @@ class CoreExport Mode : public Base
public:
/* Class of mode this is */
ModeClass Class;
/* The mode name, as a string */
Anope::string NameAsString;
/* Mode char for this */
char ModeChar;
/* Type of mode this is */
@@ -88,11 +125,10 @@ class CoreExport Mode : public Base
/** Default constructor
* @param mClass The type of mode this is
* @param mNameAsString The mode name as a string
* @param modeChar The mode char
* @param type The mode type
*/
Mode(ModeClass mClass, const Anope::string &mNameAsString, char modeChar, ModeType type);
Mode(ModeClass mClass, char modeChar, ModeType type);
/** Default destructor
*/
@@ -109,14 +145,17 @@ class CoreExport UserMode : public Mode
/** Default constructor
* @param nName The mode name
* @param mNameAsString The mode name as a string
* @param modeChar The mode char
*/
UserMode(UserModeName mName, const Anope::string &mNameAsString, char modeChar);
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
@@ -124,10 +163,9 @@ class CoreExport UserModeParam : public UserMode
public:
/** Default constructor
* @param mName The mode name
* @param mNameAsString The mode name as a string
* @param modeChar The mode char
*/
UserModeParam(UserModeName mName, const Anope::string &mNameAsString, char modeChar);
UserModeParam(UserModeName mName, char modeChar);
/** Check if the param is valid
* @param value The param
@@ -146,10 +184,9 @@ class CoreExport ChannelMode : public Mode
/** Default constructor
* @param mName The mode name
* @param mNameAsString The mode name as a string
* @param modeChar The mode char
*/
ChannelMode(ChannelModeName mName, const Anope::string &mNameAsString, char modeChar);
ChannelMode(ChannelModeName mName, char modeChar);
/** Default destructor
*/
@@ -159,7 +196,11 @@ class CoreExport ChannelMode : public Mode
* 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 { return true; }
virtual bool CanSet(User *u) const;
/** Returns the mode name as a string
*/
const Anope::string NameAsString();
};
@@ -170,10 +211,9 @@ class CoreExport ChannelModeList : public ChannelMode
public:
/** Default constructor
* @param mName The mode name
* @param mNameAsString The mode name as a string
* @param modeChar The mode char
*/
ChannelModeList(ChannelModeName mName, const Anope::string &mNameAsString, char modeChar);
ChannelModeList(ChannelModeName mName, char modeChar);
/** Default destructor
*/
@@ -185,18 +225,25 @@ class CoreExport ChannelModeList : public ChannelMode
*/
virtual bool IsValid(const Anope::string &mask) const { return true; }
/** Add the mask to the channel, this should be overridden
/** 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(const 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 AddMask(Channel *chan, const Anope::string &mask) { }
virtual void OnAdd(Channel *chan, const Anope::string &mask) { }
/** Delete the mask from the channel, this should be overridden
/** Called when a mask is removed from a channel
* @param chan The channel
* @param mask The mask
*/
virtual void DelMask(Channel *chan, const Anope::string &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
@@ -206,11 +253,10 @@ class CoreExport ChannelModeParam : public ChannelMode
public:
/** Default constructor
* @param mName The mode name
* @param mNameAsString The mode name as a string
* @param modeChar The mode char
* @param MinusArg true if this mode sends no arg when unsetting
*/
ChannelModeParam(ChannelModeName mName, const Anope::string &mNameAsString, char modeChar, bool MinusArg = false);
ChannelModeParam(ChannelModeName mName, char modeChar, bool MinusArg = false);
/** Default destructor
*/
@@ -233,75 +279,32 @@ 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 mNameAsString The mode name as a string
* @param modeChar The mode char
* @param mSymbol The symbol for the mode, eg @ % +
* @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, const Anope::string &mNameAsString, char modeChar, char mSymbol);
ChannelModeStatus(ChannelModeName mName, char modeChar, char mSymbol, unsigned short mLevel = 0);
/** Default destructor
*/
virtual ~ChannelModeStatus();
};
/** Channel mode +b
*/
class CoreExport ChannelModeBan : public ChannelModeList
{
public:
ChannelModeBan(char modeChar) : ChannelModeList(CMODE_BAN, "CMODE_BAN", modeChar) { }
void AddMask(Channel *chan, const Anope::string &mask);
void DelMask(Channel *chan, const Anope::string &mask);
};
/** Channel mode +e
*/
class CoreExport ChannelModeExcept : public ChannelModeList
{
public:
ChannelModeExcept(char modeChar) : ChannelModeList(CMODE_EXCEPT, "CMODE_EXCEPT", modeChar) { }
void AddMask(Channel *chan, const Anope::string &mask);
void DelMask(Channel *chan, const Anope::string &mask);
};
/** Channel mode +I
*/
class CoreExport ChannelModeInvex : public ChannelModeList
{
public:
ChannelModeInvex(char modeChar) : ChannelModeList(CMODE_INVITEOVERRIDE, "CMODE_INVITEOVERRIDE", modeChar) { }
void AddMask(Channel *chan, const Anope::string &mask);
void DelMask(Channel *chan, const Anope::string &mask);
};
/** Channel mode +k (key)
*/
class CoreExport ChannelModeKey : public ChannelModeParam
{
public:
ChannelModeKey(char modeChar) : ChannelModeParam(CMODE_KEY, "CMODE_KEY", modeChar) { }
ChannelModeKey(char modeChar) : ChannelModeParam(CMODE_KEY, modeChar) { }
bool IsValid(const Anope::string &value) const;
};
/** Channel mode +f (flood)
*/
class ChannelModeFlood : public ChannelModeParam
{
public:
ChannelModeFlood(char modeChar, bool minusNoArg = false) : ChannelModeParam(CMODE_FLOOD, "CMODE_FLOOD", modeChar, minusNoArg) { }
bool IsValid(const Anope::string &value) const;
bool IsValid(const Anope::string &value) const anope_override;
};
/** This class is used for channel mode +A (Admin only)
@@ -310,10 +313,10 @@ class ChannelModeFlood : public ChannelModeParam
class CoreExport ChannelModeAdmin : public ChannelMode
{
public:
ChannelModeAdmin(char modeChar) : ChannelMode(CMODE_ADMINONLY, "CMODE_ADMINONLY", modeChar) { }
ChannelModeAdmin(char modeChar) : ChannelMode(CMODE_ADMINONLY, modeChar) { }
/* Opers only */
bool CanSet(User *u) const;
bool CanSet(User *u) const anope_override;
};
/** This class is used for channel mode +O (Opers only)
@@ -322,10 +325,10 @@ class CoreExport ChannelModeAdmin : public ChannelMode
class CoreExport ChannelModeOper : public ChannelMode
{
public:
ChannelModeOper(char modeChar) : ChannelMode(CMODE_OPERONLY, "CMODE_OPERONLY", modeChar) { }
ChannelModeOper(char modeChar) : ChannelMode(CMODE_OPERONLY, modeChar) { }
/* Opers only */
bool CanSet(User *u) const;
bool CanSet(User *u) const anope_override;
};
/** This class is used for channel mode +r (registered channel)
@@ -334,29 +337,21 @@ class CoreExport ChannelModeOper : public ChannelMode
class CoreExport ChannelModeRegistered : public ChannelMode
{
public:
ChannelModeRegistered(char modeChar) : ChannelMode(CMODE_REGISTERED, "CMODE_REGISTERED", modeChar) { }
ChannelModeRegistered(char modeChar) : ChannelMode(CMODE_REGISTERED, modeChar) { }
/* No one mlocks +r */
bool CanSet(User *u) const;
};
enum StackerType
{
ST_CHANNEL,
ST_USER
bool CanSet(User *u) const anope_override;
};
class StackerInfo
{
public:
/* Modes to be added */
std::list<std::pair<Base *, Anope::string> > AddModes;
std::list<std::pair<Mode *, 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;
std::list<std::pair<Mode *, Anope::string> > DelModes;
/* Bot this is sent from */
BotInfo *bi;
const BotInfo *bi;
/** Add a mode to this object
* @param mode The mode
@@ -376,13 +371,8 @@ class CoreExport ModeManager
{
protected:
/* 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);
static std::map<User *, StackerInfo *> UserStackerObjects;
static std::map<Channel *, StackerInfo *> ChannelStackerObjects;
/** 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
@@ -390,29 +380,10 @@ class CoreExport ModeManager
*/
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::map<Anope::string, Mode *> Modes;
/* User modes */
static std::map<char, UserMode *> UserModesByChar;
static std::map<UserModeName, UserMode *> UserModesByName;
/* Channel modes */
static std::map<char, ChannelMode *> ChannelModesByChar;
static std::map<ChannelModeName, ChannelMode *> ChannelModesByName;
/* Although there are two different maps for UserModes and ChannelModes
* the pointers in each are the same. This is used to increase efficiency.
*/
/* 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
@@ -450,11 +421,17 @@ class CoreExport ModeManager
*/
static UserMode *FindUserModeByName(UserModeName Name);
/** Find a mode by name
/** Find channel mode by string
* @param name The mode name
* @return The mode
*/
static Mode *FindModeByName(const Anope::string &name);
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
@@ -469,7 +446,7 @@ class CoreExport ModeManager
* @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 = "");
static void StackerAdd(const 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
@@ -478,16 +455,60 @@ class CoreExport ModeManager
* @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 = "");
static void StackerAdd(const 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);
static void StackerDel(User *u);
static void StackerDel(Channel *c);
};
/** Entry flags
*/
enum EntryType
{
ENTRYTYPE_NONE,
ENTRYTYPE_CIDR,
ENTRYTYPE_NICK_WILD,
ENTRYTYPE_NICK,
ENTRYTYPE_USER_WILD,
ENTRYTYPE_USER,
ENTRYTYPE_HOST_WILD,
ENTRYTYPE_HOST
};
/** Represents a mask set on a channel (b/e/I)
*/
class CoreExport Entry : public Flags<EntryType>
{
ChannelModeName modename;
public:
unsigned char cidr_len;
Anope::string mask;
Anope::string nick, user, host;
/** Constructor
* @param _host A full nick!ident@host/cidr mask
* @param mode What mode this host is for - can be CMODE_BEGIN for unknown/no mode
*/
Entry(ChannelModeName mode, const Anope::string &_host);
/** Get the banned mask for this entry
* @return The mask
*/
const Anope::string GetMask();
/** Check if this entry matches a user
* @param u The user
* @param full True to match against a users real host and IP
* @return true on match
*/
bool Matches(const User *u, bool full = false) const;
};
#endif // MODES_H
+50 -2
View File
@@ -1,9 +1,57 @@
/*
*
* (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 MODULE_H
#define MODULE_H
#include "services.h"
/* Just include everything for now */
#include "access.h"
#include "account.h"
#include "anope.h"
#include "base.h"
#include "bots.h"
#include "botserv.h"
#include "channels.h"
#include "commands.h"
#include "config.h"
#include "dns.h"
#include "extensible.h"
#include "extern.h"
#include "hashcomp.h"
#include "language.h"
#include "lists.h"
#include "logger.h"
#include "mail.h"
#include "memo.h"
#include "modes.h"
#include "modules.h"
#define _(x) x
#include "oper.h"
#include "opertype.h"
#include "protocol.h"
#include "regexpr.h"
#include "regchannel.h"
#include "serialize.h"
#include "servers.h"
#include "service.h"
#include "services.h"
#include "signals.h"
#include "socketengine.h"
#include "sockets.h"
#include "threadengine.h"
#include "timers.h"
#include "uplink.h"
#include "users.h"
#include "global.h"
#include "memoserv.h"
#include "nickserv.h"
#endif // MODULE_H
+319 -465
View File
File diff suppressed because it is too large Load Diff
+178
View File
@@ -0,0 +1,178 @@
/* 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
#include "serialize.h"
#include "service.h"
class CoreExport XLine : public Serializable
{
void InitRegex();
public:
Anope::string Mask;
Regex *regex;
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 = "");
~XLine();
Anope::string GetNick() const;
Anope::string GetUser() const;
Anope::string GetHost() const;
Anope::string GetReal() const;
Anope::string GetReason() const;
bool HasNickOrReal() const;
bool IsRegex() const;
const Anope::string serialize_name() const anope_override;
Serialize::Data serialize() const anope_override;
static Serializable* unserialize(Serializable *obj, Serialize::Data &data);
};
class CoreExport XLineManager : public Service
{
char type;
/* List of XLines in this XLineManager */
serialize_checker<std::vector<XLine *> > XLines;
/* Akills can have the same IDs, sometimes */
static serialize_checker<std::multimap<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 void 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 source The source adding the mask.
* @param mask The mask
* @param expires When the mask would expire
* @param reason the reason
* @return true if the mask can be added
*/
bool CanAdd(CommandSource &source, const Anope::string &mask, time_t expires, const Anope::string &reason);
/** 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.
*/
XLine *CheckAllXLines(User *u);
/** Check a user against an xline
* @param u The user
* @param x The xline
*/
virtual bool Check(User *u, const XLine *x) = 0;
/** 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) = 0;
/** Called when an XLine expires
* @param x The xline
*/
virtual void OnExpire(const 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
-232
View File
@@ -1,232 +0,0 @@
/* OperServ support
*
* (C) 2008-2010 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
*/
#ifndef OPERSERV_H
#define OPERSERV_H
extern CoreExport std::vector<NewsItem *> News;
extern CoreExport std::vector<std::bitset<32> > DefCon;
extern CoreExport bool DefConModesSet;
extern CoreExport Flags<ChannelModeName, CMODE_END * 2> DefConModesOn;
extern CoreExport Flags<ChannelModeName, CMODE_END * 2> DefConModesOff;
extern CoreExport std::map<ChannelModeName, Anope::string> DefConModesOnParams;
class XLineManager;
extern CoreExport XLineManager *SGLine;
extern CoreExport XLineManager *SZLine;
extern CoreExport XLineManager *SQLine;
extern CoreExport XLineManager *SNLine;
extern CoreExport bool SetDefConParam(ChannelModeName, const Anope::string &);
extern CoreExport bool GetDefConParam(ChannelModeName, Anope::string &);
extern CoreExport void UnsetDefConParam(ChannelModeName);
extern CoreExport bool CheckDefCon(DefconLevel Level);
extern CoreExport bool CheckDefCon(int level, DefconLevel Level);
extern CoreExport void AddDefCon(int level, DefconLevel Level);
extern CoreExport void DelDefCon(int level, DefconLevel Level);
extern CoreExport void os_init();
extern CoreExport void oper_global(const Anope::string &nick, const char *fmt, ...);
extern CoreExport void server_global(const Server *s, const Anope::string &message);
enum XLineType
{
X_SNLINE,
X_SQLINE,
X_SZLINE
};
class CoreExport XLine
{
public:
Anope::string Mask;
Anope::string By;
time_t Created;
time_t Expires;
Anope::string Reason;
XLine(const Anope::string &mask, const Anope::string &reason = "");
XLine(const Anope::string &mask, const Anope::string &by, const time_t expires, const Anope::string &reason);
Anope::string GetNick() const;
Anope::string GetUser() const;
Anope::string GetHost() const;
};
class CoreExport XLineManager
{
private:
/* List of XLine managers we check users against in XLineManager::CheckAll */
static std::list<XLineManager *> XLineManagers;
protected:
/* List of XLines in this XLineManager */
std::vector<XLine *> XLines;
public:
/** Constructor
*/
XLineManager();
/** Destructor
*/
virtual ~XLineManager();
/** 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);
/** 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
*/
void Clear();
/** Add an entry to this XLine Manager
* @param bi The bot error replies should be sent from
* @param u The user adding the XLine
* @param mask The mask of the XLine
* @param expires When this should expire
* @param reaosn The reason
* @return A pointer to the XLine
*/
virtual XLine *Add(BotInfo *bi, User *u, const Anope::string &mask, time_t expires, const Anope::string &reason);
/** Delete an XLine, eg, remove it from the IRCd.
* @param x The xline
*/
virtual void Del(XLine *x);
/** 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);
};
/* This is for AKILLS */
class SGLineManager : public XLineManager
{
public:
XLine *Add(BotInfo *bi, User *u, const Anope::string &mask, time_t expires, const Anope::string &reason);
void Del(XLine *x);
void OnMatch(User *u, XLine *x);
void OnExpire(XLine *x);
};
class SNLineManager : public XLineManager
{
public:
XLine *Add(BotInfo *bi, User *u, const Anope::string &mask, time_t expires, const Anope::string &reason);
void Del(XLine *x);
void OnMatch(User *u, XLine *x);
void OnExpire(XLine *x);
};
class SQLineManager : public XLineManager
{
public:
XLine *Add(BotInfo *bi, User *u, const Anope::string &mask, time_t expires, const Anope::string &reason);
void Del(XLine *x);
void OnMatch(User *u, XLine *x);
void OnExpire(XLine *x);
static bool Check(Channel *c);
};
class SZLineManager : public XLineManager
{
public:
XLine *Add(BotInfo *bi, User *u, const Anope::string &mask, time_t expires, const Anope::string &reason);
void Del(XLine *x);
void OnMatch(User *u, XLine *x);
void OnExpire(XLine *x);
};
#endif // OPERSERV_H
+47 -3
View File
@@ -1,6 +1,6 @@
/*
* Copyright (C) 2008-2010 Robin Burchell <w00t@inspircd.org>
* Copyright (C) 2008-2010 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.
*/
@@ -8,7 +8,31 @@
#ifndef OPERTYPE_H
#define OPERTYPE_H
#include "hashcomp.h"
#include "services.h"
#include "account.h"
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
{
@@ -36,6 +60,16 @@ class CoreExport OperType
*/
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".
*/
@@ -71,6 +105,16 @@ class CoreExport 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
+155
View File
@@ -0,0 +1,155 @@
/*
*
* (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 PROTOCOL_H
#define PROTOCOL_H
#include "services.h"
#include "anope.h"
/* Protocol tweaks */
struct IRCDVar
{
const char *name; /* Name of the IRCd command */
const char *pseudoclient_mode; /* Mode used by BotServ Bots */
int svsnick; /* Supports SVSNICK */
int vhost; /* Supports vhost */
int snline; /* Supports SNline */
int sqline; /* Supports SQline */
int szline; /* Supports SZline */
int join2msg; /* Join 2 Message */
int chansqline; /* Supports Channel Sqlines */
int quitonkill; /* IRCD sends QUIT when kill */
int vident; /* Supports vidents */
int svshold; /* Supports svshold */
int tsonmode; /* Timestamp on mode changes */
int omode; /* On the fly o:lines */
int umode; /* change user modes */
int knock_needs_i; /* Check if we needed +i when setting NOKNOCK */
int svsmode_ucmode; /* Can remove User Channel Modes with SVSMODE */
int sglineenforce;
int ts6; /* ircd is TS6 */
const char *globaltldprefix; /* TLD prefix used for Global */
unsigned maxmodes; /* Max modes to send per line */
int certfp; /* IRCd sends a SSL users certificate fingerprint */
};
class CoreExport IRCDProto
{
protected:
virtual void SendSVSKillInternal(const BotInfo *, const User *, const Anope::string &);
virtual void SendModeInternal(const BotInfo *, const Channel *, const Anope::string &);
virtual void SendModeInternal(const BotInfo *, const User *, const Anope::string &) = 0;
virtual void SendKickInternal(const BotInfo *, const Channel *, const User *, const Anope::string &);
virtual void SendMessageInternal(const BotInfo *bi, const Anope::string &dest, const Anope::string &buf);
virtual void SendNoticeInternal(const BotInfo *bi, const Anope::string &dest, const Anope::string &msg);
virtual void SendPrivmsgInternal(const BotInfo *bi, const Anope::string &dest, const Anope::string &buf);
virtual void SendQuitInternal(const User *u, const Anope::string &buf);
virtual void SendPartInternal(const BotInfo *bi, const Channel *chan, const Anope::string &buf);
virtual void SendGlobopsInternal(const BotInfo *source, const Anope::string &buf);
virtual void SendCTCPInternal(const BotInfo *bi, const Anope::string &dest, const Anope::string &buf);
virtual void SendNumericInternal(int numeric, const Anope::string &dest, const Anope::string &buf);
public:
virtual ~IRCDProto() { }
virtual void SendSVSNOOP(const Server *, bool) { }
virtual void SendTopic(BotInfo *, Channel *);
virtual void SendVhostDel(User *) { }
virtual void SendAkill(User *, XLine *) = 0;
virtual void SendAkillDel(const XLine *) = 0;
virtual void SendSVSKill(const BotInfo *source, const User *user, const char *fmt, ...);
virtual void SendMode(const BotInfo *bi, const Channel *dest, const char *fmt, ...);
virtual void SendMode(const BotInfo *bi, const User *u, const char *fmt, ...);
virtual void SendClientIntroduction(const User *u) = 0;
virtual void SendKick(const BotInfo *bi, const Channel *chan, const User *user, const char *fmt, ...);
virtual void SendMessage(const BotInfo *bi, const Anope::string &dest, const char *fmt, ...);
virtual void SendNotice(const BotInfo *bi, const Anope::string &dest, const char *fmt, ...);
virtual void SendAction(const BotInfo *bi, const Anope::string &dest, const char *fmt, ...);
virtual void SendPrivmsg(const BotInfo *bi, const Anope::string &dest, const char *fmt, ...);
virtual void SendGlobalNotice(const BotInfo *bi, const Server *dest, const Anope::string &msg);
virtual void SendGlobalPrivmsg(const BotInfo *bi, const Server *desc, const Anope::string &msg);
virtual void SendQuit(const User *u, const char *fmt, ...);
virtual void SendPing(const Anope::string &servname, const Anope::string &who);
virtual void SendPong(const Anope::string &servname, const Anope::string &who);
virtual void SendJoin(const User *, Channel *, const ChannelStatus *) = 0;
virtual void SendSQLineDel(const XLine *x) { }
virtual void SendInvite(const BotInfo *bi, const Channel *c, const User *u);
virtual void SendPart(const BotInfo *bi, const Channel *chan, const char *fmt, ...);
virtual void SendGlobops(const BotInfo *source, const char *fmt, ...);
virtual void SendSQLine(User *, const XLine *x) { }
virtual void SendSquit(Server *, const Anope::string &message);
virtual void SendSVSO(const BotInfo *, const Anope::string &, const Anope::string &) { }
virtual void SendChangeBotNick(const BotInfo *bi, const Anope::string &newnick);
virtual void SendForceNickChange(const User *u, const Anope::string &newnick, time_t when);
virtual void SendVhost(User *, const Anope::string &, const Anope::string &) { }
virtual void SendConnect() = 0;
virtual void SendSVSHold(const Anope::string &) { }
virtual void SendSVSHoldDel(const Anope::string &) { }
virtual void SendSGLineDel(const XLine *) { }
virtual void SendSZLineDel(const XLine *) { }
virtual void SendSZLine(User *u, const XLine *) { }
virtual void SendSGLine(User *, const XLine *) { }
virtual void SendCTCP(const BotInfo *bi, const Anope::string &dest, const char *fmt, ...);
virtual void SendSVSJoin(const BotInfo *bi, const Anope::string &, const Anope::string &, const Anope::string &) { }
virtual void SendSWhois(const BotInfo *bi, const Anope::string &, const Anope::string &) { }
virtual void SendBOB() { }
virtual void SendEOB() { }
virtual void SendServer(const Server *) = 0;
virtual bool IsNickValid(const Anope::string &) { return true; }
virtual bool IsChannelValid(const Anope::string &);
virtual void SendNumeric(int numeric, const Anope::string &dest, const char *fmt, ...);
virtual void SendLogin(User *u) = 0;
virtual void SendLogout(User *u) = 0;
/** Send a channel creation message to the uplink.
* On most TS6 IRCds this is a SJOIN with no nick
*/
virtual void SendChannel(Channel *c) { }
};
class CoreExport IRCdMessage
{
public:
virtual bool On436(const Anope::string &, const std::vector<Anope::string> &);
virtual bool OnAway(const Anope::string &, const std::vector<Anope::string> &);
virtual bool OnJoin(const Anope::string &, const std::vector<Anope::string> &);
virtual bool OnKick(const Anope::string &, const std::vector<Anope::string> &);
virtual bool OnKill(const Anope::string &, const std::vector<Anope::string> &);
virtual bool OnMode(const Anope::string &, const std::vector<Anope::string> &) = 0;
virtual bool OnUID(const Anope::string &, const std::vector<Anope::string> &);
virtual bool OnNick(const Anope::string &, const std::vector<Anope::string> &) = 0;
virtual bool OnPart(const Anope::string &, const std::vector<Anope::string> &);
virtual bool OnPing(const Anope::string &, const std::vector<Anope::string> &);
virtual bool OnPrivmsg(const Anope::string &, const std::vector<Anope::string> &);
virtual bool OnQuit(const Anope::string &, const std::vector<Anope::string> &);
virtual bool OnServer(const Anope::string &, const std::vector<Anope::string> &) = 0;
virtual bool OnSQuit(const Anope::string &, const std::vector<Anope::string> &);
virtual bool OnTopic(const Anope::string &, const std::vector<Anope::string> &) = 0;
virtual bool OnWhois(const Anope::string &, const std::vector<Anope::string> &);
virtual bool OnCapab(const Anope::string &, const std::vector<Anope::string> &);
virtual bool OnSJoin(const Anope::string &, const std::vector<Anope::string> &) = 0;
virtual bool OnError(const Anope::string &, const std::vector<Anope::string> &);
};
extern CoreExport IRCDVar *ircd;
extern CoreExport IRCDProto *ircdproto;
extern CoreExport IRCdMessage *ircdmessage;
extern CoreExport void pmodule_ircd_proto(IRCDProto *);
extern CoreExport void pmodule_ircd_var(IRCDVar *ircdvar);
extern CoreExport void pmodule_ircd_message(IRCdMessage *message);
#endif // PROTOCOL_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
+228 -102
View File
@@ -1,6 +1,6 @@
/* Modular support
*
* (C) 2008-2010 Anope Team
* (C) 2008-2012 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
@@ -9,8 +9,18 @@
#ifndef REGCHANNEL_H
#define REGCHANNEL_H
typedef unordered_map_namespace::unordered_map<Anope::string, ChannelInfo *, ci::hash, std::equal_to<ci::string> > registered_channel_map;
extern CoreExport registered_channel_map RegisteredChannelList;
#include "botserv.h"
#include "memo.h"
#include "modes.h"
#include "extensible.h"
#include "logger.h"
#include "modules.h"
#include "serialize.h"
#include "bots.h"
typedef Anope::insensitive_map<ChannelInfo *> registered_channel_map;
extern CoreExport serialize_checker<registered_channel_map> RegisteredChannelList;
/** Flags used for the ChannelInfo class
*/
@@ -18,8 +28,6 @@ enum ChannelInfoFlag
{
CI_BEGIN,
/* ChanServ is currently holding the channel */
CI_INHABIT,
/* Retain the topic even after the channel is emptied */
CI_KEEPTOPIC,
/* Don't allow non-authorized users to be opped */
@@ -34,22 +42,16 @@ enum ChannelInfoFlag
CI_PEACE,
/* Don't allow any privileges unless a user is IDENTIFIED with NickServ */
CI_SECURE,
/* Don't allow the channel to be registered or used */
CI_FORBIDDEN,
/* Channel does not expire */
CI_NO_EXPIRE,
/* Channel memo limit may not be changed */
CI_MEMO_HARDMAX,
/* Send notice to channel on use of OP/DEOP */
CI_OPNOTICE,
/* 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,
/* Uses XOP */
CI_XOP,
/* Channel is suspended */
CI_SUSPENDED,
/* Channel still exists when emptied, this can be caused by setting a perm
@@ -58,33 +60,139 @@ enum ChannelInfoFlag
* is set or not
*/
CI_PERSIST,
/* Chanstats are enabled */
CI_STATS,
CI_END
};
class CoreExport ChannelInfo : public Extensible, public Flags<ChannelInfoFlag, CI_END>
const Anope::string ChannelInfoFlagStrings[] = {
"BEGIN", "KEEPTOPIC", "SECUREOPS", "PRIVATE", "TOPICLOCK", "RESTRICTED",
"PEACE", "SECURE", "NO_EXPIRE", "MEMO_HARDMAX", "SECUREFOUNDER",
"SIGNKICK", "SIGNKICK_LEVEL", "SUSPENDED", "PERSIST", "STATS", ""
};
/** 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;
const Anope::string serialize_name() const anope_override;
Serialize::Data serialize() const anope_override;
static Serializable* unserialize(Serializable *obj, Serialize::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:
AutoKick();
serialize_obj<ChannelInfo> ci;
/* Only one of these can be in use */
Anope::string mask;
serialize_obj<NickCore> nc;
Anope::string reason;
Anope::string creator;
time_t addtime;
time_t last_used;
const Anope::string serialize_name() const anope_override;
Serialize::Data serialize() const anope_override;
static Serializable* unserialize(Serializable *obj, Serialize::Data &);
};
struct CoreExport ModeLock : Serializable
{
public:
serialize_obj<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);
const Anope::string serialize_name() const anope_override;
Serialize::Data serialize() const anope_override;
static Serializable* unserialize(Serializable *obj, Serialize::Data &);
};
struct CoreExport LogSetting : Serializable
{
serialize_obj<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;
const Anope::string serialize_name() const anope_override;
Serialize::Data serialize() const anope_override;
static Serializable* unserialize(Serializable *obj, Serialize::Data &);
};
class CoreExport ChannelInfo : public Extensible, public Flags<ChannelInfoFlag, CI_END>, public Serializable
{
private:
std::map<ChannelModeName, Anope::string> Params; /* Map of parameters by mode name for mlock */
std::vector<ChanAccess *> access; /* List of authorized users */
std::vector<AutoKick *> akick; /* List of users to kickban */
std::vector<BadWord *> badwords; /* List of badwords */
Flags<ChannelModeName, CMODE_END * 2> mlock_on; /* Modes mlocked on */
Flags<ChannelModeName, CMODE_END * 2> mlock_off; /* Modes mlocked off */
serialize_obj<NickCore> founder; /* Channel founder */
serialize_checker<std::vector<ChanAccess *> > access; /* List of authorized users */
serialize_checker<std::vector<AutoKick *> > akick; /* List of users to kickban */
serialize_checker<std::vector<BadWord *> > badwords; /* List of badwords */
std::map<Anope::string, int16_t> levels;
public:
typedef std::multimap<ChannelModeName, ModeLock *> ModeList;
serialize_checker<ModeList> mode_locks;
serialize_checker<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(const ChannelInfo &ci);
/** Default destructor
*/
~ChannelInfo();
Anope::string name; /* Channel name */
NickCore *founder;
NickCore *successor; /* Who gets the channel if the founder nick is dropped or expires */
serialize_obj<NickCore> successor; /* Who gets the channel if the founder nick is dropped or expires */
Anope::string desc;
time_t time_registered;
@@ -94,38 +202,44 @@ class CoreExport ChannelInfo : public Extensible, public Flags<ChannelInfoFlag,
Anope::string last_topic_setter; /* Setter */
time_t last_topic_time; /* Time */
Anope::string forbidby;
Anope::string forbidreason;
int16 bantype;
int16 *levels; /* Access levels for commands */
Anope::string entry_message; /* Notice sent on entering channel */
int16_t bantype;
MemoInfo memos;
Channel *c; /* Pointer to channel record (if channel is currently in use) */
/* For BotServ */
BotInfo *bi; /* Bot used on this channel */
serialize_obj<BotInfo> bi; /* Bot used on this channel */
Flags<BotServFlag> botflags;
int16 *ttb; /* Times to ban for each kicker */
int16_t ttb[TTB_SIZE]; /* Times to ban for each 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 */
const Anope::string serialize_name() const anope_override;
Serialize::Data serialize() const anope_override;
static Serializable* unserialize(Serializable *obj, Serialize::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() const;
/** Add an entry to the channel access list
*
* @param nc The NickCore of the user that the access entry should be tied to
* @param level The channel access level the user has on the channel
* @param creator The user who added the access
* @param last_seen When the user was last seen within the channel
*
* Creates a new access list entry and inserts it into the access list.
* @param access The entry
*/
void AddAccess(NickCore *nc, int16 level, const Anope::string &creator, int32 last_seen = 0);
void AddAccess(ChanAccess *access);
/** Get an entry from the channel access list by index
*
@@ -134,17 +248,13 @@ class CoreExport ChannelInfo : public Extensible, public Flags<ChannelInfoFlag,
*
* Retrieves an entry from the access list that matches the given index.
*/
ChanAccess *GetAccess(unsigned index);
ChanAccess *GetAccess(unsigned index) const;
/** Get an entry from the channel access list by NickCore
*
* @param nc The NickCore to find within the access list vector
* @param level Optional channel access level to compare the access entries to
* @return A ChanAccess struct corresponding to the NickCore, or NULL if not found
*
* Retrieves an entry from the access list that matches the given NickCore, optionally also matching a certain level.
/** 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).
*/
ChanAccess *GetAccess(const NickCore *nc, int16 level = 0);
AccessGroup AccessFor(const User *u);
AccessGroup AccessFor(const NickCore *nc);
/** Get the size of the accss vector for this channel
* @return The access vector size
@@ -159,6 +269,14 @@ class CoreExport ChannelInfo : public Extensible, public Flags<ChannelInfoFlag,
*/
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(const ChanAccess *taccess);
/** Clear the entire channel access list
*
* Clears the entire access list by deleting every item and then clearing the vector.
@@ -172,7 +290,7 @@ class CoreExport ChannelInfo : public Extensible, public Flags<ChannelInfoFlag,
* @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);
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
@@ -181,13 +299,13 @@ class CoreExport ChannelInfo : public Extensible, public Flags<ChannelInfoFlag,
* @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);
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);
AutoKick* GetAkick(unsigned index) const;
/** Get the size of the akick vector for this channel
* @return The akick vector size
@@ -208,13 +326,13 @@ class CoreExport ChannelInfo : public Extensible, public Flags<ChannelInfoFlag,
* @param type The type (SINGLE START END)
* @return The badword
*/
BadWord *AddBadWord(const Anope::string &word, BadWordType type);
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);
BadWord* GetBadWord(unsigned index) const;
/** Get how many badwords are on this channel
* @return The number of badwords in the vector
@@ -230,57 +348,59 @@ class CoreExport ChannelInfo : public Extensible, public Flags<ChannelInfoFlag,
*/
void ClearBadWords();
/** Loads MLocked modes from extensible. This is used from database loading because Anope doesn't know what modes exist
* until after it connects to the IRCd.
*/
void LoadMLock();
/** Check if a mode is mlocked
* @param Name The mode
* @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(ChannelModeName Name, bool status) const;
bool HasMLock(ChannelMode *mode, const Anope::string &param, bool status) const;
/** Set a mlock
* @param Name The mode
* @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(ChannelModeName Name, bool status, const Anope::string &param = "");
bool SetMLock(ChannelMode *mode, bool status, const Anope::string &param = "", Anope::string setter = "", time_t created = Anope::CurTime);
/** Remove a mlock
* @param Name The mode
* @return true on success, false on failure (module blcoking)
* @param mode The mode
* @param status True for mlock on, false for mlock off
* @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(ChannelModeName Name);
bool RemoveMLock(ChannelMode *mode, bool status, const Anope::string &param = "");
/** Clear all mlocks on the channel
*/
void ClearMLock();
/** Get the number of mlocked modes for this channel
* @param status true for mlock on, false for mlock off
* @return The number of mlocked modes
/** Get all of the mlocks for this channel
* @return The mlocks
*/
size_t GetMLockCount(bool status) const;
const ModeList &GetMLock() const;
/** Get a param from the channel
* @param Name The mode
* @param Target a string to put the param into
* @return true on success
/** 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
*/
bool GetParam(ChannelModeName Name, Anope::string &Target) const;
std::pair<ModeList::iterator, ModeList::iterator> GetModeList(ChannelModeName Name);
/** Check if a mode is set and has a param
* @param Name The mode
/** Get details for a specific mlock
* @param mname The mode name
* @param An optional param to match with
* @return The MLock, if any
*/
bool HasParam(ChannelModeName Name) const;
const ModeLock *GetMLock(ChannelModeName mname, const Anope::string &param = "");
/** Clear all the params from the channel
/** Get the current mode locks as a string
* @param complete True to show mlock parameters aswell
* @return A string of mode locks, eg: +nrt
*/
void ClearParams();
Anope::string GetMLockAsString(bool complete) const;
/** Check whether a user is permitted to be on this channel
* @param u The user
@@ -293,32 +413,38 @@ class CoreExport ChannelInfo : public Extensible, public Flags<ChannelInfoFlag,
* 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) const;
/** 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 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);
};
extern CoreExport ChannelInfo *cs_findchan(const Anope::string &chan);
extern CoreExport bool IsFounder(const User *user, const ChannelInfo *ci);
extern CoreExport void update_cs_lastseen(User *user, ChannelInfo *ci);
extern CoreExport int get_idealban(const ChannelInfo *ci, User *u, Anope::string &ret);
#endif // REGCHANNEL_H
+47
View File
@@ -0,0 +1,47 @@
/*
*
* (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 REGEXPR_H
#define REGEXPR_H
#include "services.h"
#include "anope.h"
#include "service.h"
class RegexException : public CoreException
{
public:
RegexException(const Anope::string &reason = "") : CoreException(reason) { }
virtual ~RegexException() throw() { }
};
class CoreExport Regex
{
Anope::string expression;
protected:
Regex(const Anope::string &expr) : expression(expr) { }
public:
virtual ~Regex() { }
const Anope::string &GetExpression() { return expression; }
virtual bool Matches(const Anope::string &str) = 0;
};
class CoreExport RegexProvider : public Service
{
public:
RegexProvider(Module *o, const Anope::string &n) : Service(o, "Regex", n) { }
virtual Regex *Compile(const Anope::string &) = 0;
};
#endif // REGEXPR_H
+281
View File
@@ -0,0 +1,281 @@
/*
*
* (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 SERIALIZE_H
#define SERIALIZE_H
#include <sstream>
#include "anope.h"
#include "base.h"
namespace Serialize
{
enum DataType
{
DT_TEXT,
DT_INT
};
}
class CoreExport stringstream : public std::stringstream
{
private:
Serialize::DataType type;
unsigned _max;
public:
stringstream();
stringstream(const stringstream &ss);
Anope::string astr() const;
template<typename T> std::istream &operator>>(T &val)
{
std::istringstream is(this->str());
is >> val;
return *this;
}
std::istream &operator>>(Anope::string &val);
bool operator==(const stringstream &other) const;
bool operator!=(const stringstream &other) const;
stringstream &setType(Serialize::DataType t);
Serialize::DataType getType() const;
stringstream &setMax(unsigned m);
unsigned getMax() const;
};
namespace Serialize
{
typedef std::map<Anope::string, stringstream> Data;
}
extern void RegisterTypes();
class CoreExport Serializable : public virtual Base
{
private:
static std::list<Serializable *> *serializable_items;
private:
std::list<Serializable *>::iterator s_iter;
Serialize::Data last_commit;
time_t last_commit_time;
protected:
Serializable();
Serializable(const Serializable &);
virtual ~Serializable();
Serializable &operator=(const Serializable &);
public:
unsigned int id;
void destroy();
void QueueUpdate();
bool IsCached();
void UpdateCache();
bool IsTSCached();
void UpdateTS();
virtual const Anope::string serialize_name() const = 0;
virtual Serialize::Data serialize() const = 0;
static const std::list<Serializable *> &GetItems();
};
class CoreExport SerializeType
{
typedef Serializable* (*unserialize_func)(Serializable *obj, Serialize::Data &);
static std::vector<Anope::string> type_order;
static Anope::map<SerializeType *> types;
Anope::string name;
unserialize_func unserialize;
time_t timestamp;
public:
std::map<unsigned int, Serializable *> objects;
SerializeType(const Anope::string &n, unserialize_func f);
~SerializeType();
const Anope::string &GetName();
Serializable *Unserialize(Serializable *obj, Serialize::Data &data);
void Check();
time_t GetTimestamp() const;
void UpdateTimestamp();
static SerializeType *Find(const Anope::string &name);
static const std::vector<Anope::string> &GetTypeOrder();
};
template<typename T>
class serialize_checker
{
Anope::string name;
T obj;
public:
serialize_checker(const Anope::string &n) : name(n) { }
inline const T* operator->() const
{
static SerializeType *type = SerializeType::Find(this->name);
if (type)
type->Check();
return &this->obj;
}
inline T* operator->()
{
static SerializeType *type = SerializeType::Find(this->name);
if (type)
type->Check();
return &this->obj;
}
inline const T& operator*() const
{
static SerializeType *type = SerializeType::Find(this->name);
if (type)
type->Check();
return this->obj;
}
inline T& operator*()
{
static SerializeType *type = SerializeType::Find(this->name);
if (type)
type->Check();
return this->obj;
}
inline operator const T&() const
{
static SerializeType *type = SerializeType::Find(this->name);
if (type)
type->Check();
return this->obj;
}
inline operator T&()
{
static SerializeType *type = SerializeType::Find(this->name);
if (type)
type->Check();
return this->obj;
}
};
#include "modules.h"
template<typename T>
class serialize_obj : public dynamic_reference_base
{
protected:
T *ref;
public:
serialize_obj() : ref(NULL)
{
}
serialize_obj(T *obj) : ref(obj)
{
if (obj)
obj->AddReference(this);
}
serialize_obj(const serialize_obj<T> &other) : ref(other.ref)
{
if (*this)
this->ref->AddReference(this);
}
~serialize_obj()
{
if (*this)
this->ref->DelReference(this);
}
inline operator bool() const
{
if (!this->invalid)
return this->ref != NULL;
return NULL;
}
inline void operator=(T *newref)
{
if (*this)
this->ref->DelReference(this);
this->ref = newref;
this->invalid = false;
if (newref)
this->ref->AddReference(this);
}
inline operator T*() const
{
if (!this->invalid)
{
if (this->ref)
{
FOREACH_MOD(I_OnSerializePtrAssign, OnSerializePtrAssign(this->ref));
this->ref->QueueUpdate();
}
return this->ref;
}
return NULL;
}
inline T* operator*() const
{
if (!this->invalid)
{
if (this->ref)
{
FOREACH_MOD(I_OnSerializePtrAssign, OnSerializePtrAssign(this->ref));
this->ref->QueueUpdate();
}
return this->ref;
}
return NULL;
}
inline T* operator->() const
{
if (!this->invalid)
{
if (this->ref)
{
FOREACH_MOD(I_OnSerializePtrAssign, OnSerializePtrAssign(this->ref));
this->ref->QueueUpdate();
}
return this->ref;
}
return NULL;
}
};
#endif // SERIALIZE_H
+19 -58
View File
@@ -1,66 +1,18 @@
#ifndef SERVERS_H
#define SERVERS_H
#include "services.h"
#include "anope.h"
/* Anope */
extern CoreExport Server *Me;
extern CoreExport void CapabParse(const std::vector<Anope::string> &params);
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 void do_squit(const Anope::string &source, const Anope::string &server);
extern CoreExport const char *ts6_uid_retrieve();
extern CoreExport const char *ts6_sid_retrieve();
extern CoreExport const Anope::string ts6_uid_retrieve();
extern CoreExport const Anope::string ts6_sid_retrieve();
/* Types of capab
*/
enum CapabType
{
CAPAB_BEGIN,
CAPAB_NOQUIT,
CAPAB_TSMODE,
CAPAB_UNCONNECT,
CAPAB_NICKIP,
CAPAB_NSJOIN,
CAPAB_ZIP,
CAPAB_BURST,
CAPAB_TS3,
CAPAB_TS5,
CAPAB_DKEY,
CAPAB_DOZIP,
CAPAB_DODKEY,
CAPAB_QS,
CAPAB_SCS,
CAPAB_PT4,
CAPAB_UID,
CAPAB_KNOCK,
CAPAB_CLIENT,
CAPAB_IPV6,
CAPAB_SSJ5,
CAPAB_SN2,
CAPAB_VHOST,
CAPAB_TOKEN,
CAPAB_SSJ3,
CAPAB_NICK2,
CAPAB_VL,
CAPAB_TLKEXT,
CAPAB_CHANMODE,
CAPAB_SJB64,
CAPAB_NICKCHARS,
CAPAB_END
};
/* CAPAB stuffs */
struct CapabInfo
{
Anope::string Token;
CapabType Flag;
};
extern CoreExport Flags<CapabType, CAPAB_END> Capab;
extern CoreExport CapabInfo Capab_Info[];
extern CoreExport std::set<Anope::string> Capab;
/** Flags set on servers
*/
@@ -73,6 +25,8 @@ enum ServerFlag
SERVER_JUPED
};
const Anope::string ServerFlagStrings[] = { "SERVER_NONE", "SERVER_SYNCING", "SERVER_JUPED", "" };
/** Class representing a server
*/
class CoreExport Server : public Flags<ServerFlag>
@@ -134,6 +88,11 @@ class CoreExport Server : public Flags<ServerFlag>
*/
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
*/
@@ -159,10 +118,6 @@ class CoreExport Server : public Flags<ServerFlag>
*/
void DelLink(Server *s);
/** Remove all links from this server
*/
void ClearLinks();
/** Finish syncing this server and optionally all links to it
* @param SyncLinks True to sync the links for this server too (if any)
*/
@@ -178,6 +133,12 @@ class CoreExport Server : public Flags<ServerFlag>
*/
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(const 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
+110
View File
@@ -0,0 +1,110 @@
/*
* (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 SERVICE_H
#define SERVICE_H
#include "services.h"
#include "anope.h"
#include "modules.h"
class CoreExport Service : public virtual Base
{
static Anope::map<Anope::map<Service *> > services;
public:
static Service *FindService(const Anope::string &t, const Anope::string &n)
{
Anope::map<Anope::map<Service *> >::iterator it = services.find(t);
if (it != services.end())
{
Anope::map<Service *>::iterator it2 = it->second.find(n);
if (it2 != it->second.end())
return it2->second;
}
return NULL;
}
static std::vector<Anope::string> GetServiceKeys(const Anope::string &t)
{
std::vector<Anope::string> keys;
Anope::map<Anope::map<Service *> >::iterator it = services.find(t);
if (it != services.end())
for (Anope::map<Service *>::iterator it2 = it->second.begin(); it2 != it->second.end(); ++it2)
keys.push_back(it2->first);
return keys;
}
Module *owner;
Anope::string type;
Anope::string name;
Service(Module *o, const Anope::string &t, const Anope::string &n) : owner(o), type(t), name(n)
{
this->Register();
}
virtual ~Service()
{
this->Unregister();
}
void Register()
{
Anope::map<Service *> &smap = services[this->type];
if (smap.find(this->name) != smap.end())
throw ModuleException("Service " + this->type + " with name " + this->name + " already exists");
smap[this->name] = this;
}
void Unregister()
{
Anope::map<Service *> &smap = services[this->type];
smap.erase(this->name);
if (smap.empty())
services.erase(this->type);
}
};
template<typename T>
class service_reference : public dynamic_reference<T>
{
Anope::string type;
Anope::string name;
public:
service_reference(const Anope::string &t, const Anope::string &n) : dynamic_reference<T>(NULL), type(t), name(n)
{
}
inline void operator=(const Anope::string &n)
{
this->name = n;
}
operator bool() anope_override
{
if (this->invalid)
{
this->invalid = false;
this->ref = NULL;
}
if (!this->ref)
{
this->ref = static_cast<T *>(Service::FindService(this->type, this->name));
if (this->ref)
this->ref->AddReference(this);
}
return this->ref;
}
};
#endif // SERVICE_H
+25 -994
View File
File diff suppressed because it is too large Load Diff
+49
View File
@@ -0,0 +1,49 @@
/*
*
* (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 SIGNAL_H
#define SIGNAL_H
#include <signal.h>
#include "sockets.h"
/** Represents a signal handler
*/
class Signal : public Pipe
{
static std::vector<Signal *> SignalHandlers;
static void SignalHandler(int signal);
struct sigaction action, old;
public:
int signal;
/** Constructor
* @param s The signal to listen for
*/
Signal(int s);
~Signal();
/**
* Called when the signal is received.
* Note this is not *immediatly* called when the signal is received,
* but it is saved and called at a later time when we are not doing something
* important. This is always called on the main thread, even on systems that
* spawn threads for signals, like Windows.
*/
virtual void OnNotify() anope_override = 0;
};
#endif
+15 -17
View File
@@ -1,9 +1,9 @@
/*
*
* (C) 2003-2010 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.
@@ -12,47 +12,45 @@
#ifndef SOCKETENGINE_H
#define SOCKETENGINE_H
class CoreExport SocketEngineBase
#include "services.h"
class CoreExport SocketEngine
{
public:
#ifdef _WIN32
/* Windows crap */
WSADATA wsa;
#endif
/* Map of sockets */
std::map<int, Socket *> Sockets;
static std::map<int, Socket *> Sockets;
/** Default constructor
/** Called to initialize the socket engine
*/
SocketEngineBase();
static void Init();
/** Default destructor
/** Called to shutdown the socket engine
*/
virtual ~SocketEngineBase();
static void Shutdown();
/** Add a socket to the internal list
* @param s The socket
*/
virtual void AddSocket(Socket *s) { }
static void AddSocket(Socket *s);
/** Delete a socket from the internal list
* @param s The socket
*/
virtual void DelSocket(Socket *s) { }
static void DelSocket(Socket *s);
/** Mark a socket as writeable
* @param s The socket
*/
virtual void MarkWritable(Socket *s) { }
static void MarkWritable(Socket *s);
/** Unmark a socket as writeable
* @param s The socket
*/
virtual void ClearWritable(Socket *s) { }
static void ClearWritable(Socket *s);
/** Read from sockets and do things
*/
virtual void Process() { }
static void Process();
};
#endif // SOCKETENGINE_H
+195 -80
View File
@@ -1,9 +1,9 @@
/*
*
* (C) 2003-2010 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.
@@ -12,16 +12,16 @@
#ifndef SOCKETS_H
#define SOCKETS_H
#ifndef _WIN32
#include <netinet/in.h>
#include <sys/types.h>
#include <sys/socket.h>
#endif
#include "anope.h"
#define NET_BUFSIZE 65535
#ifdef _WIN32
# define CloseSocket closesocket
#else
# define CloseSocket close
#endif
/** A sockaddr union used to combine IPv4 and IPv6 sockaddrs
*/
union CoreExport sockaddrs
@@ -32,7 +32,7 @@ union CoreExport sockaddrs
/** Construct the object, sets everything to 0
*/
sockaddrs();
sockaddrs(const Anope::string &address = "");
/** Memset the object to 0
*/
@@ -80,6 +80,18 @@ union CoreExport sockaddrs
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:
@@ -94,25 +106,18 @@ class SocketException : public CoreException
virtual ~SocketException() throw() { }
};
enum SocketType
{
SOCKTYPE_BASE,
SOCKTYPE_BUFFERED,
SOCKTYPE_CONNECTION,
SOCKTYPE_CLIENT,
SOCKTYPE_LISTEN
};
enum SocketFlag
{
SF_DEAD,
SF_WRITABLE
SF_WRITABLE,
SF_CONNECTING,
SF_CONNECTED,
SF_ACCEPTING,
SF_ACCEPTED
};
class Socket;
class ClientSocket;
class ListenSocket;
class ConnectionSocket;
static const Anope::string SocketFlagStrings[] = { "SF_DEAD", "SF_WRITABLE", "SF_CONNECTING", "SF_CONNECTED", "SF_ACCEPTING", "SF_ACCEPTED", "" };
class CoreExport SocketIO
{
@@ -123,34 +128,54 @@ class CoreExport SocketIO
* @param sz How much to read
* @return Number of bytes received
*/
virtual int Recv(Socket *s, char *buf, size_t sz) const;
virtual int Recv(Socket *s, char *buf, size_t sz);
/** Write something to the socket
* @param s The socket
* @param buf What to write
* @return Number of bytes written
* @param s The socket
* @param buf The data to write
* @param size The length of the data
*/
virtual int Send(Socket *s, const Anope::string &buf) const;
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 void Accept(ListenSocket *s);
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 s The socket
* @param target IP to connect to
* @param port to connect to
* @param bindip IP to bind to, if any
*/
virtual void Connect(ConnectionSocket *s, const Anope::string &target, int port, const Anope::string &bindip = "");
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, 2>
class CoreExport Socket : public Flags<SocketFlag>
{
protected:
/* Socket FD */
@@ -159,22 +184,22 @@ class CoreExport Socket : public Flags<SocketFlag, 2>
bool IPv6;
public:
/* Sockaddrs for bind() (if it's bound) */
sockaddrs bindaddr;
/* I/O functions used for this socket */
SocketIO *IO;
/* Type this socket is */
SocketType Type;
/** Empty constructor, used for things such as the pipe socket
/** Empty constructor, should not be called.
*/
Socket();
/** Default constructor
* @param sock The socket to use, 0 if we need to create our own
* @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, int type = SOCK_STREAM);
Socket(int sock, bool ipv6 = false, int type = SOCK_STREAM);
/** Default destructor
*/
@@ -200,6 +225,17 @@ class CoreExport Socket : public Flags<SocketFlag, 2>
*/
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
*/
@@ -216,28 +252,21 @@ class CoreExport Socket : public Flags<SocketFlag, 2>
virtual void ProcessError();
};
class CoreExport BufferedSocket : public Socket
class CoreExport BufferedSocket : public virtual Socket
{
protected:
/* Things to be written to the socket */
std::string WriteBuffer;
Anope::string WriteBuffer;
/* Part of a message sent from the server, but not totally received */
std::string extrabuf;
Anope::string extrabuf;
/* How much data was received from this socket */
size_t RecvLen;
int RecvLen;
public:
/** Blank constructor
/** Constructor
*/
BufferedSocket();
/** Constructor
* @param fd FD to use
* @param ipv6 true for ipv6
* @param type socket type, defaults to SOCK_STREAM
*/
BufferedSocket(int fd, bool ipv6, int type = SOCK_STREAM);
/** Default destructor
*/
virtual ~BufferedSocket();
@@ -245,12 +274,12 @@ class CoreExport BufferedSocket : public Socket
/** Called when there is something to be received for this socket
* @return true on success, false to drop this socket
*/
bool ProcessRead();
bool ProcessRead() anope_override;
/** Called when the socket is ready to be written to
* @return true on success, false to drop this socket
*/
bool ProcessWrite();
bool ProcessWrite() anope_override;
/** Called with a line received from the socket
* @param buf The line
@@ -261,26 +290,75 @@ class CoreExport BufferedSocket : public Socket
/** Write to the socket
* @param message The message
*/
protected:
virtual void Write(const char *buffer, size_t l);
public:
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
*/
size_t ReadBufferLen() const;
int ReadBufferLen() const;
/** Get the length of the write buffer
* @return The length of the write buffer
*/
size_t WriteBufferLen() const;
int WriteBufferLen() const;
};
class CoreExport BinarySocket : public virtual Socket
{
protected:
struct DataBlock
{
char *orig;
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() anope_override;
/** Called when the socket is ready to be written to
* @return true on success, false to drop this socket
*/
bool ProcessWrite() anope_override;
/** Write data to the socket
* @param buffer The data to write
* @param l The length of the data
*/
virtual void Write(const char *buffer, size_t l);
void Write(const char *message, ...);
void Write(const Anope::string &message);
/** 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
{
protected:
/* Sockaddrs for bindip/port */
sockaddrs listenaddrs;
public:
/** Constructor
* @param bindip The IP to bind to
@@ -303,48 +381,81 @@ class CoreExport ListenSocket : public Socket
* @param addr The sockaddr for where the connection came from
* @return The new socket
*/
virtual ClientSocket *OnAccept(int fd, const sockaddrs &addr);
virtual ClientSocket *OnAccept(int fd, const sockaddrs &addr) = 0;
};
class CoreExport ConnectionSocket : public BufferedSocket
class CoreExport ConnectionSocket : public virtual Socket
{
public:
/* Sockaddrs for bindip (if there is one) */
sockaddrs bindaddr;
/* Sockaddrs for connection ip/port */
sockaddrs conaddr;
/** Constructor
* @param ipv6 true to use IPv6
* @param type The socket type, defaults to SOCK_STREAM
*/
ConnectionSocket(bool ipv6 = false, int type = SOCK_STREAM);
ConnectionSocket();
/** Connect the socket
* @param TargetHost The target host to connect to
* @param Port The target port to connect to
* @param BindHost The host to bind to for connecting
*/
void Connect(const Anope::string &TargetHost, int Port, const Anope::string &BindHost = "");
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() anope_override;
/** Called when there is an error for this socket
* @return true on success, false to drop this socket
*/
void ProcessError() anope_override;
/** 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 ClientSocket : public BufferedSocket
class CoreExport ClientSocket : public virtual Socket
{
public:
/* Listen socket this connection came from */
ListenSocket *LS;
/* Clients address */
sockaddrs clientaddr;
public:
/** Constructor
* @param ls Listen socket this connection is from
* @param fd New FD for this socket
* @param addr Address the connection came from
*/
ClientSocket(ListenSocket *ls, int fd, const sockaddrs &addr);
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() anope_override;
/** Called when there is an error for this socket
* @return true on success, false to drop this socket
*/
void ProcessError() anope_override;
/** 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 BufferedSocket
class CoreExport Pipe : public Socket
{
public:
/** The FD of the write pipe (if this isn't evenfd)
@@ -356,21 +467,25 @@ class CoreExport Pipe : public BufferedSocket
*/
Pipe();
/** Destructor
*/
~Pipe();
/** Called when data is to be read
*/
bool ProcessRead();
/** Function that calls OnNotify
*/
bool Read(const Anope::string &);
bool ProcessRead() anope_override;
/** Called when this pipe needs to be woken up
*/
void Notify();
/** Should be overloaded to do something useful
/** Overload to do something useful
*/
virtual void OnNotify();
virtual void OnNotify() = 0;
};
extern CoreExport uint32_t TotalRead;
extern CoreExport uint32_t TotalWritten;
extern CoreExport SocketIO normalSocketIO;
#endif // SOCKET_H
+11 -86
View File
@@ -4,109 +4,34 @@
#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_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@"
#define LIBINTL "@LIBINTL_INCLUDE@"
#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
+27 -46
View File
@@ -1,55 +1,18 @@
#ifndef THREADENGINE_H
#define THREADENGINE_H
#ifdef _WIN32
typedef HANDLE ThreadHandle;
typedef CRITICAL_SECTION MutexHandle;
typedef HANDLE CondHandle;
#else
# include <pthread.h>
typedef pthread_t ThreadHandle;
typedef pthread_mutex_t MutexHandle;
typedef pthread_cond_t CondHandle;
#endif
#include "sockets.h"
#include "extensible.h"
class ThreadEngine;
class Thread;
extern CoreExport ThreadEngine threadEngine;
class CoreExport ThreadEngine
{
public:
/* Vector of threads */
std::vector<Thread *> threads;
/** Threadengines constructor
*/
ThreadEngine();
/** Threadengines destructor
*/
~ThreadEngine();
/** Start a new thread
* @param thread A pointer to a newley allocated thread
*/
void Start(Thread *thread);
/** Check for finished threads
*/
void Process();
};
class CoreExport Thread : public Extensible
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;
bool exit;
public:
/* Handle for this thread */
ThreadHandle Handle;
pthread_t Handle;
/** Threads constructor
*/
@@ -67,21 +30,33 @@ class CoreExport Thread : public Extensible
*/
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 to run the thread, should be overloaded
/** Called when this thread should be joined to
*/
virtual void Run();
void OnNotify();
/** Called when the thread is run.
*/
virtual void Run() = 0;
};
class CoreExport Mutex
{
protected:
/* A mutex, used to keep threads in sync */
MutexHandle mutex;
pthread_mutex_t mutex;
public:
/** Constructor
@@ -99,13 +74,19 @@ class CoreExport Mutex
/** 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 */
CondHandle cond;
pthread_cond_t cond;
public:
/** Constructor
+10 -10
View File
@@ -1,9 +1,9 @@
/* Timer include stuff.
*
* (C) 2003-2010 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.
*/
@@ -11,13 +11,9 @@
#ifndef TIMERS_H
#define TIMERS_H
#include "services.h"
#include <time.h>
#include <algorithm>
#include <stdio.h>
#include <stdlib.h>
#include "anope.h"
class CoreExport Timer : public Extensible
class CoreExport Timer
{
private:
/** The time this was created
@@ -63,6 +59,11 @@ class CoreExport Timer : public Extensible
*/
bool GetRepeat() const;
/** Set the interval between ticks
* @paramt t The new interval
*/
void SetSecs(time_t t);
/** Returns the interval between ticks
* @return The interval
*/
@@ -83,9 +84,8 @@ class CoreExport Timer : public Extensible
* This will ensure timers are not missed, as well as removing timers that have
* expired and allowing the addition of new ones.
*/
class CoreExport TimerManager : public Extensible
class CoreExport TimerManager
{
protected:
/** A list of timers
*/
static std::vector<Timer *> Timers;
+48
View File
@@ -0,0 +1,48 @@
/*
*
* (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 UPLINK_H
#define UPLINK_H
#include "sockets.h"
class UplinkSocket : public ConnectionSocket, public BufferedSocket
{
public:
UplinkSocket();
~UplinkSocket();
bool Read(const Anope::string &);
void OnConnect();
void OnError(const Anope::string &);
class CoreExport Message
{
private:
const Server *server;
const User *user;
std::stringstream buffer;
public:
Message();
explicit Message(const Server *);
explicit Message(const User *);
~Message();
template<typename T> Message &operator<<(const T &val)
{
this->buffer << val;
return *this;
}
};
};
extern CoreExport UplinkSocket *UplinkSock;
#endif // UPLINK_H
+85 -36
View File
@@ -1,6 +1,6 @@
/*
* Copyright (C) 2008-2010 Robin Burchell <w00t@inspircd.org>
* Copyright (C) 2008-2010 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.
*/
@@ -8,18 +8,20 @@
#ifndef USERS_H
#define USERS_H
/* Hash maps used for users. Note UserListByUID will not be used on non-TS6 IRCds, and should never
* be assumed to have users
*/
typedef unordered_map_namespace::unordered_map<Anope::string, User *, ci::hash, std::equal_to<ci::string> > user_map;
typedef unordered_map_namespace::unordered_map<Anope::string, User *, Anope::hash> user_uid_map;
#include "anope.h"
#include "modes.h"
#include "extensible.h"
#include "serialize.h"
#include "commands.h"
#include "account.h"
extern CoreExport user_map UserListByNick;
extern CoreExport user_uid_map UserListByUID;
extern CoreExport Anope::insensitive_map<User *> UserListByNick;
extern CoreExport Anope::map<User *> UserListByUID;
class CoreExport ChannelStatus : public Flags<ChannelModeName, CMODE_END * 2>
{
public:
ChannelStatus();
Anope::string BuildCharPrefixList() const;
Anope::string BuildModePrefixList() const;
};
@@ -35,8 +37,9 @@ struct ChannelContainer
typedef std::list<ChannelContainer *> UChannelList;
/* Online user and channel data. */
class CoreExport User : public Extensible
class CoreExport User : public virtual Base, public Extensible, public CommandReply
{
protected:
Anope::string vident;
@@ -45,7 +48,7 @@ class CoreExport User : public Extensible
bool OnAccess; /* If the user is on the access list of the nick theyre on */
Flags<UserModeName, UMODE_END * 2> modes; /* Bitset of mode names the user has set on them */
std::map<UserModeName, Anope::string> Params; /* Map of user modes and the params this user has */
NickCore *nc; /* NickCore account the user is currently loggged in as */
serialize_obj<NickCore> nc; /* NickCore account the user is currently loggged in as */
public: // XXX: exposing a tiny bit too much
Anope::string nick; /* User's current nick */
@@ -54,12 +57,12 @@ class CoreExport User : public Extensible
Anope::string vhost; /* User's virtual hostname */
Anope::string chost; /* User's cloaked hostname */
Anope::string realname; /* Realname */
sockaddrs ip; /* User's IP */
Anope::string fingerprint; /* SSL Fingerprint */
Anope::string ip; /* User's IP */
Server *server; /* Server user is connected to */
time_t timestamp; /* Timestamp of the nick */
time_t my_signon; /* When did _we_ see the user? */
int isSuperAdmin; /* is SuperAdmin on or off? */
bool SuperAdmin; /* is SuperAdmin on or off? */
/* Channels the user is in */
UChannelList chans;
@@ -81,7 +84,7 @@ class CoreExport User : public Extensible
* @param shost The hostname of the user
* @param suid The unique identifier of the user.
*/
User(const Anope::string &snick, const Anope::string &sident, const Anope::string &shost, const Anope::string &suid);
User(const Anope::string &snick, const Anope::string &sident, const Anope::string &shost, const Anope::string &suid = "");
/** Destroy a user.
*/
@@ -90,7 +93,7 @@ class CoreExport User : public Extensible
/** Update the nickname of a user record accordingly, should be
* called from ircd protocol.
*/
virtual void SetNewNick(const Anope::string &newnick);
void SetNewNick(const Anope::string &newnick);
/** Update the displayed (vhost) of a user record.
* This is used (if set) instead of real host.
@@ -145,25 +148,22 @@ class CoreExport User : public Extensible
*/
Anope::string GetMask() const;
/** Get the full display mask (nick!vident@vhost/chost)
*/
Anope::string GetDisplayedMask() const;
/** Updates the realname of the user record.
*/
void SetRealname(const Anope::string &realname);
/**
* Send a message (notice or privmsg, depending on settings) to a user
* @param source Sender nick
* @param source Sender
* @param fmt Format of the Message
* @param ... any number of parameters
*/
virtual void SendMessage(const Anope::string &source, const char *fmt, ...) const;
virtual void SendMessage(const Anope::string &source, const Anope::string &msg) const;
/** Send a language string message to a user
* @param source Sender
* @param message The message num
* @param ... parameters
*/
void SendMessage(BotInfo *source, LanguageString message, ...) const;
void SendMessage(const BotInfo *source, const char *fmt, ...);
void SendMessage(const BotInfo *source, const Anope::string &msg) anope_override;
/** Collide a nick
* See the comment in users.cpp
@@ -171,6 +171,13 @@ class CoreExport User : public Extensible
*/
void Collide(NickAlias *na);
/** Identify the user to the Nick
* updates last_seen, logs the user in,
* send messages, checks for mails, set vhost and more
* @param the NickAlias
*/
void Identify(NickAlias *na);
/** Login the user to a NickCore
* @param core The account the user is useing
*/
@@ -183,20 +190,36 @@ class CoreExport User : public Extensible
/** Get the account the user is logged in using
* @return The account or NULL
*/
virtual NickCore *Account();
virtual const NickCore *Account() const;
virtual NickCore *Account() const;
/** Check if the user is identified for their nick
* @param CheckNick True to check if the user is identified to the nickname they are on too
* @return true or false
*/
virtual bool IsIdentified(bool CheckNick = false) const;
bool IsIdentified(bool CheckNick = false) const;
/** Check if the user is recognized for their nick (on the nicks access list)
* @param CheckSecure Only returns true if the user has secure off
* @return true or false
*/
virtual bool IsRecognized(bool CheckSecure = false) const;
bool IsRecognized(bool CheckSecure = true) const;
/** Check if the user is a services oper
* @return true if they are an oper
*/
bool IsServicesOper();
/** Check whether this user has access to run the given command string.
* @param cmdstr The string to check, e.g. botserv/set/private.
* @return True if this user may run the specified command, false otherwise.
*/
bool HasCommand(const Anope::string &cmdstr);
/** Check whether this user has access to the given special permission.
* @param privstr The priv to check for, e.g. users/auspex.
* @return True if this user has the specified priv, false otherwise.
*/
bool HasPriv(const Anope::string &privstr);
/** Update the last usermask stored for a user, and check to see if they are recognized
*/
@@ -224,50 +247,76 @@ class CoreExport User : public Extensible
* @param um The user mode
* @param Param Optional param for the mode
*/
void SetMode(BotInfo *bi, UserMode *um, const Anope::string &Param = "");
void SetMode(const BotInfo *bi, UserMode *um, const Anope::string &Param = "");
/** Set a mode on the user
* @param bi The client setting the mode
* @param Name The mode name
* @param Param Optional param for the mode
*/
void SetMode(BotInfo *bi, UserModeName Name, const Anope::string &Param = "");
void SetMode(const BotInfo *bi, UserModeName Name, const Anope::string &Param = "");
/** Remove a mode on the user
* @param bi The client setting the mode
* @param um The user mode
*/
void RemoveMode(BotInfo *bi, UserMode *um);
void RemoveMode(const BotInfo *bi, UserMode *um);
/** Remove a mode from the user
* @param bi The client setting the mode
* @param Name The mode name
*/
void RemoveMode(BotInfo *bi, UserModeName Name);
void RemoveMode(const BotInfo *bi, UserModeName Name);
/** Set a string of modes on a user
* @param bi The client setting the modes
* @param umodes The modes
*/
void SetModes(BotInfo *bi, const char *umodes, ...);
void SetModes(const BotInfo *bi, const char *umodes, ...);
/** Set a string of modes on a user internally
* @param umodes The modes
*/
void SetModesInternal(const char *umodes, ...);
/** Get modes set for this user.
* @return A string of modes set on the user
*/
Anope::string GetModes() const;
/** Find the channel container for Channel c that the user is on
* This is preferred over using FindUser in Channel, as there are usually more users in a channel
* than channels a user is in
* @param c The channel
* @return The channel container, or NULL
*/
ChannelContainer *FindChannel(const Channel *c);
ChannelContainer *FindChannel(const Channel *c) const;
/** Check if the user is protected from kicks and negative mode changes
* @return true or false
*/
bool IsProtected() const;
/** Kill a user
* @param source The user/server doing the kill
* @param reason The reason for the kill
*/
void Kill(const Anope::string &source, const Anope::string &reason);
};
extern CoreExport int32_t opcnt;
extern CoreExport uint32_t maxusercnt, usercnt;
extern CoreExport time_t maxusertime;
extern CoreExport User *finduser(const Anope::string &nick);
extern CoreExport User *do_nick(const Anope::string &source, const Anope::string &nick, const Anope::string &username, const Anope::string &host, const Anope::string &server, const Anope::string &realname, time_t ts, const Anope::string &ip, const Anope::string &vhost, const Anope::string &uid, const Anope::string &modes);
extern CoreExport void do_umode(const Anope::string &user, const Anope::string &modes);
extern CoreExport void do_kill(User *user, const Anope::string &reason);
extern CoreExport bool matches_list(Channel *c, User *user, ChannelModeName mode);
extern CoreExport Anope::string create_mask(User *u);
#endif // USERS_H
+48 -15
View File
@@ -1,9 +1,9 @@
/* Build bumper
*
* (C) 2003-2010 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.
@@ -15,21 +15,54 @@
#include <sstream>
#include <list>
static std::string get_git_hash(const std::string &git_dir)
{
std::fstream fd;
std::string filebuf;
fd.open((git_dir + "/HEAD").c_str(), std::ios::in);
if (!fd.is_open())
return "";
if (!getline(fd, filebuf) || filebuf.find("ref: ") != 0)
{
fd.close();
return "";
}
fd.close();
filebuf = filebuf.substr(5);
fd.open((git_dir + "/" + filebuf).c_str(), std::ios::in);
if (!fd.is_open())
return "";
if (!getline(fd, filebuf))
{
fd.close();
return "";
}
fd.close();
return "g" + filebuf.substr(0, 7);
}
int main(int argc, char *argv[])
{
if (argc < 3)
{
std::cout << "Syntax: " << argv[0] << " <src/version.sh> <version.h>" << std::endl;
std::cerr << "Syntax: " << argv[0] << " <base> <version.h>" << std::endl;
return 1;
}
std::string version_sh = std::string(argv[1]) + "/src/version.sh";
std::string git_dir = std::string(argv[1]) + "/.git";
std::fstream fd;
fd.clear();
fd.open(argv[1], std::ios::in);
fd.open(version_sh.c_str(), std::ios::in);
if (!fd.is_open())
{
std::cout << "Error: Unable to open src/version.sh for reading: " << argv[1] << std::endl;
std::cerr << "Error: Unable to open src/version.sh for reading: " << version_sh << std::endl;
return 1;
}
@@ -41,7 +74,7 @@ int main(int argc, char *argv[])
{
size_t eq = filebuf.find('=');
std::string type = filebuf.substr(8, 5);
std::string type = filebuf.substr(0, eq);
std::string value = filebuf.substr(eq + 2, filebuf.length() - eq - 3);
versions.push_back(std::make_pair(type, value));
}
@@ -49,18 +82,19 @@ int main(int argc, char *argv[])
fd.close();
std::string git_version = get_git_hash(git_dir);
if (!git_version.empty())
versions.push_back(std::make_pair("VERSION_GIT", git_version));
fd.clear();
fd.open(argv[2], std::ios::in);
std::string version_build = "#define VERSION_BUILD 1";
std::string build = "#define BUILD 1";
if (fd.is_open())
{
while (getline(fd, filebuf))
{
if (!filebuf.find("#define VERSION_BUILD"))
version_build = filebuf;
else if (!filebuf.find("#define BUILD"))
if (!filebuf.find("#define BUILD"))
{
size_t tab = filebuf.find(' ');
@@ -80,7 +114,7 @@ int main(int argc, char *argv[])
if (!fd.is_open())
{
std::cout << "Error: Unable to include/version.h for writing: " << argv[2] << std::endl;
std::cerr << "Error: Unable to include/version.h for writing: " << argv[2] << std::endl;
return 1;
}
@@ -88,13 +122,12 @@ int main(int argc, char *argv[])
for (std::list<std::pair<std::string, std::string> >::iterator it = versions.begin(), it_end = versions.end(); it != it_end; ++it)
{
if (it->first == "EXTRA")
fd << "#define VERSION_EXTRA \"" << it->second << "\"" << std::endl;
if (it->first == "VERSION_EXTRA" || it->first == "VERSION_GIT")
fd << "#define " << it->first << " \"" << it->second << "\"" << std::endl;
else
fd << "#define VERSION_" << it->first << " " << it->second << std::endl;
fd << "#define " << it->first << " " << it->second << std::endl;
}
fd << version_build << std::endl;
fd << build << std::endl;
fd.close();
-11981
View File
File diff suppressed because it is too large Load Diff
-11840
View File
File diff suppressed because it is too large Load Diff
-9235
View File
File diff suppressed because it is too large Load Diff
-36
View File
@@ -1,36 +0,0 @@
# German translations for cs_appendtopic
# German messages for cs_appendtopic
# Copyright (C) 2010 Anope Team
# This file is distributed under the same license as Anope IRC Services
# Adam <adam@anope.org>, 2010.
#
msgid ""
msgstr ""
"Project-Id-Version: Anope\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-09-25 20:53-0400\n"
"PO-Revision-Date: 2010-09-25 20:57-0400\n"
"Last-Translator: Adam <adam@anope.org>\n"
"Language-Team: German\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-1\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: cs_appendtopic.cpp:105
msgid " APPENDTOPIC Add text to a channels topic"
msgstr " APPENDTOPIC Fügt einen Text zu einem Channel-Topic hinzu."
#: cs_appendtopic.cpp:89 cs_appendtopic.cpp:100
msgid "Syntax: APPENDTOPIC channel text"
msgstr "Syntax: APPENDTOPIC Channel Text"
#: cs_appendtopic.cpp:91
msgid ""
"This command allows users to append text to a currently set\n"
"channel topic. When TOPICLOCK is on, the topic is updated and\n"
"the new, updated topic is locked."
msgstr ""
"Dieser Befehl erlaubt Benutzern, einen Text zu dem vorhandenen Channel-Topic\n"
"hinzuzufügen. Wenn TOPICLOCK gesetzt ist, wird das Topic aktualisiert\n"
"und das neue, aktualisierte Topic wird gesperrt."
-36
View File
@@ -1,36 +0,0 @@
# Italian translations for cs_appendtopic
# Traduzioni italiane per il cs_appendtopic
# Copyright (C) 2010 Anope Team
# This file is distributed under the same license as Anope IRC Services
# Adam <adam@anope.org>, 2010.
#
msgid ""
msgstr ""
"Project-Id-Version: Anope\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-09-25 20:53-0400\n"
"PO-Revision-Date: 2010-09-25 21:04-0400\n"
"Last-Translator: Adam <adam@anope.org>\n"
"Language-Team: Italian\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-1\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: cs_appendtopic.cpp:105
msgid " APPENDTOPIC Add text to a channels topic"
msgstr " APPENDTOPIC Aggiunge del testo al topic di un canale"
#: cs_appendtopic.cpp:89 cs_appendtopic.cpp:100
msgid "Syntax: APPENDTOPIC channel text"
msgstr "Sintassi: APPENDTOPIC canale testo"
#: cs_appendtopic.cpp:91
msgid ""
"This command allows users to append text to a currently set\n"
"channel topic. When TOPICLOCK is on, the topic is updated and\n"
"the new, updated topic is locked."
msgstr ""
"Questo comando permette agli utenti di aggiungere del testo ad un topic di un canale\n"
"già impostato. Se TOPICLOCK è attivato, il topic viene aggiornato e il nuovo topic\n"
"viene bloccato."
-37
View File
@@ -1,37 +0,0 @@
# Dutch translations for cs_appendtopic
# Engelse vertalingen voor het cs_appendtopic
# Copyright (C) 2010 Anope Team
# This file is distributed under the same license as Anope IRC Services
# Adam <adam@anope.org>, 2010.
#
msgid ""
msgstr ""
"Project-Id-Version: Anope\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-09-25 20:53-0400\n"
"PO-Revision-Date: 2010-09-25 20:55-0400\n"
"Last-Translator: Adam <adam@anope.org>\n"
"Language-Team: Dutch\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-1\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: cs_appendtopic.cpp:105
msgid " APPENDTOPIC Add text to a channels topic"
msgstr " APPENDTOPIC Voeg tekst aan een kanaal onderwerp toe"
#: cs_appendtopic.cpp:89 cs_appendtopic.cpp:100
msgid "Syntax: APPENDTOPIC channel text"
msgstr "Gebruik: APPENDTOPIC kanaal tekst"
#: cs_appendtopic.cpp:91
msgid ""
"This command allows users to append text to a currently set\n"
"channel topic. When TOPICLOCK is on, the topic is updated and\n"
"the new, updated topic is locked."
msgstr ""
"Dit command stelt gebruikers in staat om text toe te voegen\n"
"achter het huidige onderwerp van een kanaal. Als TOPICLOCK aan\n"
"staat, zal het onderwerp worden bijgewerkt en zal het nieuwe,\n"
"bijgewerkte topic worden geforceerd."
-32
View File
@@ -1,32 +0,0 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-09-25 20:53-0400\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
#: cs_appendtopic.cpp:105
msgid " APPENDTOPIC Add text to a channels topic"
msgstr ""
#: cs_appendtopic.cpp:89 cs_appendtopic.cpp:100
msgid "Syntax: APPENDTOPIC channel text"
msgstr ""
#: cs_appendtopic.cpp:91
msgid ""
"This command allows users to append text to a currently set\n"
"channel topic. When TOPICLOCK is on, the topic is updated and\n"
"the new, updated topic is locked."
msgstr ""
-35
View File
@@ -1,35 +0,0 @@
# Portuguese translations for cs_appendtopic
# Copyright (C) 2010 Anope Team
# This file is distributed under the same license as Anope IRC Services
# Adam <adam@anope.org>, 2010.
#
msgid ""
msgstr ""
"Project-Id-Version: Anope\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-09-25 20:53-0400\n"
"PO-Revision-Date: 2010-09-25 21:00-0400\n"
"Last-Translator: Adam <adam@anope.org>\n"
"Language-Team: Portuguese\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-1\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: cs_appendtopic.cpp:105
msgid " APPENDTOPIC Add text to a channels topic"
msgstr " APPENDTOPIC Adiciona texto ao tópico de um canal"
#: cs_appendtopic.cpp:89 cs_appendtopic.cpp:100
msgid "Syntax: APPENDTOPIC channel text"
msgstr "Sintaxe: APPENDTOPIC canal texto"
#: cs_appendtopic.cpp:91
msgid ""
"This command allows users to append text to a currently set\n"
"channel topic. When TOPICLOCK is on, the topic is updated and\n"
"the new, updated topic is locked."
msgstr ""
"Este comando permite aos usuários anexar texto a um tópico de canal\n"
"já definido. Quando TOPICLOCK está ativado, o tópico é atualizado e\n"
"o novo tópico é travado."
-37
View File
@@ -1,37 +0,0 @@
# Russian translations for cs_appendtopic
# ?????????? ???????? ??? ?????? cs_appendtopic
# Copyright (C) 2010 Anope Team
# This file is distributed under the same license as Anope IRC Services
# Adam <adam@anope.org>, 2010.
#
msgid ""
msgstr ""
"Project-Id-Version: Anope\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-09-25 20:53-0400\n"
"PO-Revision-Date: 2010-09-25 21:02-0400\n"
"Last-Translator: Adam <adam@anope.org>\n"
"Language-Team: Russian\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-1\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%"
"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
#: cs_appendtopic.cpp:105
msgid " APPENDTOPIC Add text to a channels topic"
msgstr " APPENDTOPIC Äîáàâëÿåò òåêñò ê òîïèêó êàíàëà"
#: cs_appendtopic.cpp:89 cs_appendtopic.cpp:100
msgid "Syntax: APPENDTOPIC channel text"
msgstr "Ñèíòàêñèñ: APPENDTOPIC #êàíàë òåêñò"
#: cs_appendtopic.cpp:91
msgid ""
"This command allows users to append text to a currently set\n"
"channel topic. When TOPICLOCK is on, the topic is updated and\n"
"the new, updated topic is locked."
msgstr ""
"Äàííàÿ êîìàíäà ïîçâîëÿåò äîáàâèòü òåêñò ê òîïèêó, êîòîðûé óñòàíîâëåí íà óêàçàííîì\n"
"êàíàëå. Åñëè àêòèâèðîâàí ðåæèì TOPICLOCK, òîïèê áóäåò îáíîâëåí è çàáëîêèðîâàí.\n"
"Ïðèìå÷àíèå: òåêñò áóäåò ÄÎÁÀÂËÅÍ ê òîïèêó, òî åñòü ñòàðûé òîïèê óäàëåí ÍÅ ÁÓÄÅÒ."
-85
View File
@@ -1,85 +0,0 @@
# German translations for cs_enforce
# German messages for cs_enforce
# Copyright (C) 2010 Anope Team
# This file is distributed under the same license as Anope IRC Services
# Adam <adam@anope.org>, 2010.
#
msgid ""
msgstr ""
"Project-Id-Version: Anope\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-09-25 21:11-0400\n"
"PO-Revision-Date: 2010-09-25 21:12-0400\n"
"Last-Translator: Adam <adam@anope.org>\n"
"Language-Team: German\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-1\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: cs_enforce.cpp:215
msgid " ENFORCE Enforce various channel modes and set options"
msgstr " ENFORCE Erzwingt verschieden Modes und SET Optionen"
#: cs_enforce.cpp:180
msgid ""
"Enforce various channel modes and set options. The channel\n"
"option indicates what channel to enforce the modes and options\n"
"on. The what option indicates what modes and options to\n"
"enforce, and can be any of SET, SECUREOPS, RESTRICTED, MODES,\n"
"or +R. When left out, it defaults to SET.\n"
" \n"
"If what is SET, it will enforce SECUREOPS and RESTRICTED\n"
"on the users currently in the channel, if they are set. Give\n"
"SECUREOPS to enforce the SECUREOPS option, even if it is not\n"
"enabled. Use RESTRICTED to enfore the RESTRICTED option, also\n"
"if it's not enabled."
msgstr ""
"Erzwingt verschieden Modes und SET Optionen. Die \037Channel\037\n"
"Option zeigt dir den Channel an, indem Modes und Optionen\n"
"zu erzwingen sind. Die \037was\037 Option zeigt dir welche Modes\n"
"und Optionen zu erzwingen sind. Die können nur SET, SECUREOPS,\n"
"RESTRICTED, MODES oder +R sein.Default ist SET.\n"
" \n"
"Wenn \037was\037 SET ist, wird SECUREOPS und RESTRICTED\n"
"auf die User die z.Z.in Channel sind erzwungen, wenn sie AN sind.\n"
"Benutze SECUREOPS oder RESTRICTED , um die Optionen einzeln\n"
"zu erzwingen, also wenn sie nicht eingeschaltet sind."
#: cs_enforce.cpp:147 cs_enforce.cpp:152 cs_enforce.cpp:157 cs_enforce.cpp:162
#: cs_enforce.cpp:167
#, c-format
msgid "Enforced %s"
msgstr "Erzwungen %s"
#: cs_enforce.cpp:193
msgid ""
"If what is MODES, it will enforce channelmode +R if it is\n"
"set. If +R is specified for what, the +R channelmode will\n"
"also be enforced, but even if it is not set. If it is not set,\n"
"users will be banned to ensure they don't just rejoin."
msgstr ""
"Wenn \037was\037 MODES ist, wird das ChannelMode +R erzwungen\n"
"falls an. Wenn \037was\037 +R ist, wird +R erzwungen aber eben\n"
"wenn noch nicht als Channel-Mode ist. Wenn +R noch nicht als\n"
"Channel-Mode war werden alle User aus den Channel gebannt um\n"
"sicher zu sein das sie nicht rejoinen."
#: cs_enforce.cpp:198
msgid ""
"If what is MODES, nothing will be enforced, since it would\n"
"enforce modes that the current ircd does not support. If +R is\n"
"specified for what, an equalivant of channelmode +R on\n"
"other ircds will be enforced. All users that are in the channel\n"
"but have not identified for their nickname will be kicked and\n"
"banned from the channel."
msgstr ""
"Wenn \037was\037 MODES ist, wird nichts erzwungen weil es MODES seine\n"
"können die dein IRCD nicht unterstützt. Wenn \037was\037 +R ist\n"
"oder ein Modes was auf ein anderen IRCD gleich +R ist, wird es\n"
"erzwungen. Alle User die nicht für deren Nicknamen identifiziert\n"
"sind werden aus den Channel gekickt und gebannt."
#: cs_enforce.cpp:178 cs_enforce.cpp:210
msgid "Syntax: ENFORCE channel [what]"
msgstr "Syntax: \002ENFORCE \037Channel\037 [\037was\037]\002"
-85
View File
@@ -1,85 +0,0 @@
# Italian translations for cs_enforce
# Traduzioni italiane per il cs_enforce
# Copyright (C) 2010 Anope Team
# This file is distributed under the same license as Anope IRC Services
# Adam <adam@anope.org>, 2010.
#
msgid ""
msgstr ""
"Project-Id-Version: Anope\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-09-25 21:11-0400\n"
"PO-Revision-Date: 2010-09-25 21:55-0400\n"
"Last-Translator: Adam <adam@anope.org>\n"
"Language-Team: Italian\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-1\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: cs_enforce.cpp:215
msgid " ENFORCE Enforce various channel modes and set options"
msgstr " ENFORCE Forza diversi modi di canale ed opzioni SET"
#: cs_enforce.cpp:180
msgid ""
"Enforce various channel modes and set options. The channel\n"
"option indicates what channel to enforce the modes and options\n"
"on. The what option indicates what modes and options to\n"
"enforce, and can be any of SET, SECUREOPS, RESTRICTED, MODES,\n"
"or +R. When left out, it defaults to SET.\n"
" \n"
"If what is SET, it will enforce SECUREOPS and RESTRICTED\n"
"on the users currently in the channel, if they are set. Give\n"
"SECUREOPS to enforce the SECUREOPS option, even if it is not\n"
"enabled. Use RESTRICTED to enfore the RESTRICTED option, also\n"
"if it's not enabled."
msgstr ""
"Forza diversi modi di canale ed opzioni SET. Il parametro \037canale\037\n"
"indica il canale sul quale forzare i modi e le opzioni. Il parametro\n"
"\037cosa\037 indica i modi e le opzioni da forzare, e possono essere\n"
"qualsiasi delle opzioni SET, SECUREOPS, RESTRICTED, MODES, o +R.\n"
"Se non specificato, viene sottointeso SET.\n"
" \n"
"Se \037cosa\037 è SET, forzerà SECUREOPS e RESTRICTED sugli utenti\n"
"attualmente nel canale, se sono impostati. Specifica SECUREOPS per\n"
"forzare l'opzione SECUREOPS, anche se non è attivata. Specifica\n"
"RESTRICTED per forzare l'opzione RESTRICTED, anche se non è\n"
"attivata."
#: cs_enforce.cpp:147 cs_enforce.cpp:152 cs_enforce.cpp:157 cs_enforce.cpp:162
#: cs_enforce.cpp:167
#, c-format
msgid "Enforced %s"
msgstr "Forzato %s"
#: cs_enforce.cpp:193
msgid ""
"If what is MODES, it will enforce channelmode +R if it is\n"
"set. If +R is specified for what, the +R channelmode will\n"
"also be enforced, but even if it is not set. If it is not set,\n"
"users will be banned to ensure they don't just rejoin."
msgstr ""
"Se \037cosa\037 è MODES, forzerà il modo del canale +R se è impostato.\n"
"Se +R è specificato per \037cosa\037, il modo del canale +R verrà\n"
"forzato, anche se non è impostato. Se non è impostato, gli utenti\n"
"verranno bannati per assicurare che non rientrino semplicemente."
#: cs_enforce.cpp:198
msgid ""
"If what is MODES, nothing will be enforced, since it would\n"
"enforce modes that the current ircd does not support. If +R is\n"
"specified for what, an equalivant of channelmode +R on\n"
"other ircds will be enforced. All users that are in the channel\n"
"but have not identified for their nickname will be kicked and\n"
"banned from the channel."
msgstr ""
"Se \037cosa\037 è MODES, niente verrà forzato, siccome forzerebbe\n"
"dei modi che l'ircd in uso non supporterebbe. Se +R è specificato\n"
"per \037cosa\037, un modo equivalente a +R sui altri ircd verrà\n"
"forzato. Tutti gli utenti presenti nel canale ma non identificati\n"
"per il loro nickname verranno bannati ed espulsi dal canale."
#: cs_enforce.cpp:178 cs_enforce.cpp:210
msgid "Syntax: ENFORCE channel [what]"
msgstr "Sintassi: \002ENFORCE \037canale\037 [\037cosa\037]\002"
-88
View File
@@ -1,88 +0,0 @@
# Dutch translations for cs_enforce
# Engelse vertalingen voor het cs_enforce
# Copyright (C) 2010 Anope Team
# This file is distributed under the same license as the Anope IRC Services
# Adam <adam@anope.org>, 2010.
#
msgid ""
msgstr ""
"Project-Id-Version: Anope\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-09-25 21:06-0400\n"
"PO-Revision-Date: 2010-09-25 21:07-0400\n"
"Last-Translator: Adam <adam@anope.org>\n"
"Language-Team: Dutch\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-1\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: cs_enforce.cpp:215
msgid " ENFORCE Enforce various channel modes and set options"
msgstr " ENFORCE Forceer enkele kanaalmodes en set-opties"
#: cs_enforce.cpp:180
msgid ""
"Enforce various channel modes and set options. The channel\n"
"option indicates what channel to enforce the modes and options\n"
"on. The what option indicates what modes and options to\n"
"enforce, and can be any of SET, SECUREOPS, RESTRICTED, MODES,\n"
"or +R. When left out, it defaults to SET.\n"
" \n"
"If what is SET, it will enforce SECUREOPS and RESTRICTED\n"
"on the users currently in the channel, if they are set. Give\n"
"SECUREOPS to enforce the SECUREOPS option, even if it is not\n"
"enabled. Use RESTRICTED to enfore the RESTRICTED option, also\n"
"if it's not enabled."
msgstr ""
"Forceer enkele kannalmodes en set-opties. De \037kanaal\037 optie\n"
"geeft aan op welk kanaal de modes en opties geforceerd moeten\n"
"worden. De \037wat\037 optie geeft aan welke modes en opties\n"
"geforceerd moeten worden; dit kan SET, SECUREOPS, RESTRICTED,\n"
"MODES, of +R zijn. Indien weggelaten is dit standaard SET.\n"
" \n"
"Als er voor \037wat\037 SET wordt ingevuld, zullen SECUREOPS en\n"
"RESTRICTED geforceerd worden op de gebruikers in het kanaal,\n"
"maar alleen als die opties aangezet zijn voor het kanaal. Als\n"
"SECUREOPS of RESTRICTED wordt gegeven voor \037wat\037 zal die optie\n"
"altijd geforceerd worden, ook als die niet is aangezet."
#: cs_enforce.cpp:147 cs_enforce.cpp:152 cs_enforce.cpp:157 cs_enforce.cpp:162
#: cs_enforce.cpp:167
#, c-format
msgid "Enforced %s"
msgstr ""
#: cs_enforce.cpp:193
msgid ""
"If what is MODES, it will enforce channelmode +R if it is\n"
"set. If +R is specified for what, the +R channelmode will\n"
"also be enforced, but even if it is not set. If it is not set,\n"
"users will be banned to ensure they don't just rejoin."
msgstr ""
"Als er voor \037wat\037 MODES wordt ingevuld, zal kanaalmode +R worden\n"
"geforceerd, als die op het kanaal aan staat. Als +R wordt ingevuld,\n"
"zal kanaalmode +R worden geforceerd, maar ook als die niet aan"
"staat voor het kanaal. Als +R niet aan staat, zullen alle ook\n"
"gebanned worden om te zorgen dat ze niet opnieuw het kanaal binnen\n"
"kunnen komen."
#: cs_enforce.cpp:198
msgid ""
"If what is MODES, nothing will be enforced, since it would\n"
"enforce modes that the current ircd does not support. If +R is\n"
"specified for what, an equalivant of channelmode +R on\n"
"other ircds will be enforced. All users that are in the channel\n"
"but have not identified for their nickname will be kicked and\n"
"banned from the channel."
msgstr ""
"Als er voor \037wat\037 MODES wordt ingevuld, zal er niks gebeuren.\n"
"Normaal gesproken wordt er een kanaalmode geforceerd die op deze\n"
"server niet ondersteund wordt. Als +R wordt ingevuld voor \037wat\037\n"
"zullen alle gebruikers die in het kanaal zitten maar zich niet\n"
"hebben geidentificeerd voor hun nick uit het kanaal gekicked en\n"
"verbannen worden."
#: cs_enforce.cpp:178 cs_enforce.cpp:210
msgid "Syntax: ENFORCE channel [what]"
msgstr "Syntax: \002ENFORCE \037kanaal\037 [\037wat\037]\002"
-64
View File
@@ -1,64 +0,0 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-09-25 21:11-0400\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
#: cs_enforce.cpp:215
msgid " ENFORCE Enforce various channel modes and set options"
msgstr ""
#: cs_enforce.cpp:180
msgid ""
"Enforce various channel modes and set options. The channel\n"
"option indicates what channel to enforce the modes and options\n"
"on. The what option indicates what modes and options to\n"
"enforce, and can be any of SET, SECUREOPS, RESTRICTED, MODES,\n"
"or +R. When left out, it defaults to SET.\n"
" \n"
"If what is SET, it will enforce SECUREOPS and RESTRICTED\n"
"on the users currently in the channel, if they are set. Give\n"
"SECUREOPS to enforce the SECUREOPS option, even if it is not\n"
"enabled. Use RESTRICTED to enfore the RESTRICTED option, also\n"
"if it's not enabled."
msgstr ""
#: cs_enforce.cpp:147 cs_enforce.cpp:152 cs_enforce.cpp:157 cs_enforce.cpp:162
#: cs_enforce.cpp:167
#, c-format
msgid "Enforced %s"
msgstr ""
#: cs_enforce.cpp:193
msgid ""
"If what is MODES, it will enforce channelmode +R if it is\n"
"set. If +R is specified for what, the +R channelmode will\n"
"also be enforced, but even if it is not set. If it is not set,\n"
"users will be banned to ensure they don't just rejoin."
msgstr ""
#: cs_enforce.cpp:198
msgid ""
"If what is MODES, nothing will be enforced, since it would\n"
"enforce modes that the current ircd does not support. If +R is\n"
"specified for what, an equalivant of channelmode +R on\n"
"other ircds will be enforced. All users that are in the channel\n"
"but have not identified for their nickname will be kicked and\n"
"banned from the channel."
msgstr ""
#: cs_enforce.cpp:178 cs_enforce.cpp:210
msgid "Syntax: ENFORCE channel [what]"
msgstr ""
-84
View File
@@ -1,84 +0,0 @@
# Portuguese translations for cs_enforce
# Copyright (C) 2010 Anope Team
# This file is distributed under the same license as the Anope IRC Services
# Adam <adam@anope.org>, 2010.
#
msgid ""
msgstr ""
"Project-Id-Version: Anope\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-09-25 21:11-0400\n"
"PO-Revision-Date: 2010-09-25 21:24-0400\n"
"Last-Translator: Adam <adam@anope.org>\n"
"Language-Team: Portuguese\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-1\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: cs_enforce.cpp:215
msgid " ENFORCE Enforce various channel modes and set options"
msgstr " ENFORCE Verifica o cumprimento de vários modos de canal e opções ajustadas"
#: cs_enforce.cpp:180
msgid ""
"Enforce various channel modes and set options. The channel\n"
"option indicates what channel to enforce the modes and options\n"
"on. The what option indicates what modes and options to\n"
"enforce, and can be any of SET, SECUREOPS, RESTRICTED, MODES,\n"
"or +R. When left out, it defaults to SET.\n"
" \n"
"If what is SET, it will enforce SECUREOPS and RESTRICTED\n"
"on the users currently in the channel, if they are set. Give\n"
"SECUREOPS to enforce the SECUREOPS option, even if it is not\n"
"enabled. Use RESTRICTED to enfore the RESTRICTED option, also\n"
"if it's not enabled."
msgstr ""
"Verifica o cumprimento de vários modos de canal e opções ajustadas.\n"
"O campo \037canal\037 indica qual canal deve ter os modos e opções verificadas\n"
"O campo \037opção\037 indica quais modos e opções devem ser verificadas,\n"
"e pode ser: SET, SECUREOPS, RESTRICTED, MODES ou +R\n"
"Quando deixado em branco, o padrão é SET.\n"
" \n"
"Se \037opção\037 for SET, serão verificadas as opções SECUREOPS e RESTRICTED\n"
"para usuários que estiverem no canal, caso elas estejam ativadas. Use\n"
"SECUREOPS para verificar a opção SECUREOPS, mesmo que ela não esteja ativada\n"
"Use RESTRICTED para verificar a opção RESTRICTED, mesmo que ela não esteja\n"
"ativada."
#: cs_enforce.cpp:147 cs_enforce.cpp:152 cs_enforce.cpp:157 cs_enforce.cpp:162
#: cs_enforce.cpp:167
#, c-format
msgid "Enforced %s"
msgstr "Verificado %s"
#: cs_enforce.cpp:193
msgid ""
"If what is MODES, it will enforce channelmode +R if it is\n"
"set. If +R is specified for what, the +R channelmode will\n"
"also be enforced, but even if it is not set. If it is not set,\n"
"users will be banned to ensure they don't just rejoin."
msgstr ""
"Se \037opção\037 for MODES, será verificado o modo de canal +R caso ele\n"
"esteja ativado. Se +R for especificado para \037opção\037, o modo de canal\n"
"+R também será verificado, mesmo que ele não esteja ativado. Se ele não\n"
"estiver ativado, os usuários serão banidos para evitar que reentrem no canal."
#: cs_enforce.cpp:198
msgid ""
"If what is MODES, nothing will be enforced, since it would\n"
"enforce modes that the current ircd does not support. If +R is\n"
"specified for what, an equalivant of channelmode +R on\n"
"other ircds will be enforced. All users that are in the channel\n"
"but have not identified for their nickname will be kicked and\n"
"banned from the channel."
msgstr ""
"Se \037opção\037 for MODES, nada será verificado, visto que isto poderia\n"
"verificar modos que o IRCd atual não suporta. Se +R for especificado\n"
"para \037opção\037, um equivalente ao modo de canal +R em outros IRCds\n"
"será verificado. Todos os usuários que estão no canal, mas não estejam\n"
"identificados para seus nicks serão kickados e banidos do canal."
#: cs_enforce.cpp:178 cs_enforce.cpp:210
msgid "Syntax: ENFORCE channel [what]"
msgstr "Sintaxe: \002ENFORCE \037canal\037 [\037opção\037]\002"
-85
View File
@@ -1,85 +0,0 @@
# Russian translations for cs_enforce
# ?????????? ???????? ??? ?????? cs_enforce
# Copyright (C) 2010 Anope Team
# This file is distributed under the same license as Anope IRC Services
# Adam <adam@anope.org>, 2010.
#
msgid ""
msgstr ""
"Project-Id-Version: Anope\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-09-25 21:11-0400\n"
"PO-Revision-Date: 2010-09-25 21:38-0400\n"
"Last-Translator: Adam <adam@anope.org>\n"
"Language-Team: Russian\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-1\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%"
"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
#: cs_enforce.cpp:215
msgid " ENFORCE Enforce various channel modes and set options"
msgstr " ENFORCE Ïåðåïðîâåðêà è óñòàíîâêà ðàçëè÷íûõ ðåæèìîâ è îïöèé êàíàëà"
#: cs_enforce.cpp:180
msgid ""
"Enforce various channel modes and set options. The channel\n"
"option indicates what channel to enforce the modes and options\n"
"on. The what option indicates what modes and options to\n"
"enforce, and can be any of SET, SECUREOPS, RESTRICTED, MODES,\n"
"or +R. When left out, it defaults to SET.\n"
" \n"
"If what is SET, it will enforce SECUREOPS and RESTRICTED\n"
"on the users currently in the channel, if they are set. Give\n"
"SECUREOPS to enforce the SECUREOPS option, even if it is not\n"
"enabled. Use RESTRICTED to enfore the RESTRICTED option, also\n"
"if it's not enabled."
msgstr ""
"Ïåðåïðîâåðêà è óñòàíîâêà ðàçëè÷íûõ ðåæèìîâ è îïöèé êàíàëà.\n"
"\037Ïàðàìåòð\037 óêàçûâàåò êàêèå îïöèè èëè ðåæèìû êàíàëà äîëæíû áûòü\n"
"ïåðåïðîâåðåíû.  êà÷åñòâå ïàðàìåòðà ìîãóò áûòü óêàçàíû: SET, SECUREOPS,\n"
"RESTRICTED, MODES, èëè +R. Åñëè ïàðàìåòð íå óêàçàí, ïî-óìîë÷àíèþ áóäåò SET.\n"
" \n"
"Åñëè â êà÷åñòâå \037ïàðàìåòðà\037 óêàçàíî SET, áóäóò ïåðåïðîâåðåíû îïöèè\n"
"SECUREOPS è RESTRICTED îòíîñèòåëüíî ïîëüçîâàòåëåé íà óêàçàííîì êàíàëå\n"
"(ïðè óñëîâèè, ÷òî îïöèè âêëþ÷åíû). Îòäåëüíî óêàçàííûé ïàðàìåòð SECUREOPS\n"
"ïðèìåíèò îïöèþ SECUREOPS (äàæå åñëè îíà \037ÍÅ\037 óñòàíîâëåíà). Ïàðàìåòð\n"
"RESTRICTED ïðèìåíèò îïöèþ RESTRICTED (äàæå åñëè îíà \037ÍÅ\037 óñòàíîâëåíà)"
#: cs_enforce.cpp:147 cs_enforce.cpp:152 cs_enforce.cpp:157 cs_enforce.cpp:162
#: cs_enforce.cpp:167
#, c-format
msgid "Enforced %s"
msgstr "Ïåðåïðîâåðåíî: %s"
#: cs_enforce.cpp:193
msgid ""
"If what is MODES, it will enforce channelmode +R if it is\n"
"set. If +R is specified for what, the +R channelmode will\n"
"also be enforced, but even if it is not set. If it is not set,\n"
"users will be banned to ensure they don't just rejoin."
msgstr ""
"Åñëè â êà÷åñòâå \037ïàðàìåòðà\037 óêàçàíî MODES, áóäåò ïåðåïðîâåðåí ðåæèì +R\n"
"(åñëè îí óñòàíîâëåí). Îòäåëüíî óêàçàííûé ïàðàìåòð \037+R\037 ïðèìåíèò\n"
"êàíàëüíûé ðåæèì +R, äàæå åñëè îí íå óñòàíîâëåí, è çàáàíèò âñåõ ïîëüçîâàòåëåé,\n"
"êîòîðûå íå èäåíòèôèöèðîâàëèñü ê ñâîåìó íèêó èëè íå èìåþò çàðåãèñòðèðîâàííîãî íèêà."
#: cs_enforce.cpp:198
msgid ""
"If what is MODES, nothing will be enforced, since it would\n"
"enforce modes that the current ircd does not support. If +R is\n"
"specified for what, an equalivant of channelmode +R on\n"
"other ircds will be enforced. All users that are in the channel\n"
"but have not identified for their nickname will be kicked and\n"
"banned from the channel."
msgstr ""
"Åñëè â êà÷åñòâå \037ïàðàìåòðà\037 óêàçàíî MODES, ïåðåïðîâåðêà îñóùåñòâëåíà\n"
"ÍÅ ÁÓÄÅÒ, òàê êàê òåêóùèé IRCD íå ïîääåðæèâàåò íåîáõîäèìûå ðåæèìû.\n"
"Îòäåëüíî óêàçàííûé ïàðàìåòð \037+R\037 ïðèìåíèò êàíàëüíûé ðåæèì, ýêâèâàëåíòíûé\n"
"ðåæèìó +R è çàáàíèò âñåõ ïîëüçîâàòåëåé, êîòîðûå íå èäåíòèôèöèðîâàëèñü ê ñâîåìó\n"
"íèêó èëè íå èìåþò çàðåãèñòðèðîâàííîãî íèêà."
#: cs_enforce.cpp:178 cs_enforce.cpp:210
msgid "Syntax: ENFORCE channel [what]"
msgstr "Ñèíòàêñèñ: \002ENFORCE \037#êàíàë\037 \037ïàðàìåòð\037\002"
-39
View File
@@ -1,39 +0,0 @@
# German translations for cs_tban
# German messages for cs_tban
# Copyright (C) 2010 Anope Team
# This file is distributed under the same license as the Anope IRC Services
# Adam <adam@anope.org>, 2010.
#
msgid ""
msgstr ""
"Project-Id-Version: Anope\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-09-26 00:14-0400\n"
"PO-Revision-Date: 2010-09-26 00:16-0400\n"
"Last-Translator: Adam <adam@anope.org>\n"
"Language-Team: German\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-1\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: cs_tban.cpp:104
msgid " TBAN Bans the user for a given length of time"
msgstr " TBAN Bant ein User für eine bestimmte Zeit aus ein Channel"
#: cs_tban.cpp:81
#, c-format
msgid "%s banned from %s, will auto-expire in %s"
msgstr "%s gebannt von %s, wird auto-auslaufen in %s"
#: cs_tban.cpp:91
msgid ""
"Bans the given user from a channel for a specified length of\n"
"time. If the ban is removed before by hand, it will NOT be replaced."
msgstr ""
"Bant ein User für eine bestimmte Zeit aus ein Channel\n"
"Wenn der Ban manuell entfernt wird, wird es NICHT ersetzt."
#: cs_tban.cpp:99
msgid "Syntax: TBAN channel nick time"
msgstr "Syntax: TBAN Channel Nickname Zeit"
-39
View File
@@ -1,39 +0,0 @@
# Italian translations for cs_tban
# Traduzioni italiane per il cs_tban
# Copyright (C) 2010 Anope Team
# This file is distributed under the same license as the Anope IRC Services
# Adam <adam@anope.org>, 2010.
#
msgid ""
msgstr ""
"Project-Id-Version: Anope\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-09-26 00:14-0400\n"
"PO-Revision-Date: 2010-09-26 00:22-0400\n"
"Last-Translator: Adam <adam@anope.org>\n"
"Language-Team: Italian\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-1\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: cs_tban.cpp:104
msgid " TBAN Bans the user for a given length of time"
msgstr " TBAN Banna l'utente per un periodo di tempo specificato"
#: cs_tban.cpp:81
#, c-format
msgid "%s banned from %s, will auto-expire in %s"
msgstr "%s bannato da %s, scadrà automaticamente tra %s"
#: cs_tban.cpp:91
msgid ""
"Bans the given user from a channel for a specified length of\n"
"time. If the ban is removed before by hand, it will NOT be replaced."
msgstr ""
"Banna l'utente specificato da un canale per un periodo di tempo\n"
"specificato. Se il ban viene rimosso a mano prima della scadenza, NON verrà rimpiazzato."
#: cs_tban.cpp:99
msgid "Syntax: TBAN channel nick time"
msgstr "Sintassi: TBAN canale nick tempo"
-40
View File
@@ -1,40 +0,0 @@
# Dutch translations for cs_tban
# Engelse vertalingen voor het cs_tban
# Copyright (C) 2010 Anope Team
# This file is distributed under the same license as the Anope IRC Services
# Adam <adam@anope.org>, 2010.
#
msgid ""
msgstr ""
"Project-Id-Version: Anope\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-09-26 00:14-0400\n"
"PO-Revision-Date: 2010-09-26 00:15-0400\n"
"Last-Translator: Adam <adam@anope.org>\n"
"Language-Team: Dutch\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-1\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: cs_tban.cpp:104
msgid " TBAN Bans the user for a given length of time"
msgstr " TBAN Verban een gebruiker voor een bepaalde tijd"
#: cs_tban.cpp:81
#, c-format
msgid "%s banned from %s, will auto-expire in %s"
msgstr "%s verbannen van %s, zal verlopen in %s"
#: cs_tban.cpp:91
msgid ""
"Bans the given user from a channel for a specified length of\n"
"time. If the ban is removed before by hand, it will NOT be replaced."
msgstr ""
"Verbant de gegeven gebruiken van het gegeven kanaal voor de\n"
"gegeven tijdsduur. Als de verbanning eerder wordt verwijderd,\n"
"zal deze NIET worden vervangen."
#: cs_tban.cpp:99
msgid "Syntax: TBAN channel nick time"
msgstr "Syntax: TBAN kanaal nick tijd"
-36
View File
@@ -1,36 +0,0 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-09-26 00:14-0400\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
#: cs_tban.cpp:104
msgid " TBAN Bans the user for a given length of time"
msgstr ""
#: cs_tban.cpp:81
#, c-format
msgid "%s banned from %s, will auto-expire in %s"
msgstr ""
#: cs_tban.cpp:91
msgid ""
"Bans the given user from a channel for a specified length of\n"
"time. If the ban is removed before by hand, it will NOT be replaced."
msgstr ""
#: cs_tban.cpp:99
msgid "Syntax: TBAN channel nick time"
msgstr ""
-38
View File
@@ -1,38 +0,0 @@
# Portuguese translations for cs_tban
# Copyright (C) 2010 Anope Team
# This file is distributed under the same license as the Anope IRC Services
# Adam <adam@anope.org>, 2010.
#
msgid ""
msgstr ""
"Project-Id-Version: Anope\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-09-26 00:14-0400\n"
"PO-Revision-Date: 2010-09-26 00:18-0400\n"
"Last-Translator: Adam <adam@anope.org>\n"
"Language-Team: Portuguese\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-1\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: cs_tban.cpp:104
msgid " TBAN Bans the user for a given length of time"
msgstr " TBAN Bane o usuário por um determinado período de tempo"
#: cs_tban.cpp:81
#, c-format
msgid "%s banned from %s, will auto-expire in %s"
msgstr "%s foi banido do %s, irá auto-expirar em %s"
#: cs_tban.cpp:91
msgid ""
"Bans the given user from a channel for a specified length of\n"
"time. If the ban is removed before by hand, it will NOT be replaced."
msgstr ""
"Bane de um canal o usuário especificado por um determinado período de\n"
"tempo. Se o ban for removido manualmente antes do tempo, ele não será recolocado."
#: cs_tban.cpp:99
msgid "Syntax: TBAN channel nick time"
msgstr "Sintaxe: TBAN canal nick tempo"

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