1
0
mirror of https://github.com/anope/anope.git synced 2026-06-18 23:44:46 +02:00

Compare commits

..

709 Commits

Author SHA1 Message Date
Adam 82e588a790 Anope 1.9.3 Release 2010-12-12 18:42:14 -05:00
Adam 7b7301eeff Made ./Config with a .git directory work ok if we are on a git tag 2010-12-12 18:40:04 -05:00
Adam 70d65376b7 Updated version.log 2010-12-12 17:58:19 -05:00
Adam af8cf445b8 Made version.cpp ok with an empty VERSION_EXTRA 2010-12-12 17:58:09 -05:00
Adam be4ec3c0c4 Updated docs/WIN32.txt with instructions on how to get the libraries to build with gettext, ssl, and mysql 2010-12-12 16:54:46 -05:00
Adam 587e5d9421 Fixed build on cmake 2.4.x 2010-12-09 19:58:41 -05:00
Adam 35f03811e8 Fixed clearing entries from the bandata cache 2010-12-01 15:50:56 -05:00
Adam 14e396baf7 Fixed /ns set display 2010-11-29 19:20:26 -05:00
Adam ba01e7a3bb Fixed /ns help saset autoop reply 2010-11-27 00:07:48 -06:00
Adam 52d9ed428f Fixed handling pings and ctcps to channels 2010-11-25 22:59:39 -06:00
Adam 8f825821e0 Fixed sending operwalls on ratbox 2010-11-22 13:10:14 -06:00
Adam d1ba920729 Fixed replacing %R with /msg on non gettext builds 2010-11-21 20:36:46 -06:00
Adam 56b269e6b3 Merge branch '1.9' of git.sigterm.info:gitroot/anope/anope into 1.9 2010-11-21 20:05:48 -06:00
Adam 7e03427272 Fixed some language string names 2010-11-21 20:05:37 -06:00
Adam 72ab27af76 Introduce our clients with umode +q on Unreal so they can't be kicked 2010-11-21 18:55:52 -05:00
Adam 3445f4d680 Fixed parsing cidr masks 2010-11-19 14:16:42 -05:00
Adam aab915f2e9 Fixed some mysql queries 2010-11-18 21:34:38 -05:00
Adam 27652144ec Fixed the mlock events to be useful and fixed /cs access view's last used time 2010-11-17 19:59:23 -05:00
Adam 4f8dfc2132 Delete users and channels from the modestacker when they are destructed 2010-11-14 17:34:17 -05:00
Adam 4415a779a3 Fixed ban and kick from showing up twice in /cs help 2010-11-14 12:44:34 -05:00
Adam 8662b0989e Removed an unused variable 2010-11-11 19:49:00 -05:00
Adam 12c5314863 Fixed possible unsafe iteration when purging dns cache, and fixed the dns cache to not expire all of the records for specific hosts if the records have different TTLs
(cherry picked from commit 736df4bd98b952aad459fdf7914735e88f97c4b2)
2010-11-11 19:34:23 -05:00
Adam 0d2db1f9f9 Fixed DNS caching and made DNS cache empty results
(cherry picked from commit 438ae629e51b519d0d5f70531d0262be1b9fe2bc)
2010-11-09 15:04:28 -05:00
Adam fe6d7913ce Fixed a crash in the DNS engine when using cached results 2010-11-09 03:20:50 -05:00
Adam dc1252597a Removed two primary keys on some metadata tables, they should not have them 2010-11-07 20:55:30 -05:00
Adam 721ef7d345 Fixed the OnPostCommand event overload in db_mysql 2010-11-07 18:06:02 -05:00
Adam 5209e73995 Updated version.log 2010-11-06 04:24:46 -04:00
Adam 07e2ec0fa7 Regenerated lang files 2010-11-06 04:24:27 -04:00
Adam f5d20579ee Fixed /ms sendall syntax error message 2010-11-05 03:34:44 -04:00
Adam cbd0f52eff Made Base not virtual, prevents us from having to dynamic cast in the mode stacker on release builds 2010-11-04 00:36:53 -04:00
Adam 4fb4858952 Fixed anopesmtp. Again. It works on Windows now 2010-11-02 00:58:24 -04:00
Adam 477ff30cec Fixed calculate_depends again, now it works 2010-11-01 18:43:46 -04:00
Adam daa97f0343 Fixed make install because Changes.lang is dead 2010-11-01 17:36:30 -04:00
Adam 3edc6d70b9 Fixed building anopesmtp on Windows, fixed some cmake problems with calculate_depends, and fixed building without gettext 2010-11-01 16:07:18 -04:00
Adam 9db85375ee Made ns_set_misc work 2010-10-31 21:46:23 -04:00
Adam e3f368f67b Fixed replacing %R's in email messages and fixed anopesmtp to really work 2010-10-31 20:47:34 -04:00
Adam 2170823059 Updated Changes 2010-10-31 13:37:31 -04:00
Adam 011582ff3c Fixed bug #1197 - Store vhosts in MySQL 2010-10-31 13:03:10 -04:00
Adam 98bdd9749a Fixed build on cmake2.6 2010-10-30 20:12:52 -04:00
Adam cd21bd758c Updated TODO 2010-10-30 19:49:09 -04:00
Adam fb9f41b3e5 Made gettext work on most OSs. Tested on Debian, FreeBSD, Gentoo, and Windows.
Added a search path option to the Config script for cmake to use when finding libraries for modules or for gettext.
Fixed m_mysql and m_ssl to work under Windows, made the Windows Config
program remember the last used options, and fixed Windows release builds.
2010-10-30 19:41:13 -04:00
Adam a7e5d51616 Removed the example anope_commands php code, it was removed in favor of xmlrpc 2010-10-29 20:53:34 -04:00
Adam b8df88a1bc Made gettext work on Debian and updated some documentation 2010-10-28 16:25:33 -04:00
DukePyrolator 257fb256e9 removed an extra space from db-convert 2010-10-28 07:31:59 +02:00
DukePyrolator 8ff0b0ed99 do not store memo numbers on db-convert 2010-10-28 07:14:49 +02:00
Adam 180aa6b67b Removed memo number from databases. Since we already have db-upgrade we might as well make that update memos too.
Users using the top of git will need to run sed -i 's/MD MI [0-9]* /MD MI /' anope.db on their database.
2010-10-27 23:02:20 -04:00
Adam a26f119bc8 Do not store memo number in memo structs, fixes some bugs with deleting memos 2010-10-27 22:29:34 -04:00
Adam a79da4bba1 Modules to not need to include libintl.h because they are not linked to libintl and do not directly call its code. #define _(x) to x just so xgettext is able to pick out language strings. 2010-10-26 22:02:08 -04:00
Adam 09160d1289 Fixed Windows build with gettext 2010-10-26 20:14:39 -04:00
Adam 1d931401cd Fixed the other half of bug #1200 2010-10-24 13:46:56 -04:00
Adam bd7b6b16ec Fixed bug #1200 2010-10-24 12:56:20 -04:00
Adam ec5fa9e63e Made the language system still work even if the locales are not installed on the system 2010-10-23 16:12:15 -04:00
Adam 7e47b97740 Fixed a crash on some usages of /cs akick view 2010-10-23 03:10:15 -04:00
Adam 1bd975b90e Fixed a crash on inspircd if we get a join without a TS 2010-10-23 02:40:46 -04:00
Adam eb8f3a799c Fixed some Windows problems 2010-10-22 04:20:34 -04:00
Adam 791c2b89a5 Changed the log:normal config directive to a list like the other log values, and fixed a potential crash from rehashing while sending mail 2010-10-21 23:20:48 -04:00
Adam 4f317a2421 Made /cs help levels desc not case sensitive 2010-10-16 17:46:56 -04:00
Adam f3c2933542 Fixed an wrong logging example in example.conf and fixed misc messages being not logged as normal 2010-10-15 13:25:14 -04:00
Adam 4ddb469864 Added ns_set_hide to the example configuration, for some reason it was missing 2010-10-13 18:46:25 -04:00
Adam d24e810262 Fixed mlock, broken since revision cf98cd3e06 2010-10-13 15:09:19 -04:00
Adam bc812eeb03 Fixed a crash if an invalid expiry time is given to a number of commands 2010-10-13 14:46:53 -04:00
Adam 5e9db23883 Fixed saset noexpire to set noexpire on the nick it is used on not just the display name 2010-10-13 14:33:27 -04:00
Adam c4075c032e Changed cs/ns_set_misc operonly config directive to better reflect what it really does 2010-10-13 13:25:34 -04:00
Adam dc0c07b408 Made the SQL tables use foriegn keys and references to each other, removed many now unnecessary queries from db_mysql 2010-10-12 21:43:39 -04:00
Adam afb55a1842 Fixed Windows again 2010-10-11 19:21:59 -04:00
Adam d7aa5f6a3a Fixed Windows build 2010-10-11 18:47:54 -04:00
Adam 717c123441 Fixed some warnings 2010-10-11 15:37:39 -04:00
Adam 0ac77d0e42 Fixed a crash in the dns engine if we receive a reply after a request has timedout 2010-10-09 20:02:19 -04:00
Adam 5ca2df1edb Fixed bug #1196 - truncate anope_extra before flushing data into it again 2010-10-09 12:22:55 -04:00
Adam b3dd5668f6 Set +P on mlock when channels are set as persistant 2010-10-08 16:21:23 -04:00
Adam 63b1f9ce88 Do not join our clients to enforce TS if they are already in the channel 2010-10-08 16:16:11 -04:00
Adam d5e6bd8391 Fixed a crash on insp12 if we receeve a part without a reason 2010-10-08 16:03:48 -04:00
Adam 7e62fcf4b3 Fixed handling fmodes on inspircd12 2010-10-08 15:59:26 -04:00
Adam 21a61f162e Fixed a crash if the dns engine is unable to add questions into DNS packets 2010-10-07 21:27:32 -04:00
Adam 7df71750cb Log the kicker as the source of kicking log messages, not the target 2010-10-07 18:25:24 -04:00
Adam b4f675adcf Do now show topics being set by UIDs on TS6 IRCds 2010-10-07 16:02:23 -04:00
DukePyrolator 5298107ae8 fixed internally setting +o on OPERTYPE 2010-10-07 14:17:20 +02:00
Adam 7f4362138a Made nickserv:nogroupchange work 2010-10-06 21:47:01 -04:00
Adam 4da258ff78 Added lang/unused.sh, used to find unused language strings. Also removed a lot of unused language strings. 2010-10-06 20:36:08 -04:00
Adam 9ab50eedf2 Fixed restarting Anope when it is started from outside of the services binary dir 2010-10-05 19:46:33 -04:00
Adam 64a3bda235 Fixed two types in db_mysql 2010-10-05 16:25:52 -04:00
Adam acec166702 Use safe iteration when deleting servers off of hubs 2010-10-05 16:16:39 -04:00
Adam 00ed18b421 Updated docs and TODO 2010-10-05 02:11:14 -04:00
Adam 10833f9d3f Made anoperc stop/restart send the cycleonglobal, and fixed logfiles to be opened with append not truncate 2010-10-04 21:46:15 -04:00
Adam 592060ac75 Attempt to write back the old mlock to the databases if we try and fail to connect to the uplink. Because we may not know modes until after we are synced we could accidentally nuke all of the mlocks 2010-10-04 18:57:54 -04:00
Adam 92338c13b8 Fixed /ns set password/display and made saset not log the new password on saset password 2010-10-04 17:36:53 -04:00
Adam 3fa2659309 Ignore the EINTR error from epoll_wait, it isnt always a real error 2010-10-04 16:57:11 -04:00
Adam 58a3e2bbb7 Allow reloading of the protocol module with /operserv modreload 2010-10-04 16:54:39 -04:00
Adam ab5ebc2245 Automatically destruct messages when modules are unloaded 2010-10-04 16:38:25 -04:00
Adam cf98cd3e06 Changed the protocol handling system to use a vector of strings instead of C style arrays. Burned the old process/split_buf/memory.c code 2010-10-04 13:59:30 -04:00
Adam 632f8df76b Fixed checking the global block in the config to work ok, fixed having non-core service bots logging messages, fixed setting the topic to the topic setter on inspircd12/20, and fixed logging status mode changes on ts6 ircds 2010-10-03 15:59:19 -04:00
Adam 663a8b9a1c Updated language files 2010-10-02 21:10:27 -04:00
Adam 90f0a7c92a Added os_modreload. Also allow unloading database and encryption modules since there isn't a reason we cant allow reloading them. Soon os_modreload will allow reloading the protocol modules. 2010-10-02 21:09:11 -04:00
Adam 0d684191e9 Made os_news send news notices from NickServ if global is disabled 2010-10-02 16:43:24 -04:00
Adam 3499edc427 Replaced globalnick and globaldescription with just nick and description, since it's in its own block now 2010-10-02 16:11:58 -04:00
Adam 8a0cf62d70 Set the botmodes on bots in the log channel(s) when using ircds that have dynamic modes 2010-10-02 15:24:00 -04:00
Adam 59f35732f6 Made entry_match work once again 2010-10-02 15:24:00 -04:00
Adam 76b10625d9 Fixed cs_invite to send the invite notice to the person invited 2010-10-02 15:24:00 -04:00
Adam b0070bbd3b Made ChanServ optional 2010-10-02 15:23:55 -04:00
Adam 0a8bb88085 Made OperServ and Global optional 2010-10-02 03:08:29 -04:00
Adam a62d824cb4 Made MemoServ optional 2010-10-02 00:07:39 -04:00
Adam e3afb119b9 Fixed pipe and win32 socketengine builds 2010-10-01 21:45:46 -04:00
Adam d44f7971b1 Rewrote some of the socket code to allow m_ssl to be a service.
This allows modules (xmlrpc) to create and accept SSL connections.
Also fixed unloading m_mysql at certain times and made the threading
engine always work correctly on Windows.
2010-10-01 21:01:49 -04:00
Adam 70056dd468 Merge branch '1.9' of anope.git.sf.net:/gitroot/anope/anope into 1.9 2010-10-01 20:25:55 -04:00
Adam 5d9df2bdc1 Revert "Do not use new/delete to allocate modules, allows modules to always destruct properly and automatically"
This does not work as expected, it causes objects allocated by modules to be freed by the operating system when
the module is unloaded, giving no chance to the module to deallocate it itself.

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

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

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

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

git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2775 5417fbe8-f217-4b02-8779-1006273d7864
2010-01-21 06:31:17 +00:00
DukePyrolator 15817208aa fixed a compile error on windows
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2765 5417fbe8-f217-4b02-8779-1006273d7864
2010-01-16 20:15:14 +00:00
Adam- ff13d00eb5 Removed c_userlist and u_chanlist, replaced with std::list
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2764 5417fbe8-f217-4b02-8779-1006273d7864
2010-01-16 06:57:14 +00:00
Adam- aaf1cefd1c Added channels.h and moved channel stuff from services.h to it
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2763 5417fbe8-f217-4b02-8779-1006273d7864
2010-01-16 06:56:57 +00:00
Adam- c4c1242ac7 Fixed bug #1135 - Don't kick or ban ulined clients
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2762 5417fbe8-f217-4b02-8779-1006273d7864
2010-01-15 19:30:11 +00:00
DukePyrolator f432789853 some code cleanup in enc_sha256
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2760 5417fbe8-f217-4b02-8779-1006273d7864
2010-01-15 18:07:41 +00:00
DukePyrolator 1cf1f044fb burned helpserv from README
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2759 5417fbe8-f217-4b02-8779-1006273d7864
2010-01-15 05:40:26 +00:00
Adam- 525dfe12e6 Added param arg to ChannelModeSet/Unset events, and fixed it to not ignore status and list modes
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2758 5417fbe8-f217-4b02-8779-1006273d7864
2010-01-14 21:30:38 +00:00
Adam- 0d6fa568ec Use commasepstream in do_join and do_topic, much cleaner
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2757 5417fbe8-f217-4b02-8779-1006273d7864
2010-01-14 21:30:15 +00:00
Adam- fadc61f89e Fixed crash caused by r2732 caused by adding someone to the exception list
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2756 5417fbe8-f217-4b02-8779-1006273d7864
2010-01-14 21:29:39 +00:00
Adam- 711787b54d Burned do_sjoin and rewrote it to be sane. This changes how Anope handles new channel creations drasitcally as we now truely track it all instead of hack around it by not initially tracking user joins to new channels
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2755 5417fbe8-f217-4b02-8779-1006273d7864
2010-01-14 21:29:08 +00:00
sjaz f2c44c67b5 Update copyright for CBX
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2754 5417fbe8-f217-4b02-8779-1006273d7864
2010-01-11 20:28:59 +00:00
pimpmylinux 0a61c06860 updated copyright info for 2010
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2753 5417fbe8-f217-4b02-8779-1006273d7864
2010-01-11 19:36:24 +00:00
pimpmylinux ef442c3dc8 some language fixes ported from stable
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2751 5417fbe8-f217-4b02-8779-1006273d7864
2010-01-11 19:06:21 +00:00
Adam- 420b11a235 Rewrote the os_staff command to work properly with the account system. This also fixing displaying users on opered nicks when not on their main nick
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2749 5417fbe8-f217-4b02-8779-1006273d7864
2010-01-11 18:36:04 +00:00
Adam- 5ad60b70ee Forward port of r2747
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2748 5417fbe8-f217-4b02-8779-1006273d7864
2010-01-11 14:28:48 +00:00
Adam- b73210e538 Rewrote the code that handles and sends kicks
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2746 5417fbe8-f217-4b02-8779-1006273d7864
2010-01-10 22:56:03 +00:00
DukePyrolator 01d43e7db5 changed enc_sha256 to use random salts instead of a hardcoded salt
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2745 5417fbe8-f217-4b02-8779-1006273d7864
2010-01-10 19:58:32 +00:00
DukePyrolator 20b5056315 changed the source argument of enc_decrypt to const
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2744 5417fbe8-f217-4b02-8779-1006273d7864
2010-01-10 19:56:16 +00:00
DukePyrolator d66e928529 services will now send the correct message on /cs invite <nick>
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2742 5417fbe8-f217-4b02-8779-1006273d7864
2010-01-09 19:35:01 +00:00
DukePyrolator 4ae43c7dd2 added a salted sha256 encryption module
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2741 5417fbe8-f217-4b02-8779-1006273d7864
2010-01-09 08:56:58 +00:00
DukePyrolator 5e62e8f22e changed all password fields to std::string and reworked the way how the enc modules handle the passwords
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2740 5417fbe8-f217-4b02-8779-1006273d7864
2010-01-09 08:49:00 +00:00
DukePyrolator a4b015b39d fixed a crashbug in os_ignore on db saving and cleaned up the db code in hs_request
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2739 5417fbe8-f217-4b02-8779-1006273d7864
2010-01-09 06:54:11 +00:00
Adam- 0761d4f74b Fix crash caused by trying to add an akick to a channel when certain types of exceptions are set, this also fixes entry_match to match with case insensitivity, as bans/excepts/invexs arent case sensitive
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2738 5417fbe8-f217-4b02-8779-1006273d7864
2010-01-06 22:55:21 +00:00
Adam- e34448092e Messaging service@server.name works again as it should
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2737 5417fbe8-f217-4b02-8779-1006273d7864
2010-01-06 21:30:22 +00:00
Adam- 9124a3be53 Fixed windows build and cleaned up a few small things
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2736 5417fbe8-f217-4b02-8779-1006273d7864
2010-01-06 20:09:48 +00:00
cyberbotx b462814760 Changed 'char *' fields in BotInfo to 'std::string', cleanup of bots.cpp, changed many other functions to use 'const std::string &' arguments as a chain reaction.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2733 5417fbe8-f217-4b02-8779-1006273d7864
2010-01-04 06:40:24 +00:00
Adam- 2708eea5d1 Removed NICKMAX and CHANMAX, replaced user->nick, c->name, and ci->name with std::string
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2732 5417fbe8-f217-4b02-8779-1006273d7864
2010-01-04 05:45:58 +00:00
cyberbotx f58026749b Fixed base64 functions to be const safe until I can convert them to use std::string instead, also a little cleanup while I was in there.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2729 5417fbe8-f217-4b02-8779-1006273d7864
2010-01-03 07:42:49 +00:00
Adam- ed568f4750 Fixed db-convert to really convert vhosts
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2728 5417fbe8-f217-4b02-8779-1006273d7864
2010-01-03 04:36:36 +00:00
Adam- de824a599a Fixed bug #1121 - Fixes a potential crash when a user changes hosts
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2725 5417fbe8-f217-4b02-8779-1006273d7864
2010-01-02 08:21:12 +00:00
Adam- a819cb0cc0 Rewrote the vhost code, and moved it to be part of nickalias instead of in its own list. This also fixes being able to steal other users vhosts with /hs on
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2724 5417fbe8-f217-4b02-8779-1006273d7864
2010-01-02 08:20:59 +00:00
cyberbotx 3617d79788 Convert 'const char *' and 'char *' function arguments to 'const std::string &' instead, done in actions.c along with chain reactions in other files.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2723 5417fbe8-f217-4b02-8779-1006273d7864
2010-01-02 04:55:43 +00:00
Adam- 657e1deb59 Added in new plaintext databases. Note: This currently has no automatic backup feature. Big thanks to Phil on this for mass scale testing
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2722 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-31 01:25:10 +00:00
Adam- c595e6755d Fixed not being able to restart if anope was started from outside of the directory it is in
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2721 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-30 23:18:16 +00:00
Adam- 4fd169b184 Added in support for permanet channel modes on non-registered channels
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2720 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-30 02:07:17 +00:00
Adam- 7665af27cd Chnaged ChannelModeSet/Unset events to be able to block checks such as secureops and mlock, and made it so you can't set a mode already set or unset a mode already unset so the modestacker doesn't send modes it doesn't need to
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2719 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-29 23:16:10 +00:00
sjaz df107dac1f Fix small typo in services.conf - thanks Phil.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2718 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-27 19:20:26 +00:00
Adam- bfd252b517 Send only the newly formatted users string to do_sjoin when using inspircd12, not the old one and the new one, as this implies the old users are parameters for modes, which makes mode manager unhappy
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2717 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-25 20:42:02 +00:00
DukePyrolator 90a500ffd6 fixed a small bug in the extensible class
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2716 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-25 19:11:04 +00:00
Adam- 80cbac3769 Replaced some static_casts related to modes with dynamic_cast - its a bit safer
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2715 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-23 08:41:22 +00:00
Adam- f82640af7c Fixed bug #1119 - Fixed a few help replies to respect the nickserv msg option when sending blank lines
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2714 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-22 23:59:06 +00:00
cyberbotx 77f0cd0c46 Change OperType's name to be ci::string instead of std::string, should hopefully make it so it doesn't matter what case is used in the oper blocks compared to the opertype blocks.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2713 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-21 02:30:14 +00:00
Adam- 7a7f1f8390 Rewrote part of extensible, it will now automatically unallocate memory for us so we don't have to manually delete it everywhere anymore
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2711 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-20 18:39:52 +00:00
Adam- 861fe9e7b3 Added BotInfo* sender arg to all of the User mode functions, changed IRcdProto::SendMode for channels to accept a Channel pointer and fixed unsetting users vhosts on Unreal
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2710 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-17 02:10:35 +00:00
Adam- 453963eeae Moved /chanserv unban to its own module and added support for unbanning a nickname, this readds !unban nick
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2709 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-16 23:50:33 +00:00
Adam- aad1a4ca8d Hopefully this fixes detecting if Unreal sends a TS at the end of the mode string and removing it, which keeps it from being passed to mode handler
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2708 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-16 23:50:19 +00:00
Adam- c6e3324b30 Made many of the functions in IRCDProto accept the relative object pointers instea of char* everywhere, and updated TODO
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2706 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-16 02:25:38 +00:00
robbeh 98aa38d800 Added !K trigger to kick people and updated Changes
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2705 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-15 21:31:53 +00:00
robbeh f1c975c89f Added a KB alias to ban to allow the !kb fantasy trigger
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2704 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-15 21:29:48 +00:00
Adam- 3beac16030 More work on db-convert, almost done. This also moves the bot section of the db above the chan section, so we can check if channel bot names are valid
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2703 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-14 23:52:59 +00:00
Adam- 511c4b73d2 Updated docs/IRCD to reflect recent changes in the ircdvar struct, and made botinfo constructors set created time not bs_bot, db loaders will change it later if needed
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2702 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-14 21:58:33 +00:00
Adam- 6f5bc22584 Did some more work on db-convert
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2701 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-14 03:50:27 +00:00
Adam- 744d6d4030 Set the created time for BotServ bots correctly
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2700 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-14 03:50:23 +00:00
Adam- d4af97a7a7 Ripped out old databases
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2699 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-14 00:56:58 +00:00
Adam- 710355fd2c Don't allow mlocking/defconing modes such as beIohv
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2698 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-13 23:14:20 +00:00
Adam- 46c0d40009 Moved hostserv/set priv to commands, only check for HasCommand() when trying to execute commands and not HasPriv(), as Privs should never be necessary to execute any command
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2697 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-13 19:57:22 +00:00
Adam- a7ac6a0ac7 Added in a modestacker and rewrote almost all of the remaining old mode code
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2696 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-13 19:32:19 +00:00
DukePyrolator 3a956c51be do not show the NICK_INFO_FOR_MORE message when the user has no permission to do it
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2695 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-11 21:17:08 +00:00
Adam- 280dcc7597 Only show the user as online in /nickserv info if they are identified for the group of that nick
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2693 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-08 02:33:39 +00:00
DukePyrolator 37de1286fa added a function to convert some mlock modes
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2692 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-07 22:30:43 +00:00
Adam- 4630ae454a Added options:mlock in the config so you can set what modes should be locked on new channels
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2690 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-05 22:12:48 +00:00
Adam- 42b8cfe404 Got rid of some now unnecessary code in config.c and moved Config.Opers.clear() to InitOpers where it belongs
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2689 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-05 21:04:15 +00:00
cyberbotx 935c1974e8 Fix crontab script to correctly find services.pid, it's not in ~/anope/bin, it's in ~/anope/data.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2687 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-05 16:27:35 +00:00
Adam- f913188991 Added ci::string to run-cc.pl message filters, and fixed irc::string to display properly aswell
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2686 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-05 06:11:23 +00:00
Adam- eadf52caf2 Added ns_resetpass which can be used to reset user passwords by email, very useful if you're using encryption
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2685 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-05 05:44:02 +00:00
Adam- 661755a199 Fixed crash when using smartjoin and assigning a bot to an +i channel, reported by Platzii
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2684 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-04 23:11:08 +00:00
DukePyrolator 17a4789c1c some code cleanup
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2682 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-04 06:32:17 +00:00
Adam- 180ac9e4d2 Changed Extensible::Extend to not unnecessarially cast every pointer it recieves to char* and then to void*, but to just change it to void*. This allows storing of various things that the char* cast messed up, such as time_t etc
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2681 5417fbe8-f217-4b02-8779-1006273d7864
2009-12-03 01:17:08 +00:00
DukePyrolator d4b595fdb8 the database converter can now convert the operserv database
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2678 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-29 20:55:41 +00:00
DukePyrolator f9cd8c200c the database converter can now handle a broken bot.db from 1.9.0
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2677 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-29 09:32:32 +00:00
DukePyrolator 0557f090fb fixed some bugs in the database converter
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2676 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-29 08:31:44 +00:00
DukePyrolator 23b3382347 updated database converter
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2675 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-29 07:56:35 +00:00
Adam- a08b3ec592 Massive move of all of the Config variables out of global scope to the Config class
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2674 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-28 23:02:07 +00:00
Adam- f6b823ade8 Set all of the default channel flags on new channels. Thix fixes persistant not being set on newly registered channels
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2673 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-27 07:41:21 +00:00
Adam- 4fac8d6a91 Foward port of part of r2668
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2669 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-25 21:38:50 +00:00
DukePyrolator 4f550d29aa fixed a crash when a user connects without a vhost
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2666 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-24 06:19:32 +00:00
Adam- 68ef593292 Properly remove users on access lists that are below voice status when converting to XOP
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2664 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-24 03:05:38 +00:00
Adam- 24f7ffcf18 Remove the permanent channel mode from channels that are dropped/expired/etc
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2663 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-24 01:19:12 +00:00
Adam- c3529b6129 Marked +l and +L on InspIRCd 1.2 as minus no arg
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2662 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-24 01:18:59 +00:00
DukePyrolator c7893e471f updated french lang file. patch provided by nemosphere
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2661 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-21 20:51:01 +00:00
Adam- e514a3793d Changed the mode param handling code to be more into the general mode handling code, this cleans up and fixes some small problems with mlocking params. This also helps clarify that the ChannelInfo mode functions are for mlock only. Also, this adds the OnMLock and OnUnMLock events which can be used to control if something can be (un)mlocked
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2660 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-19 01:53:03 +00:00
Adam- 68381e69d9 Fix compile errors on some compilers that did not like our overloaded operators << on std::ostream
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2659 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-19 01:52:52 +00:00
cyberbotx aa421772e0 Make the correct folder be chmod'd on a *nix install of the tools directory (we got rid of installing the tools to a tools directory a long while back, now they go in the bin directory instead)
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2658 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-18 13:02:22 +00:00
Adam- 5179a0a40f Delete the correct entries from akick and badwords list when given a numlist
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2657 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-18 02:51:46 +00:00
cyberbotx da8a1c7b60 Remove some CoreExports and add them in other places, fixed a few minor warnings under Windows build, made Windows build create a static library out of win32_memory.cpp and use that with everything instead of relying on it being compiled into everything (saves compiling time).
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2656 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-18 01:05:12 +00:00
cyberbotx e10fe1cd76 Removed some unnecessary casts, used C++-style casts over C-style casts, fixed a few warnings (one possibly fatal one).
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2655 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-17 04:04:24 +00:00
Adam- 88330c07ad Cleand up alot of the code in bs_badwords, made it much more C++-ish
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2654 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-17 03:15:31 +00:00
cyberbotx 88c0edc8f8 Fix the EXTRA_CONFIG_ARGS part of Config so it actually gets used, and doesn't get clobbered on no input.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2653 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-16 12:59:31 +00:00
Adam- d82771900e Made the 'Module compiled against current version of Anope' message debug only
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2652 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-16 02:38:46 +00:00
cyberbotx 7eadde9911 Possible fix for header dependency calculation causing CMake to freeze due to recursive including, fixed by removing my code to do that and letting CMake figure this out on it's own. Seems to work here, but might need testing still.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2651 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-15 21:14:11 +00:00
Adam- 8e8a1d96e4 Fixed potential segfault when deleting users from the access list by number, reported by Cronus
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2650 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-14 05:10:34 +00:00
Adam- 842b5609dc Updated docs dir, specifically the IRCD and EVENTS file to be up to date with 1.9s new systems
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2648 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-13 23:52:37 +00:00
Adam- 960968b8cd Made /nickserv group work properly with the new account system
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2647 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-13 02:56:47 +00:00
Adam- 9c6576f78e Fix bug introduced in r2574 that would set passwords incorrectly when using enc_none
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2646 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-12 02:52:27 +00:00
Adam- 65628dfdec Fix default OnSyntaxError subcommand to be the last param if its size is less than the minimum required for the command
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2645 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-12 00:28:09 +00:00
Adam- 848c0aaa21 Made Command::Execute's params const
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2644 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-12 00:28:05 +00:00
Adam- d16f4930f4 Made Command::OnSyntaxError accept a subcommand parameter, we now give syntax error messages for subcommands (eg, cs_set) instead of giving the general syntax error for the main command
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2643 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-11 23:43:02 +00:00
Adam- 30b7e50a43 Replaced all of the char* params in cs_set with ci::string so we dont use stricmp all over, and updated coding style
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2642 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-11 07:57:03 +00:00
Adam- 0264072b53 Made disabling chanserv levels *really* disable them so noone can use them (even founder), and have the ability to set it to 10000 for founders.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2641 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-11 07:20:44 +00:00
Adam- 0bd3141407 Made DefCon not use a ChannelInfo structure for saving its modes & params, it was ugly
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2640 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-11 06:03:40 +00:00
Adam- b9190ebc16 Moved alot of stuff to constructors and destructors, instead of having functions everywhere to create and destroy objects
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2639 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-11 06:03:25 +00:00
Adam- 86e43f1f14 Added support for permanent channels. This supports both permanent channel modes and the ability to have BotServ bots stay in the channel to keep it open.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2638 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-11 02:47:05 +00:00
Adam- 9d37cf1d5a Made the Module::ServHelp() functions part of the event system
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2637 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-08 23:43:51 +00:00
Adam- 458be36a32 Rewrote all of the old C style flag systems into a new Flag class which everything inherits from. This breaks reading and writing flags to the old databases (and probably many other things aswell) - Don't use it
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2636 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-08 20:06:21 +00:00
Adam- 38ad96c57c Fixed /chanserv help forbid to allow you to forbid unregistered channels
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2634 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-08 19:53:05 +00:00
Adam- 1c1312624d Rewrote BuildStringList to use std::list instead of char**
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2632 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-08 18:00:54 +00:00
cyberbotx 608b63d979 Make CMake ignore the CMakeFiles directory, really only applies to Win32 build since it still allows in-source builds (unlike the *nix build).
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2631 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-08 15:42:38 +00:00
Adam- 9047b0347d Made mlock_on, mlock_off, access, and akick private in ChannelInfo
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2630 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-07 21:46:58 +00:00
Adam- 029f39964b Rewrote all of the akick code to be much cleaner
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2613 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-07 18:09:09 +00:00
Adam- 2ec83162d6 Added src/regchannel.cpp and moved the code from include/regchannel.h there
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2612 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-06 02:46:29 +00:00
Adam- 3317f406d2 Added /chanserv access view, which shows the access creator and last time used
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2611 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-06 02:08:15 +00:00
Adam- 95a017db9f Dont allow sending empty mode strings in check_modes
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2610 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-05 13:35:09 +00:00
Adam- 187868def9 Removed trailing -'s on mode strings sent in check_modes
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2609 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-05 03:32:33 +00:00
Adam- 154b0ded37 Rewrote part of check_modes to keep it from sending empty mode strings
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2608 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-04 23:28:40 +00:00
Adam- 3125c632b5 Made the -nothird optopn work
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2607 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-04 00:34:57 +00:00
Adam- 921ddbd517 Added OnPreNickExpire and OnPreChanExpire events, which can keep nicks and channels from expiring
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2605 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-03 02:05:45 +00:00
Adam- 65deeaf1e6 Moved some of the news variables out of the news module so other modules etc can access them, if needed
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2604 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-03 02:05:38 +00:00
DukePyrolator a1fe864c7f check for umode +r before sending svsmode -r
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2603 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-02 06:04:27 +00:00
DukePyrolator 9a0b1efc24 added a way to load multiple encryption modules at the same and to switch between encryption methods
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2602 5417fbe8-f217-4b02-8779-1006273d7864
2009-11-02 05:22:35 +00:00
Adam- d2362719b2 Made do_nick return the user if I_OnPreUserConnect halts it if the user still exists, and removed unused defcon language string
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2600 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-30 17:13:50 +00:00
Adam- 987f371c0b Removed channel passwords and added /chanserv QOP command to add additional channel founders, aswell as access level 10000
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2599 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-30 02:38:06 +00:00
Adam- 6a9fa9f4d2 Rewrote all of the defcon code, and moved most of it to os_defcon. This fixes defcon to have the ability to use modes introduced to Anope at a later time than on startup (eg, from the IRCd), amongst other things
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2597 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-30 01:04:13 +00:00
Adam- 5fc268b750 Added I_OnPreUserConnect, I_OnUserModeAdd, and I_OnUserModeAdd events
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2596 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-30 01:03:54 +00:00
Adam- 5b62682223 Changed the "nickserv/confirm" opertype command to a permission, and added "nickserv/drop" permission used to drop other users nicks
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2595 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-29 00:44:26 +00:00
DukePyrolator 0b64cbc1d2 renaming to guestnick was not working properly
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2594 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-28 22:12:36 +00:00
Adam- fa622b4e9f Remove NickServ timers from TimerManager if we need to delete them, not just from NickServs timers - Fixes segfault reported by phantomal
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2593 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-28 15:12:47 +00:00
Adam- 52593ef71b Cleaned up some of the code in my last commit and made it a bit more consistant.. probably should have done this before but owell
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2592 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-27 13:19:01 +00:00
cyberbotx 9e48e683e7 Fix bug #1111, BS KICK should properly handle the CAPS, FLOOD, and REPEAT options now.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2591 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-27 11:52:51 +00:00
Adam- c64c2b6fd0 Rewrote part of chan_set_correct_modes and set Mode::ModeChar correctly
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2590 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-27 01:42:10 +00:00
Adam- a491eed3ff Added MinusNoArg to insp modes Ffj and unreal mode j
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2589 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-25 14:32:38 +00:00
Adam- a43424dbb9 Added internal tracking of InspIRCd1.2 channel modes BFfjMPT and user modes BcdGHIkQRSW, also added tracking of Unreal3.2s channel mode j
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2588 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-25 06:32:47 +00:00
Adam- 13f92e03be Document /ns confirm nick in /ns help confirm for services operators
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2587 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-25 04:13:07 +00:00
Adam- 6e3aa36876 Fixed passing invalid channel pointer to OnPartChannel if the last user in a channel parted, now we use NULL and just give it the channel name
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2586 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-25 04:12:54 +00:00
Adam- 7a429517af added options:enablelogchannel config file option, which turns on the logchannel on startup. yay!
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2585 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-25 04:12:47 +00:00
Adam- 0e8de37778 Rewrote part of news system and moved it all to os_news.c. Removed src/news.c
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2584 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-25 04:12:34 +00:00
Adam- 338cb38ee8 Added 4 new events for (un)setting modes on channels and users
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2583 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-25 04:12:21 +00:00
Adam- 8330009373 Actually use the I_OnRestart event
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2582 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-25 04:12:13 +00:00
Adam- 5ab705b6fe Fixed memos so identified users not on the nick's access list can send them
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2581 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-25 04:12:08 +00:00
cyberbotx a6c5207859 Move 1.9.1 TODO to Changes (as 1.9.1 was released), update Changes.conf, Changes.lang, and remove Changes.mysql (probably should've been done before 1.9,1's release, but better late than never).
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2580 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-24 03:49:49 +00:00
sjaz 2361cb8d40 Couple of typos in hs_request. Thanks Fudge.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2579 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-23 10:04:53 +00:00
sjaz d08461907c Couple more typo's from Fudge, cheers!
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2578 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-22 11:10:16 +00:00
sjaz fb997c5057 Fixed typo in example.conf. Thanks Fudge.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2577 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-22 09:12:07 +00:00
Adam- 6de7cb6eed Added SUFFIXES .c .cpp .so to makefiles to clean up some of the code
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2576 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-20 21:39:13 +00:00
Adam- 624c5ba5b6 Fixed makesfiles to work on both bsd make and gnu make
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2575 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-20 21:05:51 +00:00
cyberbotx 0b3824c86a Apply some changes based on possible "flaws" found with flawfinder.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2574 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-20 04:34:03 +00:00
cyberbotx 0d3ec454de Fix a few things that bugged me when I was working on one of my own modules.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2573 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-18 21:10:39 +00:00
jantje_85 12ac162d9e Fixed small typo in dutch translation.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2572 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-18 18:45:18 +00:00
Adam- d935d3d1b8 Call I_OnUserConnect and display news before checking if the user should be killed by sessions, sessions checking can delete the user if the IRCd doesn't send QUITs on KILL which could cause a segfault
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2570 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-17 20:24:10 +00:00
Adam- b705f7eda6 Fix crash when trying to parse a USERHOST reply for a nonexistant user on Unreal
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2569 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-17 18:33:25 +00:00
cyberbotx 00494c9020 dos2unix on files.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2568 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-17 15:45:19 +00:00
Adam- bbea1b5679 Give the proper error messages when trying to load/unload already loaded/unloaded modules, instead of just returning syntax error
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2567 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-17 01:17:19 +00:00
Adam- 72fed4d9bb Renamed OnServerConnect(Server*) event to OnNewServer, we have two OnServerConnect's which is slightly confusing...
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2566 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-17 01:17:06 +00:00
Adam- 63f55fa78b Made MOD_STOP returned from commands really halt processing (stops OnPostCommand event being called)
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2565 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-17 01:17:00 +00:00
Adam- 11709eade6 Use the most recent NickServ collide/release timer for a nick instead of using the old and rejecting new ones
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2564 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-17 01:16:55 +00:00
Adam- 3806cd8440 Fixed bug #1110 - Fixed tracking of NickServ collide/release timers to only attempt to delete real ones
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2563 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-16 17:38:21 +00:00
Adam- f6510291aa Fixed inspircd12.cpp to actually work
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2562 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-14 17:39:25 +00:00
cyberbotx de917994f8 Fix CMake build generation, it was getting into an infinite loop due to the include of services.h inside of regchannel.h, will not happen now.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2561 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-13 23:58:56 +00:00
Adam- d3d64c27b1 Complete rewrite of everything associated with modes, this breaks saving and reading mlocked modes from the databases until the new databases are implemented
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2560 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-13 21:26:38 +00:00
sjaz 1fd6685132 Bump for SVN Version 1.9.2
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2559 5417fbe8-f217-4b02-8779-1006273d7864
2009-10-13 17:06:06 +00:00
566 changed files with 227362 additions and 165301 deletions
+3 -4
View File
@@ -1,5 +1,4 @@
/autom4te.cache
Makefile
config.cache
config.log
config.status
include/version.h
include/sysconf.h
build/
+74 -104
View File
@@ -21,13 +21,19 @@ if(HAS_PATCH)
string(REGEX REPLACE "(.*)-patch .*" "\\1" MINOR_VERSION "${ONLY_VERSION}")
string(REGEX REPLACE ".*-patch (.*)" "\\1" PATCH_VERSION "${ONLY_VERSION}")
else(HAS_PATCH)
string(REGEX REPLACE "(.*)-beta" "\\1" MINOR_VERSION "${ONLY_VERSION}")
if(MINOR_VERSION STREQUAL "4-1\n")
set(PATCH_VERSION 1)
else(MINOR_VERSION STREQUAL "4-1\n")
set(PATCH_VERSION 0)
endif(MINOR_VERSION STREQUAL "4-1\n")
set(MINOR_VERSION 4)
string(REGEX MATCH "\\." HAS_DOT "${ONLY_VERSION}")
if(HAS_DOT)
string(REGEX REPLACE "(.*)\\..*" "\\1" MINOR_VERSION "${ONLY_VERSION}")
string(REGEX REPLACE ".*\\.(.*)" "\\1" PATCH_VERSION "${ONLY_VERSION}")
else(HAS_DOT)
string(REGEX REPLACE "(.*)-beta" "\\1" MINOR_VERSION "${ONLY_VERSION}")
if(MINOR_VERSION STREQUAL "4-1\n")
set(PATCH_VERSION 1)
else(MINOR_VERSION STREQUAL "4-1\n")
set(PATCH_VERSION 0)
endif(MINOR_VERSION STREQUAL "4-1\n")
set(MINOR_VERSION 4)
endif(HAS_DOT)
endif(HAS_PATCH)
# Detect is we are using CMake 2.6 or better, these versions include functions that require less work than CMake 2.4 does
@@ -62,7 +68,7 @@ else(MINOR_VERSION GREATER 5)
endif(MINOR_VERSION GREATER 5)
# Override the module include path to include our directory, for our Anope.cmake, as well as we are using our own version of the NSIS template
set(CMAKE_MODULE_PATH ${Anope_SOURCE_DIR})
set(CMAKE_MODULE_PATH ${Anope_SOURCE_DIR}/cmake)
include(Anope)
@@ -99,9 +105,13 @@ if(CMAKE_COMPILER_IS_GNUCXX)
if(DEFAULT_LIBRARY_DIRS)
remove_list_duplicates(DEFAULT_LIBRARY_DIRS)
endif(DEFAULT_LIBRARY_DIRS)
# Create a temporary file to test for the default include directories
FILE(WRITE empty.cpp "")
# Next, we look for the compiler's default include directories
# Run the command to find the default include directories
execute_process(COMMAND ${CMAKE_C_COMPILER} -v -x c++ -E ${CMAKE_CURRENT_SOURCE_DIR}/empty.c ERROR_VARIABLE LINES OUTPUT_QUIET ERROR_STRIP_TRAILING_WHITESPACE)
execute_process(COMMAND ${CMAKE_C_COMPILER} -v -x c++ -E ${CMAKE_CURRENT_SOURCE_DIR}/empty.cpp ERROR_VARIABLE LINES OUTPUT_QUIET ERROR_STRIP_TRAILING_WHITESPACE)
# Remove the empty file, it is no longer needed
FILE(REMOVE empty.cpp)
# Convert the new lines to semicolons
string(REGEX REPLACE "\n" ";" LINES ${LINES})
# Temporary variable saying if we are in the search list or not
@@ -197,6 +207,15 @@ else(CMAKE244_OR_BETTER)
include(TestCXXAcceptsFlag)
endif(CMAKE244_OR_BETTER)
# If extra directories were specified, tell cmake about them.
if(EXTRA_INCLUDE)
include_directories(${EXTRA_INCLUDE})
link_directories(${EXTRA_INCLUDE})
endif(EXTRA_INCLUDE)
# Find gettext
find_package(Gettext)
# Add an optional variable for using run-cc.pl for building, Perl will be checked later regardless of this setting
option(USE_RUN_CC_PL "Use run-cc.pl for building" OFF)
@@ -221,11 +240,12 @@ if(MSVC)
else(MSVC)
# Set the compile flags to have all warnings on (including shadowed variables)
set(CXXFLAGS "${CXXFLAGS} -Wall -Wshadow")
# If on a *nix system, also set the compile flags to remove GNU extensions (favor ISO C++) as well as reject non-ISO C++ code, also remove all leading underscores in exported symbols
# If on a *nix system, also set the compile flags to remove GNU extensions (favor ISO C++) as well as reject non-ISO C++ code, also remove all leading underscores in exported symbols (only on GNU compiler)
if(UNIX)
set(CXXFLAGS "${CXXFLAGS} -ansi -pedantic -fno-leading-underscore")
# Set the module-specific compile flags to the same setting as the compile flags
set(MODULE_CXXFLAGS "${CXXFLAGS}")
set(CXXFLAGS "${CXXFLAGS} -ansi -pedantic")
if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
set(CXXFLAGS "${CXXFLAGS} -fno-leading-underscore")
endif(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
# If we aren't on a *nix system, we are using MinGW
else(UNIX)
# Also, if we are building under MinGW, add another define for MinGW
@@ -280,6 +300,13 @@ if(NOT MSVC)
if(HAVE_NSL_LIB)
set(LDFLAGS "${LDFLAGS} -lnsl")
endif(HAVE_NSL_LIB)
# Check if pthread_create is within the pthread library (if the library exists), and add it to the linker flags if needed
check_library_exists(pthread pthread_create "" HAVE_PTHREAD)
if(HAVE_PTHREAD)
set(LDFLAGS "${LDFLAGS} -pthread")
else(HAVE_PTHREAD)
message(FATAL_ERROR "The pthread library is required to build Anope")
endif(HAVE_PTHREAD)
endif(NOT WIN32)
endif(NOT MSVC)
@@ -292,13 +319,18 @@ if(NOT DEFUMASK)
endif(RUNGROUP)
endif(NOT DEFUMASK)
# Set the DEBUG_BUILD for sysconf.h
if(CMAKE_BUILD_TYPE STREQUAL "DEBUG" OR CMAKE_BUILD_TYPE STREQUAL "RELWITHDEBINFO")
set(DEBUG_BUILD TRUE)
endif(CMAKE_BUILD_TYPE STREQUAL "DEBUG" OR CMAKE_BUILD_TYPE STREQUAL "RELWITHDEBINFO")
# Check for the existance of the following include files
check_include_file(sys/types.h HAVE_SYS_TYPES_H)
check_include_file(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(gethostbyname HAVE_GETHOSTBYNAME)
check_function_exists(gettimeofday HAVE_GETTIMEOFDAY)
check_function_exists(setgrent HAVE_SETGRENT)
check_function_exists(strcasecmp HAVE_STRCASECMP)
@@ -307,6 +339,7 @@ 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 for the existance of the following types
check_type_size(uint8_t UINT8_T)
@@ -349,8 +382,8 @@ else(INSTDIR)
endif(INSTDIR)
# Version number processing
# Find all lines in version.log that start with VERSION_
read_from_file(${Anope_SOURCE_DIR}/version.log "^VERSION_" VERSIONS)
# Find all lines in src/version.sh that start with VERSION_
read_from_file(${Anope_SOURCE_DIR}/src/version.sh "^VERSION_" VERSIONS)
# Iterate through the strings found
foreach(VERSION_STR ${VERSIONS})
# Get the length of the string
@@ -365,6 +398,25 @@ foreach(VERSION_STR ${VERSIONS})
set(VERSION_${VERSION_TYPE} ${VERSION})
endforeach(VERSION_STR ${VERSIONS})
# Default build version to 0
set(VERSION_BUILD 0)
# Only change the build number if version.h exists
if(EXISTS "${Anope_SOURCE_DIR}/include/version.h")
# Attempt to read the build number from include/version.h
read_from_file(${Anope_SOURCE_DIR}/include/version.h "^#define VERSION_BUILD" VERSIONS)
foreach(VERSION_STR ${VERSIONS})
# Get the length of the string
string(LENGTH ${VERSION_STR} VERSION_LEN)
# Subtract 22 from the string's length
math(EXPR VERSION_NUM_LEN "${VERSION_LEN} - 22")
# Extract the value from the string
string(SUBSTRING ${VERSION_STR} 22 ${VERSION_NUM_LEN} VERSION)
# Set VERSION_BUILD correctly
set(VERSION_BUILD ${VERSION})
endforeach(VERSION_STR ${VERSIONS})
endif(EXISTS "${Anope_SOURCE_DIR}/include/version.h")
# Set the version variables based on what was found above
set(VERSION_COMMA "${VERSION_MAJOR},${VERSION_MINOR},${VERSION_PATCH},${VERSION_BUILD}")
set(VERSION_DOTTED_NOBUILD "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}")
@@ -375,91 +427,11 @@ set(VERSION_FULL_NOBUILD "${VERSION_DOTTED_NOBUILD}${VERSION_EXTRA}")
# Only do the following for Windows
if(WIN32)
# Generate the win32.rc file using the above variables
configure_file(${Anope_SOURCE_DIR}/src/win32.rc.cmake ${Anope_BINARY_DIR}/src/win32.rc)
configure_file(${Anope_SOURCE_DIR}/src/win32/win32.rc.cmake ${Anope_BINARY_DIR}/src/win32/win32.rc)
endif(WIN32)
# Calculate dependencies for each header
# I would've done this inside the CMakeLists.txt for the include directory, but since it's added AFTER everything else, it won't help...
# Firstly, find all the header files
file(GLOB_RECURSE ALL_HEADERS "*.h")
# Iterate through the headers
foreach(HEADER ${ALL_HEADERS})
# Don't process the file if it's in an obsolete directory
if(NOT HEADER MATCHES ".*obsolete.*")
append_to_list(TMP_HEADERS ${HEADER})
# In addition, also set up a variable to store the fullpath of the header, in a variable prefixed with just the header's filename for easy access later
get_filename_component(HEADER_FILENAME ${HEADER} NAME)
set(${HEADER_FILENAME}_FULLPATH ${HEADER})
endif(NOT HEADER MATCHES ".*obsolete.*")
endforeach(HEADER)
# Set the list of headers to be all the non-obsolete ones, then sort the list
if(TMP_HEADERS)
set(ALL_HEADERS ${TMP_HEADERS})
sort_list(ALL_HEADERS)
endif(TMP_HEADERS)
# Preparse step 1: get filenames sans paths
# Iterate through the headers
foreach(HEADER ${ALL_HEADERS})
# Find all the lines in the current header that have any form of #include on them, regardless of whitespace
read_from_file(${HEADER} "^[ \t]*#[ \t]*include[ \t]*\".*\"[ \t]*$" INCLUDES)
# Get the filename only of the header we just checked
get_filename_component(HEADER_FILENAME ${HEADER} NAME)
# Iterate through the strings containing #include (if any)
foreach(INCLUDE ${INCLUDES})
# Extract the filename from the #include line
extract_include_filename(${INCLUDE} FILENAME)
# Append this filename to the list of headers for the header we are checking
append_to_list(${HEADER_FILENAME}_HEADERS ${FILENAME})
endforeach(INCLUDE)
endforeach(HEADER)
# Preparse step 2: for every header from above that had includes, recursively find the headers each header relies on
# Iterate through the headers (again)
foreach(HEADER ${ALL_HEADERS})
# Get the filename only of the current header
get_filename_component(HEADER_FILENAME ${HEADER} NAME)
# If there were any include, we'll be checking them
if(${HEADER_FILENAME}_HEADERS)
# Set the variables, old for all previously found headers, new for all newly found headers
set(OLD_HEADERS)
set(HEADERS ${${HEADER_FILENAME}_HEADERS})
set(NEW_HEADERS)
# Loop as long as there are still headers to be parsed
while(HEADERS)
# Iterate through the list of the current headers
foreach(CURR_HEADER ${HEADERS})
# If that header has headers it relies on, we'll add them to the list of new headers
if(${CURR_HEADER}_HEADERS)
foreach(CURR_HEADERS_HEADER ${${CURR_HEADER}_HEADERS})
append_to_list(NEW_HEADERS ${CURR_HEADERS_HEADER})
endforeach(CURR_HEADERS_HEADER)
endif(${CURR_HEADER}_HEADERS)
endforeach(CURR_HEADER)
# Append the headers we checked to the old headers
append_to_list(OLD_HEADERS ${HEADERS})
# Set the headers to check to the new headers (it may be empty and that'll exit the loop)
set(HEADERS ${NEW_HEADERS})
# Erase the new headers
set(NEW_HEADERS)
endwhile(HEADERS)
# OLD_HEADERS will now contain all headers that the current header relies on, remove duplicate headers from the list and sort the list
remove_list_duplicates(OLD_HEADERS)
sort_list(OLD_HEADERS)
# Set the current header's list of headers to the cleaned up list from above
set(${HEADER_FILENAME}_HEADERS ${OLD_HEADERS})
endif(${HEADER_FILENAME}_HEADERS)
endforeach(HEADER)
# The following headers are generated from CMake rules and won't be found with the above
append_to_list(ALL_HEADERS ${Anope_BINARY_DIR}/lang/language.h ${Anope_BINARY_DIR}/include/sysconf.h ${Anope_BINARY_DIR}/include/version.h)
set(language.h_FULLPATH ${Anope_BINARY_DIR}/lang/language.h)
set(sysconf.h_FULLPATH ${Anope_BINARY_DIR}/include/sysconf.h)
set(version.h_FULLPATH ${Anope_BINARY_DIR}/include/version.h)
# Add the initial files to ignore which will be ignored regardless of if you are building in-source or out-of-source
add_to_cpack_ignored_files(".git\;config.cache\;.svn\;CMakeFiles\;sysconf.h$\;Makefile.inc$\;config.log\;config.status\;build\;autom4te.cache" TRUE)
add_to_cpack_ignored_files(".git\;config.cache\;CMakeFiles\;sysconf.h$\;build" TRUE)
# Add the files we don't want the periods converted for
add_to_cpack_ignored_files(".\\\\\\\\.so$;.\\\\\\\\.o$;.\\\\\\\\.s$;${Anope_SOURCE_DIR}/Makefile$")
# If the two directories are the same, we are building in-source, thus we need to ignore more files from the build
@@ -479,6 +451,7 @@ add_subdirectory(data)
add_subdirectory(docs)
add_subdirectory(lang)
add_subdirectory(src)
add_subdirectory(modules)
add_subdirectory(include)
# Get the filename of the Anope binary, to use later
@@ -498,12 +471,9 @@ if(NOT WIN32 AND RUNGROUP)
endif(NOT WIN32 AND RUNGROUP)
# On Windows platforms, install extra files
if(WIN32)
install(FILES ${Anope_SOURCE_DIR}/anope.bat
install(FILES ${Anope_SOURCE_DIR}/src/win32/anope.bat
DESTINATION bin
)
install(FILES ${Anope_SOURCE_DIR}/Changes ${Anope_SOURCE_DIR}/Changes.conf ${Anope_SOURCE_DIR}/Changes.lang
DESTINATION .
)
endif(WIN32)
# Only process the CPack section if we have CPack
@@ -534,8 +504,8 @@ if(EXISTS "${CMAKE_ROOT}/Modules/CPack.cmake")
)
# The following doesn't work, but a bug report has been filed about it
#set(CPACK_CREATE_DESKTOP_LINK_${SERVICES_BINARY} TRUE)
set(CPACK_NSIS_MUI_ICON "${Anope_SOURCE_DIR}/src\\\\anope-icon.ico")
set(CPACK_NSIS_MUI_UNIICON "${Anope_SOURCE_DIR}/src\\\\anope-icon.ico")
set(CPACK_NSIS_MUI_ICON "${Anope_SOURCE_DIR}/src\\\\win32\\\\anope-icon.ico")
set(CPACK_NSIS_MUI_UNIICON "${Anope_SOURCE_DIR}/src\\\\win32\\\\anope-icon.ico")
set(CPACK_NSIS_INSTALLED_ICON_NAME "${SERVICES_BINARY}")
set(CPACK_NSIS_URL_INFO_ABOUT "http://www.anope.org/")
set(CPACK_NSIS_COMPRESSOR "/SOLID lzma")
-59
View File
@@ -1,59 +0,0 @@
Anope Version 1.9.1
--------------------
F Don't enforce akick/forbidden/etc.-restrictions on clients on ulined servers.
Provided by Ankit <ankit@nevitus.com> - 2009
F Segfault on shutdown
Provided by Adam <adam@anope.org> - 2009
F NickServ registration is sometimes denied.
F Applied patch from Adam to fix some potential screwups
F More fixes to bs_bot from Adam, plus an extra fix within DoAdd not covered in Adam's patch.
F Fix bs_bot to use the correct parameters, patch from Adam.
F Fix for bug #1004, based from second half of patch from Adam.
F Partial patch by Adam, commenting fix for #1006 for future reference.
F Forward-port r1946: Patch by Adam fixing #1006 (originally caused by #922): modes set by ChanServ are reversed. Thanks!
Provided by DukePyrolator <dukepyrolator@gmx.de> - 2009
F Patch converting all match calls to new method, thanks!
F Add 'w' and 'y' support to dotime(), also prevent an overflow.
F Allow NS STATUS from unregistered users, thanks DP!
F Wild pointers do not a happy Anope make. Thanks DP :)
F Allow NS REGISTER to unregistered nicks, silly oversight. Thanks DP! :)
F Fix call order, thanks to DP
F Pass the right array to do_umode(), fixes mode tracking on Unreal. Thanks to DukePyrolator (yet again :P)
F Fix bs_set help, thanks to DukePyrolator! :)
F Fix two segfaults, noted by DukePyrolator. Thanks!
F Fix part one of #1010, reported by DukePyrolator. (Language settings are not respected in message sending.) Thanks!
F Memory leak on +beI modes.
Anope Version 1.9.0
--------------------
F Modified compile to use g++
F Improve protocol modules support (classes, virtual methods, etc)
F Move core services to use BotInfo
F Move BotInfo and related methods into a class
F Move modules into a class
F Fixed ns resending of passcode issue
F Modules now delete themselves
F additional field where users' masked host can be stored so both masked IP and vhost are available instead of just one.
F No struct Uid, ugly, and, unnecessary that we store UID in BotInfo.
F Prevent deletion of core services via /bs bot
F Module subsystem cleanup ('modules' branch)
F Move modules to use classes somewhat (AnopeInit, AnopeFini)
F Change MODULE_INIT to return a pointer
F Remove duplicate module creation.. have loadModule return a pointer rather than creating one
F Remove buffered loading/unloading, this makes os_modunload perm, but who cares
F Remove 'delayed' loading, this is necessary because of before/after connected to ircd (ircd is before, rest after), I'm sure this can be done better.
A Remove old config, replace with insp-inspired (albeit bind format) config (CBX)
F Clean up protocol modules a bit
A InspIRCd 1.2 support
F Remove old (prior to 1.8.0) db compat
F Establish a proper base for services pseudoclients
F Add ss_main StatServ Hal9000 to play with :)
F Burn automake with fire (CBX)
Provided by mooncup <mooncup@anonnet.org> - 2009
F Automatically reapply vhost on hs off for unreal.
-14
View File
@@ -1,14 +0,0 @@
Anope Version 1.9.1
-------------------
** DELETED CONFIGURATION DIRECTIVES **
Nick tracking has been removed as an option.
Anope Version 1.9.0
-------------------
** ADDED CONFIGURATION DIRECTIVES **
** MODIFIED CONFIGURATION DIRECTIVES **
** DELETED CONFIGURATION DIRECTIVES **
-8
View File
@@ -1,8 +0,0 @@
Anope Version 1.9.0
-------------------
*** New Strings:
*** Mod Strings:
*** Del Strings:
-4
View File
@@ -1,4 +0,0 @@
Anope Version 1.9.0
-------------------
- MySQL Support Withdrawn until rewritten.
+49 -110
View File
@@ -2,7 +2,7 @@
#
# Configuration script for Services.
#
# Anope (c) 2003-2008 Anope team
# Anope (c) 2003-2010 Anope team
# Contact us at team@anope.org
#
# This program is free but copyrighted software; see the file COPYING for
@@ -40,95 +40,58 @@ Run_Build_System () {
WITH_INST=""
WITH_RUN=""
WITH_PERM=""
BUILD_TYPE=""
RUN_CC_PL=""
EXTRA_ARGS=""
GEN_TYPE=""
if [ "$INSTDIR" != "" ] ; then
if [ "$BUILD_SYSTEM" = "cmake" ] ; then
WITH_INST="-DINSTDIR:STRING=$INSTDIR"
else
WITH_INST="--with-instdir=$INSTDIR"
fi
WITH_INST="-DINSTDIR:STRING=$INSTDIR"
fi
if [ "$RUNGROUP" != "" ] ; then
if [ "$BUILD_SYSTEM" = "cmake" ] ; then
WITH_RUN="-DRUNGROUP:STRING=$RUNGROUP"
else
WITH_RUN="--with-rungroup=$RUNGROUP"
fi
WITH_RUN="-DRUNGROUP:STRING=$RUNGROUP"
fi
if [ "$UMASK" != "" ] ; then
if [ "$BUILD_SYSTEM" = "cmake" ] ; then
WITH_PERM="-DDEFUMASK:STRING=$UMASK"
else
WITH_PERM="--with-permissions=$UMASK"
fi
WITH_PERM="-DDEFUMASK:STRING=$UMASK"
fi
if [ "$DEBUG" = "yes" ] ; then
if [ "$BUILD_SYSTEM" = "cmake" ] ; then
BUILD_TYPE="-DCMAKE_BUILD_TYPE:STRING=DEBUG"
else
BUILD_TYPE="--with-debugsym"
fi
BUILD_TYPE="-DCMAKE_BUILD_TYPE:STRING=DEBUG"
else
if [ "$BUILD_SYSTEM" = "cmake" ] ; then
BUILD_TYPE="-DCMAKE_BUILD_TYPE:STRING=RELEASE"
fi
BUILD_TYPE="-DCMAKE_BUILD_TYPE:STRING=RELEASE"
fi
if [ "$USE_RUN_CC_PL" = "yes" ] ; then
if [ "$BUILD_SYSTEM" = "cmake" ] ; then
RUN_CC_PL="-DUSE_RUN_CC_PL:BOOLEAN=ON"
else
pwdsave=`pwd`
cd "`dirname $SOURCE_DIR/run-cc.pl`"
RUN_CC_PL="--with-makebin=`pwd`/run-cc.pl"
cd "$pwdsave"
fi
RUN_CC_PL="-DUSE_RUN_CC_PL:BOOLEAN=ON"
else
if [ "$BUILD_SYSTEM" = "cmake" ] ; then
RUN_CC_PL="-DUSE_RUN_CC_PL:BOOLEAN=OFF"
else
RUN_CC_PL="--with-makebin="
fi
RUN_CC_PL="-DUSE_RUN_CC_PL:BOOLEAN=OFF"
fi
if [ "$BUILD_SYSTEM" = "cmake" ] ; then
case `uname -s` in
MINGW*)
GEN_TYPE="-G\"MSYS Makefiles\""
;;
esac
case `uname -s` in
MINGW*)
GEN_TYPE="-G\"MSYS Makefiles\""
;;
esac
if [ "$SOURCE_DIR" = "." ] ; then
pwdsave=`pwd`
test -d build || mkdir build
cd "build"
REAL_SOURCE_DIR=".."
else
REAL_SOURCE_DIR="$SOURCE_DIR"
fi
echo "cmake $GEN_TYPE $WITH_INST $WITH_RUN $WITH_PERM $BUILD_TYPE $RUN_CC_PL $EXTRA_ARGS $REAL_SOURCE_DIR"
cmake $GEN_TYPE $WITH_INST $WITH_RUN $WITH_PERM $BUILD_TYPE $RUN_CC_PL $EXTRA_ARGS $REAL_SOURCE_DIR
echo ""
if [ "$SOURCE_DIR" = "." ] ; then
echo "Now cd build, then run make to build Anope."
cd "$pwdsave"
else
echo "Now run make to build Anope."
fi
if [ "$SOURCE_DIR" = "." ] ; then
pwdsave=`pwd`
test -d build || mkdir build
cd "build"
REAL_SOURCE_DIR=".."
else
echo "./configure $WITH_INST $WITH_RUN $WITH_PERM $BUILD_TYPE $EXTRA_ARGS $RUN_CC_PL"
REAL_SOURCE_DIR="$SOURCE_DIR"
fi
./configure $WITH_INST $WITH_RUN $WITH_PERM $BUILD_TYPE $EXTRA_ARGS $RUN_CC_PL
echo "cmake $GEN_TYPE $WITH_INST $WITH_RUN $WITH_PERM $BUILD_TYPE $RUN_CC_PL $EXTRA_CONFIG_ARGS $REAL_SOURCE_DIR"
cmake $GEN_TYPE $WITH_INST $WITH_RUN $WITH_PERM $BUILD_TYPE $RUN_CC_PL $EXTRA_CONFIG_ARGS $REAL_SOURCE_DIR
echo ""
if [ "$SOURCE_DIR" = "." ] ; then
echo "Now cd build, then run make to build Anope."
cd "$pwdsave"
else
echo "Now run make to build Anope."
fi
}
@@ -149,7 +112,6 @@ export ECHO2 ECHO2SUF
# Init values
###########################################################################
BUILD_SYSTEM="cmake"
INSTDIR=$HOME/services
RUNGROUP=
UMASK=
@@ -159,11 +121,6 @@ EXTRA_CONFIG_ARGS=
CAN_QUICK="no"
SOURCE_DIR=`dirname $0`
which cmake > /dev/null
if [ $? -ne 0 ] ; then
BUILD_SYSTEM="configure"
fi
###########################################################################
# Check out the options
###########################################################################
@@ -206,8 +163,18 @@ if [ ! "$NO_INTRO" ] ; then
clear
;;
esac
. $SOURCE_DIR/version.log
cat $SOURCE_DIR/.BANNER | sed "s/CURVER/$VERSION_MAJOR.$VERSION_MINOR.$VERSION_PATCH$VERSION_EXTRA/" | sed "s@SOURCE_DIR@$SOURCE_DIR@" | $PAGER
. $SOURCE_DIR/src/version.sh
if [ -d .git ] ; then
VERSION=`git describe --tags`
VERSION_BUILD=`echo "$VERSION" | cut -d'-' -f2`
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
echo ""
else
echo ""
@@ -230,36 +197,6 @@ export ok INPUT
####
ok=0
echo "Note: press Return for the default, or enter a new value."
echo "Are you using configure or cmake?"
while [ $ok -eq 0 ] ; do
echo2 "[$BUILD_SYSTEM] "
if read INPUT ; then : ; else echo "" ; exit 1 ; fi
if [ ! "$INPUT" ] ; then
INPUT=$BUILD_SYSTEM
fi
case $INPUT in
cmake)
ok=1
;;
configure)
ok=1
;;
*)
echo "That is not a valid choice!"
ok=0
;;
esac
done
BUILD_SYSTEM=$INPUT
echo ""
if [ "$SOURCE_DIR" != "." -a "$BUILD_SYSTEM" = "configure" ] ; then
echo "You can not use configure unless you are in the same folder as Config!"
exit 0
fi
ok=0
echo "In what directory do you want the binaries to be installed?"
while [ $ok -eq 0 ] ; do
@@ -388,12 +325,15 @@ echo ""
####
echo "Are there any extra arguments you wish to pass to $BUILD_SYSTEM?"
echo "(You may only need to do this if $BUILD_SYSTEM is unable to locate"
echo "missing dependencies without hints)"
echo "Are there any extra arguments you wish to pass to cmake?"
echo "You may only need to do this if cmake is unable to locate"
echo "missing dependencies without hints."
echo "You can do this by: -DEXTRA_INCLUDE:STRING=/path/to/files;/path/to/more/files"
echo2 "[$EXTRA_CONFIG_ARGS] "
if read INPUT ; then : ; else echo "" ; exit 1 ; fi
EXTRA_CONFIG_ARGS=$INPUT
if [ "$INPUT" ] ; then
EXTRA_CONFIG_ARGS=$INPUT
fi
echo ""
####
@@ -405,7 +345,6 @@ echo ""
echo2 "Saving configuration results in config.cache... "
cat <<EOT >$SOURCE_DIR/config.cache
BUILD_SYSTEM="$BUILD_SYSTEM"
INSTDIR="$INSTDIR"
RUNGROUP="$RUNGROUP"
UMASK=$UMASK
-3
View File
@@ -1,3 +0,0 @@
@echo off
cscript /nologo "%~dp0\install.js"
pause
BIN
View File
Binary file not shown.
-102
View File
@@ -1,102 +0,0 @@
CC=g++ # probably wrong but oh well.
INCLUDEDIR=../include
ANOPELIBS=@ANOPELIBS@
CFLAGS=@CFLAGS@ -Wall -ansi -pedantic -Wshadow
PROFILE=-pg
LDPROFILE=
SHELL=/bin/sh
INSTDIR=@INSTDIR@
MAKEBIN=@MAKEBIN@
INSTALL=@INSTALL@
RM=@RM@
CP=@CP@
TOUCH=@TOUCH@
LDFLAGS=@LDFLAGS@
RUNGROUP=@RUNGROUP@
SHARED=@SHARED@
MODULEFLAGS=@MODULEFLAGS@
all: language headers build core protocols tools modules
profile: language headers profile_build profile_core profile_protocols profile_tools profile_modules
MAKEARGS = 'CFLAGS=${CFLAGS}' 'CC=${CC}' 'ANOPELIBS=${ANOPELIBS}' \
'LDFLAGS=${LDFLAGS}' 'INSTDIR=${INSTDIR}' 'INSTALL=${INSTALL}' \
'INCLUDEDIR=${INCLUDEDIR}' 'RM=${RM}' 'CP=${CP}' \
'TOUCH=${TOUCH}' 'SHELL=${SHELL}' \
'RUNGROUP=${RUNGROUP}' \
'SHARED=${SHARED}' 'MODULEFLAGS=${MODULEFLAGS}' \
'MAKEBIN=${MAKEBIN}'
build: language headers
@${MAKE} -C src ${MAKEARGS} all
profile_build:
@${MAKE} -C src ${MAKEARGS} 'CFLAGS=${CFLAGS} $(PROFILE)' 'LDFLAGS=${LDFLAGS} ${PROFILE}' all
modules: build
@src/modules/configure src/modules
@${MAKE} -C src/modules ${MAKEARGS} all
@echo "*** All done, now (g)make install to install Anope/Modules";
clean_modules:
@${MAKE} -C src ${MAKEARGS} clean_modules
distclean_modules:
@${MAKE} -C src ${MAKEARGS} distclean_modules
protocols: build
@echo "*** Building protocol support";
@src/protocol/configure src/protocol
@${MAKE} -C src/protocol ${MAKEARGS} all
profile_protocols: build
@echo "*** Building protocol support";
@src/protocol/configure src/protocol
@${MAKE} -C src/protocol ${MAKEARGS} 'CFLAGS=${CFLAGS} ${PROFILE}' 'PROFILE=${PROFILE}' all
core: build
@echo "*** Building Core modules";
@${MAKE} -C src ${MAKEARGS} core
profile_core: build
@echo "*** Building Core modules";
@${MAKE} -C src ${MAKEARGS} 'CFLAGS=${CFLAGS} ${PROFILE}' 'PROFILE=${PROFILE}' core
tools: build
@${MAKE} -C src/tools ${MAKEARGS} all
@echo "*** All done, now (g)make install to install Anope/Modules/Tools";
profile_tools: profile_build
@${MAKE} -C src/tools ${MAKEARGS} 'CFLAGS=${CFLAGS} $(PROFILE)' all
@echo "*** All done, now (g)make install to install Anope/Modules/Tools";
profile_modules: profile_build
@src/modules/configure src/modules
@${MAKE} -C src/modules ${MAKEARGS} 'CFLAGS=${CFLAGS} ${PROFILE}' 'PROFILE=${PROFILE}' all
@echo "*** All done, now (g)make install to install Anope/Modules";
language:
@$(MAKE) -C lang ${MAKEARGS} all language.h
headers:
@${MAKE} -C include ${MAKEARGS}
clean:
${MAKE} -C lang ${MAKEARGS} clean
${MAKE} -C include ${MAKEARGS} clean
${MAKE} -C src ${MAKEARGS} clean
${MAKE} -C src/tools ${MAKEARGS} clean
distclean: clean
${MAKE} -C lang ${MAKEARGS} distclean
${MAKE} -C include ${MAKEARGS} distclean
${MAKE} -C src ${MAKEARGS} distclean
${MAKE} -C src/tools ${MAKEARGS} distclean
rm -f config.log config.status config.cache Makefile src/bin/anoperc
install: DUMMY
${MAKE} -C src ${MAKEARGS} install
${MAKE} -C src/tools ${MAKEARGS} install
@echo "*** All done, Anope is now installed. Please read docs/INSTALL for details on what to do now.";
DUMMY:
-98
View File
@@ -1,98 +0,0 @@
Legend:
x = done
? = unsure
+ = in progress
1.9.1
-----
[x] Remove modules_unload_all fini + hack that goes with it
[x] signal handling cleanup
[x] Seamless fantasy support for all ChanServ commands, instead of requiring bs_fantasy_*
Remaining issues:
[x] Allow fantasy to be disabled from some commands (e.g. FORBID?) seems unnecessary, really.
[x] (think on this carefully): some commands (e.g. !help) need to strip the pre-provided channelname from them.
[x] HelpServ must die
[x] Command parser cleanup: mod_current_buffer needs to go away and be replaced by a proper parser. Commands should then indicate how they want the buffer split.
[x] Make NS ENFORCE/RELEASE stuff more sane, redo timers
[x] Support operoverride and such things (stop reversing mode changes from nonopped people where unnecessary) - done by Liber
[x] Settable oper flags (split into types containing privs+commands, allow each oper to be set to a type, like we do with insp?)
Outstanding issues:
- Add some events that were not present before but useful for future versions
1.9.2
-----
[ ] Redo database insanity.
[ ] Move database load/save to a module
[ ] realtime SQL/whatever module using events (possibly ongoing)
[ ] flatfile save on a periodic timer
[ ] SANE password encryption - prefix password with the method it was encrypted with, allowing for *seamless* upgrading to different methods
[ ] Salted SHA256 (contact Special for this)
[ ] New database format (text, not binary - works very well for merging and so on)
[ ] IRCd capability support: don't rely on CAPAB, provide an interface to turn capabilities on specifically
[ ] Socket subsystem needs some serious loving
[ ] Multiple sockets
[ ] Asynchronous, using select() (multiple engines? not really needed..)
[ ] Callbacks, event style, see also inspircd
[ ] Asynchronous DNS?
Future
------
[ ] Move a (lot) of stuff to class members as a defined interface rather than copypasta everywhere (ns_set, ns_saset!)
[ ] CS SET INHABIT to keep pseudoclient in a channel after it empties to maintain banlists and such
[?] Remote identification (1.9.1? will this break stuff?)
[ ] Requires a rejig of how Alias vs Core works
[ ] Language charset stuff, including collation (1.9.1? phoenix?)
[ ] Add support for +k, +q, etc type umodes
[ ] Fix permanent channels support properly. This will require removing do_sjoin().
[ ] burn do_sjoin with fire
[ ] fantasy: allow replies/notifications to fantasy commands to go to the channel via notice
[ ] way for one module to depend on another... not like 2 MOD_HEADs and it being unpredictable which is loaded first..
the MOD_HEAD MOD_TAIL allows for too few combinations (interface code of insp, hooks code of insp?)
[ ] generic database routines modules can use to create their own database
[ ] generic way to check which modes a user has set (u->HasUmode(UMODE_OPER))
[?] a way for a module to queue itself (or even another module) for unloading
[ ] add overridden form of SendGlobops accepting BotInfo
[ ] SendAkill should just take a pointer to the Akill class instead of millions of fields (same for some other stuff)
[ ] chan_set_modes should take BotInfo, possibly with override for User *?
[ ] Language system is disgusting, it must die.
[ ] Modules should also have a way to add strings programatically
[ ] Should be able to add many strings by dropping a file in a set location.
[ ] I forsee this working via a function rather than defines, as it seems to do now: e.g. _("NS_NICK_IS_REGISTERED").
[?] Update help to reflect the fact /msg memoserv set notify mail - works just fine ;)
[ ] Useful/common "third party" modules to core distro
[ ] NS AJOIN
[ ] Last used time on AKICK/access entries
[ ] Channel access additions
[ ] Method to store listmodes (more generically than AKICK, too) for e.g. +beI and extbans, etc.
[ ] Setter
[ ] Time added
[ ] Time modified
[ ] Expiry (useful?)
[ ] Set forbidden channels +s
[ ] NS INFO: seperate field for last seen realhost, shown to SRA only
[ ] NS SUSPEND: show suspender and reason, probably to sopers only (see CS SUSPEND)
XXX: is SUSPEND overlapping with OS IGNORE functionality?
[ ] Merge NS INFO blah ALL with NS INFO blah, if you're requesting info, you really want the info anyway.
[?] Channel passwords seem to be of limited use, think of a more appropriate way to handle this
[?] Don't allow soper accounts to expire
[?] Reason for CS SET RESTRICTED
[ ] NS IDENTIFY changes
[?] Last failed identify? Maybe more useful for sopers only, so users don't get unnecessarily worried
[?] Last successful login time/ip? perhaps both of these should be a new nick setting
[ ] AKILL/SGLINE/etc..
[ ] Setter
[ ] Time added
[ ] Time modified (can they be modified?)
[ ] Time until expiry/expiry time (YES, time until expiry *instead of* expiry time, more human)
[ ] Reason
[ ] Unique IDs on each AKILL/blah so that networks may use them as ticket IDs
[ ] HS ACTIVATE -ALL (rob sez this all needs reviewing)
[ ] NS MARK, CS MARK. Allow multiple marks. Combine into OS MARK?
[ ] General options block, ability to turn LOGCHAN on from the config file..
[ ] Method to list suspended/forbidden nicks/channels?
[?] MS IGNORE. Make it take nick (accounts) or n!u@h masks. Fake success of memo send still, but send to opers?
[?] More "friendly" date displays of some things like registration time ("November 7th 2006 (2 years, 0 months, 0 days ago)")
[?] Review settings like NSModeOnID for whether they actually have a point existing (Rob says it does not - and that it should probably be a nickname setting)
[?] OS INJECT
[?] Drop CS SET ENTRYMSG, replace with a 'news' type system? (limited to a configured number of items, default 3)
Vendored
-871
View File
@@ -1,871 +0,0 @@
dnl aclocal.m4 generated automatically by aclocal 1.4-p6
dnl Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
dnl This program is distributed in the hope that it will be useful,
dnl but WITHOUT ANY WARRANTY, to the extent permitted by law; without
dnl even the implied warranty of MERCHANTABILITY or FITNESS FOR A
dnl PARTICULAR PURPOSE.
# lib-prefix.m4 serial 4 (gettext-0.14.2)
dnl Copyright (C) 2001-2005 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
dnl From Bruno Haible.
dnl AC_LIB_ARG_WITH is synonymous to AC_ARG_WITH in autoconf-2.13, and
dnl similar to AC_ARG_WITH in autoconf 2.52...2.57 except that is doesn't
dnl require excessive bracketing.
ifdef([AC_HELP_STRING],
[AC_DEFUN([AC_LIB_ARG_WITH], [AC_ARG_WITH([$1],[[$2]],[$3],[$4])])],
[AC_DEFUN([AC_][LIB_ARG_WITH], [AC_ARG_WITH([$1],[$2],[$3],[$4])])])
dnl AC_LIB_PREFIX adds to the CPPFLAGS and LDFLAGS the flags that are needed
dnl to access previously installed libraries. The basic assumption is that
dnl a user will want packages to use other packages he previously installed
dnl with the same --prefix option.
dnl This macro is not needed if only AC_LIB_LINKFLAGS is used to locate
dnl libraries, but is otherwise very convenient.
AC_DEFUN([AC_LIB_PREFIX],
[
AC_BEFORE([$0], [AC_LIB_LINKFLAGS])
AC_REQUIRE([AC_PROG_CC])
AC_REQUIRE([AC_CANONICAL_HOST])
AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
dnl By default, look in $includedir and $libdir.
use_additional=yes
AC_LIB_WITH_FINAL_PREFIX([
eval additional_includedir=\"$includedir\"
eval additional_libdir=\"$libdir\"
])
AC_LIB_ARG_WITH([lib-prefix],
[ --with-lib-prefix[=DIR] search for libraries in DIR/include and DIR/lib
--without-lib-prefix don't search for libraries in includedir and libdir],
[
if test "X$withval" = "Xno"; then
use_additional=no
else
if test "X$withval" = "X"; then
AC_LIB_WITH_FINAL_PREFIX([
eval additional_includedir=\"$includedir\"
eval additional_libdir=\"$libdir\"
])
else
additional_includedir="$withval/include"
additional_libdir="$withval/lib"
fi
fi
])
if test $use_additional = yes; then
dnl Potentially add $additional_includedir to $CPPFLAGS.
dnl But don't add it
dnl 1. if it's the standard /usr/include,
dnl 2. if it's already present in $CPPFLAGS,
dnl 3. if it's /usr/local/include and we are using GCC on Linux,
dnl 4. if it doesn't exist as a directory.
if test "X$additional_includedir" != "X/usr/include"; then
haveit=
for x in $CPPFLAGS; do
AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
if test "X$x" = "X-I$additional_includedir"; then
haveit=yes
break
fi
done
if test -z "$haveit"; then
if test "X$additional_includedir" = "X/usr/local/include"; then
if test -n "$GCC"; then
case $host_os in
linux* | gnu* | k*bsd*-gnu) haveit=yes;;
esac
fi
fi
if test -z "$haveit"; then
if test -d "$additional_includedir"; then
dnl Really add $additional_includedir to $CPPFLAGS.
CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }-I$additional_includedir"
fi
fi
fi
fi
dnl Potentially add $additional_libdir to $LDFLAGS.
dnl But don't add it
dnl 1. if it's the standard /usr/lib,
dnl 2. if it's already present in $LDFLAGS,
dnl 3. if it's /usr/local/lib and we are using GCC on Linux,
dnl 4. if it doesn't exist as a directory.
if test "X$additional_libdir" != "X/usr/lib"; then
haveit=
for x in $LDFLAGS; do
AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
if test "X$x" = "X-L$additional_libdir"; then
haveit=yes
break
fi
done
if test -z "$haveit"; then
if test "X$additional_libdir" = "X/usr/local/lib"; then
if test -n "$GCC"; then
case $host_os in
linux*) haveit=yes;;
esac
fi
fi
if test -z "$haveit"; then
if test -d "$additional_libdir"; then
dnl Really add $additional_libdir to $LDFLAGS.
LDFLAGS="${LDFLAGS}${LDFLAGS:+ }-L$additional_libdir"
fi
fi
fi
fi
fi
])
dnl AC_LIB_PREPARE_PREFIX creates variables acl_final_prefix,
dnl acl_final_exec_prefix, containing the values to which $prefix and
dnl $exec_prefix will expand at the end of the configure script.
AC_DEFUN([AC_LIB_PREPARE_PREFIX],
[
dnl Unfortunately, prefix and exec_prefix get only finally determined
dnl at the end of configure.
if test "X$prefix" = "XNONE"; then
acl_final_prefix="$ac_default_prefix"
else
acl_final_prefix="$prefix"
fi
if test "X$exec_prefix" = "XNONE"; then
acl_final_exec_prefix='${prefix}'
else
acl_final_exec_prefix="$exec_prefix"
fi
acl_save_prefix="$prefix"
prefix="$acl_final_prefix"
eval acl_final_exec_prefix=\"$acl_final_exec_prefix\"
prefix="$acl_save_prefix"
])
dnl AC_LIB_WITH_FINAL_PREFIX([statement]) evaluates statement, with the
dnl variables prefix and exec_prefix bound to the values they will have
dnl at the end of the configure script.
AC_DEFUN([AC_LIB_WITH_FINAL_PREFIX],
[
acl_save_prefix="$prefix"
prefix="$acl_final_prefix"
acl_save_exec_prefix="$exec_prefix"
exec_prefix="$acl_final_exec_prefix"
$1
exec_prefix="$acl_save_exec_prefix"
prefix="$acl_save_prefix"
])
# lib-link.m4 serial 6 (gettext-0.14.3)
dnl Copyright (C) 2001-2005 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
dnl From Bruno Haible.
AC_PREREQ(2.50)
dnl AC_LIB_LINKFLAGS(name [, dependencies]) searches for libname and
dnl the libraries corresponding to explicit and implicit dependencies.
dnl Sets and AC_SUBSTs the LIB${NAME} and LTLIB${NAME} variables and
dnl augments the CPPFLAGS variable.
AC_DEFUN([AC_LIB_LINKFLAGS],
[
AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
AC_REQUIRE([AC_LIB_RPATH])
define([Name],[translit([$1],[./-], [___])])
define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
[ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
AC_CACHE_CHECK([how to link with lib[]$1], [ac_cv_lib[]Name[]_libs], [
AC_LIB_LINKFLAGS_BODY([$1], [$2])
ac_cv_lib[]Name[]_libs="$LIB[]NAME"
ac_cv_lib[]Name[]_ltlibs="$LTLIB[]NAME"
ac_cv_lib[]Name[]_cppflags="$INC[]NAME"
])
LIB[]NAME="$ac_cv_lib[]Name[]_libs"
LTLIB[]NAME="$ac_cv_lib[]Name[]_ltlibs"
INC[]NAME="$ac_cv_lib[]Name[]_cppflags"
AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME)
AC_SUBST([LIB]NAME)
AC_SUBST([LTLIB]NAME)
dnl Also set HAVE_LIB[]NAME so that AC_LIB_HAVE_LINKFLAGS can reuse the
dnl results of this search when this library appears as a dependency.
HAVE_LIB[]NAME=yes
undefine([Name])
undefine([NAME])
])
dnl AC_LIB_HAVE_LINKFLAGS(name, dependencies, includes, testcode)
dnl searches for libname and the libraries corresponding to explicit and
dnl implicit dependencies, together with the specified include files and
dnl the ability to compile and link the specified testcode. If found, it
dnl sets and AC_SUBSTs HAVE_LIB${NAME}=yes and the LIB${NAME} and
dnl LTLIB${NAME} variables and augments the CPPFLAGS variable, and
dnl #defines HAVE_LIB${NAME} to 1. Otherwise, it sets and AC_SUBSTs
dnl HAVE_LIB${NAME}=no and LIB${NAME} and LTLIB${NAME} to empty.
AC_DEFUN([AC_LIB_HAVE_LINKFLAGS],
[
AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
AC_REQUIRE([AC_LIB_RPATH])
define([Name],[translit([$1],[./-], [___])])
define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
[ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
dnl Search for lib[]Name and define LIB[]NAME, LTLIB[]NAME and INC[]NAME
dnl accordingly.
AC_LIB_LINKFLAGS_BODY([$1], [$2])
dnl Add $INC[]NAME to CPPFLAGS before performing the following checks,
dnl because if the user has installed lib[]Name and not disabled its use
dnl via --without-lib[]Name-prefix, he wants to use it.
ac_save_CPPFLAGS="$CPPFLAGS"
AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME)
AC_CACHE_CHECK([for lib[]$1], [ac_cv_lib[]Name], [
ac_save_LIBS="$LIBS"
LIBS="$LIBS $LIB[]NAME"
AC_TRY_LINK([$3], [$4], [ac_cv_lib[]Name=yes], [ac_cv_lib[]Name=no])
LIBS="$ac_save_LIBS"
])
if test "$ac_cv_lib[]Name" = yes; then
HAVE_LIB[]NAME=yes
AC_DEFINE([HAVE_LIB]NAME, 1, [Define if you have the $1 library.])
AC_MSG_CHECKING([how to link with lib[]$1])
AC_MSG_RESULT([$LIB[]NAME])
else
HAVE_LIB[]NAME=no
dnl If $LIB[]NAME didn't lead to a usable library, we don't need
dnl $INC[]NAME either.
CPPFLAGS="$ac_save_CPPFLAGS"
LIB[]NAME=
LTLIB[]NAME=
fi
AC_SUBST([HAVE_LIB]NAME)
AC_SUBST([LIB]NAME)
AC_SUBST([LTLIB]NAME)
undefine([Name])
undefine([NAME])
])
dnl Determine the platform dependent parameters needed to use rpath:
dnl libext, shlibext, hardcode_libdir_flag_spec, hardcode_libdir_separator,
dnl hardcode_direct, hardcode_minus_L.
AC_DEFUN([AC_LIB_RPATH],
[
dnl Tell automake >= 1.10 to complain if config.rpath is missing.
m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([config.rpath])])
AC_REQUIRE([AC_PROG_CC]) dnl we use $CC, $GCC, $LDFLAGS
AC_REQUIRE([AC_LIB_PROG_LD]) dnl we use $LD, $with_gnu_ld
AC_REQUIRE([AC_CANONICAL_HOST]) dnl we use $host
AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT]) dnl we use $ac_aux_dir
AC_CACHE_CHECK([for shared library run path origin], acl_cv_rpath, [
CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \
${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh
. ./conftest.sh
rm -f ./conftest.sh
acl_cv_rpath=done
])
wl="$acl_cv_wl"
libext="$acl_cv_libext"
shlibext="$acl_cv_shlibext"
hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec"
hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator"
hardcode_direct="$acl_cv_hardcode_direct"
hardcode_minus_L="$acl_cv_hardcode_minus_L"
dnl Determine whether the user wants rpath handling at all.
AC_ARG_ENABLE(rpath,
[ --disable-rpath do not hardcode runtime library paths],
:, enable_rpath=yes)
])
dnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname and
dnl the libraries corresponding to explicit and implicit dependencies.
dnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables.
AC_DEFUN([AC_LIB_LINKFLAGS_BODY],
[
define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
[ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
dnl By default, look in $includedir and $libdir.
use_additional=yes
AC_LIB_WITH_FINAL_PREFIX([
eval additional_includedir=\"$includedir\"
eval additional_libdir=\"$libdir\"
])
AC_LIB_ARG_WITH([lib$1-prefix],
[ --with-lib$1-prefix[=DIR] search for lib$1 in DIR/include and DIR/lib
--without-lib$1-prefix don't search for lib$1 in includedir and libdir],
[
if test "X$withval" = "Xno"; then
use_additional=no
else
if test "X$withval" = "X"; then
AC_LIB_WITH_FINAL_PREFIX([
eval additional_includedir=\"$includedir\"
eval additional_libdir=\"$libdir\"
])
else
additional_includedir="$withval/include"
additional_libdir="$withval/lib"
fi
fi
])
dnl Search the library and its dependencies in $additional_libdir and
dnl $LDFLAGS. Using breadth-first-seach.
LIB[]NAME=
LTLIB[]NAME=
INC[]NAME=
rpathdirs=
ltrpathdirs=
names_already_handled=
names_next_round='$1 $2'
while test -n "$names_next_round"; do
names_this_round="$names_next_round"
names_next_round=
for name in $names_this_round; do
already_handled=
for n in $names_already_handled; do
if test "$n" = "$name"; then
already_handled=yes
break
fi
done
if test -z "$already_handled"; then
names_already_handled="$names_already_handled $name"
dnl See if it was already located by an earlier AC_LIB_LINKFLAGS
dnl or AC_LIB_HAVE_LINKFLAGS call.
uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'`
eval value=\"\$HAVE_LIB$uppername\"
if test -n "$value"; then
if test "$value" = yes; then
eval value=\"\$LIB$uppername\"
test -z "$value" || LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$value"
eval value=\"\$LTLIB$uppername\"
test -z "$value" || LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$value"
else
dnl An earlier call to AC_LIB_HAVE_LINKFLAGS has determined
dnl that this library doesn't exist. So just drop it.
:
fi
else
dnl Search the library lib$name in $additional_libdir and $LDFLAGS
dnl and the already constructed $LIBNAME/$LTLIBNAME.
found_dir=
found_la=
found_so=
found_a=
if test $use_additional = yes; then
if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext"; then
found_dir="$additional_libdir"
found_so="$additional_libdir/lib$name.$shlibext"
if test -f "$additional_libdir/lib$name.la"; then
found_la="$additional_libdir/lib$name.la"
fi
else
if test -f "$additional_libdir/lib$name.$libext"; then
found_dir="$additional_libdir"
found_a="$additional_libdir/lib$name.$libext"
if test -f "$additional_libdir/lib$name.la"; then
found_la="$additional_libdir/lib$name.la"
fi
fi
fi
fi
if test "X$found_dir" = "X"; then
for x in $LDFLAGS $LTLIB[]NAME; do
AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
case "$x" in
-L*)
dir=`echo "X$x" | sed -e 's/^X-L//'`
if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext"; then
found_dir="$dir"
found_so="$dir/lib$name.$shlibext"
if test -f "$dir/lib$name.la"; then
found_la="$dir/lib$name.la"
fi
else
if test -f "$dir/lib$name.$libext"; then
found_dir="$dir"
found_a="$dir/lib$name.$libext"
if test -f "$dir/lib$name.la"; then
found_la="$dir/lib$name.la"
fi
fi
fi
;;
esac
if test "X$found_dir" != "X"; then
break
fi
done
fi
if test "X$found_dir" != "X"; then
dnl Found the library.
LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$found_dir -l$name"
if test "X$found_so" != "X"; then
dnl Linking with a shared library. We attempt to hardcode its
dnl directory into the executable's runpath, unless it's the
dnl standard /usr/lib.
if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/lib"; then
dnl No hardcoding is needed.
LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
else
dnl Use an explicit option to hardcode DIR into the resulting
dnl binary.
dnl Potentially add DIR to ltrpathdirs.
dnl The ltrpathdirs will be appended to $LTLIBNAME at the end.
haveit=
for x in $ltrpathdirs; do
if test "X$x" = "X$found_dir"; then
haveit=yes
break
fi
done
if test -z "$haveit"; then
ltrpathdirs="$ltrpathdirs $found_dir"
fi
dnl The hardcoding into $LIBNAME is system dependent.
if test "$hardcode_direct" = yes; then
dnl Using DIR/libNAME.so during linking hardcodes DIR into the
dnl resulting binary.
LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
else
if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then
dnl Use an explicit option to hardcode DIR into the resulting
dnl binary.
LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
dnl Potentially add DIR to rpathdirs.
dnl The rpathdirs will be appended to $LIBNAME at the end.
haveit=
for x in $rpathdirs; do
if test "X$x" = "X$found_dir"; then
haveit=yes
break
fi
done
if test -z "$haveit"; then
rpathdirs="$rpathdirs $found_dir"
fi
else
dnl Rely on "-L$found_dir".
dnl But don't add it if it's already contained in the LDFLAGS
dnl or the already constructed $LIBNAME
haveit=
for x in $LDFLAGS $LIB[]NAME; do
AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
if test "X$x" = "X-L$found_dir"; then
haveit=yes
break
fi
done
if test -z "$haveit"; then
LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir"
fi
if test "$hardcode_minus_L" != no; then
dnl FIXME: Not sure whether we should use
dnl "-L$found_dir -l$name" or "-L$found_dir $found_so"
dnl here.
LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
else
dnl We cannot use $hardcode_runpath_var and LD_RUN_PATH
dnl here, because this doesn't fit in flags passed to the
dnl compiler. So give up. No hardcoding. This affects only
dnl very old systems.
dnl FIXME: Not sure whether we should use
dnl "-L$found_dir -l$name" or "-L$found_dir $found_so"
dnl here.
LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name"
fi
fi
fi
fi
else
if test "X$found_a" != "X"; then
dnl Linking with a static library.
LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_a"
else
dnl We shouldn't come here, but anyway it's good to have a
dnl fallback.
LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir -l$name"
fi
fi
dnl Assume the include files are nearby.
additional_includedir=
case "$found_dir" in
*/lib | */lib/)
basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e 's,/lib/*$,,'`
additional_includedir="$basedir/include"
;;
esac
if test "X$additional_includedir" != "X"; then
dnl Potentially add $additional_includedir to $INCNAME.
dnl But don't add it
dnl 1. if it's the standard /usr/include,
dnl 2. if it's /usr/local/include and we are using GCC on Linux,
dnl 3. if it's already present in $CPPFLAGS or the already
dnl constructed $INCNAME,
dnl 4. if it doesn't exist as a directory.
if test "X$additional_includedir" != "X/usr/include"; then
haveit=
if test "X$additional_includedir" = "X/usr/local/include"; then
if test -n "$GCC"; then
case $host_os in
linux* | gnu* | k*bsd*-gnu) haveit=yes;;
esac
fi
fi
if test -z "$haveit"; then
for x in $CPPFLAGS $INC[]NAME; do
AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
if test "X$x" = "X-I$additional_includedir"; then
haveit=yes
break
fi
done
if test -z "$haveit"; then
if test -d "$additional_includedir"; then
dnl Really add $additional_includedir to $INCNAME.
INC[]NAME="${INC[]NAME}${INC[]NAME:+ }-I$additional_includedir"
fi
fi
fi
fi
fi
dnl Look for dependencies.
if test -n "$found_la"; then
dnl Read the .la file. It defines the variables
dnl dlname, library_names, old_library, dependency_libs, current,
dnl age, revision, installed, dlopen, dlpreopen, libdir.
save_libdir="$libdir"
case "$found_la" in
*/* | *\\*) . "$found_la" ;;
*) . "./$found_la" ;;
esac
libdir="$save_libdir"
dnl We use only dependency_libs.
for dep in $dependency_libs; do
case "$dep" in
-L*)
additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'`
dnl Potentially add $additional_libdir to $LIBNAME and $LTLIBNAME.
dnl But don't add it
dnl 1. if it's the standard /usr/lib,
dnl 2. if it's /usr/local/lib and we are using GCC on Linux,
dnl 3. if it's already present in $LDFLAGS or the already
dnl constructed $LIBNAME,
dnl 4. if it doesn't exist as a directory.
if test "X$additional_libdir" != "X/usr/lib"; then
haveit=
if test "X$additional_libdir" = "X/usr/local/lib"; then
if test -n "$GCC"; then
case $host_os in
linux* | gnu* | k*bsd*-gnu) haveit=yes;;
esac
fi
fi
if test -z "$haveit"; then
haveit=
for x in $LDFLAGS $LIB[]NAME; do
AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
if test "X$x" = "X-L$additional_libdir"; then
haveit=yes
break
fi
done
if test -z "$haveit"; then
if test -d "$additional_libdir"; then
dnl Really add $additional_libdir to $LIBNAME.
LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$additional_libdir"
fi
fi
haveit=
for x in $LDFLAGS $LTLIB[]NAME; do
AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
if test "X$x" = "X-L$additional_libdir"; then
haveit=yes
break
fi
done
if test -z "$haveit"; then
if test -d "$additional_libdir"; then
dnl Really add $additional_libdir to $LTLIBNAME.
LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$additional_libdir"
fi
fi
fi
fi
;;
-R*)
dir=`echo "X$dep" | sed -e 's/^X-R//'`
if test "$enable_rpath" != no; then
dnl Potentially add DIR to rpathdirs.
dnl The rpathdirs will be appended to $LIBNAME at the end.
haveit=
for x in $rpathdirs; do
if test "X$x" = "X$dir"; then
haveit=yes
break
fi
done
if test -z "$haveit"; then
rpathdirs="$rpathdirs $dir"
fi
dnl Potentially add DIR to ltrpathdirs.
dnl The ltrpathdirs will be appended to $LTLIBNAME at the end.
haveit=
for x in $ltrpathdirs; do
if test "X$x" = "X$dir"; then
haveit=yes
break
fi
done
if test -z "$haveit"; then
ltrpathdirs="$ltrpathdirs $dir"
fi
fi
;;
-l*)
dnl Handle this in the next round.
names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'`
;;
*.la)
dnl Handle this in the next round. Throw away the .la's
dnl directory; it is already contained in a preceding -L
dnl option.
names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'`
;;
*)
dnl Most likely an immediate library name.
LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$dep"
LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$dep"
;;
esac
done
fi
else
dnl Didn't find the library; assume it is in the system directories
dnl known to the linker and runtime loader. (All the system
dnl directories known to the linker should also be known to the
dnl runtime loader, otherwise the system is severely misconfigured.)
LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name"
LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-l$name"
fi
fi
fi
done
done
if test "X$rpathdirs" != "X"; then
if test -n "$hardcode_libdir_separator"; then
dnl Weird platform: only the last -rpath option counts, the user must
dnl pass all path elements in one option. We can arrange that for a
dnl single library, but not when more than one $LIBNAMEs are used.
alldirs=
for found_dir in $rpathdirs; do
alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir"
done
dnl Note: hardcode_libdir_flag_spec uses $libdir and $wl.
acl_save_libdir="$libdir"
libdir="$alldirs"
eval flag=\"$hardcode_libdir_flag_spec\"
libdir="$acl_save_libdir"
LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag"
else
dnl The -rpath options are cumulative.
for found_dir in $rpathdirs; do
acl_save_libdir="$libdir"
libdir="$found_dir"
eval flag=\"$hardcode_libdir_flag_spec\"
libdir="$acl_save_libdir"
LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag"
done
fi
fi
if test "X$ltrpathdirs" != "X"; then
dnl When using libtool, the option that works for both libraries and
dnl executables is -R. The -R options are cumulative.
for found_dir in $ltrpathdirs; do
LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir"
done
fi
])
dnl AC_LIB_APPENDTOVAR(VAR, CONTENTS) appends the elements of CONTENTS to VAR,
dnl unless already present in VAR.
dnl Works only for CPPFLAGS, not for LIB* variables because that sometimes
dnl contains two or three consecutive elements that belong together.
AC_DEFUN([AC_LIB_APPENDTOVAR],
[
for element in [$2]; do
haveit=
for x in $[$1]; do
AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
if test "X$x" = "X$element"; then
haveit=yes
break
fi
done
if test -z "$haveit"; then
[$1]="${[$1]}${[$1]:+ }$element"
fi
done
])
# lib-ld.m4 serial 3 (gettext-0.13)
dnl Copyright (C) 1996-2003 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
dnl Subroutines of libtool.m4,
dnl with replacements s/AC_/AC_LIB/ and s/lt_cv/acl_cv/ to avoid collision
dnl with libtool.m4.
dnl From libtool-1.4. Sets the variable with_gnu_ld to yes or no.
AC_DEFUN([AC_LIB_PROG_LD_GNU],
[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], acl_cv_prog_gnu_ld,
[# I'd rather use --version here, but apparently some GNU ld's only accept -v.
case `$LD -v 2>&1 </dev/null` in
*GNU* | *'with BFD'*)
acl_cv_prog_gnu_ld=yes ;;
*)
acl_cv_prog_gnu_ld=no ;;
esac])
with_gnu_ld=$acl_cv_prog_gnu_ld
])
dnl From libtool-1.4. Sets the variable LD.
AC_DEFUN([AC_LIB_PROG_LD],
[AC_ARG_WITH(gnu-ld,
[ --with-gnu-ld assume the C compiler uses GNU ld [default=no]],
test "$withval" = no || with_gnu_ld=yes, with_gnu_ld=no)
AC_REQUIRE([AC_PROG_CC])dnl
AC_REQUIRE([AC_CANONICAL_HOST])dnl
# Prepare PATH_SEPARATOR.
# The user is always right.
if test "${PATH_SEPARATOR+set}" != set; then
echo "#! /bin/sh" >conf$$.sh
echo "exit 0" >>conf$$.sh
chmod +x conf$$.sh
if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
PATH_SEPARATOR=';'
else
PATH_SEPARATOR=:
fi
rm -f conf$$.sh
fi
ac_prog=ld
if test "$GCC" = yes; then
# Check if gcc -print-prog-name=ld gives a path.
AC_MSG_CHECKING([for ld used by GCC])
case $host in
*-*-mingw*)
# gcc leaves a trailing carriage return which upsets mingw
ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
*)
ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
esac
case $ac_prog in
# Accept absolute paths.
[[\\/]* | [A-Za-z]:[\\/]*)]
[re_direlt='/[^/][^/]*/\.\./']
# Canonicalize the path of ld
ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'`
while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
done
test -z "$LD" && LD="$ac_prog"
;;
"")
# If it fails, then pretend we aren't using GCC.
ac_prog=ld
;;
*)
# If it is relative, then search for the first ld in PATH.
with_gnu_ld=unknown
;;
esac
elif test "$with_gnu_ld" = yes; then
AC_MSG_CHECKING([for GNU ld])
else
AC_MSG_CHECKING([for non-GNU ld])
fi
AC_CACHE_VAL(acl_cv_path_LD,
[if test -z "$LD"; then
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
for ac_dir in $PATH; do
test -z "$ac_dir" && ac_dir=.
if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
acl_cv_path_LD="$ac_dir/$ac_prog"
# Check to see if the program is GNU ld. I'd rather use --version,
# but apparently some GNU ld's only accept -v.
# Break only if it was the GNU/non-GNU ld that we prefer.
case `"$acl_cv_path_LD" -v 2>&1 < /dev/null` in
*GNU* | *'with BFD'*)
test "$with_gnu_ld" != no && break ;;
*)
test "$with_gnu_ld" != yes && break ;;
esac
fi
done
IFS="$ac_save_ifs"
else
acl_cv_path_LD="$LD" # Let the user override the test with a path.
fi])
LD="$acl_cv_path_LD"
if test -n "$LD"; then
AC_MSG_RESULT($LD)
else
AC_MSG_RESULT(no)
fi
test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
AC_LIB_PROG_LD_GNU
])
dnl Macro: anope_CHECK_TYPE_SIZES
dnl
dnl Check the size of several types and define a valid int16_t and int32_t.
dnl
AC_DEFUN(anope_CHECK_TYPE_SIZES,
[dnl Check type sizes
dnl AC_CHECK_SIZEOF(short)
dnl AC_CHECK_SIZEOF(int)
dnl AC_CHECK_SIZEOF(long)
dnl if test "$ac_cv_sizeof_int" = 2 ; then
dnl AC_CHECK_TYPE(int16_t, int)
dnl AC_CHECK_TYPE(u_int16_t, unsigned int)
dnl elif test "$ac_cv_sizeof_short" = 2 ; then
dnl AC_CHECK_TYPE(int16_t, short)
dnl AC_CHECK_TYPE(u_int16_t, unsigned short)
dnl else
dnl AC_MSG_ERROR([Cannot find a type with size of 16 bits])
dnl fi
dnl if test "$ac_cv_sizeof_int" = 4 ; then
dnl AC_CHECK_TYPE(int32_t, int)
dnl AC_CHECK_TYPE(u_int32_t, unsigned int)
dnl elif test "$ac_cv_sizeof_short" = 4 ; then
dnl AC_CHECK_TYPE(int32_t, short)
dnl AC_CHECK_TYPE(u_int32_t, unsigned short)
dnl elif test "$ac_cv_sizeof_long" = 4 ; then
dnl AC_CHECK_TYPE(int32_t, long)
dnl AC_CHECK_TYPE(u_int32_t, unsigned long)
dnl else
dnl AC_MSG_ERROR([Cannot find a type with size of 32 bits])
dnl fi
AC_CHECK_TYPE(uint8_t, AC_DEFINE(HAVE_UINT8_T, 1, "Has uint8_t type"))
AC_CHECK_TYPE(u_int8_t, AC_DEFINE(HAVE_U_INT8_T, 1, "Has u_int8_t type"))
AC_CHECK_TYPE(int16_t, AC_DEFINE(HAVE_INT16_T, 1, "Has int16_t type"))
AC_CHECK_TYPE(uint16_t, AC_DEFINE(HAVE_UINT16_T, 1, "Has uint16_t type"))
AC_CHECK_TYPE(u_int16_t, AC_DEFINE(HAVE_U_INT16_T, 1, "Has u_int16_t type"))
AC_CHECK_TYPE(int32_t, AC_DEFINE(HAVE_INT32_T, 1, "Has int32_t type"))
AC_CHECK_TYPE(uint32_t, AC_DEFINE(HAVE_UINT32_T, 1, "Has uint32_t type"))
AC_CHECK_TYPE(u_int32_t, AC_DEFINE(HAVE_U_INT32_T, 1, "Has u_int32_t type"))
])
-39
View File
@@ -1,39 +0,0 @@
dnl Macro: anope_CHECK_TYPE_SIZES
dnl
dnl Check the size of several types and define a valid int16_t and int32_t.
dnl
AC_DEFUN(anope_CHECK_TYPE_SIZES,
[dnl Check type sizes
dnl AC_CHECK_SIZEOF(short)
dnl AC_CHECK_SIZEOF(int)
dnl AC_CHECK_SIZEOF(long)
dnl if test "$ac_cv_sizeof_int" = 2 ; then
dnl AC_CHECK_TYPE(int16_t, int)
dnl AC_CHECK_TYPE(u_int16_t, unsigned int)
dnl elif test "$ac_cv_sizeof_short" = 2 ; then
dnl AC_CHECK_TYPE(int16_t, short)
dnl AC_CHECK_TYPE(u_int16_t, unsigned short)
dnl else
dnl AC_MSG_ERROR([Cannot find a type with size of 16 bits])
dnl fi
dnl if test "$ac_cv_sizeof_int" = 4 ; then
dnl AC_CHECK_TYPE(int32_t, int)
dnl AC_CHECK_TYPE(u_int32_t, unsigned int)
dnl elif test "$ac_cv_sizeof_short" = 4 ; then
dnl AC_CHECK_TYPE(int32_t, short)
dnl AC_CHECK_TYPE(u_int32_t, unsigned short)
dnl elif test "$ac_cv_sizeof_long" = 4 ; then
dnl AC_CHECK_TYPE(int32_t, long)
dnl AC_CHECK_TYPE(u_int32_t, unsigned long)
dnl else
dnl AC_MSG_ERROR([Cannot find a type with size of 32 bits])
dnl fi
AC_CHECK_TYPE(uint8_t, AC_DEFINE(HAVE_UINT8_T, 1, "Has uint8_t type"))
AC_CHECK_TYPE(u_int8_t, AC_DEFINE(HAVE_U_INT8_T, 1, "Has u_int8_t type"))
AC_CHECK_TYPE(int16_t, AC_DEFINE(HAVE_INT16_T, 1, "Has int16_t type"))
AC_CHECK_TYPE(uint16_t, AC_DEFINE(HAVE_UINT16_T, 1, "Has uint16_t type"))
AC_CHECK_TYPE(u_int16_t, AC_DEFINE(HAVE_U_INT16_T, 1, "Has u_int16_t type"))
AC_CHECK_TYPE(int32_t, AC_DEFINE(HAVE_INT32_T, 1, "Has int32_t type"))
AC_CHECK_TYPE(uint32_t, AC_DEFINE(HAVE_UINT32_T, 1, "Has uint32_t type"))
AC_CHECK_TYPE(u_int32_t, AC_DEFINE(HAVE_U_INT32_T, 1, "Has u_int32_t type"))
])
-13
View File
@@ -1,13 +0,0 @@
#!/bin/sh
echo "Generating build information using aclocal, autoheader, automake and autoconf."
echo
# Regerate configuration files
aclocal
autoheader
automake --gnu --add-missing --copy
autoconf
echo
echo "Now you are ready to run ./configure"
+79 -71
View File
@@ -359,90 +359,62 @@ macro(find_includes SRC INCLUDES)
endmacro(find_includes)
###############################################################################
# calculate_depends(<source filename> [<optional output variable for includes>])
# calculate_depends(<source filename> <output variable set to TRUE on fail> [<optional output variable for includes>])
#
# This macro is used in most of the src (sub)directories to calculate the
# header file dependencies for the given source file.
###############################################################################
macro(calculate_depends SRC)
# Temporarily set that we didn't get a 2nd argument before we actually check if we did get one or not
macro(calculate_depends SRC SKIP)
# Temporarily set that we didn't get a 3nd argument before we actually check if we did get one or not
set(CHECK_ANGLE_INCLUDES FALSE)
# Check for a second argument
if(${ARGC} GREATER 1)
# Check for a third argument
if(${ARGC} GREATER 2)
set(CHECK_ANGLE_INCLUDES TRUE)
endif(${ARGC} GREATER 1)
endif(${ARGC} GREATER 2)
# Find all the lines in the given source file that have any form of #include on them, regardless of whitespace, but only if they are valid for the platform we are on
find_includes(${SRC} INCLUDES)
# Reset the list of headers to empty
set(HEADERS)
# Reset skip
set(${SKIP} FALSE)
# Iterate through the strings containing #include (if any)
foreach(INCLUDE ${INCLUDES})
# Extract the filename from the #include line
extract_include_filename(${INCLUDE} FILENAME QUOTE_TYPE)
if(QUOTE_TYPE STREQUAL "quotes")
# Append the filename to the list of headers
append_to_list(HEADERS ${FILENAME})
else(QUOTE_TYPE STREQUAL "quotes")
if(QUOTE_TYPE STREQUAL "angle brackets")
# The following checks will only be done if there was a request for angle includes to be checked
if(CHECK_ANGLE_INCLUDES)
# Find the path of the include file
if(DEFAULT_INCLUDE_DIRS OR WSDK_PATH OR DEFINED $ENV{VCINSTALLDIR})
find_path(FOUND_${FILENAME}_INCLUDE NAMES ${FILENAME} PATHS ${DEFAULT_INCLUDE_DIRS} ${WSDK_PATH}/include $ENV{VCINSTALLDIR}/include)
find_path(FOUND_${FILENAME}_INCLUDE NAMES ${FILENAME} PATHS ${DEFAULT_INCLUDE_DIRS} ${WSDK_PATH}/include $ENV{VCINSTALLDIR}/include ${EXTRA_INCLUDE})
else(DEFAULT_INCLUDE_DIRS OR WSDK_PATH OR DEFINED $ENV{VCINSTALLDIR})
find_path(FOUND_${FILENAME}_INCLUDE NAMES ${FILENAME})
find_path(FOUND_${FILENAME}_INCLUDE NAMES ${FILENAME} ${EXTRA_INCLUDE})
endif(DEFAULT_INCLUDE_DIRS OR WSDK_PATH OR DEFINED $ENV{VCINSTALLDIR})
# If the include file was found, add it's path to the list of include paths, but only if it doesn't already exist and isn't in the defaults for the compiler
if(FOUND_${FILENAME}_INCLUDE)
find_in_list(DEFAULT_INCLUDE_DIRS "${FOUND_${FILENAME}_INCLUDE}" FOUND_IN_DEFAULTS)
if(FOUND_IN_DEFAULTS EQUAL -1)
find_in_list(${ARGV1} "${FOUND_${FILENAME}_INCLUDE}" FOUND_IN_INCLUDES)
find_in_list(${ARGV2} "${FOUND_${FILENAME}_INCLUDE}" FOUND_IN_INCLUDES)
if(FOUND_IN_INCLUDES EQUAL -1)
append_to_list(${ARGV1} "${FOUND_${FILENAME}_INCLUDE}")
append_to_list(${ARGV2} "${FOUND_${FILENAME}_INCLUDE}")
endif(FOUND_IN_INCLUDES EQUAL -1)
endif(FOUND_IN_DEFAULTS EQUAL -1)
else(FOUND_${FILENAME}_INCLUDE)
message(FATAL_ERROR "${SRC} needs header file ${FILENAME} but we were unable to locate that header file! Check that the header file is within the search path of your OS.")
set(${SKIP} TRUE)
message("${SRC} needs header file ${FILENAME} but we were unable to locate that header file! Check that the header file is within the search path of your OS.")
endif(FOUND_${FILENAME}_INCLUDE)
endif(CHECK_ANGLE_INCLUDES)
endif(QUOTE_TYPE STREQUAL "quotes")
endif(QUOTE_TYPE STREQUAL "angle brackets")
endforeach(INCLUDE)
# Set the list of new headers to empty (this will store all the headers that the above list depends on)
set(NEW_HEADERS)
# Iterate through the list of headers
foreach(HEADER ${HEADERS})
# If the current header has it's own headers to depend on, append those to the list of new headers
if(${HEADER}_HEADERS)
append_to_list(NEW_HEADERS ${${HEADER}_HEADERS})
endif(${HEADER}_HEADERS)
endforeach(HEADER)
# If there were new headers, append them to the list of headers
if(NEW_HEADERS)
append_to_list(HEADERS ${NEW_HEADERS})
endif(NEW_HEADERS)
# If after all the above there is a list of header, we'll process them, converting them to full paths
if(HEADERS)
# Remove duplicate headers from the list and sort the list
remove_list_duplicates(HEADERS)
sort_list(HEADERS)
# Set the list of full path headers to empty
set(HEADERS_FULL)
# Iterate through the list of headers
foreach(HEADER ${HEADERS})
# Append the full path of the header to the full path headers list
append_to_list(HEADERS_FULL ${${HEADER}_FULLPATH})
endforeach(HEADER)
# Set the given source file to depend on the headers given
set_source_files_properties(${SRC} PROPERTIES OBJECT_DEPENDS "${HEADERS_FULL}")
endif(HEADERS)
endmacro(calculate_depends)
###############################################################################
# calculate_libraries(<source filename> <output variable for linker flags> <output variable for extra depends>)
# calculate_libraries(<source filename> <output variable set to TRUE on fail> <output variable for linker flags> <output variable for extra depends>)
#
# This macro is used in most of the src (sub)directories to calculate the
# This macro is used in most of the module (sub)directories to calculate the
# library dependencies for the given source file.
###############################################################################
macro(calculate_libraries SRC SRC_LDFLAGS EXTRA_DEPENDS)
macro(calculate_libraries SRC SKIP SRC_LDFLAGS EXTRA_DEPENDS)
# Set up a temporary LDFLAGS for this file
set(THIS_LDFLAGS "${LDFLAGS}")
# Reset extra dependencies
@@ -451,6 +423,8 @@ macro(calculate_libraries SRC SRC_LDFLAGS EXTRA_DEPENDS)
set(LIBRARY_PATHS)
# Reset libraries
set(LIBRARIES)
# Default to not skipping this file
set(${SKIP} FALSE)
# Check to see if there are any lines matching: /* RequiredLibraries: [something] */
read_from_file(${SRC} "/\\\\*[ \t]*RequiredLibraries:[ \t]*.*[ \t]*\\\\*/" REQUIRED_LIBRARIES)
# Iterate through those lines
@@ -463,9 +437,9 @@ macro(calculate_libraries SRC SRC_LDFLAGS EXTRA_DEPENDS)
foreach(LIBRARY ${REQUIRED_LIBRARY})
# Locate the library to see if it exists
if(DEFAULT_LIBRARY_DIRS OR WSDK_PATH OR DEFINED $ENV{VCINSTALLDIR})
find_library(FOUND_${LIBRARY}_LIBRARY NAMES ${LIBRARY} PATHS ${DEFAULT_LIBRARY_DIRS} ${WSDK_PATH}/lib $ENV{VCINSTALLDIR}/lib)
find_library(FOUND_${LIBRARY}_LIBRARY NAMES ${LIBRARY} PATHS ${DEFAULT_LIBRARY_DIRS} ${WSDK_PATH}/lib $ENV{VCINSTALLDIR}/lib ${EXTRA_INCLUDE})
else(DEFAULT_LIBRARY_DIRS OR WSDK_PATH OR DEFINED $ENV{VCINSTALLDIR})
find_library(FOUND_${LIBRARY}_LIBRARY NAMES ${LIBRARY})
find_library(FOUND_${LIBRARY}_LIBRARY NAMES ${LIBRARY} ${EXTRA_INCLUDE})
endif(DEFAULT_LIBRARY_DIRS OR WSDK_PATH OR DEFINED $ENV{VCINSTALLDIR})
# If the library was found, we will add it to the linker flags
if(FOUND_${LIBRARY}_LIBRARY)
@@ -480,34 +454,68 @@ macro(calculate_libraries SRC SRC_LDFLAGS EXTRA_DEPENDS)
append_to_list(LIBRARIES "${LIBRARY}")
endif(MSVC)
else(FOUND_${LIBRARY}_LIBRARY)
# Skip this file
set(${SKIP} TRUE)
# In the case of the library not being found, we fatally error so CMake stops trying to generate
message(FATAL_ERROR "${SRC} needs library ${LIBRARY} but we were unable to locate that library! Check that the library is within the search path of your OS.")
message("${SRC} needs library ${LIBRARY} but we were unable to locate that library! Check that the library is within the search path of your OS.")
endif(FOUND_${LIBRARY}_LIBRARY)
endforeach(LIBRARY)
endforeach(REQUIRED_LIBRARY)
# Remove duplicates from the library paths
if(LIBRARY_PATHS)
remove_list_duplicates(LIBRARY_PATHS)
endif(LIBRARY_PATHS)
# Remove diplicates from the libraries
if(LIBRARIES)
remove_list_duplicates(LIBRARIES)
endif(LIBRARIES)
# Iterate through library paths and add them to the linker flags
foreach(LIBRARY_PATH ${LIBRARY_PATHS})
find_in_list(DEFAULT_LIBRARY_DIRS "${LIBRARY_PATH}" FOUND_IN_DEFAULTS)
if(FOUND_IN_DEFAULTS EQUAL -1)
set(THIS_LDFLAGS "${THIS_LDFLAGS} -L${LIBRARY_PATH}")
endif(FOUND_IN_DEFAULTS EQUAL -1)
endforeach(LIBRARY_PATH)
# Iterate through libraries and add them to the linker flags
foreach(LIBRARY ${LIBRARIES})
set(THIS_LDFLAGS "${THIS_LDFLAGS} -l${LIBRARY}")
endforeach(LIBRARY)
set(${SRC_LDFLAGS} "${THIS_LDFLAGS}")
set(${EXTRA_DEPENDS} "${EXTRA_DEPENDENCIES}")
if(NOT ${SKIP})
# Remove duplicates from the library paths
if(LIBRARY_PATHS)
remove_list_duplicates(LIBRARY_PATHS)
endif(LIBRARY_PATHS)
# Remove diplicates from the libraries
if(LIBRARIES)
remove_list_duplicates(LIBRARIES)
endif(LIBRARIES)
# Iterate through library paths and add them to the linker flags
foreach(LIBRARY_PATH ${LIBRARY_PATHS})
find_in_list(DEFAULT_LIBRARY_DIRS "${LIBRARY_PATH}" FOUND_IN_DEFAULTS)
if(FOUND_IN_DEFAULTS EQUAL -1)
set(THIS_LDFLAGS "${THIS_LDFLAGS} -L${LIBRARY_PATH}")
endif(FOUND_IN_DEFAULTS EQUAL -1)
endforeach(LIBRARY_PATH)
# Iterate through libraries and add them to the linker flags
foreach(LIBRARY ${LIBRARIES})
set(THIS_LDFLAGS "${THIS_LDFLAGS} -l${LIBRARY}")
endforeach(LIBRARY)
set(${SRC_LDFLAGS} "${THIS_LDFLAGS}")
set(${EXTRA_DEPENDS} "${EXTRA_DEPENDENCIES}")
endif(NOT ${SKIP})
endmacro(calculate_libraries)
###############################################################################
# check_functions(<source filename> <output variable set to TRUE on success>)
#
# This macro is used in most of the module (sub)directories to calculate the
# fcuntion dependencies for the given source file.
###############################################################################
macro(check_functions SRC SUCCESS)
# Default to true
set(${SUCCESS} TRUE)
# Check to see if there are any lines matching: /* RequiredFunctions: [something] */
read_from_file(${SRC} "/\\\\*[ \t]*RequiredFunctions:[ \t]*.*[ \t]*\\\\*/" REQUIRED_FUNCTIONS)
# Iterate through those lines
foreach(REQUIRED_FUNCTION ${REQUIRED_FUNCTIONS})
# Strip off the /* RequiredFunctions: and */ from the line
string(REGEX REPLACE "/\\*[ \t]*RequiredFunctions:[ \t]*([^ \t]*)[ \t]*\\*/" "\\1" REQUIRED_FUNCTION ${REQUIRED_FUNCTION})
# Replace all commas with semicolons
string(REGEX REPLACE "," ";" REQUIRED_FUNCTION ${REQUIRED_FUNCTION})
# Iterate through the functions given
foreach(FUNCTION ${REQUIRED_FUNCTION})
# Check if the function exists
check_function_exists(${REQUIRED_FUNCTION} HAVE_${REQUIRED_FUNCTION})
# If we don't have the function warn the user and set SUCCESS to FALSE
if(NOT HAVE_${REQUIRED_FUNCTION})
message("${SRC} needs function ${REQUIRED_FUNCTION} but we were unable to locate that function!")
set(${SUCCESS} FALSE)
endif(NOT HAVE_${REQUIRED_FUNCTION})
endforeach(FUNCTION)
endforeach(REQUIRED_FUNCTION)
endmacro(check_functions)
###############################################################################
# add_to_cpack_ignored_files(<item> [TRUE])
#
+33
View File
@@ -0,0 +1,33 @@
# Find the header files, libs, and executables for gettext
if(NOT WIN32)
find_path(GETTEXT_INCLUDE libintl.h /usr/include /usr/local/include ${EXTRA_INCLUDE})
find_library(GETTEXT_LIBRARY intl PATHS /usr/lib /usr/lib64 ${EXTRA_INCLUDE})
find_program(GETTEXT_MSGFMT msgfmt PATHS /usr/bin/ /usr/local/bin ${EXTRA_INCLUDE})
if(GETTEXT_INCLUDE AND GETTEXT_MSGFMT)
set(GETTEXT_FOUND TRUE)
endif(GETTEXT_INCLUDE AND GETTEXT_MSGFMT)
else(NOT WIN32)
find_path(GETTEXT_INCLUDE libintl.h ${DEFAULT_INCLUDE_DIRS} ${WSDK_PATH}/include $ENV{VCINSTALLDIR}/include gettext/include ${EXTRA_INCLUDE})
find_library(GETTEXT_LIBRARY libintl PATHS ${DEFAULT_LIBRARY_DIRS} ${WSDK_PATH}/lib $ENV{VCINSTALLDIR}/lib gettext/lib ${EXTRA_INCLUDE})
find_library(ICONV_LIBRARY libiconv PATHS ${DEFAULT_LIBRARY_DIRS} ${WSDK_PATH}/lib $ENV{VCINSTALLDIR}/lib gettext/lib ${EXTRA_INCLUDE})
find_library(MINGWEX_LIBRARY libmingwex PATHS ${DEFAULT_LIBRARY_DIRS} ${WSDK_PATH}/lib $ENV{VCINSTALLDIR}/lib gettext/lib ${EXTRA_INCLUDE})
find_library(GCC_LIBRARY libgcc PATHS ${DEFAULT_LIBRARY_DIRS} ${WSDK_PATH}/lib $ENV{VCINSTALLDIR}/lib gettext/lib ${EXTRA_INCLUDE})
find_program(GETTEXT_MSGFMT msgfmt PATHS ${DEFAULT_INCLUDE_DIRS} ${WSDK_PATH}/bin $ENV{VCINSTALLDIR}/bin gettext/bin ${EXTRA_INCLUDE})
if(GETTEXT_INCLUDE AND GETTEXT_MSGFMT AND ICONV_LIBRARY AND MINGWEX_LIBRARY AND GCC_LIBRARY)
set(GETTEXT_FOUND TRUE)
endif(GETTEXT_INCLUDE AND GETTEXT_MSGFMT AND ICONV_LIBRARY AND MINGWEX_LIBRARY AND GCC_LIBRARY)
endif(NOT WIN32)
# If we found everything we need set variables correctly for lang/CMakeLists.txt to use
if(GETTEXT_FOUND)
set(LIBINTL_INCLUDE "${GETTEXT_INCLUDE}/libintl.h")
set(GETTEXT_MSGFMT_EXECUTABLE ${GETTEXT_MSGFMT})
if(WIN32)
set(GETTEXT_LIBRARIES libiconv libintl libmingwex libgcc)
else(WIN32)
if(GETTEXT_LIBRARY)
set(GETTEXT_LIBRARIES ${GETTEXT_LIBRARY})
endif(GETTEXT_LIBRARY)
endif(WIN32)
endif(GETTEXT_FOUND)
@@ -3,4 +3,3 @@
file(READ "${FILE}" RESULT)
message("${RESULT}")
-1526
View File
File diff suppressed because it is too large Load Diff
Vendored
-1662
View File
File diff suppressed because it is too large Load Diff
Vendored
-8163
View File
File diff suppressed because it is too large Load Diff
-290
View File
@@ -1,290 +0,0 @@
dnl autoconf.in for Services.
dnl
dnl Anope (c) 2003-2008 Anope team
dnl Contact us at team@anope.org
dnl This program is free but copyrighted software; see the file COPYING for
dnl details.
dnl Based heavily on the Unreal configure.in script, and extra thanks to
dnl codemastr from UnrealIRCD.
AC_INIT
# Clear out any CFLAGS (cept -g) the os is using, usually -g -O2
CFLAGS="-g"
# If no bindir, we tell him to run ./Config.
if test "${with_instdir+set}" != set; then
echo "You might want to run ./Config or provide some parameters to this script."
echo "./configure --help for information about this script"
exit 0
fi
AC_CONFIG_SRCDIR([src/actions.c])
AC_CONFIG_HEADER(include/sysconf.h)
AC_PROG_CC
if test "$ac_cv_c_compiler_gnu" = "yes"; then
# CFLAGS="$CFLAGS -funsigned-char"
AC_CACHE_CHECK(if gcc has a working -pipe, ac_cv_pipe, [
save_cflags="$CFLAGS"
CFLAGS="$CFLAGS -pipe"
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],[ac_cv_pipe="yes"],[ac_cv_pipe="no"])
CFLAGS="$save_cflags"
])
if test "$ac_cv_pipe" = "yes"; then
CFLAGS="-pipe $CFLAGS"
fi
fi
dnl CFLAGS="$CFLAGS -W -Wall"
AC_PATH_PROG(RM,rm)
AC_PATH_PROG(CP,cp)
AC_PATH_PROG(TOUCH,touch)
AC_PATH_PROG(INSTALL,install)
AC_CHECK_LIB(nsl,inet_ntoa,ANOPELIBS="$ANOPELIBS-lnsl ")
AC_CHECK_LIB(socket, socket,ANOPELIBS="$ANOPELIBS-lsocket ")
AC_CHECK_LIB(resolv, res_query,ANOPELIBS="$ANOPELIBS-lresolv ")
AC_CHECK_LIB(bsd, revoke,ANOPELIBS="$ANOPELIBS-lbsd ")
dnl Does this platform require array notation to assign to a va_list?
dnl If cross-compiling, we assume va_list is "normal". If this breaks
dnl you, set ac_cv_valistisarray=true and maybe define HAVE_VA_LIST_AS_ARRAY
dnl also just to be sure.
dnl NOTE: this autoconf test is taken from mozilla: www.mozilla.org.
AC_MSG_CHECKING(whether va_list assignments need array notation)
AC_CACHE_VAL(ac_cv_valistisarray,
[AC_RUN_IFELSE([AC_LANG_SOURCE([[#include <stdlib.h>
#include <stdarg.h>
void foo(int i, ...) {
va_list ap1, ap2;
va_start(ap1, i);
ap2 = ap1;
if (va_arg(ap2, int) != 123 || va_arg(ap1, int) != 123) { exit(1); }
va_end(ap1); va_end(ap2);
}
int main()
{ foo(0, 123); return(0); }]])],[ac_cv_valistisarray=false],[ac_cv_valistisarray=true],[ac_cv_valistisarray=false])])
if test "$ac_cv_valistisarray" = true ; then
AC_DEFINE(HAVE_VA_LIST_AS_ARRAY,[1],[va_list as array])
AC_MSG_RESULT(yes)
else
AC_MSG_RESULT(no)
fi
DIS_MYSQL=" MySQL: No"
AC_ARG_WITH(mysql, [ --without-mysql Do not use MySQL or attempt to find it],,[
AC_ARG_WITH(mysqlconfig-path, [ --with-mysqlconfig-path=PATH Complete path to the mysql_config executable],
mysql_config_path="$withval", mysql_config_path="")
MYSQLCONF=""
if test "$mysql_config_path" != ""; then
if test -x "$mysql_config_path"; then
MYSQLCONF="$mysql_config_path"
echo "checking for mysql_config... $MYSQLCONF" >&6
fi
fi
if test "$MYSQLCONF" = ""; then
AC_PATH_PROG(MYSQLCONF,mysql_config, "")
fi
if test "$MYSQLCONF" != ""; then
hold_cflags="$CFLAGS"
hold_ldflags="$LDFLAGS"
if test "$MYSQL_CFLAGS" = ""; then
MYSQL_CFLAGS="`$MYSQLCONF --cflags`"
fi
if test "$MYSQL_LDFLAGS" = ""; then
MYSQL_LDFLAGS="`$MYSQLCONF --libs`"
fi
CFLAGS="$CFLAGS $MYSQL_CFLAGS"
LDFLAGS="$LDFLAGS $MYSQL_LDFLAGS"
echo $ECHO_N "checking if mysql_config produces valid values... $ECHO_C" >&6
AC_TRY_RUN([
#include <mysql.h>
int main()
{
MYSQL *mysql = mysql_init(0);
return 0;
}
], ac_cv_mysql_valid=yes, ac_cv_mysql_valid=no)
echo $ac_cv_mysql_valid >&6
if test "$ac_cv_mysql_valid" = "yes"; then
DIS_MYSQL=" MySQL: Yes"
else
CFLAGS="$hold_cflags"
LDFLAGS="$hold_ldflags"
fi
fi
])
AC_MSG_CHECKING(whether this is a bit or little endian system)
AC_TRY_RUN([
int main()
{
short s = 1;
short* ptr = &s;
unsigned char c = *((char*)ptr);
return c;
}
]
, AC_DEFINE(BIG_ENDIAN)
AC_MSG_RESULT(big)
, AC_DEFINE(LITTLE_ENDIAN)
AC_MSG_RESULT(little)
)
AC_SUBST(ANOPELIBS)
AC_SUBST(LDFLAGS)
AC_CHECK_HEADER(sys/types.h,AC_DEFINE(HAS_SYS_TYPES_H,1,"Has sys/types.h"))
dnl module checking based on Unreal's module checking code
AC_DEFUN(AC_ENABLE_DYN,
[
AC_CHECK_FUNC(dlopen,, AC_CHECK_LIB(dl,dlopen,[
ANOPELIBS="$ANOPELIBS -ldl"
],
[
AC_ERROR("dlopen() is required for Anope to be compiled and used. Sorry.")
]))
hold_cflags=$CFLAGS
CFLAGS="$CFLAGS -export-dynamic"
AC_CACHE_CHECK(if we need the -export-dynamic flag, ac_cv_export_dynamic, [
AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[int i;]])],[ac_cv_export_dynamic=yes],[ac_cv_export_dynamic=no])])
if test "$ac_cv_export_dynamic" = "no"; then
CFLAGS=$hold_cflags
fi
AC_CACHE_CHECK(for compiler option to produce PIC,ac_cv_pic,[
if test "$ac_cv_c_compiler_gnu" = "yes"; then
ac_cv_pic="-fPIC -DPIC -shared"
case `uname -s` in
Darwin*[)]
ac_cv_pic="-bundle -flat_namespace -undefined suppress"
;;
HP-UX*[)]
ac_cv_pic="-fPIC"
;;
esac
else
case `uname -s` in
SunOS*[)]
ac_cv_pic="-KPIC -DPIC -G"
;;
esac
fi
])
if test "$ac_cv_c_compiler_gnu" = "yes"; then
case `uname -s` in
Darwin*[)]
SHARED="-bundle -flat_namespace -undefined suppress"
AC_SUBST(SHARED)
;;
*[)]
SHARED="-shared"
AC_SUBST(SHARED)
;;
esac
fi
AC_CACHE_CHECK(if your system prepends an underscore on symbols,ac_cv_underscore,[
cat >uscore.c << __EOF__
int main() {
return 0;
}
__EOF__
$CC -o uscore $CFLAGS uscore.c 1>&5
if test -z "`strings -a uscore |grep '^_main$'`"; then
ac_cv_underscore=no
else
ac_cv_underscore=yes
fi
rm -f uscore uscore.c
])
if test "$ac_cv_underscore" = "yes"; then
AC_DEFINE(DL_PREFIX,"_","Underscore needed for dlopen")
else
AC_DEFINE(DL_PREFIX,"","No prefix needed for dlopen")
fi
MODULEFLAGS=$ac_cv_pic
AC_SUBST(MODULEFLAGS)
])
AC_ENABLE_DYN
anope_CHECK_TYPE_SIZES
AC_CHECK_HEADER(strings.h,AC_DEFINE(HAVE_STRINGS_H,1,""))
AC_CHECK_HEADER(sys/select.h,AC_DEFINE(HAVE_SYS_SELECT_H,1,""))
AC_CHECK_FUNCS(backtrace,AC_DEFINE(HAVE_BACKTRACE,1))
AC_CHECK_FUNCS(stricmp,AC_DEFINE(HAVE_STRICMP,1))
AC_CHECK_FUNCS(strcasecmp,AC_DEFINE(HAVE_STRCASECMP,1))
AC_CHECK_FUNCS(gettimeofday,AC_DEFINE(HAVE_GETTIMEOFDAY,1))
AC_CHECK_FUNCS(setgrent,AC_DEFINE(HAVE_SETGRENT,1))
AC_CHECK_FUNCS(umask,AC_DEFINE(HAVE_UMASK,1))
AC_CHECK_FUNCS(fork,AC_DEFINE(HAVE_FORK,1))
AC_CHECK_FUNCS(gethostbyname,AC_DEFINE(HAVE_GETHOSTBYNAME,1))
AC_CHECK_FUNCS(gethostbyname_r,AC_DEFINE(HAVE_GETHOSTBYNAME_R,1))
AC_CHECK_FUNCS(strlcpy,AC_DEFINE(HAVE_STRLCPY,1))
AC_CHECK_FUNCS(strlcat,AC_DEFINE(HAVE_STRLCAT,1))
AC_ARG_WITH(rungroup, [ --with-rungroup=group Specify the rungroup for anope], [
AC_DEFINE_UNQUOTED(RUNGROUP,"$withval","Run group")
RUNGROUP=$withval
])
AC_SUBST(RUNGROUP)
dnl AC_DEFINE_UNQUOTED(MYOSNAME,"`uname -a`","uname")
AC_ARG_WITH(permissions, [ --with-permissions=permissions Specify the default permissions for anope], AC_DEFINE_UNQUOTED(DEFUMASK,$withval,"Default umask permissions"), AC_DEFINE(DEFUMASK, 007,"Default umask Permissions"))
AC_ARG_WITH(instdir, [ --with-instdir=instdir Specify the default install dir for anope], [
INSTDIR=$withval
])
MAKEBIN=`pwd`/run-cc.pl
AC_ARG_WITH(makebin, [--with-makebin=run-cc.pl Specify the default make binary to use],[MAKEBIN=$withval])
AC_SUBST(INSTDIR)
AC_SUBST(MAKEBIN)
AC_ARG_WITH(optimization, [ --with-optimization=1|2|3|4|5 Specify the optimization level], [
CFLAGS="$CFLAGS -O$withval"
])
AC_ARG_WITH(debugsym, [ --with-debugsym Include debugging symbols], [
CFLAGS="$CFLAGS -g"
])
AC_CONFIG_FILES( \
Makefile \
src/bin/anoperc \
)
AC_OUTPUT
cat <<EOT
$DIS_MODULES
$DIS_MYSQL
All done! Now run "make" (or possibly "gmake") to compile Anope.
See the INSTALL, README and FAQ files if you have any problems.
EOT
+1 -1
View File
@@ -1,6 +1,6 @@
# Only install example.chk and example.conf from this directory
# NOTE: I would've had this just find all files in the directory, but that would include files not needed (like this file)
set(DATA example.chk example.conf)
set(DATA example.chk example.conf mysql/tables.sql)
install(FILES ${DATA}
DESTINATION data
)
+8 -5
View File
@@ -1,7 +1,7 @@
#!/bin/sh
# Crontab script for Anope
#
#
# To know how to install the crontab, read the INSTALL file.
###############################################################
@@ -11,6 +11,9 @@
# Anope binary directory
ANOPATH=/home/ircd/services/bin
# Anope data directory
ANODATA=/home/ircd/services/data
# Name of the pid file
ANOPIDF=services.pid
@@ -31,14 +34,14 @@ ANOPID=
cd $ANOPATH
if [ -f $ANOPIDF ]
if [ -f "$ANODATA/$ANOPIDF" ]
then
ANOPID=`cat $ANOPIDF`
ANOPID=`cat "$ANODATA/$ANOPIDF"`
if [ `ps auwx | grep $ANOPROG | grep $ANOPID | grep -v -c grep` = 1 ]
then
exit
exit
fi
rm -f $ANOPIDF
rm -f "$ANODATA/$ANOPIDF"
fi
./$ANOPROG $ANOARGS
+490 -239
View File
File diff suppressed because it is too large Load Diff
+453
View File
@@ -0,0 +1,453 @@
-- 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;
+3056
View File
File diff suppressed because it is too large Load Diff
+1
View File
@@ -0,0 +1 @@
git log --pretty=format:"Revision %h - %cD - %s" > version.log
+5
View File
@@ -78,6 +78,11 @@ This is safer than C-style casting in that an invalid pointer conversion will
return a NULL pointer, and an invalid reference conversion will throw a
Bad_cast exception.
Note that in Anope we prefer if Anope::debug_cast is used.
This uses dynamic_cast (and checks for a NULL pointer return) on debug builds
and static_cast on release builds, to speed up the program beacuse of dynamic_cast's
reliance on RTTI.
reinterpret_cast
----------------
+1 -1
View File
@@ -7,7 +7,7 @@ if(WIN32)
# Add README.txt to list of files for CPack to ignore
add_to_cpack_ignored_files("README.txt$" TRUE)
endif(IN_SOURCE)
set(DOCS DEFCON FAQ INSTALL MODULES NEWS PROXY ${CMAKE_CURRENT_BINARY_DIR}/README.txt WIN32.txt)
set(DOCS Changes Changes.conf DEFCON FAQ INSTALL LANGUAGE MODULES NEWS ${CMAKE_CURRENT_BINARY_DIR}/README.txt WIN32.txt)
install(FILES ${DOCS}
DESTINATION docs
)
View File
+127
View File
@@ -0,0 +1,127 @@
Anope Version 1.9.3
--------------------
A Added italics BotServ kicks support
A Tell users when their nicks expire in /ns glist and /ns info
A Added SSL support
A Prevent negaitve mode changes, kicks, bans, and autokicks from affecting people with the 'god' user mode (On UnrealIRCd, usermode +q)
A Added nickserv/auxpex permission
A Added nickserv ungroup command
A Renamed the SGLINE to be SNLINE
A Added /chanserv saset command
A Added threads for mail sending
A Added m_dnsbl and an asynchronous DNS system
A Added a new language system that uses gettext
A Added m_mysql which uses threads to execute queries
A Added many subcommand modules for some commands, eg ns_set_autoop, ns_set_email, etc
A Added a new logging system that is a bit more flexible
A Added cs_set_misc and ns_set_misc to add miscellaneous set commands
A Added os_modreload, which allows reloading some modules not normally unloable, like the protocol module
A Added FOUNDER access level
A Made OperServ, Global, MemoServ, and ChanServ optional
F Shutting down if a config reload fails
F Autoid to live through restarts on Unreal
F Storing vhosts in MySQL
F Not flushing the anope_extra table before rewriting databaes
F Anoperc start/stop to send the globaloncycle global, and fixed anoperc rehash to really rehash
F Fixed a potential crash if HostServ or BotServ was disbled
Anope Version 1.9.2
--------------------
A K alias to chanserv kick command
A KB alias to chanserv ban command
A The ability to register empty nonregistered channels
A Flatfile plaintext databases and removed old binary ones
A Added in live updating SQL and the ability to execute commands through SQL (see docs/MYSQL)
A Added support for many more modes into Anope and the ability to have generic support for modes unknown to Anope
A Added a mode stacker to combine many mode changes into fewer
A Added in the CS SET PERSIST command which can be used to keep service bots in channels even when the channel is empty
A Added AUTOOWNER OWNER and OWNERME into CS LEVELS
A Added ns_resetpass module to the core
A CS ACCESS VIEW which shows who added the access and last time used
A Last used time to CS AKICK VIEW
A Added a sha_256 encryption module
A Added the ability to load multiple encryption modules, and the ability to seamlessly convert your database between diferent encryptions
A Added configuration options to allow Anope to reconnect if it disconnects from the uplink instead of dieing
A Added support for linking with IPv6
F Unban command to accept an optional nick arg
F Some typos in services.conf
F Crash when users change their host that are identified to a group, but not a nick
F Host length checking in HS SET(ALL) and HS REQUEST
F Only show if a user is online in NS INFO if they are really identiifed for the group of the nick they are on
F Crash when using BSSmartJoin
F Converting access entries to access from xop when a users access is below voice
F A bad pointer passed to the OnDelEvent which could cause some 3rd party modules to crash
F CS FORBID allows to you forbid unregistered channels
F The -nothird command line option to work
F ms_rsend to really work
F SQUITing juped servers on InspIRCd1.2+
Anope Version 1.9.1
--------------------
F Don't enforce akick/forbidden/etc.-restrictions on clients on ulined servers.
F Remove modules_unload_all fini + hack that goes with it.
F Signal handling cleanup.
A Seamless fantasy support on all ChanServ commands, instead of requiring bs_fantasy_*.
F Allow fantasy to be disabled on some commands (e.g. FORBID).
F Some commands (e.g. !help) need to strip the pre-provided channelname from them.
D HelpServ removed
F Command parser cleanup: mod_current_buffer removed and replaced with proper parser. Commands now indicate how they want the buffer split.
F Make NS ENFORCE/RELEASE stuff more sane, redo timers.
A Opertypes (similar to InspIRCd's opertypes)
Provided by Ankit <ankit@nevitus.com> - 2009
F Segfault on shutdown
Provided by Adam <adam@anope.org> - 2009
F NickServ registration is sometimes denied.
F Applied patch from Adam to fix some potential screwups
F More fixes to bs_bot from Adam, plus an extra fix within DoAdd not covered in Adam's patch.
F Fix bs_bot to use the correct parameters, patch from Adam.
F Fix for bug #1004, based from second half of patch from Adam.
F Partial patch by Adam, commenting fix for #1006 for future reference.
F Forward-port r1946: Patch by Adam fixing #1006 (originally caused by #922): modes set by ChanServ are reversed. Thanks!
Provided by DukePyrolator <dukepyrolator@gmx.de> - 2009
F Patch converting all match calls to new method, thanks!
F Add 'w' and 'y' support to dotime(), also prevent an overflow.
F Allow NS STATUS from unregistered users, thanks DP!
F Wild pointers do not a happy Anope make. Thanks DP :)
F Allow NS REGISTER to unregistered nicks, silly oversight. Thanks DP! :)
F Fix call order, thanks to DP
F Pass the right array to do_umode(), fixes mode tracking on Unreal. Thanks to DukePyrolator (yet again :P)
F Fix bs_set help, thanks to DukePyrolator! :)
F Fix two segfaults, noted by DukePyrolator. Thanks!
F Fix part one of #1010, reported by DukePyrolator. (Language settings are not respected in message sending.) Thanks!
F Memory leak on +beI modes.
Provided by Liber <Liber@jasonirc.net> - 2009
F Support operoverride and such things (stop reversing changes from nonopped people where unnecessary)
Anope Version 1.9.0
--------------------
F Modified compile to use g++
F Improve protocol modules support (classes, virtual methods, etc)
F Move core services to use BotInfo
F Move BotInfo and related methods into a class
F Move modules into a class
F Fixed ns resending of passcode issue
F Modules now delete themselves
F additional field where users' masked host can be stored so both masked IP and vhost are available instead of just one.
F No struct Uid, ugly, and, unnecessary that we store UID in BotInfo.
F Prevent deletion of core services via /bs bot
F Module subsystem cleanup ('modules' branch)
F Move modules to use classes somewhat (AnopeInit, AnopeFini)
F Change MODULE_INIT to return a pointer
F Remove duplicate module creation.. have loadModule return a pointer rather than creating one
F Remove buffered loading/unloading, this makes os_modunload perm, but who cares
F Remove 'delayed' loading, this is necessary because of before/after connected to ircd (ircd is before, rest after), I'm sure this can be done better.
A Remove old config, replace with insp-inspired (albeit bind format) config (CBX)
F Clean up protocol modules a bit
A InspIRCd 1.2 support
F Remove old (prior to 1.8.0) db compat
F Establish a proper base for services pseudoclients
F Add ss_main StatServ Hal9000 to play with :)
F Burn automake with fire (CBX)
Provided by mooncup <mooncup@anonnet.org> - 2009
F Automatically reapply vhost on hs off for unreal.
+86
View File
@@ -0,0 +1,86 @@
Anope Version 1.9.3
------------------
** ADDED CONFIGURATION DIRECTIVES **
nickserv/auspex privilege added
SSL module added for SSL support
opertype:inherits added to allow opertypes to inherit commands and privs from other opertypes
Various nickserv/saset/* and chanserv/saset/* opertype command privileges added
nickserv:modules added many new ns_set_command modules
chanserv:modules added many new cs_set_command modules
opertype:commands added nickserv/saset/* and chanserv/saset/*
options:socketengine added to choose what socket engine to use
module:cs_set_misc and module:ns_set_misc added to replace the old set url/icq/email modules
options:hideprivilegedcommands added to hide privileged commands from normal users
log block added to customize logging
dns block added to configure dns settings
m_dnsbl added
mysql configuration block added
** MODIFIED CONFIGURATION DIRECTIVES **
opertype:commands changed operserv/sgline to opserv/snline
operserv:modules changed os_sgline to os_snline
operserv:modules added os_modreload
operserv:sglineexpiry changed to operserv:snlineexpiry
operserv:killonsgline changed to operserv:killonsnline
operserv:notifications ossgline changed ossnline
memoserv was made optional
moved operserv:global configuration into its own global block
chanserv was made optional
** DELETED CONFIGURATION DIRECTIVES **
serverinfo:helpchannel removed because it has been readded in m_helpchan
networkinfo:logchannel, logbot, logusers, logmaxusers, logchannel, and options:keeplogs removed because of the log block
dumpcore because it really didn't do anything
Anope Version 1.9.2
--------------------
** ADDED CONFIGURATION DIRECTIVES **
options:enablelogchannel added to auto turn on the logchannel on startup
options:mlock added to configure the default mlock modes on new channels
options:database added for the database modules
options:botmodes added to configure modes BotServ bots should use
options:userlen added to configure maxiumum ident length
options:hostlen added to configure maximum hostname length
options:database added to configure what database modules to use
options:passlen added to specify the maximum length of passwords
uplink:ipv6 added to enable IPv6 connectivity
options:maxretries added to specify the number of reconnect attempts allowed
options:retrywait added to specify how long to wait between reconnect attempts
opertype command chanserv/aop/list removed as it was unnecessary, use chanserv/access/list instead
** MODIFIED CONFIGURATION DIRECTIVES **
options:encryption added enc_sha256
chanserv:modules added cs_unban
nickserv:modules added ns_resetpass
** DELETED CONFIGURATION DIRECTIVES **
nickserv:database deleted because of new database system
nickserv:prenickdatabase deleted because of new database system
chanserv:database deleted because of the new database system
botserv:database deleted because of the new database system
hostserv:database deleted because of the new database system
operserv:database deleted because of the new database system
operserv:newsdatabase deleted because of the new database system
operserv:exceptiondatabase deleted because of the new database system
hs_request:database deleted because of the new database system
os_ignore:database deleted because of the new database system
serverinfo:localport deleted
Anope Version 1.9.1
-------------------
** ADDED CONFIGURATION DIRECTIVES **
Opertypes have been added, through the opertype blocks.
Services Operators are now specified in the oper blocks.
** MODIFIED CONFIGURATION DIRECTIVES **
botserv:modules no longer contains bs_fantasy* modules, fantasy is now seamless.
operserv:modules has replaced os_logonnews, os_opernews, and os_randomnews with os_news.
operserv:modules no longer contains os_admin and os_oper modules, removed in favor of oper blocks.
operserv:notifications no longer contains osraw due to removal of OS RAW.
** DELETED CONFIGURATION DIRECTIVES **
Nick tracking has been removed as an option.
Restricting of NS GETPASS and CS GETPASS removed in favor of opertypes.
Host Setters were removed in favor of opertypes.
HelpServ has been removed entirely.
operserv:disableraw removed due to removal of OS RAW.
+14 -35
View File
@@ -32,8 +32,8 @@ Anope DefCon
The DefCon system is part of Anope's core,
The DefCon system has to be configured on your services.conf file to
be enabled. All directives are optional unless they depend on what
options you enable for each level. Look for the "DefCon configuration"
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.
Make sure you restart Anope after changing the DefCon configuration
@@ -43,40 +43,19 @@ Anope DefCon
Pre-defined DefCon actions:
No new channel registrations 1
No New Nick Registrations 2
No MLOCK changes 4
Force Chan Mode 8
Use Reduced Session Limit 16
KILL any new clients trying to connect 32
Services will ignore everyone but opers 64
Services will silently ignore everyone but opers 128
AKILL all new clients trying to connect 256
No new memos sent to block MemoServ attacks 512
These are the values used to determine each defcon setting, are set via:
DefCon1 XX
DefCon2 XX
DefCon3 XX
DefCon4 XX
To set the desired value, you simply add the value of the numbers together
and place that as your DefCon# setting. For instance:
Say you wish to set:
No Channel Registrations, No Nickname Registrations and Services Ignoring
everyone except for Operators. You would do this by:
1 + 2 + 128 (Each value listed above is added together)
Giving: 131
You would then place this as which ever Defcon setting you want:
No new channel registrations
No New Nick Registrations
No MLOCK changes
Force Chan Mode
Use Reduced Session Limit
KILL any new clients trying to connect
Services will ignore everyone but opers
Services will silently ignore everyone but opers
AKILL all new clients trying to connect
No new memos sent to block MemoServ attacks
DefCon1 131
The recommended default values are safe to use on any network.
Information regarding how to enable this for specific defcon levels can
be found in services.conf
4) Usage
+21 -395
View File
@@ -2,415 +2,41 @@ Anope Internal Events
---------------------
1) Intro
2) Complex Events
3) Triggered Events
4) Triggered Events List
2) Using Events
1) Introduction to Internal Events
Internal Events are setup to give module developers more information
about what the core is doing at different times. This information can
be as complex as data we are feeding to the uplink, to simple triggered
events such as the databases being saved. A list of triggered events
can be found below. Additional there is a module included with the core
events such as the databases being saved.
Additionally there is a module included with the core
which can provide some clue as to how to use the code in your modules.
The rest of this document assumes that you are used to writing modules.
2) Complex Events
2) Using Events
This type of events are based around what happens when we talk to the
IRCd, much like MESSAGE events that the IRCD sends to us. The events
are triggered when Anope writes to the ircd. To watch for these events
you must have some knowledge of how the IRCd command system works. In
our example we will trap for NICK events.
Anope is told about modules wanting to hook to events by the function
ModuleManager::Attach(EventName, Module*);, eg:
A) All functions most be formatted as:
ModuleManager::Attach(I_OnJoinChannel, this);
int functioname(char *source, int ac, char **av);
You can also specifcy an array of events:
B) In AnopeInit you must declare EvtMessage in some fashion, it is into
this variable that we will create the event handler. Here is what the
base AnopeInit should look like at this point:
int AnopeInit(int argc, char **argv)
{
EvtMessage *msg = NULL;
int status;
Implementation i[] = { I_OnJoinChannel, I_OnPartChannel };
ModuleManager::Attach(i, this, 2);
Where 2 is the number of events in the list
moduleAddAuthor(AUTHOR);
moduleAddVersion(VERSION);
return MOD_CONT;
}
You must then overload these functions in your main modules class.
The full list of functions and parameters are in modules.h. In this
case, you would be overloading OnJoinChannel() and OnPartChannel() like so:
Note that AUTHOR and VERSION should be defined above the AnopeInit
function, just like you should do with any module.
void OnJoinChannel(User *u, Channel *c) { }
void OnPartChannel(User *u, Channel *c) { }
C) Pass "createEventHandler" the name of the message in this case NICK,
and the function that was created in Step A. At this point you should
assign the return of "createEventHandler" to the EvtMessage variable.
Some of these events can be used to prevent or allow things to happen that
would normally not be allowed or denied. You can also use ModuleManager
(not explained here) to set control which order the modules are queried
(when multiple modules hook to the same event).
msg = createEventHandler("NICK", my_nick);
D) The Handler is not ready for use yet; now you must add it to the hash
with "moduleAddEventHandler". You will want to pass to this function
the return of "createEventHandler".
status = moduleAddEventHandler(msg);
It will return the same module error codes as adding a regular message,
which you can use to confirm it was added correctly.
E) With that setup in your function you will be passed 3 items. The source
most of the time this will be set to ServerName or NULL; consult our
IRCd documentation about how messages are formatted. AC is the count of
variables you will find in AV.
int my_nick(char *source, int ac, char **av)
{
alog("Internal Event - nick is %s",av[0]);
return MOD_CONT;
}
3) Triggered Events
These events also known as "event hooks" are internal events such as
expiring of nicks to the saving of databases.
A) All functions most be formatted as:
int functioname(int argc, char **argv);
B) In AnopeInit you must declare EvtHook in some fashion; it is into
this variable that we will create the event handler. Here is what
the base AnopeInit should look like at this point:
int AnopeInit(int argc, char **argv)
{
EvtHook *hook = NULL;
int status;
moduleAddAuthor(AUTHOR);
moduleAddVersion(VERSION);
return MOD_CONT;
}
C) Pass "createEventHook" the name of the event. In this case we are
going to hook to the saving of databases, "EVENT_DB_SAVING".
hook = createEventHook(EVENT_DB_SAVING, my_save);
D) The Handler is not ready for use yet; now you must add it to the hash
with "moduleAddEventHook". You will want to pass to this function the
return of "createEventHook"
status = moduleAddEventHook(hook);
It will return the same module error codes as adding a regular message,
which you can use to confirm it was added correctly.
E) With that setup in your function you will be passed 1 item. The message
is very simple; it could be as simple as a start, stop or message. In
the case of saving it has a start and stop.
int my_save(int argc, char **argv)
{
if (argc < 1) {
return MOD_CONT;
}
if (!stricmp(argv[0], EVENT_START)) {
alog("Saving the databases! has started");
} else {
alog("Saving the databases is complete");
}
return MOD_CONT;
}
4) Triggered Events List
Here's a list of all event hooks we currently offer, with a description
of what argument is being passed to the event functions for this type of
event. All arguments are plain-text strings (char *). The list is sorted
in alphabetical order.
Note that all events are emitted AFTER the action has taken place, so
any deleted nick/channel/etc won't exist anymore and any created one will
exist when your function is being run, unless noted otherwise.
Also note that EVENT_START and EVENT_STOP should not be matched with an
equal sign, but with string comparision. See the bundled events module for
an example on how to do this.
The arguments are given as av[0] for the first argument, av[1] for the
second argument, and so on. If av[0] and av[1] are given, the event has
two arguments, and argc should be 2.
EVENT_ACCESS_ADD
An user has been added to a channel access list.
av[0] Name of the channel the user has been added to.
av[1] The nickname of the user that has just added an entry to the
access list.
av[2] The nickname of the user that has been added to the access
list.
av[3] The level number the user has been added with.
EVENT_ACCESS_CHANGE
An user level has been changed on a channel access list.
av[0] Name of the channel the access list has been modified which.
av[1] The nickname of the user that has just modified the access
list of the channel.
av[2] The nickname of the user wich his access level has just been
modified.
av[3] The new access level for the user.
EVENT_ACCESS_CLEAR
A channel access list has been cleared.
av[0] Name of the channel the access list has been cleared of
av[1] The nickname of the user that has cleared the access list
EVENT_ACCESS_DEL
An user has been deleted of a channel access list.
av[0] Name of the channel the access entry has been deleted which.
av[1] The nickname of the user that has just deleted the access entry.
av[2] [OPTIONAL] The nickname of the user wich his access level has just
been removed. Not present if numbers were used (e.g. /cs access
del 7).
EVENT_BOT_ASSIGN
A BotServ bot has been assigned to a channel.
av[0] Name of the channel the bot has been assigned to.
av[1] The nickname of the bot that has been assigned to the channel.
EVENT_BOT_BAN
A BotServ bot has banned a user, e.g. kickers.
av[0] The nick of the user banned.
av[1] The Channel the user was banned from.
av[2] The mask that was banned.
EVENT_BOT_CHANGE
The properties of a BotServ bot have been changed.
av[0] The nickname of the bot involved.
EVENT_BOT_CREATE
A new BotServ bot has been created, and is ready to use.
av[0] The nickname of the newly created bot.
EVENT_BOT_DEL
A BotServ bot is being deleted from BotServ. This event is being sent
just before the actual deletion is performed.
av[0] The nickname of the bot being deleted.
EVENT_BOT_FANTASY
A fantasy command of the bot has been triggered. This event should be
used to create your own fantasy commands.
av[0] The fantasy command that has been triggered without leading '!'.
av[1] The nickname of the user that has triggered the fantasy
command.
av[2] The name of the channel the fantasy command has been triggered
on.
av[3] Contains any optional paramenters passed after the fantasy
command. If none are present, this will not exist, and argc will
will be 3.
EVENT_BOT_FANTASY_NO_ACCESS
A fantasy command of the bot has been triggered by someone without
access to BotServ FANTASY commands on the channel. This will NOT
trigger if someone with access has triggered a fantasy command; use
EVENT_BOT_FANTASY for those. Hook to both events to catch both event
triggers.
av[0] The fantasy command that has been triggered without leading '!'.
av[1] The nickname of the user that has triggered the fantasy
command.
av[2] The name of the channel the fantasy command has been triggered
on.
av[3] Contains any optional paramenters passed after the fantasy
command. If none are present, this will not exist, and argc will
will be 3.
EVENT_BOT_JOIN
A BotServ bot has joined a channel and opped itself.
av[0] The channel name the bot has just joined.
av[1] The nickname of the bot that has joined the channel.
EVENT_BOT_KICK
A BotServ bot has kicked a user from a channel.
av[0] The name of the user that has been kicked.
av[1] The name of the channel the user was kicked from.
av[2] The reason for the kick.
EVENT_BOT_UNASSIGN
A BotServ bot is being unassigned from a channel. This event is being
sent before the actual removing of the bot is done.
av[0] The channel name the bot has been unassigned from.
av[1] The nickname of the bot that has been unassigned.
EVENT_CHAN_DROP
A channel has been dropped and deleted.
av[0] The name of the channel that has been dropped.
EVENT_CHAN_EXPIRE
A channel has been expired and will be deleted. The event will be
emitted just before the actual channel deletion happens.
av[0] The name of the channel that has been expired.
EVENT_CHAN_FORBIDDEN
A channel has been forbidden (ChanServ FORBID).
av[0] The name of the channel that has been forbidden.
EVENT_CHAN_KICK
Someone has just been kicked from a channel.
av[0] The nick of the user that has been kicked.
av[1] The channel the user has been kicked from.
EVENT_CHAN_REGISTERED
A new channel has been registered.
av[0] The name of the channel that has been registered.
EVENT_CHAN_SUSPENDED
A channel has been suspended (ChanServ SUSPEND).
av[0] The name of the channel that has been suspended.
EVENT_CHAN_UNSUSPEND
A channel has been unsuspended (ChanServ UNSUSPEND).
av[0] The name of the channel that has been unsuspended.
EVENT_CHANGE_NICK
A user has just changed it's nick.
av[0] The new nickname of the user.
EVENT_CONNECT
This event is emitted when the connection to our uplink hub is being
made.
av[0] EVENT_START or EVENT_STOP, to indicate if it's emitted before
or after the connection has been made. EVENT_STOP is emitted
before our burst is being sent over the link.
EVENT_DB_EXPIRE
This event is emitted when the expiry routines for all things that can
expire in Anope are being run.
av[0] EVENT_START or EVENT_STOP, to indicate if it's being emitted
before or after the expiry routines have been run.
EVENT_DB_SAVING
This event is emitted when the databases are being saved.
av[0] EVENT_START or EVENT_STOP, to indicate if it's emitted before
or after the saving routines have been run.
EVENT_DB_BACKUP
This event is emitted when the databases are backed up.
av[0] EVENT_START when the backup commences, and EVENT_STOP when it
finishes.
EVENT_DEFCON_LEVEL
The DefCon level has just been changed. This event is emitted before
any DefCon-related action is taken. The internal DefConLevel has
already been raised at this point.
av[0] The new level of DefCon being invoked.
EVENT_GROUP
A user has grouped it's nickname to another user group.
av[0] The nickname of the user that joined the group.
EVENT_JOIN_CHANNEL
A user joins a channel.
av[0] EVENT_START or EVENT_STOP. EVENT_START when the user has passed
all access checks and is allowed to join, but has not yet
joined the channel. EVENT_STOP when the user has joined and all
needed modes are set etc.
av[1] The nickname of the user joining the channel.
av[2] The name of the channel the user has joined.
EVENT_NEWNICK
A new user has been introduced on the network.
av[0] The nickname of the newly introduced user.
EVENT_NICK_DROPPED
A user's nick has just been dropped. Note that the nickname information
has already been deleted!
av[0] The nickname of the user that has just been dropped.
EVENT_NICK_EXPIRE
A user's nick has just expired. Note that, as with EVENT_NICK_DROPPED,
the nickname information has already been deleted!
av[0] The nickname of the user that has just expired.
EVENT_NICK_FORBIDDEN
A user's nick has just been forbidden.
av[0] The nickname that has just been forbidden.
EVENT_NICK_IDENTIFY
A user has just identified for it's nickname with NickServ.
av[0] The nickname of the user that just identified.
EVENT_NICK_LOGOUT
A user has just (been) logged out.
av[0] The nickname of the user that has (been) logged out.
EVENT_NICK_REGISTERED
A new user has just registered it's nickname. This event is being
emitted when the registration is completed, but the user modes have not
yet been set.
av[0] The nickname of the newly registered user.
EVENT_NICK_SUSPENDED
A user's nick has just been suspended.
av[0] The nickname that has just been suspended.
EVENT_NICK_UNSUSPEND
A user's nick has just been unsuspended.
av[0] The nickname that has just been unsuspended.
EVENT_PART_CHANNEL
A user parts a channel.
av[0] EVENT_START or EVENT_STOP. EVENT_START when the user is about
to be removed from the channel internally, EVENT_STOP when
this has been done.
av[1] The nickname of the user parting the channel.
av[2] The name of the channel the user has parted.
av[3] The reason the user parted the channel, this is not always sent
so check the count to make sure it was passed. (ac == 4)
EVENT_RELOAD
This event is emitted after the configuration file has been reloaded.
av[0] Always EVENT_START.
EVENT_RESTART
This event is emitted before the services are being restarted.
av[0] Always EVENT_START.
EVENT_SERVER_CONNECT
A new server has just connected to the network.
av[0] The name of the new server.
EVENT_SERVER_SQUIT
A server has sent an SQUIT and is about to be removed from the
network. This event is being sent before the server is actually
removed from the network.
av[0] The name of the server that is being removed.
EVENT_SHUTDOWN
This event is emitted when Anope is being shut down.
av[0] EVENT_START or EVENT_STOP, to indicate where in the process of
restarting the core is. With EVENT_START, services are still
fully online and operating. With EVENT_STOP, every internal
clean up has been done already, and the SQUIT has been sent;
the only thing done after emitting the event is closing the
socket to the uplink hub.
EVENT_SIGNAL
This event is emitted when Anope is quitting because of a signal it
received.
av[0] The quit message that will be sent with the SQUIT for this
shutdown.
EVENT_TOPIC_UPDATED
A channel topic has been succesfully updated. Note that this event is
only emitted if the new topic has been fully accepted and set by the
Anope core.
av[0] The name of the channel involved.
av[1] The new topic set on the channel.
EVENT_USER_LOGOFF
A user has left the network. This event is emitted before the internal
removal is performed, so the user still exists internally.
av[0] The nickname of the user leaving the network.
+271 -601
View File
@@ -1,601 +1,271 @@
How To Add IRCd Support
-----------------------
1) Files to Edit
2) Modifing the Header File
3) The Code
4) Modes
5) Functions / Events
6) CAPAB/PROTOCTL
1) Files to Edit
When preparing to add support to Anope for your ircd, you need to edit
the following files.
A) Make a copy of the .c and .h file of the IRCd that matches the ircd
that you are attempting to add support for best.
B) Make a backup copy of include/services.h, include/sysconf.h.in
C) Make a backup copy of Config and configure.in
First step in this process is to rename the .c and .h file after the IRCd
that you are going to be adding support for. Its recommended that you come
up with a name that is clear and easy to understand.
Now that you have the files that you will need to create your own ircd
support, starting with Config. This file is a shell script file; scroll
down until you find the list of ircs for the user to select. Indicate
the based ircd version which is supported such as a series 1.x or 2.2.x,
placing in the comment side an exact version that the support is for or
"experimental" if you are not the ircd developer. The next step is to
decide how the IRCd will be defined, following the existing examples edit
'IRCTYPE_DEF="IRC_RATBOX"' to be the descriptive define for your ircd.
With the Config file ready to go, edit configure.in and find in there the
reference to --with-ircd. You should see the various other ircds, and
you will want to add yours in there using the same IRC_ name you came up
with above. Important in this step is to make sure that you set the
IRCDFILE to the name of the .c file you set in step 1. Once you have the
configure.in created you can remove the old configure and at the command
prompt type "autconf"; this will generate the new configure file.
Getting close to actually modify code. Open sysconf.h.in and add two
lines for your given ircd, which is similar to this:
/* "First IRCD type" */
#undef IRC_RATBOX
Open services.h and add a line with the rest of the ircd include files to
match the name of the .h file you set in step 1.
#include "ratbox.h"
Taking the .c and .h file open them and replace the #ifdef IRC_* with the
IRC_ name you set in step two. Ensure that the code comments at the top
of the file match the ircd that the code will be for.
You are now ready to start getting into the code.
2) Modifying the Header File
Now that you have gotten past the first part of the creation process, you
are into the code. This part is the harder and more complex part. You
will need a general understanding of C code to continue. Here are the
step by step instructions required to make this work.
Open the .h file and find the section of code with
#define PROTECT_SET_MODE "+"
#define PROTECT_UNSET_MODE "-"
#define CS_CMD_PROTECT "PROTECT"
#define CS_CMD_DEPROTECT "DEPROTECT"
#define FANT_PROTECT_ADD "!protect"
#define FANT_PROTECT_DEL "!deprotect"
#define LEVEL_PROTECT_WORD "AUTOPROTECT"
#define LEVELINFO_PROTECT_WORD "PROTECT"
#define LEVELINFO_PROTECTME_WORD "PROTECTME"
If the ircd supports a protective/admin (not owner) mode, set the
PROTECT_SET_MODE and PROTECT_UNSET_MODE to be that mode. On most ircds
it's usermode "a" so you will be setting it to "+a" and "-a". The next
two are based more on what this mode is called. When you message ChanServ
to get this mode, this is the command you will be using. After this are
the fantasy commands which can be used in channel to get these modes. The
next three relate to the ACCESS LEVEL list system. Again these are the
words to gain these levels in the ACCESS LEVEL system. If your ircd does
not have these functions, leave them at what ever value is currently set;
the core code will ignore the request of the user.
Now that this is set, you can define the MODES. All user modes are stored
with UMODE_ followed by a letter matching the modes case; be careful to
use the correct case as this will make it clear when you setup MODES in
the .c in a few. Use hex values for the modes so starting at 0x00000001
to 0x8000000. In most cases you want to list all modes. If you run out of
values look at removing any modes that do not impact services.
Channel modes are done much like user modes, with the exception that
bans, exceptions, invites, and modes that are applied to a user such as
op and voice are not defined here. All other modes are defined in here.
Again be clear and use the correct case and use hex values as done with
user modes.
Finally we come to DEFAULT_MLOCK; this is the mode that services will set
by default on channels when they are registered. In general you want this
to be what is acceptable by the ircd; in most cases this is "+nt"
3) The Code
Here is where the code of the .c file comes in. Be prepared to spend at
least an hour, if not longer, going over the code and getting it right;
Especially if you are setting up an ircd that is completely different
than the one you used as a base. This section covers the majority of the
code that is in use.
The first bit of code you will face is:
const char version_protocol[] = "Ratbox IRCD";
This the protocol name which will appear in various places; especially
when you do -version at the command prompt, this is where you state the
server name. The version is not always needed unless you are showing that
the support is for one branch of a ircd family, such as Unreal 3.1 and
Unreal 3.2.
Once you have decided on this little piece of code, you will come to
flood mode characters being used for setting and removing. If your IRCd
does not support flood modes, you can just use ""; we will be setting if
your IRCD supports flooding or not in a little bit.
const char flood_mode_char_set[] = "+f";
const char flood_mode_char_remove[] = "-f";
The next task that you will face is setting whether the IRCD sends time
stamps on modes but does not tell us that it will do so. If it does, set
UseTSMODE to 1; if it does not set it to be 0. If you're not sure refer
to your IRCd's documentation on how MODE is sent.
int UseTSMODE = 0;
Now you've come to the part where you setup your ircd. There are two
structs which hold this information; This allows you to quickly setup
your specific ircd.
IRCDVar ircd[] = { }
This struct contains your basic IRCd functions. Your base source file has
the list of all available variables; note that you should not swap any
around, or you will break stuff. Here is a brief description of the usage
of each.
1) Name: This member tells Anope about the IRCD's name. It may contain
text about it's name and version. This is used to identify the
build on startup.
2) NickServ Mode: This is the user mode set by Anope on NickServ.
Normally you want this to be some form of oper flag,
or a services flag.
3) ChanServ Mode: This is the user mode set by Anope on ChanServ.
Normally you want this to be some form of oper flag,
or a services flag.
4) MemoServ Mode: This is the user mode set by Anope on MemoServ.
Normally you want this to be some form of oper flag,
or a services flag.
5) HostServ Mode: This is the user mode set by Anope on HostServ.
Normally you want this to be some form of oper flag,
or a services flag. Note that if your ircd does not
support HostServ, you can safely make this NULL or +,
as there is a check before bringing HostServ online.
6) OperServ Mode: This is the user mode set by Anope on OperServ.
Normally you want this to be some form of oper flag,
or a services flag.
7) BotServ Mode: This is the user mode set by Anope on BotServ.
Normally you want this to be some form of oper flag,
or a services flag.
8) HelpServ Mode: This is the user mode set by Anope on HelpServ.
Normally you want this to be some form of oper flag,
or a services flag.
9) DevNull Mode: This is the user mode set by Anope on DevNull.
Normally you want this to be some form of oper flag,
or a services flag.
10) Global Mode: This is the user mode set by Anope on Global.
Normally you want this to be some form of oper flag,
or a services flag.
11) NickServ Alias Mode: This is the user mode set by Anope on the alias
of NickServ. Normally you want this to be some
form of oper flag, or a services flag.
12) ChanServ Alias Mode: This is the user mode set by Anope on the alias
of ChanServ. Normally you want this to be some
form of oper flag, or a services flag.
13) MemoServ Alias Mode: This is the user mode set by Anope on the alias
of MemoServ. Normally you want this to be some
form of oper flag, or a services flag.
14) HostServ Alias Mode: This is the user mode set by Anope on the alias
of MemoServ. Normally you want this to be some
form of oper flag, or a services flag. Note that
if your ircd does not support HostServ, you can
safely make this NULL or +, as there is a check
before bringing HostServ online.
15) OperServ Alias Mode: This is the user mode set by Anope on the alias
of OperServ. Normally you want this to be some
form of oper flag, or a services flag.
16) BotServ Alias Mode: This is the user mode set by Anope on the alias
of BotServ. Normally you want this to be some
form of oper flag, or a services flag.
17) HelpServ Alias Mode: This is the user mode set by Anope on the alias
of HelpServ. Normally you want this to be some
form of oper flag, or a services flag.
18) DevNull Alias Mode: This is the user mode set by Anope on the alias
of DevNull. Normally you want this to be some
form of oper flag, or a services flag.
19) Global Alias Mode: This is the user mode set by Anope on the alias
of Global. Normally you want this to be some form
of oper flag, or a services flag.
20) BotServ Bots Mode: This is the user mode set by Anope on all BotServ
bots. Normally you want this to be a some form of
service or bot flag; you can use + for no mode at
all.
21) Max Channelmode Symbols: This is the total number of possible channel
modes that can appear before a nick. Do
remember to count each possible mode, so +ov
is 2.
22) Modes to Remove: This is every mode that Anope should remove when
stripping channel modes.
23) Channelmode for bots: When a BotServ bot joins a channel, this is the
mode set on them. Normally you will want them
opped (+o), and protected (+a) on IRCd's that
support it.
24) SVSNICK: Can the ircd use SVSNICK to change some ones nick? Otherwise,
KILL is used. Use 1 for yes, 0 for no.
25) VHOST: Can a user's host be changed on the fly? Enabling this allow
HostServ online. Use 1 for yes, 0 for no.
26) OWNER: Has a channel umode for being the channel owner. For example,
UnrealIRCd has mode +q. Use 1 for yes, 0 for no.
27) OWNER MODE SET: What mode to set to make someone the owner. If the
IRCd doesn't support owners, set this to NULL.
28) OWNER MODE UNSET: What mode to unset to take away someone's channel
owner status. If the IRCd doesn't support owners,
set this to NULL.
29) ADMIN MODE SET: What mode to set to make someone a channel admin.
If the IRCd dosn't support admins, set to NULL.
30) ADMIN MODE UNSET: What mode to unset to take away channel admin.
If the IRCd dosn't support admins, set to NULL.
31) Mode on Nick Register: What mode to give users when they register
with NickServ. If your ircd doesn't set expect
a mode to be set on registration, you should
set this to NULL.
32) Mode on Nick Unregister: What mode to set give users when they cancel
their registration with NickServ. If your
IRCd doesn't set a mode for registered users
you should set this to NULL.
33) Mode on Nick Change: What mode to give users when they change their
nick. If your ircd doesn't set a mode, you
should set this to NULL.
34) SGLINE: Does the IRCd support realname (geocs) bans? Use 1 for yes,
0 for no.
35) SQLINE: Does the IRCd support nick bans? Use 1 for yes, 0 for no.
36) SZLINE: Does the IRCd support SZLINES? Use 1 for yes, 0 for no.
37) HALFOP: Is channel mode +h for halfop supported by the IRCd? Use 1 for
yes, 0 for no.
38) Number of Server Args: When an IRCd connects, this is the number of
parameters that are passed.
39) Join to Set: Services must join a channel to set any modes on that
channel. Use 1 for yes, 0 for no.
40) Join to Message: Services must join a channel to send any message to
that channel (cannot override +n). Use 1 for yes,
0 for no.
41) Exceptions: Support for channel exceptions (mode +e). Use 1 for yes,
0 for no.
42) TS Topic Forward: Some IRCd's (like UnrealIRCd) like their topic TS
set forward by +1. Use 1 for yes, 0 for no.
43) TS Topic Backward: Some IRCd's (mainly older DreamForge-like ones)
like their topic TS set back by -1. Use 1 for yes,
0 for no.
44) Protected Umode: UMODE_ define that defines the protected usermod.
Use 0 for no support, or enter the UMODE_ define.
45) Admin: Support for channel admins (Mainly used by UltimateIRCd). Use
1 for yes, 0 for no.
46) SQline Channels: The IRCd's supports banning channel names via
SQLINES. Use 1 for yes, 0 for no.
47) Quit On Kill: When we (SVS)KILL a user, does the IRCd send back a
QUIT message for that user? Use 1 for yes, 0 for no.
48) SVSMODE -b: We can use SVSMODE to unban hosts from a channel. Use
1 for yes, 0 for no.
49) Protect: Support for channel protect (mode +a, mainly being used by
UnrealIRCd and ViagraIRCd). Use 1 for yes, 0 for no.
50) Reverse: We can do a reverse check when unbanning. For use with
DreamForge based IRCd's. Use 1 for yes, 0 for no.
51) Register Channels: Supports sending a channelmode for registered
channels. Use 1 for yes, 0 for no.
52) Registered Mode: Channelmode to set on registered channels, see the
option above. Use 1 for yes, 0 for no.
53) vIdent: Support for including a user's ident in their vHost. Use
1 for yes, 0 for no.
54) SVSHOLD: Support for temporarily 'holding' a nick, instead of using
a nick enforcer client. Use 1 for yes, 0 for no.
55) TS on MODE: We need to send a timestamp when modes are being changed.
Use 1 for yes, 0 for no.
56) NICKIP: The IP address of new users is being sent along with their
hostname when new users are being introduced on the network.
Use 1 for yes, 0 for no.
57) Umode: We can use OperServ to change a user's mode. Use 1 for yes,
0 for no.
58) O:LINE: We can use OperServ to give some user a temporary O:LINE.
Use 1 for yes, 0 for no.
59) Vhost On Nick: On NICK the IRCd sends the VHOST. Use 1 for yes,
0 for no.
60) Change Realname: Change real name. Use 1 for yes, 0 for no.
61) Extra Help: If the IRCd has more help for functions in ChanServ than
the default help, you should put the language string
identifier here. Use 0 for no extra help.
62) No Knock: CMODE_ that defines NO KNOCK. Use 0 for no support.
63) Admin Only: CMODE_ that defines Admin Only. Use 0 for no support.
64) Default MLock: Default channelmodes for MLOCK. Use 0 for no modes.
65) Vhost Umode: UMODE_ that indicates if the user currently has a vHost.
Use 0 for no support.
66) Flood Mode: The IRCd has a channelmode for blocking floods. Use 1 for
yes, 0 for no.
67) Link Mode: The IRCd has a channelmode for linking a channel to some
other channel. Use 1 for yes, 0 for no.
68) CMode F: CMODE_ that defines flood mode. Use 0 for no support.
69) CMode L: CMODE_ that defines link mode. Use 0 for no support.
70) Check Nick ID: Should we check if a user should remain identified when
changing their nick? This is for IRCd's that remove
their registered-user mode when someone changes their
nick (like Bahamut does).
Use 1 for yes, 0 for no.
71) No Knock Requires +i: Does the No Knock channel mode require invite
only channels? Use 1 for yes, 0 for no.
72) Chan Modes: If sent in CAPAB/PROTOCOL, we store it in here. This is
NULL by default.
73) Tokens: Can we use tokens to talk to the IRCd? Use 1 for yes,
0 for no.
74) Token Case Senstive: Are the IRCd's TOKENS/COMMANDS case sensitive?
Use 1 for yes, 0 for no.
75) base64 SJOIN TS: Are the timestamps sent with a SJOIN in base64? Use
1 for yes, 0 for no.
76) Supports +I: Does the IRCd support channelmode +I? Use 1 for yes,
0 for no.
77) SJOIN Ban Char: Character used to identify bans. Use ''.
78) SJOIN Except Char: Character used to identify exceptions. use ''.
79) SVSMODE UCMODE: Can we clear user channel modes with SVSMODE? Use
1 for yes, 0 for no.
80) SGline Enforce: Does the IRCd enforce SGLINES for us or do we need to
do so? Use 1 for yes, 0 for no.
81) Vhost Character: The character used to represent the vHost mode, if
this is supported by the IRCd.
82) TS6: Does the IRCd support TS6? Use 1 for yes, 0 for no.
83) UMode +h: Does the IRCd support usermode +h for helpers?
Use 1 for yes, 0 for no.
84) P10: Is this IRCd a P10-style IRCd? Use 1 for yes, 0 for no.
85) Character Set: Unreal passes the character set during PROTOCTL,
the value is stored here. Set this NULL to start.
86) Reports sync: Does the IRCd report when it's in sync (or done bursting,
depending on how you want to say it)? Remember to set
the sync state for servers correctly if it does.
Use 1 for yes, 0 for no.
87) Channel CIDR: Set to 1 if channel bans, excepts and invites
support CIDR masks. Expected syntax: *!*@ip/mask.
When set to 1, anope will only parse strict CIDR masks.
IRCd's that try to correct invalid CIDR's (like nefarious)
will need a custom implementation in the core.
Contact the anope Dev Team if this is the case.
Set to 0 if CIDR's are not supported by your IRCd.
So we've had this long list. Now there's a second struct to fill. This
struct isn't as long as the previous one though, so we'll handle it quite
quick compared to the previous one.
IRCDCAPAB ircdcap[] = { }
This struct is based on the CAPAB defines. You should review the CAPAB
table below to see how this should be done.
Define Table
--------------------------------------------------------------------------
Define | Value | Token | Description
----------------|------------|-----------|--------------------------------
CAPAB_NOQUIT | 0x00000001 | NOQUIT | NOQUIT protocol support
CAPAB_TSMODE | 0x00000002 | TS | Chanmodes are timestamped
CAPAB_UNCONNECT | 0x00000004 | UNCONNECT | UNCONNECT protocol support
CAPAB_NICKIP | 0x00000008 | NICKIP | IP sent in the NICK line
CAPAB_NSJOIN | 0x00000010 | SSJOIN | Smart SJOIN support
CAPAB_ZIP | 0x00000020 | ZIP | Support for gzipped links
CAPAB_BURST | 0x00000040 | BURST | Supports BURST command
CAPAB_TS3 | 0x00000080 | TS3 | Support for TS3 protocol
CAPAB_TS5 | 0x00000100 | TS5 | Support for TS5 protocol
CAPAB_DKEY | 0x00000200 | DKEY | DH-Key exchange using DKEY
CAPAB_DOZIP | 0x00000400 | ZIP | Link traffic will be gzipped
CAPAB_DODKEY | 0x00000800 | DKEY | Do DKEY with this link
CAPAB_QS | 0x00001000 | QS | Supports quit storm removal
CAPAB_SCS | 0x00002000 | SCS | String Cache System support
CAPAB_PT4 | 0x00004000 | PT4 | Support for PT4 protocol
CAPAB_UID | 0x00008000 | UID | Support for UIDs
CAPAB_KNOCK | 0x00010000 | KNOCK | Supports KNOCK
CAPAB_CLIENT | 0x00020000 | CLIENT | Supports CLIENT
CAPAB_IPV6 | 0x00040000 | IPV6 | Support for IPv6 addresses
CAPAB_SSJ5 | 0x00080000 | SSJ5 | Smart Join protocol 5 support
CAPAB_SN2 | 0x00100000 | SN2 | Support for SN2 protocol
CAPAB_VHOST | 0x00200000 | VHOST | Supports VHOST protocol
CAPAB_TOKEN | 0x00400000 | TOKEN | Supports s2s tokens
CAPAB_SSJ3 | 0x00800000 | SSJ3 | Smart Join protocol 3 support
CAPAB_NICK2 | 0x01000000 | NICK2 | Support for extended NICK (v2)
CAPAB_UMODE2 | 0x02000000 | UMODE2 | Supports UMODE2 command
CAPAB_VL | 0x04000000 | VL | VLine information in info field
CAPAB_TLKEXT | 0x08000000 | TLKEXT | Not 8, but 10 params in TKL's
CAPAB_CHANMODE | 0x10000000 | CHANMODE | Channel modes are passed here
CAPAB_SJB64 | 0x20000000 | SJB64 | SJOIN timestamps are base64 encoded
CAPAB_NICKCHARS | 0x40000000 | NICKCHARS | Character set used by the IRCD for nicks
4) Modes
The next thing you should do is defining the user modes. You will want to
have your .h file handy for this part.
unsigned long umodes[128] = { }
This array goes from 0 to 127 in the ASCII character set. Insert the user
modes at the slot where the mode fits. If you are adding a the user mode
of +i find the 105th (ASCII code of 'i') character slot in the array, and
place the UMODE_i into this slot. Your base .c file should contain a good
start for this, as well as a little help locating the characters.
The following mode set is for the channel symbols. During a SJOIN event
the modes are sent usually before the nick. These normally are @, +, %
etc.. depending on the ircd. Starting at ASCII 0 and running to 127.
Replace the 0 with the character (o = @, h = %) for the given mode. In the
case of halfop which is usually sent as % replace the 37th character with
'h', do this until all modes that are possible be received in this manor
have been inserted into the array.
Now that you have that complete, the following array is ready to be dealt
with. This is the cmmodes array, like the others it is a ASCII array
starting at 0 and going to 127. However at the given letter you will want
to enter the add, and delete function for the given mode. In the case of
bans (+b) there is add_ban, and del_ban. Anope provides functions for
bans, exceptions and invites, should your ircd have more then these please
contact Anope to discuss what can be done to add this mode.
5) Functions and Events
A brief word about functions and events. All events are captured using:
void moduleAddIRCDMsgs(void)
{
m = createMessage("NICK", anope_event_nick);
addCoreMessage(IRCD,m);
}
Each event should have a event handler if its important enough to be
processed by services. All event functions should be formed like this:
int anope_event_capab(char *source, int ac, char **av)
{
return MOD_CONT;
}
They will receive the source; this can be NULL at times depending on the
event. Next, ac is the number of arguments that are in the event, and av
holds the values for each; so av[0] is the first variable, av[1] will be
the second one, and so on. Events are likely to pass to various upper
level event handlers; see the previous ircd source for how they handle
these events.
All commands are formed like this:
void anope_cmd_svsnoop(char *server, int set)
{
send_cmd(NULL, "SVSNOOP %s %s", server, (set ? "+" : "-"));
}
They may take any number of arguments, depending on the command. They
should eventually come to a send_cmd(); this root function is how
commands are sent to the IRCd.
6) CAPAB/PROTOCTL
Most IRCD send a CAPAB or PROTOCTL line so that they can work out what
the other end of the connection is capable of doing. Anope has a function
to read these lines and set itself up to to handle these events better.
When adding support for your ircd, take the following steps.
1) In the ircd.c find the function anope_cmd_capab(); this function will
send the CAPAB/PROTOCTL line (consult your ircd documentation for
which to send). In a single line type in the tokens that anope must
send. Here is an example of Hybrid's capab line:
/* CAPAB */
void anope_cmd_capab()
{
send_cmd(NULL, "CAPAB TS5 EX IE HOPS HUB AOPS");
}
2) In the ircd.h file make sure to place the defines (see below) that
match your IRCd's tokens; only use the ones that matter to your ircd.
Should your IRCd add new features not covered in the defined, please
contact the Anope Dev team before doing so. See README for information
on how to contact the Anope team.
3) Ensure that the CAPAB/PROTOCTL event his handled correctly.
A) In the function "moduleAddIRCDMsgs" making sure that you have the
following two lines:
m = createMessage("CAPAB", anope_event_capab);
addCoreMessage(IRCD,m);
B) Add the function to handle the event
int anope_event_capab(char *source, int ac, char **av)
{
capab_parse(ac, av);
return MOD_CONT;
}
This function should call the capab_parse function which parses
the received CAPAB/PROTOCTL line.
How To Add IRCd Support
-----------------------
1) Files to Edit
2) The Code
3) The IRCDVar struct
4) Modes
5) Functions / Events
6) CAPAB/PROTOCTL
7) IRCDProto Class
1) Files to Edit
When preparing to add supprt to Anope for your IRCd, you need to edit
the following files
A) Make a copy of the .cpp file of the IRCd that matches the IRCd that
you are attempting to add support for best.
B) Add your IRCd into the supported IRCds in example.conf
2) The Code
Here is where the code of the .cpp file comes in. Be prepared to spend at
least an hour, if not longer, going over the code and getting it right;
Especially if you are setting up an ircd that is completely different
than the one you used as a base. This section covers the majority of the
code that is in use.
The first bit of code you will face is the IRCDVar structure, This is one
of two structs which holds your IRCd information; This allows you to quickly
setup your specific ircd.
IRCDVar myIrcd[] = { };
This struct contains your basic IRCd functions. Your base source file has
the list of all available variables; note that you should not swap any
around, or you will break stuff. Here is a brief description of the usage
of each.
1) Name: This member tells Anope about the IRCD's name. It may contain
text about it's name and version. This is used to identify the
build on startup.
2) Pseudo Client Mode: This is the user mode set by Anope on all BotServ
bots. Normally you want this to be a some form of
service or bot flag; you can use + for no mode at
all.
3) Max Channelmode Symbols: This is the total number of possible channel
modes that can appear before a nick. Do
remember to count each possible mode, so +ov
is 2.
4) SVSNICK: Can the ircd use SVSNICK to change some ones nick? Otherwise,
KILL is used. Use 1 for yes, 0 for no.
5) VHOST: Can a user's host be changed on the fly? Enabling this allow
HostServ online. Use 1 for yes, 0 for no.
6) SNLINE: Does the IRCd support realname (geocs) bans? Use 1 for yes,
0 for no.
7) SQLINE: Does the IRCd support nick bans? Use 1 for yes, 0 for no.
8) SZLINE: Does the IRCd support SZLINES? Use 1 for yes, 0 for no.
10) Join to Message: Services must join a channel to send any message to
that channel (cannot override +n). Use 1 for yes,
0 for no.
11) SQline Channels: The IRCd's supports banning channel names via
SQLINES. Use 1 for yes, 0 for no.
12) Quit On Kill: When we (SVS)KILL a user, does the IRCd send back a
QUIT message for that user? Use 1 for yes, 0 for no.
13) SVSMODE UNBAN: We can use SVSMODE to unban hosts from a channel. Use
1 for yes, 0 for no.
14) Reverse: We can do a reverse check when unbanning. For use with
DreamForge based IRCd's. Use 1 for yes, 0 for no.
15) vIdent: Support for including a user's ident in their vHost. Use
1 for yes, 0 for no.
16) SVSHOLD: Support for temporarily 'holding' a nick, instead of using
a nick enforcer client. Use 1 for yes, 0 for no.
17) TS on MODE: We need to send a timestamp when modes are being changed.
Use 1 for yes, 0 for no.
18) Umode: We can use OperServ to change a user's mode. Use 1 for yes,
0 for no.
19) OMODE: We can use OperServ to give some user a temporary O:LINE.
Use 1 for yes, 0 for no.
20) No Knock Requires +i: Does the No Knock channel mode require invite
only channels? Use 1 for yes, 0 for no.
21) SVSMODE UCMODE: Can we clear user channel modes with SVSMODE? Use
1 for yes, 0 for no.
22) SGline Enforce: Does the IRCd enforce SNLINES for us or do we need to
do so? Use 1 for yes, 0 for no.
23) TS6: Does the IRCd support TS6? Use 1 for yes, 0 for no.
24) 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
be "$"
26) Max Modes: The max number of mode changes we can send in one line
3) Modes
Anope is told about modes in the protocol module.
For the most part, the syntax for adding channel and user modes are:
ModeManager::AddUserMode(new UserMode(UMODE_NETADMIN, "UMODE_NETADMIN", 'N'));
Where 'N' is the char for the mode, and UMODE_NETADMIN shows what the
mode does. Or:
ModeManager::AddChannelMode(new ChannelMode(CMODE_BLOCKCOLOR, "CMODE_BLOCKCOLOR", 'c'));
Where 'c' is the char for the mode and CMODE_BLOCKCOLOR shows what
the mode does
A full list of valid mode names for the second param can be found
in services.h in the enum for ChannelModeName and UserModeName
If necessary, you can add additional modes to this list.
Adding simple modes with parameters is similar, instead adding a
'new ChannelMode', use 'new ChannelModeParam', set the third optional
arg of ChannelModeParam to false if the param should NOT be sent when unsetting
it. Eg:
ModeManager::AddChannelMode(new ChannelModeParam(CMODE_JOINFLOOD, "CMODE_JOINFLOOD", 'j', true));
Anope will internally track the params, and they can be retrieved through
Channel::GetParam();
If you want to make param validity checking for a mode, you must create a new
class which inherits from ChannelModeParam and overload the IsValid function.
Modes CMODE_OPERONLY, CMODE_ADMINONLY, and CMODE_REGISTERED already exist
internally as classes, to overload the CanSet function to disable non opers
from mlocking (or in CMODE_REGISTERED's case, anyone) from setting them.
This should be added like:
ModeManager::AddChannelMode(new ChannelModeOper('O'));
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
with the name of the message and the callback function:
Message my_message("MESSAGE", do_my_messsage);
Each message should have a message handler if its important enough to be
processed by services. All event functions should be formed like this:
bool do_my_message(const Anope::string &source, const std::vector<Anope::string> &params)
{
return true;
}
They will receive the source; this can be empty at times depending on the
event. Next, params holds the arguments for the event. Events are likely to
pass to various upper level event handlers; see the previous ircd source for
how they handle these events.
5) CAPAB/PROTOCTL
Most IRCD send a CAPAB or PROTOCTL line so that they can work out what
the other end of the connection is capable of doing. Anope has a function
to read these lines and set itself up to to handle these events better.
When adding support for your ircd, take the following steps.
1) In the 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
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.
6) IRCDProto Class
The IRCDProto class is set up like:
class MyIRCdProto : public IRCDProto { } ircdproto;
And told to Anope through the
pmodule_ircd_proto(&ircd_proto);
function.
This is used for sending out specific messages from Anope to your IRCd.
A list of all of the valid function names to overload and their args
are in services.h. If the protocol module you are editing is similar enough
to the IRCd you are adding support for, many of these probably won't need to
be changed.
+37
View File
@@ -0,0 +1,37 @@
Anope Mutli Language Support
----------------------------
1) Building Anope with gettext support
2) Adding a new language
3) Using languages with modules
1) Building Anope with gettext support
To build Anope with gettext support gettext and its devlopmental libraries must be installed on the system.
Anope does not require locales to be installed or enabled on the system, but does require the locales-all
package on Debian and Debian based systems.
Building Anope on Windows with gettext support is explained in docs/WIN32.txt
2) Adding a new language
Anope uses gettext (http://www.gnu.org/software/gettext/) to translate messages for users. To add a new language
install gettext and run `msginit -l language -o anope.language.po -i anope.pot`. For example if I was translating to
Spanish I could run `msginit -l es_ES -o anope.es_ES.po -i anope.pot`. Open the newly generating .po file and start
translating. Once you are done simply rerun ./Config; make && make install and add the language to your services.conf.
Note that on Windows it is not quite this simple, windows.cpp must be edited and Anope recompiled and restarted.
Poedit (http://www.poedit.net/) is a popular po file editor, and we recommend using it or another editor designed to edit
po files (especially on Windows).
If you have finished a language file translation and you want others to use it, please send it to team@anope.org
(don't forget to mention clearly your (nick)name, your e-mail and the language name). You'll of course get full credit for it.
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.
-6
View File
@@ -1,6 +0,0 @@
Anope MySQL Support
-------------------
MySQL Support was removed in 1.9.0 until it can be better implemented moving forward.
+1 -2
View File
@@ -1,8 +1,7 @@
Highlighted News in Anope 1.9
=============================
* Removed MySQL Support (pending better implementation)
* Added in live updating SQL and the ability to execute commands through SQL
* Re-designed configuration file
* Code refresh / rewrite into C++
-41
View File
@@ -1,41 +0,0 @@
Anope Proxy Detector
--------------------
1) Introduction
2) Alternatives
1) Introduction
Anope has had a built-in proxy detector since it's first version. Recently,
however, this built-in proxy detector has been removed. This was because
the Anope team found that the proxy detector was showing it's age, and the
time needed to restore it to a good state wasn't worth it, also considering
that there are currently good alternatives out there which do the job as
good as it can be done already.
2) Alternatives
A) Blitzed Open Proxy Monitor (BOPM)
B) NeoStats + OPSB
Note that these are seperate projects and that the Anope team won't give
support on these programs. For support, please refer to the sites of the
creators of the software packages.
A) Blitzed Open Proxy Monitor (BOPM)
URL: http://wiki.blitzed.org/BOPM
BOPM is currently the leading proxy detector for IRC networks out
there. Altough it is not designed to run on a central place for the
entire network, it can be done with some minor tweaking on most IRCd's.
The Anope Team advises BOPM for the best security.
B) NeoStats + OPSB
URL: http://www.neostats.net/
NeoStats is the swiss knife of IRC tools. In combination with the OPSB
module by NeoStats Software, it can scan for proxies in a similar way
as BOPM does. The OPSB module is based on BOPM and has been adjusted to
be able to scan all clients from one centralized proxy detector.
+29 -77
View File
@@ -1,7 +1,7 @@
Anope -- a set of IRC services for IRC networks
-----------------------------------------------
Anope is 2003-2009 Anope Team <team@anope.org>.
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>.
@@ -188,12 +188,10 @@ Table of Contents
on daemons supporting ip cloaking, such as UnrealIRCd, UltimateIRCd
and ViagraIRCd.
* HelpServ, a skeleton service used to serve help files.
Anope currently works with:
* Bahamut 1.4.27 or later (including 1.8)
* InspIRCd 1.1 or later (including 1.2)
* InspIRCd 1.1, 1.2, or 2.0
* Ratbox 2.0.6 or later
* UnrealIRCd 3.2 or later
@@ -209,97 +207,51 @@ Table of Contents
4) Command Line Options
Normally, Anope can be run simply by invoking the "services" executable.
Anope will then use the defaults specified in the services.conf file, and
connect to the specified uplink server. Alternatively, any of the
following command-line options can be specified to change the default
values:
-remote server[:port] Connect to the specified server
-local host -or- Connect from the specified address (e.g. for
[host]:[port] multihomed servers)
-name servername Our server name (e.g. services.some.net)
-desc string Description of us (e.g. SomeNet Services)
-user username Username for Services' nicks (e.g. services)
-host hostname Hostname for Services' nicks (e.g. esper.net)
-dir directory Directory containing Services' data files
(e.g. /usr/local/lib/services)
-log filename Services log filename (e.g. services.log)
-update secs How often to update databases (in seconds)
-expire secs How often to check for nick/channel
expiration (in seconds)
Additionally, the following command-line options can be used to modify
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
--debug Enable debugging mode; more info sent to log (give
option more times for more info)
-readonly Enable read-only mode; no changes to databases
allowed, .db files and log not written
-skeleton Enable skeleton mode; like read-only mode, but only
OperServ is available
-nofork Do not fork after startup; log messages will be
written to terminal (as well as to the log file
if not in read-only mode)
-forceload Try to load as much of the databases as possible,
even if errors are encountered
-noexpire Expiration routines won't be run at all
-logchan Startup with logchan enabled
-version Display the version of Anope
-nothird Do not load the modules specified in ModulesAutoload
or ModulesDelayedAutoload in the config file
-protocoldebug Debug each incoming message after protocol parsing
-support Used for support, same as -debug -nofork -nothird
--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).
Upon starting, Anope will parse its command-line parameters, open its
logfile, then (assuming the -nofork option is not given) detach itself
and run in the background. If Anope encounters a problem reading the
database files or cannot connect to its uplink server, it will terminate
immediately; otherwise, it will run until the connection is terminated
(or a QUIT, SHUTDOWN, or RESTART command is sent; see OperServ's help).
In the case of an error, an appropriate error message will be written to
the log file.
If Anope is run with the "-readonly" command-line option, it can serve as
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
(run without --readonly) will automatically reintroduce its pseudo-clients
(NickServ, ChanServ, etc.), while a "backup" services will not, thus
allowing full services to be brought up at any time without disrupting
the network (and without having to take backup services down beforehand).
If Anope is run with the "-skeleton" command-line option, it will not try
to load the nickname or channel databases, and will respond with "service
is inactive" messages to any commands sent to NickServ, ChanServ,
MemoServ or BotServ. This can be useful as an emergency stopgap measure
when the main copy of Anope cannot be started.
The "-debug" option is useful if you find or suspect a problem in Anope.
The "--debug" option is useful if you find or suspect a problem in Anope.
Giving it once on the command line will cause all traffic to and from
services as well as some other debugging information to be recorded in
the log file; if you send a bug report, PLEASE include an excerpt from
the log file WITH DEBUGGING ACTIVE; we cannot emphasize enough how
important this is to tracking down problems. (You can also enable
debugging while Services is running using OperServ's SET DEBUG command.)
If you repeat the -debug option more than once, the debugging level will
be increased, which provides more detailed information but may also slow
Anope down considerably and make the log file grow dramatically faster
(in particular, at debug level 4 a message is written to the log for
every character received from the server). In general, a debug level of 1
is sufficient for the coding team to be able to trace a problem, because
all network traffic is included and we can usually reproduce the problem.
The "-forceload" option is provided to attempt recovery of data from
corrupted or truncated databases. Normally, if Anope encounters an error
writing to a database file, it will attempt to restore the original
version of the file and report an error to the logfile and through
WALLOPS. However, if this should fail (which normally should not happen),
or if Anope is terminated abruptly e.g. by kill -9 or a power failure,
then one or more of the databases may be corrupt. Normally, this will
cause Anope to abort the next time you try to run it; however, if yo
give the -forceload option to Anope, it will instead read as much as it
can, then skip to the next database. For obvious reasons, it's highly
recommended to keep backup copies of your databases in case something
does happen (since Anope will stop at the first error in a database, even
with -forceload, meaning you lose any data after that).
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
+58
View File
@@ -0,0 +1,58 @@
Legend:
x = done
? = 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
[?] 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
[?] 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
[ ] 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)
+27
View File
@@ -0,0 +1,27 @@
Anope Bundled Tools
-------------------
1) Anope SMTP Client
Provided with Anope is a simple SMTP client which can be used instead of
programs like SendMail in some cases.
The SMTP client can be used instead of sendmail for use with Anope's mail
options. To use the SMTP client instead of sendmail, find the line in your
services configuration file (services.conf) that defines sendmailpath. On
that line, change the path to your services installation directory, then
followed by "tools/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"
If the SMTP client doesn't send mail, or if there's an other problem with
it, you can compile it in debug mode. To do this, open anopesmtp.cpp, and look
for "smtp_debug" near the top. Change this from 0 to 1 and recompile
the code. This should generate a log file of what happened when it tried
to connect to the SMTP server.
Credits:
Originally written by Dominick Meglio <codemastr@unrealircd.com>
Ported to *nix by Trystan Scott Lee <trystan@nomadirc.net>
+23 -54
View File
@@ -25,28 +25,20 @@ Anope for Windows
(NOTE: When installing, tell CMake to add itself to the PATH.)
If you have Visual C++ 6, 7 (.NET 2002/2003), 8 (2005), or 9 (2008) skip ahead to step 2, else you
If you have Visual C++ 10 (2010) skip ahead to step 2, else you
need to download the following free components from Microsoft. Once
downloaded, install these packages.
* Microsoft Visual C++ 2008 Express Edition:
* Microsoft Visual C++ 2010 Express Edition:
http://www.microsoft.com/express/vc/
or
* Microsoft Visual C++ 2005 Express Edition:
http://www.microsoft.com/downloads/details.aspx?FamilyId=7B0B0339-613A-46E6-AB4D-080D4D4A8C4E&displaylang=en
then download and install:
* Microsoft Windows 2008 SDK:
http://www.microsoft.com/downloads/details.aspx?FamilyId=E6E1C3DF-A74F-4207-8586-711EBE331CDC&displaylang=en
or (if you prefer a smaller download)
* Microsoft Windows 2003 Platform SDK: (Requires WGA validation)
http://www.microsoft.com/downloads/details.aspx?FamilyId=0BAF2B35-C656-4969-ACE8-E4C0C0716ADB&displaylang=en
(NOTE: Although they say for Windows Server 2003 or 2008, they do infact work on all supported
versions of Windows. When installing the 2003 SDK, you should select the Custom option, and only select
to have the Microsoft Windows Core SDK installed. When installing the 2008 SDK, you should select the
@@ -54,10 +46,6 @@ Anope for Windows
the Visual C++ Compilers as well as the Mobile Tools. Doing this will decrease the install time as well
as the space used by the SDK.)
If you chose to download the 2003 SDK, it will not work out-of-the-box on either Visual C++ 2005 Express or
Visual C++ 2008 Express. The 2008 SDK will work out-of-the-box with Visual C++ 2008 Express but not with
Visual C++ 2005 Express.
2) Unpack the Anope tarball with your favorite uncompression program
(WinZip or WinRAR, etc).
@@ -84,7 +72,7 @@ Anope for Windows
4) You now need to configure Anope to your requirements. At the prompt type:
<path to source directory>\Config.bat
<path to source directory>\Config.exe
NOTE: If you run an Anti-Virus program such as McAfee or Norton, you may
be unable to run this command due to the protection in place. Some Anti-
@@ -103,6 +91,23 @@ Anope for Windows
If you cannot find whats causing the error, please visit our forums or
our IRC Support channel for assistance.
Some Anope modules require third party libraries, such as m_mysql and
m_ssl. If these libraries are installed in nonstandard locations, cmake
will probably not find them and should be told where they are by passing
additional search paths to the last question in Config, such as:
-DEXTRA_INCLUDES:STRING=c:/openssl/include;c:/openssl/lib
Which would have cmake search both C:\openssl\include and
C:\openssl\lib.
Building Anope with gettext requires libintl, libiconv, libgcc and
libmingex. We have precompiled these libraries for you that you may
use if you want. They are avaiable at http://anope.org/downloads/anope-extra.zip
The OpenSSL and MySQL header files and libraries are also included in
this package. Once downloaded and extracted, you should run install.bat
then give Config the path to the new 'installed' directory.
5) You are now ready to compile. If you said you wanted to use NMake in step 4,
at the prompt type:
@@ -146,22 +151,10 @@ Anope for Windows
edit the file correctly.
Open services.conf, and read through it carefully and adjust the settings
you think you need to adjust. Pay special attention to these settings:
A) IRCDModule: This is the name of an IRCd Module that Anope will use
to communicate with your server. Anope supports 15 IRCds,
so ensure you set the right value here.
B) RemoteServer: This is the address to your ircd, along with the port
and password. You should consult your ircd
documentation on how to link ircds.
C) ServicesRoot: Remove the # and change the names to your nick so you
can take control of services once they are online.
D) UserKey1/2/3: Remove the # infront of the three UserKey settings, and
change the parameters to numbers; around 6-7 digits will
do.
you think you need to adjust.
If you are unsure of the settings, you can go to the dos command prompt
and run "anope.exe -nofork -debug" and watch the information as it
and run "anope.exe --nofork --debug" and watch the information as it
attempts to connect.
You can launch services in two ways. If you are sure that the entered
@@ -174,31 +167,7 @@ Anope for Windows
3) Compiling Modules
If you want to build other modules than the ones shipped by default, you
will need to modify the Makefile.inc.win32 file, in the src\modules folder.
A) Add modules; find the line stating "SRCS=" and add the name of the
file to the end of the line. So if you have two files:
SRCS=file.c file2.c
If you are compiling a folder of module components, such as the example
"catserv", you will need to add/change the "SUBS=" line. If you were
compiling the "catserv" example, the line would look like this:
SUBS=catserv
B) When you've done this, use the same command prompt you set up in part
1, change directories to the src\modules folder, and type:
nmake -f Makefile.win32
followed afterwards, by:
nmake -f Makefile.win32 install
C) You should now be able to load your modules on IRC via OperServ, or via
the services.conf file.
will need to rerun Config.exe
4) Other compile options
View File
+18 -28
View File
@@ -1,30 +1,20 @@
# If we are building for Visual Studio OR if the system we are on doesn't have sh (which would be odd on a *nix system...), we'll build a C++ program to create version.h
if(MSVC OR NOT SH)
# Set version.sh.c to use C++ as well as set it's compile flags
set_source_files_properties(version.sh.c PROPERTIES LANGUAGE CXX COMPILE_FLAGS "${CXXFLAGS}")
# Generate version_sh executable to create version.h from the contents of version.sh, setting it's linker flags as well
add_executable(version_sh version.sh.c)
set_target_properties(version_sh PROPERTIES LINKER_LANGUAGE CXX LINK_FLAGS "${LDFLAGS}")
# Generate version.h from the above executable and the version.log file from the main source directory, with dependencies to the given headers and all source files in the main Anope build
add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/version.h
COMMAND version_sh ${Anope_SOURCE_DIR}/version.log ${CMAKE_CURRENT_SOURCE_DIR}/version.sh ${CMAKE_CURRENT_BINARY_DIR}/version.h
MAIN_DEPENDENCY ${CMAKE_CURRENT_SOURCE_DIR}/version.sh DEPENDS version_sh ${CMAKE_CURRENT_SOURCE_DIR}/services.h ${CMAKE_CURRENT_SOURCE_DIR}/pseudo.h ${CMAKE_CURRENT_SOURCE_DIR}/messages.h ${SRC_SRCS}
)
# Add version_sh to list of files for CPack to ignore
get_target_property(version_sh_BINARY version_sh LOCATION)
get_filename_component(version_sh_BINARY ${version_sh_BINARY} NAME)
add_to_cpack_ignored_files("${version_sh_BINARY}$" TRUE)
# For any non-Visual Studio platforms that do have sh, we will run version.h through the version.h shell script
else(MSVC OR NOT SH)
# Generate version.h from version.sh and the version.log file from the main source directory, with dependencies to the given headers and all source files in the main Anope build
add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/version.h
COMMAND ${SH} ${CMAKE_CURRENT_SOURCE_DIR}/version.sh ${Anope_SOURCE_DIR}/version.log ${CMAKE_CURRENT_BINARY_DIR}/version.h
MAIN_DEPENDENCY ${CMAKE_CURRENT_SOURCE_DIR}/version.sh DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/services.h ${CMAKE_CURRENT_SOURCE_DIR}/pseudo.h ${CMAKE_CURRENT_SOURCE_DIR}/messages.h ${SRC_SRCS}
)
endif(MSVC OR NOT SH)
# Add version.h to the list of files for CPack to ignore
add_to_cpack_ignored_files("version.h$" TRUE)
# Set version.cpp to use C++ as well as set its compile flags
set_source_files_properties(version.cpp PROPERTIES LANGUAGE CXX COMPILE_FLAGS "${CXXFLAGS}")
# Generate version executable to modify version.h, setting it's linker flags as well
add_executable(version version.cpp)
set_target_properties(version PROPERTIES LINKER_LANGUAGE CXX LINK_FLAGS "${LDFLAGS}")
get_target_property(version_BINARY version LOCATION)
# Modify version.h from the above executable, with dependencies to 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
DEPENDS version ${SRC_SRCS}
)
# Add version to list of files for CPack to ignore
get_filename_component(version_BINARY ${version_BINARY} NAME)
add_to_cpack_ignored_files("${version_BINARY}$" TRUE)
if(NOT WIN32)
add_to_cpack_ignored_files("version.h$" TRUE)
endif(NOT WIN32)
# Add a custom target to the above file
add_custom_target(headers DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/version.h)
add_custom_target(headers DEPENDS version ${CMAKE_CURRENT_BINARY_DIR}/version.h)
-20
View File
@@ -1,20 +0,0 @@
all: services.h extern.h pseudo.h version.h
version.h: Makefile version.sh services.h pseudo.h messages.h $(SRCS)
sh version.sh ../version.log $@
services.h: sysconf.h config.h extern.h
touch $@
extern.h: slist.h
touch $@
pseudo.h: commands.h timers.h datafiles.h slist.h
touch $@
clean:
(rm -f language.h)
distclean: clean
(rm -f sysconf.h version.h)
+196 -47
View File
@@ -1,86 +1,187 @@
#ifndef ACCOUNT_H
#define ACCOUNT_H
#include "anope.h"
class NickAlias;
class NickCore;
class NickRequest;
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;
/* NickServ nickname structures. */
/** XXX: this really needs to die with fire and be merged with metadata into NickCore or something.
/** Flags set on NickAliases
*/
class NickRequest
enum NickNameFlag
{
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
* or is being SVSHeld. Used by ns_release to determin if something
* should be allowed to be released
*/
NS_HELD,
/* We are taking over this nick, either by SVSNICK or KILL.
* We are waiting for the confirmation of either of these actions to
* proceed. This is checked in NickAlias::OnCancel
*/
NS_COLLIDED,
NS_END
};
/** Flags set on NickCores
*/
enum NickCoreFlag
{
NI_BEGIN,
/* Kill others who take this nick */
NI_KILLPROTECT,
/* Dont recognize unless IDENTIFIED */
NI_SECURE,
/* Use PRIVMSG instead of NOTICE */
NI_MSG,
/* Don't allow user to change memo limit */
NI_MEMO_HARDMAX,
/* Notify of memos at signon and un-away */
NI_MEMO_SIGNON,
/* Notify of new memos when sent */
NI_MEMO_RECEIVE,
/* Don't show in LIST to non-servadmins */
NI_PRIVATE,
/* Don't show email in INFO */
NI_HIDE_EMAIL,
/* Don't show last seen address in INFO */
NI_HIDE_MASK,
/* Don't show last quit message in INFO */
NI_HIDE_QUIT,
/* Kill in 20 seconds instead of in 60 */
NI_KILL_QUICK,
/* Kill immediatly */
NI_KILL_IMMED,
/* User gets email on memo */
NI_MEMO_MAIL,
/* Don't show services access status */
NI_HIDE_STATUS,
/* Nickname is suspended */
NI_SUSPENDED,
/* Autoop nickname in channels */
NI_AUTOOP,
/* This nickcore is forbidden, which means the nickalias for it is aswell */
NI_FORBIDDEN,
NI_END
};
class CoreExport NickRequest : public Extensible
{
public:
NickRequest()
{
next = prev = NULL;
nick = passcode = email = NULL;
*password = 0;
requested = lastmail = 0;
}
NickRequest *next, *prev;
char *nick;
char *passcode;
char password[PASSMAX];
char *email;
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 */
time_t lastmail; /* Unsaved */
};
class NickCore;
class CoreExport NickAlias : public Extensible
class CoreExport NickAlias : public Extensible, public Flags<NickNameFlag, NS_END>
{
public:
NickAlias();
/** Default constructor
* @param nickname The nick
* @param nickcore The nickcofe for this nick
*/
NickAlias(const Anope::string &nickname, NickCore *nickcore);
NickAlias *next, *prev;
char *nick; /* Nickname */
char *last_quit; /* Last quit message */
char *last_realname; /* Last realname */
char *last_usermask; /* Last usermask */
/** Default destructor
*/
~NickAlias();
Anope::string nick; /* Nickname */
Anope::string last_quit; /* Last quit message */
Anope::string last_realname; /* Last realname */
Anope::string last_usermask; /* Last usermask */
time_t time_registered; /* When the nick was registered */
time_t last_seen; /* When it was seen online for the last time */
uint16 status; /* See NS_* below */
NickCore *nc; /* I'm an alias of this */
time_t last_seen; /* When it was seen online for the last time */
NickCore *nc; /* I'm an alias of this */
HostInfo hostinfo;
/** Release a nick
* See the comment in users.cpp
*/
void Release();
/** This function is called when a user on this nick either disconnects or changes nick.
* Note that the user isnt necessarially identified to this nick
* See the comment in users.cpp
* @param u The user
*/
void OnCancel(User *u);
};
class CoreExport NickCore : public Extensible
class CoreExport NickCore : public Extensible, public Flags<NickCoreFlag, NI_END>
{
public:
NickCore();
/** Default constructor
* @param display The display nick
*/
NickCore(const Anope::string &nickdisplay);
NickCore *next, *prev;
/** Default destructor
*/
~NickCore();
char *display; /* How the nick is displayed */
char pass[PASSMAX]; /* Password of the nicks */
char *email; /* E-mail associated to the nick */
char *greet; /* Greet associated to the nick */
uint32 icq; /* ICQ # associated to the nick */
char *url; /* URL associated to the nick */
uint32 flags; /* See NI_* below */
uint16 language; /* Language selected by nickname owner (LANG_*) */
std::vector<std::string> access; /* Access list, vector of strings */
std::list<User *> Users;
Anope::string display; /* How the nick is displayed */
Anope::string pass; /* Password of the nicks */
Anope::string email; /* E-mail associated to the nick */
Anope::string greet; /* Greet associated to the nick */
Anope::string language; /* Language name */
std::vector<Anope::string> access; /* Access list, vector of strings */
MemoInfo memos;
uint16 channelcount; /* Number of channels currently registered */
uint16 channelcount; /* Number of channels currently registered */
OperType *ot;
/* Unsaved data */
time_t lastmail; /* Last time this nick record got a mail */
SList aliases; /* List of aliases */
time_t lastmail; /* Last time this nick record got a mail */
std::list<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.
*/
bool HasCommand(const std::string &cmdstr) const;
virtual bool HasCommand(const Anope::string &cmdstr) const;
/** Checks whether this account is a services oper or not.
* @return True if this account is a services oper, false otherwise.
*/
bool IsServicesOper() const;
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.
*/
bool HasPriv(const std::string &privstr) const;
virtual bool HasPriv(const Anope::string &privstr) const;
/** Add an entry to the nick's access list
*
@@ -88,7 +189,7 @@ class CoreExport NickCore : public Extensible
*
* Adds a new entry into the access list.
*/
void AddAccess(const std::string &entry);
void AddAccess(const Anope::string &entry);
/** Get an entry from the nick's access list by index
*
@@ -97,7 +198,7 @@ class CoreExport NickCore : public Extensible
*
* Retrieves an entry from the access list corresponding to the given index.
*/
std::string GetAccess(unsigned entry);
Anope::string GetAccess(unsigned entry) const;
/** Find an entry in the nick's access list
*
@@ -106,7 +207,7 @@ class CoreExport NickCore : public Extensible
*
* Search for an entry within the access list.
*/
bool FindAccess(const std::string &entry);
bool FindAccess(const Anope::string &entry);
/** Erase an entry from the nick's access list
*
@@ -114,7 +215,7 @@ class CoreExport NickCore : public Extensible
*
* Removes the specified access list entry from the access list.
*/
void EraseAccess(const std::string &entry);
void EraseAccess(const Anope::string &entry);
/** Clears the entire nick's access list
*
@@ -123,3 +224,51 @@ class CoreExport NickCore : public Extensible
void ClearAccess();
};
/** Timer for colliding nicks to force people off of nicknames
*/
class NickServCollide : public Timer
{
dynamic_reference<User> u;
Anope::string nick;
public:
/** Default constructor
* @param nick The nick we're colliding
* @param delay How long to delay before kicking the user off the nick
*/
NickServCollide(User *user, time_t delay);
/** Default destructor
*/
virtual ~NickServCollide();
/** Called when the delay is up
* @param t The current time
*/
void Tick(time_t t);
};
/** Timers for 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);
};
#endif // ACCOUNT_H
+478
View File
@@ -0,0 +1,478 @@
/*
* (C) 2003-2010 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for furhter details.
*
* Based on the original code of Epona by Lara.
* Based on the original code of Services by Andy Church.
*/
#ifndef ANOPE_H
#define ANOPE_H
#include <string>
#include <vector>
#include <set>
#include "hashcomp.h"
class Message;
namespace Anope
{
/**
* A wrapper string class around all the other string classes, this class will
* allow us to only require one type of string everywhere that can be converted
* at any time to a specific type of string.
*/
class string
{
private:
/**
* The actual string is stored in an std::string as it can be converted to
* ci::string, irc::string, or a C-style string at any time.
*/
std::string _string;
public:
/**
* Extras.
*/
typedef std::string::iterator iterator;
typedef std::string::const_iterator const_iterator;
typedef std::string::reverse_iterator reverse_iterator;
typedef std::string::const_reverse_iterator const_reverse_iterator;
typedef std::string::size_type size_type;
static const size_type npos = static_cast<size_type>(-1);
/**
* Constructors that can take in any type of string.
*/
string() : _string("") { }
string(char chr) : _string() { _string = chr; }
string(size_type n, char chr) : _string(n, chr) { }
string(const char *_str) : _string(_str) { }
string(const std::string &_str) : _string(_str) { }
string(const ci::string &_str) : _string(_str.c_str()) { }
string(const irc::string &_str) : _string(_str.c_str()) { }
string(const string &_str, size_type pos = 0, size_type n = npos) : _string(_str._string, pos, n) { }
template <class InputIterator> string(InputIterator first, InputIterator last) : _string(first, last) { }
/**
* Assignment operators, so any type of string can be assigned to this class.
*/
inline string &operator=(char chr) { this->_string = chr; return *this; }
inline string &operator=(const char *_str) { this->_string = _str; return *this; }
inline string &operator=(const std::string &_str) { this->_string = _str; return *this; }
inline string &operator=(const ci::string &_str) { this->_string = _str.c_str(); return *this; }
inline string &operator=(const irc::string &_str) { this->_string = _str.c_str(); return *this; }
inline string &operator=(const string &_str) { if (this != &_str) this->_string = _str._string; return *this; }
/**
* Equality operators, to compare to any type of string.
*/
inline bool operator==(const char *_str) const { return this->_string == _str; }
inline bool operator==(const std::string &_str) const { return this->_string == _str; }
inline bool operator==(const ci::string &_str) const { return ci::string(this->_string.c_str()) == _str; }
inline bool operator==(const irc::string &_str) const { return irc::string(this->_string.c_str()) == _str; }
inline bool operator==(const string &_str) const { return this->_string == _str._string; }
inline bool equals_cs(const char *_str) const { return this->_string == _str; }
inline bool equals_cs(const std::string &_str) const { return this->_string == _str; }
inline bool equals_cs(const ci::string &_str) const { return this->_string == _str.c_str(); }
inline bool equals_cs(const irc::string &_str) const { return this->_string == _str.c_str(); }
inline bool equals_cs(const string &_str) const { return this->_string == _str._string; }
inline bool equals_ci(const char *_str) const { return ci::string(this->_string.c_str()) == _str; }
inline bool equals_ci(const std::string &_str) const { return ci::string(this->_string.c_str()) == _str.c_str(); }
inline bool equals_ci(const ci::string &_str) const { return _str == this->_string.c_str(); }
inline bool equals_ci(const irc::string &_str) const { return ci::string(this->_string.c_str()) == _str.c_str(); }
inline bool equals_ci(const string &_str) const { return ci::string(this->_string.c_str()) == _str._string.c_str(); }
inline bool equals_irc(const char *_str) const { return irc::string(this->_string.c_str()) == _str; }
inline bool equals_irc(const std::string &_str) const { return irc::string(this->_string.c_str()) == _str.c_str(); }
inline bool equals_irc(const ci::string &_str) const { return irc::string(this->_string.c_str()) == _str.c_str(); }
inline bool equals_irc(const irc::string &_str) const { return _str == this->_string.c_str(); }
inline bool equals_irc(const string &_str) const { return irc::string(this->_string.c_str()) == _str._string.c_str(); }
/**
* Inequality operators, exact opposites of the above.
*/
inline bool operator!=(const char *_str) const { return !operator==(_str); }
inline bool operator!=(const std::string &_str) const { return !operator==(_str); }
inline bool operator!=(const ci::string &_str) const { return !operator==(_str); }
inline bool operator!=(const irc::string &_str) const { return !operator==(_str); }
inline bool operator!=(const string &_str) const { return !operator==(_str); }
/**
* Compound addition operators, overloaded to do concatenation.
*/
inline string &operator+=(char chr) { this->_string += chr; return *this; }
inline string &operator+=(const char *_str) { this->_string += _str; return *this; }
inline string &operator+=(const std::string &_str) { this->_string += _str; return *this; }
inline string &operator+=(const ci::string &_str) { this->_string += _str.c_str(); return *this; }
inline string &operator+=(const irc::string &_str) { this->_string += _str.c_str(); return *this; }
inline string &operator+=(const string &_str) { if (this != &_str) this->_string += _str._string; return *this; }
/**
* Addition operators, overloaded to do concatenation.
*/
inline const string operator+(char chr) const { return string(*this) += chr; }
inline const string operator+(const char *_str) const { return string(*this) += _str; }
inline const string operator+(const std::string &_str) const { return string(*this) += _str; }
inline const string operator+(const ci::string &_str) const { return string(*this) += _str; }
inline const string operator+(const irc::string &_str) const { return string(*this) += _str; }
inline const string operator+(const string &_str) const { return string(*this) += _str; }
friend const string operator+(char chr, const string &str);
friend const string operator+(const char *_str, const string &str);
friend const string operator+(const std::string &_str, const string &str);
friend const string operator+(const ci::string &_str, const string &str);
friend const string operator+(const irc::string &_str, const string &str);
/**
* Less-than operator.
*/
inline bool operator<(const string &_str) const { return this->_string < _str._string; }
/**
* The following functions return the various types of strings.
*/
inline const char *c_str() const { return this->_string.c_str(); }
inline std::string &str() { return this->_string; }
inline const std::string &str() const { return this->_string; }
inline ci::string ci_str() const { return ci::string(this->_string.c_str()); }
inline irc::string irc_str() const { return irc::string(this->_string.c_str()); }
/**
* Returns if the string is empty or not.
*/
inline bool empty() const { return this->_string.empty(); }
/**
* Returns the string's length.
*/
inline size_type length() const { return this->_string.length(); }
/**
* Resizes the string content to n characters.
*/
inline void resize(size_type n) { return this->_string.resize(n); }
/**
* Erases characters from the string.
*/
inline iterator erase(const iterator &i) { return this->_string.erase(i); }
inline iterator erase(const iterator &first, const iterator &last) { return this->_string.erase(first, last); }
inline void erase(size_type pos = 0, size_type n = std::string::npos) { this->_string.erase(pos, n); }
/**
* Clears the string.
*/
inline void clear() { this->_string.clear(); }
/**
* Find substrings of the string.
*/
inline size_type find(const string &_str, size_type pos = 0) const { return this->_string.find(_str._string, pos); }
inline size_type find(char chr, size_type pos = 0) const { return this->_string.find(chr, pos); }
inline size_type find_ci(const string &_str, size_type pos = 0) const { return ci::string(this->_string.c_str()).find(ci::string(_str._string.c_str()), pos); }
inline size_type find_ci(char chr, size_type pos = 0) const { return ci::string(this->_string.c_str()).find(chr, pos); }
inline size_type rfind(const string &_str, size_type pos = npos) const { return this->_string.rfind(_str._string, pos); }
inline size_type rfind(char chr, size_type pos = npos) const { return this->_string.rfind(chr, pos); }
inline size_type rfind_ci(const string &_str, size_type pos = npos) const { return ci::string(this->_string.c_str()).rfind(ci::string(_str._string.c_str()), pos); }
inline size_type rfind_ci(char chr, size_type pos = npos) const { return ci::string(this->_string.c_str()).rfind(chr, pos); }
inline size_type find_first_of(const string &_str, size_type pos = 0) const { return this->_string.find_first_of(_str._string, pos); }
inline size_type find_first_of_ci(const string &_str, size_type pos = 0) const { return ci::string(this->_string.c_str()).find_first_of(ci::string(_str._string.c_str()), pos); }
inline size_type find_first_not_of(const string &_str, size_type pos = 0) const { return this->_string.find_first_not_of(_str._string, pos); }
inline size_type find_first_not_of_ci(const string &_str, size_type pos = 0) const { return ci::string(this->_string.c_str()).find_first_not_of(ci::string(_str._string.c_str()), pos); }
inline size_type find_last_of(const string &_str, size_type pos = npos) const { return this->_string.find_last_of(_str._string, pos); }
inline size_type find_last_of_ci(const string &_str, size_type pos = npos) const { return ci::string(this->_string.c_str()).find_last_of(ci::string(_str._string.c_str()), pos); }
inline size_type find_last_not_of(const string &_str, size_type pos = npos) const { return this->_string.find_last_not_of(_str._string, pos); }
inline size_type find_last_not_of_ci(const string &_str, size_type pos = npos) const { return ci::string(this->_string.c_str()).find_last_not_of(ci::string(_str._string.c_str()), pos); }
/**
* Determine if string consists of only numbers.
*/
inline bool is_number_only() const { return this->find_first_not_of("0123456789.-") == npos; }
inline bool is_pos_number_only() const { return this->find_first_not_of("0123456789.") == npos; }
/**
* Replace parts of the string.
*/
inline string replace(size_type pos, size_type n, const string &_str) { return string(this->_string.replace(pos, n, _str._string)); }
inline string replace(size_type pos, size_type n, const string &_str, size_type pos1, size_type n1) { return string(this->_string.replace(pos, n, _str._string, pos1, n1)); }
inline string replace(size_type pos, size_type n, size_type n1, char chr) { return string(this->_string.replace(pos, n, n1, chr)); }
inline string replace(iterator first, iterator last, const string &_str) { return string(this->_string.replace(first, last, _str._string)); }
inline string replace(iterator first, iterator last, size_type n, char chr) { return string(this->_string.replace(first, last, n, chr)); }
template <class InputIterator> inline string replace(iterator first, iterator last, InputIterator f, InputIterator l) { return string(this->_string.replace(first, last, f, l)); }
inline string replace_all_cs(const string &_orig, const string &_repl)
{
Anope::string new_string = *this;
size_type pos = new_string.find(_orig), orig_length = _orig.length(), repl_length = _repl.length();
while (pos != npos)
{
new_string = new_string.substr(0, pos) + _repl + new_string.substr(pos + orig_length);
pos = new_string.find(_orig, pos + repl_length);
}
return new_string;
}
inline string replace_all_ci(const string &_orig, const string &_repl)
{
Anope::string new_string = *this;
size_type pos = new_string.find_ci(_orig), orig_length = _orig.length(), repl_length = _repl.length();
while (pos != npos)
{
new_string = new_string.substr(0, pos) + _repl + new_string.substr(pos + orig_length);
pos = new_string.find_ci(_orig, pos + repl_length);
}
return new_string;
}
/**
* Get a substring of the string.
*/
inline string substr(size_type pos = 0, size_type n = npos) const { return string(this->_string.substr(pos, n)); }
/**
* Iterators to the string.
*/
inline iterator begin() { return this->_string.begin(); }
inline const_iterator begin() const { return this->_string.begin(); }
inline iterator end() { return this->_string.end(); }
inline const_iterator end() const { return this->_string.end(); }
inline reverse_iterator rbegin() { return this->_string.rbegin(); }
inline const_reverse_iterator rbegin() const { return this->_string.rbegin(); }
inline reverse_iterator rend() { return this->_string.rend(); }
inline const_reverse_iterator rend() const { return this->_string.rend(); }
/**
* Subscript operator, to access individual characters of the string.
*/
inline char &operator[](size_type n) { return this->_string[n]; }
inline const char &operator[](size_type n) const { return this->_string[n]; }
/**
* Stream insertion operator, must be friend because they cannot be inside the class.
*/
friend std::ostream &operator<<(std::ostream &os, const string &_str);
};
/** Hash an Anope::string for unorderd_map, passed as the third template arg to unordered_map
*/
struct hash
{
/* VS 2008 specific code */
enum { bucket_size = 4, min_buckets = 8 };
bool operator()(const string &s1, const string &s2) const;
/* End of 2008 specific code */
/** Hash an Anope::string for unordered_map
* @param s The string
* @return A hash value for the string
*/
bool operator()(const string &s) const;
};
inline std::ostream &operator<<(std::ostream &os, const string &_str) { return os << _str._string; }
inline const string operator+(char chr, const string &str) { string tmp(chr); tmp += str; return tmp; }
inline const string operator+(const char *_str, const string &str) { string tmp(_str); tmp += str; return tmp; }
inline const string operator+(const std::string &_str, const string &str) { string tmp(_str); tmp += str; return tmp; }
inline const string operator+(const ci::string &_str, const string &str) { string tmp(_str); tmp += str; return tmp; }
inline const string operator+(const irc::string &_str, const string &str) { string tmp(_str); tmp += str; return tmp; }
static const char *const compiled = __TIME__ " " __DATE__;
/** The current system time, which is pretty close to being accurate.
* Use this unless you need very specific time checks
*/
extern CoreExport time_t CurTime;
extern CoreExport string Version();
extern CoreExport string Build();
/** Check whether two strings match.
* @param str The string to check against the pattern (e.g. foobar)
* @param mask The pattern to check (e.g. foo*bar)
* @param case_sensitive Whether or not the match is case sensitive, default false.
*/
extern CoreExport bool Match(const Anope::string &str, const Anope::string &mask, bool case_sensitive = false);
/** 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)
*/
extern CoreExport std::vector<Message *> FindMessage(const string &name);
/** Converts a string to hex
* @param the data to be converted
* @return a anope::string containing the hex value
*/
extern CoreExport string Hex(const string &data);
extern CoreExport string Hex(const char *data, unsigned len);
/** Converts a string from hex
* @param src The data to be converted
* @param dest The destination string
*/
extern CoreExport void Unhex(const Anope::string &src, Anope::string &dest);
extern CoreExport void Unhex(const Anope::string &src, char *dest);
/** Return the last error, uses errno/GetLastError() to determin this
* @return An error message
*/
extern CoreExport const Anope::string LastError();
}
/** sepstream allows for splitting token seperated lists.
* Each successive call to sepstream::GetToken() returns
* the next token, until none remain, at which point the method returns
* an empty string.
*/
class CoreExport sepstream
{
private:
/** Original string.
*/
Anope::string tokens;
/** Last position of a seperator token
*/
Anope::string::iterator last_starting_position;
/** Current string position
*/
Anope::string::iterator n;
/** Seperator value
*/
char sep;
public:
/** Create a sepstream and fill it with the provided data
*/
sepstream(const Anope::string &source, char seperator);
virtual ~sepstream() { }
/** Fetch the next token from the stream
* @param token The next token from the stream is placed here
* @return True if tokens still remain, false if there are none left
*/
virtual bool GetToken(Anope::string &token);
/** Fetch the entire remaining stream, without tokenizing
* @return The remaining part of the stream
*/
virtual const Anope::string GetRemaining();
/** Returns true if the end of the stream has been reached
* @return True if the end of the stream has been reached, otherwise false
*/
virtual bool StreamEnd();
};
/** A derived form of sepstream, which seperates on commas
*/
class commasepstream : public sepstream
{
public:
/** Initialize with comma seperator
*/
commasepstream(const Anope::string &source) : sepstream(source, ',') { }
};
/** A derived form of sepstream, which seperates on spaces
*/
class spacesepstream : public sepstream
{
public:
/** Initialize with space seperator
*/
spacesepstream(const Anope::string &source) : sepstream(source, ' ') { }
};
/** The base class that most classes in Anope inherit from
*/
class dynamic_reference_base;
class CoreExport Base
{
/* References to this base class */
std::set<dynamic_reference_base *> References;
public:
Base();
virtual ~Base();
void AddReference(dynamic_reference_base *r);
void DelReference(dynamic_reference_base *r);
};
class dynamic_reference_base : public Base
{
protected:
bool invalid;
public:
dynamic_reference_base() : invalid(false) { }
virtual ~dynamic_reference_base() { }
inline void Invalidate() { this->invalid = true; }
};
template<typename T>
class dynamic_reference : public dynamic_reference_base
{
protected:
T *ref;
public:
dynamic_reference(T *obj) : ref(obj)
{
if (ref)
ref->AddReference(this);
}
virtual ~dynamic_reference()
{
if (this->invalid)
{
this->invalid = false;
this->ref = NULL;
}
else if (ref)
ref->DelReference(this);
}
virtual operator bool()
{
if (this->invalid)
{
this->invalid = false;
this->ref = NULL;
}
return this->ref;
}
virtual inline void operator=(T *newref)
{
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);
}
virtual inline T *operator->()
{
return this->ref;
}
virtual inline T *operator*()
{
return this->ref;
}
};
#endif // ANOPE_H
+52 -28
View File
@@ -1,55 +1,60 @@
/*
* Copyright (C) 2008-2009 Robin Burchell <w00t@inspircd.org>
* Copyright (C) 2008-2009 Anope Team <team@anope.org>
* Copyright (C) 2008-2010 Robin Burchell <w00t@inspircd.org>
* Copyright (C) 2008-2010 Anope Team <team@anope.org>
*
* Please read COPYING and README for further details.
*
*
* $Id$
*
*/
#ifndef BOTS_H
#define BOTS_H
struct CommandHash;
#include "commands.h"
class CoreExport BotInfo
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;
/** Flags settable on a bot
*/
enum BotFlag
{
BI_BEGIN,
/* This bot is a core bot. NickServ, ChanServ, etc */
BI_CORE,
/* This bot can only be assigned by IRCops */
BI_PRIVATE,
BI_END
};
class CoreExport BotInfo : public User, public Flags<BotFlag, BI_END>
{
public:
BotInfo *next, *prev;
std::string uid; /* required for UID supporting servers, as opposed to the shitty struct Uid. */
char *nick; /* Nickname of the bot */
char *user; /* Its user name */
char *host; /* Its hostname */
char *real; /* Its real name */
int16 flags; /* Bot flags -- see BI_* below */
time_t created; /* Birth date ;) */
int16 chancount; /* Number of channels that use the bot. */
/* Dynamic data */
uint32 chancount;
time_t created; /* Birth date ;) */
time_t lastmsg; /* Last time we said something */
CommandHash **cmdTable;
CommandMap Commands; /* Commands on this bot */
/** Create a new bot.
* XXX: Note - this constructor is considered obsolete. Use the four parameter form.
* @param nick The nickname to assign to the bot.
*/
BotInfo(const char *nick);
/** Create a new bot.
* @param nick The nickname to assign to the bot.
* @param user The ident to give the bot.
* @param host The hostname to give the bot.
* @param real The realname to give the bot.
*/
BotInfo(const char *nick, const char *user, const char *host, const char *real);
BotInfo(const Anope::string &nick, const Anope::string &user = "", const Anope::string &host = "", const Anope::string &real = "");
/** Destroy a bot, clearing up appropriately.
*/
virtual ~BotInfo();
/** Change the nickname set on a bot.
/** Change the nickname for the bot.
* @param newnick The nick to change to
*/
void ChangeNick(const char *newnick);
void SetNewNick(const Anope::string &newnick);
/** Rejoins all channels that this bot is assigned to.
* Used on /kill, rename, etc.
@@ -67,5 +72,24 @@ class CoreExport BotInfo
* @param ci The channel registration to remove the bot from.
*/
void UnAssign(User *u, ChannelInfo *ci);
/** Join this bot to a channel
* @param c The channel
* @param update_ts Assume we're updating the TS for this channel
*/
void Join(Channel *c, bool update_ts = false);
/** Join this bot to a channel
* @param chname The channel name
* @param update_ts Assume we're updating the TS for this channel
*/
void Join(const Anope::string &chname, bool update_ts = false);
/** 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 = "");
};
#endif // BOTS_H
+295
View File
@@ -0,0 +1,295 @@
/* Channel support
*
* (C) 2008-2010 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
*/
#ifndef CHANNELS_H
#define CHANNELS_H
typedef unordered_map_namespace::unordered_map<Anope::string, Channel *, ci::hash, std::equal_to<ci::string> > 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
{
User *user;
UserData ud;
ChannelStatus *Status;
UserContainer(User *u) : user(u) { }
virtual ~UserContainer() { }
};
typedef std::list<UserContainer *> CUserList;
enum ChannelFlags
{
/* 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
};
class CoreExport Channel : public Extensible, public Flags<ChannelFlags>
{
private:
/** A map of channel modes with their parameters set on this channel
*/
std::map<ChannelModeName, Anope::string> Params;
/* Modes set on the channel */
Flags<ChannelModeName, CMODE_END * 2> modes;
public:
/** Default constructor
* @param name The channel name
* @param ts The time the channel was created
*/
Channel(const Anope::string &nname, time_t ts = Anope::CurTime);
/** Default destructor
*/
~Channel();
Anope::string name; /* Channel name */
ChannelInfo *ci; /* Corresponding ChannelInfo */
time_t creation_time; /* When channel was created */
EList *bans;
EList *excepts;
EList *invites;
/* List of users in the channel */
CUserList users;
Anope::string topic; /* Current topic of the channel */
Anope::string topic_setter; /* Who set the topic */
time_t topic_time; /* When the topic was set*/
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? */
/** Call if we need to unset all modes and clear all user status (internally).
* Only useful if we get a SJOIN with a TS older than what we have here
*/
void Reset();
/** Restore the channel topic, set mlock (key), set stickied bans, etc
*/
void Sync();
/** Join a user internally to the channel
* @param u The user
*/
void JoinUser(User *u);
/** Remove a user internally from the channel
* @param u The user
*/
void DeleteUser(User *u);
/** Check if the user is on the channel
* @param u The user
* @return A user container if found, else NULL
*/
UserContainer *FindUser(User *u);
/** Check if a user has a status on a channel
* @param u The user
* @param cms The status mode, or NULL to represent no status
* @return true or false
*/
bool HasUserStatus(User *u, ChannelModeStatus *cms) const;
/** Check if a user has a status on a channel
* Use the overloaded function for ChannelModeStatus* to check for no status
* @param u The user
* @param Name The Mode name, eg CMODE_OP, CMODE_VOICE
* @return true or false
*/
bool HasUserStatus(User *u, ChannelModeName Name) const;
/** See if the channel has any modes at all
* @return true or false
*/
inline bool HasModes() const { return modes.FlagCount(); }
/** See if a channel has a mode
* @param Name The mode name
* @return true or false
*/
bool HasMode(ChannelModeName Name) const;
/** Set a mode internally on a channel, this is not sent out to the IRCd
* @param cm The mode
* @param param The param
* @param EnforceMLock true if mlocks should be enforced, false to override mlock
*/
void SetModeInternal(ChannelMode *cm, const Anope::string &param = "", bool EnforceMLock = true);
/** Remove a mode internally on a channel, this is not sent out to the IRCd
* @param cm The mode
* @param param The param
* @param EnforceMLock true if mlocks should be enforced, false to override mlock
*/
void RemoveModeInternal(ChannelMode *cm, const Anope::string &param = "", bool EnforceMLock = true);
/** Set a mode on a channel
* @param bi The client setting the modes
* @param cm The mode
* @param param Optional param arg for the mode
* @param EnforceMLock true if mlocks should be enforced, false to override mlock
*/
void SetMode(BotInfo *bi, ChannelMode *cm, const Anope::string &param = "", bool EnforceMLock = true);
/**
* Set a mode on a channel
* @param bi The client setting the modes
* @param Name The mode name
* @param param Optional param arg for the mode
* @param EnforceMLock true if mlocks should be enforced, false to override mlock
*/
void SetMode(BotInfo *bi, ChannelModeName Name, const Anope::string &param = "", bool EnforceMLock = true);
/** Remove a mode from a channel
* @param bi The client setting the modes
* @param cm The mode
* @param param Optional param arg for the mode
* @param EnforceMLock true if mlocks should be enforced, false to override mlock
*/
void RemoveMode(BotInfo *bi, ChannelMode *cm, const Anope::string &param = "", bool EnforceMLock = true);
/**
* Remove a mode from a channel
* @param bi The client setting the modes
* @param Name The mode name
* @param param Optional param arg for the mode
* @param EnforceMLock true if mlocks should be enforced, false to override mlock
*/
void RemoveMode(BotInfo *bi, ChannelModeName Name, const Anope::string &param = "", bool EnforceMLock = true);
/** 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
* @return true on success
*/
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
* @param cmodes The modes to set
*/
void SetModes(BotInfo *bi, bool EnforceMLock, const char *cmodes, ...);
/** Set a string of modes internally on a channel
* @param setter the setter (if it is a user)
* @param mode the modes
* @param EnforceMLock true to enforce mlock
*/
void SetModesInternal(User *setter, const Anope::string &mode, bool EnforceMLock = true);
/** Kick a user from a channel internally
* @param source The sender of the kick
* @param nick The nick being kicked
* @param reason The reason for the kick
*/
void KickInternal(const Anope::string &source, const Anope::string &nick, const Anope::string &reason);
/** Kick a user from the channel
* @param bi The sender, can be NULL for the service bot for this channel
* @param u The user being kicked
* @param reason The reason for the kick
* @return true if the kick was scucessful, false if a module blocked the kick
*/
bool Kick(BotInfo *bi, User *u, const char *reason = NULL, ...);
/** Get a string of the modes set on this channel
* @param complete Include mode parameters
* @param plus If set to false (with complete), mode parameters will not be given for modes requring no parameters to be unset
* @return A mode string
*/
Anope::string GetModes(bool complete, bool plus);
/** Update the topic of the channel internally, and reset it if topiclock etc says to
* @param user THe user setting the new topic
* @param newtopic The new topic
* @param ts The time the new topic is being set
*/
void ChangeTopicInternal(const Anope::string &user, const Anope::string &newtopic, time_t ts = Anope::CurTime);
/** Update the topic of the channel, and reset it if topiclock etc says to
* @param user The user setting the topic
* @param newtopic The new topic
* @param ts The time when the new topic is being set
*/
void ChangeTopic(const Anope::string &user, const Anope::string &newtopic, time_t ts = Anope::CurTime);
};
#endif // CHANNELS_H
+105 -13
View File
@@ -1,28 +1,120 @@
/* Declarations for command data.
*
* (C) 2003-2009 Anope Team
* (C) 2003-2010 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for furhter details.
*
* Based on the original code of Epona by Lara.
* Based on the original code of Services by Andy Church.
*
* $Id$
*
*/
#include "modules.h"
#ifndef COMMAND_H
#define COMMAND_H
/*************************************************************************/
#include "services.h"
/* Routines for looking up commands. Command lists are arrays that must be
* terminated with a NULL name.
class Module;
class BotInfo;
class Command;
typedef std::map<Anope::string, Command *, std::less<ci::string> > CommandMap;
/** The return value from commands.
*/
enum CommandReturn
{
MOD_CONT,
MOD_STOP
};
extern MDE Command *lookup_cmd(Command *list, char *name);
extern MDE void mod_help_cmd(char *service, User *u, CommandHash *cmdTable[],const char *cmd);
extern MDE void mod_run_cmd(char *service, User *u, CommandHash *cmdTable[],const char *cmd);
//extern MDE void do_help_limited(char *service, User * u, Command * c);
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);
/*************************************************************************/
enum CommandFlag
{
CFLAG_ALLOW_UNREGISTERED,
CFLAG_ALLOW_FORBIDDEN,
CFLAG_ALLOW_SUSPENDED,
CFLAG_ALLOW_UNREGISTEREDCHANNEL,
CFLAG_STRIP_CHANNEL,
CFLAG_DISABLE_FANTASY
};
/** Every services command is a class, inheriting from Command.
*/
class CoreExport Command : public Flags<CommandFlag>
{
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 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 = "");
virtual ~Command();
/** Execute this command.
* @param u The user executing the command.
*/
virtual CommandReturn Execute(User *u, const std::vector<Anope::string> &);
/** Called when HELP is requsted for the client this command is on.
* @param u The user requesting help
*/
virtual void OnServHelp(User *u);
/** 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 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);
/** Requested when the user provides bad syntax to this command (not enough params, etc).
* @param u The user executing the command.
* @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);
};
#endif // COMMANDS_H
+940 -59
View File
File diff suppressed because it is too large Load Diff
-522
View File
@@ -1,522 +0,0 @@
#ifndef _CONFIGREADER_H_
#define _CONFIGREADER_H_
#include <string>
#include <fstream>
#include <sstream>
#include <vector>
#include <map>
#include <deque>
/** A configuration key and value pair
*/
typedef std::pair<std::string, std::string> KeyVal;
/** A list of related configuration keys and values
*/
typedef std::vector<KeyVal> KeyValList;
/** An entire config file, built up of KeyValLists
*/
typedef std::multimap<std::string, KeyValList> ConfigDataHash;
// Required forward definitions
class ServerConfig;
/** Types of data in the core config
*/
enum ConfigDataType {
DT_NOTHING, // No data
DT_INTEGER, // Integer
DT_UINTEGER, // Unsigned Integer
DT_LUINTEGER, // Long Unsigned Integer
DT_CHARPTR, // Char pointer
DT_STRING, // std::string
DT_BOOLEAN, // Boolean
DT_HOSTNAME, // Hostname syntax
DT_NOSPACES, // No spaces
DT_IPADDRESS, // IP address (v4, v6)
DT_TIME, // Time value
DT_NORELOAD = 32, // Item can't be reloaded after startup
DT_ALLOW_WILD = 64, // Allow wildcards/CIDR in DT_IPADDRESS
DT_ALLOW_NEWLINE = 128 // New line characters allowed in DT_CHARPTR
};
/** Holds a config value, either string, integer or boolean.
* Callback functions receive one or more of these, either on
* their own as a reference, or in a reference to a deque of them.
* The callback function can then alter the values of the ValueItem
* classes to validate the settings.
*/
class ValueItem
{
/** Actual data */
std::string v;
public:
/** Initialize with an int */
ValueItem(int);
/** Initialize with a bool */
ValueItem(bool);
/** Initialize with a char pointer */
ValueItem(const char *);
/** Initialize with an std::string */
ValueItem(const std::string &);
/** 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 an int */
void Set(int);
/** Get value as an int */
int GetInteger();
/** Get value as a string */
const char *GetString() const;
/** Get value as a string */
inline const std::string &GetValue() const { return v; }
/** Get value as a bool */
bool GetBool();
};
/** The base class of the container 'ValueContainer'
* used internally by the core to hold core values.
*/
class ValueContainerBase
{
public:
/** Constructor */
ValueContainerBase() { }
/** Destructor */
virtual ~ValueContainerBase() { }
};
/** ValueContainer is used to contain pointers to different
* core values such as the server name, maximum number of
* clients etc.
* It is specialized to hold a data type, then pointed at
* a value in the ServerConfig class. When the value has been
* read and validated, the Set method is called to write the
* value safely in a type-safe manner.
*/
template<typename T> class ValueContainer : public ValueContainerBase
{
/** Contained item */
T val;
public:
/** Initialize with nothing */
ValueContainer() : ValueContainerBase(), val(NULL) { }
/** Initialize with a value of type T */
ValueContainer(T Val) : ValueContainerBase(), val(Val) { }
/** Initialize with a copy */
ValueContainer(const ValueContainer &Val) : ValueContainerBase(), val(Val.val) { }
ValueContainer &operator=(const ValueContainer &Val)
{
val = Val.val;
return *this;
}
/** Change value to type T of size s */
void Set(const T newval, size_t s)
{
memcpy(val, newval, s);
}
};
/** This a specific version of ValueContainer to handle character arrays specially
*/
template<> class ValueContainer<char **> : public ValueContainerBase
{
/** Contained item */
char **val;
public:
/** Initialize with nothing */
ValueContainer() : ValueContainerBase(), val(NULL) { }
/** Initialize with a value of type T */
ValueContainer(char **Val) : ValueContainerBase(), val(Val) { }
/** Initialize with a copy */
ValueContainer(const ValueContainer &Val) : ValueContainerBase(), val(Val.val) { }
ValueContainer &operator=(const ValueContainer &Val)
{
val = Val.val;
return *this;
}
/** Change value to type T of size s */
void Set(const char *newval, size_t s)
{
if (*val) delete [] *val;
if (!*newval) {
*val = NULL;
return;
}
*val = new char[s];
strlcpy(*val, newval, s);
}
};
/** This a specific version of ValueContainer to handle std::string specially
*/
template<> class ValueContainer<std::string *> : public ValueContainerBase
{
/** Contained item */
std::string *val;
public:
/** Initialize with nothing */
ValueContainer() : ValueContainerBase(), val(NULL) { }
/** Initialize with an std::string */
ValueContainer(std::string *Val) : ValueContainerBase(), val(Val) { }
/** Initialize with a copy */
ValueContainer(const ValueContainer &Val) : ValueContainerBase(), val(Val.val) { }
ValueContainer &operator=(const ValueContainer &Val)
{
val = Val.val;
return *this;
}
/** Change value to given std::string */
void Set(const std::string &newval)
{
*val = newval;
}
/** Change value to given char pointer */
void Set(const char *newval)
{
*val = newval;
}
};
/** A specialization of ValueContainer to hold a pointer to a bool
*/
typedef ValueContainer<bool *> ValueContainerBool;
/** A specialization of ValueContainer to hold a pointer to
* an unsigned int
*/
typedef ValueContainer<unsigned *> ValueContainerUInt;
/** A specialization of ValueContainer to hold a pointer to
* a long unsigned int
*/
typedef ValueContainer<long unsigned *> ValueContainerLUInt;
/** A specialization of ValueContainer to hold a pointer to
* a char array.
*/
typedef ValueContainer<char **> ValueContainerChar;
/** A specialization of ValueContainer to hold a pointer to
* an int
*/
typedef ValueContainer<int *> ValueContainerInt;
/** A specialization of ValueContainer to hold a pointer to
* a time_t
*/
typedef ValueContainer<time_t *> ValueContainerTime;
/** A specialization of ValueContainer to hold a pointer to
* an std::string
*/
typedef ValueContainer<std::string *> ValueContainerString;
/** A set of ValueItems used by multi-value validator functions
*/
typedef std::deque<ValueItem> ValueList;
/** A callback for validating a single value
*/
typedef bool (*Validator)(ServerConfig *, const char *, const char *, ValueItem &);
/** A callback for validating multiple value entries
*/
typedef bool (*MultiValidator)(ServerConfig *, const char *, const char **, ValueList &, int *, bool);
/** A callback indicating the end of a group of entries
*/
typedef bool (*MultiNotify)(ServerConfig *, const char *, bool);
/** Holds a core configuration item and its callbacks
*/
struct InitialConfig
{
/** Tag name */
const char *tag;
/** Value name */
const char *value;
/** Default, if not defined */
const char *default_value;
/** Value containers */
ValueContainerBase *val;
/** Data types */
int datatype;
/** Validation function */
Validator validation_function;
};
/** Holds a core configuration item and its callbacks
* where there may be more than one item
*/
struct MultiConfig
{
/** Tag name */
const char *tag;
/** One or more items within tag */
const char *items[17];
/** One or more defaults for items within tags */
const char *items_default[17];
/** One or more data types */
int datatype[17];
/** Initialization function */
MultiNotify init_function;
/** Validation function */
MultiValidator validation_function;
/** Completion function */
MultiNotify finish_function;
};
/** This class holds the bulk of the runtime configuration for the ircd.
* It allows for reading new config values, accessing configuration files,
* and storage of the configuration data needed to run the ircd, such as
* the servername, connect classes, /ADMIN data, MOTDs and filenames etc.
*/
class ServerConfig
{
private:
/** This variable holds the names of all
* files included from the main one. This
* is used to make sure that no files are
* recursively included.
*/
std::vector<std::string> include_stack;
/** Check that there is only one of each configuration item
*/
bool CheckOnce(const char *);
public:
std::ostringstream errstr;
ConfigDataHash newconfig;
/** This holds all the information in the config file,
* it's indexed by tag name to a vector of key/values.
*/
ConfigDataHash config_data;
/** Construct a new ServerConfig
*/
ServerConfig();
/** Clears the include stack in preperation for a Read() call.
*/
void ClearStack();
/** Read the entire configuration into memory
* and initialize this class. All other methods
* should be used only by the core.
*/
int Read(bool);
/** Report a configuration error given in errormessage.
* @param bail If this is set to true, the error is sent to the console, and the program exits
* @param connection If this is set to a non-null value, and bail is false, the errors are spooled to
* this connection as SNOTICEs.
* If the parameter is NULL, the messages are spooled to all connections via WriteOpers as SNOTICEs.
*/
void ReportConfigError(const std::string &, bool);
/** Load 'filename' into 'target', with the new config parser everything is parsed into
* tag/key/value at load-time rather than at read-value time.
*/
bool LoadConf(ConfigDataHash &, const char *, std::ostringstream &);
/** Load 'filename' into 'target', with the new config parser everything is parsed into
* tag/key/value at load-time rather than at read-value time.
*/
bool LoadConf(ConfigDataHash &, const std::string &, std::ostringstream &);
// Both these return true if the value existed or false otherwise
/** Writes 'length' chars into 'result' as a string
*/
bool ConfValue(ConfigDataHash &, const char *, const char *, int, char *, int, bool = false);
/** Writes 'length' chars into 'result' as a string
*/
bool ConfValue(ConfigDataHash &, const char *, const char *, const char *, int, char *, int, bool = false);
/** Writes 'length' chars into 'result' as a string
*/
bool ConfValue(ConfigDataHash &, const std::string &, const std::string &, int, std::string &, bool = false);
/** Writes 'length' chars into 'result' as a string
*/
bool ConfValue(ConfigDataHash &, const std::string &, const std::string &, const std::string &, int, std::string &, bool = false);
/** Tries to convert the value to an integer and write it to 'result'
*/
bool ConfValueInteger(ConfigDataHash &, const char *, const char *, int, int &);
/** Tries to convert the value to an integer and write it to 'result'
*/
bool ConfValueInteger(ConfigDataHash &, const char *, const char *, const char *, int, int &);
/** Tries to convert the value to an integer and write it to 'result'
*/
bool ConfValueInteger(ConfigDataHash &, const std::string &, const std::string &, int, int &);
/** Tries to convert the value to an integer and write it to 'result'
*/
bool ConfValueInteger(ConfigDataHash &, const std::string &, const std::string &, const std::string &, int, int &);
/** Returns true if the value exists and has a true value, false otherwise
*/
bool ConfValueBool(ConfigDataHash &, const char *, const char *, int);
/** Returns true if the value exists and has a true value, false otherwise
*/
bool ConfValueBool(ConfigDataHash &, const char *, const char *, const char *, int);
/** Returns true if the value exists and has a true value, false otherwise
*/
bool ConfValueBool(ConfigDataHash &, const std::string &, const std::string &, int);
/** Returns true if the value exists and has a true value, false otherwise
*/
bool ConfValueBool(ConfigDataHash &, const std::string &, const std::string &, const std::string &, int);
/** Returns the number of occurences of tag in the config file
*/
int ConfValueEnum(ConfigDataHash &, const char *);
/** Returns the number of occurences of tag in the config file
*/
int ConfValueEnum(ConfigDataHash &, const std::string &);
/** Returns the numbers of vars inside the index'th 'tag in the config file
*/
int ConfVarEnum(ConfigDataHash &, const char *, int);
/** Returns the numbers of vars inside the index'th 'tag in the config file
*/
int ConfVarEnum(ConfigDataHash &, const std::string &, int);
void ValidateHostname(const char *, const std::string &, const std::string &);
void ValidateIP(const char *p, const std::string &, const std::string &, bool);
void ValidateNoSpaces(const char *, const std::string &, const std::string &);
};
/** This class can be used on its own to represent an exception, or derived to represent a module-specific exception.
* When a module whishes to abort, e.g. within a constructor, it should throw an exception using ModuleException or
* a class derived from ModuleException. If a module throws an exception during its constructor, the module will not
* be loaded. If this happens, the error message returned by ModuleException::GetReason will be displayed to the user
* attempting to load the module, or dumped to the console if the ircd is currently loading for the first time.
*/
class ConfigException : public CoreException
{
public:
/** Default constructor, just uses the error mesage 'Config threw an exception'.
*/
ConfigException() : CoreException("Config threw an exception", "Config Parser") {}
/** This constructor can be used to specify an error message before throwing.
*/
ConfigException(const std::string &message) : CoreException(message, "Config Parser") {}
/** This destructor solves world hunger, cancels the world debt, and causes the world to end.
* Actually no, it does nothing. Never mind.
* @throws Nothing!
*/
virtual ~ConfigException() throw() { };
};
#define CONF_NO_ERROR 0x000000
#define CONF_NOT_A_NUMBER 0x000010
#define CONF_INT_NEGATIVE 0x000080
#define CONF_VALUE_NOT_FOUND 0x000100
#define CONF_FILE_NOT_FOUND 0x000200
/** Allows reading of values from configuration files
* This class allows a module to read from either the main configuration file (inspircd.conf) or from
* a module-specified configuration file. It may either be instantiated with one parameter or none.
* Constructing the class using one parameter allows you to specify a path to your own configuration
* file, otherwise, inspircd.conf is read.
*/
class CoreExport ConfigReader
{
protected:
/** The contents of the configuration file
* This protected member should never be accessed by a module (and cannot be accessed unless the
* core is changed). It will contain a pointer to the configuration file data with unneeded data
* (such as comments) stripped from it.
*/
ConfigDataHash *data;
/** Used to store errors
*/
std::ostringstream *errorlog;
/** If we're using our own config data hash or not
*/
bool privatehash;
/** True if an error occured reading the config file
*/
bool readerror;
/** Error code
*/
long error;
public:
/** Default constructor.
* This constructor initialises the ConfigReader class to read services.conf.
*/
ConfigReader();
/** Overloaded constructor.
* This constructor initialises the ConfigReader class to read a user-specified config file
*/
ConfigReader(const std::string &);
/** Default destructor.
* This method destroys the ConfigReader class.
*/
~ConfigReader();
/** Retrieves a value from the config file.
* This method retrieves a value from the config file. Where multiple copies of the tag
* exist in the config file, index indicates which of the values to retrieve.
*/
std::string ReadValue(const std::string &, const std::string &, int, bool = false);
/** Retrieves a value from the config file.
* This method retrieves a value from the config file. Where multiple copies of the tag
* exist in the config file, index indicates which of the values to retrieve. If the
* tag is not found the default value is returned instead.
*/
std::string ReadValue(const std::string &, const std::string &, const std::string &, int, bool = false);
/** Retrieves a boolean value from the config file.
* This method retrieves a boolean value from the config file. Where multiple copies of the tag
* exist in the config file, index indicates which of the values to retrieve. The values "1", "yes"
* and "true" in the config file count as true to ReadFlag, and any other value counts as false.
*/
bool ReadFlag(const std::string &, const std::string &, int);
/** Retrieves a boolean value from the config file.
* This method retrieves a boolean value from the config file. Where multiple copies of the tag
* exist in the config file, index indicates which of the values to retrieve. The values "1", "yes"
* and "true" in the config file count as true to ReadFlag, and any other value counts as false.
* If the tag is not found, the default value is used instead.
*/
bool ReadFlag(const std::string &, const std::string &, const std::string &, int);
/** Retrieves an integer value from the config file.
* This method retrieves an integer value from the config file. Where multiple copies of the tag
* exist in the config file, index indicates which of the values to retrieve. Any invalid integer
* values in the tag will cause the objects error value to be set, and any call to GetError() will
* return CONF_INVALID_NUMBER to be returned. need_positive is set if the number must be non-negative.
* If a negative number is placed into a tag which is specified positive, 0 will be returned and GetError()
* will return CONF_INT_NEGATIVE. Note that need_positive is not suitable to get an unsigned int - you
* should cast the result to achieve that effect.
*/
int ReadInteger(const std::string &, const std::string &, int, bool);
/** Retrieves an integer value from the config file.
* This method retrieves an integer value from the config file. Where multiple copies of the tag
* exist in the config file, index indicates which of the values to retrieve. Any invalid integer
* values in the tag will cause the objects error value to be set, and any call to GetError() will
* return CONF_INVALID_NUMBER to be returned. needs_unsigned is set if the number must be unsigned.
* If a signed number is placed into a tag which is specified unsigned, 0 will be returned and GetError()
* will return CONF_NOT_UNSIGNED. If the tag is not found, the default value is used instead.
*/
int ReadInteger(const std::string &, const std::string &, const std::string &, int, bool);
/** Returns the last error to occur.
* Valid errors can be found by looking in modules.h. Any nonzero value indicates an error condition.
* A call to GetError() resets the error flag back to 0.
*/
long GetError();
/** Counts the number of times a given tag appears in the config file.
* This method counts the number of times a tag appears in a config file, for use where
* there are several tags of the same kind, e.g. with opers and connect types. It can be
* used with the index value of ConfigReader::ReadValue to loop through all copies of a
* multiple instance tag.
*/
int Enumerate(const std::string &);
/** Returns true if a config file is valid.
* This method is partially implemented and will only return false if the config
* file does not exist or could not be opened.
*/
bool Verify();
/** Dumps the list of errors in a config file to an output location. If bail is true,
* then the program will abort. If bail is false and user points to a valid user
* record, the error report will be spooled to the given user by means of NOTICE.
* if bool is false AND user is false, the error report will be spooled to all opers
* by means of a NOTICE to all opers.
*/
void DumpErrors(bool);
/** Returns the number of items within a tag.
* For example if the tag was &lt;test tag="blah" data="foo"&gt; then this
* function would return 2. Spaces and newlines both qualify as valid seperators
* between values.
*/
int EnumerateValues(const std::string &, int);
};
#endif
-71
View File
@@ -1,71 +0,0 @@
/* Database file descriptor structure and file handling routine prototypes.
*
* (C) 2003-2009 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for furhter details.
*
* Based on the original code of Epona by Lara.
* Based on the original code of Services by Andy Church.
*
* $Id$
*
*/
#ifndef DATAFILES_H
#define DATAFILES_H
#ifndef _WIN32
#include <sys/param.h>
#endif
/*************************************************************************/
typedef struct dbFILE_ dbFILE;
struct dbFILE_ {
int mode; /* 'r' for reading, 'w' for writing */
FILE *fp; /* The normal file descriptor */
FILE *backupfp; /* Open file pointer to a backup copy of
* the database file (if non-NULL) */
char filename[MAXPATHLEN]; /* Name of the database file */
char backupname[MAXPATHLEN]; /* Name of the backup file */
};
/*************************************************************************/
/* Prototypes and macros: */
E void check_file_version(dbFILE *f);
E int get_file_version(dbFILE *f);
E int write_file_version(dbFILE *f, uint32 version);
E dbFILE *open_db(const char *service, const char *filename, const char *mode, uint32 version);
E void restore_db(dbFILE *f); /* Restore to state before open_db() */
E void close_db(dbFILE *f);
E void backup_databases();
#define read_db(f,buf,len) (fread((buf),1,(len),(f)->fp))
#define write_db(f,buf,len) (fwrite((buf),1,(len),(f)->fp))
#define getc_db(f) (fgetc((f)->fp))
E int read_int16(uint16 *ret, dbFILE *f);
E int write_int16(uint16 val, dbFILE *f);
E int read_int32(uint32 *ret, dbFILE *f);
E int write_int32(uint32 val, dbFILE *f);
E int read_ptr(void **ret, dbFILE *f);
E int write_ptr(const void *ptr, dbFILE *f);
E int read_string(char **ret, dbFILE *f);
E int write_string(const char *s, dbFILE *f);
#define read_int8(ret,f) ((*(ret)=fgetc((f)->fp))==EOF ? -1 : 0)
#define write_int8(val,f) (fputc((val),(f)->fp)==EOF ? -1 : 0)
#define read_buffer(buf,f) (read_db((f),(buf),sizeof(buf)) == sizeof(buf))
#define write_buffer(buf,f) (write_db((f),(buf),sizeof(buf)) == sizeof(buf))
#define read_buflen(buf,len,f) (read_db((f),(buf),(len)) == (len))
#define write_buflen(buf,len,f) (write_db((f),(buf),(len)) == (len))
#define read_variable(var,f) (read_db((f),&(var),sizeof(var)) == sizeof(var))
#define write_variable(var,f) (write_db((f),&(var),sizeof(var)) == sizeof(var))
/*************************************************************************/
#endif /* DATAFILES_H */
-40
View File
@@ -1,40 +0,0 @@
/* Set default values for any constants that should be in include files but
*
* (C) 2003-2009 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for furhter details.
*
* Based on the original code of Epona by Lara.
* Based on the original code of Services by Andy Church.
*
*
* $Id$
*
*/
/*************************************************************************/
#ifndef NAME_MAX
# define NAME_MAX 255
#endif
#ifndef BUFSIZ
# define BUFSIZ 256
#else
# if BUFSIZ < 256
# define BUFSIZ 256
# endif
#endif
/* Length of an array: */
#define lenof(a) (sizeof(a) / sizeof(*(a)))
/* Telling compilers about printf()-like functions: */
#ifdef __GNUC__
# define FORMAT(type,fmt,start) __attribute__((format(type,fmt,start)))
#else
# define FORMAT(type,fmt,start)
#endif
/*************************************************************************/
+197
View File
@@ -0,0 +1,197 @@
#ifndef DNS_H
#define DNS_H
/** Valid query types
*/
enum QueryType
{
/* Nothing */
DNS_QUERY_NONE,
/* A simple A lookup */
DNS_QUERY_A = 1,
/* A CNAME lookup */
DNS_QUERY_CNAME = 5,
/* Reverse DNS lookup */
DNS_QUERY_PTR = 12,
/* IPv6 AAAA lookup */
DNS_QUERY_AAAA = 28
};
/** Flags that can be AND'd into DNSPacket::flags to receive certain values
*/
enum QueryFlags
{
DNS_QUERYFLAGS_QR = 0x8000,
DNS_QUERYFLAGS_OPCODE = 0x7800,
DNS_QUERYFLAGS_AA = 0x400,
DBS_QUERYFLAGS_TC = 0x200,
DNS_QUERYFLAGS_RD = 0x100,
DNS_QUERYFLAGS_RA = 0x80,
DNS_QUERYFLAGS_Z = 0x70,
DNS_QUERYFLAGS_RCODE = 0xF
};
enum DNSError
{
DNS_ERROR_NONE,
DNS_ERROR_UNKNOWN,
DNS_ERROR_UNLOADED,
DNS_ERROR_TIMEOUT,
DNS_ERROR_NOT_AN_ANSWER,
DNS_ERROR_NONSTANDARD_QUERY,
DNS_ERROR_FORMAT_ERROR,
DNS_ERROR_SERVER_FAILURE,
DNS_ERROR_DOMAIN_NOT_FOUND,
DNS_ERROR_NOT_IMPLEMENTED,
DNS_ERROR_REFUSED,
DNS_ERROR_NO_RECORDS,
DNS_ERROR_INVALIDTYPE
};
class DNSRequestTimeout; // Forward declarations
struct DNSRecord;
class Module;
/** The request
*/
class CoreExport DNSRequest
{
/* Timeout timer for this request */
DNSRequestTimeout *timeout;
/* Use result cache if available */
bool use_cache;
public:
/* Request id */
unsigned short id;
/* 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 OnError(const DNSRecord *r);
};
/** A full packet sent to the nameserver, may contain multiple queries
*/
struct DNSPacket
{
/* 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);
};
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
*/
class DNSSocket : public ConnectionSocket
{
private:
int SendTo(const unsigned char *buf, size_t len) const;
int RecvFrom(char *buf, size_t size, sockaddrs &addrs) const;
public:
DNSSocket();
virtual ~DNSSocket();
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;
std::deque<DNSPacket *> packets;
std::map<short, DNSRequest *> requests;
static const int DNSPort = 53;
DNSManager();
~DNSManager();
void AddCache(DNSRecord *rr);
bool CheckCache(DNSRequest *request);
void Tick(time_t now);
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);
};
extern DNSManager *DNSEngine;
#endif // DNS_H
+223
View File
@@ -0,0 +1,223 @@
/*
* Copyright (C) 2008-2010 Anope Team <team@anope.org>
*
* Please read COPYING and README for further details.
*/
#ifndef EXTENSIBLE_H
#define EXTENSIBLE_H
#include "hashcomp.h"
/** Dummy base class we use to cast everything to/from
*/
class ExtensibleItemBase
{
public:
ExtensibleItemBase() { }
virtual ~ExtensibleItemBase() { }
};
/** Class used to represent an extensible item that doesn't hold a pointer
*/
template<typename T> class ExtensibleItemRegular : public ExtensibleItemBase
{
protected:
T Item;
public:
ExtensibleItemRegular(T item) : Item(item) { }
virtual ~ExtensibleItemRegular() { }
T GetItem() const { return Item; }
};
/** 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
{
private:
typedef std::map<Anope::string, ExtensibleItemBase *> extensible_map;
extensible_map Extension_Items;
public:
/** Default constructor, does nothing
*/
Extensible() { }
/** Default destructor, deletes all of the extensible items in this object
* then clears the map
*/
virtual ~Extensible()
{
for (extensible_map::iterator it = Extension_Items.begin(), it_end = Extension_Items.end(); it != it_end; ++it)
delete it->second;
Extension_Items.clear();
}
/** Extend an Extensible class.
*
* @param key The key parameter is an arbitary string which identifies the extension data
* @param p This parameter is a pointer to an ExtensibleItem or ExtensibleItemBase derived class
*
* You must provide a key to store the data as via the parameter 'key'.
* The data will be inserted into the map. If the data already exists, you may not insert it
* twice, Extensible::Extend will return false in this case.
*
* @return Returns true on success, false if otherwise
*/
void Extend(const Anope::string &key, ExtensibleItemBase *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));
}
/** Shrink an Extensible class.
*
* @param key The key parameter is an arbitary string which identifies the extension data
*
* You must provide a key name. The given key name will be removed from the classes data. If
* you provide a nonexistent key (case is important) then the function will return false.
* @return Returns true on success.
*/
bool Shrink(const Anope::string &key)
{
extensible_map::iterator it = this->Extension_Items.find(key);
if (it != this->Extension_Items.end())
{
delete it->second;
/* 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 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().
*/
bool GetExt(const Anope::string &key)
{
return this->Extension_Items.find(key) != this->Extension_Items.end();
}
/** Get a list of all extension items names.
* @param list A deque of strings to receive the list
* @return This function writes a list of all extension items stored
* in this object by name into the given deque and returns void.
*/
void GetExtList(std::deque<Anope::string> &list)
{
for (extensible_map::iterator it = Extension_Items.begin(), it_end = Extension_Items.end(); it != it_end; ++it)
list.push_back(it->first);
}
};
#endif // EXTENSIBLE_H
+192 -756
View File
File diff suppressed because it is too large Load Diff
+149 -111
View File
@@ -1,21 +1,66 @@
/*
* Copyright (C) 2002-2009 InspIRCd Development Team
* Copyright (C) 2009 Anope Team <team@anope.org>
* Copyright (C) 2002-2010 InspIRCd Development Team
* Copyright (C) 2009-2010 Anope Team <team@anope.org>
*
* Please read COPYING and README for further details.
*
* These classes have been copied from InspIRCd and modified
* for use in Anope.
*
* $Id$
*
*/
#ifndef _HASHCOMP_H_
#define _HASHCOMP_H_
#ifndef HASHCOMP_H
#define HASHCOMP_H
#ifdef _WIN32
# ifdef MODULE_COMPILE
# define CoreExport __declspec(dllimport)
# define DllExport __declspec(dllexport)
# else
# define CoreExport __declspec(dllexport)
# define DllExport __declspec(dllimport)
# endif
#else
# define CoreExport
# define DllExport
#endif
#include <string>
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
/*******************************************************
* This file contains classes and templates that deal
* with the comparison and hashing of 'irc strings'.
@@ -31,9 +76,6 @@
* aware of irc::string.
*******************************************************/
#ifndef LOWERMAP
#define LOWERMAP
/** A mapping of uppercase to lowercase, including scandinavian
* 'oddities' as specified by RFC1459, e.g. { -> [, and | -> \
*/
@@ -73,8 +115,6 @@ unsigned const char ascii_case_insensitive_map[256] = {
240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255 /* 240-255 */
};
#endif
/** The irc namespace contains a number of helper classes.
*/
namespace irc
@@ -113,7 +153,7 @@ namespace irc
* @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 CoreExport int compare(const char *str1, const char *str2, size_t n);
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
@@ -121,12 +161,29 @@ namespace irc
* @param c Character to search for
* @return Pointer to the first occurance of c in s1
*/
static CoreExport const char *find(const char *s1, int n, char c);
static const char *find(const char *s1, int n, char c);
};
/** This typedef declares irc::string based upon irc_char_traits.
*/
typedef std::basic_string<char, irc_char_traits, std::allocator<char> > string;
/** Used to hash irc::strings for unordered_map
*/
struct hash
{
/* 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 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;
};
}
/** The ci namespace contains a number of helper classes.
@@ -137,7 +194,7 @@ namespace ci
* This class is used to implement ci::string, a case-insensitive, ASCII-
* comparing string class.
*/
struct ci_char_traits : std::char_traits<char>
struct CoreExport ci_char_traits : std::char_traits<char>
{
/** Check if two chars match.
* @param c1st First character
@@ -167,7 +224,7 @@ namespace ci
* @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 CoreExport int compare(const char *str1, const char *str2, size_t n);
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
@@ -175,22 +232,94 @@ namespace ci
* @param c Character to search for
* @return Pointer to the first occurance of c in s1
*/
static CoreExport const char *find(const char *s1, int n, char c);
static const char *find(const char *s1, int n, char c);
};
/** This typedef declares ci::string based upon ci_char_traits.
*/
typedef std::basic_string<char, ci_char_traits, std::allocator<char> > string;
/** Used to hash ci::strings for unordered_map
*/
struct hash
{
/* 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
* @return true if s1 < s2, else false
*/
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::ostream &operator<<(std::ostream &os, const irc::string &str) { return os << str.c_str(); }
/** Operator >> for irc::string
*/
inline std::istream &operator>>(std::istream &is, irc::string &str)
@@ -201,10 +330,6 @@ inline std::istream &operator>>(std::istream &is, irc::string &str)
return is;
}
/** Operator << for ci::string
*/
inline std::ostream &operator<<(std::ostream &os, const ci::string &str) { return os << str.c_str(); }
/** Operator >> for ci::string
*/
inline std::istream &operator>>(std::istream &is, ci::string &str)
@@ -377,91 +502,4 @@ inline bool operator!=(const ci::string &leftval, const irc::string &rightval)
return !(leftval.c_str() == rightval);
}
/** Assign an irc::string to a std::string.
*/
//inline std::string assign(const irc::string &other) { return other.c_str(); }
/** Assign a std::string to an irc::string.
*/
//inline irc::string assign(const std::string &other) { return other.c_str(); }
/** Assign an ci::string to a std::string.
*/
//inline std::string assign(const ci::string &other) { return other.c_str(); }
/** Assign a std::string to an ci::string.
*/
//inline ci::string assign(const std::string &other) { return other.c_str(); }
/** Assign an irc::string to a ci::string.
*/
//inline ci::string assign(const irc::string &other) { return other.c_str(); }
/** Assign a ci::string to an irc::string.
*/
//inline irc::string assign(const ci::string &other) { return other.c_str(); }
/** sepstream allows for splitting token seperated lists.
* Each successive call to sepstream::GetToken() returns
* the next token, until none remain, at which point the method returns
* an empty string.
*/
class CoreExport sepstream
{
private:
/** Original string.
*/
std::string tokens;
/** Last position of a seperator token
*/
std::string::iterator last_starting_position;
/** Current string position
*/
std::string::iterator n;
/** Seperator value
*/
char sep;
public:
/** Create a sepstream and fill it with the provided data
*/
sepstream(const std::string &source, char seperator);
virtual ~sepstream() { }
/** Fetch the next token from the stream
* @param token The next token from the stream is placed here
* @return True if tokens still remain, false if there are none left
*/
virtual bool GetToken(std::string &token);
/** Fetch the entire remaining stream, without tokenizing
* @return The remaining part of the stream
*/
virtual const std::string GetRemaining();
/** Returns true if the end of the stream has been reached
* @return True if the end of the stream has been reached, otherwise false
*/
virtual bool StreamEnd();
};
/** A derived form of sepstream, which seperates on commas
*/
class CoreExport commasepstream : public sepstream
{
public:
/** Initialize with comma seperator
*/
commasepstream(const std::string &source) : sepstream(source, ',') { }
};
/** A derived form of sepstream, which seperates on spaces
*/
class CoreExport spacesepstream : public sepstream
{
public:
/** Initialize with space seperator
*/
spacesepstream(const std::string &source) : sepstream(source, ' ') { }
};
#endif
#endif // HASHCOMP_H
+1551
View File
File diff suppressed because it is too large Load Diff
+101
View File
@@ -0,0 +1,101 @@
#ifndef LOGGER_H
#define LOGGER_H
enum LogType
{
LOG_ADMIN,
LOG_OVERRIDE,
LOG_COMMAND,
LOG_SERVER,
LOG_CHANNEL,
LOG_USER,
LOG_NORMAL,
LOG_TERMINAL,
LOG_RAWIO,
LOG_DEBUG,
LOG_DEBUG_2,
LOG_DEBUG_3,
LOG_DEBUG_4
};
struct LogFile
{
Anope::string filename;
public:
std::ofstream stream;
LogFile(const Anope::string &name);
Anope::string GetName() const;
};
class CoreExport Log
{
public:
BotInfo *bi;
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_COMMAND/OVERRIDE/ADMIN */
Log(LogType type, User *u, Command *c, ChannelInfo *ci = NULL);
/* LOG_CHANNEL */
Log(User *u, Channel *c, const Anope::string &category = "");
/* LOG_USER */
explicit Log(User *u, const Anope::string &category = "");
/* LOG_SERVER */
Log(Server *s, const Anope::string &category = "");
Log(BotInfo *b, const Anope::string &category = "");
~Log();
template<typename T> Log &operator<<(T val)
{
this->buf << val;
return *this;
}
};
class CoreExport LogInfo
{
public:
std::list<Anope::string> Targets;
std::map<Anope::string, LogFile *> Logfiles;
std::list<Anope::string> Sources;
int LogAge;
bool Inhabit;
std::list<Anope::string> Admin;
std::list<Anope::string> Override;
std::list<Anope::string> Commands;
std::list<Anope::string> Servers;
std::list<Anope::string> Users;
std::list<Anope::string> Channels;
std::list<Anope::string> Normal;
bool RawIO;
bool Debug;
LogInfo(int logage, bool inhabit, 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);
void ProcessMessage(const Log *l);
};
#endif // LOGGER_H
+29
View File
@@ -0,0 +1,29 @@
#ifndef MAIL_H
#define MAIL_H
#include "anope.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(NickCore *nc, const Anope::string &subject, const Anope::string &message);
extern CoreExport bool MailValidate(const Anope::string &email);
class MailThread : public Thread
{
private:
Anope::string MailTo;
Anope::string Addr;
Anope::string Subject;
Anope::string Message;
bool DontQuoteAddresses;
bool Success;
public:
MailThread(const Anope::string &mailto, const Anope::string &addr, const Anope::string &subject, const Anope::string &message);
~MailThread();
void Run();
};
#endif // MAIL_H
-23
View File
@@ -1,23 +0,0 @@
/* Declarations of IRC message structures, variables, and functions.
*
* (C) 2003-2009 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for furhter details.
*
* Based on the original code of Epona by Lara.
* Based on the original code of Services by Andy Church.
*
* $Id$
*
*/
/*************************************************************************/
#include "modules.h"
extern Message messages[];
extern void moduleAddMsgs();
extern Message *find_message(const char *name);
/*************************************************************************/
+493
View File
@@ -0,0 +1,493 @@
/* Mode support
*
* Copyright (C) 2008-2010 Adam <Adam@anope.org>
* Copyright (C) 2008-2010 Anope Team <team@anope.org>
*
* Please read COPYING and README for further details.
*/
#ifndef MODES_H
#define MODES_H
/** All of the valid user mode names
*/
enum UserModeName
{
UMODE_BEGIN,
UMODE_SERV_ADMIN, UMODE_BOT, UMODE_CO_ADMIN, UMODE_FILTER, UMODE_HIDEOPER, UMODE_NETADMIN,
UMODE_REGPRIV, UMODE_PROTECTED, UMODE_NO_CTCP, UMODE_WEBTV, UMODE_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_END
};
/** All of the valid channel mode names
*/
enum ChannelModeName
{
CMODE_BEGIN,
/* Channel modes */
CMODE_BLOCKCOLOR, CMODE_FLOOD, CMODE_INVITE, CMODE_KEY, CMODE_LIMIT, CMODE_MODERATED, CMODE_NOEXTERNAL,
CMODE_PRIVATE, CMODE_REGISTERED, CMODE_SECRET, CMODE_TOPIC, CMODE_AUDITORIUM, CMODE_SSL, CMODE_ADMINONLY,
CMODE_NOCTCP, CMODE_FILTER, CMODE_NOKNOCK, CMODE_REDIRECT, CMODE_REGMODERATED, CMODE_NONICK, CMODE_OPERONLY,
CMODE_NOKICK, CMODE_REGISTEREDONLY, CMODE_STRIPCOLOR, CMODE_NONOTICE, CMODE_NOINVITE, CMODE_ALLINVITE,
CMODE_BLOCKCAPS, CMODE_PERM, CMODE_NICKFLOOD, CMODE_JOINFLOOD, CMODE_DELAYEDJOIN, CMODE_NOREJOIN,
/* b/e/I */
CMODE_BAN, CMODE_EXCEPT,
CMODE_INVITEOVERRIDE,
/* v/h/o/a/q */
CMODE_VOICE, CMODE_HALFOP, CMODE_OP,
CMODE_PROTECT, CMODE_OWNER,
CMODE_END
};
/** The different types of modes
*/
enum ModeType
{
/* Regular mode */
MODE_REGULAR,
/* b/e/I */
MODE_LIST,
/* k/l etc */
MODE_PARAM,
/* v/h/o/a/q */
MODE_STATUS
};
/* Classes of modes, Channel modes and User modes
*/
enum ModeClass
{
/* Channel mode */
MC_CHANNEL,
/* User mode */
MC_USER
};
/** This class is the basis of all modes in Anope
*/
class CoreExport Mode : public Base
{
public:
/* Class of mode this is */
ModeClass Class;
/* The mode name, as a string */
Anope::string NameAsString;
/* Mode char for this */
char ModeChar;
/* Type of mode this is */
ModeType Type;
/** 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);
/** Default destructor
*/
virtual ~Mode();
};
/** This class is a user mode, all user modes use this/inherit from this
*/
class CoreExport UserMode : public Mode
{
public:
/* Mode name */
UserModeName Name;
/** Default constructor
* @param nName The mode name
* @param mNameAsString The mode name as a string
* @param modeChar The mode char
*/
UserMode(UserModeName mName, const Anope::string &mNameAsString, char modeChar);
/** Default destructor
*/
virtual ~UserMode();
};
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);
/** Check if the param is valid
* @param value The param
* @return true or false
*/
virtual bool IsValid(const Anope::string &value) const { return true; }
};
/** This class is a channel mode, all channel modes use this/inherit from this
*/
class CoreExport ChannelMode : public Mode
{
public:
/* Mode name */
ChannelModeName Name;
/** Default constructor
* @param mName The mode name
* @param mNameAsString The mode name as a string
* @param modeChar The mode char
*/
ChannelMode(ChannelModeName mName, const Anope::string &mNameAsString, char modeChar);
/** Default destructor
*/
virtual ~ChannelMode();
/** Can a user set this mode, used for mlock
* NOTE: User CAN be NULL, this is for checking if it can be locked with defcon
* @param u The user, or NULL
*/
virtual bool CanSet(User *u) const { return true; }
};
/** This is a mode for lists, eg b/e/I. These modes should inherit from this
*/
class CoreExport ChannelModeList : public ChannelMode
{
public:
/** Default constructor
* @param mName The mode name
* @param mNameAsString The mode name as a string
* @param modeChar The mode char
*/
ChannelModeList(ChannelModeName mName, const Anope::string &mNameAsString, char modeChar);
/** Default destructor
*/
virtual ~ChannelModeList();
/** Is the mask valid
* @param mask The mask
* @return true for yes, false for no
*/
virtual bool IsValid(const Anope::string &mask) const { return true; }
/** Add the mask to the channel, this should be overridden
* @param chan The channel
* @param mask The mask
*/
virtual void AddMask(Channel *chan, const Anope::string &mask) { }
/** Delete the mask from the channel, this should be overridden
* @param chan The channel
* @param mask The mask
*/
virtual void DelMask(Channel *chan, const Anope::string &mask) { }
};
/** This is a mode with a paramater, eg +k/l. These modes should use/inherit from this
*/
class CoreExport ChannelModeParam : public ChannelMode
{
public:
/** Default constructor
* @param mName The mode name
* @param 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);
/** Default destructor
*/
virtual ~ChannelModeParam();
/* Should we send an arg when unsetting this mode? */
bool MinusNoArg;
/** Is the param valid
* @param value The param
* @return true for yes, false for no
*/
virtual bool IsValid(const Anope::string &value) const { return true; }
};
/** This is a mode that is a channel status, eg +v/h/o/a/q.
*/
class CoreExport ChannelModeStatus : public ChannelMode
{
public:
/* The symbol, eg @ % + */
char Symbol;
/** 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 @ % +
*/
ChannelModeStatus(ChannelModeName mName, const Anope::string &mNameAsString, char modeChar, char mSymbol);
/** 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) { }
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;
};
/** This class is used for channel mode +A (Admin only)
* Only opers can mlock it
*/
class CoreExport ChannelModeAdmin : public ChannelMode
{
public:
ChannelModeAdmin(char modeChar) : ChannelMode(CMODE_ADMINONLY, "CMODE_ADMINONLY", modeChar) { }
/* Opers only */
bool CanSet(User *u) const;
};
/** This class is used for channel mode +O (Opers only)
* Only opers can mlock it
*/
class CoreExport ChannelModeOper : public ChannelMode
{
public:
ChannelModeOper(char modeChar) : ChannelMode(CMODE_OPERONLY, "CMODE_OPERONLY", modeChar) { }
/* Opers only */
bool CanSet(User *u) const;
};
/** This class is used for channel mode +r (registered channel)
* No one may mlock r
*/
class CoreExport ChannelModeRegistered : public ChannelMode
{
public:
ChannelModeRegistered(char modeChar) : ChannelMode(CMODE_REGISTERED, "CMODE_REGISTERED", modeChar) { }
/* No one mlocks +r */
bool CanSet(User *u) const;
};
enum StackerType
{
ST_CHANNEL,
ST_USER
};
class StackerInfo
{
public:
/* Modes to be added */
std::list<std::pair<Base *, Anope::string> > AddModes;
/* Modes to be deleted */
std::list<std::pair<Base *, Anope::string> > DelModes;
/* The type of object this stacker info is for */
StackerType Type;
/* Bot this is sent from */
BotInfo *bi;
/** Add a mode to this object
* @param mode The mode
* @param Set true if setting, false if unsetting
* @param Param The param for the mode
*/
void AddMode(Mode *mode, bool Set, const Anope::string &Param);
};
/** This is mode manager
* It contains functions for adding modes to Anope so Anope can track them
* and do things such as MLOCK.
* This also contains a mode stacker that will combine multiple modes and set
* them on a channel all at once
*/
class CoreExport ModeManager
{
protected:
/* List of pairs of user/channels and their stacker info */
static std::list<std::pair<Base *, StackerInfo *> > StackerObjects;
/** Get the stacker info for an item, if one doesnt exist it is created
* @param Item The user/channel etc
* @return The stacker info
*/
static StackerInfo *GetInfo(Base *Item);
/** Build a list of mode strings to send to the IRCd from the mode stacker
* @param info The stacker info for a channel or user
* @return a list of strings
*/
static std::list<Anope::string> BuildModeStrings(StackerInfo *info);
/** Really add a mode to the stacker, internal use only
* @param bi The client to set the modes from
* @param Object The object, user/channel
* @param mode The mode
* @param Set Adding or removing?
* @param Param A param, if there is one
* @param Type The type this is, user or channel
*/
static void StackerAddInternal(BotInfo *bi, Base *Object, Mode *mode, bool Set, const Anope::string &Param, StackerType Type);
public:
/* List of all modes Anope knows about */
static std::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.
*/
/** Add a user mode to Anope
* @param um A UserMode or UserMode derived class
* @return true on success, false on error
*/
static bool AddUserMode(UserMode *um);
/** Add a channel mode to Anope
* @param cm A ChannelMode or ChannelMode derived class
* @return true on success, false on error
*/
static bool AddChannelMode(ChannelMode *cm);
/** Find a channel mode
* @param Mode The mode
* @return The mode class
*/
static ChannelMode *FindChannelModeByChar(char Mode);
/** Find a user mode
* @param Mode The mode
* @return The mode class
*/
static UserMode *FindUserModeByChar(char Mode);
/** Find a channel mode
* @param Mode The modename
* @return The mode class
*/
static ChannelMode *FindChannelModeByName(ChannelModeName Name);
/** Find a user mode
* @param Mode The modename
* @return The mode class
*/
static UserMode *FindUserModeByName(UserModeName Name);
/** Find a mode by name
* @param name The mode name
* @return The mode
*/
static Mode *FindModeByName(const Anope::string &name);
/** Gets the channel mode char for a symbol (eg + returns v)
* @param Value The symbol
* @return The char
*/
static char GetStatusChar(char Value);
/** Add a mode to the stacker to be set on a channel
* @param bi The client to set the modes from
* @param c The channel
* @param cm The channel mode
* @param Set true for setting, false for removing
* @param Param The param, if there is one
*/
static void StackerAdd(BotInfo *bi, Channel *c, ChannelMode *cm, bool Set, const Anope::string &Param = "");
/** Add a mode to the stacker to be set on a user
* @param bi The client to set the modes from
* @param u The user
* @param um The user mode
* @param Set true for setting, false for removing
* @param param The param, if there is one
*/
static void StackerAdd(BotInfo *bi, User *u, UserMode *um, bool Set, const Anope::string &Param = "");
/** Process all of the modes in the stacker and send them to the IRCd to be set on channels/users
*/
static void ProcessModes();
/** Delete a user or channel from the stacker
* @param b The user/channel
*/
static void StackerDel(Base *b);
};
#endif // MODES_H
+2 -4
View File
@@ -3,9 +3,7 @@
#include "services.h"
#include "commands.h"
#include "language.h"
#include "modules.h"
#include "version.h"
#endif
#define _(x) x
#endif // MODULE_H
+653 -498
View File
File diff suppressed because it is too large Load Diff
+232
View File
@@ -0,0 +1,232 @@
/* 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 -35
View File
@@ -1,64 +1,76 @@
/*
* Copyright (C) 2008-2009 Robin Burchell <w00t@inspircd.org>
* Copyright (C) 2008-2009 Anope Team <team@anope.org>
* Copyright (C) 2008-2010 Robin Burchell <w00t@inspircd.org>
* Copyright (C) 2008-2010 Anope Team <team@anope.org>
*
* Please read COPYING and README for further details.
*
*
* $Id$
*
*/
#ifndef OPERTYPE_H
#define OPERTYPE_H
#include "hashcomp.h"
class CoreExport OperType
{
private:
/** The name of this opertype, e.g. "sra".
*/
std::string name;
*/
Anope::string name;
/** Privs that this opertype may use, e.g. 'users/auspex'.
* This *must* be std::list, see commands comment for details.
*/
std::list<std::string> privs;
* This *must* be std::list, see commands comment for details.
*/
std::list<Anope::string> privs;
/** Commands this user may execute, e.g:
* botserv/set/ *, botserv/set/private, botserv/ *
* et cetera.
*
* This *must* be std::list, not std::map, because
* we support full globbing here. This shouldn't be a problem
* as we don't invoke it often.
*/
std::list<std::string> commands;
* botserv/set/ *, botserv/set/private, botserv/ *
* et cetera.
*
* This *must* be std::list, not std::map, because
* we support full globbing here. This shouldn't be a problem
* as we don't invoke it often.
*/
std::list<Anope::string> commands;
/** Set of opertypes we inherit from
*/
std::set<OperType *> inheritances;
public:
/** Create a new opertype of the given name.
* @param nname The opertype name, e.g. "sra".
*/
OperType(const std::string &nname);
OperType(const Anope::string &nname);
/** Check whether this opertype has access to run the given command string.
* @param cmdstr The string to check, e.g. botserv/set/private.
* @return True if this opertype may run the specified command, false otherwise.
*/
bool HasCommand(const std::string &cmdstr) const;
* @param cmdstr The string to check, e.g. botserv/set/private.
* @return True if this opertype may run the specified command, false otherwise.
*/
bool HasCommand(const Anope::string &cmdstr) const;
/** Check whether this opertype has access to the given special permission.
* @param privstr The priv to check for, e.g. users/auspex.
* @return True if this opertype has the specified priv, false otherwise.
*/
bool HasPriv(const std::string &privstr) const;
* @param privstr The priv to check for, e.g. users/auspex.
* @return True if this opertype has the specified priv, false otherwise.
*/
bool HasPriv(const Anope::string &privstr) const;
/** Add the specified command to this opertype.
* @param cmdstr The command mask to grant this opertype access to, e.g: nickserv/ *, chanserv/set/ *, botserv/set/private.
*/
void AddCommand(const std::string &cmdstr);
* @param cmdstr The command mask to grant this opertype access to, e.g: nickserv/ *, chanserv/set/ *, botserv/set/private.
*/
void AddCommand(const Anope::string &cmdstr);
/** Add the specified priv mask to this opertype.
* @param privstr The specified mask of privs to grant this opertype access to, e.g. users/auspex, users/ *, etc.
*/
void AddPriv(const std::string &privstr);
* @param privstr The specified mask of privs to grant this opertype access to, e.g. users/auspex, users/ *, etc.
*/
void AddPriv(const Anope::string &privstr);
/** Returns the name of this opertype.
*/
const std::string &GetName() const;
const Anope::string &GetName() const;
/** Make this opertype inherit commands and privs from another opertype
* @param ot The opertype to inherit from
*/
void Inherits(OperType *ot);
};
#endif // OPERTYPE_H
-19
View File
@@ -1,19 +0,0 @@
/* Include extra includes needed by most/all pseudo-clients.
*
* (C) 2003-2009 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for furhter details.
*
* Based on the original code of Epona by Lara.
* Based on the original code of Services by Andy Church.
*
* $Id$
*
*/
#include "commands.h"
#include "language.h"
#include "timers.h"
#include "datafiles.h"
#include "slist.h"
+256 -110
View File
@@ -1,89 +1,117 @@
/* Modular support
*
* (C) 2008-2009 Anope Team
* (C) 2008-2010 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
*
* $Id$
*
*/
class CoreExport ChannelInfo : public Extensible
{
public:
ChannelInfo()
{
next = prev = NULL;
founderpass[0] = name[0] = last_topic_setter[0] = '\0';
founder = successor = NULL;
desc = url = email = last_topic = forbidby = forbidreason = NULL;
time_registered = last_used = last_topic_time = 0;
flags = 0;
bantype = akickcount = 0;
levels = NULL;
akick = NULL;
mlock_on = mlock_off = mlock_limit = 0;
mlock_key = mlock_flood = mlock_redirect = entry_message = NULL;
c = NULL;
bi = NULL;
botflags = 0;
ttb = NULL;
bwcount = 0;
badwords = NULL;
capsmin = capspercent = 0;
floodlines = floodsecs = 0;
repeattimes = 0;
}
#ifndef REGCHANNEL_H
#define REGCHANNEL_H
ChannelInfo *next, *prev;
char name[CHANMAX];
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;
/** Flags used for the ChannelInfo class
*/
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 */
CI_SECUREOPS,
/* Hide channel from ChanServ LIST command */
CI_PRIVATE,
/* Topic can only be changed by SET TOPIC */
CI_TOPICLOCK,
/* Only users on the access list may join */
CI_RESTRICTED,
/* Don't allow ChanServ and BotServ commands to do bad things to users with higher access levels */
CI_PEACE,
/* Don't allow any privileges unless a user is IDENTIFIED with NickServ */
CI_SECURE,
/* 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
* channel mode (+P on InspIRCd) or /cs set #chan persist on.
* This keeps the service bot in the channel regardless if a +P type mode
* is set or not
*/
CI_PERSIST,
CI_END
};
class CoreExport ChannelInfo : public Extensible, public Flags<ChannelInfoFlag, CI_END>
{
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 */
public:
/** Default constructor
* @param chname The channel name
*/
ChannelInfo(const Anope::string &chname);
/** Default destructor
*/
~ChannelInfo();
Anope::string name; /* Channel name */
NickCore *founder;
NickCore *successor; /* Who gets the channel if the founder
* nick is dropped or expires */
char founderpass[PASSMAX];
char *desc;
char *url;
char *email;
NickCore *successor; /* Who gets the channel if the founder nick is dropped or expires */
Anope::string desc;
time_t time_registered;
time_t last_used;
char *last_topic; /* Last topic on the channel */
char last_topic_setter[NICKMAX]; /* Who set the last topic */
time_t last_topic_time; /* When the last topic was set */
uint32 flags; /* See below */
char *forbidby;
char *forbidreason;
Anope::string last_topic; /* The last topic that was set on this channel */
Anope::string last_topic_setter; /* Setter */
time_t last_topic_time; /* Time */
Anope::string forbidby;
Anope::string forbidreason;
int16 bantype;
int16 *levels; /* Access levels for commands */
int16 *levels; /* Access levels for commands */
std::vector<ChanAccess *> access; /* List of authorized users */
uint16 akickcount;
AutoKick *akick; /* List of users to kickban */
uint32 mlock_on, mlock_off; /* See channel modes below */
uint32 mlock_limit; /* 0 if no limit */
char *mlock_key; /* NULL if no key */
char *mlock_flood; /* NULL if no +f */
char *mlock_redirect; /* NULL if no +L */
char *entry_message; /* Notice sent on entering channel */
Anope::string entry_message; /* Notice sent on entering channel */
MemoInfo memos;
struct channel_ *c; /* Pointer to channel record (if *
* channel is currently in use) */
Channel *c; /* Pointer to channel record (if channel is currently in use) */
/* For BotServ */
BotInfo *bi; /* Bot used on this channel */
uint32 botflags; /* BS_* below */
Flags<BotServFlag> botflags;
int16 *ttb; /* Times to ban for each kicker */
uint16 bwcount;
BadWord *badwords; /* For BADWORDS kicker */
int16 capsmin, capspercent; /* For CAPS kicker */
int16 floodlines, floodsecs; /* For FLOOD kicker */
int16 repeattimes; /* For REPEAT kicker */
@@ -92,19 +120,12 @@ class CoreExport ChannelInfo : public Extensible
*
* @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.
*/
void AddAccess(NickCore *nc, int16 level, int32 last_seen = 0)
{
ChanAccess *new_access = new ChanAccess;
new_access->in_use = 1;
new_access->nc = nc;
new_access->level = level;
new_access->last_seen = last_seen;
access.push_back(new_access);
}
void AddAccess(NickCore *nc, int16 level, const Anope::string &creator, int32 last_seen = 0);
/** Get an entry from the channel access list by index
*
@@ -113,13 +134,7 @@ class CoreExport ChannelInfo : public Extensible
*
* Retrieves an entry from the access list that matches the given index.
*/
ChanAccess *GetAccess(unsigned index)
{
if (access.empty() || index >= access.size())
return NULL;
return access[index];
}
ChanAccess *GetAccess(unsigned index);
/** Get an entry from the channel access list by NickCore
*
@@ -129,17 +144,12 @@ class CoreExport ChannelInfo : public Extensible
*
* Retrieves an entry from the access list that matches the given NickCore, optionally also matching a certain level.
*/
ChanAccess *GetAccess(NickCore *nc, int16 level = 0)
{
if (access.empty())
return NULL;
ChanAccess *GetAccess(const NickCore *nc, int16 level = 0);
for (unsigned i = 0; i < access.size(); i++)
if (access[i]->in_use && access[i]->nc == nc && (level ? access[i]->level == level : true))
return access[i];
return NULL;
}
/** Get the size of the accss vector for this channel
* @return The access vector size
*/
unsigned GetAccessCount() const;
/** Erase an entry from the channel access list
*
@@ -147,32 +157,168 @@ class CoreExport ChannelInfo : public Extensible
*
* Clears the memory used by the given access entry and removes it from the vector.
*/
void EraseAccess(unsigned index)
{
if (access.empty() || index >= access.size())
return;
delete access[index];
access.erase(access.begin() + index);
}
/** Cleans the channel access list
*
* Cleans up the access list so it no longer contains entries no longer in use.
*/
void CleanAccess()
{
for (unsigned j = access.size(); j > 0; --j)
if (!access[j - 1]->in_use)
EraseAccess(j - 1);
}
void EraseAccess(unsigned index);
/** Clear the entire channel access list
*
* Clears the entire access list by deleting every item and then clearing the vector.
*/
void ClearAccess()
{
while (access.begin() != access.end())
EraseAccess(0);
}
void ClearAccess();
/** Add an akick entry to the channel by NickCore
* @param user The user who added the akick
* @param akicknc The nickcore being akicked
* @param reason The reason for the akick
* @param t The time the akick was added, defaults to now
* @param lu The time the akick was last used, defaults to never
*/
AutoKick *AddAkick(const Anope::string &user, NickCore *akicknc, const Anope::string &reason, time_t t = Anope::CurTime, time_t lu = 0);
/** Add an akick entry to the channel by reason
* @param user The user who added the akick
* @param mask The mask of the akick
* @param reason The reason for the akick
* @param t The time the akick was added, defaults to now
* @param lu The time the akick was last used, defaults to never
*/
AutoKick *AddAkick(const Anope::string &user, const Anope::string &mask, const Anope::string &reason, time_t t = Anope::CurTime, time_t lu = 0);
/** Get an entry from the channel akick list
* @param index The index in the akick vector
* @return The akick structure, or NULL if not found
*/
AutoKick *GetAkick(unsigned index);
/** Get the size of the akick vector for this channel
* @return The akick vector size
*/
unsigned GetAkickCount() const;
/** Erase an entry from the channel akick list
* @param index The index of the akick
*/
void EraseAkick(unsigned index);
/** Clear the whole akick list
*/
void ClearAkick();
/** Add a badword to the badword list
* @param word The badword
* @param type The type (SINGLE START END)
* @return The badword
*/
BadWord *AddBadWord(const Anope::string &word, BadWordType type);
/** Get a badword structure by index
* @param index The index
* @return The badword
*/
BadWord *GetBadWord(unsigned index);
/** Get how many badwords are on this channel
* @return The number of badwords in the vector
*/
unsigned GetBadWordCount() const;
/** Remove a badword
* @param index The index of the badword
*/
void EraseBadWord(unsigned index);
/** Clear all badwords from the channel
*/
void ClearBadWords();
/** 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 status True to check mlock on, false for mlock off
* @return true on success, false on fail
*/
bool HasMLock(ChannelModeName Name, bool status) const;
/** Set a mlock
* @param Name The mode
* @param status True for mlock on, false for mlock off
* @param param An optional param arg for + mlocked modes
* @return true on success, false on failure (module blocking)
*/
bool SetMLock(ChannelModeName Name, bool status, const Anope::string &param = "");
/** Remove a mlock
* @param Name The mode
* @return true on success, false on failure (module blcoking)
*/
bool RemoveMLock(ChannelModeName Name);
/** 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
*/
size_t GetMLockCount(bool status) const;
/** Get a param from the channel
* @param Name The mode
* @param Target a string to put the param into
* @return true on success
*/
bool GetParam(ChannelModeName Name, Anope::string &Target) const;
/** Check if a mode is set and has a param
* @param Name The mode
*/
bool HasParam(ChannelModeName Name) const;
/** Clear all the params from the channel
*/
void ClearParams();
/** Check whether a user is permitted to be on this channel
* @param u The user
* @return true if they are allowed, false if they aren't and were kicked
*/
bool CheckKick(User *user);
/** Check the channel topic
* If topic lock is enabled will change the topic back, else it records
* the new topic in the ChannelInfo
*/
void CheckTopic();
/** Restore the channel topic, used on channel creation when not syncing with the uplink
* and after uplink sync
*/
void RestoreTopic();
};
/** 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);
};
#endif // REGCHANNEL_H
+189
View File
@@ -0,0 +1,189 @@
#ifndef SERVERS_H
#define SERVERS_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();
/* 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[];
/** Flags set on servers
*/
enum ServerFlag
{
SERVER_NONE,
/* Server is syncing */
SERVER_SYNCING,
/* This server was juped */
SERVER_JUPED
};
/** Class representing a server
*/
class CoreExport Server : public Flags<ServerFlag>
{
private:
/* Server name */
Anope::string Name;
/* Hops between services and server */
unsigned int Hops;
/* Server description */
Anope::string Description;
/* Server ID */
Anope::string SID;
/* Links for this server */
std::vector<Server *> Links;
/* Uplink for this server */
Server *UplinkServer;
/* Reason this server was quit */
Anope::string QReason;
public:
/** Constructor
* @param uplink The uplink this server is from, is only NULL when creating Me
* @param name The server name
* @param hops Hops from services server
* @param description Server rdescription
* @param sid Server sid/numeric
* @param flag An optional server flag
*/
Server(Server *uplink, const Anope::string &name, unsigned hops, const Anope::string &description, const Anope::string &sid, ServerFlag flag = SERVER_NONE);
/** Destructor
*/
~Server();
/** Delete this server with a reason
* @param reason The reason
*/
void Delete(const Anope::string &reason);
/** Get the name for this server
* @return The name
*/
const Anope::string &GetName() const;
/** Get the number of hops this server is from services
* @return Number of hops
*/
unsigned GetHops() const;
/** Set the server description
* @param desc The new description
*/
void SetDescription(const Anope::string &desc);
/** Get the server description
* @return The server description
*/
const Anope::string &GetDescription() const;
/** Get the server numeric/SID
* @return The numeric/SID
*/
const Anope::string &GetSID() const;
/** Get the list of links this server has, or NULL if it has none
* @return A list of servers
*/
const std::vector<Server *> &GetLinks() const;
/** Get the uplink server for this server, if this is our uplink will be Me
* @return The servers uplink
*/
Server *GetUplink();
/** Adds a link to this server
* @param s The linking server
*/
void AddLink(Server *s);
/** Delinks a server from this server
* @param s The server
*/
void DelLink(Server *s);
/** 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)
*/
void Sync(bool SyncLinks);
/** Check if this server is synced
* @return true or false
*/
bool IsSynced() const;
/** Check if this server is ULined
* @return true or false
*/
bool IsULined() const;
/** Find a server
* @param name The name or SID/numeric
* @param s The server list to search for this server on, defaults to our Uplink
* @return The server
*/
static Server *Find(const Anope::string &name, Server *s = NULL);
};
#endif // SERVERS_H
+753 -1112
View File
File diff suppressed because it is too large Load Diff
-50
View File
@@ -1,50 +0,0 @@
/* Header for Services list handler.
*
* (C) 2003-2009 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for furhter details.
*
* Based on the original code of Epona by Lara.
* Based on the original code of Services by Andy Church.
*
* $Id$
*
*/
#ifndef SLIST_H
#define SLIST_H
typedef struct slist_ SList;
typedef struct slistopts_ SListOpts;
struct slist_ {
void **list;
int16 count; /* Total entries of the list */
int16 capacity; /* Capacity of the list */
int16 limit; /* Maximum possible entries on the list */
SListOpts *opts;
};
struct slistopts_ {
int32 flags; /* Flags for the list. See below. */
int (*compareitem) (SList *slist, void *item1, void *item2); /* Called to compare two items */
int (*isequal) (SList *slist, void *item1, void *item2); /* Called by slist_indexof. item1 can be an arbitrary pointer. */
void (*freeitem) (SList *slist, void *item); /* Called when an item is removed */
};
#define SLIST_DEFAULT_LIMIT 32767
#define SLISTF_NODUP 0x00000001 /* No duplicates in the list. */
#define SLISTF_SORT 0x00000002 /* Automatically sort the list. Used with compareitem member. */
/* Note that number is the index in the array + 1 */
typedef int (*slist_enumcb_t) (SList *slist, int number, void *item, va_list args);
/* Callback to know whether we can delete the entry. */
typedef int (*slist_delcheckcb_t) (SList *slist, void *item, va_list args);
#endif /* SLIST_H */
+58
View File
@@ -0,0 +1,58 @@
/*
*
* (C) 2003-2010 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for furhter details.
*
* Based on the original code of Epona by Lara.
* Based on the original code of Services by Andy Church.
*/
#ifndef SOCKETENGINE_H
#define SOCKETENGINE_H
class CoreExport SocketEngineBase
{
public:
#ifdef _WIN32
/* Windows crap */
WSADATA wsa;
#endif
/* Map of sockets */
std::map<int, Socket *> Sockets;
/** Default constructor
*/
SocketEngineBase();
/** Default destructor
*/
virtual ~SocketEngineBase();
/** Add a socket to the internal list
* @param s The socket
*/
virtual void AddSocket(Socket *s) { }
/** Delete a socket from the internal list
* @param s The socket
*/
virtual void DelSocket(Socket *s) { }
/** Mark a socket as writeable
* @param s The socket
*/
virtual void MarkWritable(Socket *s) { }
/** Unmark a socket as writeable
* @param s The socket
*/
virtual void ClearWritable(Socket *s) { }
/** Read from sockets and do things
*/
virtual void Process() { }
};
#endif // SOCKETENGINE_H
+360 -32
View File
@@ -1,48 +1,376 @@
/*
*
* (C) 2004-2009 Anope Team
* (C) 2003-2010 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for furhter details.
*
* Based on the original code of Epona by Lara.
* Based on the original code of Services by Andy Church.
*
*
* Based on the original code of Services by Andy Church.
*/
#ifndef SOCKETS_H
#define SOCKETS_H
#include "anope.h"
#define NET_BUFSIZE 65535
#ifdef _WIN32
typedef SOCKET ano_socket_t;
#define ano_sockread(fd, buf, len) recv(fd, buf, len, 0)
#define ano_sockwrite(fd, buf, len) send(fd, buf, len, 0)
#define ano_sockclose(fd) closesocket(fd)
#define ano_sockgeterr() WSAGetLastError()
#define ano_sockseterr(err) WSASetLastError(err)
/* ano_sockstrerror in sockutil.c */
extern char *ano_sockstrerror(int);
/* ano_socksetnonb in sockutil.c */
#define ano_sockerrnonb(err) (err == WSAEINPROGRESS || err == WSAEWOULDBLOCK)
#define SOCKERR_EBADF WSAENOTSOCK
#define SOCKERR_EINTR WSAEINTR
#define SOCKERR_EINVAL WSAEINVAL
#define SOCKERR_EINPROGRESS WSAEINPROGRESS
# define CloseSocket closesocket
#else
typedef int ano_socket_t;
#define ano_sockread(fd, buf, len) read(fd, buf, len)
#define ano_sockwrite(fd, buf, len) write(fd, buf, len)
#define ano_sockclose(fd) close(fd)
#define ano_sockgeterr() errno
#define ano_sockseterr(err) errno = err
#define ano_sockstrerror(err) strerror(err)
#define ano_socksetnonb(fd) fcntl(fd, F_SETFL, O_NONBLOCK)
#define ano_sockerrnonb(err) (err == EINPROGRESS)
#define SOCKERR_EBADF EBADF
#define SOCKERR_EINTR EINTR
#define SOCKERR_EINVAL EINVAL
#define SOCKERR_EINPROGRESS EINPROGRESS
# define CloseSocket close
#endif
#endif
/** A sockaddr union used to combine IPv4 and IPv6 sockaddrs
*/
union CoreExport sockaddrs
{
sockaddr sa;
sockaddr_in sa4;
sockaddr_in6 sa6;
/** Construct the object, sets everything to 0
*/
sockaddrs();
/** Memset the object to 0
*/
void clear();
/** Get the size of the sockaddr we represent
* @return The size
*/
size_t size() const;
/** Get the port represented by this addr
* @return The port, or -1 on fail
*/
int port() const;
/** Get the address represented by this addr
* @return The address
*/
Anope::string addr() const;
/** Check if this sockaddr has data in it
*/
bool operator()() const;
/** Compares with sockaddr with another. Compares address type, port, and address
* @return true if they are the same
*/
bool operator==(const sockaddrs &other) const;
/* The same as above but not */
inline bool operator!=(const sockaddrs &other) const { return !(*this == other); }
/** The equivalent of inet_pton
* @param type AF_INET or AF_INET6
* @param address The address to place in the sockaddr structures
* @param pport An option port to include in the sockaddr structures
* @throws A socket exception if given invalid IPs
*/
void pton(int type, const Anope::string &address, int pport = 0);
/** The equivalent of inet_ntop
* @param type AF_INET or AF_INET6
* @param address The in_addr or in_addr6 structure
* @throws A socket exception if given an invalid structure
*/
void ntop(int type, const void *src);
};
class SocketException : public CoreException
{
public:
/** Default constructor for socket exceptions
* @param message Error message
*/
SocketException(const Anope::string &message) : CoreException(message) { }
/** Default destructor
* @throws Nothing
*/
virtual ~SocketException() throw() { }
};
enum SocketType
{
SOCKTYPE_BASE,
SOCKTYPE_BUFFERED,
SOCKTYPE_CONNECTION,
SOCKTYPE_CLIENT,
SOCKTYPE_LISTEN
};
enum SocketFlag
{
SF_DEAD,
SF_WRITABLE
};
class Socket;
class ClientSocket;
class ListenSocket;
class ConnectionSocket;
class CoreExport SocketIO
{
public:
/** Receive something from the buffer
* @param s The socket
* @param buf The buf to read to
* @param sz How much to read
* @return Number of bytes received
*/
virtual int Recv(Socket *s, char *buf, size_t sz) const;
/** Write something to the socket
* @param s The socket
* @param buf What to write
* @return Number of bytes written
*/
virtual int Send(Socket *s, const Anope::string &buf) const;
/** Accept a connection from a socket
* @param s The socket
*/
virtual void Accept(ListenSocket *s);
/** Connect 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 = "");
/** Called when the socket is destructing
*/
virtual void Destroy() { }
};
class CoreExport Socket : public Flags<SocketFlag, 2>
{
protected:
/* Socket FD */
int Sock;
/* Is this an IPv6 socket? */
bool IPv6;
public:
/* 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
*/
Socket();
/** Default constructor
* @param sock The socket to use, 0 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);
/** Default destructor
*/
virtual ~Socket();
/** Get the socket FD for this socket
* @return the fd
*/
int GetFD() const;
/** Check if this socket is IPv6
* @return true or false
*/
bool IsIPv6() const;
/** Mark a socket as blockig
* @return true if the socket is now blocking
*/
bool SetBlocking();
/** Mark a socket as non-blocking
* @return true if the socket is now non-blocking
*/
bool SetNonBlocking();
/** Called when there is something to be received for this socket
* @return true on success, false to drop this socket
*/
virtual bool ProcessRead();
/** Called when the socket is ready to be written to
* @return true on success, false to drop this socket
*/
virtual bool ProcessWrite();
/** Called when there is an error for this socket
* @return true on success, false to drop this socket
*/
virtual void ProcessError();
};
class CoreExport BufferedSocket : public Socket
{
protected:
/* Things to be written to the socket */
std::string WriteBuffer;
/* Part of a message sent from the server, but not totally received */
std::string extrabuf;
/* How much data was received from this socket */
size_t RecvLen;
public:
/** Blank 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();
/** Called when there is something to be received for this socket
* @return true on success, false to drop this socket
*/
bool ProcessRead();
/** Called when the socket is ready to be written to
* @return true on success, false to drop this socket
*/
bool ProcessWrite();
/** Called with a line received from the socket
* @param buf The line
* @return true to continue reading, false to drop the socket
*/
virtual bool Read(const Anope::string &buf);
/** Write to the socket
* @param message The message
*/
void Write(const char *message, ...);
void Write(const Anope::string &message);
/** Get the length of the read buffer
* @return The length of the read buffer
*/
size_t ReadBufferLen() const;
/** Get the length of the write buffer
* @return The length of the write buffer
*/
size_t WriteBufferLen() const;
};
class CoreExport ListenSocket : public Socket
{
protected:
/* Sockaddrs for bindip/port */
sockaddrs listenaddrs;
public:
/** Constructor
* @param bindip The IP to bind to
* @param port The port to listen on
* @param ipv6 true for ipv6
*/
ListenSocket(const Anope::string &bindip, int port, bool ipv6);
/** Destructor
*/
virtual ~ListenSocket();
/** Process what has come in from the connection
* @return false to destory this socket
*/
bool ProcessRead();
/** Called when a connection is accepted
* @param fd The FD for the new connection
* @param addr The sockaddr for where the connection came from
* @return The new socket
*/
virtual ClientSocket *OnAccept(int fd, const sockaddrs &addr);
};
class CoreExport ConnectionSocket : public BufferedSocket
{
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);
/** 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 = "");
};
class ClientSocket : public BufferedSocket
{
/* 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);
};
class CoreExport Pipe : public BufferedSocket
{
public:
/** The FD of the write pipe (if this isn't evenfd)
* this->Sock is the readfd
*/
int WritePipe;
/** Constructor
*/
Pipe();
/** Called when data is to be read
*/
bool ProcessRead();
/** Function that calls OnNotify
*/
bool Read(const Anope::string &);
/** Called when this pipe needs to be woken up
*/
void Notify();
/** Should be overloaded to do something useful
*/
virtual void OnNotify();
};
#endif // SOCKET_H
+5 -2
View File
@@ -1,12 +1,13 @@
#ifndef _SYSCONF_H_
#define _SYSCONF_H_
#cmakedefine DEBUG_BUILD
#cmakedefine DEFUMASK @DEFUMASK@
#cmakedefine HAVE_SYS_TYPES_H 1
#cmakedefine HAVE_STDINT_H 1
#cmakedefine HAVE_STDDEF_H 1
#cmakedefine HAVE_BACKTRACE 1
#cmakedefine HAVE_GETHOSTBYNAME 1
#cmakedefine HAVE_GETTIMEOFDAY 1
#cmakedefine HAVE_SETGRENT 1
#cmakedefine HAVE_STRCASECMP 1
@@ -16,8 +17,10 @@
#cmakedefine HAVE_STRLCPY 1
#cmakedefine HAVE_SYS_SELECT_H 1
#cmakedefine HAVE_UMASK 1
#cmakedefine HAVE_EVENTFD 1
#cmakedefine GETTEXT_FOUND 1
#cmakedefine RUNGROUP "@RUNGROUP@"
#cmakedefine SERVICES_BIN "@SERVICES_BIN@"
#define LIBINTL "@LIBINTL_INCLUDE@"
#cmakedefine HAVE_UINT8_T 1
#cmakedefine HAVE_U_INT8_T 1
-121
View File
@@ -1,121 +0,0 @@
#ifndef _SYSCONF_H_
#define _SYSCONF_H_
#undef DEFUMASK
#undef HAVE_SYS_TYPES_H
#undef HAVE_STDINT_H
#undef HAVE_STDDEF_H
#undef HAVE_BACKTRACE
#undef HAVE_GETHOSTBYNAME
#undef HAVE_GETTIMEOFDAY
#undef HAVE_SETGRENT
#undef HAVE_STRCASECMP
#undef HAVE_STRICMP
#undef HAVE_STRINGS_H
#undef HAVE_STRLCAT
#undef HAVE_STRLCPY
#undef HAVE_SYS_SELECT_H
#undef HAVE_UMASK
#undef RUNGROUP
#define SERVICES_BIN "services"
#undef HAVE_UINT8_T
#undef HAVE_U_INT8_T
#undef HAVE_INT16_T
#undef HAVE_UINT16_T
#undef HAVE_U_INT16_T
#undef HAVE_INT32_T
#undef HAVE_UINT32_T
#undef HAVE_U_INT32_T
#ifdef HAVE_SYS_TYPES_H
# include <sys/types.h>
#endif
#ifdef HAVE_STDINT_H
# include <stdint.h>
#endif
#ifdef HAVE_STDDEF_H
# include <stddef.h>
#endif
#ifdef HAVE_UINT8_T
typedef uint8_t uint8;
#else
# ifdef HAVE_U_INT8_T
typedef u_int8_t uint8;
# else
# ifdef _WIN32
typedef unsigned __int8 uint8;
# else
typedef unsigned short uint8;
# endif
# endif
#endif
#ifdef HAVE_INT16_T
typedef int16_t int16;
#else
# ifdef _WIN32
typedef signed __int16 int16;
# else
typedef int int16;
# endif
#endif
#ifdef HAVE_UINT16_T
typedef uint16_t uint16;
#else
# ifdef HAVE_U_INT16_T
typedef u_int16_t uint16;
# else
# ifdef _WIN32
typedef unsigned __int16 uint16;
# else
typedef unsigned int uint16;
# endif
# endif
#endif
#ifdef HAVE_INT32_T
typedef int32_t int32;
#else
# ifdef _WIN32
typedef signed __int32 int32;
# else
typedef long int32;
# endif
#endif
#ifdef HAVE_UINT32_T
typedef uint32_t uint32;
#else
# ifdef HAVE_U_INT32_T
typedef u_int32_t uint32;
# else
# ifdef _WIN32
typedef unsigned __int32 uint32;
# else
typedef unsigned long uint32;
# endif
# endif
#endif
#ifdef _WIN32
# ifdef MSVCPP
# define snprintf _snprintf
# endif
# define popen _popen
# define pclose _pclose
# define ftruncate _chsize
# ifdef MSVCPP
# define PATH_MAX MAX_PATH
# endif
# define MAXPATHLEN MAX_PATH
# define bzero(buf, size) memset(buf, 0, size)
# ifdef MSVCPP
# define strcasecmp stricmp
# endif
# define sleep(x) Sleep(x * 1000)
#endif
#endif
+128
View File
@@ -0,0 +1,128 @@
#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
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
{
private:
/* Set to true to tell the thread to finish and we are waiting for it */
bool Exit;
public:
/* Handle for this thread */
ThreadHandle Handle;
/** Threads constructor
*/
Thread();
/** Threads destructor
*/
virtual ~Thread();
/** Join to the thread, sets the exit state to true
*/
void Join();
/** Sets the exit state as true informing the thread we want it to shut down
*/
void SetExitState();
/** 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
*/
virtual void Run();
};
class CoreExport Mutex
{
protected:
/* A mutex, used to keep threads in sync */
MutexHandle mutex;
public:
/** Constructor
*/
Mutex();
/** Destructor
*/
~Mutex();
/** Attempt to lock the mutex, will hang until a lock can be achieved
*/
void Lock();
/** Unlock the mutex, it must be locked first
*/
void Unlock();
};
class CoreExport Condition : public Mutex
{
private:
/* A condition */
CondHandle cond;
public:
/** Constructor
*/
Condition();
/** Destructor
*/
~Condition();
/** Called to wakeup the waiter
*/
void Wakeup();
/** Called to wait for a Wakeup() call
*/
void Wait();
};
#endif // THREADENGINE_H
+84 -93
View File
@@ -1,14 +1,11 @@
/* Timer include stuff.
*
* (C) 2003-2009 Anope Team
* (C) 2003-2010 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for furhter details.
* Based on the original code of Epona by Lara.
* Based on the original code of Services by Andy Church.
*
* $Id$
*
* Based on the original code of Services by Andy Church.
*/
#ifndef TIMERS_H
@@ -22,64 +19,64 @@
class CoreExport Timer : public Extensible
{
private:
/** The time this was created
*/
time_t settime;
/** The triggering time
*/
time_t trigger;
/** Numer of seconds between triggers
*/
long secs;
/** True if this is a repeating timer
*/
bool repeat;
public:
/** Default constructor, initializes the triggering time
* @param time_from_now The number of seconds from now to trigger the timer
* @param now The time now
* @param repeating Repeat this timer every time_from_now if this is true
*/
Timer(long time_from_now, time_t now = time(NULL), bool repeating = false);
/** Default destructor, does nothing
*/
virtual ~Timer();
/** Set the trigger time to a new value
* @param t The new time
*/
void SetTimer(time_t t);
/** Retrieve the triggering time
* @return The trigger time
*/
const time_t GetTimer();
/** Returns true if the timer is set to repeat
* @return Returns true if the timer is set to repeat
*/
const bool GetRepeat();
/** Returns the interval between ticks
* @return The interval
*/
const long GetSecs();
/** Returns the time this timer was created
* @return The time this timer was created
*/
const time_t GetSetTime();
/** Called when the timer ticks
* This should be overridden with something useful
*/
virtual void Tick(time_t ctime) = 0;
private:
/** The time this was created
*/
time_t settime;
/** The triggering time
*/
time_t trigger;
/** Numer of seconds between triggers
*/
long secs;
/** True if this is a repeating timer
*/
bool repeat;
public:
/** Default constructor, initializes the triggering time
* @param time_from_now The number of seconds from now to trigger the timer
* @param now The time now
* @param repeating Repeat this timer every time_from_now if this is true
*/
Timer(long time_from_now, time_t now = Anope::CurTime, bool repeating = false);
/** Default destructor, removes the timer from the list
*/
virtual ~Timer();
/** Set the trigger time to a new value
* @param t The new time
*/
void SetTimer(time_t t);
/** Retrieve the triggering time
* @return The trigger time
*/
time_t GetTimer() const;
/** Returns true if the timer is set to repeat
* @return Returns true if the timer is set to repeat
*/
bool GetRepeat() const;
/** Returns the interval between ticks
* @return The interval
*/
long GetSecs() const;
/** Returns the time this timer was created
* @return The time this timer was created
*/
time_t GetSetTime() const;
/** Called when the timer ticks
* This should be overridden with something useful
*/
virtual void Tick(time_t ctime) = 0;
};
/** This class manages sets of Timers, and triggers them at their defined times.
@@ -88,35 +85,29 @@ class CoreExport Timer : public Extensible
*/
class CoreExport TimerManager : public Extensible
{
protected:
/** A list of timers
*/
static std::vector<Timer *> Timers;
public:
/** Add a timer to the list
* @param T A Timer derived class to add
*/
static void AddTimer(Timer *T);
/** Deletes a timer
* @param T A Timer derived class to delete
*/
static void DelTimer(Timer *T);
/** Check if something is a timer
* @param T A pointer
* @return true or false
*/
static bool IsTimer(Timer *T);
/** Tick all pending timers
* @param ctime The current time
*/
static void TickTimers(time_t ctime = time(NULL));
/** Compares two timers
*/
static bool TimerComparison(Timer *one, Timer *two);
protected:
/** A list of timers
*/
static std::vector<Timer *> Timers;
public:
/** Add a timer to the list
* @param T A Timer derived class to add
*/
static void AddTimer(Timer *T);
/** Deletes a timer
* @param T A Timer derived class to delete
*/
static void DelTimer(Timer *T);
/** Tick all pending timers
* @param ctime The current time
*/
static void TickTimers(time_t ctime = Anope::CurTime);
/** Compares two timers
*/
static bool TimerComparison(Timer *one, Timer *two);
};
#endif
#endif // TIMERS_H
+176 -68
View File
@@ -1,165 +1,273 @@
/*
* Copyright (C) 2008-2009 Robin Burchell <w00t@inspircd.org>
* Copyright (C) 2008-2009 Anope Team <team@anope.org>
* Copyright (C) 2008-2010 Robin Burchell <w00t@inspircd.org>
* Copyright (C) 2008-2010 Anope Team <team@anope.org>
*
* Please read COPYING and README for further details.
*
*
* $Id$
*
*/
struct u_chanlist {
struct u_chanlist *next, *prev;
Channel *chan;
int16 status; /* Associated flags; see CSTATUS_* below. */
#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;
extern CoreExport user_map UserListByNick;
extern CoreExport user_uid_map UserListByUID;
class CoreExport ChannelStatus : public Flags<ChannelModeName, CMODE_END * 2>
{
public:
Anope::string BuildCharPrefixList() const;
Anope::string BuildModePrefixList() const;
};
struct u_chaninfolist {
struct u_chaninfolist *next, *prev;
ChannelInfo *chan;
struct ChannelContainer
{
Channel *chan;
ChannelStatus *Status;
ChannelContainer(Channel *c) : chan(c) { }
virtual ~ChannelContainer() { }
};
typedef std::list<ChannelContainer *> UChannelList;
/* Online user and channel data. */
class CoreExport User : public Extensible
{
private:
std::string vident;
std::string ident;
std::string uid;
bool OnAccess; /* If the user is on the access list of the nick theyre on */
protected:
Anope::string vident;
Anope::string ident;
Anope::string uid;
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 */
public: // XXX: exposing a tiny bit too much
User *next, *prev;
Anope::string nick; /* User's current nick */
char nick[NICKMAX];
Anope::string host; /* User's real hostname */
Anope::string vhost; /* User's virtual hostname */
Anope::string chost; /* User's cloaked hostname */
Anope::string realname; /* Realname */
sockaddrs 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? */
char *host; /* User's real hostname */
char *hostip; /* User's IP number */
char *vhost; /* User's virtual hostname */
std::string chost; /* User's cloaked hostname */
char *realname; /* Realname */
Server *server; /* Server user is connected to */
time_t timestamp; /* Timestamp of the nick */
time_t my_signon; /* When did _we_ see the user? */
uint32 mode; /* See below */
int isSuperAdmin; /* is SuperAdmin on or off? */
NickCore *nc;
int isSuperAdmin; /* is SuperAdmin on or off? */
struct u_chanlist *chans; /* Channels user has joined */
struct u_chaninfolist *founder_chans; /* Channels user has identified for */
/* Channels the user is in */
UChannelList chans;
unsigned short invalid_pw_count; /* # of invalid password attempts */
time_t invalid_pw_time; /* Time of last invalid password */
time_t invalid_pw_time; /* Time of last invalid password */
time_t lastmemosend; /* Last time MS SEND command used */
time_t lastnickreg; /* Last time NS REGISTER cmd used */
time_t lastmail; /* Last time this user sent a mail */
time_t lastnickreg; /* Last time NS REGISTER cmd used */
time_t lastmail; /* Last time this user sent a mail */
/****************************************************************/
/** Create a new user object, initialising necessary fields and
* adds it to the hash
*
* @param nick The nickname of the user.
* @param uid The unique identifier of the user.
* @param snick The nickname of the user.
* @param sident The username of the user
* @param shost The hostname of the user
* @param suid The unique identifier of the user.
*/
User(const std::string &nick, const std::string &uid);
User(const Anope::string &snick, const Anope::string &sident, const Anope::string &shost, const Anope::string &suid);
/** Destroy a user.
*/
~User();
virtual ~User();
/** Update the nickname of a user record accordingly, should be
* called from ircd protocol.
*/
void SetNewNick(const std::string &newnick);
virtual void SetNewNick(const Anope::string &newnick);
/** Update the displayed (vhost) of a user record.
* This is used (if set) instead of real host.
* @param host The new displayed host to give the user.
*/
void SetDisplayedHost(const std::string &host);
void SetDisplayedHost(const Anope::string &host);
/** Get the displayed vhost of a user record.
* @return The displayed vhost of the user, where ircd-supported, or the user's real host.
*/
const std::string GetDisplayedHost() const;
const Anope::string &GetDisplayedHost() const;
/** Update the cloaked host of a user
* @param host The cloaked host
*/
void SetCloakedHost(const std::string &newhost);
void SetCloakedHost(const Anope::string &newhost);
/** Get the cloaked host of a user
* @return The cloaked host
*/
const std::string &GetCloakedHost() const;
const Anope::string &GetCloakedHost() const;
/** Retrieves the UID of the user, where applicable, if set.
* This is not used on some IRCds, but is for a lot e.g. P10, TS6 protocols.
* @return The UID of the user.
*/
const std::string &GetUID() const;
const Anope::string &GetUID() const;
/** Update the displayed ident (username) of a user record.
* @param ident The new ident to give this user.
*/
void SetVIdent(const std::string &ident);
void SetVIdent(const Anope::string &ident);
/** Get the displayed ident (username) of this user.
* @return The displayed ident of this user.
*/
const std::string &GetVIdent() const;
const Anope::string &GetVIdent() const;
/** Update the real ident (username) of a user record.
* @param ident The new ident to give this user.
* NOTE: Where possible, you should use the Get/SetVIdent() equivilants.
*/
void SetIdent(const std::string &ident);
void SetIdent(const Anope::string &ident);
/** Get the real ident (username) of this user.
* @return The displayed ident of this user.
* NOTE: Where possible, you should use the Get/SetVIdent() equivilants.
*/
const std::string &GetIdent() const;
const Anope::string &GetIdent() const;
/** Get the full mask ( nick!ident@realhost ) of a user
*/
Anope::string GetMask() const;
/** Updates the realname of the user record.
*/
void SetRealname(const std::string &realname);
void SetRealname(const Anope::string &realname);
/**
* Send a message (notice or privmsg, depending on settings) to a user
* @param source Sender nick
* @param fmt Format of the Message
* @param ... any number of parameters
* @return void
*/
void SendMessage(const char *source, const char *fmt, ...);
void SendMessage(const char *source, const std::string &msg);
virtual void SendMessage(const Anope::string &source, const char *fmt, ...) const;
virtual void SendMessage(const Anope::string &source, const Anope::string &msg) const;
/** Check if the user should become identified because
* their svid matches the one stored in their nickcore
* @param svid Services id
/** Send a language string message to a user
* @param source Sender
* @param message The message num
* @param ... parameters
*/
void CheckAuthenticationToken(const char *svid);
void SendMessage(BotInfo *source, LanguageString message, ...) const;
/** Auto identify the user to the given accountname.
* @param account Display nick of account
/** Collide a nick
* See the comment in users.cpp
* @param na The nick
*/
void AutoID(const char *acc);
void Collide(NickAlias *na);
/** Check if the user is recognized for their nick (on the nicks access list)
/** Login the user to a NickCore
* @param core The account the user is useing
*/
void Login(NickCore *core);
/** Logout the user
*/
void Logout();
/** Get the account the user is logged in using
* @return The account or NULL
*/
virtual NickCore *Account();
virtual const 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
*/
const bool IsRecognized() const;
virtual 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;
/** Update the last usermask stored for a user, and check to see if they are recognized
*/
void UpdateHost();
/** Check if the user has a mode
* @param Name Mode name
* @return true or false
*/
bool HasMode(UserModeName Name) const;
/** Set a mode internally on the user, the IRCd is not informed
* @param um The user mode
* @param Param The param, if there is one
*/
void SetModeInternal(UserMode *um, const Anope::string &Param = "");
/** Remove a mode internally on the user, the IRCd is not informed
* @param um The user mode
*/
void RemoveModeInternal(UserMode *um);
/** Set a mode on the user
* @param bi The client setting the mode
* @param um The user mode
* @param Param Optional param for the mode
*/
void SetMode(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 = "");
/** Remove a mode on the user
* @param bi The client setting the mode
* @param um The user mode
*/
void RemoveMode(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);
/** 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, ...);
/** Set a string of modes on a user internally
* @param umodes The modes
*/
void SetModesInternal(const char *umodes, ...);
/** 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);
/** Check if the user is protected from kicks and negative mode changes
* @return true or false
*/
bool IsProtected() const;
};
#endif // USERS_H
+103
View File
@@ -0,0 +1,103 @@
/* Build bumper
*
* (C) 2003-2010 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for furhter details.
*
* Based on the original code of Epona by Lara.
* Based on the original code of Services by Andy Church.
*/
#include <cstdlib>
#include <iostream>
#include <fstream>
#include <sstream>
#include <list>
int main(int argc, char *argv[])
{
if (argc < 3)
{
std::cout << "Syntax: " << argv[0] << " <src/version.sh> <version.h>" << std::endl;
return 1;
}
std::fstream fd;
fd.clear();
fd.open(argv[1], std::ios::in);
if (!fd.is_open())
{
std::cout << "Error: Unable to open src/version.sh for reading: " << argv[1] << std::endl;
return 1;
}
std::string filebuf;
std::list<std::pair<std::string, std::string> > versions;
while (getline(fd, filebuf))
{
if (!filebuf.find("VERSION_"))
{
size_t eq = filebuf.find('=');
std::string type = filebuf.substr(8, 5);
std::string value = filebuf.substr(eq + 2, filebuf.length() - eq - 3);
versions.push_back(std::make_pair(type, value));
}
}
fd.close();
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"))
{
size_t tab = filebuf.find(' ');
int ibuild = atoi(filebuf.substr(tab + 1).c_str()) + 1;
std::stringstream ss;
ss << "#define BUILD " << ibuild;
build = ss.str();
}
}
fd.close();
}
fd.clear();
fd.open(argv[2], std::ios::out);
if (!fd.is_open())
{
std::cout << "Error: Unable to include/version.h for writing: " << argv[2] << std::endl;
return 1;
}
fd << "/* This file is automatically generated by version.cpp - do not edit it! */" << std::endl;
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;
else
fd << "#define VERSION_" << it->first << " " << it->second << std::endl;
}
fd << version_build << std::endl;
fd << build << std::endl;
fd.close();
return 0;
}
-79
View File
@@ -1,79 +0,0 @@
#!/bin/sh
#
# Build version string and increment Services build number.
#
if [ $# -lt 2 ] ; then
echo "Syntax: $0 <version.log> <version.h>"
exit 1
fi
# Grab version information from the version control file.
CTRL="$1"
if [ -f $CTRL ] ; then
. $CTRL
else
echo "Error: Unable to find control file: $CTRL"
exit 0
fi
VERSION="${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}${VERSION_EXTRA} (${VERSION_BUILD})"
VERSIONDOTTED="${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}${VERSION_EXTRA}.${VERSION_BUILD}"
VERSIONH="$2"
if [ -f $VERSIONH ] ; then
BUILD=`fgrep '#define BUILD' $VERSIONH | cut -f2 -d\"`
BUILD=`expr $BUILD + 1 2>/dev/null`
else
BUILD=1
fi
if [ ! "$BUILD" ] ; then
BUILD=1
fi
cat >$VERSIONH <<EOF
/* Version information for Services.
*
* (C) 2003-2008 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and CREDITS for further details.
*
* Based on the original code of Epona by Lara.
* Based on the original code of Services by Andy Church.
*
* This file is auto-generated by version.sh
*
*/
#ifndef VERSION_H
#define VERSION_H
#define VERSION_MAJOR $VERSION_MAJOR
#define VERSION_MINOR $VERSION_MINOR
#define VERSION_PATCH $VERSION_PATCH
#define VERSION_EXTRA "$VERSION_EXTRA"
#define VERSION_BUILD $VERSION_BUILD
#define BUILD "$BUILD"
#define VERSION_STRING "$VERSION"
#define VERSION_STRING_DOTTED "$VERSIONDOTTED"
#if defined(_WIN32)
# if _MSC_VER >= 1400
# define VER_OS "W"
# else
# define VER_OS "w"
# endif
#else
# define VER_OS
#endif
#if defined(USE_MODULES)
# define VER_MODULE "M"
#else
# define VER_MODULE
#endif
#endif
EOF
-238
View File
@@ -1,238 +0,0 @@
/* version file handler for win32.
*
* (C) 2003-2009 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for furhter details.
*
* Based on the original code of Epona by Lara.
* Based on the original code of Services by Andy Church.
*
* Written by Dominick Meglio <codemastr@unrealircd.com>
*
*/
/* Needed due to Windows lack of a decent interpreter */
#include <stdio.h>
#include <string.h>
#include <cstdlib>
#include <cctype>
long version_major, version_minor, version_patch, version_build, build;
char *version_extra = NULL;
char version[1024];
char version_dotted[1024];
void load_ctrl(FILE *);
long get_value(char *);
char *get_value_str(char *);
char *strip(char *);
void parse_version(FILE *);
void write_version(FILE *, const char *);
void parse_line(FILE *, char *);
int main(int argc, char *argv[])
{
if (argc < 4) {
fprintf(stderr, "Syntax: %s <version.log> <version.sh> <version.h>\n", argv[0]);
exit(1);
}
FILE *fd = fopen(argv[1], "r");
if (!fd) {
fprintf(stderr, "Error: Unable to find control file: %s\n", argv[1]);
exit(0);
}
load_ctrl(fd);
fclose(fd);
_snprintf(version, 1024, "%ld.%ld.%ld%s (%ld)", version_major, version_minor,
version_patch, (version_extra ? version_extra : ""), version_build);
_snprintf(version_dotted, 1024, "%ld.%ld.%ld%s.%ld", version_major, version_minor,
version_patch, (version_extra ? version_extra : ""), version_build);
fd = fopen(argv[3], "r");
if (fd) {
parse_version(fd);
fclose(fd);
} else
build = 1;
fd = fopen(argv[3], "w");
write_version(fd, argv[2]);
fclose(fd);
if (version_extra)
free(version_extra);
}
void load_ctrl(FILE * fd)
{
char buf[512];
while (fgets(buf, 511, fd)) {
char *var;
strip(buf);
var = strtok(buf, "=");
if (!var)
continue;
if (!strcmp(var, "VERSION_MAJOR"))
version_major = get_value(strtok(NULL, ""));
else if (!strcmp(var, "VERSION_MINOR"))
version_minor = get_value(strtok(NULL, ""));
else if (!strcmp(var, "VERSION_PATCH"))
version_patch = get_value(strtok(NULL, ""));
else if (!strcmp(var, "VERSION_BUILD"))
version_build = get_value(strtok(NULL, ""));
else if (!strcmp(var, "VERSION_EXTRA"))
version_extra = get_value_str(strtok(NULL, ""));
}
}
char *strip(char *str)
{
char *c;
if ((c = strchr(str, '\n')))
*c = 0;
if ((c = strchr(str, '\r')))
*c = 0;
return str;
}
long get_value(char *string)
{
// XXX : if the fields in version.log are empty strtok returns a double quote, dont try to atol it then
if (string[1] != '"')
return atol(get_value_str(string));
else
return 0;
}
char *get_value_str(char *string)
{
int len;
char *newstr;
if (*string == '"')
string++;
len = strlen(string);
if (string[len - 1] == '"')
string[len - 1] = 0;
if (!*string)
return NULL;
newstr = (char *)malloc(len + 1);
strcpy(newstr, string);
return newstr;
//return strdup(string);
}
void parse_version(FILE * fd)
{
char buf[1024];
while (fgets(buf, 1023, fd)) {
char *para1;
strip(buf);
para1 = strtok(buf, " \t");
if (!para1)
continue;
if (!strcmp(para1, "#define")) {
char *para2 = strtok(NULL, " \t");
if (!para2)
continue;
if (!strcmp(para2, "BUILD")) {
char *value = strtok(NULL, "");
build = get_value(value);
build++;
return;
}
}
}
build = 1;
}
void write_version(FILE * fd, const char *input)
{
FILE *fdin = fopen(input, "r");
char buf[1024];
short until_eof = 0;
while (fgets(buf, 1023, fdin)) {
strip(buf);
if (until_eof)
{
if (!strcmp(buf, "EOF"))
break;
else
parse_line(fd, buf);
}
if (!strcmp(buf, "cat >$VERSIONH <<EOF"))
until_eof = 1;
}
}
void parse_line(FILE * fd, char *line)
{
char *c;
for (c = line; *c; c++) {
/* It's a variable, find out which */
if (*c == '$') {
char *var, *varbegin;
if (*(c + 1))
c++;
else
continue;
for (var = varbegin = c; var; var++) {
if (!isalnum(*var) && *var != '_')
break;
}
if (var != varbegin) {
char tmp = *var;
*var = 0;
if (!strcmp(varbegin, "VERSION_MAJOR"))
fprintf(fd, "%ld", version_major);
else if (!strcmp(varbegin, "VERSION_MINOR"))
fprintf(fd, "%ld", version_minor);
else if (!strcmp(varbegin, "VERSION_PATCH"))
fprintf(fd, "%ld", version_patch);
else if (!strcmp(varbegin, "VERSION_EXTRA")) {
if (version_extra)
fprintf(fd, "%s", version_extra);
} else if (!strcmp(varbegin, "VERSION_BUILD"))
fprintf(fd, "%ld", version_build);
else if (!strcmp(varbegin, "BUILD"))
fprintf(fd, "%ld", build);
else if (!strcmp(varbegin, "VERSION"))
fprintf(fd, "%s", version);
else if (!strcmp(varbegin, "VERSIONDOTTED"))
fprintf(fd, "%s", version_dotted);
if (tmp) fputc(tmp, fd);
}
c = var;
} else
fputc(*c, fd);
}
/* We only need \n here - we didn't open the file as binary -GD */
fprintf(fd, "\n");
}
-29
View File
@@ -1,29 +0,0 @@
#!/bin/sh
SRC= ; DEST= ; MODE= ; USER= ; GROUP= ; export SRC DEST MODE USER GROUP
while [ $# -gt 0 ] ; do
case $1 in
-m) MODE=$2; shift; shift;;
-u) USER=$2; shift; shift;;
-g) GROUP=$2; shift; shift;;
-c) shift;;
*) SRC="$DEST"; DEST="$1"; shift;;
esac
done
if [ ! "$DEST" ] ; then
echo >&2 "Usage: $0 [-c] [-m mode] [-u user] [-g group] source dest"
exit 1
fi
if [ -d "$DEST" ] ; then
DEST="$DEST/$SRC"
fi
/bin/cp -p "$SRC" "$DEST"
if [ "$MODE" ] ; then
/bin/chmod $MODE "$DEST"
fi
if [ "$USER" ] ; then
/bin/chown "$USER" "$DEST"
fi
if [ "$GROUP" ] ; then
/bin/chgrp "$GROUP" "$DEST"
fi
View File
-310
View File
@@ -1,310 +0,0 @@
//
// install.js - Windows Configuration
//
// (C) 2003-2008 Anope Team
// Contact us at team@anope.org
//
// This program is free but copyrighted software; see the file COPYING for
// details.
//
// Based on the original code of Epona by Lara.
// Based on the original code of Services by Andy Church.
//
// $Id$
//
var anopeVersion = "Unknown";
var vMaj, vMin, vPat, vBuild, vExtra;
var installerResponses = new Array();
var installerQuestions = [
{
'question' : [
'In what directory do you want Anope to be installed?'
],
'short' : 'Install directory:',
'default_answer' : '',
'store_answer' : function(answer) {
if (!answer)
{
WScript.Echo("You must give a directory!\n");
return false;
}
if (!fso.FolderExists(answer))
{
if (fso.FileExists(answer))
{
WScript.Echo(answer + " exists, but is not a directory!\n");
return false;
}
WScript.Echo(answer + " does not exist. Create it ([yes]/no)?\n");
var inputValue = InstallerInput().toLowerCase();
if (!inputValue)
inputValue = 'yes';
if (inputValue != 'no')
fso.CreateFolder(answer);
}
else if (fso.FileExists(answer + '\\include\\services.h'))
{
WScript.Echo("You cannot use the Anope source directory as a target directory.\n");
return false;
}
installerResponses['Install Directory'] = answer.replace(/\\/g, '/');
return true;
},
'cmake_argument' : function() {
return '-DINSTDIR:STRING="' + installerResponses['Install Directory'] + '"';
}
},
{
'question' : [
'Would you like to build using NMake instead of using Visual Studio?',
'NOTE: If you decide to use NMake, you must be in an environment where',
' NMake can function, such as the Visual Studio command line.',
' If you say yes to this while not in an environment that can run',
' NMake, it can cause the CMake configuration to enter an endless',
' loop.'
],
'short' : 'Use NMake?',
'options' : [
'yes',
'no'
],
'default_answer' : 'no',
'store_answer' : function(answer) {
installerResponses['Use NMake'] = answer;
return true;
},
'cmake_argument' : function() {
if (installerResponses['Use NMake'] == 'yes')
return '-G"NMake Makefiles"';
else
return '';
}
},
{
'question' : [
'Would you like to build a debug version of Anope?'
],
'short' : 'Build debug?',
'options' : [
'yes',
'no'
],
'default_answer' : 'no',
'store_answer' : function(answer) {
installerResponses['Debug'] = answer;
return true;
},
'cmake_argument' : function() {
if (installerResponses['Debug'] == 'msvc')
return '';
else if (installerResponses['Debug'] == 'yes')
return '-DCMAKE_BUILD_TYPE:STRING=DEBUG';
else
return '-DCMAKE_BUILD_TYPE:STRING=RELEASE';
}
},
{
'question' : [
'Are you using Visual Studio 2008? If you are, you need to answer yes',
'to this question, otherwise CMake will not function properly.'
],
'short' : 'Using Visual Studio 2008?',
'options' : [
'yes',
'no'
],
'default_answer' : 'no',
'store_answer' : function(answer) {
installerResponses['Visual Studio 2008'] = answer;
return true;
},
'cmake_argument' : function() {
if (installerResponses['Visual Studio 2008'] == 'yes')
return '-G"Visual Studio 9 2008"';
else
return '';
}
},
];
var bannerReplacements = [
{
'findtext' : /CURVER/g,
'replacement' : function() { FindAnopeVersion(); return anopeVersion; }
},
{
'findtext' : / For more options type SOURCE_DIR\/Config --help/g,
'replacement' : function() { return ''; }
}
];
var ScriptPath = WScript.ScriptFullName.substr(0, WScript.ScriptFullName.length - WScript.ScriptName.length);
var fso = WScript.CreateObject('Scripting.FileSystemObject');
var x, y, z;
if (fso.FileExists(ScriptPath + '.BANNER'))
{
var bannerStream = fso.OpenTextFile(ScriptPath + '.BANNER');
var bannerText = bannerStream.ReadAll();
bannerStream.close();
for (x in bannerReplacements)
{
var thisReplacement = bannerReplacements[x];
bannerText = bannerText.replace(thisReplacement['findtext'], thisReplacement['replacement']);
}
WScript.Echo(bannerText + "\n");
}
else
WScript.Echo("ERROR: Cannot find banner file!\n");
WScript.Echo('Press Enter to Begin...');
InstallerInput();
WScript.Echo('');
for (x in installerQuestions)
{
var thisQuestion = installerQuestions[x];
var validResponse = false;
var validOpts = new Array();
if (thisQuestion.short == 'Build debug?' && installerResponses['Use NMake'] == 'no')
{
installerResponses['Debug'] = 'msvc';
continue;
}
if (thisQuestion.short == 'Using Visual Studio 2008?' && installerResponses['Debug'] != 'msvc')
{
installerResponses['Visual Studio 2008'] = 'no';
continue;
}
while (!validResponse)
{
for (y in thisQuestion.question)
{
var qLine = thisQuestion.question[y];
WScript.Echo(qLine);
}
WScript.Echo('');
var choiceLine = '';
if (thisQuestion.options)
{
for (y in thisQuestion.options)
{
choiceLine += thisQuestion.options[y] + ', ';
validOpts[thisQuestion.options[y]] = true;
}
choiceLine = choiceLine.substring(0, choiceLine.length - 2);
WScript.Echo('Available Options: ' + choiceLine);
}
if (thisQuestion.default_answer)
WScript.Echo('Default Answer: ' + thisQuestion.default_answer + "\n");
WScript.Echo(thisQuestion.short);
var inputValue = InstallerInput().toLowerCase();
if (!inputValue)
inputValue = thisQuestion.default_answer;
if (choiceLine && !validOpts[inputValue])
WScript.Echo("ERROR: Invalid option '" + inputValue + "'\n");
else if (thisQuestion.store_answer(inputValue))
validResponse = true;
}
WScript.Echo('');
}
WScript.Echo("\nAnope will be compiled with the following options:\n");
for (x in installerResponses)
{
var thisResponse = installerResponses[x];
WScript.Echo("\t" + x + ":\t\t[" + thisResponse.toUpperCase() + "]");
}
WScript.Echo("\tAnope Version:\t\t\t" + anopeVersion);
WScript.Echo("\nTo continue, please press Enter...");
InstallerInput();
var cmake = 'cmake';
for (x in installerQuestions)
{
var thisQuestion = installerQuestions[x];
cmake += ' ' + thisQuestion.cmake_argument();
}
var fixedScriptPath = ScriptPath.replace(/\\/g, '/');
cmake += ' "' + fixedScriptPath + '"';
WScript.Echo(cmake + "\n");
var shell = WScript.CreateObject('WScript.Shell');
var cmake_shell = shell.exec('%comspec% /c ' + cmake);
while (!cmake_shell.Status)
{
if (!cmake_shell.StdOut.AtEndOfStream)
WScript.Echo(cmake_shell.StdOut.ReadLine());
else if (!cmake_shell.StdErr.AtEndOfStream)
WScript.Echo(cmake_shell.StdErr.ReadLine());
}
if (cmake_shell.ExitCode == 0)
{
if (installerResponses['Use NMake'] == 'yes') WScript.Echo("\nTo compile Anope, run 'nmake'. To install, run 'nmake install'.\n");
else WScript.Echo("\nTo compile Anope, open Anope.sln and build the solution. To install,\ndo a build on the INSTALL project.\n");
WScript.Echo("If you update Anope, you should run this script again to ensure\nall available options are set.\n");
}
else
WScript.Echo("\nThere was an error attempting to run CMake! Check the above error message,\nand contact the Anope team if you are unsure how to proceed.\n");
// -----------------------------------------------------------------
// Functions
function FindAnopeVersion() {
if (!fso.FileExists(ScriptPath + 'version.log'))
{
anopeVersion = 'Unknown';
return;
}
var versionLog = fso.OpenTextFile(ScriptPath + 'version.log');
while (!versionLog.atEndOfStream)
{
var versionLine = versionLog.readline();
var thisMatch = versionLine.replace('\n', '');
while (thisMatch.match(/\"/g))
thisMatch = thisMatch.replace('"', '');
versionLine = thisMatch;
if (versionLine.match(/VERSION_MAJOR=/g))
{
vMaj = versionLine.replace('VERSION_MAJOR=', '');
continue;
}
if (versionLine.match(/VERSION_MINOR=/g))
{
vMin = versionLine.replace('VERSION_MINOR=', '');
continue;
}
if (versionLine.match(/VERSION_PATCH=/g))
{
vPat = versionLine.replace('VERSION_PATCH=', '');
continue;
}
if (versionLine.match(/VERSION_EXTRA=/g))
{
vExtra = versionLine.replace('VERSION_EXTRA=', '');
continue;
}
if (versionLine.match(/VERSION_BUILD=/g))
{
vBuild = versionLine.replace('VERSION_BUILD=', '');
continue;
}
}
versionLog.close();
anopeVersion = vMaj + '.' + vMin + '.' + vPat + '.' + vBuild + vExtra;
return;
}
function InstallerInput() {
var input = WScript.StdIn.Readline();
return input;
}
+34 -108
View File
@@ -1,113 +1,39 @@
# Set the source file for langcomp to use C++ as well as set it's compile flags
set_source_files_properties(langcomp.c PROPERTIES LANGUAGE CXX COMPILE_FLAGS "${CXXFLAGS}")
# Generate langcomp and set it's linker flags
add_executable(langcomp langcomp.c)
set_target_properties(langcomp PROPERTIES LINKER_LANGUAGE CXX LINK_FLAGS "${LDFLAGS}")
# Get the location of the binary to use later
get_target_property(langcomp_BINARY langcomp LOCATION)
# Add the executable to the list of files for CPack to ignore
file(RELATIVE_PATH langcomp_BINARY_RELATIVE ${Anope_BINARY_DIR} ${langcomp_BINARY})
add_to_cpack_ignored_files("${langcomp_BINARY_RELATIVE}$" TRUE)
# Only do this if gettext is installed
if(GETTEXT_FOUND)
# Get all of the .po files
file(GLOB LANG_SRCS_PO RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "*.*.po")
sort_list(LANG_SRCS_PO)
# Determine if langtool should be built
if(MSVC)
set(BUILD_LANGTOOL TRUE)
else(MSVC)
if(NOT GREP OR NOT PERL)
set(BUILD_LANGTOOL TRUE)
else(NOT GREP OR NOT PERL)
set(BUILD_LANGTOOL FALSE)
endif(NOT GREP OR NOT PERL)
endif(MSVC)
foreach(LANG_PO ${LANG_SRCS_PO})
# Get the domain for this language file
string(LENGTH ${LANG_PO} LANG_PO_LENGTH)
math(EXPR DOMAIN_LENGTH "${LANG_PO_LENGTH} - 9")
string(SUBSTRING ${LANG_PO} 0 ${DOMAIN_LENGTH} LANG_DOMAIN)
# If grep or perl don't exist on the system, build langtool to generate index and language.h
if(BUILD_LANGTOOL)
# Set the source file for langtool to use C++ as well as set it's compile flags
set_source_files_properties(langtool.c PROPERTIES LANGUAGE CXX COMPILE_FLAGS "${CXXFLAGS}")
# Generate langtool and set it's linker flags
add_executable(langtool langtool.c)
set_target_properties(langtool PROPERTIES LINKER_LANGUAGE CXX LINK_FLAGS "${LDFLAGS}")
# Get the location of the binary to use later)
get_target_property(langtool_BINARY langtool LOCATION)
# Add the executable to the list of files for CPack to ignore
file(RELATIVE_PATH langtool_BINARY_RELATIVE ${Anope_BINARY_DIR} ${langtool_BINARY})
add_to_cpack_ignored_files("${langtool_BINARY_RELATIVE}$" TRUE)
endif(BUILD_LANGTOOL)
# Get the language for this language file
math(EXPR DOMAIN_LENGTH "${LANG_PO_LENGTH} - 8")
string(SUBSTRING ${LANG_PO} ${DOMAIN_LENGTH} 5 LANG_LANG)
# If grep exists (and we aren't using Visual Studio, it hates this), use it to generate the index file
if(NOT MSVC AND GREP)
add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/index
COMMAND ${GREP} '^[A-Z]' ${CMAKE_CURRENT_SOURCE_DIR}/en_us.l > ${CMAKE_CURRENT_BINARY_DIR}/index
MAIN_DEPENDENCY ${CMAKE_CURRENT_SOURCE_DIR}/en_us.l
)
# Otherwise, use langtool to generate the index file
else(NOT MSVC AND GREP)
add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/index
COMMAND ${langtool_BINARY} index ${CMAKE_CURRENT_SOURCE_DIR}/en_us.l ${CMAKE_CURRENT_BINARY_DIR}/index
MAIN_DEPENDENCY ${CMAKE_CURRENT_SOURCE_DIR}/en_us.l DEPENDS langtool
)
endif(NOT MSVC AND GREP)
# Add the index file to the list of files for CPack to ignore
file(RELATIVE_PATH index_RELATIVE ${Anope_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR}/index)
add_to_cpack_ignored_files("${index_RELATIVE}$")
# Get the .mo file name
string(REGEX REPLACE "\\.po$" ".mo" LANG_MO ${LANG_PO})
# Add the .mo file to a list for use later with add_custom_target
set(LANG_SRCS_MO ${LANG_SRCS_MO} ${CMAKE_CURRENT_BINARY_DIR}/${LANG_MO})
# Run msgfmt on the language file, depends on the .po file
add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${LANG_MO}
COMMAND ${GETTEXT_MSGFMT_EXECUTABLE} -c ${CMAKE_CURRENT_SOURCE_DIR}/${LANG_PO} -o ${CMAKE_CURRENT_BINARY_DIR}/${LANG_MO}
MAIN_DEPENDENCY ${LANG_PO}
)
# Add to cpack ignored files if not on Windows.
file(RELATIVE_PATH LANG_RELATIVE ${Anope_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR}/${LANG_LANG})
if(NOT WIN32)
add_to_cpack_ignored_files("${LANG_MO}")
endif(NOT WIN32)
# Find all the *.l files within the current source directory, and sort the list
file(GLOB LANG_SRCS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "*.l")
sort_list(LANG_SRCS)
# Install the new language file
install(CODE "FILE(MAKE_DIRECTORY \${CMAKE_INSTALL_PREFIX}/data/languages/${LANG_LANG}/LC_MESSAGES/)")
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${LANG_MO} DESTINATION data/languages/${LANG_LANG}/LC_MESSAGES RENAME ${LANG_DOMAIN}.mo PERMISSIONS ${PERMS})
endforeach(LANG_PO)
# Iterate through the language files
foreach(LANG_L ${LANG_SRCS})
# Convert the language file's extension to have no extension
STRING(REGEX REPLACE "\\.l$" "" LANG ${LANG_L})
# Add the language file to the list of compiled language files
append_to_list(LANGS ${CMAKE_CURRENT_BINARY_DIR}/${LANG})
# Generate a compiled language file using langcomp, as well as having a dependency on the index file being generated
add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${LANG}
COMMAND ${langcomp_BINARY} ${CMAKE_CURRENT_SOURCE_DIR}/${LANG_L} ${CMAKE_CURRENT_BINARY_DIR}/${LANG}
MAIN_DEPENDENCY ${CMAKE_CURRENT_SOURCE_DIR}/${LANG_L} DEPENDS langcomp ${CMAKE_CURRENT_BINARY_DIR}/index
)
# Add the language file to the list of files for CPack to ignore
file(RELATIVE_PATH LANG_RELATIVE ${Anope_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR}/${LANG})
add_to_cpack_ignored_files("${LANG_RELATIVE}$")
endforeach(LANG_L)
# If perl exists (and we aren't using Visual Studio, it hates this), use it to generate language.h
if(NOT MSVC AND PERL)
add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/language.h
COMMAND ${PERL} -e < ${CMAKE_CURRENT_BINARY_DIR}/index > ${CMAKE_CURRENT_BINARY_DIR}/language.h 'print STDERR \"Generating language.h... \"\; $$i=0\; while \(<>\) { chop\; printf \"\#define %-32s %d\\n\", $$_, $$i++\; } print \"\\n\#define NUM_STRINGS $$i\\n\"\; print STDERR \"$$i strings\\n\"\;'
MAIN_DEPENDENCY ${CMAKE_CURRENT_BINARY_DIR}/index
)
# Otherwise, use langtool to generate language.h
else(NOT MSVC AND PERL)
add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/language.h
COMMAND ${langtool_BINARY} language.h ${CMAKE_CURRENT_BINARY_DIR}/index ${CMAKE_CURRENT_BINARY_DIR}/language.h
MAIN_DEPENDENCY ${CMAKE_CURRENT_BINARY_DIR}/index DEPENDS langtool
)
endif(NOT MSVC AND PERL)
# Add language.h to the list of files for CPack to ignore
add_to_cpack_ignored_files("language.h$" TRUE)
# Add a custom target to depend on the language files and language.h
add_custom_target(language DEPENDS ${LANGS} ${CMAKE_CURRENT_BINARY_DIR}/language.h)
# If RUNGROUP was set, make the permissions be to have owner read/write as well as group read/write
if(RUNGROUP)
set(PERMS OWNER_READ OWNER_WRITE GROUP_READ GROUP_WRITE)
# Otherwise, only make the permissions be owner read/write
else(RUNGROUP)
set(PERMS OWNER_READ OWNER_WRITE)
endif(RUNGROUP)
# Set the language files to be installed to the languages directory under the data directory
install(FILES ${LANGS}
DESTINATION data/languages
PERMISSIONS ${PERMS}
)
# On non-Windows platforms, if RUNGROUP is set, change the permissions of the languages directory
if(NOT WIN32)
if(RUNGROUP)
install(CODE "execute_process(COMMAND ${CHMOD} 2770 \"\${CMAKE_INSTALL_PREFIX}/data/languages\")")
else(RUNGROUP)
install(CODE "execute_process(COMMAND ${CHMOD} 0700 \"\${CMAKE_INSTALL_PREFIX}/data/languages\")")
endif(RUNGROUP)
endif(NOT WIN32)
# Generate languages, depends on the mo files
add_custom_target(language DEPENDS ${LANG_SRCS_MO})
endif(GETTEXT_FOUND)
-82
View File
@@ -1,82 +0,0 @@
# Makefile for language module
MAKEARGS = 'CFLAGS=${CFLAGS}' 'CC=${CC}' 'ANOPELIBS=${ANOPELIBS}' \
'LDFLAGS=${LDFLAGS}' 'INSTDIR=${INSTDIR}' 'INSTALL=${INSTALL}' \
'INCLUDEDIR=${INCLUDEDIR}' 'RM=${RM}' 'CP=${CP}' \
'TOUCH=${TOUCH}' 'SHELL=${SHELL}' \
'RUNGROUP=${RUNGROUP}' 'MAKEBIN=${MAKEBIN}'
LANGOBJS = cat de en_us es fr gr hun it nl pl pt ru tr
LANGSRCS = cat.l de.l en_us.l es.l fr.l gr.l hun.l it.l nl.l pl.l pt.l ru.l tr.l
LANGCOMP = ./langcomp
#LANGCOMP = ./langcomp -w
all: $(LANGOBJS)
distclean: clean spotless
install: all
test -d $(INSTDIR)/data/languages || mkdir $(INSTDIR)/data/languages
@if [ "$(RUNGROUP)" ] ; then \
echo chgrp -R $(RUNGROUP) $(INSTDIR)/data/languages ; \
chgrp -R $(RUNGROUP) $(INSTDIR)/data/languages ; \
echo chmod -R g+rw $(INSTDIR)/data/languages ; \
chmod -R g+rw $(INSTDIR)/data/languages ; \
$(CP) $(LANGOBJS) $(INSTDIR)/data/languages ; \
echo chgrp -R $(RUNGROUP) $(INSTDIR)/data/languages ; \
chgrp -R $(RUNGROUP) $(INSTDIR)/data/languages/* ; \
echo chmod -R g+rw $(INSTDIR)/data/languages/* ; \
chmod -R g+rw $(INSTDIR)/data/languages/* ; \
fi
@if [ ! "$(RUNGROUP)" ] ; then \
chmod 700 $(INSTDIR)/data/languages/ ; \
$(CP) $(LANGOBJS) $(INSTDIR)/data/languages ; \
chmod 600 $(INSTDIR)/data/languages/* ; \
fi
clean:
rm -f $(LANGOBJS) langcomp language.h
spotless: clean
rm -f index
cat: cat.l langcomp index
@./langcomp $@.l $@
de: de.l langcomp index
@./langcomp $@.l $@
en_us: en_us.l langcomp index
@./langcomp $@.l $@
es: es.l langcomp index
@./langcomp $@.l $@
fr: fr.l langcomp index
@./langcomp $@.l $@
gr: gr.l langcomp index
@./langcomp $@.l $@
hun: hun.l langcomp index
@./langcomp $@.l $@
it: it.l langcomp index
@./langcomp $@.l $@
nl: nl.l langcomp index
@./langcomp $@.l $@
pl: pl.l langcomp index
@./langcomp $@.l $@
pt: pt.l langcomp index
@./langcomp $@.l $@
ru: ru.l langcomp index
@./langcomp $@.l $@
tr: tr.l langcomp index
@./langcomp $@.l $@
langcomp: langcomp.c
$(MAKEBIN) $(CC) $(CFLAGS) langcomp.c -o $@
language.h: index Makefile
@perl -e <index >$@ 'print STDERR "Generating language.h... "; $$i=0; while (<>) { chop; printf "#define %-32s %d\n", $$_, $$i++; } print "\n#define NUM_STRINGS $$i\n"; print STDERR "$$i strings\n";'
@cp language.h ../include
index: en_us.l
@grep '^[A-Z]' en_us.l >index
+11871
View File
File diff suppressed because it is too large Load Diff
+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
+11873
View File
File diff suppressed because it is too large Load Diff
+11881
View File
File diff suppressed because it is too large Load Diff
+11715
View File
File diff suppressed because it is too large Load Diff
+11804
View File
File diff suppressed because it is too large Load Diff
+11755
View File
File diff suppressed because it is too large Load Diff
+11691
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
+11702
View File
File diff suppressed because it is too large Load Diff

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