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

Compare commits

...

3397 Commits

Author SHA1 Message Date
Sadie Powell 258daf6c26 Release 2.1.3. 2024-03-04 10:42:12 +00:00
Sadie Powell 57e8b4305e Update the changelogs. 2024-03-04 10:41:31 +00:00
Sadie Powell db4f845fe7 Add NickAlias::GetVhostMask for getting the vident@vhost. 2024-03-04 10:36:10 +00:00
Sadie Powell d15ac93a8f Clean up some more CMake flags. 2024-02-29 23:50:10 +00:00
Sadie Powell 4e0f94bcce Fix some oversights from previous commits. 2024-02-29 23:18:46 +00:00
Sadie Powell 1c1645096f If a user runs an invalid command try to suggest a valid one. 2024-02-29 21:56:14 +00:00
Sadie Powell e0ac5509b4 Consolidate some header files. 2024-02-29 19:32:44 +00:00
Sadie Powell 190c37a68b Rework some platform compatibility code. 2024-02-29 19:11:37 +00:00
Sadie Powell a67bef2dee Update the changelogs. 2024-02-29 17:15:15 +00:00
Sadie Powell 893bbf9251 Fix some oversights. 2024-02-29 17:15:15 +00:00
Sadie Powell 5441093211 Merge branch '2.0' into 2.1. 2024-02-29 16:32:14 +00:00
Sadie Powell ee7455daa8 Fix a copy/paste error in webcpanel. 2024-02-29 16:27:24 +00:00
Sadie Powell 579af3c442 Rip out ns_access and related code.
This is wildly insecure and has been disabled by default for at
least a decade.
2024-02-29 16:14:15 +00:00
Sadie Powell 25bdcfcbc4 Add names for the numerics used by the core. 2024-02-29 13:07:14 +00:00
Sadie Powell 26919f41d2 If a PRIVMSG or NOTICE is empty then send a single space instead.
Currently a bunch of code does source.Reply(" ") to ensure that an
empty line gets rendered but this is a much better way to handle
this problem.

The code that does this already will be updated in a future commit
to avoid breaking translations in progress.
2024-02-29 12:31:19 +00:00
Sadie Powell 5f735b2570 Fix matching extbans on InspIRCd and implement missing matchers. 2024-02-27 20:33:43 +00:00
Sadie Powell 9c80f9e34e Replace OnChannelUnban with an IRCDProto function.
This was added for (and is only used for) for unbanning users on
UnrealIRCd which is an IRCd protocol function so it should be in
IRCDProto.
2024-02-27 13:40:47 +00:00
Sadie Powell b5b3c74477 Make functions that don't use this static. 2024-02-27 10:48:55 +00:00
Sadie Powell 73d4ac6de0 Remove redundant uses of const. 2024-02-27 10:34:27 +00:00
Sadie Powell 7640fad30c Simplify several boolean expressions. 2024-02-27 10:19:44 +00:00
Sadie Powell 9f6d378755 Fix write_pidfile on Windows.
Microsoft's documentation lies again.
2024-02-27 10:19:36 +00:00
Sadie Powell 642e68f53a Fix sending numerics on InspIRCd. 2024-02-26 23:57:55 +00:00
Sadie Powell eb658f87a3 Use fstream for accessing files where possible. 2024-02-26 23:57:55 +00:00
Sadie Powell 1e87849e5c Rework IRCDMessage/IRCDMessageFlag. 2024-02-26 23:56:07 +00:00
Sadie Powell 5fa4acb195 Refactor User::IsServicesOper. 2024-02-26 22:00:21 +00:00
Sadie Powell 79f215606d Allow using more than one fingerprint in an oper block.
Closes #362.
2024-02-26 21:55:59 +00:00
Sadie Powell 2fd4b45f81 Deduplicate InspIRCd CAPAB parsing. 2024-02-26 19:26:21 +00:00
Sadie Powell d3b4a4bd05 Update translator names. 2024-02-26 18:56:11 +00:00
Sadie Powell d914febbec Fix a typo in UnrealIRCd's SendGlobops. 2024-02-26 17:23:15 +00:00
Sadie Powell 2962a0be8c Fix bs_kick not using the correct kick message for automatic kicks.
Closes #354.
2024-02-26 16:45:28 +00:00
Sadie Powell 6be4df3b39 Remove several string format IRCDProto function overloads. 2024-02-26 16:45:28 +00:00
Sadie Powell 4789751e50 Fix a missing override keyword. 2024-02-26 16:45:28 +00:00
Sadie Powell 57674f5869 Replace IRCDProto::CanSendTags with IsTagValid.
Not every IRC server accepts arbitrary tags so this is a better
way to handle tag filtering.
2024-02-26 15:50:35 +00:00
Sadie Powell c6cb4ba159 Fix some coding style issues. 2024-02-26 15:34:17 +00:00
Sadie Powell e341cac8d6 Implement support for the IRCv3 +draft/channel-context tag.
Closes #358.
2024-02-26 15:34:17 +00:00
Sadie Powell 83dd96b9f2 Extract should privmsg logic to its own function. 2024-02-26 14:41:50 +00:00
Sadie Powell cabaa079df Kill checks for obsolete versions of Windows.
Because of the required system functionality Anope will not build
or run on these systems anyway.
2024-02-25 23:56:46 +00:00
Sadie Powell 273e7f249c Remove duplicate suffix from socketengine file names. 2024-02-25 23:54:12 +00:00
Sadie Powell 8c9ca23900 Remove a function which exists for compat with old versions of VS. 2024-02-25 23:49:07 +00:00
Sadie Powell 8e3da86283 Remove a reference to 1.8. 2024-02-25 23:42:14 +00:00
Sadie Powell 97b65b2255 Use unique_ptr for managing std::thread ownership. 2024-02-25 21:54:40 +00:00
Sadie Powell b26f198489 Fix formatting messages on ngircd. 2024-02-22 19:54:09 +00:00
Sadie Powell a99a00d7c5 Fix sending the ngircd PASS handler. 2024-02-22 19:07:11 +00:00
Sadie Powell 283137841f Refactor the InspIRCd module static variables and method. 2024-02-22 17:47:14 +00:00
Sadie Powell 3290ebd36a GetMaxListFor: use size_t and add a default like the other fields. 2024-02-22 17:25:47 +00:00
Sadie Powell c4e9c0bf85 If the IRCd sends a field limit then use it over that of the config. 2024-02-22 17:05:30 +00:00
Sadie Powell 84ad85ee85 Fix a bug in the unrealircd protocol module. 2024-02-22 15:58:23 +00:00
Sadie Powell 9789c3bd8c Deduplicate User::SendMessage. 2024-02-22 14:14:23 +00:00
Sadie Powell a75afb597b Add the IRCv3 reply tag to messages sent as responses to a user. 2024-02-22 13:23:18 +00:00
Sadie Powell f93d9e7698 Store the source message identifier in CommandSource. 2024-02-22 13:19:36 +00:00
Sadie Powell 7423fa9998 Route message tags into more message functions. 2024-02-22 13:03:53 +00:00
Sadie Powell 7cba665270 Fix some oversights in commit 82fa7e1467. 2024-02-22 11:18:05 +00:00
Sadie Powell 9502567453 Fix the NickServ help message showing a wrong min password length.
Closes #357.
2024-02-22 11:01:41 +00:00
Sadie Powell 14472c5a95 Increase minpasslen and maxpasslen slightly. 2024-02-22 10:46:30 +00:00
Sadie Powell d4f4bcf23c Remove UplinkSocket::Message now nothing uses it. 2024-02-22 00:14:08 +00:00
Sadie Powell 82fa7e1467 Convert protocol modules over to Uplink::Send. 2024-02-22 00:14:08 +00:00
Sadie Powell aefbb4fbda Rework SendModeInternal to be usable with Uplink::Send. 2024-02-22 00:14:08 +00:00
Sadie Powell 9b77fdf5b6 Rework SendNumericInternal to be usable with Uplink::Send. 2024-02-22 00:14:08 +00:00
Sadie Powell 7a6979c814 Convert most core protocol handlers to use Uplink::Send. 2024-02-22 00:14:08 +00:00
Sadie Powell c4ab550ec7 Add Uplink::Send, rework message formatting.
This is the new way of sending messages to the uplink inspired by
the work done in the old git master. This will allow us to do new
things involving tags in the future.
2024-02-22 00:14:08 +00:00
Sadie Powell 3ecf6b495b Document IRCDProto::Parse. 2024-02-22 00:14:08 +00:00
Sadie Powell 8475697e3b Inline, constify, and document GetProtocolName. 2024-02-22 00:14:08 +00:00
Sadie Powell 85687781d1 Include tags in OnMessage. 2024-02-22 00:14:08 +00:00
TehPeGaSuS ccfaca32a2 Fix a typo in cs_drop. 2024-02-21 23:09:09 +00:00
Sadie Powell 07373c8cf2 Move IRCDProto member initializers to the header. 2024-02-21 13:55:48 +00:00
Sadie Powell 89594d4557 Add a method to the ns_cert API for replacing a certificate.
This will be used for upgrading certificate fingerprints when the
InspIRCd 1206 protocol support is added.
2024-02-21 13:30:16 +00:00
Sadie Powell b478a1cb53 Make ModuleManager::SetPriority more readable. 2024-02-20 18:38:52 +00:00
Sadie Powell 1fb77e414d Increase the size of the random codes in ns_register and ns_set. 2024-02-19 22:31:07 +00:00
Sadie Powell 22fe5bb724 Require users to use a confirmation code when dropping channels. 2024-02-19 22:20:36 +00:00
Robert Scheck 909b9b2679 Remove a leftover use of the m_ module prefix. 2024-02-17 21:34:03 +00:00
Sadie Powell 49ea709027 Merge branch '2.0' into 2.1. 2024-02-17 20:50:31 +00:00
Sadie Powell 4ea2bc5e46 Mark as 2.0.16-git. 2024-02-17 20:08:10 +00:00
Sadie Powell eabc8b641e Release 2.0.15. 2024-02-17 20:07:09 +00:00
Sadie Powell 2f1ed186d1 Update the change log. 2024-02-17 20:06:08 +00:00
Sadie Powell 4cc68397dc Update the copyright headers for 2024. 2024-02-17 19:58:17 +00:00
Sadie Powell 2b7872139c Prevent resetting the password of suspended accounts.
Closes #351.
2024-02-17 19:52:39 +00:00
TehPeGaSuS e47ad6ed3f Fix some typos in the config change log. 2024-02-17 18:59:17 +00:00
Sadie Powell f3b14694c6 Bump for 2.1.3-git. 2024-02-17 18:15:38 +00:00
Sadie Powell e9424b529c Release 2.1.2. 2024-02-17 18:14:10 +00:00
Sadie Powell a60c796cf6 Update the config changelog. 2024-02-17 18:13:30 +00:00
Sadie Powell fcf16ab20a Merge branch '2.0' into 2.1. 2024-02-11 21:35:31 +00:00
Sadie Powell 8e3be20387 Update the Windows dependencies. 2024-02-11 21:34:00 +00:00
Sadie Powell 689dd44d3b Add a GitHub security policy. 2024-02-11 21:32:23 +00:00
Sadie Powell a25d0aa60e Update the changelog. 2024-02-11 21:14:59 +00:00
Sadie Powell c50d1dc2b5 Remove some outdated development docs. 2024-02-11 21:08:17 +00:00
Sadie Powell 274bb19d03 Switch Thread to use the C++11 equivalent, remove win32/pthread. 2024-02-11 20:35:21 +00:00
Sadie Powell 2c5b84bd1d Replace Condition and Mutex with the C++11 standard equivalents. 2024-02-11 19:53:05 +00:00
Sadie Powell 5c50bcb9c7 Remove the time_t parameter from Tick and TickTimers.
Most uses of Tick do not use the parameter and even when it is used
it is always the same as CurTime.
2024-02-11 18:18:18 +00:00
Sadie Powell cef56abea4 Consistently use time_t for the timer duration. 2024-02-11 18:10:38 +00:00
Sadie Powell 30b9f12711 Remove the now parameter from the Timer class.
This was never actually changed from the default.
2024-02-11 17:56:35 +00:00
Sadie Powell c9e0245f23 Revert "Document ns_no_expire nick default".
This reverts commit 9c9df2ad1f.

Closes #350.
2024-02-11 16:22:01 +00:00
Robby 5337326cc9 Update the dutch language file. 2024-01-31 06:17:01 +01:00
Robby 73d8c85879 Update the dutch language file. 2024-01-31 06:17:00 +01:00
Robby 6237245ab7 Remove an extraneous space in cs_xop, part 2. 2024-01-31 03:20:35 +01:00
Robby 7ae20c2a6d Remove an extraneous space in cs_xop. 2024-01-31 03:08:54 +01:00
Robby ae1829e5a8 Fix a typo in the PASSWORD_TOO_SHORT text string. 2024-01-30 19:15:19 +01:00
Sadie Powell 026661c9a2 Fix irc2sql and webcpanel not being put into the modules folder. 2024-01-30 14:53:08 +00:00
Sadie Powell ec7223ace2 Convert map/multimap/hash_map to an alias template. 2024-01-30 14:29:17 +00:00
Sadie Powell 1f31621bbf Remove various references to old versions. 2024-01-30 14:01:07 +00:00
Sadie Powell dfd41b9b94 Fix Clang and GCC disagreeing about whether a move is needed. 2024-01-24 16:12:29 +00:00
Sadie Powell fdd4aade3b Add a CI workflow for Alpine. 2024-01-24 15:14:21 +00:00
Sadie Powell 0a53f4c26e Merge branch '2.0' into 2.1. 2024-01-24 14:48:53 +00:00
Sadie Powell d6a826a09c Backport CI changes from the 2.1 branch. 2024-01-24 14:45:57 +00:00
Sadie Powell 484160eb4e Shuffle modules around a bit. 2024-01-24 12:34:34 +00:00
Sadie Powell 7ac1fe5847 Rename several modules to remove the m_ prefix. 2024-01-24 12:22:51 +00:00
Sadie Powell 72acef4e15 Mark types that have no inheritors as final. 2024-01-23 16:53:06 +00:00
Sadie Powell a6a0f6c447 Improve the layout of types that inherit from another type. 2024-01-23 15:28:23 +00:00
Sadie Powell 398d674cf4 Fix some CoreExport types that should be DllExport. 2024-01-23 14:06:46 +00:00
Sadie Powell 1467de1c7e Mark all exception types as CoreExport.
From the GCC docs:

>Exception catching of a user defined type in a binary other than
>the one which threw the exception requires a typeinfo lookup.

Closes #335.
2024-01-22 20:06:57 +00:00
Sadie Powell c5023fdfa0 Update the Turkish translation for the changes in 2.1 git.
Co-authored-by: CaPa CuL <capacul@gmail.com>
2024-01-22 19:52:06 +00:00
Sadie Powell 97782248af Merge branch '2.0' into 2.1. 2024-01-22 18:35:12 +00:00
Sadie Powell 016761776b Add a new Turkish translation contributed by CaPa CuL.
Co-authored-by: CaPa CuL <capacul@gmail.com>
2024-01-22 16:29:20 +00:00
Victor Coss c2450eabab Fix typo 2024-01-22 00:38:23 +00:00
Sadie Powell d6ced86021 Fix some module names that were missed in commit 4056af00e3. 2024-01-11 17:13:14 +00:00
Sadie Powell 0d8d1675f7 Fix an oversight in build_subdir. 2024-01-10 17:49:02 +00:00
Sadie Powell 4056af00e3 Parse InspIRCd module names in a way which is 1206 compatible. 2024-01-10 17:47:27 +00:00
Sadie Powell 99b4305573 Add a wrapper for std::string::compare to Anope::string. 2024-01-10 17:07:17 +00:00
Sadie Powell 113301dbba Update the changelogs. 2024-01-09 21:25:44 +00:00
Sadie Powell 349ae043b6 Always build the stats modules.
These have no external dependencies so it makes no sense to not
always build them.
2024-01-09 21:25:44 +00:00
Sadie Powell 710e7dd3a2 Bump the minimum OpenSSL version to 1.1. 2024-01-09 21:25:44 +00:00
Sadie Powell 1e9c6d7931 Always disable SSLv3 support, allow disabling TLSv1.[012]. 2024-01-09 21:25:44 +00:00
Sadie Powell 5772b924cc Drop support for ancient versions of GnuTLS. 2024-01-09 21:25:44 +00:00
Sadie Powell fce5f4cc0f Update the default SSL filenames to use the Certbot names. 2024-01-09 21:25:44 +00:00
Sadie Powell fa7ad6b3df Use native file extensions on macOS and Windows. 2024-01-09 14:35:49 +00:00
Sadie Powell fc2df00cfc Put modules into their own folder on Windows. 2024-01-09 13:57:32 +00:00
Sadie Powell f92c5471c2 Add a string overload of Channel::Kick. 2024-01-08 14:37:50 +00:00
Sadie Powell 0439e3b21b Add a string overload of User::SetModes. 2024-01-08 14:14:57 +00:00
Sadie Powell 5b23fae8bf Add a string overload of Channel::SetModes. 2024-01-08 14:14:37 +00:00
Sadie Powell aac4b0f0a3 Bump the up to date languages for the recent format changes. 2024-01-08 13:47:39 +00:00
Sadie Powell f083795c79 Fix various format string issues. 2024-01-08 13:11:50 +00:00
Sadie Powell 5db79c1e24 Add a non-formatting overload of User::SetModesInternal. 2024-01-08 13:11:50 +00:00
Sadie Powell a4dddfd5f1 Mark format strings with the GNU printf attribute. 2024-01-08 13:11:50 +00:00
Valentin Lorentz 7ddc865cde fr_FR: Generalize gender-neutral grammar
'(e)' and 'le/la' were used in a few places, I generalized them to all
strings referring to people.

I also made role names gender-neutral using contraction (eg. "fondateur"
-> "fondateurice"), and adapted specifiers accordingly.
2024-01-06 23:22:10 +00:00
Sadie Powell 688ecf1c1d Fix an oversight in the mysql module. 2024-01-06 23:19:18 +00:00
Sadie Powell c0453cfec1 Fix a sign conversion issue in the mysql module. 2024-01-06 13:39:03 +00:00
Sadie Powell a9ab0c72a6 Use auto in places where the type is unambiguous. 2024-01-06 13:23:37 +00:00
Robert Scheck de918ef9cf Add missing whitespace in multi-line comment 2024-01-06 12:41:31 +00:00
Sadie Powell 0ee9874112 Update translations for the recent services case fix. 2024-01-05 21:44:08 +00:00
Val Lorentz 388858aee6 Fix inconsistent capitalization of 'services'. 2024-01-05 21:34:26 +00:00
Sadie Powell f22703df59 Fix a translation string and enable translations on CI. 2024-01-05 21:28:54 +00:00
Val Lorentz 4715b76dbe fr_FR: msgmerge + update fuzzy strings. 2024-01-05 21:21:43 +00:00
Sadie Powell 50bd385ccf Add an alias for chanserv/status for the name used by Atheme.
Closes #336.
2024-01-05 21:21:17 +00:00
Sadie Powell e738da9b11 Merge branch '2.0' into 2.1. 2024-01-05 19:52:56 +00:00
Val Lorentz 6e6e053384 fr_FR: Update fuzzy strings 2024-01-05 19:49:56 +00:00
Valentin Lorentz 5edf19d230 fr_FR: Fix trailing spaces 2024-01-05 19:00:19 +00:00
Sadie Powell 4573e1925d Use normal exit codes when exiting the process. 2024-01-05 12:00:28 +00:00
Sadie Powell a40f8e0b9d Update the copyright headers for 2024. 2024-01-04 22:25:48 +00:00
Sadie Powell 9db49ec790 Bump for 2.1.2-git. 2024-01-04 17:55:44 +00:00
Sadie Powell e8cd2909a5 Release 2.1.1. 2024-01-04 17:54:06 +00:00
Sadie Powell e7a57aa754 Update the changelog. 2024-01-04 17:53:05 +00:00
Sadie Powell 1c30f69bd0 Fix a typo in GetCommandLineArgument. 2024-01-04 17:52:30 +00:00
Sadie Powell eb2aaf22ed Fix a copy/paste error in the default channel settings. 2024-01-01 17:32:37 +00:00
k4be 36c43683e5 Remove unused strings from pl_PL 2023-12-27 15:06:30 +00:00
k4be 0b63a4244d Update pl_PL translation for 2.1 2023-12-27 15:06:30 +00:00
Sadie Powell 4a62259695 Move privilege descriptions to the example configs. 2023-12-22 15:58:28 +00:00
Sadie Powell 87e3d5a045 Remove an extraneous space in cs_xop. 2023-12-21 01:27:34 +00:00
Dragone2 2b8384bb39 Updates Italian translations for Anope 2.1 2023-12-21 00:47:47 +00:00
Sadie Powell 6d981960da Merge branch '2.0' into 2.1. 2023-12-20 00:07:51 +00:00
Sadie Powell aca9d30064 Tweak the issue templates slightly. 2023-12-19 21:21:39 +00:00
Sadie Powell b84b1d8166 Misc grammar fixes. 2023-12-17 19:32:45 +00:00
Sadie Powell 6acbd326f3 Add the regex_stdlib regular expression engine.
Unlike other regular expression engines this is available on all
systems.
2023-12-17 15:00:26 +00:00
Sadie Powell cb533b63ac Merge branch '2.0' into 2.1. 2023-12-17 14:33:44 +00:00
Sadie Powell 6538641e87 Remove some unnecessary spaces that break editor indentation. 2023-12-17 13:59:49 +00:00
Sadie Powell eb0e5c89b2 Remove the m_regex_pcre module.
Users should migrate to m_regex_pcre2 instead.
2023-12-17 13:46:34 +00:00
Mingjie Shen 8e2fa4acdb messages: fix incorrect format specifier
Calling a printf-like function with the wrong type of arguments causes
unpredictable behavior.

Signed-off-by: Mingjie Shen <shen497@purdue.edu>
2023-12-08 17:16:53 +00:00
Sadie Powell 84c2f8d3fc Skip checking for chgrp/chmod on Windows. 2023-12-07 15:59:19 +00:00
Dragone2 8d99b3e2d7 Clean-ups old strings 2023-12-05 16:52:02 +00:00
Dragone2 b3ec2a5463 Adds new Italian translations 2023-12-05 16:52:02 +00:00
Sadie Powell 4c67f4393f Update the en_US translation. 2023-12-04 18:49:57 +00:00
Sadie Powell 4e9a2df827 Add the UNBANME privilege to allow users to unban themselves.
This is separate from the existing UNBAN privilege which applies
to all users.

Closes #331.
2023-11-30 14:38:20 +00:00
Sadie Powell 2d2d1972e9 Fix some modules that weren't converted to the new socket ctor.
Closes #330.
2023-11-26 13:26:38 +00:00
PeGaSuS cc9e2c1260 Fix missing end of comment 2023-11-24 21:04:05 +00:00
Sadie Powell 2b21264fb0 Bump for 2.1.1-git. 2023-11-24 13:37:11 +00:00
Sadie Powell 3f61b52db3 Release 2.1.0. 2023-11-24 13:33:10 +00:00
Sadie Powell f5fa4ff0e9 Remove the 1.9 and 2.0 changes from the change log. 2023-11-24 13:29:15 +00:00
Sadie Powell 251551c8c3 Update the change logs. 2023-11-24 13:29:11 +00:00
Sadie Powell e2d546ad46 Add a note about how to send emails on Windows. 2023-11-24 13:24:42 +00:00
Sadie Powell 949176c3e0 Merge branch '2.0' into 2.1. 2023-11-24 13:04:00 +00:00
Sadie Powell 3371941be5 Allow users to opt-out of being added to channel access lists. 2023-11-23 15:10:03 +00:00
Sadie Powell 70d72b62df Avoid needing to cast CurrentUplink by changing it to a size_t. 2023-11-16 21:49:48 +00:00
Sadie Powell c3e95d8e2e Fix chanserv/suspend info not being visible to regular users.
Closes #325.
2023-11-16 19:54:23 +00:00
Sadie Powell 46209895e3 Merge branch '2.0' into 2.1. 2023-11-16 19:34:37 +00:00
Sadie Powell ba163027bd Make the SASL PLAIN implementation more robust.
- Reject auth attempts that try to authenticate using an alternate
  authorization identity.

- Reject auth attempts that contain extraneous null bytes in the
  string as required by the SASL PLAIN RFC.

- General code quality cleanup.
2023-11-16 18:14:15 +00:00
Sadie Powell b28180d680 Implement support for the ANONYMOUS SASL mechanism. 2023-11-14 15:02:04 +00:00
Sadie Powell 0f1f0c5a22 Deduplicate account sending code in the inspircd module. 2023-11-14 13:53:45 +00:00
Sadie Powell 6e16e71fda Remove the two day X-line cap. 2023-11-03 11:01:01 +00:00
Sadie Powell 1eba69d035 Fix a missing override keyword. 2023-10-24 18:10:32 +01:00
Sadie Powell eb409fc6eb When changing the nick of a user on inspircd3 send the expected ts.
This should prevent users being renicked if they changed their nick
between services sending the renick and the IRCd receiving it.
2023-10-24 18:00:34 +01:00
Sadie Powell 97fa6d84bc Fix confirming an unconfirmed operator's account. 2023-10-22 23:31:48 +01:00
Sadie Powell 02940e4ea8 Fix a misleading temporary variable in ns_register. 2023-10-20 18:10:29 +01:00
Sadie Powell 38d5b93e4a Add support for server-initiated logins and logouts on UnrealIRCd. 2023-10-19 23:22:31 +01:00
Sadie Powell 78398a4481 Add support for server-initiated logouts on InspIRCd. 2023-10-19 22:52:05 +01:00
Sadie Powell 69a0f3bec2 Fix removing entries by an alias in chanserv/access and chanserv/xop. 2023-10-12 19:09:44 +01:00
Sadie Powell 0f32d2e553 Use a more human readable datetime format. 2023-10-12 14:41:07 +01:00
Sadie Powell 8e1c7e1e44 Merge branch '2.0' into 2.1. 2023-10-11 15:51:52 +01:00
Sadie Powell a3241065c5 Start migrating to range-based for loops. 2023-10-11 15:51:52 +01:00
Dragone2 6119586920 Small fixes and improvements to Italian translation. 2023-10-04 17:14:39 +01:00
dependabot[bot] 32cf99fdb5 Bump actions/checkout from 3 to 4
Bumps [actions/checkout](https://github.com/actions/checkout) from 3 to 4.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v3...v4)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-01 17:20:09 +01:00
Sadie Powell dc371aad6d Re-add the GHOST and REGAIN commands for compatibility.
These are hidden so they won't be shown in the help.
2023-09-26 12:39:30 +01:00
Sadie Powell ca2209aaed Show the SQL service name in the db_sql error message.
This should help users diagnose issues easier.
2023-09-05 00:21:31 +01:00
Sadie Powell 0a3ddef315 Replace Twitter with Mastodon in the ns_set_misc example config.
Closes #320.
2023-08-31 07:19:00 +01:00
Sadie Powell adf820c08a Merge branch 2.0 into 2.1. 2023-08-06 13:36:27 +01:00
Sadie Powell 0715db7182 Mark as 2.0.15-git. 2023-08-06 13:00:09 +01:00
Sadie Powell 8bf14ad5ea Release 2.0.14. 2023-08-06 12:58:38 +01:00
Sadie Powell c9f21f4ef6 Update the changelogs. 2023-08-06 12:57:26 +01:00
Sadie Powell 1b2eb9b9c8 Fix the pull request template to be more relevant to Anope. 2023-07-30 12:41:21 +01:00
Sadie Powell 1343be58d7 Add some templates for people filing issues on GitHub. 2023-07-30 12:15:20 +01:00
Sadie Powell 377ba87d52 Remove broken support for MinGW.
This apparently doesn't work and is pointless given we have native
Windows builds now anyway.
2023-07-29 10:01:18 +01:00
Sadie Powell 97f6aadd5b Fix paging the Config header on some util-linux revisions.
We use an environment variable here as passing -e directly may
result in an error on older `more` releases.
2023-07-28 23:56:09 +01:00
Sadie Powell 2dafc85af4 Remove references to the ilm which never got updated from 1.8. 2023-07-16 18:25:21 +01:00
Sadie Powell 7f8a0c9d33 Allow Anope to look up multiple DNS results.
For fixing bug 1756.
2023-07-11 16:11:57 +01:00
Sadie Powell cc23f6dc01 Fix sending log messages from a renamed pseudoclient.
If a command is named e.g. nickserv/wibble it previously tried to
look up the nickserv service and if this service didn't exist then
it would fall back to sending from the first available service. This
caused problems if the NickServ service had been renamed to something
else.

Reported by @AndrioCelos on IRC.
2023-07-11 15:13:17 +01:00
Sadie Powell aa619f1eeb Merge branch '2.0' into 2.1. 2023-07-11 12:28:54 +01:00
Sadie Powell b7458c5da1 Allow access list entries to have a description.
This is useful when adding glob matches to the access list as a
reminder of who they actually match.

Resolves https://bugs.anope.org/view.php?id=1613
2023-07-11 12:19:47 +01:00
PeGaSuS e717ac0a89 Clarify that operserv/sqline can also match channel names. 2023-07-09 23:44:02 +01:00
Sadie Powell 34ab54522e Fix not serialising dontkickops/dontkickvoices properly. 2023-07-09 23:09:11 +01:00
Sadie Powell 47bbc9b3fb Enable CanSQLineChannel in unreal4.
Ref: https://www.unrealircd.org/docs/Server_protocol:SQLINE_command
2023-07-09 22:32:43 +01:00
Sadie Powell 68b51c7481 Fix not getting memo notifications when using SASL. 2023-07-09 22:32:43 +01:00
Sadie Powell 37b60f8d9d Update links to the bugtracker. 2023-07-09 20:06:32 +01:00
Sadie Powell 14204353ac Allow customising the email content type.
This will allow people to send emails using HTML or non UTF-8 text.
2023-07-09 14:39:51 +01:00
Sadie Powell 098f19c005 Fix a crash when a module tries to get another module's config. 2023-07-06 10:53:25 +01:00
PeGaSuS 4e1f5cce80 Tell users that they must identify to their account before using CONFIRM.
This only happens when a nickname is registered via webcpanel and said nickname is online.
2023-07-05 17:09:47 +01:00
Sadie Powell 4a6f4bc92f Pull in the upstream changes from InspIRCd's vendoring tool. 2023-06-20 01:06:35 +01:00
Sadie Powell da2ac3e8a2 Fix detection of the nopartmsg module in the InspIRCd proto modules. 2023-06-20 01:00:37 +01:00
Sadie Powell 7c7158cf24 Terminate lines with CR+LF instead of just LF when sending an email.
From https://www.rfc-editor.org/rfc/rfc5321#section-2.3.1:

> Lines consist of zero or more data characters terminated by the
> sequence ASCII character "CR" (hex value 0D) followed immediately by
> ASCII character "LF" (hex value 0A).
2023-06-06 16:48:47 +01:00
Sadie Powell 1c30205af5 Also build the Windows dependencies in the CI. 2023-06-03 22:02:49 +01:00
Sadie Powell 9d0a6ddc67 Merge branch '2.0' into 2.1. 2023-06-03 21:51:07 +01:00
Adam fbf3b34474 add gettext to conan deps 2023-06-02 23:01:27 -04:00
Adam ce42810265 m_ldap: use Wldap on windows 2023-06-02 21:31:12 -04:00
Adam 07babdbd77 use Conan for extra's dependencies on Windows
conan install src\win32\conanfile.txt --build=missing
cmake -B build .
cmake --build build --config Release --target PACKAGE
2023-06-02 19:08:55 -04:00
Sadie Powell fe3926f572 Mark as 2.0.14-git. 2023-06-01 23:12:08 +01:00
Sadie Powell 03eead042c Release 2.0.13. 2023-06-01 23:12:07 +01:00
Sadie Powell b1fff640dd Update the changelogs. 2023-05-30 16:07:54 +01:00
Dragone2 f251ca6373 Small fixes to the Italian translation. 2023-05-29 21:33:59 +01:00
Adam 24a2c51003 CMakeLists.txt: remove -fno-delete-null-pointer-checks 2023-05-28 21:26:03 -04:00
Adam 66f37139cb regchannels: remove dependency on no-delete-null-pointer-checks 2023-05-28 21:26:03 -04:00
Adam 0646547c9e config: remove dependency on no-delete-null-pointer-checks 2023-05-28 21:25:59 -04:00
Sadie Powell 41206b991e Fix not being able to log into oper accounts when DNS fails. 2023-05-11 13:05:39 +01:00
Sadie Powell b7abfe5eca Avoid returning null when a config tag does not exist.
This invokes undefined behaviour on modern compilers.
2023-05-04 19:21:02 +01:00
Hendrik Jäger 23e7f5bd33 update: german translation 2023-04-21 22:30:18 +01:00
Dragone2 df9dfeae95 Update the Italian translation.
Ref: #309
2023-04-04 16:59:59 +01:00
Sadie Powell 29db25dac7 Fix missing override keywords. 2023-03-13 13:52:56 +00:00
Sadie Powell d210cd2695 Modernize finding system tools and remove checks for unused tools. 2023-03-13 13:52:56 +00:00
Sadie Powell fc8e6ee338 Document the protocol module changes from a while ago. 2023-03-13 01:44:37 +00:00
henk84 e68a41a91e Make language/update.sh safer, faster, cleaner.
Ref: #308

Co-authored-by: Hendrik Jäger <gitcommit@henk.geekmail.org>
2023-03-06 12:01:46 +00:00
henk84 26f846e112 Document how to update a translation.
Ref: #307

Co-authored-by: Hendrik Jäger <gitcommit@henk.geekmail.org>
2023-02-26 23:09:30 +00:00
henk84 f1fbe9e629 Update some german translations.
Ref: #306

Co-authored-by: Hendrik Jäger <gitcommit@henk.geekmail.org>
2023-02-26 23:05:28 +00:00
Sadie Powell ebe3fd7e57 Merge branch '2.0' into 2.1. 2023-02-19 11:21:58 +00:00
Sadie Powell 1c9b34190e Update the en_US translation. 2023-02-19 11:14:37 +00:00
Sadie Powell a5d4aa5821 Remove line numbers from the translation files.
The translations are updated so infrequently that these always
change a bunch and it makes reading the diffs really hard.
2023-02-19 11:12:37 +00:00
Hendrik Jäger 9b583961b0 Update german translation 2023-02-18 21:48:53 +00:00
Bram Matthys fef0cc1c29 unreal4: set vhost/vident during SASL 2023-02-09 16:05:50 +00:00
Sadie Powell f0ad0b4f0a Raise the default session limit from 3 to 5. 2023-02-06 17:12:35 +00:00
Sadie Powell dc1d9c837b Fix crashing when encountering an unterminated commented block. 2023-02-06 17:10:29 +00:00
Sadie Powell 885462d98e Merge branch '2.0' into 2.1. 2022-12-31 22:11:19 +00:00
Sadie Powell 33a337dfc0 Update the copyright headers for 2023. 2022-12-31 22:08:50 +00:00
Sadie Powell b64dc09bd2 Fix marking services pseudoclients as an oper on InspIRCd.
The bot user needs to be marked as introduced in order to send an
oper type.
2022-12-31 21:55:05 +00:00
Sadie Powell 6395107be6 Fix getting the port on non-UNIX socket listeners. 2022-12-27 10:21:40 +00:00
Sadie Powell 24b881c427 Update MODULE_INIT for modern MSVC+ versions. 2022-12-23 15:09:12 +00:00
Sadie Powell 28be881886 Backport anopesmtp removal from the master branch. 2022-12-23 14:21:34 +00:00
Sadie Powell 5bc560a743 Remove some unnecessary dependencies on the Linux CI. 2022-12-23 14:10:33 +00:00
Sadie Powell fee60c8e06 The fantasy:name field is allowed to contain spaces. 2022-12-18 10:36:59 +00:00
Sadie Powell 3f867c1e11 Show the invalid config value in the rejection message. 2022-12-18 10:35:11 +00:00
Sadie Powell b235da2e9c Merge branch '2.0' into 2.1. 2022-12-17 16:18:09 +00:00
Sadie Powell 3f3062a077 Use <filesystem> instead of opendir/readdir/closedir. 2022-12-17 16:03:28 +00:00
dependabot[bot] 2f46739931 Bump actions/checkout from 2 to 3
Bumps [actions/checkout](https://github.com/actions/checkout) from 2 to 3.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v2...v3)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-12-17 15:59:28 +00:00
Sadie Powell 6eec018c34 Allow Dependabot to keep our GitHub CI up to date. 2022-12-17 15:57:37 +00:00
Sadie Powell 8a8fb7725b Use the native versions of inet_ntop/inet_pton on Windows. 2022-12-17 12:40:58 +00:00
Sadie Powell f6e5e6a2b4 Add sockaddrs::str to stringify a sockaddrs properly.
Also clean up the socket code slightly.
2022-12-17 12:39:48 +00:00
Sadie Powell dfdcd3021a Add support for linking over UNIX sockets. 2022-12-17 11:50:38 +00:00
Sadie Powell 5fa3d8f929 Use emplace() instead of insert(std::make_pair()). 2022-12-09 16:50:29 +00:00
Sadie Powell e78db21180 Mark as 2.0.13-git. 2022-12-09 08:33:02 +00:00
Sadie Powell d4d2a4b4ce Release 2.0.12. 2022-12-09 08:30:43 +00:00
Sadie Powell e33b8d5f43 Update the changelogs. 2022-12-09 08:28:57 +00:00
PeGaSuS c2b154e1b1 Document cs_no_expire (#301). 2022-12-08 07:16:04 +00:00
Sadie Powell 1a2da82106 Merge branch '2.0' into 2.1. 2022-12-07 15:59:46 +00:00
Sadie Powell 4a2861ba3d Add a module that provides regex/pcre using PCRE2. 2022-12-07 15:43:39 +00:00
Sadie Powell 9d92de1157 Import InspIRCd's vendoring tool and use it to vendor crypt_blowfish. 2022-10-22 20:08:30 +01:00
miwob 211bd80061 Update ircd-hybrid protocol module
* Add METADATA command handler which currently only allows to modify a client's certificate fingerprint
* Minor reformatting and style inconsistency fixes
2022-09-29 13:05:05 +01:00
Austin Ellis 32679a107a Add the ability to confirm accounts via webcpanel after logging in. 2022-09-22 17:38:07 +01:00
Sadie Powell 1664689eb7 Merge branch '2.0' into 2.1. 2022-09-15 18:46:51 +01:00
miwob bc101d10de Update hybrid protocol module to improve compatibility with the latest ircd-hybrid release.
* Remove support for deprecated channel mode `u`
* Add support for channel mode `N`
* Fixed the `UID` message handler requiring the correct amount of arguments
* Fixed the `SID` message handler requiring the correct amount of arguments
* Fixed the `SJOIN` message handler requiring the correct amount of arguments
* Minor documentation updates and style corrections
* Remove pointless return statement in the `JOIN` message handler
* Add support for the owner and admin channel prefix modes
* Add support for `MLOCK`
* Fixed SendChannel() so modes are prefixed with a `+`
* Change SendJoin() to actually use the mode stacker
* Add support for channel mode `Q`
* Add support for channel mode `Z`
* Add support for user mode `B` and `Z`
* Actually user mode `g` is not oper only. For some reason this mode got set to oper only in anope/anope@1e625b6
* Work properly with extended bans, e.g. don't normalize masks starting with a `$`
2022-09-15 14:13:24 +01:00
Sadie Powell 901a456132 Fix allowing spaces in some config fields that shouldn't contain them. 2022-09-12 17:56:45 +01:00
Sadie Powell 0c61915e31 Bahamut now has support for halfops. 2022-09-12 17:56:45 +01:00
Dragone2 d5e85c7f25 Fixe a typo in the Italian translation.
Ref: #298
2022-08-10 19:40:42 +01:00
Michael Stapelberg a5425e3bf3 database: write to temporary file and rename.
This decreases the likelihood of ending up with a zero-byte (or missing)
anope.db.

Co-authored-by: Michael Stapelberg <michael@robustirc.net>
2022-07-27 17:40:49 +01:00
Sadie Powell b96519d85c Build the installer package on Windows CI. 2022-05-01 10:28:18 +01:00
Sadie Powell ac98ed615b Merge branch '2.0' into 2.1. 2022-04-22 10:34:04 +01:00
Sadie Powell 2062eb23f0 Release 2.0.11. 2022-04-22 10:17:19 +01:00
Sadie Powell af4d7d21ba Update the changelogs. 2022-04-21 17:48:54 +01:00
Sadie Powell c2ba553483 Remove unnecessary ProcessModes call in unreal4.
This was made obsolete by the previous commit.
2022-04-11 15:34:37 +01:00
Sadie Powell f2bcf449cd Use windows-2019 for Windows builds. 2022-03-01 05:21:28 +00:00
Sadie Powell 09c587bed0 Remove TR1 compatibility layer.
This isn't necessary now we use C++17.
2022-03-01 05:09:29 +00:00
Sadie Powell a8724b5f03 Use noexcept instead of an empty exception specifier. 2022-03-01 05:06:19 +00:00
PeGaSuS 8dd1fb8ac2 Fix unsetting vhosts on unreal4 (#289). 2022-02-13 14:30:09 +00:00
Sadie Powell b7e85f5161 Default synconset and syncongroup to on. 2022-02-05 23:11:39 +00:00
Sadie Powell 773ed39d5d Merge branch '2.0' into 2.1. 2022-02-05 23:10:42 +00:00
Sadie Powell b5fe380011 Include the required modules in the example InspIRCd config. 2022-01-29 13:33:19 +00:00
Sadie Powell af7bf785f9 Fix a grammar error in nickserv.example.conf. 2022-01-29 13:31:04 +00:00
Sadie Powell 15d51ff033 Document the sysconf header file. 2022-01-13 13:46:29 +00:00
Sadie Powell 83bf5ba255 Remove checks for obsolete Windows SDK versions.
We can't build against these anyway now as they're too old.
2022-01-13 03:22:12 +00:00
Sadie Powell 2881ba112b Clean up the predefined variables on Windows.
- Use _MSC_VER for detecting MSVC instead of a custom define.
- Remove MINGW as you can use __MINGW32__ to detect this.
- Stop defining _WIN32 as this will always be defined on Windows.
2022-01-13 02:35:23 +00:00
Sadie Powell 1ee81580c6 Add support for Windows CI. 2022-01-13 01:59:13 +00:00
Sadie Powell 4f421db5a9 Fix checking whether localisation is enabled. 2022-01-13 01:59:13 +00:00
Sadie Powell 091c0eea28 Rip out check_functions().
This isn't actually used anywhere and just slows down the build.
2022-01-13 01:42:46 +00:00
Sadie Powell eaaabd8de0 Rip out calculate_depends().
This code is incredibly error prone and it just duplicates behaviour
that CMake already implements with depend.make files.
2022-01-13 01:42:38 +00:00
Sadie Powell 40ce51a1a9 Include cstring instead of string.h in services.h 2022-01-13 01:13:46 +00:00
Sadie Powell 23ac008cc1 Remove NO_CLIENT_LONG_LONG from the mysql module.
This is not necessary now we use C++17.
2022-01-13 01:12:05 +00:00
Sadie Powell 6486956401 Fix some methods that should have been marked as CoreExport. 2022-01-13 00:34:51 +00:00
Sadie Powell 33b42ce86e Use the default CMake modules for finding gettext instead of our own. 2022-01-12 23:05:25 +00:00
Sadie Powell a631028660 Merge branch '2.0' into 2.1. 2022-01-12 22:08:35 +00:00
Sadie Powell 04257b9d6a Replace ICQ in the ns_set_misc examples with something not dead. 2022-01-10 16:45:25 +00:00
Sadie Powell acb6c55529 Add all extra modules to the gitignore to avoid adding their symlinks. 2022-01-10 16:20:56 +00:00
Sadie Powell 0e6f8488d3 Avoid duplicate checks in irc2sql. 2022-01-10 16:20:56 +00:00
Filippo Cortigiani 56687c27cb Fix ns_resetpass not returning a response for XMLRPC (#243)
Co-authored-by: filippo nicola cortigiani <simos@H7-25.fritz.box>
2022-01-10 16:12:33 +00:00
k4bek4be 9b0c7929d9 Multiple updates for unreal4 protocol (#285)
* Parse PROTOCTL PREFIX and PROTOCTL USERMODES
* Add several previously unhandled modes
* Fix incorrect SJOIN prefix handling
* Enable message tags sending from ircd
* Add timedban matcher
* Add operclass matcher
* Store all client and channel moddata.
* Call unreal's internal unban on /cs unban
* Check for ~a:0 ban
* Add country ban matcher
* Use +B umode for services bots
2022-01-10 15:50:17 +00:00
k4bek4be d895a3aa01 Use utf-8 encoding for outgoing email (#286) 2022-01-09 19:01:45 +00:00
k4be d4632e5286 Add a "Network Service" (RPL_WHOISOPERATOR) line to WHOIS replies 2022-01-09 18:39:09 +00:00
Michael Wobst c38106211c Adjust IsIdentValid test to comply with upcoming ircd-hybrid release (#272).
hybrid.cpp: adjust IsIdentValid test to comply with upcoming ircd-hybrid where
user names may only consist of [A-Za-z0-9._-] and may not begin with '.', '-',
or '_'.

As a side effect this fixes an issue where currently it is possible to introduce
bots whose user name starts with (non-alnum) characters considered invalid for
ircd-hybrid leading to a services shutdown due to a nick introduction/kill loop.
2022-01-09 15:25:09 +00:00
Sadie Powell b8bcad048e Update the copyright headers for 2022. 2022-01-06 23:15:44 +00:00
Sadie Powell 4e5fc9797c Speed up CI by building with Ninja instead of Make. 2022-01-04 18:48:22 +00:00
Sadie Powell 9befb13ea4 Remove various entries from sysconf which are never actually used. 2022-01-04 15:05:33 +00:00
Sadie Powell 8eb6a4da71 Update more IRCServices references to reflect the current project.
- If referring to the specific piece of software use "Anope".
- If referring to services in general use "services".
2022-01-04 14:11:07 +00:00
Sadie Powell ec7dfb3675 Use C++11 header names instead of their deprecated equivalents. 2022-01-04 12:36:35 +00:00
Sadie Powell 106750db77 Replace all uses of push_back with emplace_back. 2022-01-04 12:28:55 +00:00
Sadie Powell 7d1047490e Consistently use #pragma once across all header files.
This replaces a mixture of no include guards, ANOPE_FOO_H, and FOO_H.
2022-01-04 12:10:32 +00:00
Sadie Powell c9f93eeaed Merge branch '2.0' into 2.1. 2022-01-04 00:39:34 +00:00
Sadie Powell db6b2225b1 Use GNU visibility attributes when on non-Windows.
This reduces binary sizes by several megabytes on my system.
2022-01-04 00:39:05 +00:00
Sadie Powell c6c9d9591c Remove some obsolete header and function checks. 2022-01-04 00:39:05 +00:00
Sadie Powell c1f6a79c72 Export a compilation database for debug builds. 2022-01-04 00:39:05 +00:00
Sadie Powell eb81f22a5b Modernize CXXFLAGS on Unix and enable -Werror on CI.
Also clear up warnings that this exposed.
2022-01-04 00:39:05 +00:00
Sadie Powell a31a7f5a6c Use C++11 default initializers and destructors where possible. 2022-01-04 00:17:19 +00:00
Sadie Powell 7531e90499 Use C++11 style class/struct initialisation. 2022-01-04 00:17:13 +00:00
k4be a93a7c87b6 Update pl_PL translation 2022-01-03 19:53:08 +00:00
Sadie Powell ba2c82e2f5 Fix some minor issues discovered whilst working on 2.1. 2022-01-03 19:37:33 +00:00
Sadie Powell dfcc025a19 Remove MARK_DEPRECATED as there's an attribute for this now. 2022-01-03 19:02:44 +00:00
Sadie Powell a5f7aac295 Replace anope_{final,override} with their C++11 equivalent. 2022-01-03 19:02:44 +00:00
Sadie Powell d76d747196 Require C++17 to build Anope. 2022-01-03 19:02:44 +00:00
Sadie Powell aee1e53cb3 Remove support for precompiled headers.
This might have been useful two decades ago but on recent hardware
this just makes builds take longer than without them.
2022-01-03 16:27:15 +00:00
Sadie Powell fd1ca96e2c Merge branch '2.0' into 2.1. 2022-01-03 15:50:22 +00:00
Sadie Powell 2c18601d8f Fix linking against libraries by their alternate name. 2021-12-28 21:18:22 +00:00
Sadie Powell a1a1b3ad01 Add a build time check that OpenLDAP is reentrant. 2021-12-28 19:20:23 +00:00
Robert Scheck 7a28d81b44 Reflect OpenLDAP 2.5 upstream change from libldap_r to libldap
Starting with OpenLDAP 2.5 upstream decided to merge the non-threaded
libldap_r library into the threaded libldap library. And starting with
OpenLDAP 2.6 common Linux distributions such as Fedora do not ship the
compatibility symbolic link anymore (which leads to a build failure),
thus the linking tests for libldap_r and uses alternatively libldap.

See also:
 - https://lists.openldap.org/hyperkitty/list/openldap-announce@openldap.org/thread/BH3VDPG6IYYF5L5U6LZGHHKMJY5HFA3L/
 - https://bugzilla.redhat.com/show_bug.cgi?id=2032707
2021-12-28 19:20:03 +00:00
Sadie Powell 69dbcba069 Allow specifying multiple dependency libraries like foo|bar. 2021-12-28 18:53:24 +00:00
Hendrik Jäger 66bf55fb7f Fix missing spaces in de_DE 2021-12-23 22:10:27 +00:00
Sadie Powell 002186c016 Document log files having their creation date appended. 2021-12-23 22:08:36 +00:00
Sadie Powell 6a7488edc1 Remove double escaping in CMake regex matching.
This is not needed now we use regex matching directly instead of
via the CMake 2.4 function wrapper.

Fixes building extra modules.
2021-12-14 11:11:22 +00:00
Sadie Powell 4af8dfa549 Update the min version of CMake mentioned in the Config script. 2021-12-14 10:10:03 +00:00
Sadie Powell 4efc2c219b Send mode changes from ChanServ if the channel is not registered.
Avoids calling WhoSends() on a null pointer.
2021-12-03 07:11:37 +00:00
Sadie Powell 84ec0903ee Fix checking if this is null in regchannel.
I can't see any places this might be called on a null pointer.
2021-12-02 10:23:05 +00:00
Sadie Powell 754c82d047 Remove undefined behaviour around checking if this is null. 2021-11-30 11:04:19 +00:00
Sadie Powell 17fa704278 CMake warnings CMP0003 and CMP0007 are not necessary. 2021-11-30 10:11:17 +00:00
Sadie Powell b9ccd4bb0b Fix cmake deprecation warning CMP0026. 2021-11-30 10:03:10 +00:00
Sadie Powell 595bc09ec1 Merge branch '2.0' into 2.1. 2021-11-30 09:50:33 +00:00
Sadie Powell 64f65b035e Fix some message params being sent as <middle> instead of <trailing>. 2021-11-20 19:54:56 +00:00
Sadie Powell b6f1c86f65 Use example.com instead of localhost.net in the example configs. 2021-11-14 20:45:17 +00:00
Sadie Powell a736b54ef1 Use the server name as the enforcer hostname if not otherwise set. 2021-11-14 20:45:01 +00:00
Austin Ellis 8b8bc97194 Fix the grammar of the globaloncycledown message (#279).
The previous default example (which is in use on many Anope networks) refers to Services in 2nd person, then 1st person - in the same sentence.
2021-11-14 00:42:09 +00:00
Sadie Powell 27cff11e31 Increase the default channel expiry to 30 days. 2021-10-17 19:46:29 +01:00
Sadie Powell b7da27ad3a Increase the default nickname expiry to 90 days. 2021-10-17 19:44:05 +01:00
Sadie Powell aa0adcf99b Show the protocol module name when connecting to the uplink. 2021-10-06 20:58:57 +01:00
Sadie Powell 079fb1b66f Mark as 2.0.11-git. 2021-08-29 20:02:49 +01:00
Sadie Powell 1cab1d32c2 Send the oper mode for services pseudoclients on InspIRCd. 2021-08-29 18:37:12 +01:00
Sadie Powell e5075d2dc2 Merge branch '2.0' into 2.1 2021-08-28 19:53:17 +01:00
Matthew Beeching 98fdce2e1d Update Jobe's email address in the readme. 2021-08-25 20:33:11 +01:00
Adam d8d1c1d18c cmake: update NSIS template for NSIS 3
Newer cmake versions require NSIS 3, which already defines a RemoveSection macro causing cpack to fail
2021-08-09 17:17:25 -04:00
Sadie Powell 48ec53242e Release 2.0.10. 2021-08-09 15:54:25 +01:00
Sadie Powell e7e8447fa3 Deduplicate code for checking if a user is securely connected. 2021-08-01 19:23:48 +01:00
Sadie Powell 561b205c4a Merge branch '2.0' into 2.1. 2021-08-01 18:53:24 +01:00
Adam 91321bdf68 webcpanel: fix command source ip to use extforward ip 2021-07-24 12:09:12 -04:00
Sadie Powell 33590aa59b Overwritten has two t's in it. 2021-06-17 18:41:23 +01:00
Josh Soref fd88b756fc Fix various spelling issues (#274).
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com>.
2021-06-17 15:02:30 +01:00
Sadie Powell 8d1bc95faf Use the InspIRCd-sent maxlist size instead of networkinfo:modelistsize. 2021-06-04 02:19:54 +01:00
Sadie Powell e67c2d5632 Add support for per-mode list limits. 2021-06-04 02:12:09 +01:00
Sadie Powell 376053e0ac Allow protocol modules to declare that the IRCd supports tags.
This is not being used currently but will be soon.
2021-06-01 00:21:41 +01:00
Sadie Powell cadc6f48e6 Remove nickserv:strictpasswords as it is now obsolete. 2021-05-31 21:44:10 +01:00
Sadie Powell b6665d5eb9 Add the nickserv:minpasslen option. 2021-05-31 21:16:06 +01:00
Sadie Powell 95955ae069 Rename nickserv:passlen to nickserv:maxpasslen. 2021-05-31 21:00:43 +01:00
Sadie Powell df4313f5bb Merge branch '2.0' into 2.1. 2021-05-31 20:57:48 +01:00
Sadie Powell 3728a0bda1 Fix some misleading indentation in ns_register. 2021-05-31 20:53:29 +01:00
Sadie Powell d2da73cf68 Add the -devel switch to Config.
This makes the script use defaults that make development easier.
2021-05-26 04:13:42 +01:00
Sadie Powell 100b24074d Improve the message for NICK_IDENTIFY_REQUIRED. 2021-05-23 19:51:40 +01:00
Sadie Powell a040f17787 Use InnoDB instead of the deprecated MyISAM engine.
Ref: https://www.percona.com/blog/2016/10/11/mysql-8-0-end-myisam/
2021-04-27 23:21:07 +01:00
Sadie Powell 6274bd0b34 Use utf8mb4 instead of utf8 in chanstats and irc2sql.
The utf8 charset, confusingly, is an alias for utf8mb3 which is not
a real UTF-8 encoding as it can only store three byte characters.

The real UTF-8 charset is utf8mb4.
2021-04-27 23:18:04 +01:00
Sadie Powell 095a25d473 Add the anope_override keyword to methods that lack it. 2021-04-27 21:41:19 +01:00
Sadie Powell 53cd3f47b5 Use elseif in CMake where possible. 2021-04-27 19:20:39 +01:00
Sadie Powell c21f6eb5a3 Rip out compatibility code for now-unsupported CMake versions. 2021-04-27 19:20:36 +01:00
Sadie Powell e2aeab970b Remove the repeated conditions in cmake endif/else statements. 2021-04-27 17:49:21 +01:00
Sadie Powell ef4fd869ae Bump minimum CMake version to 3.8.
This is the minimum version that supports CMAKE_CXX_STANDARD=17.
2021-04-27 17:48:28 +01:00
Sadie Powell dfc8bd4aa2 Switch SendSVSLogin to take a NickAlias. 2021-04-27 17:31:14 +01:00
Sadie Powell fd774bd52a Remove unnecessary space. 2021-04-21 14:09:07 +01:00
Sadie Powell 16fac79b78 The last parameter of Solanum ECHO is a <trailing>. 2021-04-21 14:06:49 +01:00
Sadie Powell 622a8ea7e9 Implement support for the Solanum ECHO server capability.
https://github.com/solanum-ircd/solanum/commit/4cac091255d972b0131ffbf0cd278f984bd892d4
2021-04-21 14:05:35 +01:00
Sadie Powell c00ecc5e02 Process writes to the uplink socket before quitting in all cases.
This allows any error that might have been sent to the IRCd to
actually be sent.
2021-04-16 22:46:11 +01:00
Sadie Powell cdd9b6f11b Default to the inspircd3 protocol module instead of inspircd20. 2021-04-16 22:18:56 +01:00
Sadie Powell faee68e85f Don't enforce casemapping when using the 1202 InspIRCd protocol.
This allows older servers which use a module that provides custom
casemapping (e.g. the ascii module) to link.
2021-04-16 22:17:47 +01:00
Sadie Powell 683f42eeef Use UTC in anopesmtp to fix a C++98 compat warning. 2021-04-08 13:47:13 +01:00
Sadie Powell f83558f10b Log when freopen and chown fail. 2021-04-08 13:47:13 +01:00
Sadie Powell 0a518f4bbd Fix the syntax of Solanum identified messages. 2021-03-30 13:56:20 +01:00
PeGaSuS 9483da3239 Added Account to show the main nick of a grouped nick(s).
#270
2021-02-19 01:42:13 +00:00
Matt Schatz c67911bfcc bots: Fix dtor channel iterator being invalidated.
The call to UnAssign() erases the channel from the set which
invalidates the iterator in this loop. Handle this in the same
manner as the NickCore dtor.
2021-02-19 01:37:08 +00:00
Sadie Powell 3f6e694e50 Send the appropriate messages for Solanum's IDENTIFIED feature. 2021-02-19 01:08:08 +00:00
Sadie Powell c2646d67bb Replace the Charybdis protocol module with Solanum (its successor). 2021-02-19 00:33:27 +00:00
Sadie Powell c68b81eac8 Merge branch '2.0' into 2.1. 2021-02-18 23:59:28 +00:00
Adam 4d271e0210 cs_access: require accounts to be confirmed for level 0 access 2021-01-31 12:05:25 -05:00
Robby c5a4e8337c Update copyright to 2021.
This was done with:
find docs/ include/ language/ modules/ src/ *.* Config -exec sed -i 's/-20.. Anope Team/-2021 Anope Team/i' {} \;
2021-01-07 03:31:08 +01:00
PeGaSuS 7e08e7cb6c Set killprotect as a default option in nickserv.example.conf. 2021-01-07 03:24:17 +01:00
Michael Hazell 4031dc7321 inspircd3: Enable support for channel SQLines (#268) 2021-01-01 19:03:23 +00:00
Robby d1e4943800 Add kill_immed as an available option to nickserv.example.conf. 2020-11-20 17:00:00 +01:00
Sadie Powell 74f18d7b1d Only grant an account an identifier when the identifier is needed. 2020-11-19 14:12:18 +00:00
Sadie Powell 3856538e48 Bump for 2.0.10-git. 2020-10-22 12:10:08 +01:00
Sadie Powell 236affa2a4 Release 2.0.9. 2020-10-22 12:08:50 +01:00
Sadie Powell f8d8104d82 Update the changelog. 2020-10-22 12:07:56 +01:00
Sadie Powell a3c7f716bd Fix the query used by IRC2SQL for updating server information. 2020-10-21 16:26:08 +01:00
Sadie Powell b2b53a1e01 Fix account identifiers conflicting with SQL row identifiers. 2020-10-21 12:20:26 +01:00
Sadie Powell 95f4e29edd Unset the account id before the account name on InspIRCd.
This avoids the id being shown on the logout event.
2020-10-12 17:47:41 +01:00
Sadie Powell cdf147f351 Fix not sending an account id to InspIRCd on SASL.
Also, send the account id first so it shows on the ACCOUNT message.
2020-10-12 17:30:05 +01:00
Sadie Powell 8b2c1548ab Merge tag '2.0.8' into 2.1. 2020-10-07 14:42:33 +01:00
Sadie Powell 2cf507ed66 Bump for 2.0.9-git. 2020-10-07 13:15:31 +01:00
Sadie Powell 46e1395e62 Release 2.0.8. 2020-10-07 13:15:31 +01:00
Sadie Powell 6117299ecd Update the changelog. 2020-10-07 13:15:31 +01:00
Sadie Powell f8777097d1 Fix last case check for le64toh. 2020-10-07 13:15:31 +01:00
TheMythPT a79046e025 Update nickserv.example.conf
This breaks the `killprotect' functionality, because a user is expected to turn into guest after the specified amount of time.
Also new users that register their nicknames will wonder why they can't join a +R channel but they didn't change their nick to Guest*
2020-10-06 15:20:56 +01:00
Sadie Powell d0e8392445 Fix the global/global command showing the wrong origin nick. 2020-10-06 15:13:14 +01:00
Sadie Powell af8056d2dd Simplify the definition of _le64toh in the siphash implementation. 2020-10-06 14:52:55 +01:00
Sadie Powell 4ba871c631 Remove use of the deprecated register keyword.
Fixes a build error on C++17 compilers.
2020-10-02 16:53:13 +01:00
miwob da08dd6d0e Minor spelling fix in operserv.example.conf. it's vs its 2020-10-02 16:52:38 +01:00
miwob 1ac3b38fa8 Update/modernize ircd-hybrid protocol module to stay link compatible with next ircd-hybrid release 2020-10-02 14:53:08 +01:00
Sadie Powell c29b72fcdc Add C++98 and C++14 build matrixes to the Linux CI. 2020-10-02 14:27:04 +01:00
Sadie Powell a3673a5a2d Update the changelogs. 2020-10-01 10:26:20 +01:00
Sadie Powell 5dd5fa4644 Rename unreal4 to unrealircd and inspircd3 to inspircd. 2020-09-28 15:33:16 +01:00
Sadie Powell 9d6dd4af11 Remove the non-tagged version of IRCDMessage::Run. 2020-09-28 15:28:27 +01:00
Sadie Powell f430522b41 Rename things from services to anope. 2020-09-28 15:28:27 +01:00
Sadie Powell 907aa60380 All modern platforms support stdint so remove pstdint. 2020-09-28 15:28:26 +01:00
Sadie Powell c7e26c5f67 Remove nickserv/getpass and Anope::Decrypt.
There is no point having these now plain text passwords are deprecated.
2020-09-28 15:28:26 +01:00
Sadie Powell 8e0e1806a4 Require a secure password hashing algorithm for new accounts.
Insecure algorithms can still be used for existing accounts.
2020-09-28 15:28:26 +01:00
Sadie Powell 7f39fb14f2 Remove operserv/oline and CanSVSO/SendSVSO in IRCDProto.
Now UnrealIRCd 3.2.x support has been removed nothing uses this.
2020-09-28 15:28:26 +01:00
Sadie Powell fb86705d3f Drop support for InspIRCd 1.2, InspIRCd 2.0, and UnrealIRCd 3.2.
None of these are supported by upstream anymore.
2020-09-28 15:28:26 +01:00
Sadie Powell f4fa5b3733 Bump for 2.1.0-git. 2020-09-28 15:28:26 +01:00
Sam James (sam_c) 9701cbcd08 Fix musl build (gettext internals)
__USE_GNU_GETTEXT is exposed by musl because they provide
a GNU gettext-compatible interface. This doesn't mean they
provide all the internals that glibc does.

Check for __GLIBC__ if using internal _nl_msg_cat_cntr.

Signed-off-by: Sam James (sam_c) <sam@cmpct.info>
2020-09-28 13:11:24 +01:00
Sadie Powell 1af02bf2a9 Switch from Travis CI to GitHub Actions.
Closes #153.
2020-09-28 12:47:52 +01:00
Michael bf725aa8dc HostServ: Remove vhost when a nick is dropped 2020-09-28 12:15:48 +01:00
Sadie Powell 52914216f0 Clarify that unreal4 also works for UnrealIRCd 5. 2020-09-14 16:49:25 +01:00
Sadie Powell 8180dd414e Implement support for immutable account identifiers. 2020-09-10 15:15:34 +01:00
miwob ff28985384 Fix -Wclass-memaccess warning:
/anope/src/misc.cpp: In function ‘Anope::string Anope::Resolve(const Anope::string&, int)’:
/anope/src/misc.cpp:742:60: warning: ‘void* memcpy(void*, const void*, size_t)’ copying an object of non-trivial type ‘union sockaddrs’ from an array of ‘struct sockaddr’ [-Wclass-memaccess]
   memcpy(&addr, addrresult->ai_addr, addrresult->ai_addrlen);
                                                            ^
In file included from /anope/include/users.h:21,
                 from /anope/include/bots.h:12,
                 from /anope/include/regchannel.h:18,
                 from /anope/include/config.h:16,
                 from /anope/src/misc.cpp:16:
/anope/include/sockets.h:27:18: note: ‘union sockaddrs’ declared here
 union CoreExport sockaddrs
                  ^~~~~~~~~
2020-09-10 13:22:42 +01:00
miwob 584a209b28 ircd-hybrid protocol module: add support for channel mode 'K' (no knock) 2020-08-01 13:39:35 +01:00
Matt Schatz c327d1aeef Improve wording of the resetpass:confirm log message. 2020-04-06 09:49:46 +01:00
Matt Schatz 0d0763f72f Fix the handling of topic messages with InspIRCd v3. 2020-03-26 08:24:39 +00:00
Robby 4d101569f8 Update the mailmap. 2020-01-24 11:13:26 +01:00
Robby 8866612160 Update my mailmap entries. 2020-01-24 10:05:39 +01:00
Robby d69b14e54c Fix a typo in the mailmap. 2020-01-24 09:50:29 +01:00
Sadie Powell 505eed9eef InspIRCd: send an oper type of "service" instead of "services".
This fixes a grammar issue with RPL_WHOISOPERATOR where users would
see "ChanServ is a services on NetworkName".
2020-01-21 18:27:29 +00:00
Sadie Powell b188a1c0cd Update my name and email address. 2020-01-20 20:48:22 +00:00
Robby 2c1f8260fd ms_info: Fix a typo in the INFO output when a nickname has been given.
Update the dutch language file.
2020-01-07 04:37:19 +01:00
Robby d319fc6eb5 m_chanstats: Make ChanServ's HELP SET CHANSTATS translatable too. (#253)
Also refresh the language files while at it.
2020-01-07 02:45:30 +01:00
Dragone2 83eea99317 Update for Italian translation (#253). 2020-01-06 16:37:16 +01:00
Dragone2 55a23c7253 Update for Italian translation (#250). 2020-01-04 16:54:44 +01:00
Robby c8699c6726 Update copyright to 2020.
This was done with:
find docs/ include/ language/ modules/ src/ *.* Config -exec sed -i 's/-20.. Anope Team/-2020 Anope Team/i' {} \;
2020-01-04 15:51:20 +01:00
Matt Schatz 95c8478ec5 Fix the handling of kick messages with InspIRCd v3. 2020-01-04 12:40:20 +01:00
Peter Powell cba1313a40 Revert "Fix the length limit for InspIRCd v3 S2S messages."
This is causing build errors for some people and i'm unsure why.

This reverts commit a4ab6876c3.
2019-12-15 12:40:31 +00:00
Peter Powell 96ea61d8b8 Add the <limits> include to the inspircd3 module. 2019-12-15 01:50:31 +00:00
Peter Powell 523f89f45f Enable C++11 features on non-GCC C++11 compilers. 2019-12-14 19:16:44 +00:00
Peter Powell 6617d29b52 Fix a bunch of broken indentation. 2019-12-14 18:38:13 +00:00
Peter Powell a4ab6876c3 Fix the length limit for InspIRCd v3 S2S messages. 2019-12-14 18:06:53 +00:00
Peter Powell ff0109d6ba inspircd3: Refer to modules using without a prefix/suffix. 2019-12-14 17:53:42 +00:00
Matt Schatz 059c78aee3 Fix retrieval of TopicLock status in IRCDMessageMetadata. 2019-11-27 18:21:01 +00:00
Matt Schatz f75c5011e2 Update IRCDMessageMetadata for channel metadata.
- InspIRCd 3 now includes the channel TS in any channel metadata.
This pushes the type and value by one.
- Update the messages sent from this function accordingly.
- Fix retrieval of TopicLock status.
2019-11-27 18:21:01 +00:00
Peter Powell 2832c736dd Fix parsing InspIRCd v3 IJOIN messages.
Thanks to @H7-25 and @genius3000 for reporting this.
2019-11-17 10:23:06 +00:00
Matt Schatz f34ba4b1f0 Add the SSL ExtensibleItem for Users.
Copied this directly from inspircd12.cpp, which
inspircd20.cpp inherited from.
2019-11-12 13:06:32 +00:00
Adam 91dde90ad2 Merge pull request #246 from genius3000/2.0+unconfimed_info
Fix NickServ INFO and GLIST showing an incorrect unconfirmed expiry.
2019-11-11 21:20:55 -05:00
Matt Schatz 661b320d23 Look up unconfirmedexpire from the correct module.
- NickServ INFO and GLIST were looking in the wrong module.
2019-11-11 19:15:54 -07:00
Adam ae7706ae55 Bump for 2.0.8-git 2019-11-02 20:59:02 -04:00
Adam 1dee851207 Release 2.0.7 2019-11-02 20:44:48 -04:00
Adam 9c91d386e4 docs: update Changes 2019-11-02 20:43:18 -04:00
Adam 3e4d87051b inspircd3: remove CoreExport from IRCDMessageKick 2019-11-02 20:24:21 -04:00
Robby 26975fc011 Rename a few instances of 'services' to 'stats' in stats.standalone.example.conf and irc2sql.example.conf. 2019-11-03 00:50:37 +01:00
Adam c15dc49994 ns_recover: add privilege for admins to recover other users 2019-10-14 13:13:08 -04:00
Peter Powell 14ee76a0ad Fix various typos. 2019-09-23 14:48:49 +01:00
Peter Powell 4465c67790 Update the supported InspIRCd versions in the README. 2019-09-23 13:23:02 +01:00
Peter Powell 20e0fa33fc Sort message handlers alphabetically. 2019-09-23 13:23:02 +01:00
Peter Powell 7e76daf39f Add the InspIRCd v3 module to the example configs. 2019-09-23 13:23:02 +01:00
Peter Powell 2ee63f0f68 Handle/send 1205-style PING/PONG messages. 2019-09-23 13:23:02 +01:00
Peter Powell c35029fa2f Parse 1205-style mode lists for CAPAB CHANMODES/USERMODES. 2019-09-23 13:23:02 +01:00
Peter Powell bae8987ec1 Add a handler for the IJOIN command. 2019-09-23 13:23:02 +01:00
Peter Powell 470d4d1a97 Update for the 1205 channel METADATA syntax. 2019-09-23 13:23:02 +01:00
Peter Powell 78bac905c2 Update for the 1205 FJOIN syntax. 2019-09-23 13:23:02 +01:00
Peter Powell d88d8e940e Update for the 1205 KICK syntax. 2019-09-23 13:23:02 +01:00
Peter Powell b2c3775b58 Update for the 1205 INVITE syntax. 2019-09-23 13:23:02 +01:00
Peter Powell b311248bed Update for the 1205 SERVER syntax. 2019-09-23 13:23:02 +01:00
Peter Powell f7f45b4e2b Update for the 1205 FTOPIC syntax. 2019-09-23 13:23:02 +01:00
Peter Powell 3cad3514f1 Remove the TOPIC command handler.
This legacy compat command was removed in the 1205 protocol.
2019-09-23 13:23:02 +01:00
Peter Powell 1020ca47bd Remove the JOIN command handler.
This legacy compat command was removed in the 1205 protocol.
2019-09-23 13:23:02 +01:00
Peter Powell 48dbb70ecc Use the SINFO command instead of the old VERSION command. 2019-09-23 13:23:02 +01:00
Peter Powell ae16206f0c Use NUM instead of PUSH for sending numerics to clients. 2019-09-23 13:23:02 +01:00
Peter Powell 7045f206af Require the 1205 (3.0+) server protocol. 2019-09-23 13:23:02 +01:00
Peter Powell 67bd3e44c0 Remove the dependency on the inspircd12 module. 2019-09-23 13:23:02 +01:00
Peter Powell 264981fb1b Mark inspircd3 as being the InspIRCd 3 module. 2019-09-23 13:23:02 +01:00
Peter Powell 47d471c53d Make a copy of the InspIRCd v2 module for v3. 2019-09-23 13:23:02 +01:00
Peter Powell e43bc49ba7 Update the core message parser to allow parsing IRCv3 message tags. 2019-09-23 13:20:07 +01:00
Robby d9de4ddd82 Insert a new line between the subject and message body when sending mail.
Required for RFC 2822 compliancy.

Reported by jrmu via IRC.
2019-08-24 07:37:35 +02:00
Adam 8f7f4b1593 Merge pull request #244 from clem16/2.0
Fixed stupid simple typos.
2019-08-18 20:37:00 -04:00
Clem Morton fc64c0c6dd Fixed stupid simple typos.
Fixed stupid simple type, changed "bot not both" to "but not both"
2019-08-18 16:46:50 -06:00
Robby 03d065e952 Add hide_status as an available option to nickserv.example.conf.
Also improve the hide_* descriptions slightly.
2019-08-04 23:32:52 +02:00
Peter Powell 77a52eec7c Fix the version binary colliding with the C++20 <version> header. 2019-07-05 12:17:37 +01:00
Robby 523a586176 Fix globops logging if there is no predefined sender. 2019-05-10 05:50:18 +02:00
Robby af32a14fc1 Config files: Fix some typos, bring stats.standalone.example.conf up to par with example.conf, etc. 2019-04-05 03:11:39 +02:00
Romain Rivière 5c8548040a Log channel memo deletions 2019-03-30 22:17:00 -04:00
Adam 6a42c1a4f3 Merge pull request #240 from SaberUK/2.0+bot
Mark pseudoclients as bots on InspIRCd if the bot mode exists.
2019-03-30 22:10:44 -04:00
Peter Powell 0defcda8d0 Reset the default modes on CAPAB START. 2019-03-30 20:09:34 +00:00
Peter Powell f6ee88c42a Mark pseudoclients as bots on InspIRCd if the bot mode exists. 2019-03-30 12:11:31 +00:00
Robby 34f65e3266 Update enc_bcrypt with upstream crypt_blowfish 1.3 changes.
Also reverted the URLs in the header to the original ones provided by upstream.
2019-03-14 16:53:52 +01:00
Robby 02ac3a403c Fix the ChanServ SET SUCCESSOR syntax to show that a nickname is optional. 2019-03-06 03:34:25 +01:00
Adam e1e840a87d Merge pull request #239 from SaberUK/2.0+set
Fix missing braces in cs_set.
2019-03-05 08:10:04 -05:00
Peter Powell eb66f9eda0 Fix missing braces in cs_set. 2019-03-05 11:29:45 +00:00
Robby a4c37a373a Update the dutch language file. 2019-02-28 04:44:37 +01:00
Robby bca9b4ce83 Regenerate the language files. 2019-02-28 03:05:07 +01:00
Robby a2446b8d4b Merge pull request #224 from genius3000/2.0+deoper_superadmin
Ensure SuperAdmin isn't left on when de-opering
2019-02-14 04:41:27 +01:00
Robby e567cfda36 Improve the help text for ChanServ SET SUCCESSOR. 2019-02-14 02:41:57 +01:00
Adam 961a9bc506 Merge pull request #221 from SaberUK/2.0+uplink
Make it more clear where the uplink config goes.
2019-02-09 17:37:41 -05:00
Bram Matthys da6e2730c2 Allow post-handshake SASL in UnrealIRCd 4.2.2 and up.
This updates the unreal4 protocol module to work with both pseudo-id's
and real UID's. Something that will also be necessary once UnrealIRCd
gets rid of pseudo-id's altogether.
2019-02-09 17:10:23 -05:00
Robby 2b8072bf80 Remove a few more unnecessary fuzzies in the language files. 2019-01-24 18:04:23 +01:00
Robby 49cea76841 Remove an unnecessary fuzzy in the french language file. 2019-01-24 17:30:17 +01:00
Robby e1c8aa0dbc Update the language files.
- Regenerated the language files.
- Made some corrections to the french language file.
2019-01-24 15:36:50 +01:00
Adam 2546e865e2 Merge pull request #233 from genius3000/2.0+typofix
Fix typo in CS enforce help reply.
2019-01-21 19:14:10 -05:00
Matt Schatz d6af21e0d9 cs_enforce: fix typo in help. 2019-01-20 21:25:07 -07:00
Dragone2 18522f7fc8 Fixed some misspellings in Italian Translation 2019-01-03 21:46:52 -05:00
Adam 4c167bed69 Merge pull request #223 from SimosNap/webcpanel
Fixed NickServ set access from webcpanel
2019-01-03 21:34:00 -05:00
devel 32a21679fb Fixed NickServ set access from webcpanel 2019-01-03 21:33:02 -05:00
Adam a5eaf6fc49 Merge pull request #225 from genius3000/2.0+away_msg
Handle S2S AWAY messages with a timestamp
2019-01-03 21:30:44 -05:00
k4bek4be 9d7245bded Polish translation reworked and completed. 2019-01-03 21:20:34 -05:00
Adam 02fb4b67cf Merge pull request #228 from SaberUK/2.0+casemap
Send the casemap as part of CAPAB CAPABILITIES on InspIRCd.
2019-01-03 21:10:31 -05:00
linuxdaemon cf44418e10 Allow multiple IP addresses in extforward_ip separated by spaces 2019-01-03 21:07:01 -05:00
Robby 6fbb7cffe9 Update copyright to 2019.
This was done with:
find docs/ include/ language/ modules/ src/ *.* Config -exec sed -i 's/-20.. Anope Team/-2019 Anope Team/i' {} \;
2019-01-01 17:43:35 +01:00
Robby b279863acb Update most URLs to use HTTPS if available, and fix some dead ones too. 2018-11-10 15:15:05 +01:00
BoGu5 9e7dadb967 docs/FAQ: Fixed 1.9 to 2.0 in 2.0 branch 2018-11-10 13:07:35 +01:00
Robby 9069bf4e2f Merge branch 'TheMythPT-patch-2' into 2.0
Update chanstats.example.conf

Missing permissions that otherwise allow any registered user to turn on/off chanstats option to any other user
2018-10-28 16:42:17 +01:00
Vitor e85b0a5f68 Update chanstats.example.conf
Missing permissions that otherwise allow any registered user to turn on/off chanstats option to any other user
2018-10-28 16:35:47 +01:00
Peter Powell 195eff9c04 Send the casemap as part of CAPAB CAPABILITIES on InspIRCd.
This is technically part of the 1205 protocol but it is entirely
backwards compatible so older versions will not be negatively
affected by this.
2018-10-27 19:11:38 +01:00
Robby 42aa330db3 ns_set: Log email address change requests when confirmemailchanges = yes 2018-09-11 01:21:19 +02:00
Matt Schatz 1e9d959857 Handle S2S AWAY messages with a timestamp
InspIRCd 2.0 sends a timestamp in its S2S AWAY message since
https://github.com/inspircd/inspircd/commit/b1002b7df55f1aec5bfce48ecd07d6d326174c95
Syntax of `AWAY <timestamp> :<away msg>`
Catch this message and remove the timestamp parameter before
sending it to the core AWAY handler.
2018-07-20 09:39:47 -06:00
Matt Schatz 38721993f1 Ensure SuperAdmin isn't left on when de-opering 2018-07-14 17:38:37 -06:00
Peter Powell 1b782235c4 Make it more clear where the uplink config goes. 2018-06-19 11:15:13 +01:00
Adam 368300d319 Merge pull request #222 from bonnedav/patch-2
Unreal4 does not allow SWHOIS to come from a user source.
2018-06-12 12:36:19 -04:00
Adam 94e10d52fb anopesmtp: fix previous commit 2018-06-12 10:46:55 -04:00
Adam d25c8c169e Merge pull request #203 from MrGadget1024/patch-1
Fix mail sending for reliability.
2018-06-12 10:39:17 -04:00
Vitor 67b7fed9ed example.conf: update example link block for Unreal 4 2018-06-12 10:36:39 -04:00
Dragone2 e32a8dbbe5 Update Italian translation 2018-06-12 10:29:34 -04:00
Dragone2 281edf8475 cs_seen: fix for translations being ignored
These strings: " but %s mysteriously dematerialized.", ". %s is still online." and ", but %s mysteriously dematerialized." weren't translated by the method Anope::printf().
2018-06-12 10:22:20 -04:00
Adam ce7c266651 Merge pull request #214 from genius3000/2.0+fix_insp20_proto
Fix for bug 1712
2018-06-12 10:16:45 -04:00
Adam c1166e3618 Merge pull request #216 from SaberUK/2.0+oline
Disable the os_oline module by default.
2018-06-12 10:08:16 -04:00
Adam 8294c94b95 Merge pull request #217 from genius3000/2.0+ns_set_message
Show NickServ SET MESSAGE in help when 'useprivmsg' is enabled
2018-06-12 10:07:55 -04:00
Adam 6f09b703dd Merge pull request #218 from miwob/modernize
Update ircd-hybrid protocol module to support latest version of ircd-…
2018-06-12 10:01:27 -04:00
miwob 466e5be741 Update ircd-hybrid protocol module to support latest version of ircd-hybrid better 2018-06-12 08:40:57 -04:00
Adam 32076c099c Merge pull request #219 from genius3000/2.0+set_help_hide
Check for 'hide' flag in commands in (bs,cs,ns)_set HELP
2018-06-12 08:39:24 -04:00
Adam 216b96aa57 Merge pull request #220 from genius3000/2.0+ns_ungroup_log
Log NickServ ungroup
2018-06-12 08:16:35 -04:00
bonnedav 6d592e2a0f Unreal4 does not allow SWHOIS to come from a user source. 2018-06-12 00:00:00 -06:00
Matt Schatz feb5a4d935 Log NickServ ungroup 2018-05-08 16:24:02 -06:00
Robby e03ae0cd85 Update copyright to 2018.
This was done with:
find docs/ include/ language/ modules/ src/ *.* Config -exec sed -i 's/-20.. Anope Team/-2018 Anope Team/i' {} \;
2018-04-25 19:22:13 +02:00
Robby 901fc3e40f Document that negating is possible for commands and privs in opertype blocks. 2018-04-25 18:59:09 +02:00
Robby 5683f45925 Clarify available tokens for the email templates. 2018-04-25 16:32:12 +02:00
Robby bafc17472e Add 'n' email token for use in the emailchange template, this token gets replaced with the display nickname. 2018-04-25 16:15:16 +02:00
genius3000 7638c7a884 Check for 'hide' flag in commands in (bs,cs,ns)_set HELP
This code is duplicated from help.cpp to (bs,cs,ns)_set.cpp for listing
the available SET commands. The check for the 'hide' flag was missed
and this incorrectly listed commands that were configured as hidden.
2018-04-02 04:02:23 -06:00
Adam d25722ddd0 m_httpd: make http headers case insensitive 2018-03-26 20:21:06 -04:00
genius3000 750d1009ec Show NickServ SET MESSAGE in help when 'useprivmsg' is enabled 2018-03-10 15:22:02 -07:00
Peter Powell b8e7960ff6 Disable the os_oline module by default.
This only works on UnrealIRCd 3.2 (which has been EOL for over a
year now) and regularly confuses users who think that "your IRCd
does not support OMODE" is an error they need to fix.
2018-03-03 14:26:33 +00:00
genius3000 ff878bbda8 Allow empty values in InspIRCd 2.0 mode strings within CAPABILITIES
Skipping over empty values in the commasepstream can put the mode adding
logic out of order (eg. ignoring the first two tokens when they are the
needed tokens). Most modes are already added by being explicitly checked
for, but the "unknown" or "extra" modes are added here.
2018-02-13 20:35:37 -07:00
Adam 1baf774647 ns_group: send login on successful group too 2018-02-10 08:36:12 -05:00
Adam 772410d974 Merge pull request #211 from Dragone2/patch-5
Update for Italian translation
2018-02-02 22:48:00 -05:00
Adam 7ceb4426c7 m_dns: fix notify socket always being ipv6 2018-02-02 22:39:46 -05:00
Dragone2 10c7a9ff94 Update for Italian translation
Update for the old Italian translation of Anope, with new translated strings, correction of grammatical errors and other minor changes.
2018-02-03 00:19:21 +01:00
Adam b3c4b28a67 Merge pull request #197 from genius3000/2.0+fix_insp_rlines
2.0: Fix sending incorrect RLines to InspIRCd
2018-01-12 12:09:50 -05:00
nekoswag 0da4150283 Update chanserv.example.conf (#206) 2017-12-30 15:32:22 -05:00
Chris Langsenkamp 5920f1b59c Fix mail sending for reliability.
After sending the "\r\n.\r\n" after the mail payload, smtp_send_email was not waiting for the mail server to complete post-processing and respond with "250", but was sending "QUIT\r\n" immediately and dropping the connection.  Mail server may kill the transaction if it can't send the "250" (socket closed).  The changes proposed completes the mail transaction by reading for the 250 and in smtp_disconnect steps through a proper quit sequence by waiting for the 221 server response.

I discovered this by including the --debug option in services.conf sendmailpath, which invoked logging in smtp_send and that slowed it down enough for the mail server to return the 250 and complete the transaction.
2017-12-11 12:41:31 -05:00
Adam 68fcb1af93 Bump for 2.0.7-git 2017-12-11 11:47:06 -05:00
Adam 0574de2d22 Anope 2.0.6 Release 2017-12-11 11:46:10 -05:00
Adam c9c53dbe61 Add README.md, for github 2017-11-19 17:28:05 -05:00
Adam a084245822 README: remove some outdated links 2017-11-19 17:28:05 -05:00
Robby 77e3f062da Update the dutch language file. 2017-11-17 23:56:15 +01:00
genius3000 0e14adcb0f Fix sending incorrect RLines to InspIRCd
Currently a Regex AKILL is sent with a malformed mask to InspIRCd as an RLine.
InspIRCd expects a mask of 'n!u@h\sr', so we need to remove the enclosing
slashes (/.../), change the '#' separator to '\s', and change any literal
spaces to '\s' and then it creates a proper RLine.
2017-10-14 08:36:35 -06:00
Adam 8bb3067e42 Update Changes and Changes.conf 2017-10-12 19:58:02 -04:00
Adam 0c469abe4a Call OnDelChan prior to unsetting extensibles
cs_set uses this to set -P on permanent channels if they are persistent.

Also move similar event in nickcore/nickalias destruction
2017-10-12 19:37:06 -04:00
Adam d63e32a579 No longer try to create persistent channels on the fly
Change initial channel creation to on post init so it will be part of
the burst.
2017-10-12 19:30:48 -04:00
Adam f13c450b93 Add post init event 2017-10-12 19:28:34 -04:00
Adam e95c07291a unreal4: send sjoin with empty users in SendChannel 2017-10-12 19:28:12 -04:00
Adam 2963fc0a1d unreal4: send modes in sjoin 2017-10-12 19:27:51 -04:00
Adam 5d309d46e1 plexus: fix overriding SendSVSLogin 2017-10-10 21:19:23 -04:00
Adam 2e7fcd3098 Merge pull request #199 from syzop/2.0+unrealsaslmechs
Advertise SASL mechanisms to UnrealIRCd servers.
2017-10-09 11:29:55 -04:00
Adam 884759aed4 Merge pull request #200 from syzop/2.0+saslbydefault
Load sasl module by default.
2017-10-09 11:23:09 -04:00
Bram Matthys 2ec65023a6 Load sasl module by default. 2017-10-09 10:31:21 +02:00
Bram Matthys 0093f3fa44 Advertise SASL mechanisms to UnrealIRCd servers. 2017-10-09 10:22:50 +02:00
Adam 2ad76278dd Use full path to file for conf.cpp file could not be opened error message 2017-08-05 18:31:57 -04:00
Tim Gunter 23e59d9f2c Allow calls to XMLRPC to impersonate supplied user, if online 2017-07-28 09:08:40 -04:00
Adam 3cb9e0b97c m_xmlrpc: fix incorrect string find usage 2017-07-24 20:30:34 -04:00
Adam 0b7b6d9d6d ns_group: don't require a user to group 2017-07-24 10:04:07 -04:00
Adam 56e6efbe8f Default require_oper to true. Fixes os_oper unserializer because it doesn't set it. 2017-07-02 18:03:36 -04:00
Adam feed624cdc webcpanel: rate limit login attempts 2017-06-05 18:44:48 -04:00
Adam 1a6f42b994 webcpanel: escape values in template_fileserver
Remove other escapes to prevent double escape.

Not all replaced values were escaped, such as replies from commands.
2017-06-05 10:11:22 -04:00
Adam 04f49225c9 httputils: escape ampersand too 2017-06-05 10:10:58 -04:00
Adam b18d1a69b6 Merge pull request #174 from Techman-/2.0+inspsasl
InspIRCd: Send CHGIDENT/CHGHOST on SVSLOGIN
2017-05-27 12:29:12 -04:00
Adam 0ace685597 Merge pull request #188 from key2peace/2.0
IPv6 support for m_dnsbl and sockaddrs::reverse()
2017-05-27 09:58:34 -04:00
Alexander Maassen bfcfd0b727 Moved m_dns's reverse ip method to sockaddrs::reverse().
Updated m_dnsbl to support ipv6.
2017-05-27 09:56:18 -04:00
Adam 087f1cb359 m_dnsbl: fix exempts, allow cidrs, default exempt 127.0.0.0/8 2017-05-17 08:51:57 -04:00
Adam 010d20198e m_regex_posix: use REG_ICASE 2017-03-30 19:10:31 -04:00
Adam 953e804231 example.conf: disable regexengine directive by default 2017-03-30 17:02:36 -04:00
Adam c656fe0694 regchannel: fix compile warning from previous commit 2017-03-27 22:25:49 -04:00
Adam fb3ec7a897 cs_akick: don't show channel doesn't exist message in enforce from adding akicks 2017-03-27 21:41:35 -04:00
Adam 274658f955 Fix autokick destructor to properly remove channel references from accounts 2017-03-27 21:14:32 -04:00
Adam 7621306f4b example.conf: update to reflect deprecated status of older encryption modules 2017-03-26 18:34:03 -04:00
Adam b804867105 Remove weird warning in nickserv help which for some reason assumes admins' abuse policies 2017-03-23 20:05:09 -04:00
Adam f8f1550c31 Merge pull request #187 from miwob/new-mode
Add channel mode 'u', and 'L' to hybrid protocol module; Remove usele…
2017-03-19 18:56:06 -04:00
Adam 0fcc66711b m_sasl: pass module to logger 2017-03-19 18:55:32 -04:00
Adam 8d9574e306 readme: change minimum supported hybrid version to 8.2 2017-03-19 18:55:19 -04:00
miwob 6cb17c734c Add channel mode 'u', and 'L' to hybrid protocol module; Remove useless CAPABs that are mandatory for some years now. 2017-03-19 12:02:22 +01:00
Adam 3545e8e383 Fix ns_keep_modes default option in nickserv.conf 2017-03-18 15:30:17 -04:00
Adam 3c18e02b0b logger.cpp: fix variable shadow warning 2017-03-16 21:37:34 -04:00
Adam b831cd8a36 Include ip for web clients in command log messages for source 2017-03-16 20:23:57 -04:00
Adam 516ab164f6 redis: check for socket errors when loading database on startup 2017-03-16 20:13:56 -04:00
Adam b2d028533d cs_xop: fix showing alternative access methods in help 2017-03-15 21:44:05 -04:00
Adam a88d9cb1f0 modes.cpp: correct usage of format string passed to SendMode 2017-03-08 19:58:25 -05:00
Adam b57ef5d2c7 db_redis: don't crash if destroying an object with no type 2017-03-08 16:23:30 -05:00
Adam 1a96390826 unreal4: set +xt on chghost as unreal does 2017-03-01 17:44:05 -05:00
Adam 60339edf40 cs_set: don't lower ts from own clients joining 2017-02-21 14:44:33 -05:00
Adam 6990c692d6 Unwrap list modes too in cs_mode, and fix clear on virtual modes to show an error 2017-02-21 12:36:59 -05:00
Adam 98e62b4032 Fix logging in cs_mode set 2017-02-21 12:35:51 -05:00
Adam a1d7d42d6a Unwrap mode changes in RemoveMode before checking if it is set, fixes os_mode not being able to remove extbans etc 2017-02-21 12:35:20 -05:00
Adam 3f7c0829ef os_forbid: match forbids exact on add/del 2017-02-21 09:59:10 -05:00
Adam 46d8af781d Verify configured servername and uplink password are valid 2017-02-21 08:19:03 -05:00
Adam 67b7c8bd7d os_logsearch: fix quick match 2017-02-12 16:46:13 -05:00
Adam 21486e2c81 Merge pull request #185 from fallen/2.0
Update French language file
2017-02-06 14:20:40 -05:00
Adam 29ac40b584 ns_set_misc/cs_set_misc: send syntax help too 2017-02-06 14:06:55 -05:00
Adam dde444ed0e protocol/inspircd12: set +x on /hs off 2017-02-06 13:15:01 -05:00
Adam 9b6c209c80 bs_badwords: allow opers with botserv/administration to list/clear badwords too 2017-02-04 20:21:40 -05:00
Yann Sionneau 3c7d67c8cd Update French language file
- translate "nick" to "pseudo"
- remove "XOP" arg from set secureops
2017-02-04 23:47:05 +01:00
Adam c730291762 logger: some log events rely on empty sources 2017-01-23 08:03:51 -05:00
Adam c593661f40 Anope 2.0.6-git 2017-01-22 17:04:20 -05:00
Adam a9bf251886 Anope 2.0.5 Release 2017-01-22 16:09:36 -05:00
Adam beac29b1d0 m_sasl: don't allow logging into unconfirmed accounts 2017-01-22 16:00:06 -05:00
Adam 35d6437d45 Remove old language strings from lang files 2017-01-20 09:45:25 -05:00
Robby 76ce8ece1a Cleanup some excess whitespaces and tabs, and fix a few typos along the way. 2017-01-17 05:03:25 +01:00
Adam 464093d36e Regenerate language files 2017-01-16 18:59:30 -05:00
Adam 71bb3fefcc Update Changes 2017-01-16 18:58:30 -05:00
Adam 1f6f9f5dbb Revert "Remove efnetrbl from example dnsbl configuration" 2017-01-16 18:45:08 -05:00
Adam 34bf21f7d1 Correct a couple expiry time checks from DoTime() 2017-01-16 18:42:29 -05:00
Adam 847dfd9523 Merge pull request #182 from genius3000/2.0+protocol_match_name
protocol/inspircd: Match servername as well on ENCAP
2017-01-16 18:33:09 -05:00
Adam a96e40e249 Merge pull request #183 from SaberUK/2.0+cmake
Don't give misleading instructions when running CMake fails.
2017-01-16 18:32:34 -05:00
Robby 8656b65e39 Update copyright to 2017.
This was done with:
find docs/ include/ language/ modules/ src/ *.* Config -exec sed -i 's/-20.. Anope Team/-2017 Anope Team/i' {} \;

Added missing copyright headers to files that didn't have it yet.
2017-01-16 03:13:25 +01:00
Robby 39422beaef Update the dutch language file. 2017-01-14 02:57:44 +01:00
Peter Powell 6d29538346 Don't give misleading instructions when running CMake fails. 2017-01-13 22:02:00 +00:00
Adam bdf4650ff8 m_dnsbl: widen allowed reply range to 127.0.0.0/8 2017-01-12 13:26:29 -05:00
Adam 074bde5ccc db_sql: run table creation queries during import synchronously too 2017-01-11 20:44:55 -05:00
Adam a4f7d847ab unreal4: use SENDUMODE instead of GLOBOPS 2017-01-11 20:42:20 -05:00
Adam 5beb338247 Remove efnetrbl from example dnsbl configuration 2017-01-08 15:48:54 -05:00
Adam 7b1154de69 ns_register: notify users of unconfirmed accounts on register when there is no user too 2017-01-08 13:08:04 -05:00
Adam 46aeb8b70b os_list: show number of channels listed, too 2017-01-07 18:09:14 -05:00
Adam fe6271dffb ngircd: move metadata non-exietent user log message to debug 2017-01-07 18:04:07 -05:00
Adam 7cede5bb60 os_list: also allow patterns in nick!user@host#realname form 2017-01-07 18:03:53 -05:00
Adam 2b7f0084b7 Move log messages for status mode change for unknown user to debug 2016-12-22 20:59:04 -05:00
Adam ec7ce09ef4 Make User::Mask behave more like 1.8 2016-12-22 20:52:43 -05:00
Adam 574c8dfbc7 Fix previous commit, deleting sessions removes it from the map which invalidates the reference 2016-12-21 10:35:57 -05:00
Adam 4381031994 m_sasl: log hostname/ip, if provided 2016-12-19 19:03:10 -05:00
Adam b3010c3c6b logger: log source nick if there is no user or account 2016-12-15 08:24:40 -05:00
Adam d092f5e7c8 Fix detecting if chghost/chgident is loaded on inspircd and don't send them unless they are 2016-12-11 09:43:22 -05:00
Adam 358f46b8ae Fix setting kill quick in webcpanel 2016-12-11 09:34:37 -05:00
Adam e5125c2c84 Allow nonconfirmed opers to confirm accounts 2016-12-11 09:24:52 -05:00
Adam 65db59b3ec Remove unnecessary functions from ngircd that duplicate the default behavior, fix a few typos in comments 2016-12-10 23:28:50 -05:00
Adam 95cd7a6aee inspircd12: fix mode handler to handle opers changing other users umodes correctly 2016-12-01 19:10:46 -05:00
Adam 12515fd2c1 cs_access: fix typo 2016-12-01 19:08:39 -05:00
Adam 437a6dbb29 os_logsearch: optimize non wildcard searches, allow regex 2016-11-22 19:44:25 -05:00
Adam d96ca9b824 os_logsearch: add a hard max limit and make the limiter smarter 2016-11-22 19:35:11 -05:00
genius3000 aefde6e44d protocol/inspircd: Match servername as well on ENCAP 2016-11-22 02:26:41 -07:00
Adam 23a0628fba db_old: convert languages to UTF-8 encoded version 2016-11-11 13:30:22 -05:00
Adam ef9c69f99d Don't apply secureops to users with chanserv/administration privilege, not protected 2016-11-05 12:06:26 -04:00
Adam 8be331618c ns_group: allow userless execution 2016-11-05 11:07:02 -04:00
Adam a5fdf7c546 irc2sql: fix changing status modes to update ison modes 2016-11-05 10:36:28 -04:00
Adam dba19d839a cs_access: fix negative access to apply to the -1/0 special casing 2016-11-05 10:35:47 -04:00
Adam 7453c71c00 irc2sql: fix crash on shutdown with no sql 2016-11-05 10:34:25 -04:00
Adam f09ea316dd irc2sql: update max topic len to 512 2016-11-05 10:34:09 -04:00
Adam ac0f3c5ccf m_mysql: null empty columns instead of setting to '' 2016-11-04 22:56:15 -04:00
Adam 76ea111980 irc2sql: fix a couple SQL errors 2016-11-04 22:07:00 -04:00
Adam 9f9183afc4 help: always use command name from config, which may be a different case 2016-11-03 23:23:57 -04:00
Adam ef32505633 dns: set error to REFUSED when there are no answers 2016-11-03 23:15:07 -04:00
Adam 304494322f Don't apply secureops to protected users 2016-11-03 23:08:49 -04:00
Adam 9e510cd0d9 Fix userless /ns set email, #1689 2016-11-03 23:04:22 -04:00
Adam 0f49d1051a Don't try to include files with empty paths 2016-11-03 22:58:50 -04:00
Adam 4b97a9b13f Fix crash loading enc_old prior to the proto mods 2016-11-03 22:54:35 -04:00
Adam 07f72a3122 os_list: fix regex matching 2016-10-25 14:35:36 -04:00
Adam f4543edfe2 plexus: add noop and sasl support 2016-10-16 18:52:40 -04:00
Adam 095751363d db_sql: don't update objects pending creation as it duplicates it 2016-10-16 18:51:58 -04:00
Adam 1b67b97e93 ns_maxemail: equals_ci for comparing emails 2016-10-06 14:59:22 -04:00
Adam d4bf0957d1 inspircd20: specifially add channel modes official-join and operprefix as status modes, sometimes they are sent in CAPAB without a status prefix which causes them to be added as parameter modes 2016-10-04 21:45:45 -04:00
Adam 99acdcf168 cs_mode: check chanserv privilege too for status modes on set 2016-10-04 21:28:43 -04:00
Adam e95950ee26 cs_mode: make override logging of mode set more reliable 2016-10-04 21:13:43 -04:00
Adam fc0171fb40 memoserv: always use display for memo source 2016-09-30 21:03:35 -04:00
Adam 1c82697ccb Revert "Always use display for memo source"
This reverts commit d8a945b1a6.
2016-09-30 20:52:38 -04:00
AlphaTech f3bb46a9f5 MemoServ - Read All 2016-09-25 17:27:30 -04:00
Michael Hazell 3b62c8f3e2 InspIRCd: Send CHGIDENT/CHGHOST on SVSLOGIN 2016-09-25 14:50:03 -04:00
Adam 4d054aa2b2 Merge pull request #173 from genius3000/2.0-remove-expiretimeout-cs_seen
Thanks
2016-09-25 14:38:16 -04:00
Adam 3a8ff5d456 Merge pull request #177 from attilamolnar/2.0+sqliteleak
m_sqlite: Fix possible memory leak when opening a database fails
2016-09-25 14:37:01 -04:00
Adam 0b783b66a4 Merge pull request #178 from Techman-/2.0+resv
Thanks
2016-09-25 14:36:46 -04:00
Adam 0c7050c506 Merge pull request #175 from genius3000/2.0-email-date_header
Added a Date field to the Header
2016-09-25 14:35:43 -04:00
Adam d02b3c1c45 Merge pull request #176 from Alef-Burzmali/2.0+update-fr2
Thanks
2016-09-25 14:33:49 -04:00
Adam d8a945b1a6 Always use display for memo source 2016-09-14 17:24:06 -04:00
Adam b50fbec705 cs_seen: allow unregistered users to use 2016-09-13 12:36:48 -04:00
Adam d488efdcfe ms_cancel: cleanup, consider accounts by equiality instead of sender name to account name 2016-09-06 14:46:19 -04:00
Adam 13c5eec00a m_ssl_openssl: allow certificate chain files to be used 2016-09-05 10:41:52 -04:00
Michael Hazell 39eb9f8cfc ratbox: fix RESVs
Also, enable channel support because it wasn't specified already and point charybdis to these methods instead.
2016-09-04 04:05:11 -04:00
Thomas Fargeix 83c2f8e970 Update French language file. 2016-08-19 21:33:57 +02:00
genius3000 e23cf0c221 Added a Date field to the Header 2016-08-17 10:22:44 -06:00
Attila Molnar de174149f7 m_sqlite: Fix possible memory leak when opening a database fails 2016-08-17 14:09:05 +02:00
genius3000 663e79e4d3 Remove 'expiretimeout' from chanserv.example.conf
As seen within this commit: https://github.com/anope/anope/commit/22658d63bdb1e52a66f4514af45fa55ca5891345
'expiretimeout' is no longer set within cs_seen and I can't see it used elsewhere to be needed in the config.
2016-08-08 23:39:19 -06:00
Adam 2a5e7827bd Merge pull request #172 from bonnedav/patch-1
Thanks
2016-08-08 09:34:14 -04:00
bonnedav 9c0b843665 Remove unused commands from oper config. 2016-08-08 02:41:42 -06:00
Adam 8fdfa6e094 Fix #1684 more, can have non-user sources for encap sasl 2016-07-25 22:27:30 -04:00
Adam dad4be050b cs_xop: remove unused code 2016-07-25 19:35:19 -04:00
Adam 937b0e7185 db_old: fix warnings 2016-07-25 19:34:59 -04:00
Adam db4f38bcf5 Bump for 2.0.5-git 2016-07-23 17:37:05 -04:00
Adam c2e09fdaea Anope 2.0.4 Release 2016-07-23 16:26:14 -04:00
Adam 01768bc73e Update Changes.conf 2016-07-23 16:25:37 -04:00
Adam c18eedec18 ns_set: clear last modes before unserializing them 2016-07-23 16:20:54 -04:00
Adam 0e0615c6fe Note Windows installer fixes in changelog 2016-07-23 16:17:33 -04:00
Adam 5bd3fde79b cs_set: clear last modes before unserializing them 2016-07-23 16:17:21 -04:00
Adam 647f8cd4e6 Add/fix various checks on source user existing in the protocol modules 2016-07-23 15:47:33 -04:00
Adam b2e25db159 Merge pull request #171 from Techman-/2.0+charybdis-resv-fixes
charybdis.cpp: Properly support RESVs
2016-07-23 15:38:26 -04:00
Adam 9f9371531d Fix making directories from the Windows installer 2016-07-23 15:22:54 -04:00
Michael Hazell b578ed2544 charybdis.cpp: Properly support RESVs
Properly support RESV and UNRESV in Charybdis, and improve RESV setting for pseudoclients when bursting.
2016-07-21 23:27:20 -04:00
Adam 0a7f167060 m_dns: accept unpacking the root domain, and don't consider exceptions from nameserver/additional record unpacking as fatal to query parsing 2016-07-19 21:17:58 -04:00
Adam d427772bd3 os_defcon: find module by name, it might not be loaded yet 2016-07-10 20:51:03 -04:00
Robby b2d670298b Update the dutch language file. 2016-07-07 16:07:24 +02:00
Adam 6b646fa1f8 Update Changes 2016-07-03 13:57:11 -04:00
Adam 72269c44e5 Merge pull request #170 from Zoddo/charybdis/join0
Thanks
2016-07-03 13:47:49 -04:00
Adam 3b2366e4ba Merge pull request #169 from SaberUK/2.0+which
Use "cmake --version" instead of "which cmake" to detect CMake.
2016-07-03 13:46:41 -04:00
Adam 257a8a9a24 ns_maxemail: optionally remove gmail aliases 2016-07-03 13:42:18 -04:00
Adam 7a1d2e11dd chankill: don't add duplicate akills 2016-07-03 13:31:12 -04:00
Adam 8dc687b657 #1682: store aftype with masks and include cidrs in GetNUHMask 2016-07-03 13:29:27 -04:00
Adam 18fc113984 #1681 update last realname always on signon 2016-07-03 13:06:06 -04:00
Adam 20c1a5d638 #1680: fix Anope::Duration with one year durations 2016-07-03 12:42:16 -04:00
Adam 8000ae0c0f #1677 apply sqlines even if the ircd doesn't on non opers 2016-07-03 12:36:34 -04:00
Adam 284d95bfe2 #1675: fix saset display to update the account name on the correct clients 2016-07-03 12:27:01 -04:00
Adam c7d5ee4bec Fix /ns confirm to set +r/accounts when appropriate 2016-07-03 12:17:44 -04:00
Adam 4c4cc0ded7 Fix xmlrpc notice call to return something to prevent m_xmlrpc from thinking it is a http 404 2016-07-03 12:08:21 -04:00
Adam 83f89bfece Clarify botserv repeat kicker message and allow setting repeat times to 1 2016-06-25 13:04:32 -04:00
Adam 7cf4245359 Enable -fno-delete-null-pointer-checks on GCC 6 2016-06-22 20:20:28 -04:00
Zoddo 9284441491 Handle /join 0 for ratbox & charybdis 2016-06-02 12:23:26 +02:00
Peter Powell 7592a6981b Use "cmake --version" instead of "which cmake" to detect CMake. 2016-05-21 17:54:33 +01:00
Adam 56b158ea43 Fix handling nick introduction collisions on unreal4 2016-05-20 21:18:34 -04:00
Adam 0143dafe51 Merge pull request #165 from sketchni/patch-1
Add the notice method to XMLRPC.
2016-04-22 10:17:41 -05:00
Adam a2dbcc620e Merge pull request #166 from jmdh/2.0-reproducible
Optionally strip variable build date from compiled program
2016-04-22 10:17:11 -05:00
Adam 9b5fdea8f2 Fix randomnews to work when there are more than newscount random news 2016-04-22 11:15:42 -04:00
Dominic Hargreaves fab07d6b75 Optionally strip variable build date from compiled program
To aid build reproducibility, don't include the build date/time if
-DREPRODUCIBLE_BUILD is defined.

Based on the patch provided by Alexis Bienvenüe in the Debian report.

Bug-Debian: https://bugs.debian.org/820152
Patch-Name: reproducible_datetime.diff
2016-04-21 23:08:12 +01:00
Sketch 1d198da436 Add the notice method to XMLRPC. 2016-04-20 15:41:23 +01:00
Adam 8b6e17fe7e Change access check in cs_updown to not allow actions on users with equal access 2016-04-16 18:14:23 -04:00
Adam 86484b6c2b Merge pull request #164 from SaberUK/2.0+extras
Remove references to cmake-bin which was removed ages ago.
2016-04-16 16:59:21 -05:00
Adam c14ae99d32 Merge pull request #163 from Zoddo/fix_sasl_reauth
Send new account name to the IRCd on SASL reauth
2016-04-16 16:59:00 -05:00
Adam cb0cda2f8d Missed channel deletion in ~ChannelInfo 2016-04-16 18:00:47 -04:00
Peter Powell 2af363755a Remove references to cmake-bin which was removed ages ago. 2016-04-16 13:05:44 +01:00
Zoddo 753b8dc989 Send new account name to the IRCd on SASL reauth 2016-04-15 10:49:30 +02:00
Adam d2ea1e7917 Merge pull request #160 from Zoddo/charybdis/fix_euid
Fix host on charybdis if there is no vhost
2016-04-14 19:18:14 -05:00
Adam a8f66578b1 Merge pull request #161 from Zoddo/charybdis/vhost_svslogin
Send vident/vhost in SVSLOGIN with SASL
2016-04-14 19:17:39 -05:00
Adam ca39aeb554 Merge pull request #162 from SaberUK/2.0+sasl
Remove support for DH-AES and DH-BLOWFISH.
2016-04-14 19:16:56 -05:00
Adam a941f9bde0 Remove memos from memoinfo more reliably 2016-04-14 20:15:53 -04:00
Peter Powell f4f6787c9c Remove support for DH-AES and DH-BLOWFISH.
These SASL mechanisms are considered insecure and should not be
used anymore.
2016-04-13 20:26:50 +01:00
Zoddo 82816cb206 Send vident/vhost in SVSLOGIN with SASL
Only charybdis seems to support that for the moment.
2016-04-10 18:24:25 +02:00
Zoddo 58f0c8c612 Fix host on charybdis if there is no vhost 2016-04-10 17:53:53 +02:00
Adam 21e1913c0f Fix subtle typo in command initializer list 2016-04-05 16:01:16 -04:00
Adam 79e7c3f98a Also defer channel deletion when processing sjoins 2016-03-19 16:21:40 -04:00
Adam 72127e1b00 Merge pull request #159 from Diftraku/2.0
proto/charybdis: Add support for MECHLIST
2016-03-17 17:15:56 -05:00
Toni Kaija ed47588087 proto/charybdis: Add support for MECHLIST 2016-03-17 15:13:11 +02:00
Adam 448967cefc Merge pull request #156 from SaberUK/2.0+sasl-mechlist
Implement support for SASL 3.2 mechanism lists.
2016-03-15 17:41:48 -05:00
Adam 979027138b Merge pull request #155 from SaberUK/2.0+sasl-reauth
Fix logging into accounts with SASL on servers that support reauth.
2016-03-15 17:40:26 -05:00
Robby 176e0e4f37 Update the dutch language file. 2016-03-09 22:42:45 +01:00
Adam b431d4dccf cs_clone: don't clone registered time 2016-03-08 19:49:30 -05:00
Adam 1b12b80b48 language: incrementing _nl_msg_cat_cntr is still required on some systems apparently (freebsd 10?). I don't know why. 2016-03-08 19:47:06 -05:00
Peter Powell 52fdc45597 Implement support for SASL 3.2 mechanism lists. 2016-02-28 16:36:43 +00:00
Peter Powell 91762524e2 Fix logging into accounts with SASL on servers that support reauth. 2016-02-28 13:22:19 +00:00
Adam 413b38b1c1 Fail sasl external auth immediately if cert is empty 2016-02-13 18:25:04 -05:00
Adam ecdccd6ad6 And use account here, user might be null 2016-02-13 18:19:47 -05:00
Adam e0fd118b3e Fix access path changes in ns_alist from earlier 2016-02-13 18:11:03 -05:00
Adam c10d7bdada Update chanserv secure help to reflect more accurately what it does 2016-02-13 14:41:23 -05:00
Adam 4e2ca31cf5 Rewrite access path system to be simplier and use recursion
Show where access is "from" in chanserv/status
2016-02-13 14:16:29 -05:00
Adam addd2a1987 Correct umode +I change in Changelog, is for unreal 2016-02-11 08:36:12 -05:00
Adam 4071487f80 Merge pull request #154 from SaberUK/2.0+inspfix
Fix a low risk privilege escalation exploit on InspIRCd with m_autoop.
2016-02-11 07:03:55 -06:00
Peter Powell 9c17c2d818 Fix a privilege escalation exploit on InspIRCd with m_autoop. 2016-02-10 08:56:23 +00:00
Adam dd9fcca45d Anope 2.0.4-git 2016-01-30 18:50:28 -05:00
Adam d9c0a13caf Anope 2.0.3 Release 2016-01-30 17:27:31 -05:00
Robby 5daa84c7f9 Update the dutch language file. 2016-01-30 23:26:32 +01:00
Adam b12669487f Allow /ms read to get a comma separated list of memo numbers as help describes. Show message if no memos could be displayed. 2016-01-30 16:54:20 -05:00
Robby 0e9a1e87d0 The default xop access for PROTECTME should really be SOP, not AOP. 2016-01-29 19:42:10 +01:00
Robby f118960a25 Update copyright to 2016. This was done with:
find include/ src/ lang/ docs/ modules/ *.* Config -exec sed -i 's/-20.. Anope Team/-2014 Anope Team/i' {} \;

Added missing copyright headers to files that didn't have it yet.
Fixed some whitespace and blank lines along the way.
2016-01-28 20:24:49 +01:00
Adam 5d6a71b6d2 Regenerate language files 2016-01-28 08:15:38 -05:00
Adam 23fab4ad06 Revert "Regenerate language files"
This reverts commit e955db6e85.
2016-01-28 08:15:24 -05:00
Adam 825dc5be46 Revert "Updated and fixed the Greek language."
This reverts commit f451c6cbac.
2016-01-28 08:14:58 -05:00
Robby b6fb6410c0 Update the dutch language file. 2016-01-27 19:14:12 +01:00
Robby 45dfea5ad9 Document m_xmlrpc_main opers 2016-01-27 18:04:55 +01:00
Adam d0a5316c67 Remove default session exception expiry time 2016-01-25 11:51:31 -05:00
Adam 382ab84938 Merge pull request #150 from westor7/patch-1
Updated and fixed the Greek language.
2016-01-25 10:31:47 -06:00
westor f451c6cbac Updated and fixed the Greek language.
Updated and fixed all the non-fuzzy languages items, previously all of them was incorrect.
Added new credits.
2016-01-24 17:20:00 +02:00
Adam 9645f53dc8 Update m_ssl_gnutls Windows library version to libgnutls-30 2016-01-23 22:25:19 -05:00
Adam 41802c28c6 Fix m_sql_oper to compile from the cleanup of the other day 2016-01-23 20:45:10 -05:00
Adam 97a13081e9 Fix typo in changes 2016-01-23 20:44:50 -05:00
Adam 38fcf15d62 Put maxlogins logic a few other important places 2016-01-23 10:53:32 -05:00
Adam 75dd784538 Fix hybrid to compile 2016-01-23 10:53:22 -05:00
Adam e955db6e85 Regenerate language files 2016-01-23 10:37:23 -05:00
Adam a434651e75 Update Changelogs 2016-01-23 10:36:04 -05:00
Adam 7d674726c2 Merge pull request #145 from miwob/style+copyright
Style+copyright
2016-01-23 09:19:08 -06:00
Adam be50211ae6 Merge pull request #149 from miwob/SendSQLine
Update SendSQLine() in hybrid's protocol module to use non-capsulatet…
2016-01-23 09:18:41 -06:00
Adam faa8f57bb2 Merge pull request #148 from SaberUK/2.0+18mod
Error out if any 1.8 modules are in the the module directory.
2016-01-23 09:18:32 -06:00
Adam 8cf21191fb Merge pull request #147 from miwob/temporary_xline
Update SendSGLine() in hybrid's protocol module to add support for te…
2016-01-23 09:18:12 -06:00
Adam ae847bcaf0 Merge pull request #144 from miwob/chankill_example
example.conf: announce operserv/chankill as well
2016-01-23 09:17:56 -06:00
Adam c4bbef0af8 Merge pull request #143 from staticfox/grammar
hs_group: Fix grammar
2016-01-23 09:17:44 -06:00
Adam 7953274a88 Re-lookup access in webcpanel after deleting access as the old group might be invalid 2016-01-23 10:15:01 -05:00
Adam d8eb3d4937 Apply regex sqlines on connect too 2016-01-23 08:58:08 -05:00
Adam f91f375b70 Show akill/xline ids in view 2016-01-22 10:29:44 -05:00
Adam eac25d016a Include memo mail information in ms_info 2016-01-22 10:13:05 -05:00
miwob 2356a1caab Update SendSQLine() in hybrid's protocol module to use non-capsulatet RESV message 2016-01-20 19:18:52 +01:00
Adam 164b349ef9 Fix various inconsistencies/crashes related to having multiple opers configured for the same user through combinations of os_oper/config/m_sql_oper 2016-01-19 16:25:02 -05:00
Peter Powell 2e370f6ed5 Error out if any 1.8 modules are in the the module directory. 2016-01-19 21:07:34 +00:00
miwob 9d30e1d63f Update SendSGLine() in hybrid's protocol module to add support for temporary x-lines 2016-01-19 20:07:45 +01:00
Adam 4771af1cb8 Couple user find by nick fixes 2016-01-19 08:30:35 -05:00
Adam 9c9df2ad1f Document ns_no_expire nick default 2016-01-19 08:30:06 -05:00
miwob 7f418a58da hybrid.cpp: clean up style to match with other code; update copyright header 2016-01-13 16:23:22 +01:00
miwob 510045858f example.conf: announce operserv/chankill as well 2016-01-12 20:00:08 +01:00
Matt Ullman d270910ace hs_group: Fix grammar 2016-01-12 09:31:58 -05:00
Adam 10aeba2da2 Merge pull request #142 from Zoddo/unreal4/uid
[Unreal4] Use UID/SID instead of nick/servername when possible
2016-01-03 11:36:03 -06:00
Zoddo 4e675c50e5 [Unreal4] Use UID/SID instead of nick/servername when possible 2016-01-03 16:31:45 +01:00
Adam 0a37576270 Actually there is no account here 2016-01-02 17:19:08 -05:00
Adam 8f6f2a2c47 Add sasl log category for auth log messages 2016-01-02 17:15:26 -05:00
Adam 36a465473e Add IRCDMESSAGE_SOFT_LIMIT to MD handler 2016-01-02 16:38:25 -05:00
Adam 23a0ecd0c4 unreal4: add md handler, certfp support 2015-12-30 16:11:41 -05:00
Adam 601af1b0eb Unreal 4 changes 2015-12-30 12:42:12 -05:00
Adam fb2aae1b17 Copy unreal -> unreal4 2015-12-30 12:42:03 -05:00
Adam ac984af11a Move CanAdd() check to after mask sanitization as it will remove other entries that are considered "covered by" the new mask 2015-12-29 14:04:45 -05:00
Adam d6cbd64621 Remove run-cc leftover 2015-12-29 14:04:04 -05:00
Adam e6bdc5dddd Merge pull request #141 from miwob/2.0+cmode_T_nonotice
Add support for channel mode +T to the ircd-hybrid protocol module
2015-12-29 12:57:09 -06:00
Adam ba805e30b8 Include gecos in GetNUHMask 2015-12-29 13:53:44 -05:00
Adam 6e48b1d56f Fix saset language reply 2015-12-28 17:45:44 -05:00
Michael Wobst cd6401f628 Add support for channel mode +T to the ircd-hybrid protocol module 2015-12-26 13:29:18 +01:00
Adam a25f94456d Fix race with recovering and svsnicing nicknames. Wait for first svsnick to go through before issuing the second. Fixes users sometimes svsnick colliding when recovering nicknames. 2015-12-19 13:38:47 -05:00
Adam b5228282e1 Merge commit '593ec34' into 2.0 2015-12-13 19:59:29 -05:00
Matt Ullman 593ec34ff7 os_akill: Sanity check AKILLing before modifing the akill list 2015-12-13 19:58:40 -05:00
Adam 7ce0eb219b Fixup ecdd046c80 to compile 2015-12-13 19:52:50 -05:00
miwob 99282e65a6 hybrid.cpp:SendClientIntroduction(): use a valid IP address format. In the future ircd-hybrid will reject UID messages with invalid IP addresses 2015-12-13 19:48:22 -05:00
Adam d07e60b3da Merge pull request #136 from miwob/add+CanSQLineChannel
hybrid.cpp: add missing CanSQLineChannel = true; to the protocol options
2015-12-13 18:46:14 -06:00
Adam 3da2cdb496 Only special case level -1 to everyone and not everything <0 2015-12-13 19:43:21 -05:00
Adam ecdd046c80 Add some replacement tokens for akick reason and welcome notice 2015-12-13 19:37:24 -05:00
Adam 98b35dfab2 Document m_xmlrpc_main notice 2015-12-13 19:28:31 -05:00
Adam 56abaf8498 Add notice method to m_xmlrpc_main 2015-12-13 19:27:15 -05:00
Adam 5394f5433a Fix SendNumericInternal on inspircd sending to the user's uid if dest is a uid 2015-12-13 19:21:53 -05:00
Adam c414433fae Allow wildcard searching emails 2015-12-13 19:19:00 -05:00
Adam 16d08e57df Fall back to account vhost in hs on/off 2015-12-13 19:14:44 -05:00
Adam 252a65af7e Update LOG dir in anoperc 2015-12-08 14:06:08 -05:00
Adam d40edcae69 null xline manager when removing so removexline doesn't get called 2015-11-05 20:50:10 -05:00
Adam 4c1cc0e05d Cleanup after xlines if directly removed 2015-11-04 20:51:02 -05:00
Adam 80c332bc41 Fix logonnews to prioritize the newest entries if it can't show them all 2015-11-04 20:05:01 -05:00
miwob 5a25a3807b hybrid.cpp: add missing CanSQLineChannel = true; to the protocol options 2015-10-24 12:45:19 +02:00
Robby 27a2645ed3 Fix chanserv botmodes. 2015-09-25 02:40:28 +02:00
Adam 830361e97d Check privilege name is valid in SetLevel 2015-09-24 17:22:44 -04:00
Adam 93a92bb73b Clear regex xlines on unload, which happens on shutdown, even though they are perm modules 2015-09-23 14:55:28 -04:00
Robby b9dc44ae9a Update the dutch language file. 2015-09-18 06:04:42 +02:00
Robby f52bbe22af Update my email address. 2015-09-18 05:38:44 +02:00
Robby 96d7797134 Bold code 2 -> 002. 2015-09-18 05:25:20 +02:00
Robby 9810da9829 Fix some sentences to be more correct. 2015-09-18 04:53:49 +02:00
Adam 5692abb316 Don't prevent channel destruction because persist is set. Perm mode/a bot should be assigned anyway which will prevent it. Fixes deleting bots out of perm channels causing desyncs 2015-09-17 20:35:46 -04:00
Adam 2e65bd4012 Channel::DeleteUser delets the container 2015-09-17 12:31:02 -04:00
Adam 1ac4a1d9a5 Defer channel deletion until after i/o. There are some edge cases with events kicking users mid-event that can delete them. 2015-09-17 10:07:30 -04:00
Adam 8d13a355cd Remove associated oper blocks in os_oper when accounts are deleted 2015-09-14 13:43:14 -04:00
Adam 8c4eec2b6e Update topic lock help to reflect how it works 2015-09-14 12:39:59 -04:00
Adam 776207ba67 Don't allow suspended users to login to webcpanel 2015-09-14 12:35:26 -04:00
Adam 2f5e880e57 Don't update channel last used time from ns alist access check 2015-09-14 12:24:13 -04:00
Adam 94f781726e Don't assign bots when persist is set if we aren't synced sinec we might not know of all modes 2015-09-11 14:54:48 -04:00
Adam 054c227df0 Merge pull request #120 from Alef-Burzmali/2.0+nobackupok
Fix db_flatfile to read the "nobackokay" setting
2015-09-06 16:12:22 -04:00
Adam 907e192aab Merge pull request #126 from SaberUK/2.0+typos
Fix a ton of typos.
2015-09-06 16:11:50 -04:00
Adam d6d0c883b0 Merge pull request #128 from SaberUK/2.0+destdir
Fix support for passing relative install paths to CMake.
2015-09-06 16:09:29 -04:00
Adam 7f4327e8ba Merge pull request #129 from AlphaT3ch/placeholder
Placeholder left in French Translation
2015-09-06 16:08:17 -04:00
Adam 132932ffaf Merge pull request #134 from retsofaj/2.0
Have CMake first check for libraries in any additional locations
2015-09-06 16:03:58 -04:00
Adam c007b829f7 Don't unset modes which have no privilege associated with them 2015-09-06 16:01:43 -04:00
Robby 3b647b0740 When toggling NOEXPIRE for a nickname, show the actual nickname in addition to the account name. 2015-09-02 20:36:24 +02:00
Adam 7a21648683 Only remove collide timers if the account matches on id 2015-08-20 15:04:03 -04:00
Jason Foster 389c1dbd92 Have CMake check for libraries first in any additional locations and second in the standard locations.
This allows (e.g.) using the Homebrew-installed OpenSSL instead of the system version.
2015-08-12 20:26:02 -04:00
Adam d95189a4d8 Fix webcpanel/memoserv/memos with a nonexistent channel 2015-07-31 18:26:49 -04:00
Adam e65a22ae9d Fix use after free from unloading modules which are the last one holding onto an IdentifyRequest 2015-07-31 17:07:30 -04:00
Adam 4e8cc4f786 Make secureops help less weird 2015-07-30 19:47:00 -04:00
Adam dfc18db1dd Remove unused variables from m_ldap 2015-07-23 08:25:28 -04:00
Adam 63dbd7fbf0 Set LDAP_OPT_PROTOCOL_VERSION 3 etc on reconnect, too 2015-07-23 08:23:48 -04:00
AlphaTech c1cdefe1a7 Placeholder left in French Translation 2015-07-16 15:21:13 -04:00
Peter Powell cd9a2af65d Fix support for passing relative install paths to CMake. 2015-07-15 00:28:59 +01:00
Adam 7fe0543bc6 Also UnsetExtensibles on botinfo 2015-07-14 18:52:23 -04:00
Peter Powell 2a6ad3d9fc Refuse to configure with old compilers that can't build Anope. 2015-07-13 19:26:02 -04:00
Adam 38cbff4156 Fix cmake for 2.4 once again 2015-07-13 19:25:37 -04:00
Adam a86162f287 Fix incorrect iteration when destructing modelockimpls 2015-07-13 18:02:44 -04:00
Adam ceddb8370c Unset extensibles on larger objects when they destruct
Some complex extensibles require the full object to still be alive in
their destructors to keep proper bookkeeping
2015-07-13 17:59:14 -04:00
Thomas Fargeix 040b06ad56 Fix db_flatfile to read "nobackupokay" 2015-07-11 10:27:27 +02:00
Peter Powell 1666b1a8d8 Fix a ton of typos. 2015-07-08 11:06:02 +01:00
Adam 4362f53cc3 Fix unused variable warning in cs_clone 2015-07-01 20:16:59 -04:00
Dominic Hargreaves cc616a7146 Allow PROGRAM_NAME to be set during configuration 2015-07-01 20:10:15 -04:00
Dominic Hargreaves 0f01c04b02 Allow disabling installation of extra tools (with DISABLE_TOOLS) 2015-07-01 20:09:46 -04:00
Dominic Hargreaves 4cbdf9a73b Support DESTDIR
If DESTDIR is set it should be prepended to CMAKE_INSTALL_PREFIX. See
<http://www.cmake.org/cmake/help/v3.2/variable/CMAKE_INSTALL_PREFIX.html>
2015-07-01 20:08:51 -04:00
Adam fce257dc43 Merge pull request #121 from SaberUK/2.0+cmake-improvements
Various improvements to the build system.
2015-07-01 20:00:59 -04:00
Adam ad7601b0cc Merge pull request #119 from Jyzee/irc2sql-away
irc2sql: handle away messages.
2015-07-01 19:51:29 -04:00
Adam 5be9de5d12 Merge pull request #123 from Alef-Burzmali/2.0+cs-levels
Allow opers with chanserv/access/list to view the levels list
2015-07-01 19:50:26 -04:00
Adam 02ed9a9725 #1649 don't update keepmodes during inhbait 2015-06-29 19:35:57 -04:00
Adam 074f163750 #1643 Umode +I is oper only on Unreal 2015-06-29 13:57:32 -04:00
Adam de023bab0a Don't allow registering service nicks 2015-06-29 13:47:50 -04:00
Adam 510a746f8d Add ns_identify:maxlogins to limit the max number of concurrent logins per account 2015-06-29 09:37:09 -04:00
Adam 8eb46772e6 Don't allow loading hostserv mods if there can be no hostserv 2015-06-29 08:58:31 -04:00
Adam d563aa0da8 Check name validity after unpackname() to check for bad names in questins and ptr/cname rdata 2015-06-29 08:48:08 -04:00
Adam 3e3312db25 Don't allow adding or changing bots to collide with users 2015-06-29 08:42:29 -04:00
Adam bb5c4906cc Also clear vhost on hs_off so the proto mods don't have to 2015-06-21 10:42:49 -04:00
Adam 444976e64f Update host on hs off too
Protocol modules which don't trigger this by causing a mode change
currently desync
2015-06-20 17:33:13 -04:00
Thomas Fargeix 57b614ae59 Allow opers with chanserv/access/list to view the levels list 2015-06-14 19:33:45 +02:00
Peter Powell 2f9eabdb72 Remove support for run-cc.
This tool is not useful anymore. It just slows the build down.
2015-05-17 21:27:09 +01:00
Jyzee a458f7c840 irc2sql: handle away messages. 2015-04-30 19:29:44 +02:00
Adam 65bf84cfb5 When introducing opered clients on inspircd send a fake opertype 2015-04-28 15:23:31 -04:00
Adam 5efaa5b206 Merge pull request #117 from aFreshMelon/fix-xmlrpc-php
Fix xmlrpc php
2015-04-04 09:50:57 -04:00
Sebastian 41f4c7dab6 A variety of small improvements to xmlrpc.php
Pretty simple stuff.

* Better method names
* Better DocBlocks
* Lowercase variables
2015-04-04 09:43:51 +02:00
Peter Powell 0f1936f63d Fix matching the Apple Clang variant on CMake 3.0+ 2015-04-04 03:28:46 +01:00
Peter Powell 5baa6247a9 Don't overwrite CMAKE_INSTALL_PREFIX if it has already been set. 2015-04-02 01:43:05 +01:00
Peter Powell 82f5d1d61d Remove an old Autotools limitation.
This is not needed anymore as support for Autotools was removed.
2015-04-02 01:38:31 +01:00
Sebastian dd8dd3b4a0 Make xmlrpc.php comply with PSR-2 coding standard 2015-04-01 23:28:41 +02:00
Sebastian a718223585 Remove workaround that is no longer needed
This workaround was required previously but breaks the code with the corrections to the XML-RPC response.
2015-04-01 23:27:44 +02:00
Robby- abc4851287 Update the dutch language file. 2015-03-23 02:39:18 +01:00
Adam 3d1255dbe9 Anope 2.0.3-git 2015-03-22 21:22:49 -04:00
Adam a762391446 Anope 2.0.2 Release 2015-03-22 15:34:50 -04:00
Adam c070a00114 Fix m_ldap_oper to build 2015-03-22 15:34:49 -04:00
Adam e7c3090a70 Fix new version stuff with empty version extra 2015-03-22 14:38:29 -04:00
Adam 5dd6326eff Merge pull request #115 from aFreshMelon/aFreshMelon-patch-1
XML-RPC responses also don't have a methodName tag
2015-03-22 13:56:07 -04:00
Adam 535ad6fd70 Merge pull request #112 from attilamolnar/2.0+inspircdmlock
InspIRCd 2.0: Ensure ircd-side mlock and topic lock state is always what we think it should be
2015-03-22 13:56:01 -04:00
Robby- 5df4ac9a98 Make the signed kick/ban message format configurable. 2015-03-22 13:44:08 -04:00
Adam 4c54a3939f Change git version name back to what it was, which the core uses 2015-03-22 10:26:53 -04:00
Adam 3d09748d1c Fix typo in Changes 2015-03-22 10:26:26 -04:00
Sebastian Barfurth 36a4be7623 XML-RPC responses also don't have a methodName tag
Following http://xmlrpc.scripting.com/spec.html
2015-03-18 19:06:08 +01:00
Adam 5fc72660e4 Merge pull request #113 from attilamolnar/2.0+openssl
m_ssl_openssl: SSL context option changes
2015-03-12 17:53:52 -04:00
Adam 303e652a35 Only apply keepmodes on channel sync
Not sure why this was this way originally, it interfears with the
chanserv +r check to determine how new the channel is because it
restores +r. This seems to still work okay, though.
2015-03-12 17:52:38 -04:00
Adam e5447a8024 Update Changes.conf and Changes 2015-03-12 17:52:38 -04:00
Attila Molnar 1bee18fcf4 m_ssl_openssl: Allow disabling SSLv3 via the config 2015-03-12 19:35:07 +01:00
Attila Molnar a57e41304f m_ssl_openssl: Set sane default context options 2015-03-12 19:35:07 +01:00
Adam e0e8147ee0 Merge pull request #114 from anope/revert-99-extemp_protected
Revert "Added kickcheck override for users with protected privs"
2015-03-12 13:30:12 -04:00
Adam 41a24afa4f Revert "Added kickcheck override for users with protected privs" 2015-03-12 13:29:50 -04:00
Adam 4266d17e8c Update cmake version parsing code to deal with recent build version changes
Update Config.cs to no longer hardcode VS generators, it seems no longer necessary.
Fix new version system, cannot return C++ types from extern C functions
2015-03-12 11:20:18 -04:00
Adam 8d3fa47ab2 Merge pull request #99 from H7-25/extemp_protected
Added kickcheck override for users with protected privs
2015-03-12 08:15:59 -04:00
Adam 64781817ac Merge pull request #105 from miwob/master+use-uid-for-svsnick
- Change SendForceNickChange() to use UIDs
2015-03-12 08:15:49 -04:00
Adam 69c18f131f Merge pull request #106 from miwob/master+SendClientIntroduction
- Update SendClientIntroduction() to use * for account names instead of ...
2015-03-12 08:15:44 -04:00
Adam e030771cbc Merge pull request #107 from miwob/master+misc-hybrid-changes
- Misc updates to the hybrid protocol modules:
2015-03-12 08:15:38 -04:00
Adam 03f05d3948 Merge pull request #111 from aFreshMelon/fix-xmlrpc-response
Correct wrong XML response tag
2015-03-12 08:15:31 -04:00
Adam 32c4908c8c Document that m_ldap_authentication:disable_register_reason blocks grouping 2015-03-12 08:01:27 -04:00
Adam c5ff7c6868 Show passlen in PASSWORD_TOO_LONG 2015-03-12 08:00:12 -04:00
Attila Molnar 89257d9bce InspIRCd 2.0: Re-set server-side topiclock when an incoming METADATA topiclock from a bursting server changes it 2015-03-11 23:46:00 +01:00
Attila Molnar e47aacad0e InspIRCd 2.0: Re-set server-side mlock when an incoming METADATA mlock from a bursting server changes it 2015-03-11 23:46:00 +01:00
Attila Molnar 72ade225a7 InspIRCd 2.0: Pass use_server_side_topiclock and use_server_side_mlock references to METADATA handler 2015-03-11 23:46:00 +01:00
Attila Molnar a52af0d260 InspIRCd 2.0: Add METADATA handler, pass everything to inspircd12/metadata 2015-03-11 23:46:00 +01:00
Adam 92920f5a1c Only matches sqlines against channels if they begin with a # 2015-03-11 14:49:03 -04:00
Peter Tseng bf727285bc SendConfirmMail: Replace %E with new email
The old mailer message said the user is changing email "to %e", which is
changing TO the OLD email. But instead, the user is actually changing
the email to the new email.

We could change %e to be the new email, but maybe some users of Anope
have already configured their messages to assume %e is the old email. So
instead, add a new %E that is replaced with the new email.
2015-03-11 14:44:38 -04:00
Adam 310e95a92e Allow cs clone to clone levels too 2015-03-11 14:36:56 -04:00
Adam 78bff86dab Make cs_clone behave closer to how the help describes it 2015-03-11 14:24:42 -04:00
Adam 3f093d708f Normalize masks given to cs_kick, use entry to match them against users 2015-03-11 12:13:08 -04:00
Adam c3cc5804c3 Normalize masks given to cs_ban, use entry to match them against users 2015-03-11 11:26:12 -04:00
Adam dc58239c8a Remove cloak prior to applying vhost in insp20 fhost handler 2015-03-11 10:48:25 -04:00
Adam b67963353f Hide set desc because set description exists 2015-03-11 09:30:02 -04:00
Adam a899c04ec2 Strip color codes when looking up fantasy commands. 2015-03-11 09:16:32 -04:00
Adam fb17bc85ea Redesign m_ldap to no longer rely on undefined behavior
Accessing the same LDAP* from multiple threads at once is always
undefined, even if one thread is just polling ldap_result.

Instead keep one thread per connection and issue blocking queries on the
thread.
2015-03-11 08:48:08 -04:00
Sebastian Barfurth 474cd7a99b Correct wrong XML response tag 2015-03-07 19:05:41 +01:00
Adam 7de4b86b7f Move GIT_VERSION define to build.h, otherwise version.h is bumped per commit which forces a rebuild 2015-02-23 20:43:22 -05:00
miwob 76337bc04a - Misc updates to the hybrid protocol modules:
- best supported version is 8.2.x
  - fixed UID message handler to cope with account names being '*'
  - minium required TS version is TS6 now
2015-02-15 21:47:55 +01:00
miwob abe232601b - Update SendClientIntroduction() to use * for account names instead of 0 2015-02-15 21:33:22 +01:00
miwob 6ada3ec871 - Change SendForceNickChange() to use UIDs 2015-02-15 21:27:01 +01:00
H7-25 61a8dd57f7 Added kickcheck override for users with protected privs 2015-02-11 08:11:25 +01:00
Adam 94427b234c Merge pull request #102 from miwob/master+protocol-missing-modes
- Added some missing user modes to the ircd-hybrid protocol module
2015-02-10 19:18:46 -05:00
Adam fb3c819bee Merge pull request #103 from miwob/master+hybrid-misc-changes
Misc changes to the ircd-hybrid protocol module:
2015-02-10 19:18:40 -05:00
Adam f0c23e80a2 Merge pull request #104 from miwob/master+anope.de_DE.po-minor-update
- Minor update to anope.de_DE.po; removed double space + proper translat...
2015-02-10 19:18:30 -05:00
miwob 1e86c46000 - Minor update to anope.de_DE.po; removed double space + proper translation 2015-02-10 22:48:22 +01:00
miwob 2f49065500 Misc changes to the ircd-hybrid protocol module:
- Increase MaxModes to 6
  - SendLogout(): send "+d *" instead of "+d 0"
  - Update copyright year
  - Removed user mode +z from supported modes
2015-02-08 12:29:16 +01:00
miwob 41ae2dbefb - Added some missing user modes to the ircd-hybrid protocol module 2015-02-07 19:08:55 +01:00
Adam f44280a9c9 Merge pull request #101 from miwob/master+hybrid-protocol-no-globops-override
- Removed SendGlobopsInternal() override as it's basically a duplicate o...
2015-02-06 17:21:33 -05:00
Adam d147db9023 Merge pull request #100 from miwob/master+hybrid-protocol-cmode-ctcp
- Update ircd-hybrid protocol module to support channel mode 'C' (no CTC...
2015-02-06 17:21:30 -05:00
miwob f484a68dee - Removed SendGlobopsInternal() override as it's basically a duplicate of SendGlobopsInternal() in protocol.c 2015-02-06 20:28:30 +01:00
miwob 8550e22167 - Update ircd-hybrid protocol module to support channel mode 'C' (no CTCPs) 2015-02-06 19:39:31 +01:00
Adam 9834518b28 Fix os_mode to handle channels going away due to mode changes, and maybe cs_mode 2015-02-05 20:16:43 -05:00
Adam 64ca357b13 Make module version system work 2015-02-03 19:38:23 -05:00
Adam dc5039e994 Properly unescape xmlrpc 2015-02-03 18:42:35 -05:00
Adam 845ca576b4 More properly track topic change sources and allow users with access to change topics through topiclock 2015-01-28 22:57:15 -05:00
Adam 2264a206d2 Check virtual mode bases better 2015-01-26 15:10:18 -05:00
Adam d324e91520 Fix negatively locking param modes in default mlock 2015-01-26 13:16:25 -05:00
Adam 9ac1b4ba01 Merge pull request #98 from flotwig/patch-1
cs_entrymsg to use SET permission, not isFounder
2015-01-11 19:38:35 -05:00
Zach Bloomquist 7e0cb6d8ef cs_entrymsg to use SET permission, not isFounder
Correcting syntax error

(i don't actually know c++)
2015-01-11 19:29:33 -05:00
Adam 3055b7272b Fix m_xmlrpc server configuration option 2015-01-10 15:37:49 -05:00
Adam 969cd5dd6c Always use source name when logging server kicks 2015-01-10 15:29:19 -05:00
Adam 1f02278a1c Log user away messages 2015-01-10 15:24:48 -05:00
Adam 32007f81cf Add networkinfo:nick_chars option to allow configuring additional characters allowed in nicknames 2015-01-10 15:19:40 -05:00
Adam 609f87d39f Include botserv/* in default Services Administrator opertype to behave like 1.8 2015-01-10 15:19:40 -05:00
Adam e88925e587 Merge pull request #94 from webczat/2.0
Fix issue 1627.
2014-12-28 20:30:36 -05:00
Adam c46ec39e50 Only disable CMP0026 if it exists 2014-12-28 20:01:11 -05:00
Adam 9b2202dfee Merge pull request #93 from alexbarton/ngircd-fix-servertoken
ngIRCd protocol module: fix servertoken
2014-12-28 18:12:38 -05:00
Adam 03f6e26550 Merge pull request #95 from webczat/2.0x
fix chanserv.cpp using Get for bool extensible items
2014-12-28 18:11:37 -05:00
Adam c554e85063 Merge pull request #96 from webczat/termfork
Anope will now fork even when not started from a tty, like init scripts.
2014-12-28 18:10:40 -05:00
Adam 2892c9580f Replace spaces in opertypes with underscores in stats o 2014-12-28 18:09:37 -05:00
Adam 3c0994a89e Fix crash when non-users register channels 2014-12-28 18:08:58 -05:00
Adam e800afcfac Fix adding regmoderated mode twice in plexus 2014-12-28 18:08:39 -05:00
Adam 2ad697898f Disable CMP0026 warnings on cmake 3 2014-12-19 18:55:50 -05:00
Michał Zegan e4068249dd Anope will now fork even when not started from a tty, like init scrpits.
It is useful for init systems or startup scripts, because it allows easily waiting until services connect to the uplink, without them forking it wouldn't be possible to tell if they finished initialization or not unless they would communicate directly with init systems like systemd.
2014-12-12 19:53:30 +01:00
Michał Zegan d45cb5451e Fix issue 1627.
It required that the FHost message was rewritten for the insp20 protocol module instead of relying on inspircd12's version.
The insp20 version internally removes +x mode on host change.
2014-12-12 03:56:38 +01:00
Michał Zegan d9c9f2a407 Changed calls to Get() for bool extensible items to HasExt in the chanserv module, remove duplication of code. 2014-12-12 03:48:00 +01:00
Adam 7213413f8b Remove os exception move 2014-12-11 19:33:06 -05:00
Adam 516211c88a Add SAVE support to inspircd20 2014-12-07 19:32:21 -05:00
Robby- d576137f28 Update the dutch language file. 2014-12-07 17:42:00 +01:00
Adam e1f5e030bc Change webpanel access add to just add via the commands, split Command::Run into two so I can do this as I need to run named commands for it 2014-12-05 20:24:27 -05:00
Adam afffeb0a1d Update Kill() calls to pass source pointer instead of name 2014-12-05 17:27:08 -05:00
Adam 4fc71bb22f Link m_ldap against ldap_r not ldap 2014-12-02 15:49:14 -05:00
Alexander Barton d4732faf41 Correctly assign nicks to their respective host servers
Use the "server token" parameter of NICK commands to find the host server and
correctly assign the nick name to this server.

This allows Anope to correctly free all nick names again when (remote) servers
leave the network, which fixes arbitrary "KILL attacks" when such nick names
reconnect later on.

Initial debugging and patch by DukePyrolator, thanks a lot!
2014-11-30 21:50:11 +01:00
Alexander Barton 95684187b6 Fix server token assignment of servers in the network
1. the directly linked server, our upstream, always has token "1", and
2. for remote servers in the network, the token and description filds
   were interchanged during registration,

therefore up to now no server could be found by Server::Find() using its
assigned server token.
2014-11-30 21:49:34 +01:00
Adam 4f33b17f96 Move automatically identified for log message to users 2014-11-25 09:00:15 -05:00
Adam 0cdab86978 Set require_oper in /os oper 2014-11-24 22:10:12 -05:00
Adam 4f76bee273 Fix sid generator generating invalid sids after sid 999 2014-11-24 22:00:30 -05:00
Adam 8557a4161a Allow 0 ttb in flood kicker 2014-11-15 08:50:37 -05:00
Adam c9008cdafa Fix access dup check to account for accounts 2014-11-15 02:13:10 -05:00
Adam 8a7793da0c Fix bahamut mode handler 2014-11-08 04:31:56 -05:00
Adam 64b332730e Fix not removing zones from server->zones 2014-11-08 04:30:27 -05:00
Adam 36837330ae Fix typo in botserv.example.conf 2014-11-06 05:40:51 -05:00
Adam 8b64e46ef1 Show access denied if /os kick can't kick the target 2014-11-04 23:54:16 -05:00
Adam c4460784c2 Allow mlock to be enforced when unsetting defcon modes 2014-11-04 01:36:27 -05:00
Adam 408ec02406 Move chan register event prior to applying final mode changes, so cs_mode can set mlock on register. #1620 2014-11-04 00:09:00 -05:00
Adam 67fc8c3416 enc_bcrypt is no longer extra because it doesn't depend on external dependencies anymore 2014-11-03 23:50:40 -05:00
Adam fb2fd9e9d3 Fix log message when enabling botserv kickers 2014-11-03 23:45:22 -05:00
Adam 527e04275f Merge pull request #91 from Alef-Burzmali/2.0+fix-addakiller
Keep the akiller's name when updating the reason.
2014-11-03 23:43:50 -05:00
Adam c895bd2e59 Merge pull request #92 from Alef-Burzmali/2.0+update-fr
Update the French translation
2014-11-03 23:37:08 -05:00
Thomas Fargeix 94b2d1ac12 Update French language file. 2014-10-29 00:08:21 +01:00
Thomas Fargeix a76e074f6d Update the French install instructions. 2014-10-28 22:59:26 +01:00
Thomas Fargeix 2f004c2aab Keep the akiller's name when updating the reason.
The name of the oper issuing an akill or a sxline could be removed by updating the reason,
even though addkiller was enabled.
2014-10-24 23:49:02 +02:00
Adam b940077553 Validate credentials sent via sasl more 2014-10-16 21:38:46 -04:00
Adam c8ded08b43 Show extended strftime output for suspend info 2014-10-14 21:17:47 -04:00
Adam 62a01dcc87 Set access masks to the case of the nick they match, if any 2014-10-14 21:09:41 -04:00
Adam 0cd3bfa24f Fix module event prioritization which was broken with the newer
auto-attach event stuff.

Also remove logically dead code from os_defcon, and make os_defcon akill
similar masks to os_session when enforcing session akills.

Fixes #1618 which relies on os_session to be prioritized before
os_defcon.
2014-10-14 18:58:55 -04:00
Adam e46bcff324 Move nick register event to make it easier for modules to determine if a newly registered nick is confirmed or not. Add confirm event. 2014-10-12 19:25:39 -04:00
Adam 67719e8db1 Add exempts and optionally allow authenticated users past m_dnsbl 2014-10-12 15:03:51 -04:00
Adam 48be41cf7b Squit uplink when I receive an squit for myself 2014-10-12 14:34:15 -04:00
Adam 5ceee5df38 Hide dumb user notice if we are quitting 2014-10-12 14:32:17 -04:00
Thomas Fargeix 1c12976958 Add an operserv/oper/modify privilege.
The operserv/oper command privilege allows to add operators
with fewer or the same privileges as ourself.
This new privilege allows to have operators who can use operserv/oper
to see the list of operators and their privileges, but cannot add new
operators.
2014-10-12 10:54:11 -04:00
Thomas Fargeix 96583892c6 Add a chanserv/access/list privilege
Replace the existing chanserv/access/list command access,
only used in cs_xop, by a privilege with the same name.

It which allows read-only access to cs_access, cs_flags, cs_xop
and cs_akick, while the already-existing chanserv/access/modify
privilege allows to modify them.
2014-10-12 10:52:48 -04:00
Robby- 0991d4e199 operserv.example.conf: Add missing permission definition to os_defcon's command. Fixes bug #1617. 2014-10-09 23:35:38 +02:00
Adam 58233fb8bc Log when memos are sent 2014-10-06 14:06:36 -04:00
Adam be928b5bbc Clean up collide timers on identify, otherwise you can login and logout before the timer tick which will still enforce the collide 2014-10-06 14:06:36 -04:00
Adam 31bc1d6b82 Don't add duplicate akills in os_session 2014-10-06 14:06:36 -04:00
Adam 829ef1b7bd Clear pending collided state on release, fixes colliding users using recover into enforcers 2014-10-06 14:06:36 -04:00
Adam b068874f40 Add a confirmation reply to ns recover on an unidentified user with svsnick 2014-10-06 14:06:36 -04:00
Adam 18b3c572f4 ngircd doesn't allow sourceless messages 2014-10-06 14:06:36 -04:00
Adam af034928cb Remove auto cmake downloader Config stuff, which randomally doesn't work on some systems for no reason 2014-10-06 14:06:36 -04:00
Adam 8d40a750cc Update INSTALL to reflect cmake requirement 2014-10-06 14:06:36 -04:00
DukePyrolator 6a3f7c01b1 changed the engine of the chanstats table from InnoDB back to MyISAM to avoid increasing the auto_increment counter on each INSERT IGNORE. For existing tables please manually run 'ALTER TABLE anope_chanstats ENGINE=MyISAM'. 2014-09-14 11:36:05 +02:00
DukePyrolator 4c2bf72cb6 fixed typo in the last commit 2014-09-14 11:12:54 +02:00
DukePyrolator 8e7b742ec7 added missing support for operonly and silentoperonly in os_defcon 2014-09-14 11:11:22 +02:00
DukePyrolator 19b47c7bae fixed a possible crashbug in the german language file 2014-09-13 13:06:56 +02:00
Adam 3bdc81348a Fix unserializing badwords to not add dupes when unserializing an existing bw object 2014-09-01 13:11:21 -04:00
Adam bf8f62c32d Change Channel::GetModeList to return a copy of the mode list, not a
pair of lower/upper bound iterators.

Sometimes when iterating the list, like in cs_mode, we can modify the
contents of it, which combined with mlock always agressively trying to
readd modes to it can do bad things.
2014-08-24 16:39:04 -04:00
Robby- d417241a5b cs_set: Fix logging for SET SUCCESSOR to correctly log overrides. 2014-08-11 20:16:42 +02:00
Adam e5cb2018e5 List opertypes in /os oper info 2014-08-03 19:15:08 -04:00
Adam df6095fed2 Make botserv fantasy override its own privilege 2014-08-03 19:10:15 -04:00
Adam 8210e82a5e Fix some botserv help entries from showing when they shouldn't 2014-08-03 19:08:12 -04:00
Adam d6d72cd803 Add cs_mode:max config option 2014-08-03 18:57:00 -04:00
Adam 063d9bf5f6 Allow "modify" in flags to be optional 2014-08-03 18:33:56 -04:00
Adam 830e8617e6 Allow "set" in topic set to be optional 2014-08-03 18:28:54 -04:00
Adam cf89e10a4c Add ms_ignore:max config option 2014-08-03 18:22:03 -04:00
Adam 6842ad36f7 Do not allow unconfirmed users to send memos or request vhosts 2014-08-03 18:05:41 -04:00
Adam 24f17de4aa Fix stats u on Windows 2014-08-03 18:03:07 -04:00
Adam bbb04d4662 Fuzzy italian signkick help 2014-08-01 16:12:41 -04:00
Robby- 20052247c3 Regenerate anope.en_US.po 2014-07-27 08:05:54 +02:00
Robby- 8b61a529a2 Update the dutch language file. 2014-07-27 07:48:50 +02:00
Robby- 1137c50095 Fix a few help messages. 2014-07-27 07:34:02 +02:00
Adam 52d422d020 Merge pull request #81 from miwob/master+invite_ts
hybrid.cpp: add our own SendInvite() which sends the channel's timestamp...
2014-07-26 13:41:47 -04:00
Adam 43c460e593 Merge pull request #85 from attilamolnar/2.0+help
Correct the help text of options:useprivmsg ("defmsg" -> "msg")
2014-07-26 13:40:58 -04:00
Adam 17ba13bc95 Use ts version of services stamp when the account is unconfirmed on Unreal as 3.2.10.4 has changed thie behavior 2014-07-26 13:28:43 -04:00
Adam 60229b15d2 When object unserialization fails (due to not having dependency objects) bump the ts to try again later. 2014-07-26 13:24:52 -04:00
Adam 3c88f3b8cf Check modetimes in CheckModes before enabling bouncy modes 2014-07-15 17:02:14 -04:00
Adam 93cb5d06db Fix channelcount with clone 2014-07-11 01:02:02 -04:00
Adam 7a64d95f7c Fix Log() calls in m_ldap_oper 2014-07-11 00:22:32 -04:00
Attila Molnar ff66e15f38 Correct the help text of options:useprivmsg ("defmsg" -> "msg") 2014-07-04 04:39:12 +02:00
Adam 07902c03fd Check that the list of items isn't NULL when destructing types 2014-06-28 23:15:59 -04:00
Adam d9949320c7 Don't try to setuid down until after we signal the parent to exit, unless we're not forking. Also don't issue the run as root warning if we're going to setuid later. 2014-06-28 23:15:59 -04:00
Robby- b0ec178e85 Merge pull request #84 from Zantox/2.0
Minor cs_unban Lang Update @Robby-
Updated HostServ Command English Language
Updated ChanServ Command English Language
Updated BotServ Command English Language
2014-06-26 22:17:51 +02:00
Zantox f753a925ad Minor cs_unban Lang Update @Robby- 2014-06-26 22:14:10 +02:00
Zantox 74dbfe0699 Updated HostServ Command English Language 2014-06-25 02:16:09 -04:00
Zantox 3bea089793 Updated ChanServ Command English Language 2014-06-25 02:09:43 -04:00
Adam ff93355af8 Hold a reference to the type in Serialize::Checker in the event it goes away, and invalidate the type pointer of objects when the type goes away 2014-06-23 15:44:06 -04:00
Zantox 8fecad3039 Updated BotServ Command English Language 2014-06-23 07:47:26 -04:00
miwob 37bd2c238e hybrid.cpp: add our own SendInvite() which sends the channel's timestamp along the INVITE command. INVITE with channel TS will be mandatory in some future release of ircd-hybrid 2014-06-19 16:27:05 +02:00
Adam 9a947fa435 Correct some language strings 2014-06-17 08:37:19 -04:00
Adam 4f7868b125 Log more when unable to backup databases in db_flatfile 2014-06-15 04:50:26 -04:00
Adam 8066378471 Fix WindowsGetLanguage() 2014-06-10 22:00:26 -04:00
Adam ab27b792b0 Track SVSKILL on unreal 2014-06-09 17:18:21 -04:00
Adam f1c3bdd55e Correct wording of log message when ldap services are created 2014-06-09 17:16:55 -04:00
Adam 08edb15bea Fix help log output example 2014-06-09 16:44:15 -04:00
Adam 56c6ef4449 Fix information leak in cs_updown 2014-06-09 16:36:49 -04:00
Adam 6526d2d8b3 Fix Windows release build with gettext 2014-06-01 13:53:32 -04:00
Adam 76ab5c2c38 Update WIN32.txt reflecting new Windows stuff 2014-05-31 23:54:50 -04:00
Adam 54e98f017c Always log when the uplink socket errors, and give possibly helpful advise 2014-05-31 21:17:46 -04:00
Adam bb7706d0f7 Anope 2.0.2-git 2014-05-31 19:09:23 -04:00
Adam 16e0b72d2d Update FindGettext.cmake for new Windows stuff and fix language.cpp
compile
2014-05-31 18:30:50 -04:00
Adam b578e32531 Anope 2.0.1 Release 2014-05-30 20:57:32 -04:00
Adam 4d8e3b847d Fix f627a3bacd, really make BotInfo::Part fire events like the normal user part message does 2014-05-30 20:57:23 -04:00
Adam eaade23f9b Update language files 2014-05-30 18:14:55 -04:00
Adam f20bac996d Fix Windows build and update library names to the newer ones.
Also fix crash on Windows when unloading a module because it threw an
exception.
2014-05-30 18:14:55 -04:00
Adam 93bfd4cbe1 Updates Changes and Changes.conf 2014-05-30 16:16:54 -04:00
Adam 6620f9e9bd Don't allow setting -y on inspircd, secureops etc will try to enforce this 2014-05-30 15:16:03 -04:00
Adam dc64cfc940 Remove version.log 2014-05-30 15:16:03 -04:00
Adam f8829783d2 Queue the grouped nicks to update when NickCore::SetDisplay is called, since they serialize the display field 2014-05-30 15:16:03 -04:00
Adam d6e600f74b Fix access check in ns_group 2014-05-30 15:16:03 -04:00
Adam 5f7113bc0e Merge pull request #80 from attilamolnar/2.0+exampleconf
Fix the name of the SSL modules in comments in modules.conf.example
2014-05-30 15:15:43 -04:00
Robby- dc4daa25a7 example.chk: Use a more reliable way to detect if services are running. 2014-05-30 18:27:15 +02:00
Robby- 0cadaedfbe Update the dutch language file. 2014-05-30 18:24:42 +02:00
Attila Molnar 11ad788dfd Fix the name of the SSL modules in comments in modules.conf.example 2014-05-30 18:12:26 +02:00
Adam 38a60d9142 Merge pull request #78 from H7-25/it_IT
Updated italian lnguage file
2014-05-28 13:48:19 -04:00
Adam e8ad509aa5 Fix dlerror() on Windows and do not abort if err is not set 2014-05-27 12:55:03 -04:00
Adam 37b3ed8ef3 Do not normalize extban masks 2014-05-27 12:55:03 -04:00
Adam a6af422184 Set timer owner for nickserv timers 2014-05-27 12:55:03 -04:00
Adam 53acb73193 Fix default db name in db_flatfifle in a couple places 2014-05-27 12:55:03 -04:00
H7-25 57f6d4f49c Updated italian language 2014-05-22 21:24:38 +02:00
Adam d0467adea2 Merge pull request #79 from Jyzee/langFR-Patch
Make command group descriptions translatable.
2014-05-22 13:21:46 -04:00
Jyzee 16924f68c0 Update french language file. 2014-05-22 19:05:25 +02:00
Jyzee d280c48e6b Regenerate french language file. 2014-05-22 19:04:26 +02:00
Jyzee f0c0daa644 Make command group descriptions translatable. 2014-05-22 19:00:56 +02:00
Adam 7a2d027e1d Fix deflanguage from 4034b3054a, this shouldn't have been removed 2014-05-21 10:47:50 -04:00
Adam f627a3bacd Core prep for p10 stuff 2014-05-21 08:50:40 -04:00
Adam 5a1257b7f0 Fix extra space in log messages with logtype channel and no source 2014-05-21 08:40:54 -04:00
Adam 866f3f32ab Speed up akill xline checks
Cache xline nick, user, host, etc instead of rebuilding it everytime its
requested. Store users ip in sockaddr form and not string form to
prevent having to rebuild sockaddrs when checking xlines.

Also do not try to convert empty config values in Config::Get as this
can be rather common if a non string configuration value is not set, and
the cost of the ConvertException is great.
2014-05-20 21:16:00 -04:00
Adam 20ce170024 Show account names in log messages 2014-05-20 12:19:26 -04:00
Adam 4034b3054a Add English language file which users can edit to modify language strings 2014-05-20 11:41:05 -04:00
Adam e581158645 Fix two compile warnings in access.cpp on newer compiles 2014-05-20 10:00:34 -04:00
Adam 01021131ca Also search channel descriptions and topics in /cs list 2014-05-20 09:52:26 -04:00
Adam 13ea98a02e Fix server usercounter not being incremented when servers are bursting 2014-05-19 22:46:28 -04:00
Adam db56a61f86 Fixup previous commit when serializing access entries 2014-05-19 22:45:45 -04:00
Adam df321a118e Fix access lists showing the wrong mask if the display nick for a group
expires but the group still exists. This can cause access entries for
nicks to not be deleted whenever the nicks are deleted.
2014-05-14 19:10:23 -04:00
Adam 1931fcf0e5 Fix webpanel mode list to only show real list modes 2014-05-13 22:59:41 -04:00
Adam 63b02b8c97 Sanitize nuh masks more to prevent the other side from rewriting them, which screws with our internal tracking of them 2014-05-13 22:57:53 -04:00
Adam 1c8a77ab9f Accept an optional reason for svspart 2014-05-13 19:52:05 -04:00
Adam 0c7d53f81e Don't show both online from's if they have the same mask in ns_info 2014-05-13 18:38:14 -04:00
Adam bcc3ae5742 Merge pull request #76 from miwob/master
Update ircd-hybrid protocol module
2014-05-13 17:50:07 -04:00
Adam 4e67e0897a Merge pull request #77 from Cronus89/patch-2
Update Paramater length for os_dns to fix DNS SET
2014-05-13 17:47:33 -04:00
Michael Wobst 76a9538441 Fix compile warning in base64.cpp:B64Encode
/home/ircd/anope/src/base64.cpp: In function ‘void Anope::B64Encode(const Anope::string&, Anope::string&)’:
/home/ircd/anope/src/base64.cpp:85: warning: ‘input’ is used uninitialized in this function
2014-05-13 18:28:53 +02:00
Cronus89 91c7862579 Update Paramater length for os_dns to fix DNS SET 2014-05-13 11:12:00 -05:00
Michael Wobst 6b6bc81999 Update ircd-hybrid protocol module 2014-05-13 18:00:10 +02:00
Adam 1f2c385bb9 Add config options to ns_suspend and cs_suspend to configure which information is shown to non opers 2014-05-01 21:03:32 -04:00
Adam d79dd0b7d7 Pass password to nick register event so modules like m_ldap_authentication can create the respective account using the decrypted password which might not always be available 2014-05-01 18:38:17 -04:00
Adam 8b2e8137f6 Merge pull request #75 from attilamolnar/2.0+inspircd-globops
InspIRCd 2.0: Recognize GLOBOPS in CAPAB CAPABILITIES
2014-05-01 18:19:23 -04:00
Adam 732466d8f4 Merge pull request #74 from attilamolnar/2.0+fix-os-stats
Fix undefined symbol error when loading os_stats, caused by 82008d50
2014-05-01 18:19:01 -04:00
Attila Molnar 3049916ade Fix undefined symbol error when loading os_stats, caused by 82008d507c 2014-04-30 01:15:10 +02:00
Attila Molnar 0afd666f22 InspIRCd 2.0: Recognize GLOBOPS in CAPAB CAPABILITIES 2014-04-29 22:55:10 +02:00
Adam 8021a53ac4 Fix misc help output to not be case sensitive 2014-04-26 18:30:54 -04:00
Adam 0663f5e412 Fire the on user quit event when bots are deleted too 2014-04-26 17:45:16 -04:00
Adam 2ee496b8ac Change the "does not expire" string in ns_group to NO_EXPIRE which is translatable 2014-04-26 17:30:58 -04:00
Adam 3abb18721b Accept non server sources for SQUIT 2014-04-26 17:21:33 -04:00
Adam 4eb0a3bdb7 Fix ModeManager::RebuildStatusModes, not all modes are in GetChannelModes() at the time this is called 2014-04-26 15:24:19 -04:00
Adam 6a03eb69eb Add "virtual mode" support
This allows fully tracking extbans and other modes set by a different
underlying mode, such as InspIRCd's namedmodes

Add two configuration options to cs_ban to configure which mode is set
and whether or not to kick banned users.

Add default "mute" fantasy command to botserv.example.conf
2014-04-25 16:51:06 -04:00
Adam 4fa2a00bd5 Close timed out proxyscan sockets better 2014-04-25 16:47:10 -04:00
Adam 82008d507c Fix Stas::Unserialize to return the instance 2014-04-25 16:46:37 -04:00
Adam 2ab4f175a8 Don't allow users to join channels they are already in 2014-04-25 16:20:23 -04:00
Adam c9473bcc67 Fix botserv/kick/bolds desc 2014-04-24 17:10:06 -04:00
Adam 75ed5a9b59 Fix os_stats counters not saving with db_sql_live. Bleh. 2014-04-24 01:50:50 -04:00
Adam f010ab7dbf Resend ircd login name on /ns set display 2014-04-24 01:40:56 -04:00
Adam 00b2cc9ce6 Require at least user@host format for akills. Fix XLine::GetHost() not returning anything if an xline only has a host 2014-04-24 01:38:45 -04:00
Adam d52cc7bcbc Bug #1587 - fix bot change not properly reintroducing clients 2014-04-24 01:25:25 -04:00
Adam 63838fa77d Merge pull request #72 from attilamolnar/2.0+svsnickfix
Fix SVSNICK target being a nick even when UIDs are available
2014-04-20 02:03:03 -04:00
Attila Molnar e36f8143e3 Fix SVSNICK target being a nick even when UIDs are available 2014-04-19 14:35:50 +02:00
Adam 72b26043b2 Remove unused event.
Mark some oper only usermodes as oper only.
Fix reading SID in TS6_SID_Retrieve
2014-04-18 02:21:06 -04:00
Adam f369157906 Use OnChanRegistered instead of OnCreateChan to set default mlocks.
Because OnCreateChan is called from ChannelInfo's constructor, during
DB loading it could cause mode locks to be unserialized without having
all channels loaded, which breaks things.
2014-04-17 16:58:04 -04:00
Adam ba46b8e4ab Merge pull request #70 from Jyzee/langFR-Patch
Update French language file.
2014-04-09 02:26:24 -04:00
Jyzee 254901aace Update French language file. 2014-04-09 07:49:14 +02:00
Adam c1c45a5db9 Do not clear all extension items tied to objects when unserializing.
Instead, pass the old object to the unserialization functions and let
them incrementally update the object.
2014-04-07 15:28:07 -04:00
Adam a65e95837f Document that memo_mail can be in nickserv defaults. These should move to memoserv.conf one day. 2014-04-06 23:13:46 -04:00
Adam 43219d3906 Do not apply module changes on rehash until after the new config has been applied. Fix renaming opertypes on reload. 2014-04-06 23:01:10 -04:00
Adam 1f8dec4c24 Fix /os mode to not require a mode when setting param modes which taken no argument when setting 2014-04-06 18:09:36 -04:00
Adam fb5c5e3442 Set minus no arg on +l in all proto mods
Set oper modes/vhost on oper too, evan after iding
Add umode +q to plexus
2014-04-02 22:37:35 -04:00
Adam e357c39774 Add travis config 2014-04-01 23:34:02 -04:00
Adam 10732baec2 Fix compile error in cs_set_misc with C++11 enabled 2014-03-31 22:41:02 -04:00
Zantox 068c6989de Small Grammar Fix 2014-03-31 20:19:03 -04:00
Adam 317d55f3f1 Fix ns_set password to read the correct parameter.
Even though 1 is past the "end" of the vector, because vectors never
shrink and due to how the command parser works, it is always less than
the capacity, and almost always contains what is in params[0] (though
this is of course implementation dependant), which is why this was not
identified sooner, as it executes cleanly under valgrind on every machine I can find.
2014-03-31 20:11:36 -04:00
Adam 1397fda786 Bump to Anope 2.0.1-git 2014-03-31 20:10:51 -04:00
Adam 4ccc478830 Anope 2.0.0 Release 2014-03-23 08:58:02 -04:00
Adam 100ecbb9be Update version.log 2014-03-23 08:57:19 -04:00
Adam cdf636e696 Regen langauge files 2014-03-23 08:57:08 -04:00
Robby- 45878bf182 SASL: Also disallow suspended nicks to login using EXTERNAL mechanism. Improve the log message for failed logins. 2014-03-22 21:14:02 +01:00
Adam f1bec3999d Do not allow SASL login to suspended nicks 2014-03-22 07:21:22 -04:00
Adam a259244297 Make bouncymodes harder to trigger by only bumping server modcount when something changes 2014-03-20 10:53:27 -04:00
Adam c1da009de3 Show a better log message when disconnecting from the uplink 2014-03-19 02:40:48 -04:00
Robby- 4f412bc213 cs_set_misc: Add missing override capability for services operators, and logging. 2014-03-19 03:05:54 +01:00
Robby- 1882916dc4 Update the dutch language file. 2014-03-17 01:15:28 +01:00
Robby- f436ce9912 m_ssl_gnutls: Fix deprecation warnings when using newer GnuTLS versions. 2014-03-17 00:58:51 +01:00
Adam ef9729fb02 Mark all channels as syncing when we connect to our uplink. They will
finish syncing later when the uplink syncs. Normally the channel state
is fully synced here anyway, except if we do not know the modes the
uplink has yet.

Also fix a related issue with resetting chanels and bouncing modes on
our clients, if this is done prior to knowing which modes exist it would
silently fail.
2014-03-14 22:13:04 -04:00
Adam 296a75f2a9 Do not allow users to add certs that other users are using. Only allow adding certfps if the user is using it. 2014-03-13 20:07:50 -04:00
Adam bce7237d9f Set LDAP_OPT_NETWORK_TIMEOUT to 0 in m_ldap to prevent the asynchronous
library cals from blocking...

Fix multiple possible null pointer derefs if modules pass null
interfaces (none currently do, but it is allowed)

Fix memory leak from results when services are destructed

Timeout queries that never come back.
2014-03-11 09:45:34 -04:00
Robby- 85834e19dc Update the dutch language file.
ns_maxemail: Bold code 2 -> 002.
2014-03-10 22:30:41 +01:00
Adam ca6b3723a9 Merge pull request #64 from ShutterQuick/2.0+hsgroupsync
2.0+hsgroupsync
2014-03-10 07:32:24 -04:00
Adam 23b1086072 Merge pull request #63 from alexbarton/ngircd-fix-KILL
ngircd protocol module: really kill users
2014-03-10 07:31:34 -04:00
Adam 860deb14ce Do not send unregistered notice to users who are logged in, even if their nick isn't registered 2014-03-10 07:26:09 -04:00
Adam 62885fa462 Set nickserv's modesonid on login too 2014-03-10 05:04:25 -04:00
Adam 3fef01e35b Fix compile error in m_sasl_dh-aes and m_sasl_dh-blowfish on unusually old g++ versions 2014-03-10 04:56:17 -04:00
Adam b0597e35ec Do not allow nickserv/ungroup to bypass ns_maxemail, and allow opers to bypass ns_maxemail 2014-03-10 04:31:08 -04:00
Adam 8d1ad6fbe5 Make nickserv/glist show the correct expire time for unconfirmed nicks 2014-03-09 22:59:16 -04:00
Adam 750569201a Add missing space to session exception expiration message 2014-03-09 22:56:25 -04:00
Adam 1a1a781b72 Remove mail:restrict as it is no longer useful. Changes nickserv/resetpass default to allow normal users to use it. 2014-03-09 10:07:13 -04:00
DukePyrolator 4b5ce8a972 irc2sql: removed the currentusers field from the chan table, keeping it updated on each join/part eats too many ressources 2014-03-09 04:55:35 +01:00
Daniel Vassdal 98cfdd26c4 ns_group: Don't require a nick param when logged in 2014-03-06 04:55:30 -08:00
Daniel Vassdal 051a42b547 hs_group: Allow automatic HS GROUP-ing on NS GROUP, and allow vhosts to be per account rather than nick. 2014-03-06 04:55:30 -08:00
Adam 220e278213 Open database files using std::ios_base::binary in db_flatfile, which Windows can require 2014-03-05 20:23:44 -05:00
Alexander Barton 547fe0da1a ngircd protocol module: really kill users
ngIRCd doesn't send a QUIT for each user KILL'ed, so kill them immediately.
2014-03-05 10:26:54 +01:00
Adam 09bec79b47 Fix 2 crashes from removing the permanent channel mode from channels which do not exist 2014-03-04 04:15:32 -05:00
Adam 55a5affcb8 Do not allow guest nicks to exceed nicklen, and use a default enforcer ident/host if none is provided 2014-03-04 04:15:32 -05:00
Robby- a8b4297023 Update the dutch language file. 2014-03-03 19:20:56 +01:00
Adam 5969362425 When unserializing channels with persist, set their ts=now. If we are supposed to lower it later we will then. 2014-03-01 22:41:45 -05:00
Adam 3ceae33b16 Convert limit and key mlocks in db_old 2014-03-01 21:56:26 -05:00
Adam 5de4c1fc97 Set +x on plexus when vhosts are activated, fix desync from /hs off 2014-03-01 21:40:47 -05:00
Adam fd109048dd Make db_old load entrymsg 2014-03-01 21:20:32 -05:00
Adam a0747516ce Export interface for cs_entrymsg 2014-03-01 21:20:18 -05:00
Adam 605e1f2a03 Make chanserv/invite show who invited you 2014-03-01 21:12:27 -05:00
Adam dc23c58869 Fix botserv help to show the correct fantasy characters 2014-03-01 21:11:58 -05:00
Adam b7e646ec83 Allow opers with chanserv/administration to use fantasy, even if they don't have the access for it 2014-03-01 20:02:17 -05:00
Adam 4d54358745 When unserializating channels and persist is set, only assign chanserv if the perm channel mode doesnt exist 2014-03-01 19:59:40 -05:00
Adam ed0882ec04 Do not enforce mlock when enforcing mlock 2014-03-01 18:39:10 -05:00
Adam 526c4e4659 Check modes after applying mlocks in db_old 2014-03-01 18:38:14 -05:00
Adam b70f72bf2b Do not allow changing the email of unconfirmed accounts 2014-03-01 04:31:52 -05:00
Adam 2ad4c1906e Fix incorrect comment in modules.example.conf 2014-03-01 04:27:45 -05:00
Adam 049760cc7e Allow svsjoin/svspart on yourself 2014-02-28 00:30:35 -05:00
Adam e2ecec31b5 Hybrid does not let us add resvs as a server, but the core expects to be able to qline bot nicks before introducing the bots as a way to prevent collisions, so try harder to find a valid bot to send resvs on startup 2014-02-27 23:21:50 -05:00
Adam fee016bb84 Handle nick collisions somewhat instead of blindly overwriting the nicks
in memory, which does weird things.

For fun different ircds implement this differently (Unreal compares
timestamps, TS6 compares timestamps and user username/host), and whether
or not we get a kill for our user also varies, so just kill everyone.

This can't really happen anyway with properly set qlines, only if
services haven't yet set the qlines, or possibly in a bot add/nick
user introduce race, or with enforcers, which not many ircds require.
2014-02-27 22:42:54 -05:00
Adam d24fb03917 Allow registration=mail forceemail=false to work, and simply give fully registered accounts to people who do not provide an email to nickserv/register 2014-02-27 04:49:28 -05:00
Adam 5adc8bfefc Do not take modes from users in channels with secureops off if we are always lowering channels timestamps to their creations 2014-02-27 04:48:48 -05:00
Adam abcf0cde5a Remove unreachable code in config.cpp, this error is caught earlier 2014-02-26 19:32:25 -05:00
Adam 8f3bd314ed Fix not detecting eols in the config reader when the end of the line is the end of a multiline comment 2014-02-26 19:26:50 -05:00
Adam e2d456d4ce Do not setuid/gid down until after modules are loaded 2014-02-26 19:24:32 -05:00
Adam 96202ae545 Log successful SASL auths 2014-02-24 22:23:12 -05:00
H7-25 2b0229d4e2 Update the italian language file 2014-02-25 03:22:55 +01:00
Adam beaa3196b3 Update Spanish translation, from Isaac Fontal <i_fontal@hotmail.com> 2014-02-24 16:14:40 -05:00
Adam b6d771a114 Anope 2.0.0-rc4 Release 2014-02-24 00:31:07 -05:00
Adam d3ed756bd0 Update version.log (why do we keep this around?) 2014-02-24 00:30:57 -05:00
Adam f8308841a6 Package dlls in src/win32 on Windows 2014-02-24 00:30:47 -05:00
Adam 1dfdf36fc3 Fix m_ssl_gnutls to send its cert. Most of this is from Attila. 2014-02-24 00:06:38 -05:00
Adam 4ac3ade126 Use a more reliable way to detect if services are running in anoperc 2014-02-23 23:08:35 -05:00
Robby- 212abeb986 webcpanel: Update copyright year.
ns_cert: Bold code 2 -> 002.
2014-02-23 23:42:43 +01:00
Robby- 7d4427c313 Regenerated language files. 2014-02-23 05:24:06 +01:00
Adam e836be489e Store a cert->account map and use it for SASL EXTERNAL and certfp auth 2014-02-22 17:46:00 -05:00
Adam 1db5c555d6 Merge pull request #58 from attilamolnar/2.0+gnutlsdep
[WIP] Make m_ssl_gnutls work with at least GnuTLS v2.8
2014-02-22 13:46:36 -05:00
Attila Molnar bb1b015103 Make m_ssl_gnutls work with at least GnuTLS v2.8 2014-02-22 16:59:10 +01:00
Robby- e42684ac39 Update italian translation, from Simos. 2014-02-22 16:40:56 +01:00
H7-25 d7de7eee60 Italian language completed translation, first release 2014-02-22 15:58:36 +01:00
Robby- 0a390ad392 Regenerated language files, and updated dutch language file. 2014-02-22 15:56:34 +01:00
Adam aa6b12c5eb Fix Windows build 2014-02-21 21:54:01 -05:00
Adam e2bd08fbff Add some missing serial updates in os_dns 2014-02-21 20:50:23 -05:00
Adam 2047934060 Regenerate Italian language file 2014-02-21 19:57:31 -05:00
Adam e07dcbff08 Update italian translation, from Simos 2014-02-21 19:57:31 -05:00
Adam e3a8a45a61 Merge pull request #56 from ShutterQuick/2.0+noxcrypt
enc_bcrypt.cpp: Get rid of the libxcrypt dependency by including code fr...
2014-02-21 19:49:29 -05:00
Lee Holmes f1ad7fd582 fix comment, activate not active 2014-02-21 20:41:41 +00:00
lethality 43f2645b32 update help info 2014-02-20 20:07:38 +00:00
Daniel Vassdal b6935e706c enc_bcrypt.cpp: Get rid of the libxcrypt dependency by including code from libxcrypt, and move enc_bcrypt out of extras 2014-02-20 11:42:20 -08:00
lethality a3c845894d Updated services crontab location 2014-02-20 17:11:11 +00:00
lethality 5933a5e9b1 Merge remote branch 'upstream/2.0' into 2.0 2014-02-18 22:24:24 +00:00
Adam 109d8f431f Do not import forbids with wildcards in their names, how 1.8 treats wildcaded forbids depends on the IRCd 2014-02-18 13:04:16 -05:00
Adam 1edb7e776b Merge pull request #54 from attilamolnar/2.0+webcpanelfix
Don't create zero length DataBlocks in BinarySocket::Write()
2014-02-18 12:59:37 -05:00
Adam 928e2e1b7c Fix loading noexpire channels in db_old 2014-02-18 12:57:31 -05:00
Adam 5a140e4898 Merge pull request #55 from attilamolnar/2.0+alphabet
Alphabetically order modules in modules.example.conf
2014-02-18 12:54:22 -05:00
Attila Molnar f64393941e Alphabetically order modules in modules.example.conf ('r' < 's' and 'w' < 'x') 2014-02-18 13:00:46 +01:00
Adam 0db81ca46a Merge pull request #52 from attilamolnar/2.0+gnutls
Add support for SSL connections powered by GnuTLS
2014-02-17 22:21:08 -05:00
Adam 7f7144de1f Merge pull request #53 from attilamolnar/2.0+reuseaddrfix
Fix setsockopt() with SO_REUSEADDR not working due to wrong argument type
2014-02-17 22:20:38 -05:00
Attila Molnar 3883716883 Turn BinarySocket::Write() into a no-op when called with l == 0 2014-02-18 03:28:02 +01:00
Attila Molnar 5beea4eb7e Fix TemplateFileServer writing empty messages resulting in zero length DataBlocks being created and later passed to SocketIO::Send()
Found while testing m_ssl_gnutls, fix suggested by @Adam-
2014-02-18 03:27:12 +01:00
Attila Molnar 2d0fdb74d1 Fix setsockopt() with SO_REUSEADDR not working due to wrong argument type 2014-02-18 02:31:01 +01:00
Adam 80588fba81 Fix os_ignore to work correctly with SQL 2014-02-17 19:43:19 -05:00
Adam ef7dc94f88 Move most of the implementation details out of os_forbid.h, fixes crashing if a module adding a forbid is unloaded without removing the forbid 2014-02-17 19:39:25 -05:00
Adam 7b4eec9748 Remove docs/IRCD, it is very outdated and no longer correct at all 2014-02-17 13:53:45 -05:00
Adam baff417652 Move encryption.h to include/modules 2014-02-17 13:53:04 -05:00
Adam 7074944810 Fix not applying ipv[46]_cidr to connecting clients in os_session, #1573 2014-02-17 13:39:49 -05:00
Attila Molnar 1c39d25cca Add m_ssl_gnutls 2014-02-17 01:12:01 +01:00
lethality f1c5c27f3f Merge branch '2.0', remote branch 'upstream/2.0' into 2.0 2014-02-16 23:49:57 +00:00
Attila Molnar 9c0134ee2c Rename m_ssl to m_ssl_openssl and update docs 2014-02-17 00:41:36 +01:00
Adam 959fee5937 Fix Windows build 2014-02-16 18:28:39 -05:00
Adam 3854a5570f Merge pull request #51 from ShutterQuick/2.0+oldforbid
db_old.cpp: Correctly import forbidden nicks and chans
2014-02-16 16:07:36 -05:00
Daniel Vassdal ab1e0ebfb3 db_old.cpp: Correctly import forbidden nicks and chans 2014-02-16 12:56:27 -08:00
Adam cffe864900 Merge pull request #50 from ShutterQuick/bcrypt
Add enc_bcrypt
2014-02-16 14:10:25 -05:00
Daniel Vassdal bc1575318b modules.example.conf: Update examples for bcrypt - also clearify that m_sasl_dh* requires openssl 2014-02-16 11:07:37 -08:00
Daniel Vassdal a71d0f6757 enc_bcrypt: Add module 2014-02-16 11:07:36 -08:00
Adam 50d7bf710e Merge pull request #48 from ShutterQuick/2.0+nnghsasl
Add SASL mechanisms DH-AES and DH-BLOWFISH
2014-02-14 19:15:43 -05:00
Daniel Vassdal d44bcef31b modules.example.conf: Add info about m_sasl_dh-aes and m_sasl_dh-blowfish 2014-02-14 16:06:24 -08:00
Daniel Vassdal c0ce71e55a m_sasl_dh-blowfish: Add module 2014-02-14 15:12:25 -08:00
Daniel Vassdal 0eeb0caf08 m_sasl_dh-aes: Add module 2014-02-14 15:12:25 -08:00
Daniel Vassdal b13bded620 sasl.h, m_sasl.cpp: Move IdentifyRequest to the header 2014-02-14 15:03:42 -08:00
Daniel Vassdal 1b1180fda6 base64.cpp: B64Decode(): Don't crash on "=" 2014-02-14 13:42:21 -08:00
Daniel Vassdal a4ecfa5bc0 Anope::string: Add .data() 2014-02-14 13:05:01 -08:00
Daniel Vassdal 3c8009b495 sasl.h, m_sasl.cpp: Add RemoveSession(), DeleteSessions(), and have active sessions closed when a Mechanism is unloaded 2014-02-14 13:05:01 -08:00
Adam ca85df2d74 Don't convert XOP access entries to levels in db_old 2014-02-14 11:10:20 -05:00
Adam 5dfa6598c2 Do not sync channels in Channel::Reset if they are in the middle of syncing, and checkmodes in Channel::Sync. Fixes channel modes sometimes not being set if always_lower_ts is on 2014-02-14 11:09:53 -05:00
Adam f428d61045 Use better command access checking in webpanel for operserv/akill 2014-02-13 19:42:02 -05:00
Adam fc50edf046 Disable m_sasl by default 2014-02-12 14:49:22 -05:00
Adam 269c2786e9 Add SASL EXTERNAL support. Thanks to ShutterQuick for fixing and testing. 2014-02-12 14:39:41 -05:00
Adam 96fc940af7 Only trim newlines and carriage returns in BufferedSocket::GetLine 2014-02-11 19:25:44 -05:00
Adam 8c8e6d464a Make initial registration notices with mail less repetitive 2014-02-11 18:08:09 -05:00
Adam 22976b8a7c Fix flags +* or -* sometimes incorrectly reporting opers as overriding when they are not 2014-02-11 17:33:28 -05:00
Robby- 4dff710361 ns_suspend: Show the setter of the suspension and the reason when manually unsuspending. 2014-02-11 03:57:15 +01:00
Robby- fe80d2cded os_modinfo: Add ability to list only extra modules. 2014-02-11 02:26:00 +01:00
Adam 16dac87841 Regenerate anope.it_IT.po 2014-02-10 10:03:38 -05:00
H7-25 30c59562e0 Update Italian language translation 2014-02-10 09:57:24 -05:00
Adam 6d61a84286 Add an opertype priv "protected" to not allow services to kick a user.
Also classify ulines as protected
2014-02-09 18:51:52 -05:00
Adam f6b8596c7b Log memoserv/sendall 2014-02-09 10:59:36 -05:00
Adam da6760f606 Properly convert suspended nicks and channels in db_old 2014-02-07 13:28:07 -05:00
Adam ad962ad759 Allow other modules to suspend nicknames and channels without having to subclass suspendinfo 2014-02-07 13:12:57 -05:00
Adam 5327becf41 Allow other modules to be able to view and modify cs and ns set_misc data 2014-02-07 13:02:20 -05:00
Adam f43c99c5cc Merge pull request #46 from ShutterQuick/patch-1
Update cs_updown.cpp
2014-02-07 12:12:52 -05:00
ShutterQuick c0a491cb06 Update cs_updown.cpp
cs_updown: Make CS DOWN remove all modes, not just one
2014-02-07 18:04:16 +01:00
Adam 66cc965fd7 Ignore nonblocking errnors on socket operations 2014-02-05 15:26:03 -05:00
Adam 2440514a7b Document a little more accurrately the privilege stuff and document why the access lists behave as they do 2014-02-05 08:46:56 -05:00
Adam fad1da81a3 Process mode changes in ns_ajoin before joining users, fixes not being able to ajoin users to +R channels on Unreal 2014-02-05 08:46:56 -05:00
Adam bb0e2a9a07 Make it easier to use fantasy without botserv, and document it 2014-02-05 08:46:51 -05:00
Adam 4f8c4f8fef Actually just allow mode clear to take any mode name 2014-02-03 10:05:13 -05:00
Adam 25957111b2 Fix typo in mode clear, exempts -> excepts 2014-02-03 08:41:27 -05:00
Adam 9a8895359a Apply the last commit to cs_list 2014-02-02 03:21:02 -05:00
Adam 53f8db0198 Merge pull request #44 from ShutterQuick/2.0+listfix
ns_list: Fix typo (NS_SUSPENDED -> SUSPENDED)
2014-02-01 11:42:08 -08:00
Daniel Vassdal f94cb7fb11 ns_list: Fix typo (NS_SUSPENDED -> SUSPENDED) 2014-02-01 11:24:52 -08:00
Adam c30fb13a0c Merge pull request #43 from ShutterQuick/2.0+ajoinfix
2.0+ajoinfix
2014-02-01 11:12:39 -08:00
Daniel Vassdal 7926238fd2 Improve IsChannelValid() 2014-02-01 10:55:12 -08:00
Daniel Vassdal 211a944210 ns_ajoin: Treat ',' as a separator. 2014-02-01 10:35:10 -08:00
Daniel Vassdal cff61617e1 commasepstream: Add a allowempty param 2014-02-01 10:31:17 -08:00
Adam 4455d4346c Merge pull request #42 from ShutterQuick/2.0+saslfix
Have SASL login in on the account name instead of nick alias
2014-01-31 02:43:26 -08:00
Daniel Vassdal 405b41ec87 protocol/(inspircd12/unreal/charybdis): Have SASL login in on the account name instead of nick alias 2014-01-31 01:41:27 -08:00
Adam bacb276181 Use TBURST on hybrid to set topics 2014-01-28 14:45:21 -05:00
Adam 4c1f6b48d8 Merge pull request #40 from attilamolnar/2.0+csclonefix
Fix cs_clone allowing users to clone a channel to itself
2014-01-26 16:08:23 -08:00
Attila Molnar 53a78c2688 Fix cs_clone allowing users to clone a channel to itself 2014-01-26 20:06:36 +01:00
Robby- e61a283c02 Update language files. 2014-01-26 16:33:28 +01:00
Adam c3302194eb Anope 2.0.0-rc3 Release 2014-01-26 01:18:38 -05:00
Adam cd184596a2 Only have extras rerun config if it was successfully run before. Config can create the build directory even if cmake isn't found. 2014-01-26 01:17:58 -05:00
Adam f28b1142f5 Correct error message in gl_global to reference the right module 2014-01-26 01:15:19 -05:00
Adam 87230c17b7 Fix extra space in the unknown command error message 2014-01-26 01:14:58 -05:00
Adam a29b7897f0 Use the SQLine reason in the kick reason for sqlined channels 2014-01-26 01:14:28 -05:00
Adam e965bc3049 Revert "Rename db_old hash plain -> none which is what 1.8 calls it"
This reverts commit 9a9ca41750.
2014-01-26 01:03:43 -05:00
Adam 01780c9e7a Fix setname handler on unreal 2014-01-25 17:58:20 -05:00
Adam 4d3363f83f Anope 2.0.0-rc2 Release 2014-01-21 21:55:59 -05:00
Adam 75e27b6a47 Update version.log 2014-01-21 21:55:59 -05:00
Adam fbaca3f7a1 Update language files 2014-01-21 21:55:56 -05:00
Adam 81b01bb55b Fix missing colon in stats and top, fix smileys and actions count. Patch by bush. 2014-01-21 21:10:06 -05:00
Adam 1027ec667a Made the chanstats confs try and look similar to every other configuration file 2014-01-21 17:33:57 -05:00
Adam 4d9273efa4 Unbreak account stuff from commit ccae59430a. 2014-01-21 17:20:15 -05:00
Robby- 67c13b41ee Update and fix some more typos in the dutch language file. 2014-01-21 00:29:59 +01:00
Robby- 10386a39f0 Make the server connected (uplink) message more sane. 2014-01-21 00:28:40 +01:00
Adam dc19ea3993 Alias charybdis/uid -> ratbox/uid because grawity is weird 2014-01-20 02:19:06 -05:00
Adam 2261fa3fe7 Fix example config for bs_autoassign 2014-01-20 00:05:53 -05:00
Adam fab9f0fecc Change config readers bool logic to accept unrecognized values as yes 2014-01-19 19:03:19 -05:00
DukePyrolator df8d85d80a m_chanstats: fixed the config options NSDefChanstats and CSDefChanstats 2014-01-19 08:11:19 +01:00
DukePyrolator 4b192addd2 m_chanstats: do not count negative words if you have more smileys in a line than words 2014-01-17 06:49:49 +01:00
Adam d27594f8a6 Fix webcpanels chanserv/modes page 2014-01-15 16:59:32 -05:00
Adam 43aaaeab7e Mark m_sql_log, m_rewrite, and m_dnsbl as extra so they show up in modlist with no parameters, as they are "unusual" 2014-01-14 03:50:08 -05:00
Adam ccae59430a Call User::Login after sending the login event, in case a module wants to act on the fact that the ircd sees the user as logged in 2014-01-14 03:49:22 -05:00
Harakiri 974adb7ce1 Update French language file 2014-01-12 17:44:14 -05:00
Adam f3531e7564 Fix not initializing module in the main log constructor 2014-01-10 01:41:03 -05:00
Adam 15a27c69ba Move oper count and vhost stuff to set/remove mode internal 2014-01-09 17:01:18 -05:00
Adam 0b0db75ba5 Fix repeat kicker message to show the correct number of times a user can say the same thing before being kicked 2014-01-09 16:45:07 -05:00
Adam b90a9a339a Fix empty ttb in bs kick repeat on 2014-01-09 16:09:38 -05:00
Adam 64f9aed761 Hook to OnUserLogin instead of OnNickIdentify in ns_ajoin 2014-01-09 15:46:04 -05:00
Adam 56f2cbeb62 Remove help access levels from help output because it no longer exists 2014-01-09 15:44:58 -05:00
Adam 9a9ca41750 Rename db_old hash plain -> none which is what 1.8 calls it 2014-01-09 15:42:31 -05:00
Adam e19661e1de Make DNSBL log message use the module type and give it a category too 2014-01-09 15:41:49 -05:00
Adam 09879c5c15 Fix compile with -std=c++11 2014-01-06 13:59:14 -05:00
Adam 12f55e4711 Hide +s channels from /cs list output to non opers 2014-01-06 12:54:29 -05:00
Adam 43c56541d5 Add a small note about the extras script in docs/INSTALL 2014-01-06 00:19:19 -05:00
Adam d3078850d2 Merge pull request #39 from DanielOaks/cs-status-channelname
Add the channel name to reply of cs-status, useful for applications
2014-01-05 15:39:09 -08:00
Daniel Oaks d4f7db122d Add the channel name to reply of cs-status, useful for applications 2014-01-06 09:37:08 +10:00
Adam 201ad9c191 Always run uid/sid generation loop at least once to not reuse older ids immediately 2014-01-04 17:54:04 -05:00
Adam 45c0bf8f32 Fix recovering enforcers not properly quitting them 2014-01-04 17:45:58 -05:00
Adam d64855b35b Allow m_sql_authentication to disable email changing similar to m_ldap_authentication 2014-01-04 13:44:47 -05:00
Adam 4617fdbf3d Make /cs status use the chanserv/auspex privilege instead of chanserv/access/modify, as it only views channel access 2014-01-04 13:41:08 -05:00
Adam ac204745c8 Also make m_sql_authentication block nick grouping if it is disabling registration 2014-01-04 12:24:04 -05:00
Adam e1ce6174ce Move modules/stats under extras because it depends on m_mysql, update its config a bit to look similar to all of the other config files 2014-01-03 19:54:14 -05:00
Adam 2781b6946d Add an explicit privilege for os_config's modify 2014-01-02 11:44:18 -05:00
Adam 1e502c8450 Update os_config 2014-01-02 11:41:49 -05:00
Adam 004c4cbe5f Move modules out of extras that dont have external dependencies 2014-01-02 11:03:33 -05:00
Adam 072202c181 Have db_old load news.db too 2014-01-02 10:56:57 -05:00
Adam 595dad4ec1 Update copyright to 2014. This was done with:
find include/ src/ lang/ docs/ modules/ *.* Config -exec sed -i 's/-20.. Anope Team/-2014 Anope Team/i' {} \;
2014-01-01 20:48:38 -05:00
Adam a374e245fd Make inspircds module class names not conflict because it confuses OSX 2014-01-01 16:21:38 -05:00
Adam 6e6543d3ed I don't think this OnBotKick to hold channels is necessary anymore as Sync should cover everything now, and this causes weird things when the last user in a channel kicks themselves out using the bot. Also handle users rejoining a channel while its held better. 2013-12-31 16:12:21 -05:00
Adam 6124af68cc Show the command name and not service name in the access denied log messages 2013-12-31 15:31:56 -05:00
Adam f21b40bfb4 Set last_realname in m_ldap_authentication when new nicks are registered 2013-12-30 10:50:15 -05:00
Adam 567700b5a6 Also have m_ldap_authentication disable nick grouping if registration is disabled 2013-12-30 10:42:07 -05:00
Adam 3b80da9cbd Fix loading kicker ttb data 2013-12-30 10:34:57 -05:00
Robby- c519119197 Don't expire ignores when NoExpire is enabled. 2013-12-29 05:27:36 +01:00
Robby- 780bc7ca14 Do not translate command parameters that do not have translatable strings in them, or are not meant to be translated in the first place. 2013-12-28 23:28:30 +01:00
Adam 3d12752655 Fix naming collision between modes +g and +G on inspircd, rename the common badwords censor mode to censor 2013-12-28 09:39:16 -05:00
Adam 9c0ceed36a Readd channel description to ns alist output 2013-12-27 17:24:52 -05:00
Adam 187973c16a Allow inverting opertype privs and commands, to make them behave like the log settings 2013-12-27 17:20:47 -05:00
Adam 072631aa38 Fix forbid add message to show the correct type 2013-12-27 17:15:07 -05:00
Adam b638b653d2 Fix crash when channels are registered that do not exist by non users 2013-12-27 17:12:01 -05:00
Adam 0fb2b60cff Fix xmlrpc dochannel example 2013-12-26 21:06:26 -05:00
Adam 16f3f0cbc0 Don't leak ldap results 2013-12-26 21:06:07 -05:00
Adam b28db7bc55 Fix crash with badwords of type 'end' and possibly when messages contain only control codes. Also fix matching single words at the beginning of lines. 2013-12-26 17:33:06 -05:00
Adam 9bf9cfcf5e If using db_flatfile:fork, don't allow multiple saves to happen at one time on shutdown/restart wait for any pending saves to finish 2013-12-26 16:08:56 -05:00
Adam 0c9750a22b Default the founder privilege to level 10000 as I had originally intended. Document set fonder usage in cs_levels help. 2013-12-26 15:19:48 -05:00
DukePyrolator 69c5aeca57 updated the extras script to find the cmake binary installed by ./Config 2013-12-26 19:44:41 +01:00
DukePyrolator 59c3c1326b m_chanstats: 1) fixed the SASET message 2) decreased the size of some VARCHAR fields, this hopefully fixes the 'key too long' error on some systems. 2013-12-26 18:46:20 +01:00
Adam 5829d7da39 Add a config option for whether or not to reset the TS of persistent channels to their registration date 2013-12-26 12:06:39 -05:00
Adam 2f29c1388c Fix not setting the persist flag on newly registered channels when the permanent channel mode is set prior to registering or during registration 2013-12-26 11:39:35 -05:00
Adam fc0e8264c0 Fix dropping channels in the webpanel 2013-12-26 08:02:19 -05:00
Adam 19eccf0cae Fix setting english language in db_old, document how not setting defaultlanguage really works 2013-12-25 15:16:04 -05:00
Adam dbf5106c09 Fix sqline on hybrid 2013-12-25 14:29:41 -05:00
Adam 3029a2db1a Don't epxire forbids when noexpire mode is on 2013-12-24 20:58:06 -05:00
Adam 53df61b4c2 Make webcpanel's nickserv alist behave more like /ns alist 2013-12-24 20:48:09 -05:00
Adam 7d27689d05 Set a description for the resend command 2013-12-24 20:20:47 -05:00
Adam 421e194c5a If last usermask and last realhost are the same, don't show both because duh 2013-12-24 18:19:44 -05:00
Adam c442bc18af Do not allow /cs clone access to add duplicate masks to the access list or allow growing the list pass accessmax. Fix reading botservs case sensitive config option. Give a better error message when trying to clone badwords if there is no botserv. 2013-12-22 08:37:49 -05:00
Adam 1c02961b60 Anope 2.0.0-rc1 Release 2013-12-20 22:57:58 -05:00
Adam 268d529078 Update version.log 2013-12-20 22:57:56 -05:00
Adam 4bc4b98ac7 Regenerate language files 2013-12-20 22:56:38 -05:00
Adam e8b42607e6 Update Changes and Changes.conf 2013-12-20 22:56:34 -05:00
Adam e792865a04 Fix reading unconfirmed expire config value when register type is set to mail 2013-12-20 20:24:40 -05:00
Adam 2b5a1d8c8f Fix deleting multiple access entries when one of them matches your access group 2013-12-20 19:48:20 -05:00
Adam 7cf21342f4 Merge pull request #33 from Robby-/1.9-nllangupdate
Update the dutch language file for new and modified strings, and fix some more typos while we're at it.
2013-12-20 12:18:44 -08:00
Adam ba8a646a33 Add missing syntax to botserv kicker help 2013-12-20 14:57:06 -05:00
Robby- fa50252c77 Update the dutch language file for new and modified strings, and fix some more typos while we're at it. 2013-12-20 20:15:30 +01:00
Adam 46bb2de866 Document hs reject's reason 2013-12-20 02:28:35 -05:00
DukePyrolator c2e9b8080b Revert "m_chanstats: changed the default value of some fields to NULL instead of ''"
This reverts commit 6ff83c3407.
2013-12-20 07:34:49 +01:00
Adam c0cd76a0a5 Don't leak opers and opertypes on /os reload, fix not updating opertypes on non conf opers on rehash 2013-12-19 21:34:21 -05:00
Adam ab6cd3b26c Fix a few commands not being able to find non conf opers 2013-12-19 20:35:09 -05:00
Adam 275f2fd374 Fix db_old assigning empty greets to users who did not have a greet. Fix debug log message in extensible.cpp 2013-12-19 08:24:21 -05:00
Adam c4d4107412 Channel::Sync can delete the channel, so safely iterate them when syncing from a server burst 2013-12-19 07:32:46 -05:00
DukePyrolator ae5da11389 irc2sql: fixed not storing ssl information on inspircd 2013-12-19 07:16:17 +01:00
Adam e6544a06f4 Update last_modes when keepmodes is set on or off 2013-12-17 11:02:06 -05:00
Adam 1ab7d53649 Set pending mode changes immediately when an object is removed from the mode stacker. And fix mlock creator from cs set persist on. 2013-12-17 10:58:02 -05:00
Adam d709c819d2 Default build type to release 2013-12-16 12:50:49 -05:00
DukePyrolator 2ad4a8667f irc2sql: fixed small typo 2013-12-15 16:52:08 +01:00
DukePyrolator 6ff83c3407 m_chanstats: changed the default value of some fields to NULL instead of '' 2013-12-15 16:24:22 +01:00
DukePyrolator adbc5a0e65 irc2sql: improved handling of netsplits 2013-12-14 09:56:51 +01:00
Adam f9a4a0fbef Log all admin commands by default. I was trying to give an example of log settings, but people seem to leave the default and then get confused when it only logs operserv commands 2013-12-13 18:41:01 -05:00
Adam a282a5c9c4 Fix 96af354ad5 to not burst topics if they are not set 2013-12-10 20:17:29 -05:00
Adam 3ddfa2fc1d Explain how to setup the locales on Ubuntu 2013-12-10 20:15:34 -05:00
Adam 50f430fb23 Document which modules are extra and how to enable them 2013-12-09 21:18:01 -05:00
DukePyrolator 1b4d62e2bc irc2sql: fixed incorrect usercount for channels and servers after netsplit, fixed not displaying the channelmodes 2013-12-09 05:57:36 +01:00
Adam 43f608ff2b Merge pull request #32 from Harak/1.9
Updated french installation instructions.
2013-12-03 23:58:57 -08:00
Harak f0313a45cb Updated french installation instructions. 2013-12-03 22:09:06 +01:00
Adam 96af354ad5 Send channel topics on initial burst, sync chanels after db load, and try to after unserializing persist on 2013-12-02 02:01:39 -05:00
Adam b5966cf99e Fix crash from loading exceptions with db_old and then unloading db_old 2013-12-01 21:16:50 -05:00
Adam faab2c6793 Fix 5e4d52ad47 more 2013-12-01 18:58:20 -05:00
DukePyrolator c6f85b9312 made the chanstats fantasy modules work again. 2013-12-01 12:09:34 +01:00
Adam 5e4d52ad47 Fix 1542937d64 2013-12-01 05:00:28 -05:00
Adam 6628e714c7 Require email address to be passed to resetpass 2013-11-30 02:18:20 -05:00
Adam 0f9e931fa6 Revert "Fix session user logoff hook"
This reverts commit 3b8f1cd59f.
2013-11-24 22:00:01 -05:00
Adam 1f6385c095 Merge pull request #29 from Robby-/1.9-nllangupdate
Update the dutch language file for new and modified strings, and fix some typos while we're at it.
2013-11-24 14:11:52 -08:00
Robby- be044c9d6e Update the dutch language file for new and modified strings, and fix some typos while we're at it. 2013-11-24 22:04:27 +01:00
Adam 90aa576fb3 Fix/clean/clarify some stuff found by coverity scan 2013-11-23 22:12:33 -05:00
DukePyrolator 77e5744341 fixed webcpanel not html escaping displayed memos, bug reported by Mietzie 2013-11-22 01:22:24 +01:00
Adam e1264a5913 Re-find dependant protocol modules on unload, they can be reloaded from under us while we are running 2013-11-21 18:06:38 -05:00
Adam 18f423226c This actually can't happen, but this is what was meant 2013-11-21 17:38:54 -05:00
Adam c967a4ce88 Shrink nick and channel default flags in db_old, otherwise converted nicks/channels always end up with the defaults enabled, even if they explicitly have them set off. Fix setting nickserv defaults to none. 2013-11-21 17:31:18 -05:00
Adam 1542937d64 Hybrid has no quit on kill, so internally kill users when killed 2013-11-21 11:34:42 -05:00
Adam 3b8f1cd59f Fix session user logoff hook 2013-11-21 11:20:10 -05:00
Adam fbbdedf17e OnJoinChannel can modify the ts for a channel, so update keep_their_modes in the sjoin handler before processing a user. Otherwise we can desync and think users have a channel status when they really don't. 2013-11-20 18:10:26 -05:00
Adam b75faefea4 Don't claim to support SAVE on charybdis... 2013-11-19 10:06:22 -05:00
Adam 676db0ba6f Actually we can use this ssl ext type which apparently does exist 2013-11-18 18:36:37 -05:00
Adam b2802d0beb Give a reason why we cant clear nonssl users on ircds with no ssl usermode 2013-11-18 17:18:00 -05:00
Adam 826ae9b6c0 Make /ms check better able to tell if youve recently sent a memo to someone 2013-11-18 17:18:00 -05:00
Adam 2c3e8a76c9 Check override permission in cs_flags for modifying existing entries too 2013-11-18 17:18:00 -05:00
Adam 0bb23f3f4d Merge pull request #27 from Cronus89/patch-1
Update placeholder text for hostmask
2013-11-18 07:53:45 -08:00
Adam b36498149d Merge pull request #28 from Robby-/1.9+cslevels
cs_access: Fixed disabling channel levels. Also, correctly log /cs levels commands.
2013-11-18 07:53:36 -08:00
Adam f6cf978d0c Show the correct setting name in /ns help set message 2013-11-18 10:52:28 -05:00
Adam aeebaed4b2 Default adding to 1 in mlock add/del, always reply with something even if the input is invalid 2013-11-18 10:49:54 -05:00
Robby- faabff0261 cs_access: Fixed disabling channel levels. Also, correctly log /cs levels commands as an override or a normal command at the time it is executed, so, right before levels actually get modified. 2013-11-18 07:17:40 +01:00
Adam cba811bc6b Default nogroupchange to on, update comment to make sense 2013-11-17 23:35:57 -05:00
Cronus89 dcae3d7bda Fix placeholder for akill.html 2013-11-17 19:37:19 -06:00
Adam fc69b68891 Don't default /cs list or /ns list to require oper privs 2013-11-16 16:38:10 -05:00
Adam 15e527fa70 Add missing .founder checks to cs_flags 2013-11-16 15:14:15 -05:00
Adam 3ccf26fda4 Delete notify/client sockets when m_dns is unloaded 2013-11-16 14:55:03 -05:00
Adam c0b0ee1b39 Make /cs up set modes you have the priv for, but not the auto priv, because Robby says so 2013-11-16 13:33:20 -05:00
Adam b353e1db79 Also check command names in cs_log when seeing if a newly added entry already exists. Also force command names lowercase when looking them up. 2013-11-16 12:05:20 -05:00
Adam 3edce88698 Fix default level names for access change/list in db_old 2013-11-16 10:39:25 -05:00
Adam 9e1fb11f93 Tell people why they cant disable the founder level instead of claiming it doesn't exist 2013-11-16 10:22:18 -05:00
Adam 316c280a57 Add help for /cs set keepmodes 2013-11-16 10:20:35 -05:00
Adam cc2a999b4e Allow founders to change flags even if they don't have any matching access entries on the channel 2013-11-16 10:04:26 -05:00
Adam 51a9f64adb Use the source's sync state and not mine when processing sjoins to determine whether or not to sync the channel on creation, instead sync it when the server syncs. 2013-11-16 09:38:13 -05:00
Adam 332fd23927 Add general:hideregisteredcommands to hide commands that require you to be identified to use. This changes the behavior of hideprivilegedcommands to only hide commands users don't have the oper privileges to execute. 2013-11-15 15:10:23 -05:00
Adam 1aca2922af Allow mlocking +r on ratbox/whatever else 2013-11-15 14:24:33 -05:00
Adam b65fd34a39 Set the default db name to anope.db 2013-11-12 20:12:56 -05:00
Adam c9f4c2db1f try/catch cs_access AccessUnserialize just incase, don't crash if ns_ajoin is loaded before the protocol module 2013-11-12 19:19:21 -05:00
Adam d1248d1249 Merge pull request #25 from Robby-/1.9-nsidfaillogacctnames
ns_identify: When logging failures, also show the account name, and that it exists or not.
2013-11-09 05:40:58 -08:00
Adam afc5c91a09 Do not grant auto privileges to founders if they match other access
entries. This allows channel founders to disable auto +qo without
having to globally disable autoop or the levels.
2013-11-09 05:51:38 -05:00
Adam aa6c3f3474 Show (none) on flags list if a user is on the access list but has no flags 2013-11-09 05:47:14 -05:00
Adam 2a35151d12 Remove db_plain 2013-11-09 05:41:10 -05:00
Adam fa7cee9759 Don't allow users to remove non-flags access entries that are >= them with /cs flags, also spotted by TGS 2013-11-08 17:47:13 -05:00
Jens Voß 431b2e6768 Merge pull request #26 from Cronus89/patch-1
CREATE EVENT chanstats_event_cleanup_weekly failed due to calculating im...
2013-11-04 21:44:08 -08:00
Adam 853e926920 Merge pull request #23 from Phr33d0m/1.9
Some fixes here and there
2013-11-04 15:05:10 -08:00
Denis M. (Phr33d0m) 8267407a78 Add a couple of usability and aesthetic changes, fix the half-broken chanlist functionality, add a couple of missing ESCAPED_CHANNEL vars
Add missing ESCAPED_CHANNEL
Changed EMAIL_TYPE to FORCE_EMAIL. Now makes more sense
Make it more obvious when the 'email' field is optional
Add a 'Retry' button to go back to the registration page
Fixed broken chanlist functionality. Before even if the user clicked on the channels nothing happened, now it goes straight to the 'set' page (at least something happens)
Small fix, disable the 'Save' button if user has no SET powers
Add another missing ESCAPED_CHANNEL
Add a more clear definition of what hostmasks are allowed in that field, either user@host or nick\!user@host
Fix wrongly placed var
Changed some aesthetics
2013-11-04 23:59:55 +01:00
Cronus89 a831e5d306 CREATE EVENT chanstats_event_cleanup_weekly failed due to calculating improper start of week. 2013-11-03 21:41:01 -06:00
Robby- b901dfee84 ns_identify: When logging failures, also show the account name, and that it exists or not. 2013-11-04 02:59:16 +01:00
Adam 6e8d2bf09d Attempt #3 2013-11-01 05:19:48 -04:00
Adam 70e9b20274 Fix release build, not too sure why this is, compiler seems to infer this as a copy of ChanAccess 2013-11-01 05:12:30 -04:00
Adam 4ee9021adb Compare access entries created with the levels access system by access level and not by privilege set, as two entries can have the same privset but different levels, but still represent two different levels of access. This prevented users from adding other users at a lower access level when that level had the same privset as them. Spotted by TSG. 2013-11-01 04:58:38 -04:00
Adam c8db362bca Cleanup some access(group) comparison logic in access.cpp 2013-11-01 04:56:17 -04:00
Adam c710625cd3 Use Config::GetClient for looking up services for command{} blocks which lessens the insanity of renaming services 2013-11-01 02:07:35 -04:00
Adam ac2f8bf64d People often seem to get tripped up by this, so document more clearly 2013-11-01 02:04:21 -04:00
Adam 04e7fa493a Don't take modes in SetCorrectModes if the user has the ME privilege 2013-11-01 02:04:21 -04:00
Adam f7692ec77f Merge pull request #24 from Robby-/1.9+fixes
1.9+fixes
2013-10-28 01:37:47 -07:00
Robby- 4a1d32c5fd Fix logging when identifying with an SSL certificate fingerprint. 2013-10-28 09:30:56 +01:00
Robby- 498da95205 Stop requesting identification when changing nicks to a registered nick, and the current client certificate fingerprint matches one on the nickname's list. 2013-10-28 09:30:20 +01:00
Robby- 710d4848bd Fix kill and killquick default expiry times.
ns_access and ns_cert: Fix accessmax defaults, also state in the config that 0 is not a valid value.
2013-10-28 09:25:17 +01:00
Robby- bd3bed2118 Fix some typos and touch up the configs a little. 2013-10-28 09:13:53 +01:00
Adam fe31b0a666 Fix m_httpd not passing non post data to other modules correctly & close connections immediately when we are done flushing data 2013-10-27 20:33:37 -04:00
DukePyrolator 1f97d6d879 fixed a small error that causes irc2sql to not compile 2013-10-27 18:10:15 +01:00
DukePyrolator 4bd5649105 fixed make install not installing the new example config files 2013-10-27 04:53:57 +01:00
DukePyrolator b5af310f8a added the irc2sql gateway module 2013-10-26 18:42:58 +02:00
DukePyrolator 2cfc97053f moved some config options from example.conf to nickserv.example.conf 2013-10-26 18:33:07 +02:00
DukePyrolator 6cde65a57f new event OnSetDisplayedHost 2013-10-26 18:33:07 +02:00
Adam 7cb35eeedf Make nickserv's confirmemailchanges option work 2013-10-22 03:44:06 -04:00
Adam f0318fdbe8 Fix some typos of language 2013-10-19 03:43:04 -04:00
Adam 93a83da771 Fix os_dns not using remove_split_servers and fix remove_split_servers=true readd_connected_servers=false causing delinked servers to remaing in pooled+not active state 2013-10-19 03:42:12 -04:00
Adam 0ff1bb9d5b Bump for 1.9.10-git 2013-10-14 01:19:42 -04:00
Adam c0dea5ef30 Anope 1.9.9 Release 2013-10-12 15:28:49 -04:00
Adam fd4ac7f6fc Update version.log 2013-10-12 15:28:49 -04:00
Adam e635f547d6 Update language files 2013-10-12 15:28:48 -04:00
Adam 7167cff703 Update changes and changes.conf sort of 2013-10-12 15:05:42 -04:00
DukePyrolator b844154857 fixed a typo in the last commit, reported by Robby 2013-10-10 18:12:48 +02:00
DukePyrolator 5e56dfdb1a replaced the country name in the Language header in the language files by four letter codes 2013-10-10 07:51:35 +02:00
Adam e1d460e211 Call OnBotPrivmsg after checking if the message is a ctcp, not before. fix typo in opersrev.example.conf 2013-10-09 16:27:16 -04:00
DukePyrolator 9ea6fb25b9 set the Language header in the language files so msgfmt doesnt complain 2013-10-09 22:10:08 +02:00
DukePyrolator 7755668679 updated docs/EVENTS 2013-10-06 22:07:01 +02:00
Adam 569efbb66b Fix Windows build 2013-10-05 13:29:34 -04:00
Robby- 696801430b anope.nl_NL.po: Translate newly added string, and fix some spelling/grammar. 2013-10-05 13:22:56 -04:00
Adam 1b08ba8f41 Always show expire time for nicks in /ns info to opers, even if the user is online
Make Anope::strftime show "now" if the time is now
Fix typo in nickalias.cpp for the type of the last_seen field, spotted by grawity
2013-10-05 13:21:28 -04:00
Adam 277f735505 Hide expires in /cs info if the channel is actively in use as it confuses people 2013-10-05 01:07:51 -04:00
Robby- f63a2bdfb4 Big update of the Dutch language file.
cs_ban: Merge the syntaxes into one.
2013-10-05 00:49:12 -04:00
Robby- feb412bdb1 cs_mode: Fix override in /cs mode set. 2013-10-05 00:33:03 -04:00
Robby- ab856683c7 os_news: Add some logging. 2013-10-05 00:33:03 -04:00
Robby- 97d7c21193 Fix logging for log type 'other'.
os_ignore: Log expired ignores to the normal log level.
cs_drop: Allow Services Operators to actually drop channels in Read-Only mode.
os_akill, os_sxline, cs_akick: Log deletions by number.
2013-10-05 00:33:03 -04:00
Adam e5b8435769 Fix not setting -r when channels are deleted 2013-10-05 00:33:03 -04:00
Adam e589080827 Fix /ns alist showing a header/column header if the user has no access 2013-10-05 00:33:03 -04:00
Adam 257b10ee91 Hide privileged commands in ns help set and cs help set if configured 2013-10-05 00:33:03 -04:00
Adam 353ee5cc93 Fix xline uid generation when the one chosen already exists 2013-10-05 00:33:03 -04:00
Adam b094132c9d Log akill deleteions by number 2013-10-05 00:33:03 -04:00
Robby- 82006b868f cs_entrymsg: Check for the correct override privilege.
Make some more commands check if Read-Only mode is active.
cs_flags: Show a meaningful message when a user is not found on the access list.
os_set: Add missing capabilities to the readonly help output.
OperServ: Add logging to certain commands.
NickServ: Undo logging for listings.
2013-10-05 00:33:03 -04:00
Robby- ba5a3f5f00 Don't explicitly reference services nicks.
os_forbid: If NickServ is available, have it send the forbid reason instead of OperServ.
2013-10-05 00:33:02 -04:00
Adam 7b6c08b53a Exempt ulines/myself from bounce mode check 2013-09-29 17:22:25 -04:00
Robby- 47b692f9ae os_session: Add some empty lines to the session help command to improve readability. 2013-09-29 15:42:22 -04:00
Robby- ed06609ae1 NickServ: Change a few log wordings and add missing log calls to some commands.
ns_suspend and cs_suspend: Fix log wording, and correct syntax to show the reason is optional.
2013-09-29 15:42:22 -04:00
Robby- 32a57150ec ns_access: Allow LIST by Services Operators on suspended nicks. Change wording.
ns_ajoin: Fix the number of command parameters. Check for nick suspension. Do not allow just any Services Operator to access other users' AJOIN, require nickserv/ajoin. Change wording.
ns_cert: Add ability for Services Operators to modify other users' certificate lists.
2013-09-29 15:42:22 -04:00
Robby- 2a5e8f1890 cs_akick: Make the default autokick reason translatable.
os_forbid: It is required to specify a reason.
2013-09-29 15:42:22 -04:00
Robby- a04c320b4b cs_set: Fix showing expiry time in INFO output.
cs_sync: Check for the correct override privilege.
2013-09-29 15:42:22 -04:00
Robby- 4221a507cc Fix NickServ default nick expiry time. 2013-09-29 15:42:22 -04:00
Adam 44dd8d07d9 Add chanserv:always_lower_ts config option to always lower registered
channels timestamps to the creation time which fixes some race
conditions regarding users joining empty registered channels and doing
things prior to the -o from services coming through.

Without always_lower_ts attempt to bounce mode changes from bad users,
which will work okay in most cases.
2013-09-29 15:41:32 -04:00
Adam f7aa69b596 Correct expiretmeout and updatetimeout descriptions in example.conf, it is no longer triggerd by /os update 2013-09-29 13:04:12 -04:00
DukePyrolator d5ecc39104 display modechars instead of modenames in cpanel channelmodes 2013-09-29 04:23:33 +02:00
Adam 84a02d2709 Remove "Nick" reference from the /os ignore del message, as it can only contain hostmasks 2013-09-27 20:11:51 -04:00
Adam 4b059beb24 Replace this silly random code generation code with something more sane looking 2013-09-27 20:07:07 -04:00
Adam b319fb089c Fix compile warnings and errors found by clang 2013-09-27 19:11:02 -04:00
Adam 17196887ad Allow modifying mlock on nonexistant (but registered) channels 2013-09-27 19:11:02 -04:00
Adam 02d67f682a Allow /os forbid list <type> 2013-09-27 19:11:02 -04:00
Adam b306108740 Fix /os ignore del on nicks 2013-09-27 19:11:02 -04:00
Robby- 12a0311aaa Add missing columns to os_forbid. Make most lists with dates use the shorter output format. 2013-09-27 19:11:02 -04:00
Adam cf653fc084 Fix ms del all not actually deleting some memos
Fix numbering of memos in ms list
2013-09-27 19:11:02 -04:00
Adam 5cc7fc0387 Fix ms list crash 2013-09-27 19:11:02 -04:00
Robby- 832bc35135 Fix a few more modules to look in the right places for certain settings. 2013-09-27 19:11:02 -04:00
Robby- 06c5914820 Fix akillids to work again. os_session: Add missing num to del syntax and add missing expiry column. 2013-09-27 19:11:02 -04:00
Robby- bf67b9ee5c Make column titles in listings translatable.
Make some more strings translatable, and remove some that don't need translation at all.

Make expirytimes and units translatable.

Make predefined messages in listings also translatable.

Make the remaining command descriptions translatable.

Make some ns/cs info strings equal to dedupe in translation file. Add missing no-autoop setting to cs info output. Make some strings translatable.
2013-09-27 19:11:02 -04:00
Adam 829c169063 Translate strftime correctly 2013-09-27 19:11:02 -04:00
Adam 4948120b69 Translate SendSyntax() and spacify it properly 2013-09-27 19:11:02 -04:00
Adam 994471f5a7 Align info formatters with translated keys? 2013-09-27 19:11:02 -04:00
Adam 80c02740d0 Translate listformatter properly 2013-09-27 19:11:02 -04:00
Adam df3c0b7b52 Fix various commands to properly report a given expiry time is invalid 2013-09-27 19:11:02 -04:00
Robby- 45702992ac ns_cert, ns_set: Make strings equal for one translation instance 2013-09-27 19:11:02 -04:00
Robby- 9756f96b85 example.conf: nickserv:emailregistration -> nickserv:registration 2013-09-27 19:11:02 -04:00
Robby- 6ac0364f74 Fix os_stats to display SQLINEs and SNLINEs on non-supporting IRCds 2013-09-27 19:11:02 -04:00
Robby- 4f820a7d41 Fix typos, remove dead language defines.
os_set: Add missing debug text in help output.
2013-09-27 19:11:02 -04:00
Adam 5f7127dd92 Don't send regex qlines and nlines to the IRCd 2013-09-27 19:11:01 -04:00
Adam dcb3ff7d34 Dont send BURST twice on inspircd
Drop matching nicks on forbid.
2013-09-27 19:10:49 -04:00
Adam 1107b92699 Drop matching channels on forbid, and enforce nick forbids even on IRCds
with no qlines
2013-09-27 18:02:26 -04:00
Adam 3b0b1bc80e Don't send SQLines unless the IRCd supports it 2013-09-27 18:02:26 -04:00
Adam b60b23fd48 Only allow using os_oper add and del if you have the privileges for what
you are giving or taking.
2013-09-27 17:21:46 -04:00
Robby- 5aac6377c2 Correctly detect override in cs_ban on masks 2013-09-27 17:21:31 -04:00
Adam 20856fb59c Remove +r etc when channels are deleted 2013-09-27 17:21:20 -04:00
Robby- 7545763cd4 Added missing override capabilities and log calls to some ChanServ commands 2013-09-27 17:21:20 -04:00
Adam 1818b19eba Fix cs_mode lock reply if nothing is done
Fix not clearing forbids when os_forbid is unloaded
Apply nick and chan forbids when added
Fix loading forbids until after the service is constructed
2013-09-27 16:33:56 -04:00
Adam abc7e4b423 Fix os_news to not load items until the news service is constructed
Fix session exceptions not expirigin
2013-09-27 16:33:03 -04:00
Adam e5ece18ee7 Readonlyize many commands 2013-09-20 21:09:35 -04:00
Adam 8641b995c4 Merge the two memo del events into one. Since they had the same name it was confusing the event system 2013-09-20 15:21:32 -04:00
Adam b880240d72 Make os_session akill ip ranges and not individual user's ips 2013-09-19 13:35:52 -04:00
Adam 5ce90ba7d1 Fix not updating last_seen on expire nick for nicks with secure off. Don't show Expires in /ns info if the nick is online currently as it confuses people 2013-09-19 12:38:28 -04:00
Adam 98bae827e1 Require confirmation in /cs drop by requesting the channel name twice 2013-09-16 15:54:09 -04:00
Adam e3c05efe5e Remove static variables from functions in modules which causes them to be marked as gnu unique objects, which breaks dlclose()/dlopen() on g++ 4.5+ 2013-09-16 06:47:42 -04:00
Adam 8cbaf7e990 Update Spanish translation, from Isaac Fontal <i_fontal@hotmail.com> 2013-09-12 07:20:26 -04:00
Adam 339f41aebc Fix allowing duplicate entries on the snline list
Have proto mods recognize cidr ranges as zlineable IPs
Remove operserv/global from global.conf because its dumb
Fix example config ~botserv/set example to work as expected
2013-09-08 21:53:06 -04:00
Adam 55e4ef9d3a Fix logging /os set list. Enforce snlines on ircds that can't have snlines set by just killing the user. Fix double call to OnMatch() when a user matches an xline 2013-09-08 06:02:35 -04:00
Adam f63e4ceebe Alpabetize channels in /ns alist and on webcpanels chanserv page 2013-09-08 04:55:03 -04:00
Adam b005089f2f Dont allow multiple list modes with the same param on the mode list at once 2013-09-03 19:58:40 -04:00
Adam 1b42e26642 Cap mode stacker max line length 2013-09-03 19:40:03 -04:00
Adam 4691351167 Cleanup previous commit
Fix log messages from commands send through webpanel
Don't show OperServ section to non opers
2013-09-03 18:51:18 -04:00
DukePyrolator 404debf789 updated the chanserv section in webcpanel 2013-09-03 04:37:09 +02:00
DukePyrolator 752a5ca1b7 add vhost support for hybrid 2013-08-31 08:46:56 +02:00
Adam e1a1cf0e6f Dont crash on HasPriv() on an empty access group 2013-08-29 23:22:48 -04:00
Adam 3fabc2f831 Fix ns_ajoin on unregisterd +i channels 2013-08-29 23:13:29 -04:00
Adam 59ea36c831 Move Serialize::Types to construct after the corresponding extensible items they require when unserializing 2013-08-27 03:18:43 -04:00
Adam fac880664c Make chanserv:require not default to r 2013-08-27 02:56:54 -04:00
Adam 7f890ce98d Log parameters given to /cs mode set. Add logging to /os ignore. 2013-08-26 02:05:41 -04:00
Adam 50e1a3e96c Fix status mlocks. Fix reply from lock add. 2013-08-26 02:00:25 -04:00
Adam 6b79349e6c Fix User::IsIdentified with check_nick, do not remove +r on bursting clients until after server sync 2013-08-25 23:26:45 -04:00
Adam 678f54903d Fix not resetting channel status modes on our clients when a channel ts lowers 2013-08-25 22:57:26 -04:00
Adam 714a4a3004 Remove unnecesary mlock code in cs_mode, change mode set events to never bounce modes set by bots or servers, as it was possible to get modules to fight with each other 2013-08-25 21:33:52 -04:00
Adam 34826f71c7 Merge pull request #22 from fgsch/misc
Better ngIRCd support
2013-08-25 01:49:42 -07:00
Adam 847cceaba3 Create persistent channels on startup, which used to work and got lost somewhere
Fix some oddities with using persistent channels with no botserv
Send list modes to uplink when bursting
Fix issues with persist + keepmodes
Fix /os modes clear all not clearing all status modes
Fix operwall on ratbox/plexus
Dont apply mlock in SetCorrectModes since that just recursively calls itself unncessarially
Change command logging to show the command name and not the service name
2013-08-25 04:48:43 -04:00
Adam 09046e3c99 Show what kind of nick protection is enabled in /ns info 2013-08-25 04:48:43 -04:00
Adam 00a19529c3 Add logging to several operserv commands 2013-08-25 04:48:43 -04:00
Adam 446b3a910d Save unconfirmed status and passcodes in the database.
Fix db_sql_live to not reinsert all records if there are extra columns.
Plexus has no chmode +r
2013-08-25 04:48:43 -04:00
Federico G. Schwindt 76f5d4b316 Sort parameters and correct comments 2013-08-25 04:54:35 +01:00
Federico G. Schwindt 9b59925144 For ngIRCd, on nick change set mode -R 2013-08-25 04:54:32 +01:00
Federico G. Schwindt 243d781e99 Add login support for ngIRCd
This is implemented via the accountname METADATA command
2013-08-24 17:56:46 +01:00
Jens Voß 8be5f53f1f Merge pull request #21 from Phr33d0m/1.9
Use CDN for the rest of the .js files
2013-08-23 09:59:28 -07:00
Denis M. (Phr33d0m) cd49bb40c2 Use CDN for the rest of the .js files 2013-08-23 11:57:32 +02:00
Adam ef3d115bae Merge branch '1.9' of github.com:anope/anope into 1.9 2013-08-23 04:42:24 -04:00
Adam 9f1178ec58 Remove SSL cert verification because we dont use it 2013-08-23 04:36:02 -04:00
Adam 3bc2db561b Fix reading post data in m_httpd 2013-08-23 04:13:08 -04:00
Adam fad603e7a4 Merge pull request #20 from Phr33d0m/1.9
Redesign body of the pages.
2013-08-23 00:03:58 -07:00
n0kS Phr33d0m 5f006bf139 Fixed an incorrect layout, a couple of typos and a wrong form action 2013-08-23 08:42:45 +02:00
n0kS Phr33d0m aaa12cc018 Use a local copy of the background image 2013-08-23 08:11:24 +02:00
n0kS Phr33d0m 2238db8338 Make the navbar brand a different font to distinguish it from the rest of the navbar links. 2013-08-23 08:06:47 +02:00
Adam 4d1492d444 Remove webpanel:ssl configuration option because its dumb 2013-08-23 01:14:00 -04:00
n0kS Phr33d0m 5c4414e4a5 Removed innecessary logo width, the img-responsive will take care of that. 2013-08-23 07:05:57 +02:00
n0kS Phr33d0m 6f9b77e336 Don't use an external svg logo anymore, but a local png one. 2013-08-23 07:04:09 +02:00
Adam 154fa25e8f Fix m_httpd handling fragmented http requests 2013-08-23 00:57:36 -04:00
n0kS Phr33d0m 9793062007 Merge branch '1.9' of github.com:anope/anope into 1.9 2013-08-23 06:43:57 +02:00
n0kS Phr33d0m f86dc247e5 Redesign body of the pages. Now they have a distiguished panel heading and panel body. Also added background colour to currently selected section. 2013-08-23 06:39:23 +02:00
Adam 2b1f75a313 Fix m_httpd enabling ssl if m_ssl is loaded after it 2013-08-22 22:45:20 -04:00
Adam 5ac0c9a327 Fix previous commit 2013-08-22 17:33:16 -04:00
Adam e8763d5b3c Always set +o on users who have access for it, even if higher modes have a prefix 2013-08-22 01:48:17 -04:00
Adam ce7a32a994 Do not have cs_access try to represent non levels access entries as levels access entries. Sometimes it cant accurately be done and it confuses people. 2013-08-22 01:13:28 -04:00
Adam 0c1cc08e28 Update readme more 2013-08-21 23:22:27 -04:00
Adam e12e4e6956 Update readme 2013-08-21 23:20:05 -04:00
Adam 52535cf6fb Merge pull request #19 from Phr33d0m/1.9
A completely rewritten Control Panel
2013-08-21 20:17:20 -07:00
n0kS Phr33d0m 121d0a6e5b Fix a typo and remove unnecessary 'effects' 2013-08-22 03:27:29 +02:00
n0kS Phr33d0m 34535814e4 A completely rewritten Control Panel using some bootstrapping, jquery and lots of CSS 2013-08-22 02:37:43 +02:00
n0kS Phr33d0m 8bcc6840ce Nuking the old design with fire 2013-08-22 02:36:01 +02:00
n0kS Phr33d0m 08d113332c Fix incorrect GET method as we are submitting POST data 2013-08-22 02:32:04 +02:00
Adam 765943062e Always require the registered channel mode is set. Comment out default config requiring "r" as some ircds use it for registered users only 2013-08-21 01:35:57 -04:00
Adam 17cca42d48 Make maxaliases=0 really mean no limit 2013-08-21 01:27:14 -04:00
Adam 760fdc4049 Fix not setting vhost on nickserv update 2013-08-18 14:42:59 -04:00
Adam ead4aa7ed9 Fix 318 raw being sent for uids on ts6 ircds 2013-08-17 14:05:01 -04:00
Adam 65911dd1be Replace some get calls on <bool> extenisble types with hasext 2013-08-14 19:50:08 -04:00
Adam 4abfdcbb9c Do not default mlock +r, it is unnecessray and only clutters up the mlock list 2013-08-14 18:24:04 -04:00
Adam de5c8c0d38 Fix some issues with suspend 2013-08-12 15:45:50 -04:00
Adam 8e011bbb78 Respond to remote whois on inspircd for users on us that aren't service bots 2013-08-12 15:44:28 -04:00
Adam f15a9749f9 Use less strict valid ident checks on hybrid, unreal, and inspircd 2013-08-12 14:36:49 -04:00
Adam f1956b039d Remove channels from accesss lists when they expire/drop 2013-08-11 17:14:39 -04:00
Adam 53d5b7c29e Fix chanserv opersonly setting 2013-08-11 16:04:10 -04:00
Adam 812cb04fde Add DNS Notify support 2013-08-11 15:48:46 -04:00
Adam 1314d5b4f1 Fix cs_kee_pmodes default 2013-08-11 15:38:09 -04:00
Adam 490601de3a Fix chghost on charybdis 2013-08-11 12:25:58 -04:00
Adam c7aab50bff Support DNS ANY query type 2013-08-10 23:28:58 -04:00
Adam c507c78d5a Do not have ratbox or plexus pull modes from hybrid, it is entirely too confusing. Also fix cs_mode config 2013-08-10 17:59:31 -04:00
Adam 58c05687bf Add "simple seen" mode to cs_seen 2013-08-10 17:43:13 -04:00
Adam f8cdcc65c6 Merge pull request #18 from fgsch/1.9
Add certificate fingerprint support for ngIRCd
2013-08-10 14:26:27 -07:00
Adam 10a918f9e1 Default some listmax config settings to 50 2013-08-10 12:33:27 -04:00
Adam e4d1769a8b Add os_info 2013-08-10 12:29:12 -04:00
Adam 7cd80a2131 Fix logging LOG_NORMAL logs in m_sqllog. Fix/add more compat extensible items to ChannelInfo::Unserialize 2013-08-08 03:03:57 +00:00
Federico G. Schwindt 9d6f88de39 Add certificate fingerprint support for ngIRCd 2013-08-07 23:44:58 +01:00
Adam b93d650b1f Revert "Shrink to fit module event vectors when modules are removed from them"
Sometimes the events call the function the event is in, which causes a resize
while the original function is iterating.

This reverts commit 7f1b5552dc.
2013-08-07 21:19:49 +00:00
Adam c480695369 Fix db_sql to not remove objects when shutting down, as some modules that unload before it when shutting down remove their items then 2013-08-07 19:40:05 +00:00
Adam 7f1b5552dc Shrink to fit module event vectors when modules are removed from them 2013-08-07 17:27:18 +00:00
Adam 4865a8cfff Add m_sql_log 2013-08-07 16:44:35 +00:00
Adam 1efd289488 Fix inspircd jupe mess again, it wasn't working when juping servers that didn't already exist 2013-08-07 15:03:11 +00:00
Adam 83e4b183ea Add keepmodes setting 2013-08-01 14:07:56 +00:00
Adam 1e625b6837 Use MessageSource as the source for many IRCDProto funcs
Keep track of what user modes are oper only/server only/etc
2013-08-01 13:39:35 +00:00
Adam 402c624e45 Move chanstats stuff to stats/ 2013-07-29 12:02:40 +00:00
Adam fde83f6564 Rethink jupe/squit thing somewhat. Workaround for the inspircd rsquit/squit mess 2013-07-26 21:40:16 -04:00
Adam f0f43cf426 Fix build on late versions of cmake 2.4 2013-07-26 12:57:36 -04:00
Adam 3dc64bac4d Fix issues with 'Me' related to previous commit 2013-07-26 08:45:44 -04:00
Adam 2450a64bf4 Interally quit servers when juped 2013-07-26 07:38:42 -04:00
Adam b48293a632 Merge pull request #17 from fgsch/1.9
Fix levels on the ngircd module
2013-07-23 10:04:44 -07:00
Federico G. Schwindt e908dc0dc7 Make ChannelModeStatus level mandatory
Levels are used in Channel::SetCorrectModes() when removing modes.
2013-07-23 18:03:32 +01:00
Federico G. Schwindt 378c9203df Squashed commit of the following from Federico G. Schwindt <fgsch@lodoss.net>:
Date:   Mon Jul 22 22:40:07 2013 +0100

    Correct pasto

    Use proper name for included file.

Date:   Mon Jul 22 22:30:23 2013 +0100

    Indent defaults

Date:   Mon Jul 22 22:28:50 2013 +0100

    Correct option name

    signkicklevel is really signkick_level.

Date:   Mon Jul 22 22:25:24 2013 +0100

    Ensure some of the options are persisted

    Correct type for memo_signon, memo_receive, memo_mail and memo_hardmax so
    they're serialized.

Date:   Mon Jul 22 22:23:36 2013 +0100

    Add missing newline

plus additional suggestions from fgs
2013-07-22 23:45:08 -04:00
Adam 779f3788c9 More validation stuff from fgs 2013-07-21 18:29:35 -04:00
Adam 604da89813 More basic config validation, and fix crash when no uplinks are configured. spotted by fgs 2013-07-21 03:59:59 -04:00
Adam e11abdc4f0 Fix m_ldap service names from defaulting ldap/ldap/main 2013-07-21 00:37:21 -04:00
Adam 5aac04dffe Move SendLogin() back to User::Identify, it was moved at some point? but doesn't as intended in ::Login 2013-07-21 00:23:24 -04:00
Adam 7480fbda2b Fix removing old connections in m_ldap and m_mysql 2013-07-20 23:36:20 -04:00
Adam 9629ccb374 Fix more compile warnings found on newer g++ versions 2013-07-20 19:46:13 -04:00
Adam cb70d976ba Change cs_xop access check to use command order 2013-07-20 09:19:52 -04:00
Adam 6db0186947 Fix not setting the correct compile flags on modules and fix the resulting warnings 2013-07-20 03:06:20 -04:00
Adam 492eac20a8 Fix restoring topics on uplink sync 2013-07-20 03:06:20 -04:00
Adam c8511a625d Fix unserializaing seeninfos 2013-07-20 03:06:20 -04:00
DukePyrolator f6b915a169 added whois support to the ngircd protocol module, thanks to fgs for sending the patch 2013-07-19 22:28:33 +02:00
DukePyrolator 02c1724d75 some updates to the german langfile, thanks to kaylee for translating 2013-07-19 22:11:40 +02:00
Adam 7e87bb69fc Default xlines to be set by me 2013-07-15 23:59:19 -04:00
Adam aae522d72b Fix ModeManager::GetStatusChar 2013-07-15 23:23:54 -04:00
Adam 0a821640bb Fix deleting seeninfos 2013-07-14 20:37:42 -04:00
Adam 37733dea65 Fix Extensible<bool>::Set with a value (which is redundant due to the bool specailization) 2013-07-14 03:16:23 -04:00
Adam eabb9c0c11 Fix deleting badwords/modes/logs etc 2013-07-08 20:35:04 -04:00
Adam b103d16eb1 Fix loading some older compat flags and showing noexpire on /ns info 2013-07-08 15:48:37 -04:00
DukePyrolator e3b6ae3649 added missing NOTICE support to hybrid. sorry 2013-07-08 07:42:35 +02:00
Adam 0ff48e1538 Move op/deop/etc back to an actual command, its too hard to use cs_log with it as rewrites. Allow cs_log to work with either command names or service names. 2013-07-07 23:13:29 -04:00
Adam 53038d83bf Wipe services's module dir prior to make install 2013-07-07 23:13:16 -04:00
DukePyrolator 2ea594d677 added protocol support for incoming NOTICEs 2013-07-08 05:05:13 +02:00
DukePyrolator e957c7b2d2 m_dnsbl: updated the url to DroneBL in modules.example.conf 2013-07-08 05:04:04 +02:00
Adam 9a4f27e0a3 Only set stuff in ExtensibleUnserialize if there is something to set 2013-07-05 02:19:06 -04:00
Adam fccc4a4fa6 Fix sometimes not unloading all modules on shutdown 2013-07-05 02:09:43 -04:00
Adam 4325073524 Fix ns_set_misc and cs_set_misc 2013-07-05 02:09:27 -04:00
Adam 55199f0a4c Read most of the old common flags for compat 2013-07-04 23:05:30 -04:00
Adam 7edc76f7fb Fix deleting mode locks 2013-07-04 23:05:30 -04:00
Adam 3fbdde5e18 Fix Extensible dtor 2013-07-04 20:04:51 -04:00
Adam 9f8b4ac382 Allow access and flags to take privilege names 2013-07-04 01:21:14 -04:00
Adam 998925c90a Fix rehashing via SIGHUP and m_mysql 2013-07-04 01:19:40 -04:00
Adam 7f971043bc Allow channels on access lists 2013-07-03 22:45:00 -04:00
Adam c2e1a8a3e2 Fix some warnings and errors reported by valgrind 2013-07-03 19:44:13 -04:00
Adam c62b3cb275 Fix a few issues found by Attila (invalid array access in channel set events, os_chankill inf loop) 2013-07-02 01:56:13 -04:00
Adam 1a3d9a016d Change extensible keys to require explicitly having a type defined for it. Completely modularize more features like bs_kick, entrymsg, log, mode, etc. Move fantasy to its own module. Move greet to its own module. 2013-07-01 22:17:52 -04:00
DukePyrolator 518182ac92 m_mysql: handle multiple result sets returned from multiple statements or procedure calls 2013-06-30 05:28:01 +02:00
DukePyrolator 7d0e063300 added the missing accessmax option to the ns_cert configuration block 2013-06-22 17:06:48 +02:00
DukePyrolator 5e36d848d5 pseudoclients now trigger OnJoinChannel and OnPartChannel 2013-06-22 13:41:05 +02:00
DukePyrolator fee461f3d0 added support for CertFP on hybrid 2013-06-22 13:40:19 +02:00
Adam 1773eef143 Don't enforce usestrictprivmsg on TS6 IRCds and cache the value of usestrictprivmsg 2013-06-19 20:53:40 -04:00
KindOne 7704ee7107 Removed inspircd 1.1 reference from conf. Corrected a few spelling issues. 2013-06-19 20:07:15 -04:00
Adam 5ac1e9175d Set vhosts when users id to an account (and not a nick), add account arg to user ctor to ease handling users who connect already identified 2013-06-19 19:03:56 -04:00
DukePyrolator 5695c9e079 fixed a typo in the last commit. sorry. 2013-06-18 08:01:36 +02:00
DukePyrolator f92b0d6ea0 added support for hybrids new umode +S (client is connected via SSL/TLS) 2013-06-18 07:48:07 +02:00
DukePyrolator fc527b464a checking for ssl users when ajoining ssl only channels on inspircd, fixes 1466 2013-06-18 07:35:47 +02:00
Adam a93b315bd3 Fix cidr::match with odd cidr ranges 2013-06-15 23:27:01 -04:00
DukePyrolator 5246424dc0 added an 'extras' script to enable/disable extra modules before compile 2013-06-15 07:11:50 +02:00
Adam 1316147a8c Update Spanish translation, courtesy of Isaac Fontal 2013-06-15 00:09:25 +00:00
Adam 70319ab8be Fix usestrictprivmsg /msg vs / logic 2013-06-13 20:50:59 -04:00
Adam 7dd358972a Fix possible crash in Extensible::ExtensibleUnserialize if a null entry is in it 2013-06-12 02:33:30 +00:00
Adam d463ae3b1e Allow users to change their language to english when the default language is not 2013-06-12 02:30:21 +00:00
lethality ebda113f44 Made the message for unconfirmed nicks relevant to the ns_register registration setting 2013-06-06 17:28:59 +01:00
lethality 6ab6eca0a6 fixed typo, though I doubt it affects anyone/anything 2013-06-05 20:56:16 +01:00
Adam b1ba1ec8ac Made sepstream::GetToken less recursiveish 2013-06-01 21:58:08 -04:00
Adam 9956da18e3 Move OnJoinChannel event to trigger after the user has completely joined and document it more about what you should and shouldnt do in it 2013-06-01 21:56:52 -04:00
Adam b56e71ab14 Move CheckKick event to Channel and make os_forbid use it instead of kicking users in the join event, which does bad things 2013-06-01 14:55:45 -04:00
Adam 6f45d72497 Made m_mysql's Escape() function safe against escaping strings > BUFSIZE 2013-05-31 18:34:21 -04:00
Adam f5c01bf617 Fix /hs waiting 2013-05-31 01:44:32 -04:00
Adam 06bad31b18 Fix Channel::SetCorrectModes to never remove modes <= voice (currently secureops enforces everything, inclurding voice) 2013-05-28 22:17:22 -04:00
Adam 576aaff3da Don't compare system time to a users timestamp to determine when to collide with a user, if the time on services vs the ircd are different it does weird things 2013-05-28 21:07:07 -04:00
Adam c5bc8fab32 Include <iterator> in services.h as now more than one file uses it 2013-05-28 13:51:23 -04:00
Adam f6e2ebe145 Fixup last commit. We have events in log's destructor so we cant log messages from it, and this check in modulemanager is bogus/has a typo 2013-05-28 13:43:45 -04:00
Adam 37b3535543 Initially attach all modules to all events, and detach them as the events are run if they are not implemented per module 2013-05-27 19:36:37 -04:00
Adam c21e8d9204 Fix webcpanel build 2013-05-26 19:34:58 -04:00
Adam 22658d63bd Get rid of the remaining references in the core to specific services. Move more stuff out of the core to the proper modules. 2013-05-26 17:13:11 -04:00
Adam f2dee1e1d6 Update INSTALL and place some example link configurations in example.conf 2013-05-26 15:27:28 -04:00
Michael Wobst 968ef349d6 Update Hybrid protocol module for Hybrid 8.1 2013-05-25 15:47:56 -04:00
Adam d6640ed5ee Give an error message when the configuration file ends with an unterminated block 2013-05-25 14:08:50 -04:00
Adam aabc217a6b Fix /join 0 2013-05-20 23:45:41 -04:00
DukePyrolator d82391e46d made our database backup filenames more readable 2013-05-20 06:42:38 +02:00
Adam 7aa02864d2 Mark service:channels as a "botchannel" and don't try to hold them on sync, as the client should always be in the channel 2013-05-19 01:11:55 -04:00
Adam 2a8202c832 Give botserv bots assigned by persist the same botmodes as normal bots, fix some typos, remove unused variable 2013-05-18 23:45:10 -04:00
Adam be4a39ceb6 Fix desync when empty permanent channels are dropped on ircds that no have permanent channel mode 2013-05-18 15:47:26 -04:00
Adam a3dc75c61c Ignore define{} blocks defining directives to itself 2013-05-18 14:46:42 -04:00
Adam 14dc142a92 Add botserv bot usermode config option 2013-05-18 14:26:18 -04:00
Adam 51b7d53108 Add a config option for the default log bot 2013-05-18 13:08:26 -04:00
Adam 3253455792 Tabify some stuff in config.cpp 2013-05-18 12:25:26 -04:00
Adam 879b310580 Fix Windows build 2013-05-18 00:27:03 -04:00
Adam 5ff3aa7209 Yet another variable shadowing error which only show on newer gcc versions 2013-05-17 23:45:02 -04:00
Adam ca93122a68 You would think my compiler would at least warn me about this. but no. 2013-05-17 23:20:24 -04:00
Adam 2428264315 Add Redis database support 2013-05-17 23:04:18 -04:00
Adam cc4a14b0ba Removed some hard coded command names in help output 2013-05-17 22:53:55 -04:00
DukePyrolator 934b584374 do not validate nicks from ulined servers. this also fixes bug #1521 2013-05-15 03:23:20 +02:00
DukePyrolator 4237d49d41 improved handling of mlocks and topiclocks on inspircd 2013-05-12 11:09:34 +02:00
Charles Kingsley 1c36de5ab1 Fix config to default prepend_channel true for fantasy 2013-05-11 17:13:01 +01:00
Charles Kingsley da948be089 Update botserv.example.conf for xop fantasy commands 2013-05-11 17:06:16 +01:00
Adam 9384a4f088 Fix ChannelMode::CanSet 2013-05-10 16:17:24 -04:00
Charles Kingsley 4d62c673fa Fix typo in example.conf - thx rodr1go 2013-05-10 20:18:48 +01:00
Adam 7426b3b04a Readd check for users.size() == 1 before holding channels 2013-05-08 20:53:28 -04:00
Adam 735e234c2c Fixed some issues and desyncs with creating empty permanent channels on startup & dropping empty channels 2013-05-08 20:26:45 -04:00
Adam 735f0ba6cf Fix crash when we kill users because of a double free 2013-05-08 18:26:23 -04:00
Adam 9ee7c825e1 Check for peace being on before denying a mode change in cs_mode 2013-05-08 18:15:39 -04:00
Adam 912103ec13 Allow using sxlines on ircds that do not support them, since we always enforce them anyway 2013-05-08 11:31:20 -04:00
Adam f843e7bd90 Fix suspend info output in info and improved it 2013-05-08 11:13:48 -04:00
Adam d7e2ab688b Add activate_on_set option for hostserv 2013-05-08 10:40:46 -04:00
Adam 5e7085130e Fix reading multi line quotes from the conf with blank lines or lines with only whitespace 2013-05-08 10:12:31 -04:00
Adam 9b07e163c0 Make sockaddrs/cidr not throw on invalid ips to give us an easier/cheaper way to test for a valid IP 2013-05-08 09:50:43 -04:00
Adam 6859decfb8 Fix setting some default flags, reading fantasy blocks, and minusers setting being off by 1 2013-05-07 00:24:37 -04:00
Adam e23baf4297 Allow /os exception to contain CIDR masks 2013-05-07 00:06:02 -04:00
Adam c7f77b3b66 Fix a few issues with the poll socketengine 2013-05-06 23:48:18 -04:00
Adam 6578829fa6 Use I_OnUserQuit for os_session because I_OnPreUserLogoff gets called too late, after the users server can be gone. Fix a couple other small things 2013-05-06 22:18:38 -04:00
Adam ef06226521 Update the rest of modules.example.conf, default inspircd status modes to a sane rank incase they are prefixless, and 50 other things 2013-05-06 07:40:43 -04:00
Adam 4c669b947f Merge pull request #14 from attilamolnar/1.9+inspmodes
InspIRCd: Recognize a few more channel modes that weren't recognized
2013-05-05 22:49:29 -07:00
Adam 3fbb493d57 Fix extras build 2013-05-06 01:38:27 -04:00
DukePyrolator 223aa65cfa removed an unused variable 2013-05-06 07:28:23 +02:00
Adam fe54dfb37f Don't forget to CloseHandle threads on win32, spotted by Attila 2013-05-05 23:47:45 -04:00
Adam 3f5f84c92c The const char* specialization of this no longer works 2013-05-05 21:18:47 -04:00
Adam 5b3f81ea78 That doesn't work either, just don't use references.
find ./ -name '*.cpp' -exec sed -i 's/Get<const Anope::string\&>/Get<const Anope::string>/g' {} \;
2013-05-05 21:05:43 -04:00
Adam 3e8752fe66 The default arguments are references to temporaries which fall out of scope once the function returns, so we can't use them. gcc is just nice. cronus sucks. also validate a few more config options 2013-05-05 20:38:57 -04:00
Adam 57c2b65f08 Move module header files to include/modules to fix naming conflicts with system headers 2013-05-05 03:30:08 -04:00
Adam a118946e65 Fix Windows 2013-05-05 03:04:01 -04:00
Adam ee2dcf11b8 Cache timeoutcheck and fix a typo in example.conf 2013-05-05 02:49:32 -04:00
Adam e91de41278 Add an option to sepstream to allow it to return empty tokens if multiple separators are found in a row 2013-05-05 02:00:33 -04:00
Adam 10b5b00db4 Dont check for noquit/quitstorm, check and be sure all users are gone regardless 2013-05-05 01:58:45 -04:00
Adam 2044b4d3ad Cleanup of dns stuff based on stuff found making inspircd's module 2013-05-05 01:57:24 -04:00
Adam 1d0bb9b26b Rework the config file reader to be much more flexible and move many configuration directives to the actual modules they are used in. 2013-05-05 01:55:04 -04:00
Adam 781defb707 Move extras header files out of extras so when users copy modules out they dont need the headers too 2013-04-16 01:58:29 -05:00
Adam 16c124d34e Rewrote modules/CMakeLists.txt and do not build the 'extras' modules, if users want them built they should copy or symlink them out of extras 2013-04-15 01:00:45 -05:00
Adam f08dbced60 Allow assigning service bots via /invite 2013-04-14 17:39:01 -05:00
Adam baabc91ead Fix a few of the earlier changes to os_forbid 2013-04-13 16:36:39 -05:00
Adam 81483ae5e7 Fix build on Solaris 2013-04-13 06:05:17 +00:00
Adam 003140bf60 Fix Windows build 2013-04-12 16:20:51 -05:00
Adam b405484fb9 Fix OSX buld and a warning in modulemanager.cpp 2013-04-12 17:19:29 -04:00
Adam 9a45626379 Hack around calculate_depends not able to find libintl.h, since we deal with that later 2013-04-12 15:45:52 -05:00
Adam 10d10d057e Update Win32 build instructions slightly 2013-04-12 15:44:54 -05:00
Adam aa2844a3fc Fix not attaching cs_xop to I_OnReload 2013-04-12 02:48:24 -05:00
Adam 42c640a9b5 /ns drop help was pretty much a complete lie, so fixed it. Also require a nick param to /ns drop 2013-04-12 01:32:53 -05:00
Adam 066fc5801b Fix m_ssl 2013-04-12 01:14:56 -05:00
Adam 416eaa1e66 Explain how privileges associate themselves with modes 2013-04-11 15:58:59 -05:00
Adam ac19a5c24b Fix memoserv/rsend reply 2013-04-11 15:35:39 -05:00
Adam 6f9dd282d2 Use SetCorrectModes to set the inital modes on a founder once they register a channel 2013-04-11 15:28:53 -05:00
Adam c56d72ba84 Remove more OPDEOP references 2013-04-11 02:28:36 -05:00
Adam db4ed1cfaf Merge chanserv saset and set back into one command since it no longer needs to be separated... replace chanserv/set privilege with chanserv/administration. Dont tell users to use 'help' for more help if there is no help. 2013-04-11 00:51:08 -05:00
Adam cb64d806c1 Remove the need for having to set syntax to "" for commands with no syntax 2013-04-11 00:20:24 -05:00
Adam 4f9b7874d6 Pass new config and the new config reader to the OnReload event, aswell as call it on module load on modules that hook to it 2013-04-11 00:08:28 -05:00
Adam 207c46c871 Move some of the modules in extras/ that arent really extra out of extras. Mark our modules as VENDOR and allow modules to have multple types. 2013-04-10 22:26:40 -05:00
Adam 957cb2bf93 Use the mode names inspircd gives us to add modes if we don't recognize it 2013-04-09 16:27:25 -05:00
Adam b244c74479 Allow privilege descs to be read from the config to override the defaults 2013-04-09 14:51:39 -05:00
Adam b76b2e11c8 Made privilege names case insensitive 2013-04-09 14:48:24 -05:00
Adam b35665bb54 Rename OPDEOP and OPDEOPME privileges to be similar to the other status privileges 2013-04-09 14:33:54 -05:00
Adam c3eb5b885d And my bots initially start with no server.. 2013-04-09 04:23:29 -05:00
Adam 6faf4e3823 'Me' can not exist when channels are created 2013-04-09 04:13:49 -05:00
Adam 325b018ed0 Add a default method for user's SendModeInternal 2013-04-09 00:00:52 -05:00
Adam 0a3d27a91f Made XOP privileges configurable 2013-04-08 23:37:42 -05:00
Adam bcd85ca682 Fix OperType::GetCommands 2013-04-08 01:05:25 -05:00
Adam ac40c53fe4 Fix /ns set display 2013-04-08 01:02:45 -05:00
Adam 2eae82da5c Check the channel secure option isn't set in ChannelInfo::AccessFor too 2013-04-08 01:01:27 -05:00
Adam 72493b7305 Fix secureops 2013-04-08 00:42:07 -05:00
Adam 1a37e1c048 Made auto* chanserv privileges not hard coded.
Made cs_statusupdate not remove status on users if they still match other entries.
Move privilege descriptions out of the config
2013-04-08 00:19:07 -05:00
Adam fb7fef7a84 Optimizations of much of the more commonly used code 2013-04-07 23:46:44 -05:00
Adam 36602224b8 Remove the runtime module directory on non-windows because we no longer overwrite modules on install without deleting them first 2013-04-06 19:34:35 -05:00
Adam ccecfdf445 Made the missing dependencies message from cmake more descriptive for modules 2013-04-06 19:03:07 -05:00
Adam 32d1184c00 Use the return from BufferedSocket::ProcessRead() and don't just assume its true 2013-04-06 17:08:25 -05:00
Adam 6a46a08a85 This worked before but is a little weird 2013-04-06 16:58:04 -05:00
Adam 7a2e6aa5c2 Add more logging to bs_set, cs_set, and ns_set 2013-04-06 16:43:56 -05:00
attilamolnar 34b5f9ce6e InspIRCd: Recognize a few more channel modes that weren't recognized 2013-04-06 23:10:26 +02:00
Adam f77eb0a282 Let non founders still /cs ban by wildcard mask, but limit the number of people it will kick 2013-04-06 15:59:38 -05:00
Adam 302a409136 Unset +P from perm channels when expiring 2013-04-06 15:44:03 -05:00
Adam 0b3b9fe128 Fix toggling topiclock when the channel setting is changed 2013-04-06 15:26:52 -05:00
Adam f71c7865fc Fix generic mode support 2013-04-06 15:06:39 -05:00
Adam 4ecf20b3f5 Fix ns_lists command group 2013-04-05 16:59:27 -05:00
Adam a5b8788014 Made the securefounder checks in cs_set more consistent 2013-04-05 16:27:12 -05:00
Adam 3cc7950c4b Fix not constructing the /bs set greet command 2013-04-05 15:45:03 -05:00
Adam 854bc4db0c Move around some of Init() to fork() before initing the socket engine, as some engines cant survive a fork() 2013-04-04 22:12:48 -05:00
Adam dbc77279bf Fix applying some sxlines to users on add 2013-04-04 18:52:35 -05:00
Adam c4ef566a65 Fix /hs reject syntax 2013-04-04 18:45:45 -05:00
Adam 66376335ab Fix defcon taking action on new clients 2013-04-04 15:14:17 -05:00
DukePyrolator 823bc01f66 mentioned the charybdis protocol support in the readme and example config 2013-04-02 07:02:38 +02:00
DukePyrolator 947ad6f73a fixed using language files for third party modules 2013-04-01 10:26:19 +02:00
DukePyrolator 06c8a1ef50 Revert "added include/version.h to .gitignore"
This reverts commit b3fd861b3e.
2013-04-01 09:46:55 +02:00
DukePyrolator b3fd861b3e added include/version.h to .gitignore 2013-04-01 09:42:59 +02:00
Adam 62262f4b0d Fix typo in Mode message handler 2013-03-31 00:43:11 -05:00
Adam 6e0dc0e210 Add networkinfo:modelistsize config option to set the max size of b/e/I lists 2013-03-31 00:43:11 -05:00
Adam 7e7556f064 Merge usefulness of Timer and CallBack classes into Timer, and fix it to really work 2013-03-30 23:39:43 -05:00
Adam 111d6a9178 Fix loading ttb from databases 2013-03-30 22:40:20 -05:00
Adam d23817604c Add /bs set banexpire command to configure if/when botserv bans expire 2013-03-30 22:08:51 -05:00
Adam 4694c7afb4 Split up bs_kick subcommands into real subcommands 2013-03-30 19:08:07 -05:00
Adam a52293336f This reference to see if nickcores go away during command execution is no longer necessary 2013-03-29 23:51:45 -05:00
Adam f24e17f8b4 Fix /bs set private 2013-03-29 23:50:51 -05:00
Adam 2b208de02f Fix detecting module langauge files 2013-03-29 23:50:51 -05:00
DukePyrolator 4eb5d153c0 uuups, we already have the year 2013 2013-03-30 05:42:17 +01:00
DukePyrolator 0451dd3d0d added charybdis protocol support 2013-03-30 05:21:54 +01:00
Adam c3e4f1bf7e Fix build from earlier merge 2013-03-22 18:41:23 -05:00
Adam f122f104c4 Merge remote branch 'attila/1.9+timermanager' into 1.9 2013-03-22 11:52:42 -05:00
Adam deedb3bdd7 Dont call SetCloakedHost in users constructor, just set chost, because SetCloakedHost logs a message like the user just changed their host 2013-03-22 11:46:30 -05:00
Adam d27aa03500 Merge branch '1.9' of github.com:anope/anope into 1.9 2013-03-21 23:40:16 -05:00
Adam dcffa5da6f Properly cleanup after entrymsglists and ajoinlists when destructed 2013-03-21 23:39:39 -05:00
Adam 221e79f50d Check for null pointers in HasMLock/SetMLock/RemoveMLock, cs_register can pass it some sometimes/possibly other places 2013-03-21 23:33:40 -05:00
attilamolnar d5a453b663 Improve TimerManager
Instead of adding timers into a vector and sorting them every time a timer is added, use a multimap
2013-03-20 19:42:50 +01:00
Adam a2d69fa431 Merge pull request #13 from attilamolnar/1.9+inspversionfix
InspIRCd: Don't reply to VERSION
2013-03-20 09:45:40 -07:00
Adam 6a0e4418f4 Check that channels still exist before nulling their ci pointer in channelinfos destructor
Change the persist setting on a channel to mean only that it is being
enforced ircd-side
2013-03-20 11:39:16 -05:00
attilamolnar 68eeac67c9 InspIRCd: Don't reply to VERSION
InspIRCd sends all known version strings at burst and remembers the version strings sent to it. When a client does a /version <server> the cached version string is sent.
2013-03-19 19:16:13 +01:00
Adam 731912f01e Add db_sql:import config option so we can know for sure whether or not we want a database import 2013-03-18 12:16:51 -05:00
Adam 51963915ba Remove remaining disable_ns_register references in example config 2013-03-16 21:53:03 -05:00
Adam 810685cb73 Have db_flatfile store object ids if they are set, even though it doesn't use them, so that if other database modules that use them are loaded they can keep track of objects properly 2013-03-16 20:08:39 -05:00
Adam 1a0e6b0be3 Allow autokicking real names, extbans, and channels 2013-03-15 12:27:08 -05:00
Adam 81c89bb708 Fix missing dependencies message to include the source folder, there is no specific source file on modules with multiple source files 2013-03-15 07:43:17 -05:00
Adam 01620e849a Update nickserv defult names for kill/killquick, hide email, usermask, and quit 2013-03-14 20:51:28 -05:00
Adam 4c74020a69 Add group and hide setings to fantasy{} blocks 2013-03-14 09:03:48 -05:00
Adam b95b8f0aae Fix setting BSDefFlags from the config 2013-03-14 09:03:48 -05:00
Adam 1ff7a7c1f1 Refactor mask/entry code, allow full matching (against users real host/ip) if their displayed host is their real real host. Also match against cloaked host even if full matching is not being done 2013-03-13 14:40:49 -05:00
Adam 1d16629a6d Allow opers to override chanserv kick/ban, botserv say/act, and akick's peace setting 2013-03-13 09:45:15 -05:00
Adam 72aa27ede5 Allow m_ldap_authentication to block email changes if emails are controlled by ldap, don't tell users they must change their email during initial user registration 2013-03-13 09:02:31 -05:00
Adam 05223dbe6d Identify requests hold command sources and users can disconnect between the request being dispatched and when it returns, so don't assume the source user pointer is always valid 2013-03-10 03:23:00 -05:00
DukePyrolator 06d43baf93 update the users password after a successful ldap authentication 2013-03-03 10:58:39 +01:00
DukePyrolator 5f74662100 improved the operserv mode command 2013-03-03 10:57:53 +01:00
Adam 2c68312d72 Bump for Anope 1.9.9-git 2013-03-03 02:04:33 -05:00
Adam ce094f4d01 Anope 1.9.8 Release 2013-03-02 23:42:01 -05:00
Adam 178056096f Regenerate language files 2013-03-02 23:42:00 -05:00
Adam a32c897bf9 Update Changes and Changes.conf 2013-03-02 23:42:00 -05:00
Adam 367b662c83 Fix compile warning in webcpanel/memos 2013-03-02 23:42:00 -05:00
Adam 75999e05b9 Fix Anope::Duration showing years failing 2013-03-02 23:42:00 -05:00
Adam 45c02f8e4e Fix build with -std=c++11 2013-03-02 23:42:00 -05:00
Adam ae4421b8a2 Unset founder/successors when channels are deleted 2013-03-02 23:42:00 -05:00
Adam 2d309da0f6 Fix /ns drop nick showing "your nick" and not the nick you specified if the nick isn't registered 2013-03-02 18:52:15 -05:00
Adam b9bbb3747b Fixed logic fail in /ns resend 2013-03-02 18:46:56 -05:00
Adam 0b05eaa020 Only shrink extensible items that are metadata in ExtensibleUnserialize 2013-03-01 01:40:14 -05:00
Adam 91ad9d22ca Fix Windows build 2013-03-01 00:57:24 -05:00
Adam 6aa9ad938a Don't have cs_seen update data for users on syncing servers 2013-03-01 00:56:47 -05:00
Adam 6808498ead Fix entrymsg's creation time being reset from restarts 2013-02-28 23:09:03 -05:00
Adam 8561941e22 Don't enforce session limit on clients with no IP on Unreal, fix typo in /cs down syntax, fix os_session messages to reference ip 2013-02-25 00:26:49 -05:00
Adam 5d4db2b854 Allow /cs up and /cs down to take an optional nick arg 2013-02-24 20:15:49 -05:00
Adam 501503b7a5 On startup check all object types 2013-02-24 20:14:15 -05:00
DukePyrolator a980e32581 fixed wrong parameter count in cs_updown 2013-02-24 21:07:10 +01:00
DukePyrolator da2fea338a fixed some stupid typos in the german language file 2013-02-24 09:48:20 +01:00
DukePyrolator 7cb70f5fa1 some updates to the german langfile 2013-02-24 08:14:13 +01:00
Adam d04db3d38b Add SVSNICK and SVSHOLD to hybrid 2013-02-23 17:41:52 -05:00
DukePyrolator 35c260877f Revert "do not send RESV from operserv when its not introduced"
This reverts commit 2336b4723c.
2013-02-23 11:20:31 +01:00
Adam 8cf7ec9cfe Add missing SVSHold funcs to plexus protocol module 2013-02-23 04:32:41 -05:00
Adam c67087d750 Fix akick list/view not showing masks sometimes 2013-02-23 04:32:41 -05:00
DukePyrolator 2336b4723c do not send RESV from operserv when its not introduced 2013-02-23 09:54:03 +01:00
Adam da61734860 Made FindService less dumb and able to do aliases to aliases 2013-02-22 04:42:08 -05:00
Adam a911354f24 Fix "leave" channel log level 2013-02-22 00:39:13 -05:00
Adam ae902443db Merge branch '1.9' of github.com:anope/anope into 1.9 2013-02-22 00:30:22 -05:00
Adam 5547c3ed24 This OnServerSync event hook in inspircd20 can go away (it does nothing currently) 2013-02-22 00:29:00 -05:00
Charles Kingsley e844cdf4f6 Update COPYING 2013-02-21 07:38:42 +00:00
Adam 2fa5cfa508 Add Matthew to webpanel credits, fix alignment of akill list 2013-02-20 18:00:46 -05:00
Adam 59792173e7 Merge pull request #12 from MatthewM/webcpanel
Web Panel Modifications
2013-02-20 14:58:59 -08:00
Adam ed68482b4e Add /cs mode clear command that behaves like the old /cs clear modes/bans/etc 2013-02-20 15:51:40 -05:00
Adam 32592987c8 Allow /os mode clear [all] to unset modes, similar to old clearmodes 2013-02-19 04:07:53 -05:00
Adam a1f92638e3 Merge branch '1.9' of github.com:anope/anope into 1.9 2013-02-19 01:28:27 -05:00
Adam 7d50818ee1 Fix some OpenBSD build issues, and bugs #1485 #1486 #1487 2013-02-19 00:48:21 -05:00
DukePyrolator d0e1f3b66a fixed a typo in the last SASL commit 2013-02-19 05:21:01 +01:00
Adam cb91f991a3 Made the mode bouncing detector harder to hit and ignore syncing channels 2013-02-18 22:10:57 -05:00
Jens Voß a49d7b12cb Merge pull request #11 from grawity/mailmap
Add mailmap for Git
2013-02-17 05:31:04 -08:00
Mantas Mikulėnas eda7b55bac Add mailmap for Git
...to clean up `git shortlog -nes` (and `git log` in future git
versions).
2013-02-17 15:19:11 +02:00
DukePyrolator bcf99d5998 SASL sends AUTHFAIL on unsupported mechanisms, fixes bug #1482 2013-02-17 12:26:51 +01:00
Adam 3ab6706993 InsIRCd only sends QUIT on KILL for users 1 hop from us, so always internally kill users that we kill. Bug #1481 2013-02-16 03:59:28 -05:00
Adam c40e9c3996 Fix missing CheckInit check in db_sql_live 2013-02-16 00:31:42 -05:00
Adam 7be23b7e37 Fix setting modes on botserv bots in channels that have other bots in them on startup 2013-02-15 23:18:34 -05:00
Adam d9c18a6072 Store hashes of the last commit instead of the last commit 2013-02-15 19:01:46 -05:00
Adam 73099b82e8 Fixed unserializing servers in dns zones 2013-02-15 18:32:06 -05:00
Adam fc1d7ea89b Switch Destroy methods to delete 2013-02-14 20:58:01 -05:00
Adam 391f2822c8 This Serialize::Destroy method isn't actually needed anymore. Fixes weirdness from a few Serializable items we had on the stack. Added a comment about why operator< in Reference fails. 2013-02-14 20:57:40 -05:00
Adam f0875c5d85 Iterators suck 2013-02-14 20:11:52 -05:00
Adam f6ef706909 Magiobiwan is silly 2013-02-14 01:24:29 -05:00
Adam 7656c25e38 Made chanserv/unban with no parameters unban you in every channel you have access in 2013-02-14 01:20:18 -05:00
Adam 5cf1edeb6e Fix CommandCSMode::CanSet letting everyone set voice 2013-02-14 01:20:18 -05:00
Adam 9e544a6443 Store what channels have references to accounts in NickCore to prevent having to iterate over all channels and then all access entries when nicks expire or from nickserv/alist 2013-02-14 01:20:18 -05:00
Adam 225b7c38c1 Make NickCore::aliases a vector 2013-02-14 01:20:18 -05:00
Adam 994866461c Update obj ts when constructed in db_sql 2013-02-14 01:20:18 -05:00
Adam fc4b884d0e Sort output in ns_list and cs_list 2013-02-10 12:31:37 -05:00
Adam 9b3ecfe777 Fixed sepstream::GetToken logic fail 2013-02-09 22:48:05 -05:00
Adam 20794981b3 (re?)add mlock set as a simple way to clear all mlocks and add new ones at once 2013-02-09 00:24:15 -05:00
Adam 01413dd3cc Use channel mode +r to determine if a channel has either been newly created or
created while we were offline (eg, during the inital burst to the
uplink). Fixes not knowing whether or not channels ops in non-secureop
non-persistent channels obtained op while we were offline by creating
the channel or legitimately by being set op by another channel op.
2013-02-07 21:49:49 -05:00
Adam 9d1fe6102c Made DNSServer::Find case insensitive 2013-02-07 21:49:49 -05:00
Adam 2472a41561 Merge pull request #9 from Robby-/1.9-ns_set_misc
Fixed ns_set_misc not showing help for its SASET commands
2013-02-05 08:04:45 -08:00
Robby- 65fbdcfa87 Fixed ns_set_misc not showing help for its SASET commands.
Added descriptions and SASETs for the remaining commented ns_set_misc examples, without a description they won't show up in HELP if someone actually enabled those.
2013-02-05 16:31:14 +01:00
Adam 25cec015e8 Made access del by nick and other functions from 326f1a really delete objects 2013-02-05 09:45:48 -05:00
Adam 62e3c8c4f8 Merge pull request #7 from artemiiav/patch-2
Fix validating nickserv:registration when it is set to disable.
2013-02-02 10:53:05 -08:00
Adam 8902c1f038 Merge pull request #8 from Robby-/1.9
Some more typo and help text fixes, missing privileges, settings corrections, and cs_enforce changes
2013-02-02 10:51:08 -08:00
Robby- 6c43bcc3e0 cs_enforce: Make the logging also show the channel it was used on, added 2 missing log calls, can now handle overrides by services operators. 2013-02-02 07:32:32 +01:00
Robby- 15b37c1e38 Some more typo and help text fixes, proper formatting of control codes, missing privileges, and settings corrections. 2013-02-02 07:30:53 +01:00
MatthewM 29fcdc5f40 Updated jquery API to v1.9.0 2013-01-31 21:24:48 -05:00
artemiiav 1075bb1dbc Update src/config.cpp 2013-01-31 22:33:14 +03:00
Jens Voß dccb0ee313 Merge pull request #5 from Robby-/1.9
Config file updates: text changes, ...
2013-01-30 22:50:11 -08:00
Robby- aea86906f4 Some configuration file updates: Removed now non-existing settings. Redid some existing settings to look more consistent/uniform. Added some missing commands/permissions.
Merged operserv/modlist permission into operserv/modinfo.
Fixed ChanServ INFO privilege to actually work for /BotServ INFO too for those users who have it, instead of only for founders.
Fixed some typos aswell as removed whitespaces along the way.
2013-01-31 06:19:14 +01:00
Adam a62698a14a Remove sendpass from the configs and the config reader since it no longer exists 2013-01-30 17:44:07 -05:00
Adam 47af43c281 Made Anope::Duration also show years 2013-01-30 11:24:57 -05:00
Adam ae2c82adbc Don't expire session exceptions if in noexpire mode 2013-01-30 10:39:52 -05:00
Adam 594b1a136d Evidently Persistant is not a word 2013-01-30 10:39:52 -05:00
DukePyrolator ae46cc7f73 fixed an infinite loop in ns_recover, caused by a very small typo. 2013-01-30 09:18:56 +01:00
Adam 6b2aad734e Fixed SQL::Data::IsEqual to really only return if the two are completely equal. Fixes oddities with caching objects that are actually updated. 2013-01-27 13:55:42 -05:00
Adam 98ccbe2b06 Old botserv flags need BS_ prepended to them 2013-01-27 10:50:55 -05:00
Adam 5ae100fea2 Add nickserv/alist priv, merge botserv/botlist and botserev/assign/private to botserv/administration 2013-01-27 05:00:00 -05:00
Adam 0052dd29a7 Fix db_flatfile not clearing databases on save if there are no objects left of that type (it will leave the old database with old objects currently) 2013-01-27 01:59:38 -05:00
Adam 50a42d2cbf Fix os_session to work with sql properly 2013-01-26 22:17:25 -05:00
Adam 49cb6a07a2 Fixed db_sql etc being confused on empty vs not set metadata 2013-01-26 20:52:49 -05:00
Adam ed7c4dc2e1 Made Anope::DoTime default to seconds to fix os_akill etc defaulting expiries to days 2013-01-25 04:05:38 -05:00
Adam c376fb0a2b I forgot to add this change to a634c7be65 2013-01-25 03:31:35 -05:00
Adam 76d9e58ae5 mysql_insert_id doesn't return an id if one isnt generated, so
check that it really returns a value before using it.
Also fix memos to cleanup after themselves when deleted.
2013-01-25 03:09:51 -05:00
Adam 3769cc1a35 Fix memo signon and memo receive default flag names 2013-01-24 08:53:35 -05:00
CuleX 74ace7d4b9 Channel::HasUserStatus: Don't just return false if cms is NULL. 2013-01-24 00:34:41 -05:00
Adam 647245a71f Add missing KeySet() func to SQL::Data 2013-01-23 22:16:01 -05:00
Adam a634c7be65 Fix some compile errors 2013-01-22 21:20:05 -05:00
Adam f656e3195f Add hidenetsplitquit config option to not show splits in /ns info's last quit field 2013-01-22 19:47:16 -05:00
lethality 8811545472 Fixed few minor typos 2013-01-22 17:32:23 +00:00
Adam cad3850f3d Move channel mode set and unset events to be after the action has been done internally to allow easially canceling it 2013-01-22 01:23:55 -05:00
Adam 7de058ba35 Fix crash trying to unset the permanent channel mode during channel syncs of empty channels 2013-01-22 00:24:58 -05:00
Adam ddaa001daf Merge usefulness of Flags and Extensible classes into Extensible, made most flags we have juse strings instead of defines/enums 2013-01-21 22:31:16 -05:00
Adam 51c049e1a7 Really fix Channel::GetModes 2013-01-21 18:03:31 -05:00
Adam 93472f84bd Revert "Fix Channel::GetModes, we can never have a negative mode set on a channel so this check is unnecessary"
This reverts commit 678d27fdb7.
2013-01-21 17:59:22 -05:00
Adam 678d27fdb7 Fix Channel::GetModes, we can never have a negative mode set on a channel so this check is unnecessary 2013-01-21 17:55:27 -05:00
Adam 369ca89c2e Allow channels that have users in them that are not the access list to expire while in use. 2013-01-21 06:46:28 -05:00
Adam 421db75528 Fix not logging debug info to the logfile when debug mode is enabled 2013-01-21 06:38:13 -05:00
Adam 846b56c724 Fix defcon timeout timer 2013-01-21 02:31:28 -05:00
DukePyrolator e62d2fe56e removed old cs_modes fantasy{} command blocks 2013-01-21 07:15:16 +01:00
DukePyrolator bb3abab784 removed loading of ns_set_chanstats and cs_set_chanstats from the chanstats.example.conf, this functionality is now part of ns_set/cs_set 2013-01-20 15:03:15 +01:00
Adam da6543d17b Allow grouping commands to make help output easier to comprehend 2013-01-13 22:07:27 -05:00
Adam 29a018088e Add svsjoin and svspart commands 2013-01-13 22:07:27 -05:00
Adam 7e7fc757d5 Allow ns_set_misc/cs_set_misc to have configurable help descriptions 2013-01-13 22:07:27 -05:00
Adam d3a6bdc68b Allow the config parser to skip over gettext's _() to allow translating config values 2013-01-13 22:07:27 -05:00
DukePyrolator 402e42fd15 check if the database exists before we try to backup it 2013-01-12 09:01:44 +01:00
Adam 5007b72b28 Update copyright to 2013. This was done with:
find include/ src/ lang/ docs/ modules/ *.* Config -exec sed -i 's/-2012 Anope Team/-2013 Anope Team/i' {} \;
2013-01-09 04:20:55 -05:00
Adam 9931ec2994 Use m_rewrite to rewrite op, deop, halfop, ... etc 2013-01-08 20:25:01 -05:00
Adam 5f3dfc2960 Track +g on inspircd, fix saving/loading mode locks for generic modes 2013-01-07 21:30:07 -05:00
Adam dc9e81a6fc Fix deleting access by number 2013-01-06 18:38:04 -05:00
Adam ed719c80e7 Buggy compilers are buggy 2013-01-06 16:13:35 -05:00
Adam 77dc2e4746 And really check for them using ssl... 2013-01-06 01:46:53 -05:00
Adam c5f4c8d174 Fixed enforce ssl to not ban users if the channel is ssl only 2013-01-06 01:19:25 -05:00
Adam 6ba49642d0 Fix fmode handling on inspircd20 2013-01-06 00:48:50 -05:00
Adam 9a2ef9dc00 Add sslonly, bans, and limit to /cs enforce 2013-01-05 22:42:07 -05:00
Adam 6ccf0a3428 Fixed os_dns not readding connected servers if configured 2013-01-03 13:39:50 -05:00
Adam 23e303aaa2 Move enforcer checks on nick and logout to nickserv.cpp 2013-01-03 13:20:10 -05:00
Adam 098157dca8 Don't delete users immediately when quit or killed, instead wait until message processing is done 2013-01-03 12:34:01 -05:00
Adam 827469600e Move nickserv validate stuff to an event in nickserv.cpp 2013-01-02 13:59:33 -05:00
Adam bf718e8698 Evidently not specifying NOT NULL is not enough to allow null timestamps 2012-12-30 10:30:29 -05:00
Adam 326f1a9c8b Cleanup after mode locks, badwords, akick, access, if destructed 2012-12-29 20:29:41 -05:00
Adam 793c438286 Remove clearuser references from configs 2012-12-29 11:09:54 -05:00
Adam 6b1f323bb5 Move some of CheckKick to the respective modules 2012-12-28 15:59:33 -05:00
Adam 761849083d Dumb iterators 2012-12-28 13:00:36 -05:00
Adam ae6ddf295a fixup part of 379b2c, dont use iterators after theyre erased 2012-12-28 11:17:01 -05:00
Adam b591e8cdc8 Use the same object for chanusercontainer and userchancontainer 2012-12-28 10:43:30 -05:00
Adam 379b2ccf92 The timestamp column in SQL should actually be null sometimes, and fixed some valgrind errors with db_sql_live 2012-12-28 10:43:30 -05:00
Adam 3fb4cf56b6 Merge pull request #4 from alexbarton/ngircd-fix-NJOIN
ngircd protocol module: Fix NJOIN, actually join users to the channel
2012-12-27 13:25:33 -08:00
Alexander Barton fdc62daa8b ngircd protocol module: Fix NJOIN, actually join users to the channel
Bug introduced by commit d33a0f75: "Pretty large coding style cleanup,
in source doc cleanup, and allow protocol mods to depend on each other":
Since then, the NJOIN command has been "ignored", no users were added
to channels at all while linking ...
2012-12-27 22:15:33 +01:00
Adam 05094b0da5 When processing many modes don't enforce mlock until all are set 2012-12-27 15:03:38 -05:00
Adam 4ab8a70b21 Add an expiry option to /cs ban 2012-12-27 11:06:00 -05:00
Adam c88a3fffd5 Remove clearusers. There is still kick * for this. 2012-12-27 09:50:44 -05:00
Adam 7b1ae9602d Put appendtopic and topiclock into /cs topic 2012-12-27 09:43:19 -05:00
Adam c7a22dff87 Add register type to os_forbid to prevent users from registering nicks or channels 2012-12-26 19:42:37 -05:00
Naram Qashat 45ee7c12d0 Clean up the logic in adding extra library directories, adding to LDFLAGS isn't needed. 2012-12-25 17:10:43 -05:00
Adam 392b591d09 Allow modules loaded after startup to magically reobtain their database objects. Fix os_dns for sql(live) 2012-12-25 15:52:58 -05:00
Adam 556a4375e2 Cleanup after os_dns on unload 2012-12-25 12:40:09 -05:00
Adam eab583310d Don't check userlimit when servers first connect, servers wont have any users at that point anyway 2012-12-25 12:36:58 -05:00
Naram Qashat 077ae27369 Fix linking libraries so their rpath is set correctly and isn't stripped on install. 2012-12-25 02:20:00 -05:00
Adam d4e1c958e2 packet->answers isnt always empty initially, like with axfrs 2012-12-25 01:09:03 -05:00
Adam 33ae442aa1 We can svsjoin on plexus 2012-12-24 18:15:38 -05:00
Adam 1285c7f0ca Allow os_dns to manage multiple zones 2012-12-23 15:30:08 -05:00
MatthewM 8c72892de1 Made the overlay resize and the alert box reposition when the window is resized 2012-12-23 14:56:02 -05:00
Adam dc751bd2f1 Combine all of the set modules now that having them split apart is almost completely pointless 2012-12-22 14:49:48 -05:00
Adam 0cde0aee34 Fixed memo mail messages, and allow %N to be in them. Bug #1462 2012-12-22 09:10:32 -05:00
MatthewM 503bda5b28 Move the var to set the time out into the same javascript tag that is used for the modal as it's related 2012-12-20 23:48:20 -05:00
MatthewM a4d5c40d63 Added the overlay to the vHost request function 2012-12-20 16:22:58 -05:00
MatthewM 8e219bdd77 Moved the javascript to header.html from memos.html to make it easier to intergrate the overlay feedback and do tweaks 2012-12-20 16:12:16 -05:00
MatthewM 5acc93dd34 Made the table cells for the memo table have no spacing and color the read and unread memos different colors 2012-12-20 01:19:04 -05:00
Adam 276247b463 Add a command flag to require that a user is executing the command 2012-12-19 16:03:53 -05:00
MatthewM d277f49423 Minor style tweaks to make the links look more like a button 2012-12-19 13:17:44 -05:00
Adam 67bd2c6b2d Add version flags for debug, git, and Windows 2012-12-19 09:21:25 -05:00
Adam 784683a68d Having these references to bots bugged out older compilers, so simplify this by just moving pointers to the core 2012-12-19 08:48:23 -05:00
Adam 3b2094301d Fixed typo in b6407afa06 2012-12-18 10:35:11 -05:00
MatthewM 6572754c10 Cleaned up the overlay layout, added some minor visual and js fixes 2012-12-18 10:34:33 -05:00
MatthewM f157ea3fdb Added a click reply function to the MemoServ memos page that autofills the senders name 2012-12-18 10:04:26 -05:00
MatthewM ddd7fe6f05 Bug that was experinced seems to be somewhat related to Windows 8 and maybe an extension on chrome. Reverting to previous commit 2012-12-17 22:03:21 -05:00
MatthewM 47a351acb2 Fixed a minor bug that overlapped the nav links and the content from .content in Chrome on Windows 2012-12-17 19:26:07 -05:00
MatthewM ff9f670871 Give the overlay window a rounded edge to make it look a bit nicer and fade the main content a little less 2012-12-17 18:28:15 -05:00
MatthewM f33f7d98c4 Added a modal window interface to MemoServs page that will automaticly fade out after a give time (currently 5s) 2012-12-17 14:32:28 -05:00
Adam c49f03f985 Allow escaping brackets in webpanel templates and redirect users to the homepage when their session is not found 2012-12-15 23:51:25 -05:00
MatthewM 6b5f583ff3 Merge Adams commit to allow escaping of brackets 2012-12-15 21:46:14 -05:00
Adam 8e3ab0d10b Made all langauges default to the UTF-8 charset 2012-12-15 21:35:38 -05:00
MatthewM a049092526 Merge branch '1.9' into webcpanel 2012-12-15 21:05:05 -05:00
Adam b6407afa06 Fix chghost/chgident/etc on inspircd20 2012-12-15 05:13:09 -05:00
Adam fbd3cda320 Merge pull request #2 from czaks/conv-languages-to-utf-8/1.9
Convert locales to utf-8 charset
2012-12-15 01:15:03 -08:00
Marcin Łabanowski 05341828b5 Convert the language files to utf-8 encoding.
The files have been converted using the following script:

for i in *.po; do
  cat $i | grep charset | cut -d= -f2 | cut -d\\ -f1 > charset
  echo Converting $i from `cat charset` to UTF-8
  iconv -f `cat charset` -t UTF-8 < $i | sed "s/`cat charset`/UTF-8/g" > $i~
  mv -f $i~ $i
  rm -f charset
done
2012-12-15 09:39:12 +01:00
Marcin Łabanowski 280ba89b26 Fix the language files to state the correct charset. 2012-12-15 09:28:19 +01:00
Adam fe7fcc2dc3 Check for NOJOIN being < 0 but restricted on in db_old 2012-12-15 02:44:53 -05:00
Adam dcd34d3728 Move DNS handling to a module 2012-12-15 01:33:31 -05:00
MatthewM dced01fc24 Added a large scroll box for the chanserv main page 2012-12-15 01:14:52 -05:00
Adam cdec0a3f96 Fixed some html errors in the last commit 2012-12-14 16:47:45 -05:00
MatthewM 1075f3b457 Allow opers to drop channels
Added chanserv drop to web panel
Allow long lists of akills to scroll
2012-12-14 16:44:14 -05:00
Adam c1077faa28 Optimize much of the database code and serialize code. 2012-12-13 06:12:56 -05:00
Adam 76ba147c22 Unregister operserv_akill page on unload in cpanel 2012-12-12 02:28:19 -05:00
Adam 1c1a216df1 Only allow non-user sources to register nonexistant channels 2012-12-12 01:33:58 -05:00
Adam 04f96a54b8 Some small improvements to last few commits, and fixed some problems with the template engine 2012-12-12 01:30:50 -05:00
Adam 5f72d1fda5 Squashed commit of the following:
commit 317ead6b39
Author: MatthewM <mcm@they-got.us>
Date:   Tue Dec 11 02:14:06 2012 -0500

    Added the HostServ link to the navigation bar

commit 6b15d7fc5e
Author: MatthewM <mcm@they-got.us>
Date:   Tue Dec 11 01:58:18 2012 -0500

    Correct some slight over sights that was missed eariler

commit b356a46789
Author: MatthewM <mcm@they-got.us>
Date:   Mon Dec 10 23:44:51 2012 -0500

    Started work on adding HostServ to the web panel
2012-12-12 01:04:08 -05:00
Adam dfff54425b Fixed webpanel fail on nondebug builds 2012-12-12 00:49:16 -05:00
DukePyrolator 0edd26467e IsNickValid() now accepts '[' and ']' in the nickname 2012-12-11 05:27:56 +01:00
DukePyrolator e71c890cf5 added a missing permission for operserv/global to the Services Administrator block in example.conf 2012-12-09 14:32:16 +01:00
DukePyrolator eada35df36 fixed a problem with the webcpanel logout when using apache + mod_proxy 2012-12-09 14:21:42 +01:00
DukePyrolator 8d4a08ccc1 fixed a log message showing the wrong IP 2012-12-09 14:19:30 +01:00
Naram Qashat 9dec093676 Modified the Config scripts to ask the user explicitly for additional include and library directories. 2012-12-07 03:02:15 -05:00
DukePyrolator f711dd3460 ngircd protocol module: improved vhost support 2012-12-05 06:18:36 +01:00
Adam 7a865b6b28 Only bad-password users when the account theyre trying to identify for actually exists 2012-12-02 04:31:50 -05:00
DukePyrolator faaaae365a enc_sha256: the length of the digest is SHA256_DIGEST_SIZE, not SHA256_BLOCK_SIZE. also removed an unneeded trailing NULL byte. 2012-12-02 09:16:40 +01:00
Adam 705d1efeab Allow services to return more than one NS record 2012-11-30 20:49:59 -05:00
Adam c0f60d56a1 Change /os reload to not unnecessarially rebuild httpd servers. Change m_httpds Log methods to the module version. 2012-11-30 20:44:21 -05:00
Adam a4468dd56e Allow modules to use the encryption modules to encrypt arbitrary things.
Made enc_old depend on enc_md5.
Allow not loading any encryption modules if you want to only use an
external mechanism.
Removed ns_sendpass since it's just a bad idea.
2012-11-30 02:53:03 -05:00
Adam 337f361526 Fix warnings from classes with virtual functions not having virtual destructors 2012-11-29 17:03:53 -05:00
Adam 26a048e5c4 Rewrite/simplify some of m_httpd 2012-11-28 22:54:26 -05:00
Adam ccd41e7efe Use signon for svid on bahamut, not timestamp 2012-11-28 00:42:07 -05:00
Adam a1a5ba0723 Use signon for svid on unreal, not timestamp 2012-11-27 21:43:17 -05:00
Adam 8a6962fc36 Keep track on what ircds we can svsjoin, add an svspart method 2012-11-26 23:09:26 -05:00
Adam f23bad140b Revert a small part of 90930619bc, evidently this was important 2012-11-26 19:50:29 -05:00
Adam 1bfafd9eb6 Fixed rehasing doing weird things to botmodes due to trying to set on nick not uid 2012-11-26 04:30:30 -05:00
Adam 1bdb756b25 Restrict the length of kick reasons in cs_kick, cs_ban, and cs_akick 2012-11-25 22:37:54 -05:00
Adam 80c573eed7 Merge remote branch 'cronus/1.9+unrealtokens' into 1.9 2012-11-25 21:47:10 -05:00
Cronus 78607ea60c Remove UnrealIRCd's TOKENS, they are kinda useless 2012-11-25 20:35:45 -06:00
Adam 0110214abc Fix build the last arg on fantasy commands to chanserv 2012-11-25 20:58:35 -05:00
Adam 54d8695e70 Add commented command{} blocks for how 1.8 worked, don't show saset in the help list to registered users. 2012-11-25 20:36:57 -05:00
Adam a2441fd326 Rename restoreonghost in nickserv.conf 2012-11-25 19:47:09 -05:00
Adam 831a1d15d5 Merge ns_ghost, ns_recover, and ns_release. Fix svskilling users on Unreal. 2012-11-25 19:41:36 -05:00
DukePyrolator 6b5df8e62f added a config block for cs_seen in chanserv.example.conf 2012-11-25 05:44:31 +01:00
Adam 0210cf2b17 Make the actual clients into services too 2012-11-24 21:22:32 -05:00
Adam f0708340ef Fix parsing fjoin on inspircd 2012-11-24 19:10:07 -05:00
Adam a44bf31d27 Helps to name ping right 2012-11-24 17:19:08 -05:00
Adam 002f00d7eb Add IP.Board m_sql_authentication query to modules.example.conf, from Genesis2001 2012-11-24 02:15:19 -05:00
Adam ded89b0d49 Made IRCDProto a Service 2012-11-23 23:10:41 -05:00
Adam 36b1166cf6 Change the return type of ircdmessage to void now that we don't use it, add an ircd message module event, and a few more fixups 2012-11-23 16:56:06 -05:00
Adam 0e7bd9f3ba Fix compile/pch generation 2012-11-22 20:27:42 -05:00
DukePyrolator 7963534940 fixed some compile errors 2012-11-22 21:44:51 +01:00
Adam d33a0f75a5 Pretty large coding style cleanup, in source doc
cleanup, and allow protocol mods to depend on each
other
2012-11-22 00:50:33 -05:00
DukePyrolator 368d469631 added METADATA and vhost support to the ngircd protocol module 2012-11-18 10:34:35 +01:00
DukePyrolator efd3c04f37 fixed a typo in IRCDMessageSetName in the unreal protocol module 2012-11-18 09:50:23 +01:00
Adam 5fe6f0b2ec This should be find, not find_first_of 2012-11-16 00:06:07 -05:00
Adam 5d6fb2427e Fixed some stuff spotted by Cronus, made db_old convert ACCESS_INVALID levels to ACCESS_FOUNDER, fix cs_enforce +R from an earlier commit, fixed ChangeModeInternal TS checking when IRCds don't send TS on mode 2012-11-16 00:03:15 -05:00
Adam ad3d1d381a Never log debug levels >= 2 using a log block 2012-11-10 13:57:06 -05:00
Adam b51f60cc1e Fix user account logout message 2012-11-10 13:57:06 -05:00
DukePyrolator 504232b388 added support for the ngircd SQUERY command 2012-11-10 18:29:35 +01:00
Adam 8f36f65f39 Made access del and xop del behave like access add/xop add by using a users mask if given an unregistered nick 2012-11-09 19:20:17 -05:00
Adam ff3e396e92 Add a config option to disable sasl 2012-11-09 19:13:33 -05:00
Adam 2fe387b4f0 Update bi->lastmsg in cs_log when something is logged via privmsg 2012-11-07 23:23:02 -05:00
Adam 9ec482b7c2 I haven't a clue why this was here but its not even remotely right.. fixes #1448 2012-11-07 22:20:48 -05:00
Adam 53e8cd18dc Duplicate check some of these larger hashmaps on insert, just incase 2012-11-07 21:57:31 -05:00
Adam ac57f41c87 We no longer have to use the rungroup provided at build time, it is specified in the config now 2012-11-07 19:36:59 -05:00
Adam 8b78b6bb10 Fix crash on suspend etc if kicking a user causes the service bot to part when the service bot is next in the userlist (as we have an iterator to it) 2012-11-07 15:41:49 -05:00
Adam 52fa66820c Give suspend the correct permission in botserv.conf, fix pch build 2012-11-07 15:17:58 -05:00
Adam 72eb2ccf50 Sometimes capab is sent as one parameter 2012-11-06 11:02:12 -05:00
Adam 4cfd468863 Made os_noop more useful 2012-11-06 11:02:12 -05:00
Adam 0cf8d73395 Added log messages for all of the other chanserv commands that should be logged 2012-11-06 11:02:12 -05:00
Adam 53b2bdfe5e Use std::tr1::unordered_map for a few of the larger maps 2012-11-06 11:02:12 -05:00
Adam 27ab6a686c Windows fixes 2012-11-06 11:02:12 -05:00
lethality 22c8297a03 Added chanserv/status to fantasy commands 2012-11-06 15:19:56 +00:00
Adam d22e86376b Catch the exception from /os session view invalidip 2012-11-05 15:59:11 -05:00
Adam fb56b3a53f Made m_xmlrpc use m_httpd 2012-11-03 22:04:19 -04:00
DukePyrolator 0c47017046 added support for SVSNICK in the ngircd protocol module 2012-11-03 09:40:01 +01:00
DukePyrolator 792091b23c cs_seen: do not read duplicate SeenInfo entries from the database 2012-11-02 18:35:33 +01:00
Adam b917361de8 Fix pch generation 2012-11-01 16:26:59 -04:00
Adam a0a54fdfe0 Expand options:hideprivilegedcommands to not show commands requiring authentication to unidentified users 2012-11-01 16:15:44 -04:00
Adam d90d5d538b Fixed operserv/umode serv help entry 2012-11-01 14:54:14 -04:00
Adam c2ae76248e Made db_old load exceptions.db 2012-11-01 14:47:23 -04:00
Adam 9aa71af1e5 Accept 1.8s svid ts on plexus too 2012-11-01 14:47:23 -04:00
Adam b64abebd24 Made os_logsearch search oldest logs first so the newest entries are at the bottom of the list 2012-11-01 14:47:23 -04:00
Adam 90930619bc Fixed quite a bit of dumbness with m_ssl. Had to
modify socketengines to allow polling for write &
no read, but is it cleaner now. Made m_httpd able
to listen using SSL.
2012-11-01 14:47:23 -04:00
DukePyrolator 5b1c823019 fixed importing mode locks in db_old 2012-11-01 05:28:57 +01:00
Adam b2b4f21e39 Clarify the path given to Config isnt actually the bin path, but the path Anope is installed to 2012-10-31 23:11:06 -04:00
Adam 22e55165c9 Fixed anopesmtp logging 2012-10-31 22:57:11 -04:00
Adam 35c2256849 Apparently sending this all at once didn't work that great, so wait for the events before sending the joins/modes etc 2012-10-31 17:37:19 -04:00
Adam 3a10fca75f Fix ns_ghost and ns_recover, add nicksev:restoreonghost 2012-10-31 12:37:43 -04:00
Adam a39947cd3c Made os_forbid honor nssecureadmins 2012-10-30 22:07:15 -04:00
Adam 1730bfb2bc Send uids everywhere when setting modes on clients 2012-10-30 21:22:10 -04:00
Adam 26a4a13cdf Made os_mode a bit smarter 2012-10-30 20:40:42 -04:00
Adam 36f357c354 Fixed build errors and warnings with -std=c++11 2012-10-30 17:10:31 -04:00
Adam b07928eea9 Clean up ngircd proto mod slightly, and send sqlines before introducing clients 2012-10-30 15:50:39 -04:00
Adam 1ef7480380 Fix inspircd mode message for channel modes. It never actually uses this, but other pseudoservers may send modes using this and not fmode (it has no timestamp) 2012-10-30 15:21:47 -04:00
Adam e4c2dcc0c7 Made db_old load up most of the old mode locks 2012-10-29 21:51:34 -04:00
Adam 7bdad857e4 Only show mode lock in /cs info if there really is a mode lock 2012-10-29 21:28:43 -04:00
Adam c2a8ad26af Fix formatting fail in cs_status 2012-10-29 17:47:26 -04:00
Adam fedf235c83 Update Config.cs for VS 2012 and fix it failing if the source directory path has spaces in it 2012-10-29 17:07:10 -04:00
Naram Qashat e88d2c2031 Make it so CMake doesn't complain if packing on a system using Visual Studio Express. 2012-10-29 16:40:19 -04:00
Adam 20e4685057 Readd cs_status 2012-10-29 14:54:49 -04:00
Naram Qashat ca55e15d44 Fix building under Mac OS X via Makefiles if not using an Xcode project. This is a hack but CMake currently provides no other way to determine if the detected C++ compiler was identified as Clang. 2012-10-29 14:06:42 -04:00
Adam bb5e4127d7 Made MailThread completely threadsafe, currently theres a race condition with config reload + sending mail at once 2012-10-29 13:51:38 -04:00
Adam 30028a2404 This include is unncessary 2012-10-29 13:46:21 -04:00
Adam 6883309927 Made anopesmtp less hard to debug 2012-10-29 13:46:21 -04:00
DukePyrolator 9c8570ac68 readded ngircd protocol support 2012-10-29 04:17:24 +01:00
Naram Qashat 4dfc0f952f Fix cmake generation due to this if not being updated. 2012-10-27 12:09:07 -04:00
Adam d6e1b92059 Add a module log type 2012-10-27 08:12:04 -04:00
Adam bb5f4555dc Ues timestamp for dns serial not yyyymmddnn.. there are too many problems with this (restarts, >99 zone updates/day, etc) 2012-10-27 05:34:36 -04:00
Adam 32d33ca8e5 Expand single digit serial revisions to match nn 2012-10-27 04:44:10 -04:00
Adam e1dcf24c98 Add nickserv:modesonid config option to set what modes users get on identify 2012-10-26 17:30:41 -04:00
Adam 3b24311db6 Sometimes zone transfers can be really big 2012-10-26 12:57:25 -04:00
Adam 8fd3fc7c13 Add sasl support to unreal, inspircd 2012-10-26 10:46:19 -04:00
Adam 8d27b25bf8 Don't attempt to process any query packets if we aren't explicitly given permission to bind to a port (we do anyway currently for m_dnsbl to get replies) 2012-10-26 00:55:04 -04:00
Adam 727b35536f This code isn't used 2012-10-25 23:44:34 -04:00
Adam bbe667dc74 Fixed two memory leaks in cs_seen 2012-10-25 22:29:10 -04:00
Naram Qashat 3608d42ae9 This version needs a better tag than "-git", so there. 2012-10-25 22:26:59 -04:00
Adam 8f33933dd8 Default xlines to be set by OperServ 2012-10-25 21:31:58 -04:00
Adam e5efe42ecb Fixed showing users from the right server on unreal/bahamut 2012-10-25 04:30:22 -04:00
Adam 10e21bfeda Fix handling clients on unreal that have no ip (it sends a *) 2012-10-25 01:30:41 -04:00
Adam 00256fdba8 Made access provider modules permanent. They don't cleanup their access entries currently and if they did it would delete them. 2012-10-24 23:30:21 -04:00
Adam 3b8fb7bb88 When db_sql_live gets new objects immediately update cache on them to prevent rewriting later if they aren't changed 2012-10-24 22:48:12 -04:00
Adam 1057fa8421 BIND's forward ability did not work as I expected
because it will not forward non recursive queries.
So, added support for SOA, NS, and AXFR requests.
2012-10-24 19:32:26 -04:00
attilamolnar fca9ec085e InspIRCd: Add handler for FIDENT to 2.0 protocol, so we know when someone changes ident on the network 2012-10-24 07:40:16 -04:00
DukePyrolator ef5c6684c7 Merge branch '1.9' of ssh://anope.git.sourceforge.net/gitroot/anope/anope into 1.9 2012-10-24 05:12:47 +02:00
DukePyrolator e0438e3a7e fixed calculating the correct channelcount for an user when loading the db. fixes bug #1450 2012-10-24 05:12:13 +02:00
Adam 04632bd381 Cleanup of last few commits/warning fix 2012-10-22 17:02:01 -04:00
Adam 0b9db15efc Add os_dns, a way to control your DNS zone via services 2012-10-22 00:54:30 -04:00
DukePyrolator d5b2f9cfa7 Base has to destruct before Extensible does because objects that destruct due to Extensible destructing don't have their references to the already destroyed object for Base invalidated. (fixed for NickAlias and NickCore) 2012-10-21 18:29:10 +02:00
Adam 727c3d5b75 Base has to destruct before Extensible does because objects that destruct due to Extensible destructing don't have their references to the already destroyed object for Base invalidated 2012-10-18 20:06:02 -04:00
Adam eddb7684c1 Fixed protoctl parsing on Unreal + fix SendLogout now the usage has changed 2012-10-17 20:22:44 -04:00
Adam 484baba6ad Actually show the correct number of entries on /os logsearch output 2012-10-15 03:54:26 -04:00
DukePyrolator 88f10a2c3c Updated the hybrid protocol module, patch provided by Michael
- Change mode handler to use UIDs within SVSMODE messages
- The IP can be 0 in UID messages depending whether or not a client is spoofed
- Removed SendGlobopsInternal handler. Anope is using GLOBOPS by default
- Set user's services timestamp/account to 0 instead of 1 on /ns logout, otherwise the UID message handler will
2012-10-14 20:13:41 +02:00
Adam ffa1c976f5 Use account name for svid on hybrid 2012-10-14 01:50:14 -04:00
Adam 4fdc157f68 Better clarify signon vs timestamp and allow updating users timestamp to an ircd given value from NICK 2012-10-14 01:05:24 -04:00
Adam 0a950669cb Add a hybrid 8 protocol module courtesy of Michael <michael@wobst.at> 2012-10-13 23:49:15 -04:00
Adam 1232018332 Allow services operators to modify/view other users autojoin lists 2012-10-13 06:21:53 -04:00
Adam 6237613439 And update modules.example.conf 2012-10-13 00:40:44 -04:00
Adam 4424abd15d Add m_sql_oper 2012-10-13 00:37:10 -04:00
Adam 76a0471c29 Simplify the db_sql_live code since this isn't actually necessary. Fixes a problem internally ovwrwriting data on objects that we have modified and are queued because of assigning something to a serialize_obj reference 2012-10-13 00:37:10 -04:00
DukePyrolator e08422a4ea fixed MODE handling in the ratbox protocol module 2012-10-12 22:47:35 +02:00
Adam 757ff06011 Fix m_ldap to reconnect automatically if the ldap server goes away 2012-10-10 23:08:00 -04:00
Adam 06defe014b Merge remote branch 'attila/1.9+topiclockmsg' into 1.9 2012-10-09 19:34:24 -04:00
Adam 63bf134321 Merge remote branch 'attila/1.9+msgfix' into 1.9 2012-10-09 19:34:11 -04:00
Adam 2113494274 Send privmsgs and notices to uids if applicable 2012-10-09 19:33:24 -04:00
attilamolnar 912f068fe4 Fix wrong error message when --dbdir has no argument 2012-10-09 23:31:20 +02:00
Adam 8f5d786f0e Cleanup ok if modules with pending identify requests are unloaded 2012-10-09 05:22:02 -04:00
Adam 1dacc648a0 Made the warnings given by cmake for not having
the dependencies for modules look less scary as
they confuse dumb people currently
2012-10-09 04:13:04 -04:00
Adam 3af786d4c9 Fix fantasy !help & give it its own help header, not ChanServ's 2012-10-08 20:58:47 -04:00
Adam e57b470e83 Made fantasy commands configurable 2012-10-08 04:16:23 -04:00
Adam b8b63ff115 Remove the asynchronous identifing hack and replace it with something better. Fixes m_*_authentication only being able to properly work when people identify normally using nickserv/identify 2012-10-07 22:39:58 -04:00
attilamolnar 959a3f3cca InspIRCd: Log when server-side topiclocking is enabled in the config but the module is not loaded 2012-10-07 11:49:38 +02:00
Adam 0a111c1976 Fix compile from bda3b1fa3a 2012-10-07 02:13:14 -04:00
DukePyrolator 4b68f0447c updated docs/LANGUAGE to point to the right directory where users should put module language files 2012-10-07 08:00:31 +02:00
Adam 31914b200b Merge remote branch 'remotes/attila/1.9+addline' into 1.9 2012-10-07 01:46:44 -04:00
Adam ebb3fca698 Release holds on a nick on identify, if there is one 2012-10-07 01:45:43 -04:00
Adam 7f72b466ac Set sane default last_topic_setter and last_topic_time in the event an empty topic is locked right after registering a channel without previously being set 2012-10-07 01:29:49 -04:00
Adam 4751c735ec Fixed module language file path 2012-10-06 22:54:52 -04:00
attilamolnar bda3b1fa3a InspIRCd: Make functions that send ADDLINE and DELLINE, call them from the rest of the module 2012-10-07 03:15:42 +02:00
Adam 4ec10d798b Fixups and cleanup for the last few commits 2012-10-06 20:11:47 -04:00
attilamolnar 3dd21e4dcd InspIRCd: Add support for server side topic locks using METADATA topiclock 2012-10-07 01:35:14 +02:00
attilamolnar 682d76835e InspIRCd: Add support for sending detecting m_topiclock and sending SVSTOPIC when it is available 2012-10-07 01:33:49 +02:00
attilamolnar 42aa367f16 InspIRCd: Send channel METADATA using a dedicated function 2012-10-07 01:32:31 +02:00
attilamolnar ec8a1bcc82 Add a config option for server side topic locks 2012-10-07 00:59:49 +02:00
attilamolnar 2d9541c4c8 Parse and store the spanningtree protocol version for InspIRCd 2012-10-06 02:18:48 -04:00
attilamolnar e747ba6c26 InspIRCd: Add metadata handler to recognize when a module is loaded or unloaded on the ircd side and adjust our behavior accordingly 2012-10-06 02:06:23 -04:00
attilamolnar 4431a34987 InspIRCd: Allow METADATA handler to differentiate between user, channel and other/server metadata 2012-10-06 02:06:23 -04:00
attilamolnar 14d7de0cf3 InspIRCd: Remove has_svshold, use IRCDProto::CanSVSHold 2012-10-06 02:06:18 -04:00
Adam cd28fdc192 Show the correct reciever nick when use strict privmsg is enabled 2012-10-06 01:01:45 -04:00
Adam 25fe9c7084 Do not process() socket engine on shutdown 2012-10-05 16:23:40 -04:00
lethality 94fc2ba9c9 Merge branch '1.9' of ssh://anope.git.sf.net/gitroot/anope/anope into 1.9 2012-10-05 15:15:50 +01:00
lethality 2f87b8e430 Revert this strangeness I created ;) 2012-10-05 15:14:19 +01:00
Adam eff61c7a97 Add an event for when nick or channel options are set 2012-10-05 05:03:55 -04:00
Adam 7c96227cd3 Use memcpy for Anope::Unhex not strcpy 2012-10-05 01:20:32 -04:00
lethality dcfae6332e Some minor fixes/typos 2012-10-03 21:22:03 +01:00
Adam 69437bb324 Fixed parsing squit (it has a reason) 2012-10-03 05:17:32 -04:00
Adam 7551245f57 Attempt #2 at silly topic ts thing, this is actually must cleaner 2012-10-02 23:30:31 -04:00
Adam 47bc551485 Revert "Fix topiclock on inspircd"
This reverts commit 87478187af.
2012-10-02 22:59:20 -04:00
Adam 87478187af Fix topiclock on inspircd 2012-10-02 22:16:35 -04:00
Adam 7042223f2e Somehow the kick handler got lost in the confusion. Send the topic time with ftopic on inspircd not the current time. Removed some unneeded protocol functions 2012-10-02 21:21:37 -04:00
Adam 93698f0d61 Added operserv/logsearch 2012-10-02 05:18:42 -04:00
Adam f7aa837696 Don't unassociate accounts with users on nick changes 2012-10-02 01:30:35 -04:00
DukePyrolator e1d1d18288 added an operserv/akill page to webcpanel 2012-10-02 05:36:31 +02:00
DukePyrolator 20a6f82753 modified the nickserv alist command to return nc->display instead of the parameter provided by the user 2012-10-02 05:35:44 +02:00
DukePyrolator aec6cac8ca Merge branch '1.9' of ssh://anope.git.sourceforge.net/gitroot/anope/anope into 1.9 2012-10-02 04:14:50 +02:00
DukePyrolator ffca6a762d fixed a small bug in the inspircd protocol modules 2012-10-02 04:11:52 +02:00
Adam 2d2ab4fec4 Fixed handling TOPIC on unreal, dont set topics in Channel::Reset unless we are synced, and fixed ts checking in Channel::SetModesInternal 2012-10-01 21:26:41 -04:00
Adam a434baed91 Allow modules to store data in their own databases. 2012-10-01 18:50:29 -04:00
Adam f14a3dfb8a Fix a few problems found by Cronusa and KindOne 2012-10-01 04:35:36 -04:00
Adam b19a3af4db Add networkinfo:chanlen config directive 2012-10-01 02:29:31 -04:00
Adam 89428a9d10 Cleanup of all of the protocol modules, rewrote message handling system to be a bit more C++ ish 2012-10-01 01:56:57 -04:00
Adam b937d6310d timestamp column is a special case too 2012-09-30 21:36:49 -04:00
Adam ad37bc9639 Bug #1445 - Empty out columns in SQL we have no data for on
insert. This is caused from serialize() only setting a key on
certain conditions and otherwise doing nothing at all.
2012-09-30 20:30:27 -04:00
Adam 56df1abdd8 Place runtime module binaries in data/runtime instead of lib/ incase of a system wide install where lib/ is not writable 2012-09-30 20:30:27 -04:00
Adam 0ea5e57298 Use RTLD_NOW when loading modules to resolve all symbols immediately.
This prevents modules with unresolved symbols from loading instead
of loading and crashing later.
2012-09-30 20:30:27 -04:00
Adam 3838eb1f05 Add webpanel contributors to readme and remove todo since its way out of date and has nothing more in it we want 2012-09-30 20:30:27 -04:00
Adam 9ba7196881 Make CommandSource use references, sometimes we hold them for awhile 2012-09-30 20:30:27 -04:00
DukePyrolator 1e71303ffa fixed nickserv alist 2012-09-30 13:58:17 +02:00
lethality 74117a1e1e added some example sql queries 2012-09-29 23:55:55 +01:00
Naram Qashat 38ad523f91 Fix a few oddball warnings that came up from clang, and also make it so webcpanel.so can be compiled under Mac OS X. 2012-09-24 15:54:49 -04:00
DukePyrolator a71e2fb64e make nickserv glist check if the given nickname is in the group of the user before checking for services oper 2012-09-23 20:57:35 +02:00
Naram Qashat 1b20ec8747 Forgot to delete a line in the last commit. 2012-09-22 04:18:41 -04:00
Naram Qashat d30e53ee2c OK, so the FIND sub-command of string() in CMake was only added with 2.8.5, change this to use the REGEX sub-commands instead. Also while I'm at it, make -pthread only get added when not on Mac OS X, it's auto-included there. 2012-09-22 03:45:51 -04:00
Naram Qashat aa57ad6082 Fix issues with CMake trying to add /System/Library/Frameworks/Kernel.framework/Headers/sys to the include paths. 2012-09-22 02:10:49 -04:00
lethality 097893bfbf Updated example query to include a valid value 2012-09-13 15:29:04 +01:00
Adam 16019c9827 Add m_sql_authentication to allow authenticating users against an external SQL database 2012-09-12 21:10:02 -04:00
Adam f391100586 Fixed gettext on freebsd/any other system that uses LANG not LANGUAGE 2012-09-10 21:39:04 -04:00
Adam c4a1e1bb0c Fixed os_defcon too 2012-09-08 04:51:44 -04:00
Adam 7e3b5bed50 Add chanserv/set/autoop, like nickserv/set/autoop but for channels 2012-09-07 23:44:15 -04:00
Adam c9c477ff9d These saset command stubs can go away 2012-09-07 22:27:28 -04:00
Adam 4eb7db80a6 Fix os_session to really use ips for quits, don't enforce session for spoofed users/other users who have no ip, clean up warnings 2012-09-07 21:22:19 -04:00
Adam 9d6626f70c Made session tracking ip based, not host based, and allow using CIDR to group multiple ips from one subnet to one session 2012-09-07 12:04:25 -04:00
Adam 5c07863ad5 Allow configuring killquick and kill delays 2012-09-07 08:46:28 -04:00
Adam 3060375251 Fixed m_ldap_authentication not returning anything if the search for an account game back empty 2012-09-07 06:52:56 -04:00
Adam 3c63e44d32 Allow ; and } in quoted strings 2012-09-07 05:59:28 -04:00
Adam 02d943bfb0 Not quite sure what I was thinking here 2012-09-05 02:56:59 -04:00
DukePyrolator 4c8fef264e updated example.conf 2012-09-03 11:05:17 +02:00
Adam 082cf8ace8 Windows cares this is escaped + chmod too 2012-09-02 22:56:17 -04:00
Adam 1fd193840d Fix CMake to actually make directories on install ..... 2012-09-02 22:39:05 -04:00
Adam b1f8e910eb Version bump for 1.9.8-git 2012-09-02 09:48:13 -04:00
Adam 81cf9f0c71 Anope 1.9.7 Release 2012-09-02 08:31:43 -04:00
Adam 3264669e03 Update version.log 2012-09-02 08:31:34 -04:00
Adam 271d723bbd Update Changes 2012-09-02 08:31:11 -04:00
Adam a0c4575122 Regenerate language files 2012-09-02 08:31:04 -04:00
Adam 1af64a9bbb Fix Windows 2012-09-02 08:30:54 -04:00
Adam e3d5140dcc Added a web panel module + a default template 2012-09-01 18:54:51 -04:00
Adam f81d0113a2 Actually set xline's manager... 2012-08-28 00:39:50 -04:00
Adam fde42899e7 Fixed db_old loading encrypted passwords from 1.8 2012-08-09 23:28:02 -04:00
Robby f7bf2fa960 Put motd in conf/ not data/ and fixed the default values in the config 2012-08-08 17:09:34 -04:00
Cronus b894a569c9 Update pid and motd file paths 2012-08-08 04:28:33 -04:00
Adam 48022c3ddf Warn about really big integer values in the config 2012-07-18 16:52:14 -04:00
Adam 28aa981464 Actually the core can't handle empty realnames, just ignore them 2012-07-01 23:50:38 -04:00
Adam 2b8a09bf55 Remove some unused code in inspircd20 protocol module & allow /chghost/ident/naming services clients 2012-07-01 22:26:05 -04:00
Adam a12788e8f4 Don't crash on empty setnames on inspircd1.2 2012-07-01 22:26:05 -04:00
Adam 9b5f6d3c45 Remove ExtensibleString everywhere 2012-07-01 22:26:05 -04:00
lethality af24dc6050 Removed old set xop references and cleared up some other stuff. 2012-06-26 16:21:24 +01:00
lethality f27560cc1e Merge branch '1.9' of ssh://anope.git.sf.net/gitroot/anope/anope into 1.9 2012-06-26 02:01:01 +01:00
Adam 4b309b5044 Fixed accidentally recursion in User::SendMessage from last commit 2012-06-25 20:51:08 -04:00
lethality d8a99d619f Merge branch '1.9' of ssh://anope.git.sf.net/gitroot/anope/anope into 1.9 2012-06-22 21:26:33 +01:00
Adam 2dec8e767a Allow userless command sources 2012-06-18 05:04:30 -04:00
lethality ba53c7eb03 Updated MODULES somewhat 2012-06-17 22:23:22 +01:00
Adam 873d4287de Split up bs_set 2012-06-11 15:44:48 -04:00
Adam 3626fb246e Fixed fd leak in win32/pipe.cpp 2012-06-06 15:16:46 -04:00
lethality a661098ef2 Some more fantasy character help output 2012-06-04 05:45:13 +01:00
lethality a4bf5ce609 minor help output changes, including some confusion in fantasy chars 2012-06-04 04:50:35 +01:00
Adam 437944d416 Merge branch '1.9' of anope.git.sf.net:/gitroot/anope/anope into 1.9 2012-06-01 04:43:26 -04:00
DukePyrolator db37b1c634 updated chanstats 2012-06-01 07:37:34 +02:00
Adam 1e49e9b9dc This should actually be LOG_TERMINAL, quitmsg isn't logged to terminal on shutdown 2012-05-26 02:36:02 -04:00
Adam 2cbfbc98e9 Some access level fixes from Robby to more closely match the historic levels, and some code cleanup 2012-05-26 02:15:48 -04:00
Adam 38d5f20deb Added a ./Config option for using precompiled headers 2012-05-24 21:54:15 -04:00
Adam 70fb5900a2 Add support for inspircd2.0+s mlock, improved on Unreal's, and made server side mlock usage configurable 2012-05-23 19:35:56 -04:00
Adam bf7d1a55af Fixed some problems found by Robby 2012-05-23 15:09:41 -04:00
Robby 1f73e27870 Updated help messages for ns_list, cs_list, cs_entrymsg, and cs_info. Also fixed logging for cs_entrymsg. 2012-05-20 04:14:26 -04:00
Adam 699087b2bf Fixed cs_entrymsg loading entries from the database 2012-05-20 03:57:22 -04:00
Adam ccd29085a9 reinterpret_cast off of a virtual base does Bad Things 2012-05-17 03:57:19 -04:00
Adam a883362c14 Fixed not always calling operator bool() in dynamic_reference, which would mess up service references and do weird things 2012-05-17 02:03:22 -04:00
Jeremy ef88385d85 m_ldap_authentication: Removed the dependency on a specific binddn in favour of searching the tree for matching criteria and using the returned DN 2012-05-15 17:19:50 -04:00
Adam 90b0283160 Grab the DN for every LDAP query and send it in the result 2012-05-15 04:27:36 -04:00
Adam 0a8d46b538 Fixed parsing FMODE on inspircd 1.1 2012-05-14 22:30:03 -04:00
Adam a84226edf0 Do not show help for set message if useprivmsg is disabled 2012-05-11 00:50:58 -04:00
Adam 9370b063d0 Fixed crash on access del + valgrind errors 2012-05-10 17:53:53 -04:00
Adam d5ffae0e46 Made ssl cert and keyfiles configurable 2012-05-09 03:37:37 -04:00
lethality f89599726e fixed paste error (failed awesomeness) in last commit. 2012-05-09 03:11:57 +01:00
lethality a81b3aaff1 Fixed saving backups 2012-05-09 01:23:34 +01:00
Adam 820e4edc2b Fixed some 100% cpu bugs with the new SQL stuff, and fixed sqlite+db_sql_live 2012-05-08 18:04:49 -04:00
Robby 25586f3246 Allow services operators to release other user's nicks, and allow services operators to view the access list of other operators 2012-05-08 02:01:44 -04:00
Adam b7149fc940 Merge branch '1.9' of anope.git.sf.net:/gitroot/anope/anope into 1.9 2012-05-06 21:44:11 -04:00
Adam 675b113c3e Split up db/conf/lib/locale install directories, and allow alternate ones to be specified at runtime 2012-05-06 21:43:50 -04:00
DukePyrolator c797987615 Readding missing valid nick check to ns register/group removed in os_forbid commit 2012-05-05 09:35:18 +02:00
Adam eb0e07d564 Use Unreal's MLOCK command if supported 2012-05-04 16:03:02 -04:00
Adam 1b5805eeb0 Set quitmsg on ERROR 2012-04-29 20:39:33 -04:00
Adam 42e652cae7 Pull table schemas from SQL on startup so we can alter the schemas if we need to, fixed sqlite to work again 2012-04-29 19:24:37 -04:00
Adam 62818abbf4 Added options:casemap to chose how case insensitive strings are compared, using ascii, rfc1459, or a locale installed on the system 2012-04-29 15:43:51 -04:00
Adam 4d9a96e8df Fixes to db_sql 2012-04-27 17:06:16 -04:00
Adam e490a5461f Process defines even before includes, fixes defining{} pseudoclient names to something else in their respective configurations 2012-04-27 16:05:49 -04:00
Adam 5068483cb9 Add db_sql:prefix allow prefixing all anope tables similarly, and changed db_sql to update the databases incrementally instead of one big flush 2012-04-27 15:38:50 -04:00
Adam 83ee20fc29 Clarify access denied messages caused by NSSecureAdmins 2012-04-25 19:02:09 -04:00
Adam b08aa4ed92 Check for os_sesion to exist before having defcon try and place session bans 2012-04-25 18:49:53 -04:00
Adam 1081ecdae8 Fixed non-debug build 2012-04-25 14:29:50 -04:00
Adam 2370c16f1e Fixed build from the previous merge 2012-04-24 16:02:07 -04:00
Adam 3d84dc91f6 Merge branch '1.9' of anope.git.sf.net:/gitroot/anope/anope into 1.9 2012-04-23 05:17:02 -04:00
Adam 573e49a7ea Reworked live SQL support yet again 2012-04-23 05:08:26 -04:00
Adam 63c639e108 Fixed hashm checking in db_old and loading 1.9.1 databases 2012-04-23 05:07:06 -04:00
Adam fc00406079 Fixed ./services --version etc not getting printed when stdout is a file/pipe/not a tty 2012-04-22 02:57:17 -04:00
DukePyrolator b752c3a668 fixed a bug in chanstats 2012-04-13 18:33:22 +02:00
DukePyrolator 7372b457cc fixed a compile error in m_sqlite 2012-04-08 19:29:56 +02:00
DukePyrolator deb5196101 Added Chanstats. It uses a new, improved database format and is not compatible with current phpdenora or magirc installations. 2012-04-08 12:43:34 +02:00
DukePyrolator 9e1fda2a44 Modified the SQL API to allow unescaped parameters (useful for passing row names and NULL values) 2012-04-08 12:30:48 +02:00
Adam 9d249ef96f Fixed unpacking questions from dns packets 2012-04-06 14:41:28 -04:00
Viper e03b73e8cd Revert changes made to line endings. 2012-04-06 15:36:49 +02:00
Hal9000 6b473f22bd Revert last commit cause guess what, I screwed things up 2012-04-06 15:12:22 +02:00
Hal9000 05bb80c06c Fixed mail function causing some MTAs to sent blank messages 2012-04-06 14:35:34 +02:00
DukePyrolator e6edc6586e updated the german language file 2012-04-01 20:50:46 +02:00
DukePyrolator cf3124c063 fixed some typos 2012-04-01 20:50:04 +02:00
Adam 12a6a27b52 Merge branch '1.9' of anope.git.sf.net:/gitroot/anope/anope into 1.9 2012-03-27 19:14:55 -04:00
Adam 31a0e673b2 Fixed unpacking multiple names from dns packets when one has multiple compression pointers.
Currently this will just fail at unpacking the later name due to offsets being invalid.
Also cleaned up the existing code and made unpacking error messages more helpful.
2012-03-27 19:01:29 -04:00
DukePyrolator 8d0b4a1bf5 added a missing error message when a module file does not exist. this fixes bug #1401. also moved some debug messages to debug level 2 2012-03-22 07:30:38 +01:00
DukePyrolator 1b0ebcadfa fixed bug #1399 2012-03-21 22:20:18 +01:00
DukePyrolator 0d100ffacc fixed ns_ajoin 2012-03-21 20:25:25 +01:00
Adam 88fd1da803 Fixed typos 2012-03-13 21:07:10 -04:00
Adam a06934777c Actually check if the nicks arent registered, oops 2012-03-13 19:26:11 -04:00
Adam a26f4b9a9a Bug #1389 - readd RNG seed in the config and start DNS query ids off on a random number 2012-03-13 17:45:07 -04:00
Adam 053d6a2247 Add a nickserv:unregistered_notice config option to send a message to unregistered users on connect. Suggested by Cronus. 2012-03-13 17:18:11 -04:00
Adam beae4775cf Bug #1382 - Save maxusercount and maxusertime 2012-03-13 16:58:14 -04:00
Adam cff91a532f Made gch files depend on the header they were generated from 2012-03-11 21:21:47 -04:00
Adam 92ed5d7208 Fixed having multiple uplink blocks work right if the first uplink fails on startup 2012-03-11 16:44:44 -04:00
Adam 7800375510 Bug #1384 - Fixed spacing of connection log message if users have no vhost - patch from cbiedl 2012-03-11 05:20:28 -04:00
Adam ab25815694 Fixed backup databases having their names collide due to not separating month and day, #1383 2012-03-05 20:15:56 -05:00
Adam 8e0104363f Fixed bs_kick syntax error 2012-03-05 14:29:48 -05:00
DukePyrolator b7a6d518b0 fixed the --dir commandline parameter 2012-03-04 10:18:25 +01:00
Adam 4ed844ffd5 Escape all column names when building sql queries 2012-03-02 17:05:59 -05:00
Adam 020467d472 Fixed db_old loading noexpire 2012-02-27 00:16:15 -05:00
Adam 141b87bd14 Changed the OnChanDrop event to be called right before channels are dropped, not after 2012-02-26 23:28:02 -05:00
Adam a5b9e235ae Added chanserv:require config option to set which modes must be on all registered channels. Prevents the core from always enforcing +r on every channel, even if chanserv is not loaded. 2012-02-26 23:23:15 -05:00
Adam a78790eac4 Fixed vhost check on identify 2012-02-26 20:18:22 -05:00
Adam 07226feec4 Track plexus umode and cmode +C and renamed UMODE_NO_CTCP to match up with the names of other modes. 2012-02-26 19:49:02 -05:00
Adam e73013830d Fixed missing #include in init.cpp 2012-02-25 22:45:51 -05:00
Adam 2bc3bd3fcf Do not send kills after sending XLines because it causes us to internally remove the user and then recieve a quit from the user (who is now nonexistant) once the IRCd processes the XLine 2012-02-25 00:06:02 -05:00
Adam 83456f6040 Fixed akill setter and ids showing in akill reasons 2012-02-24 23:25:29 -05:00
Adam 601dc41baf Merge branch '1.9' of anope.git.sf.net:/gitroot/anope/anope into 1.9 2012-02-24 14:54:44 -05:00
Adam 2337b7717d Fixed calculating bots channel count of assigned channels and fixed the order of saving memos (among other things) 2012-02-24 14:53:34 -05:00
lethality fde40dee7a Tell users to use NickServ for registering nicks, not chanserv... 2012-02-24 01:50:21 +00:00
lethality ba32aad4cb Merge branch '1.9' of ssh://anope.git.sf.net/gitroot/anope/anope into 1.9 2012-02-23 02:32:49 +00:00
Adam 24811e5970 Added a configuration option to make all nick registrations require admin verification 2012-02-22 20:55:59 -05:00
lethality f01aab5f9b Merge branch '1.9' of ssh://anope.git.sf.net/gitroot/anope/anope into 1.9 2012-02-23 00:04:36 +00:00
Adam 3850b073dd Added regex support for many commands, such as akill, sqline, snline,
all of the */list commands, etc.

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

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

This prevents us from deopping all users who join a new channel
when recovering from a netsplit that don't explicitly have access
to that channel.
2011-07-16 06:52:13 -04:00
Adam c3993b3123 Fixed appending !*@* to some access list entries that are valid hosts 2011-07-14 22:37:46 -04:00
Adam f277be0f26 Fixed OSOpersOnly & CSOpersOnly 2011-07-14 21:40:21 -04:00
Adam 1a2486d2ec These .pot files don't need to be under version control 2011-07-14 20:52:24 -04:00
Adam a735095965 Added cs_sync 2011-07-14 20:00:39 -04:00
Adam ef75e171bc Added bs_autoassign 2011-07-14 19:11:13 -04:00
Adam 5bf7dee559 Made channel descriptions optional 2011-07-14 18:29:03 -04:00
Adam f858164dee Rewrote how commands are handled within Anope.
This allows naming commands and having spaces within command names.
2011-07-14 02:31:12 -04:00
Adam 924f6849fe Bug #1283 - Upped the buffer used for messge replies, as some can be really big 2011-07-10 19:32:10 -04:00
Adam b5ec57a3f9 Bug #1285 - Fixed setting -P on channels with only a service bot in it 2011-07-10 19:07:45 -04:00
Adam 6d978486cd Bug #1286 - Dont allow actions to mess up the caps kicker 2011-07-10 18:27:48 -04:00
Adam d2832b1045 Use getrlimit instead of ulimit, fixes freebsd build 2011-07-07 02:23:11 -04:00
Adam 1a4fc39d7b Do not send news when a server is syncing 2011-07-06 22:06:07 -04:00
Adam 97388abb99 Fixed /hs set and /hs setall not allowing only a host 2011-07-06 22:05:01 -04:00
Adam 57ec310512 Only call send once per write event in dns manager 2011-07-06 05:20:25 -04:00
Adam ffd5c045e4 Fixed chanserv/access/modify permission on non-xop channels 2011-07-06 00:33:25 -04:00
Adam cc3c2b6999 Send account data once an account is confirmed 2011-07-05 01:39:11 -04:00
Adam c549aa4e76 Bug #1279 - Fixed strftime 2011-07-04 22:39:13 -04:00
Adam 714831b249 Bug #1282 2011-07-04 22:34:21 -04:00
Adam d6879c4a25 Bug #1280 - Fixed reading some na and bi flags in db_plain 2011-07-04 14:25:13 -04:00
Adam 2caf5868d0 Clean up some of the dns code, udp is connectionless anyway so this isnt required 2011-07-03 00:19:54 -04:00
Adam c585964e60 Fixed the mode manager from complaining about prefixless modes on insp20 2011-06-27 19:14:30 -04:00
Adam 936a50df23 Fixed build on older cmake versions 2011-06-27 15:35:09 -04:00
Adam 3e9888092a Fixed mail delay time 2011-06-24 03:40:18 -04:00
Adam 821826a566 The other part of #1277 2011-06-24 02:58:40 -04:00
Adam 7ec803f610 Bug #1277 - Dont send account data for unconfirmed nicks 2011-06-23 15:31:57 -04:00
Adam b1a075b462 Fixed bug #1276 and some other valgrind warnings 2011-06-23 15:10:50 -04:00
Adam 3be75cbcb3 Merge branch '1.9' of anope.git.sf.net:/gitroot/anope/anope into 1.9 2011-06-20 23:28:25 -04:00
Adam 2667f9046e Cleaned up some of the logger code which fixes not logging debug logs to files etc when debug is enabled, and some other small things 2011-06-20 23:25:46 -04:00
Naram Qashat 2601871391 Fix long-standing issue with the get token functions if the delimiter wasn't found in the string but you wanted the first "token". 2011-06-20 23:09:03 -04:00
Adam a3d0ab3d09 Use case insensitive matching when looking up servers by name 2011-06-20 23:00:49 -04:00
Adam a1b36ec0a5 Search all domains for language strings, fixes the mess that we used to use to translate strings in 3rd party modules 2011-06-17 19:57:43 -04:00
Adam 48e995ddf2 Bug #1275 - Don't log absolutely everything sent to operserv, most of its commands already have their own logs 2011-06-17 13:34:47 -04:00
Adam df971befb2 Fixed a few small things 2011-06-14 18:23:53 -04:00
DukePyrolator 1cd65878db changed some _() to gtl() and updated do_strftime() and duration() 2011-06-13 18:20:22 +02:00
DukePyrolator 6148ffa669 added a Anope::string::capacity() function 2011-06-12 06:28:22 +02:00
DukePyrolator 717b4c3406 small improvement for Timer::SetSecs() 2011-06-09 06:16:31 +02:00
DukePyrolator 74361bec05 added a Timer::SetSecs() function 2011-06-07 06:16:57 +02:00
Adam a087e7f664 Fixed clearing bandata 2011-06-05 18:18:50 -04:00
Adam 3ad93a31c9 Burst our channels with the uplink when we connect & fixed bug #1274 2011-06-02 14:59:34 -04:00
Adam 184b346166 Place version.h in build/ not include/ 2011-06-02 12:45:08 -04:00
Adam b2c807dc8c Fixed /ns alist 2011-05-30 13:14:33 -04:00
Adam 60548aa00b Fixed ns_update and db_mysql_live sql queries 2011-05-29 19:05:28 -04:00
Adam a45d1555d3 Added an IsServicesOper event 2011-05-23 14:47:14 -04:00
Adam 121ae0b189 Added m_statusupdate 2011-05-23 13:32:01 -04:00
Adam 8bf8832b70 Rewrote the signal handling to use sigaction 2011-05-23 04:41:51 -04:00
DukePyrolator 4dd7e261f5 fixed a possible crash on database saving 2011-05-22 09:05:21 +02:00
Adam f4329df11c Merge branch '1.9' of anope.git.sf.net:/gitroot/anope/anope into 1.9 2011-05-21 15:33:10 -04:00
Adam 98729a6c78 Bug #1271 2011-05-21 15:32:47 -04:00
DukePyrolator 742ba970b0 fixed bug #1272 2011-05-21 15:15:46 +02:00
Adam 115f94bfc2 Made Anope able to process normally when disconnected from the uplink and not sleep(), enable usage of non-blocking connect() and default all sockets to non blocking mode. Some cleanup to m_ssl and some cleanup to main.cpp. 2011-05-21 04:57:27 -04:00
Adam 7e5727288d Fixed compile from the earlier merge 2011-05-19 20:36:39 -04:00
Adam 13915d8b57 Modularized os_news 2011-05-16 04:10:18 -04:00
Adam 9962fae1a1 Calculate nc::channelcount at runtime 2011-05-16 04:10:18 -04:00
Adam 9fcbe293e2 Added os_oper 2011-05-16 04:10:18 -04:00
Adam fd4b52ec38 Added os_forbid 2011-05-16 04:10:18 -04:00
Adam b59602abf8 Check for a valid server in /operserv noop 2011-05-16 04:10:18 -04:00
Adam fd21c36725 Fixed some logic fail in ts6_uid_retrieve 2011-05-16 04:10:18 -04:00
Adam b999c6ca53 Expand more on m_alias and changed some std::string usage in sockets.cpp to use Anope::string 2011-05-16 04:10:15 -04:00
Adam 583954d3a1 Use module type to determine what type each module is instead of its location in the configuration file. 2011-05-16 04:09:32 -04:00
Adam 8fb1604f64 Fixed reading empty config values in the multiconfig code, caused by removal of DT_CHARPTR 2011-05-16 04:09:07 -04:00
Adam 284af258bf Added more useful functions to our LDAP API, allow adding newly registered accounts to LDAP, removed some unnecessary OnPre events and fixed unloading all modules 2011-05-16 04:09:07 -04:00
Adam e7887c1f01 Unmodularized the socket engine because its causing problems and really is unnecessary 2011-05-16 04:08:47 -04:00
Adam 076ebafa1b Moved some global functions to be member functions and misc cleanup 2011-05-16 04:07:56 -04:00
Adam 6922bd239c Fixed up the MySQL Query code and finished some command code I forgot earlier 2011-05-16 04:07:30 -04:00
Adam 13aa58ce5d Removed DT_CHARPTR from the config reader, its unneeded 2011-05-16 04:06:22 -04:00
Adam c8c23158a4 Moved the core pseudo clients out into their own modules 2011-05-16 04:06:17 -04:00
Adam 1782ce260c Use std::map instead of unordered_map 2011-05-16 04:01:50 -04:00
Adam b28d3746f5 Branch for 1.9.5 2011-05-16 04:01:46 -04:00
Adam 469a04e7e0 Anope 1.9.4 Release 2011-05-16 02:58:06 -04:00
Adam 605b5d5717 Removed ngircd as we've decided not to support it at this time 2011-05-16 02:57:28 -04:00
Adam f7aa46fb33 Note m_async_commands is experimental 2011-05-16 02:47:23 -04:00
Adam b4450294af Fixed Windows build 2011-05-15 21:02:06 -04:00
Adam 57327a5e33 Fixed akill log message when there is no expiry time 2011-05-15 19:54:35 -04:00
Adam 4a3c64291f Fixed sometimes not removing nick masks from the access list when the group is dropped 2011-05-01 18:41:54 -04:00
Adam 036b3c9053 Temporary fix for /os restart with m_async_commands loaded, is fixed properly in 1.9.5 2011-04-29 18:03:04 -04:00
Adam 7da33344d1 Added a unique key for the anope_cs_mlock table 2011-04-28 19:13:44 -04:00
Adam cbdb9f59f3 Fixed bug #1265 2011-04-27 11:15:02 -04:00
Adam 5d3d6bcead Fixed a crash if an expiring channel had the founder also on the access list 2011-04-27 09:26:51 -04:00
Adam 0cdc628db0 Fixed crash when certain nicks expire 2011-04-25 15:58:46 -04:00
Adam 4a733c93d4 Don't attempt to connect to the uplink if given invalid hostnames 2011-04-25 04:17:21 -04:00
DukePyrolator 03d2378a9f resolve hosts when connecting with ssl 2011-04-25 07:08:57 +02:00
Adam 5e027c196d Two small SQL fixes 2011-04-23 02:36:42 -04:00
Adam 3aeaef5b9a A few more small fixes 2011-04-20 15:39:44 -04:00
Adam 4d26070a92 This actually isn't necessary 2011-04-20 09:35:09 -04:00
Adam f601b04594 Fixed logging messages with an empty category to everything 2011-04-19 23:42:16 -04:00
Adam ca169489b2 Allow unidentified users to still get access by non nickcore access entries 2011-04-18 21:07:54 -04:00
Adam 713c2eb704 Fixed /ns help register reply 2011-04-18 17:09:30 -04:00
Adam 660e0c78ac Fixed /ns help access 2011-04-17 19:00:01 -04:00
Adam 0862de6577 Fixed the mlock depreciated message 2011-04-16 16:06:52 -04:00
Adam 2cd511d3a3 Fixed botserv kicker logic 2011-04-16 04:35:14 -04:00
Adam efe5fedde9 Fixed caps kicker 2011-04-15 19:51:34 -04:00
Adam c8c6845452 Fixed /ns list unconfirmed 2011-04-10 22:05:48 -04:00
Adam bd62c4891e Fixed disabling channel levels 2011-04-09 20:52:25 -04:00
Adam 9535541f5a Fixed setting +r on nick ownership, lost somewhere in revision fbae33 2011-04-06 10:13:03 -04:00
Adam 711a570d24 Run OnCheckAuthentication with the account name if there is one 2011-04-06 09:41:39 -04:00
Adam cb9ccc443d Fixed bug #1261 2011-04-05 19:11:23 -04:00
Adam c681bdd2e3 Merge branch '1.9' of anope.git.sf.net:/gitroot/anope/anope into 1.9 2011-04-03 18:23:17 -04:00
Adam 74844c0f28 Use dynamic_reference to check for users being killed from commands 2011-04-03 18:19:29 -04:00
Adam 905207093b Made LDAP support recover, release, resetpass, etc. 2011-04-03 18:07:58 -04:00
DukePyrolator 73a944fb74 fixed some duplicate messages and updated the german langfile (10% done) 2011-04-03 08:54:40 +02:00
Adam d1328d876a Fixed a typo making ns_register crash 2011-04-01 01:57:12 -04:00
Adam faa85564fc Removed some unneeded/unused code from m_ldap 2011-03-31 14:41:30 -04:00
Adam 8dec0c1f17 Fixed bug #1258, more Windows stuff, and more language strings 2011-03-30 23:59:57 -04:00
Adam 8098ed899a Fixed windows build more, including ldap 2011-03-30 00:55:45 -04:00
Adam 77c98f0750 Regenerated language files. 2011-03-29 14:02:35 -04:00
Adam 8dbdfa9a44 Fixed windows build 2011-03-29 13:43:40 -04:00
Adam 685e99be02 Fixed some left over useprivmsg problems and fixed some compiler warnings. 2011-03-29 13:43:22 -04:00
DukePyrolator b14b7bd55e burned all %R and %S in the .po files 2011-03-26 08:44:21 +01:00
DukePyrolator 365769d14c replaced all %R with %s in the language strings 2011-03-26 08:20:05 +01:00
DukePyrolator 01b901eba1 ignore additional parameters for /chanserv info 2011-03-25 20:56:42 +01:00
DukePyrolator 26de1d9f93 1. when dropping nicks, dont add the dropped nick as successor for a channel 2. set -r on dropped channels 2011-03-25 17:42:13 +01:00
Adam 451fb82e54 Bug #1203 2011-03-22 23:58:53 -04:00
Adam c02d51f523 Bug #1256 2011-03-22 18:16:05 -04:00
Adam b95027ba28 Merge branch '1.9' of anope.git.sf.net:/gitroot/anope/anope into 1.9 2011-03-16 01:16:15 -04:00
DukePyrolator 5b476a2597 added a description for the HELP command 2011-03-16 06:14:28 +01:00
DukePyrolator bceeda8087 fixed displaying the RESEND command in /nickserv help output 2011-03-16 05:36:12 +01:00
Adam ee9636bba2 Fixed some logic fail in User::IsRecognized 2011-03-15 19:23:08 -04:00
Adam ddfb16de1a Fixed compile 2011-03-14 20:16:38 -04:00
Charles Kingsley 2555d0d637 Removed include/patricia.h due to oversight in attribution. This breaks compile, please do not use until this is fixed later. 2011-03-14 21:39:53 +00:00
Adam ed73d76751 Rewrote some of the opertype system, added os_login 2011-03-14 13:52:26 -04:00
Adam 4fe49af840 Fixed a crash in m_ldap is unloaded 2011-03-13 22:59:50 -04:00
Adam beabbb3a20 When a server quits use its quit reason for all of its links 2011-03-13 19:15:53 -04:00
Adam b4888c21ed Fixed a typo in os_stats 2011-03-13 17:20:44 -04:00
Adam b75fa1c6ec Fixed a crash in /cs help register 2011-03-13 14:03:02 -04:00
DukePyrolator 3fbf39b25d Added some useful Anope::Version functions to prevent some files from unnecessarily rebuilding on every make 2011-03-13 03:42:30 -04:00
DukePyrolator 15a833283b Set the locale to the default system locale on startup 2011-03-13 03:38:42 -04:00
DukePyrolator 5a0d04bb81 fixed a typo in os_news, thanks to Dan for reporting it 2011-03-13 07:09:17 +01:00
DukePyrolator fbae3344ff added ns_cert 2011-03-12 09:27:16 +01:00
Adam 95469fde30 Added some access checks to cs_mode and fixed some language strings 2011-03-12 02:40:08 -05:00
Adam 9f46972f19 _()ify Command::SetDesc 2011-03-11 17:26:27 -05:00
Adam 46a3afadb9 Fixed validating users on all server syncs 2011-03-11 17:09:49 -05:00
Adam 1b2f3bf369 Fixed some problems with m_alias and fantasy 2011-03-11 15:10:30 -05:00
Adam bb3b421385 Global should send logon news 2011-03-11 04:27:32 -05:00
Adam 1ee3d3d810 Added os_config and support for including additional configuration files. 2011-03-11 00:47:28 -05:00
Adam 97c2e0957d Bug #1251 - Fixed logging inspircd logging us logging inspircd. Also moved the Server::Find messages to debug level 2 2011-03-10 19:20:58 -05:00
Alexander Barton 09a5791bc6 ngIRCd protocol: announce Anope with its version 2011-03-09 12:29:59 -05:00
Adam 8db5ecd736 Fixed sending CHANINFO on ngIRCd with two parameters if the channel has no modes locked. 2011-03-09 12:28:24 -05:00
Adam e9aa04a8f4 Store mlock in the databases and removed some unused functions from misc.cpp 2011-03-09 01:25:49 -05:00
Adam 8eb23e7d48 Added support for extbans 2011-03-07 19:54:51 -05:00
Adam 093b3d258e Change the mode name code to use Flags names in preparation for extban support 2011-03-06 19:36:52 -05:00
Adam 48e6221cf0 Expire unconfirmed nicks, forgot to add this earlier.. 2011-03-05 22:00:27 -05:00
Adam ef0c095712 Made m_ldap_oper understand deopering 2011-03-05 18:18:51 -05:00
Adam a0355dfd9d Fixed /bs badword del to show what word was deleted 2011-03-05 17:43:51 -05:00
Adam 6fe2d8af97 Removed nickrequests, instead have unconfirmed registrations. Also made ns_resetpass allow remote-id to get past things such as kill immed. 2011-03-05 17:23:22 -05:00
Adam 90e5d0feaa Added LDAP support 2011-03-04 20:47:58 -05:00
Adam d79e22bfaa Updated TODO 2011-03-04 12:50:50 -05:00
Adam a9fb6bab15 Just use blocking sql queries if m_asynch_commands isn't loaded - it's not that bad. 2011-03-04 02:41:29 -05:00
Adam dd968c07be Fixed some logic fail when detecting who should be akicked 2011-03-04 02:19:20 -05:00
Adam feb81c51d2 Clarify the module dependency messages generated by cmake are non fatal 2011-03-04 02:17:51 -05:00
Adam aecf675e6b Fixed os_sqline del 2011-02-27 23:32:07 -05:00
Adam bcaf406747 Made akills work on IRCds that do not support bans (ngircd) 2011-02-27 16:47:23 -05:00
Adam f234a2bfab Replaced the few language strings we use with #defines to prevent accidentally translating them if we shouldnt 2011-02-26 17:54:03 -05:00
Adam 28d17a40ce Fixed session exception limit of 0 to mean unlimited 2011-02-25 21:41:27 -05:00
Adam 7cfca37e2a Fixed build on freebsd with precompiled headers 2011-02-25 21:41:18 -05:00
Adam c38b6392c5 More fixes. Also made db_mysql_live not keep bots updated because thats pointless and made m_asynch_commands respect user language settings. 2011-02-25 21:41:08 -05:00
Adam ee38756982 Fixed a lot of small problems 2011-02-25 21:40:43 -05:00
Adam eea7d2eb77 Fixed the first half of #1235 2011-02-22 20:44:47 -05:00
Adam b15410fd3a Store modes in the databases told to us during runtime that we don't have information any about. Allows mlocking things like InspIRCds +w etc. Also fixes part of #1235 2011-02-22 20:30:45 -05:00
Adam c83b2b73d7 Much more work on the live SQL. Should work pretty decently now under heavy load. 2011-02-20 01:05:16 -05:00
Adam dfbb5264fa Inspircd does not send CAPAB NOQUIT, assume it 2011-02-19 21:17:53 -05:00
Adam f49a3e03c1 Fixed aborting because of invalid values given to mode +f on inspircd 2011-02-19 19:03:05 -05:00
Adam 109d1744a0 Update SQL when a nick is deleted 2011-02-18 11:49:52 -05:00
Adam 470f8af97c Fixed some logic fail when determining when a recognized user gets access 2011-02-18 11:48:29 -05:00
Adam a1296a3b7c Changed the OnNickDrop event to call before the nick is deleted 2011-02-18 11:48:20 -05:00
Adam f38fe242cd Merge branch '1.9' of anope.git.sf.net:/gitroot/anope/anope into 1.9 2011-02-17 14:32:51 -05:00
Adam 536ea2189a Split db_mysql_live into two modules so other modules can make use of the asynchronous command interface 2011-02-17 14:31:21 -05:00
DukePyrolator ab0422b4d4 set the vhost before we call ns_ajoin or other modules on identify 2011-02-17 07:00:03 +01:00
Adam 18bd33f9a4 Use precompiled headers when building with gnu g++ to speed up build time 2011-02-16 12:50:23 -05:00
DukePyrolator d436e4ca4a added Anope::printf() 2011-02-13 20:06:01 +01:00
Adam 1372dc1953 Removed the Wallop config options and replaced them with the new log system 2011-02-12 16:17:17 -05:00
Adam 9ef7352e69 Merged os_umode into os_mode 2011-02-11 18:30:58 -05:00
Adam 2529ff6dae Made the help command description code more sane 2011-02-11 03:12:39 -05:00
Adam 7bdf592f7e Log rawio when in debug mode and fixed expiring session exceptions 2011-02-09 21:54:28 -05:00
Adam f463b772b0 Removed a lot of the old capab flags we dont/have never used 2011-02-09 20:09:26 -05:00
Adam eec897762c Enable quitstorm for ngircd 2011-02-09 17:41:07 -05:00
Adam f87c665b63 Foward port ebe0ce6610 / b6ab031fc1 2011-02-09 13:31:47 -05:00
Adam 36d3fd1710 Do not crash if a user is introduced with a nonexistant server 2011-02-09 13:25:28 -05:00
Adam d26a19b41d Made ./Config output a userful error message if cmake is not found 2011-02-09 01:12:43 -05:00
Adam a55b3742cb Removed the LIBINTL include hack 2011-02-05 18:35:20 -05:00
Adam 83556667fd try/catch-ified all instances of convertTo to keep from aborting when a user gives too large or too small a number 2011-02-04 21:01:33 -05:00
Adam faf5f3128f Merge 032c30dd5d 2011-02-04 19:31:02 -05:00
Adam a53a797271 Replaced all of the old %S's in the language strings that were used for service nicks 2011-02-04 18:32:04 -05:00
Adam 08583dc107 Moved the language strings which are only used once
out of the core and into the modules that use them.
2011-02-04 15:30:31 -05:00
Charles Kingsley c362a1e077 DP in "an user" grammar police mode. 2011-01-29 12:05:34 +00:00
Charles Kingsley 140208e5ee Another typo pointed out by the grammar police. ;) 2011-01-29 12:00:12 +00:00
Charles Kingsley 679d3c373f Fixing leftover spaces and other rubbish I missed on the first pass. 2011-01-29 11:58:59 +00:00
Charles Kingsley 557eceeefc Updated some docs/ & removed TROUBLESHOOTING as it is redundant. 2011-01-29 11:06:38 +00:00
Charles Kingsley 9704ccc8a6 QA fixes / refinements for example.conf 2011-01-29 10:44:27 +00:00
Adam e62664138b Added patricia_tree::iterator 2011-01-28 23:09:25 -05:00
Adam 3eadc1509f Fixed setting usermode +k on our clients on InspIRCd 2.0 2011-01-28 13:19:26 -05:00
lethality 9910aa3cc6 Bug #1237 - only set umode +h on a user joining help chan if they have op access 2011-01-28 00:09:34 +00:00
Adam 2a53e5f80e Fixed the order queries are done during sqlsync to make the new foreign keys happy 2011-01-24 19:03:15 -05:00
Adam 2e8acfb98c Fixed some SQL queries 2011-01-24 17:50:34 -05:00
Adam 48fa096943 Added %N for network name in dnsbl:reason 2011-01-24 02:54:09 -05:00
Adam bf559d788f Fixed loading forbidden nicks 2011-01-24 01:11:10 -05:00
Adam 3bfc8e9a39 std::stringstream::clear doesn't clear it 2011-01-23 12:56:21 -05:00
Adam a162f1d18e Bug #1234 - Fix reading resolv.conf if it has multiple spaces or tabs 2011-01-21 23:01:48 -05:00
lethality a86873c93e fixed some minor presentation, grammar mis-use and copyright date in DP's ngircd 2011-01-21 16:49:25 +00:00
Adam 05933e9f21 Removed db-upgrade, its no longer needed 2011-01-20 19:42:27 -05:00
Adam ab2e34d817 Added options:nomlock 2011-01-19 00:31:18 -05:00
Adam e7a8bcc30b Bug #1232 - Fixed db-convert to properly convert mode lock parameters 2011-01-18 18:47:08 -05:00
Adam 34c6c664c9 Added amsg kicker settings to /bs info 2011-01-18 18:41:16 -05:00
DukePyrolator 4a3ee91c55 fixed a bug in the ngircd protocol module 2011-01-18 19:05:20 +01:00
Adam 6f0d1af596 Made db_plain buffer database writes which prevents
databases from coming corrupted if we crash or if write
fails. Also fixed loading all ajoin channels.
2011-01-17 20:41:57 -05:00
Adam 01feb5b489 Fixed ns_ajoins list output formatting 2011-01-17 20:29:33 -05:00
Adam 8975b52cc3 Added ns_ajoin 2011-01-17 15:46:53 -05:00
Adam 7acbbbbf5b Fixed flag names to match 1.9.3s 2011-01-15 21:02:14 -05:00
Adam 4fecafa612 Made db_plain save amsg settings 2011-01-15 16:45:48 -05:00
Adam a4ded88e85 Made CA_SET always be accessable, even if db-converter messes up levels 2011-01-15 16:29:17 -05:00
Adam 1b6aab0cd7 Fixed /ns confirm's log message to show the nick of who was confirmed 2011-01-15 16:13:31 -05:00
Adam c669820481 Added an amsg kicker 2011-01-15 16:11:31 -05:00
lethality ecc2fc6029 Fix CODINGs formatting and a missed typo 2011-01-14 04:50:01 +00:00
Adam e490202a1b Bug #1230 - Fixed unknown CTCPs from crashing services 2011-01-11 22:19:46 -05:00
Adam fd2412a5f6 Send new memo replies to the receiver of the memo 2011-01-10 17:41:09 -05:00
Adam 07528ea8f2 Fixed CanAdd() to use safe iteration and make SNLine::Check really work
(cherry picked from commit 1bdadde68a)
2011-01-09 13:38:15 -05:00
Adam ce8a069eb5 Changed db_mysql_live to use a safer mutex system to prevent deadlocks 2011-01-08 18:55:12 -05:00
Adam 2ba97aee6c Ignore EINTR error from poll() 2011-01-08 03:35:04 -05:00
DukePyrolator a674d81caf updated the README file 2011-01-08 08:38:16 +01:00
DukePyrolator efb61ed4a8 enabled modeonid in example.conf 2011-01-08 08:21:18 +01:00
DukePyrolator 2e7d08c10b fixed a small bug in the ratbox protocol module 2011-01-08 08:18:46 +01:00
DukePyrolator 47b87e903b added support for ngIRCd protocol 2011-01-08 08:15:48 +01:00
Adam ddeff72544 Process flag changes from SQL 2011-01-08 00:52:46 -05:00
Adam 43995b4c6d Merge branch '1.9' of anope.git.sf.net:/gitroot/anope/anope into 1.9 2011-01-08 00:25:30 -05:00
Adam 512d23d60f Made the Flag class able to convert flags to strings and back 2011-01-08 00:25:11 -05:00
lethality 0eb9152749 fix some more copyright and typos (not mine) spotted by chaz :P 2011-01-07 23:01:19 +00:00
Adam 4403849126 Added db_mysql_live which allows Anope to pull data
from the four main SQL tables in realtime, which
effectively gives us "live" SQL.
Changed eventfd pipe engine to not use buffered write.
Added TryLock to threading engines.
Made blocking SQL queries in our SQL API thread-safe.
2011-01-07 15:57:13 -05:00
lethality 9efebe5461 update copyrights for 2011 2011-01-05 18:34:38 +00:00
DukePyrolator 7198fa73d1 removed SendSVSPart(), we dont use it 2011-01-04 07:33:34 +01:00
DukePyrolator 03ba592c48 removed SendSVSMode(), we dont use it 2011-01-04 07:14:50 +01:00
lethality 57a06f72e2 fixed a crash bug when a server squits 2010-12-31 21:20:34 +00:00
DukePyrolator 3019ba6f43 restoring topic for permchans on burst 2010-12-30 06:44:18 +01:00
DukePyrolator 2784cd17fc Merge branch '1.9' of ssh://anope.git.sourceforge.net/gitroot/anope/anope into 1.9 2010-12-30 05:50:55 +01:00
Adam 03cc9eb5c5 Assign bots to new empty permanent channels on IRCds without permchannel mode not just join 2010-12-29 23:30:28 -05:00
Adam 72b8f4609b Use empty SJOINs when allowed to create empty permanent channels 2010-12-29 23:12:26 -05:00
Adam d36e53f702 Added a ConvertException to be thrown when convertTo fails 2010-12-29 20:19:37 -05:00
Adam a36f14c1bf Automatically quit bots when they are deleted 2010-12-29 19:59:26 -05:00
DukePyrolator 292e187524 Merge branch '1.9' of ssh://anope.git.sourceforge.net/gitroot/anope/anope into 1.9 2010-12-29 22:39:20 +01:00
Adam 16cab979da Bug #1225 - Made REGISTER show in /cs help 2010-12-28 16:32:18 -05:00
DukePyrolator fd7f542bd9 Merge branch '1.9' of ssh://anope.git.sourceforge.net/gitroot/anope/anope into 1.9 2010-12-28 07:00:47 +01:00
Adam 5ead326454 Fixed build on debian lenny 2010-12-27 15:33:49 -05:00
Adam a1c635b050 Load session exceptions on start when using SQL 2010-12-27 01:35:08 -05:00
Adam d896bf9a1c Bug #1222 - Fixed crash from reading to read a range of memos 2010-12-27 01:00:12 -05:00
Adam 49dd1c3409 Bug #1220 - Fixed an event in /hs activate and /ms del 2010-12-27 00:42:38 -05:00
Adam fce491e18c Made socket engine stop processing once all sockets have been checked 2010-12-27 00:41:04 -05:00
Adam 87d0fc8bb5 Fixed poll engine to not reorder sockets if we remove the last socket because there is no need 2010-12-26 20:15:54 -05:00
DukePyrolator f638d1078a Merge branch '1.9' of ssh://anope.git.sourceforge.net/gitroot/anope/anope into 1.9 2010-12-26 09:36:45 +01:00
Adam 8af2465a61 Bug #1219 - Correctly restrict people from registering potentential guest names 2010-12-26 00:31:11 -05:00
Adam 1b3f2567bc Fixed a potential crash from dropping nicks 2010-12-26 00:14:49 -05:00
lethality 036d4514f0 updated crontab instructions in INSTALL 2010-12-25 15:27:02 +00:00
Adam 80721d1873 Forward port part of 821995bf60 2010-12-25 02:30:39 -05:00
Adam aa9e33cf74 Bug #1216 - Do not apply SQLines on our own clients 2010-12-24 19:55:09 -05:00
Adam 86900175c8 Made clearing SXLines remove the XLine from the IRCd too 2010-12-24 19:07:47 -05:00
Adam d5c1d6ebec Do not allow xop del to delete users on another list 2010-12-24 16:12:08 -05:00
Adam 35e328bcb6 Fixed Windows build 2010-12-24 01:23:22 -05:00
Adam befb4b3644 Made the default socket poller use poll() because it is supported on most platforms 2010-12-24 01:22:07 -05:00
DukePyrolator 4235df2b28 Merge branch '1.9' of ssh://anope.git.sourceforge.net/gitroot/anope/anope into 1.9 2010-12-24 06:42:55 +01:00
Adam a6c8a6a9f2 Prevent version.cpp from prepending version.sh's VERSION_EXTRA on every build 2010-12-23 23:33:02 -05:00
Adam 1a3ba00c24 Fixed noexpire channels expiring 2010-12-23 21:56:06 -05:00
Adam e8a2072792 Added a missing os_ignore.h 2010-12-23 19:18:25 -05:00
Adam 4886b56edb Fixed a crash in m_alias 2010-12-23 19:14:07 -05:00
Adam 15d29edae9 Do not clear want write on a socket if we are unable to completely write its buffer 2010-12-23 18:50:27 -05:00
Adam 3009540a00 Rewrote the ignore code. Adds creator and reason to /os ignore list. 2010-12-23 18:39:54 -05:00
DukePyrolator a0ad3c4fef Merge branch '1.9' of ssh://anope.git.sourceforge.net/gitroot/anope/anope into 1.9 2010-12-23 07:15:32 +01:00
Adam 265006b691 Fixed deleting expired SXLines 2010-12-23 00:03:50 -05:00
Adam 11b3b8a5ff Made SQLine clear work 2010-12-22 19:12:04 -05:00
Adam 2783c82685 Removed match_usermask 2010-12-22 18:28:22 -05:00
DukePyrolator 184e7b3f64 Merge branch '1.9' of ssh://anope.git.sourceforge.net/gitroot/anope/anope into 1.9 2010-12-22 07:05:40 +01:00
Adam 18377ac9fd Allow hostmasks to be in uplink:host 2010-12-21 15:57:57 -05:00
DukePyrolator 184e14ea83 Merge branch '1.9' of ssh://anope.git.sourceforge.net/gitroot/anope/anope into 1.9 2010-12-19 08:56:31 +01:00
Adam 21125cf2cb Made the version generator code work right when we are on a tag because git describe just gives the tag name and nothing else. 2010-12-18 19:53:32 -05:00
Adam 0d20c47703 Don't send SXLines until after we start bursting with our uplink 2010-12-18 19:41:13 -05:00
Adam 7f9a5e01c6 NULL the core *serv pointers when core clients are deleted 2010-12-17 03:09:51 -05:00
Adam eb9b12ed11 Bug #1211 - Fixed loading and saving anope_os_sxlines 2010-12-15 12:47:35 -05:00
Adam 4a4c0886cc Bug #1212 - Fixed some bad logic in /os exception preventing valid exceptions from being added 2010-12-15 12:18:20 -05:00
DukePyrolator 02476332ea Merge branch '1.9' of ssh://anope.git.sourceforge.net/gitroot/anope/anope into 1.9 2010-12-14 08:13:09 +01:00
Adam 49d3c97b67 Bug #1079 - Don't use users real host and IPs when matching against
bans and excepts, except when a user is unbanning themselves, in an
attempt to prevent people from gaining other users IPs.
This removes support for Unreal and Bahamuts SVSMode -b because
it will unban users by real host and IP.
2010-12-13 16:36:36 -05:00
Adam 97467cb2c8 Bug #1113 - Document the fantasy character in /bs help 2010-12-13 13:26:01 -05:00
DukePyrolator 6a43886807 removed an unused variable 2010-12-13 07:34:06 +01:00
DukePyrolator 5d56a2486e changed a few 'if' to 'else if' 2010-12-13 07:26:05 +01:00
Adam eb138a02d6 Do not validate users during netburst until after the server is done syncing 2010-12-12 19:37:04 -05:00
Adam 2a4d0e3e89 Allow getting users opertype from XMLRPC requests 2010-12-12 19:37:04 -05:00
Adam 9f7a2e4da2 Bug #1177 - Readded in support for cs_mode to act on every channel 2010-12-12 19:37:04 -05:00
Adam 25e995b0f5 Fixed a few places in the plexus protocol module where we were sending nick not UID 2010-12-12 19:37:04 -05:00
Adam ad5da2a988 Handle not being able to completely flush our write buffer correctly 2010-12-12 19:37:03 -05:00
DukePyrolator 6ab7cf9689 fixed a compile error in plexus protocol module 2010-12-12 19:37:03 -05:00
DukePyrolator 099ead02a5 store the ssl fingerprint in the userstruct 2010-12-12 19:37:03 -05:00
Adam f1d04a2f8e Allow command aliases to be redirected to different pseudo clients 2010-12-12 19:37:03 -05:00
Adam aed53dbb47 Cleaned up some things, made the protocol modules use some basic inheritance to cut back on their code duplication. More work can be done in the future to remove even more of it. 2010-12-12 19:37:03 -05:00
Adam a507816701 Fixed looking up users to use case insensitivity 2010-12-12 19:37:03 -05:00
Adam c41c828574 Do not use wildcard matching when looking up hosts on access add/del 2010-12-12 19:37:03 -05:00
Adam 5fe41fb8a0 Document that /cs owner and deowner allow nick args 2010-12-12 19:37:02 -05:00
Adam 0ba566491e Allowing adding hostmasks to channel access lists 2010-12-12 19:37:02 -05:00
Adam 2a4d57a1ca Fixed subcommands 2010-12-12 19:37:02 -05:00
Adam 71c433cc50 The rest of the earlier command changes 2010-12-12 19:37:00 -05:00
Adam 2b10cc84ea Added /bs set msg 2010-12-12 19:36:19 -05:00
Adam cb6ef574e3 Send replies from fantasy commands back to the channel, this will be expanded on later 2010-12-12 19:36:19 -05:00
Adam 37e02a3594 Added cs_entrymsg 2010-12-12 19:36:19 -05:00
Adam 7d1cfe9514 Fixed some sed failure 2010-12-12 19:36:18 -05:00
Adam 9870ee04dd Removed some unused code paths in some of the modules 2010-12-12 19:36:18 -05:00
Adam 1a286397e3 Added a plexus3 protocol module 2010-12-12 19:36:16 -05:00
Adam 697dc89382 Added a default expiry time for suspended and forbidden nicks and channels 2010-12-12 19:36:01 -05:00
Adam 4d342d955d Fixed some of the language strings 2010-12-12 19:35:58 -05:00
Adam c5eb349d41 Removed the AUTODEOP level, it is unnecessary now because of cs_mode 2010-12-12 19:35:30 -05:00
Adam 7790a7f98c Allow the patricia tree to store non-pointers 2010-12-12 19:35:30 -05:00
Adam 246f44b988 Added cs_mode, rewrote the old list mode code, and added CIDR support 2010-12-12 19:35:27 -05:00
Adam a85112172d Removed and deprecated /cs set mlock, removed /cs clear, removed /os clearmodes, removed /cs akick (un)stick, added /cs clearusers 2010-12-12 19:33:59 -05:00
Adam 5f18cb018d Allow users to drop their own nickrequests 2010-12-12 19:33:58 -05:00
Adam 872bc3fa5e Allow users to remove their own access in channels 2010-12-12 19:33:58 -05:00
Adam 1625a5af0c Added /chanserv clone command 2010-12-12 19:33:58 -05:00
Adam 2e9a632e14 Allow akill/szline/sqline to accept user names as a mask argument 2010-12-12 19:33:58 -05:00
Adam 3c9d4e9daf Added command aliases 2010-12-12 19:33:58 -05:00
Adam c792c7f62d Switched the system for storing users, channels, and sesions to a patricia
tree from STL's unordered_map, which was giving horrible performance.
2010-12-12 19:33:58 -05:00
Adam e512760364 Fixed DNS caching and made DNS cache empty results 2010-12-12 19:33:50 -05:00
Adam ac41137ce2 Added /ms ignore 2010-12-12 19:31:00 -05:00
Adam 28aba58e25 Just store lang strings in a char array, no need for the extra overhead of STL strings 2010-12-12 19:30:28 -05:00
Adam 4ec661c0bb If a channel drops because a nick drops, set the channel founder to the user with the highest access if there is no successor 2010-12-12 19:30:14 -05:00
Adam 87bdf73cb7 Document XMLRPC calls and added a .php class wrapper for them 2010-12-12 19:30:14 -05:00
Adam 21c8e89671 Do not allow ghosting unidentified users if the recover command exists 2010-12-12 19:30:14 -05:00
Adam 8fbe36635c Added m_xmlrpc and m_xmlrpc main, which allows remote programs to execute
remote RPC calls to Anope in realtime and receive responses
2010-12-12 19:30:14 -05:00
Adam 5cd4fefb4c Bump for 1.9.4-git 2010-12-12 19:30:11 -05:00
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 475f5afafc Replaced some spaces with tabs in unreal32.c, os_defcon.c, and modes.cpp 2010-06-16 17:14:35 -04:00
670 changed files with 213028 additions and 170947 deletions
+5 -4
View File
@@ -1,5 +1,5 @@
___
/ _ \ http://www.anope.org
/ _ \ https://www.anope.org/
| /_\ | _ __ _ _ _ _ ___
| _ || '_ \/ _ \/ _ \ / _ \
| | | || | | |_| |_| | __/
@@ -7,12 +7,13 @@
| |
|_| IRC Services
CURVER
This program will help you to compile your Services, and ask you
This program will help you to compile your services, and ask you
questions regarding the compile-time settings of it during the
process. For more options type SOURCE_DIR/Config --help
Anope is a set of Services for IRC networks that allows users to
Anope is a set of services for IRC networks that allows users to
manage their nicks and channels in a secure and efficient way,
and administrators to manage their network with powerful tools.
For all your Anope needs please visit our portal at www.anope.org
For all your Anope needs please visit our portal at
https://www.anope.org/
+33
View File
@@ -0,0 +1,33 @@
---
name: Bug report
about: Report a non-security issue with Anope.
---
<!--
Please fill in the template below. It will help us process your bug report a lot faster. If you have multiple bugs to report then please open one issue for each bug.
-->
**Description**
**Steps to reproduce the issue:**
1.
2.
3.
**Describe the results you received:**
**Describe the results you expected:**
**Additional information you deem important (e.g. issue happens only occasionally):**
**Output of `services --version`:**
+15
View File
@@ -0,0 +1,15 @@
---
name: Feature request
about: Request that a new feature is added to Anope.
---
<!--
Please fill in the template below. It will help us process your feature request a lot faster. If you have multiple features to request then please open one issue for each feature.
-->
**Description**
**Why this would be useful**
+1
View File
@@ -0,0 +1 @@
blank_issues_enabled: false
+26
View File
@@ -0,0 +1,26 @@
<!--
Please fill in the template below. It will help us process your pull request a lot faster.
-->
## Summary
<!--
Briefly describe what this pull request changes.
-->
## Rationale
<!--
Describe why you have made this change.
-->
## Testing Environment
<!--
Describe the environment in which you have tested this change:
-->
I have tested this pull request on:
**Operating system name and version:** <!-- e.g. Linux 3.11 -->
**Compiler name and version:** <!-- e.g. GCC 4.2.0 -->
+19
View File
@@ -0,0 +1,19 @@
# Security Policy
## Supported Versions
Currently the 2.0 (stable) branch is actively receiving security fixes.
The 2.1 (development) branch is still early in development and currently only receives security fixes when they are synced from the 2.0 branch.
Version | Supported
------- | ---------
2.1.x | :warning:
2.0.x | :white_check_mark:
1.8.x | :x:
## Reporting a Vulnerability
Please do not report security vulnerabilities on GitHub. Instead, email the details to team@anope.org or get the attention of a developer in our development IRC channel at irc.anope.org #anope-devel and PM them the details.
We will triage your issue as soon as possible and try to release a fixed version within a week of receiving your report.
+6
View File
@@ -0,0 +1,6 @@
version: 2
updates:
- package-ecosystem: github-actions
directory: /
schedule:
interval: monthly
+58
View File
@@ -0,0 +1,58 @@
name: Alpine CI
on:
pull_request:
push:
schedule:
- cron: '0 0 * * 0'
jobs:
build:
if: "!contains(github.event.head_commit.message, '[skip alpine ci]')"
container: alpine:edge
runs-on: ubuntu-latest
env:
CXX: ${{ matrix.compiler }}
CXXFLAGS: -Werror
steps:
- uses: actions/checkout@v4
- name: Install dependencies
run: |
echo "http://dl-cdn.alpinelinux.org/alpine/edge/testing" >> /etc/apk/repositories
apk update
apk add \
clang \
cmake \
g++ \
gettext \
git \
gnutls-dev \
mariadb-dev \
openldap-dev \
openssl-dev \
pcre2-dev \
samurai \
sqlite-dev \
tre-dev
- name: Enable extras
run: |
for MODULE in ldap ldap_authentication ldap_oper mysql regex_pcre2 regex_posix regex_tre sql_authentication sql_log sql_oper sqlite ssl_gnutls ssl_openssl
do
ln -s $PWD/modules/extra/$MODULE.cpp $PWD/modules
done
- name: Run CMake
run: |
mkdir build && cd build
cmake -GNinja -DCMAKE_BUILD_TYPE:STRING=DEBUG -DINSTDIR:STRING=$(readlink -f ../run) ..
- name: Build Anope
run: |
ninja -C build install
strategy:
fail-fast: false
matrix:
compiler:
- clang++
- g++
+53
View File
@@ -0,0 +1,53 @@
name: Ubuntu CI
on:
- pull_request
- push
jobs:
build:
if: "!contains(github.event.head_commit.message, '[skip ubuntu ci]')"
runs-on: ubuntu-20.04
env:
CXX: ${{ matrix.compiler }}
CXXFLAGS: -Werror
steps:
- uses: actions/checkout@v4
- name: Install dependencies
run: |
sudo apt-get update --assume-yes
sudo apt-get install --assume-yes --no-install-recommends \
clang \
g++ \
gettext \
git \
libgnutls28-dev \
libldap2-dev \
libmysqlclient-dev \
libpcre2-dev \
libsqlite3-dev \
libssl-dev \
libtre-dev \
ninja-build
- name: Enable extras
run: |
for MODULE in ldap ldap_authentication ldap_oper mysql regex_pcre2 regex_posix regex_tre sql_authentication sql_log sql_oper sqlite ssl_gnutls ssl_openssl
do
ln -s ${{ github.workspace }}/modules/extra/$MODULE.cpp ${{ github.workspace }}/modules
done
- name: Run CMake
run: |
mkdir build && cd build
cmake -GNinja -DCMAKE_BUILD_TYPE:STRING=DEBUG -DINSTDIR:STRING=${{ github.workspace }}/run ..
- name: Build Anope
run: |
ninja -C ${{ github.workspace }}/build install
strategy:
fail-fast: false
matrix:
compiler:
- clang++
- g++
+35
View File
@@ -0,0 +1,35 @@
name: Windows CI
on:
pull_request:
push:
schedule:
- cron: '0 0 * * 0'
jobs:
build:
if: "!contains(github.event.head_commit.message, '[skip windows ci]')"
runs-on: windows-2019
steps:
- uses: actions/checkout@v3
- name: Setup MSBuild
uses: microsoft/setup-msbuild@v1.3
- name: Setup Conan
uses: turtlebrowser/get-conan@v1.2
with:
version: 1.59.0
- name: Install libraries
run: |
conan install ${{ github.workspace }}\src\win32 --build=missing
- name: Run CMake
run: |
mkdir ${{ github.workspace }}\build
cd ${{ github.workspace }}\build
cmake -A "x64" -G "Visual Studio 16 2019" ..
- name: Build Anope
working-directory: ${{ github.workspace }}\build
run: |
msbuild PACKAGE.vcxproj /M:3 /P:Configuration=Release /P:Platform=x64 /VERBOSITY:MINIMAL
+18 -4
View File
@@ -1,5 +1,19 @@
/autom4te.cache
Makefile
build/
config.cache
config.log
config.status
include/sysconf.h
modules/ldap.cpp
modules/ldap_authentication.cpp
modules/ldap_oper.cpp
modules/mysql.cpp
modules/regex_pcre2.cpp
modules/regex_posix.cpp
modules/regex_tre.cpp
modules/sql_authentication.cpp
modules/sql_log.cpp
modules/sql_oper.cpp
modules/sqlite.cpp
modules/ssl_gnutls.cpp
modules/ssl_openssl.cpp
modules/stats
run/
*.mo
+50
View File
@@ -0,0 +1,50 @@
(svnadmin) <svn@localhost> <svn svn@31f1291d-b8d6-0310-a050-a5561fc1590b@5417fbe8-f217-4b02-8779-1006273d7864>
Adam <adam@anope.org> <adam-@5417fbe8-f217-4b02-8779-1006273d7864>
Adam <adam@anope.org> <adam@adam-laptop.(none)>
Adam <adam@anope.org> <Adam@anope.org>
Adam <adam@anope.org> <Adam@drink-coca-cola.info>
Adam <adam@anope.org> <Adam@sigterm.info>
Adam Kramer <ribosome@anope.org> <ribosome ribosome@31f1291d-b8d6-0310-a050-a5561fc1590b@5417fbe8-f217-4b02-8779-1006273d7864>
Alvaro Toledo <atoledo@keldon.org> <atoledo atoledo@31f1291d-b8d6-0310-a050-a5561fc1590b@5417fbe8-f217-4b02-8779-1006273d7864>
Attila Molnar <attilamolnar@hush.com>
Björn Stiddien <keeper@anope.org> <keeper keeper@31f1291d-b8d6-0310-a050-a5561fc1590b@5417fbe8-f217-4b02-8779-1006273d7864>
Charles Kingsley <chaz@anope.org>
Charles Kingsley <chaz@anope.org> <sjaz@5417fbe8-f217-4b02-8779-1006273d7864>
Cronus <cronus@nite-serv.com>
Daniel Engel <dane@zero.org> <dane dane@31f1291d-b8d6-0310-a050-a5561fc1590b@5417fbe8-f217-4b02-8779-1006273d7864>
David Robson <rob@anope.org> <robbeh@5417fbe8-f217-4b02-8779-1006273d7864>
David Robson <rob@anope.org> <rob rob@31f1291d-b8d6-0310-a050-a5561fc1590b@5417fbe8-f217-4b02-8779-1006273d7864>
Dennis Friis <peavey@inspircd.org> <peavey peavey@inspircd.org@5417fbe8-f217-4b02-8779-1006273d7864>
Fabio Scotoni <cculex@gmail.com>
Florian Schulze <certus@anope.org> <certus certus@31f1291d-b8d6-0310-a050-a5561fc1590b@5417fbe8-f217-4b02-8779-1006273d7864>
Gabriel Acevedo H. <drstein@anope.org> <drstein drstein@31f1291d-b8d6-0310-a050-a5561fc1590b@5417fbe8-f217-4b02-8779-1006273d7864>
Harakiri <harakiri@overstack.fr>
Jan Milants <viper@anope.org>
Jan Milants <viper@anope.org> <jantje_85@5417fbe8-f217-4b02-8779-1006273d7864>
Jan Milants <viper@anope.org> <viper viper@31f1291d-b8d6-0310-a050-a5561fc1590b@5417fbe8-f217-4b02-8779-1006273d7864>
Jens Voss <dukepyrolator@anope.org> <anope@s15355730.onlinehome-server.info>
Jens Voss <dukepyrolator@anope.org> <DukePyrolator@5417fbe8-f217-4b02-8779-1006273d7864>
Jens Voss <dukepyrolator@anope.org> <DukePyrolator@anope.org>
Jens Voss <dukepyrolator@anope.org> Jens Voß <jens@pyrobook.(none)>
Lee Holmes <lethality@anope.org>
Lee Holmes <lethality@anope.org> <lee@lethality.me.uk>
Mark Summers <mark@goopler.net> <mark mark@31f1291d-b8d6-0310-a050-a5561fc1590b@5417fbe8-f217-4b02-8779-1006273d7864>
Matt Schatz <genius3000@g3k.solutions>
Matt Ullman <matt@airraidsirens.com> <blindsight@gamesurge.net>
Michael Hazell <michaelhazell@hotmail.com> <Techman-@users.noreply.github.com>
Michael Wobst <wobst.michael@web.de>
Michael Wobst <wobst.michael@web.de> <michael@static.163.129.251.148.clients.your-server.de>
Michael Wobst <wobst.michael@web.de> <michael@wobst.at>
Naram Qashat <cyberbotx@anope.org> <cyberbotx@5417fbe8-f217-4b02-8779-1006273d7864>
Naram Qashat <cyberbotx@anope.org> <cyberbotx@cyberbotx.com>
Naram Qashat <cyberbotx@anope.org> <Naram Qashat cyberbotx@cyberbotx.com@5417fbe8-f217-4b02-8779-1006273d7864>
Pieter Bootsma <geniusdex@anope.org> <geniusdex geniusdex@31f1291d-b8d6-0310-a050-a5561fc1590b@5417fbe8-f217-4b02-8779-1006273d7864>
Robby <robby@chatbelgie.be> <robby@anope.org>
Robby <robby@chatbelgie.be> <robby@chat.be>
Robin Burchell <w00t@inspircd.org> <rburchell@5417fbe8-f217-4b02-8779-1006273d7864>
Robin Burchell <w00t@inspircd.org> <Robin Burchell w00t@inspircd.org@5417fbe8-f217-4b02-8779-1006273d7864>
Sadie Powell <sadie@witchery.services> Peter Powell <petpow@saberuk.com>
Sebastian Barfurth <github@afreshmelon.com>
Sebastian V. <hal9000@denorastats.org>
Sebastian V. <hal9000@denorastats.org> <pimpmylinux@5417fbe8-f217-4b02-8779-1006273d7864>
Trystan S. Lee <trystan@nomadirc.net> <trystan trystan@31f1291d-b8d6-0310-a050-a5561fc1590b@5417fbe8-f217-4b02-8779-1006273d7864>
-501
View File
@@ -1,501 +0,0 @@
###############################################################################
# strip_string(<input string> <output string>)
#
# A macro to handle stripping the leading and trailing spaces from a string,
# uses string(STRIP) if using CMake 2.6.x or better, otherwise uses
# string(REGEX REPLACE).
###############################################################################
macro(strip_string INPUT_STRING OUTPUT_STRING)
if(CMAKE26_OR_BETTER)
# For CMake 2.6.x or better, we can just use the STRIP sub-command of string()
string(STRIP ${INPUT_STRING} ${OUTPUT_STRING})
else(CMAKE26_OR_BETTER)
# For CMake 2.4.x, we will have to use the REGEX REPLACE sub-command of string() instead
# First check if the input string is empty or not
if (${INPUT_STRING} STREQUAL "")
set(${OUTPUT_STRING} "")
else(${INPUT_STRING} STREQUAL "")
# Determine if the string is entirely empty or not
string(REGEX MATCH "^[ \t]*$" EMPTY_STRING "${INPUT_STRING}")
if(EMPTY_STRING)
set(${OUTPUT_STRING} "")
else(EMPTY_STRING)
# We detect if there is any leading whitespace and remove any if there is
string(SUBSTRING "${INPUT_STRING}" 0 1 FIRST_CHAR)
if(FIRST_CHAR STREQUAL " " OR FIRST_CHAR STREQUAL "\t")
string(REGEX REPLACE "^[ \t]+" "" TEMP_STRING "${INPUT_STRING}")
else(FIRST_CHAR STREQUAL " " OR FIRST_CHAR STREQUAL "\t")
set(TEMP_STRING "${INPUT_STRING}")
endif(FIRST_CHAR STREQUAL " " OR FIRST_CHAR STREQUAL "\t")
# Next we detect if there is any trailing whitespace and remove any if there is
string(LENGTH "${TEMP_STRING}" STRING_LEN)
math(EXPR STRING_LEN "${STRING_LEN} - 1")
string(SUBSTRING "${TEMP_STRING}" ${STRING_LEN} 1 LAST_CHAR)
if(LAST_CHAR STREQUAL " " OR LAST_CHAR STREQUAL "\t")
string(REGEX REPLACE "[ \t]+$" "" ${OUTPUT_STRING} "${TEMP_STRING}")
else(LAST_CHAR STREQUAL " " OR LAST_CHAR STREQUAL "\t")
set(${OUTPUT_STRING} "${TEMP_STRING}")
endif(LAST_CHAR STREQUAL " " OR LAST_CHAR STREQUAL "\t")
endif(EMPTY_STRING)
endif(${INPUT_STRING} STREQUAL "")
endif(CMAKE26_OR_BETTER)
endmacro(strip_string)
###############################################################################
# append_to_list(<list> <args>...)
#
# A macro to handle appending to lists, uses list(APPEND) if using CMake 2.4.2
# or better, otherwise uses set() instead.
###############################################################################
macro(append_to_list LIST)
if(CMAKE242_OR_BETTER)
# For CMake 2.4.2 or better, we can just use the APPEND sub-command of list()
list(APPEND ${LIST} ${ARGN})
else(CMAKE242_OR_BETTER)
# For CMake 2.4.x before 2.4.2, we have to do this manually use set() instead
set(${LIST} ${${LIST}} ${ARGN})
endif(CMAKE242_OR_BETTER)
endmacro(append_to_list)
###############################################################################
# find_in_list(<list> <value> <output variable>)
#
# A macro to handle searching within a list, will store the result in the
# given <output variable>, uses list(FIND) if using CMake 2.6.x or better
# (or CMake 2.4.8 or better), otherwise it iterates through the list to find
# the item.
###############################################################################
macro(find_in_list LIST ITEM_TO_FIND FOUND)
if(CMAKE248_OR_BETTER)
# For CMake 2.4.8 or better, we can use the FIND sub-command of list()
list(FIND ${LIST} ${ITEM_TO_FIND} ITEM_FOUND)
else(CMAKE248_OR_BETTER)
# For CMake 2.4.x before 2.4.8, we have to do this ourselves (NOTE: This is very slow due to a lack of break() as well)
# Firstly we set the position to -1 indicating nothing found, we also use a temporary position
set(ITEM_FOUND -1)
set(POS 0)
# Iterate through the list
foreach(ITEM ${${LIST}})
# If the item we are looking at is the item we are trying to find, set that we've found the item
if(${ITEM} STREQUAL ${ITEM_TO_FIND})
set(ITEM_FOUND ${POS})
endif(${ITEM} STREQUAL ${ITEM_TO_FIND})
# Increase the position value by 1
math(EXPR POS "${POS} + 1")
endforeach(ITEM)
endif(CMAKE248_OR_BETTER)
# Set the given FOUND variable to the result
set(${FOUND} ${ITEM_FOUND})
endmacro(find_in_list)
###############################################################################
# remove_list_duplicates(<list>)
#
# A macro to handle removing duplicates from a list, uses
# list(REMOVE_DUPLICATES) if using CMake 2.6.x or better, otherwise it uses
# a slower method of creating a temporary list and only adding to it when
# a duplicate item hasn't been found.
###############################################################################
macro(remove_list_duplicates LIST)
if(CMAKE26_OR_BETTER)
# For CMake 2.6.x or better, this can be done automatically
list(REMOVE_DUPLICATES ${LIST})
else(CMAKE26_OR_BETTER)
# For CMake 2.4.x, we have to do this ourselves, firstly we'll clear a temporary list
set(NEW_LIST)
# Iterate through the old list
foreach(ITEM ${${LIST}})
# Check if the item is in the new list
find_in_list(NEW_LIST ${ITEM} FOUND_ITEM)
if(FOUND_ITEM EQUAL -1)
# If the item was not found, append it to the list
append_to_list(NEW_LIST ${ITEM})
endif(FOUND_ITEM EQUAL -1)
endforeach(ITEM)
# Replace the old list with the new list
set(${LIST} ${NEW_LIST})
endif(CMAKE26_OR_BETTER)
endmacro(remove_list_duplicates)
###############################################################################
# remove_item_from_list(<list> <value>)
#
# A macro to handle removing a value from a list, uses list(REMOVE_ITEM) in
# both cases, but can remove the value itself using CMake 2.4.2 or better,
# while older versions use a slower method of iterating the list to find the
# index of the value to remove.
###############################################################################
macro(remove_item_from_list LIST VALUE)
if(CMAKE242_OR_BETTER)
# For CMake 2.4.2 or better, this can be done automatically
list(REMOVE_ITEM ${LIST} ${VALUE})
else(CMAKE242_OR_BETTER)
# For CMake 2.4.x before 2.4.2, we have to do this ourselves, firstly we set the index and a variable to indicate if the item was found
set(INDEX 0)
set(FOUND FALSE)
# Iterate through the old list
foreach(ITEM ${${LIST}})
# If the item hasn't been found yet, but the current item is the same, remove it
if(NOT FOUND)
if(ITEM STREQUAL ${VALUE})
set(FOUND TRUE)
list(REMOVE_ITEM ${LIST} ${INDEX})
endif(ITEM STREQUAL ${VALUE})
endif(NOT FOUND)
# Increase the index value by 1
math(EXPR INDEX "${INDEX} + 1")
endforeach(ITEM)
endif(CMAKE242_OR_BETTER)
endmacro(remove_item_from_list)
###############################################################################
# sort_list(<list>)
#
# A macro to handle sorting a list, uses list(SORT) if using CMake 2.4.4 or
# better, otherwise it uses a slower method of creating a temporary list and
# adding elements in alphabetical order.
###############################################################################
macro(sort_list LIST)
if(CMAKE244_OR_BETTER)
# For CMake 2.4.4 or better, this can be done automatically
list(SORT ${LIST})
else(CMAKE244_OR_BETTER)
# For CMake 2.4.x before 2.4.4, we have to do this ourselves, firstly we'll create a teporary list
set(NEW_LIST)
# Iterate through the old list
foreach(ITEM ${${LIST}})
# Temporary index position for the new list, as well as temporary value to store if the item was ever found
set(INDEX 0)
set(FOUND FALSE)
# Iterate through the new list
foreach(NEW_ITEM ${NEW_LIST})
# Compare the items, only if nothing was found before
if(NOT FOUND)
if(NEW_ITEM STRGREATER "${ITEM}")
set(FOUND TRUE)
list(INSERT NEW_LIST ${INDEX} ${ITEM})
endif(NEW_ITEM STRGREATER "${ITEM}")
endif(NOT FOUND)
# Increase the index value by 1
math(EXPR INDEX "${INDEX} + 1")
endforeach(NEW_ITEM)
# If the item was never found, just append it to the end
if(NOT FOUND)
append_to_list(NEW_LIST ${ITEM})
endif(NOT FOUND)
endforeach(ITEM)
# Replace the old list with the new list
set(${LIST} ${NEW_LIST})
endif(CMAKE244_OR_BETTER)
endmacro(sort_list)
###############################################################################
# read_from_file(<filename> <regex> <output variable>)
#
# A macro to handle reading specific lines from a file, uses file(STRINGS) if
# using CMake 2.6.x or better, otherwise we read in the entire file and
# perform a string(REGEX MATCH) on each line of the file instead. This
# macro can also be used to read in all the lines of a file if REGEX is set
# to "".
###############################################################################
macro(read_from_file FILE REGEX STRINGS)
if(CMAKE26_OR_BETTER)
# For CMake 2.6.x or better, we can just use the STRINGS sub-command to get the lines that match the given regular expression (if one is given, otherwise get all lines)
if(REGEX STREQUAL "")
file(STRINGS ${FILE} RESULT)
else(REGEX STREQUAL "")
file(STRINGS ${FILE} RESULT REGEX ${REGEX})
endif(REGEX STREQUAL "")
else(CMAKE26_OR_BETTER)
# For CMake 2.4.x, we need to do this manually, firstly we read the file in
execute_process(COMMAND ${CMAKE_COMMAND} -DFILE:STRING=${FILE} -P ${Anope_SOURCE_DIR}/ReadFile.cmake ERROR_VARIABLE ALL_STRINGS)
# Next we replace all newlines with semicolons
string(REGEX REPLACE "\n" ";" ALL_STRINGS ${ALL_STRINGS})
if(REGEX STREQUAL "")
# For no regular expression, just set the result to all the lines
set(RESULT ${ALL_STRINGS})
else(REGEX STREQUAL "")
# Clear the result list
set(RESULT)
# Iterate through all the lines of the file
foreach(STRING ${ALL_STRINGS})
# Check for a match against the given regular expression
string(REGEX MATCH ${REGEX} STRING_MATCH ${STRING})
# If we had a match, append the match to the list
if(STRING_MATCH)
append_to_list(RESULT ${STRING})
endif(STRING_MATCH)
endforeach(STRING)
endif(REGEX STREQUAL "")
endif(CMAKE26_OR_BETTER)
# Set the given STRINGS variable to the result
set(${STRINGS} ${RESULT})
endmacro(read_from_file)
###############################################################################
# extract_include_filename(<line> <output variable> [<optional output variable of quote type>])
#
# This macro will take a #include line and extract the filename.
###############################################################################
macro(extract_include_filename INCLUDE FILENAME)
# Strip the leading and trailing spaces from the include line
strip_string(${INCLUDE} INCLUDE_STRIPPED)
# Make sure to only do the following if there is a string
if(INCLUDE_STRIPPED STREQUAL "")
set(FILE "")
else(INCLUDE_STRIPPED STREQUAL "")
# Extract the filename including the quotes or angle brackets
string(REGEX REPLACE "^.*([\"<].*[\">]).*$" "\\1" FILE "${INCLUDE_STRIPPED}")
# If an optional 3rd argument is given, we'll store if the quote style was quoted or angle bracketed
if(${ARGC} GREATER 2)
string(SUBSTRING ${FILE} 0 1 QUOTE)
if(QUOTE STREQUAL "<")
set(${ARGV2} "angle brackets")
else(QUOTE STREQUAL "<")
set(${ARGV2} "quotes")
endif(QUOTE STREQUAL "<")
endif(${ARGC} GREATER 2)
# Now remove the quotes or angle brackets
string(REGEX REPLACE "^[\"<](.*)[\">]$" "\\1" FILE "${FILE}")
endif(INCLUDE_STRIPPED STREQUAL "")
# Set the filename to the the given variable
set(${FILENAME} "${FILE}")
endmacro(extract_include_filename)
###############################################################################
# find_includes(<source filename> <output variable>)
#
# This macro will search through a file for #include lines, regardless of
# whitespace, but only returns the lines that are valid for the current
# platform CMake is running on.
###############################################################################
macro(find_includes SRC INCLUDES)
# Read all lines from the file that start with #, regardless of whitespace before the #
read_from_file(${SRC} "^[ \t]*#.*$" LINES)
# Set that any #include lines found are valid, and create temporary variables for the last found #ifdef/#ifndef
set(VALID_LINE TRUE)
set(LAST_DEF)
set(LAST_CHECK)
# Create an empty include list
set(INCLUDES_LIST)
# Iterate through all the # lines
foreach(LINE ${LINES})
# Search for #ifdef, #ifndef, #else, #endif, and #include
string(REGEX MATCH "^[ \t]*#[ \t]*ifdef[ \t]*.*$" FOUND_IFDEF ${LINE})
string(REGEX MATCH "^[ \t]*#[ \t]*ifndef[ \t]*.*$" FOUND_IFNDEF ${LINE})
string(REGEX MATCH "^[ \t]*#[ \t]*else.*$" FOUND_ELSE ${LINE})
string(REGEX MATCH "^[ \t]*#[ \t]*endif.*$" FOUND_ENDIF ${LINE})
string(REGEX MATCH "^[ \t]*#[ \t]*include[ \t]*[\"<].*[\">][\ t]*.*$" FOUND_INCLUDE ${LINE})
# If we found a #ifdef on the line, extract the data after the #ifdef and set if the lines after it are valid based on the variables in CMake
if(FOUND_IFDEF)
# Extract the define
string(REGEX REPLACE "^[ \t]*#[ \t]*ifdef[ \t]*(.*)$" "\\1" DEFINE ${LINE})
# Replace _WIN32 with WIN32, so we can check if the WIN32 variable of CMake is set instead of _WIN32
if(DEFINE STREQUAL "_WIN32")
set(DEFINE WIN32)
endif(DEFINE STREQUAL "_WIN32")
# Set the last define to this one, and set the last check to true, so when #else is encountered, we can do an opposing check
set(LAST_DEF ${DEFINE})
set(LAST_CHECK TRUE)
# If the define is true (it either exists or is a non-false result), the lines following will be checked, otherwise they will be skipped
if(${DEFINE})
set(VALID_LINE TRUE)
else(${DEFINE})
set(VALID_LINE FALSE)
endif(${DEFINE})
else(FOUND_IFDEF)
# If we found a #ifndef on the line, the same thing as #ifdef is done, except with the checks in the opposite direction
if(FOUND_IFNDEF)
# Extract the define
string(REGEX REPLACE "^[ \t]*#[ \t]*ifndef[ \t]*(.*)$" "\\1" DEFINE ${LINE})
# Replace _WIN32 with WIN32, so we can check if the WIN32 variable of CMake is set instead of _WIN32
if(DEFINE STREQUAL "_WIN32")
set(DEFINE WIN32)
endif(DEFINE STREQUAL "_WIN32")
# Set the last define to this one, and set the last check to false, so when #else is encountered, we can do an opposing check
set(LAST_DEF ${DEFINE})
set(LAST_CHECK FALSE)
# If the define is not true (it either doesn't exists or is a false result), the lines following will be checked, otherwise they will be skipped
if(${DEFINE})
set(VALID_LINE FALSE)
else(${DEFINE})
set(VALUE_LINE TRUE)
endif(${DEFINE})
else(FOUND_IFNDEF)
# If we found a #else on the line, we check the last define in the opposite direction
if(FOUND_ELSE)
# When LAST_CHECK is true, we were inside a #ifdef, now act as if we are entering a #ifndef section by doing an opposing check
if(LAST_CHECK)
if(${LAST_DEF})
set(VALID_LINE FALSE)
else(${LAST_DEF})
set(VALID_LINE TRUE)
endif(${LAST_DEF})
# When LAST_CHECK is false, we were inside a #ifndef, now act as if we are entering a #ifdef section by doing an opposing check
else(LAST_CHECK)
if(${LAST_DEF})
set(VALID_LINE TRUE)
else(${LAST_DEF})
set(VALID_LINE FALSE)
endif(${LAST_DEF})
endif(LAST_CHECK)
else(FOUND_ELSE)
# If we found a #endif on the line, we'll assume everything following the line is valid until we meet another one of the above lines
if(FOUND_ENDIF)
set(VALID_LINE TRUE)
else(FOUND_ENDIF)
# If we found a #include on the line, add the entire line to the list of includes unless the line isn't valid
if(FOUND_INCLUDE)
if(VALID_LINE)
append_to_list(INCLUDES_LIST "${LINE}")
endif(VALID_LINE)
endif(FOUND_INCLUDE)
endif(FOUND_ENDIF)
endif(FOUND_ELSE)
endif(FOUND_IFNDEF)
endif(FOUND_IFDEF)
endforeach(LINE)
set(${INCLUDES} ${INCLUDES_LIST})
endmacro(find_includes)
###############################################################################
# calculate_depends(<source filename> [<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
set(CHECK_ANGLE_INCLUDES FALSE)
# Check for a second argument
if(${ARGC} GREATER 1)
set(CHECK_ANGLE_INCLUDES TRUE)
endif(${ARGC} GREATER 1)
# 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)
# Iterate through the strings containing #include (if any)
foreach(INCLUDE ${INCLUDES})
# Extract the filename from the #include line
extract_include_filename(${INCLUDE} FILENAME QUOTE_TYPE)
if(QUOTE_TYPE STREQUAL "angle brackets")
# The following checks will only be done if there was a request for angle includes to be checked
if(CHECK_ANGLE_INCLUDES)
# Find the path of the include file
if(DEFAULT_INCLUDE_DIRS OR WSDK_PATH OR DEFINED $ENV{VCINSTALLDIR})
find_path(FOUND_${FILENAME}_INCLUDE NAMES ${FILENAME} PATHS ${DEFAULT_INCLUDE_DIRS} ${WSDK_PATH}/include $ENV{VCINSTALLDIR}/include)
else(DEFAULT_INCLUDE_DIRS OR WSDK_PATH OR DEFINED $ENV{VCINSTALLDIR})
find_path(FOUND_${FILENAME}_INCLUDE NAMES ${FILENAME})
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)
if(FOUND_IN_INCLUDES EQUAL -1)
append_to_list(${ARGV1} "${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.")
endif(FOUND_${FILENAME}_INCLUDE)
endif(CHECK_ANGLE_INCLUDES)
endif(QUOTE_TYPE STREQUAL "angle brackets")
endforeach(INCLUDE)
endmacro(calculate_depends)
###############################################################################
# calculate_libraries(<source filename> <output variable for linker flags> <output variable for extra depends>)
#
# This macro is used in most of the src (sub)directories to calculate the
# library dependencies for the given source file.
###############################################################################
macro(calculate_libraries SRC SRC_LDFLAGS EXTRA_DEPENDS)
# Set up a temporary LDFLAGS for this file
set(THIS_LDFLAGS "${LDFLAGS}")
# Reset extra dependencies
set(EXTRA_DEPENDENCIES)
# Reset library paths
set(LIBRARY_PATHS)
# Reset libraries
set(LIBRARIES)
# Check to see if there are any lines matching: /* RequiredLibraries: [something] */
read_from_file(${SRC} "/\\\\*[ \t]*RequiredLibraries:[ \t]*.*[ \t]*\\\\*/" REQUIRED_LIBRARIES)
# Iterate through those lines
foreach(REQUIRED_LIBRARY ${REQUIRED_LIBRARIES})
# Strip off the /* RequiredLibraries: and */ from the line
string(REGEX REPLACE "/\\*[ \t]*RequiredLibraries:[ \t]*([^ \t]*)[ \t]*\\*/" "\\1" REQUIRED_LIBRARY ${REQUIRED_LIBRARY})
# Replace all commas with semicolons
string(REGEX REPLACE "," ";" REQUIRED_LIBRARY ${REQUIRED_LIBRARY})
# Iterate through the libraries given
foreach(LIBRARY ${REQUIRED_LIBRARY})
# Locate the library to see if it exists
if(DEFAULT_LIBRARY_DIRS OR WSDK_PATH OR DEFINED $ENV{VCINSTALLDIR})
find_library(FOUND_${LIBRARY}_LIBRARY NAMES ${LIBRARY} PATHS ${DEFAULT_LIBRARY_DIRS} ${WSDK_PATH}/lib $ENV{VCINSTALLDIR}/lib)
else(DEFAULT_LIBRARY_DIRS OR WSDK_PATH OR DEFINED $ENV{VCINSTALLDIR})
find_library(FOUND_${LIBRARY}_LIBRARY NAMES ${LIBRARY})
endif(DEFAULT_LIBRARY_DIRS OR WSDK_PATH OR DEFINED $ENV{VCINSTALLDIR})
# If the library was found, we will add it to the linker flags
if(FOUND_${LIBRARY}_LIBRARY)
# Get the path only of the library, to add it to linker flags
get_filename_component(LIBRARY_PATH ${FOUND_${LIBRARY}_LIBRARY} PATH)
if(MSVC)
# For Visual Studio, instead of editing the linker flags, we'll add the library to a separate list of extra dependencies
append_to_list(EXTRA_DEPENDENCIES "${FOUND_${LIBRARY}_LIBRARY}")
else(MSVC)
# For all others, add the library paths and libraries
append_to_list(LIBRARY_PATHS "${LIBRARY_PATH}")
append_to_list(LIBRARIES "${LIBRARY}")
endif(MSVC)
else(FOUND_${LIBRARY}_LIBRARY)
# 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.")
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}")
endmacro(calculate_libraries)
###############################################################################
# add_to_cpack_ignored_files(<item> [TRUE])
#
# A macro to update the environment variable CPACK_IGNORED_FILES which
# contains a list of files for CPack to ignore. If the optional 2nd argument
# of TRUE is given, periods will be converted to \\. for CPack.
###############################################################################
macro(add_to_cpack_ignored_files ITEM)
# Temporary copy of the orignal item
set(REAL_ITEM "${ITEM}")
# If we have 2+ arguments, assume that the second one was something like TRUE (doesn't matter really) and convert periods so they will be \\. for CPack
if(${ARGC} GREATER 1)
string(REPLACE "." "\\\\." REAL_ITEM ${REAL_ITEM})
endif(${ARGC} GREATER 1)
# If the environment variable is already defined, just tack the item to the end
if(DEFINED ENV{CPACK_IGNORED_FILES})
set(ENV{CPACK_IGNORED_FILES} "$ENV{CPACK_IGNORED_FILES};${REAL_ITEM}")
# Otherwise set the environment variable to the item
else(DEFINED ENV{CPACK_IGNORED_FILES})
set(ENV{CPACK_IGNORED_FILES} "${REAL_ITEM}")
endif(DEFINED ENV{CPACK_IGNORED_FILES})
endmacro(add_to_cpack_ignored_files)
+207 -266
View File
@@ -1,74 +1,12 @@
# This usage of CMake requires at least version 2.4 (checks are made to determine what to use when certain versions lack functions)
cmake_minimum_required(VERSION 2.4 FATAL_ERROR)
if(COMMAND cmake_policy)
cmake_policy(SET CMP0003 NEW)
endif(COMMAND cmake_policy)
# If the Source dir and the Binary dir are the same, we are building in-source, which we will disallow due to Autotools being there (but only on non-Windows)
if(${CMAKE_CURRENT_SOURCE_DIR} STREQUAL ${CMAKE_CURRENT_BINARY_DIR} AND NOT WIN32)
message(FATAL_ERROR "You can not use CMake to build Anope from the root of it's source tree! Remove the CMakeCache.txt file from this directory, then create a separate directory (either below this directory or elsewhere), and then re-run CMake from there.")
endif(${CMAKE_CURRENT_SOURCE_DIR} STREQUAL ${CMAKE_CURRENT_BINARY_DIR} AND NOT WIN32)
# This usage of CMake requires at least version 3.8
cmake_minimum_required(VERSION 3.8 FATAL_ERROR)
# Set the project as C++ primarily, but have C enabled for the checks required later
project(Anope CXX)
enable_language(C)
# Detect the version of CMake for the later conditional checks
execute_process(COMMAND ${CMAKE_COMMAND} --version OUTPUT_VARIABLE VERSION OUTPUT_STRIP_TRAILING_WHITESPACE)
string(REGEX REPLACE "cmake version 2\\.(.*)" "\\1" ONLY_VERSION "${VERSION}")
string(REGEX MATCH "-patch .*$" HAS_PATCH "${ONLY_VERSION}")
if(HAS_PATCH)
string(REGEX REPLACE "(.*)-patch .*" "\\1" MINOR_VERSION "${ONLY_VERSION}")
string(REGEX REPLACE ".*-patch (.*)" "\\1" PATCH_VERSION "${ONLY_VERSION}")
else(HAS_PATCH)
string(REGEX MATCH "\\." HAS_DOT "${ONLY_VERSION}")
if(HAS_DOT)
string(REGEX REPLACE "(.*)\\..*" "\\1" MINOR_VERSION "${ONLY_VERSION}")
string(REGEX REPLACE ".*\\.(.*)" "\\1" PATCH_VERSION "${ONLY_VERSION}")
else(HAS_DOT)
string(REGEX REPLACE "(.*)-beta" "\\1" MINOR_VERSION "${ONLY_VERSION}")
if(MINOR_VERSION STREQUAL "4-1\n")
set(PATCH_VERSION 1)
else(MINOR_VERSION STREQUAL "4-1\n")
set(PATCH_VERSION 0)
endif(MINOR_VERSION STREQUAL "4-1\n")
set(MINOR_VERSION 4)
endif(HAS_DOT)
endif(HAS_PATCH)
# Detect is we are using CMake 2.6 or better, these versions include functions that require less work than CMake 2.4 does
if(MINOR_VERSION GREATER 5)
set(CMAKE26_OR_BETTER TRUE)
set(CMAKE248_OR_BETTER TRUE)
set(CMAKE244_OR_BETTER TRUE)
set(CMAKE242_OR_BETTER TRUE)
else(MINOR_VERSION GREATER 5)
set(CMAKE26_OR_BETTER FALSE)
# Also detect if we are using CMake 2.4.8 or better, the FIND sub-command of list() is non-existant in earlier versions
if(PATCH_VERSION GREATER 7)
set(CMAKE248_OR_BETTER TRUE)
set(CMAKE244_OR_BETTER TRUE)
set(CMAKE242_OR_BETTER TRUE)
else(PATCH_VERSION GREATER 7)
set(CMAKE248_OR_BETTER FALSE)
# Also detect if we are using CMake 2.4.4 or better, the CheckCXXCompilerFlag module and SORT sub-command of list() are non-existant in earlier versions
if(PATCH_VERSION GREATER 3)
set(CMAKE244_OR_BETTER TRUE)
set(CMAKE242_OR_BETTER TRUE)
else(PATCH_VERSION GREATER 3)
set(CMAKE244_OR_BETTER FALSE)
# ALSO detect if we are using CMake 2.4.2 or better, the APPEND sub-command of list() is non-existant in earlier versions
if(PATCH_VERSION GREATER 1)
set(CMAKE242_OR_BETTER TRUE)
else(PATCH_VERSION GREATER 1)
set(CMAKE242_OR_BETTER FALSE)
endif(PATCH_VERSION GREATER 1)
endif(PATCH_VERSION GREATER 3)
endif(PATCH_VERSION GREATER 7)
endif(MINOR_VERSION GREATER 5)
# Override the module include path to include our directory, for our Anope.cmake, as well as we are using our own version of the NSIS template
set(CMAKE_MODULE_PATH ${Anope_SOURCE_DIR})
set(CMAKE_MODULE_PATH ${Anope_SOURCE_DIR}/cmake)
include(Anope)
@@ -79,8 +17,16 @@ set(ENV{LC_ALL} C)
set(DEFAULT_LIBRARY_DIRS)
set(DEFAULT_INCLUDE_DIRS)
# We require C++17 to build
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# Put modules in their own folder
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
# If we are using a GNU compiler (have to use CXX because it seems to fail on C), we will be able to determine it's default paths for libraries and includes
if(CMAKE_COMPILER_IS_GNUCXX)
if(CMAKE_COMPILER_IS_GNUCXX OR "${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang$")
# First look for the compiler's default library directories
execute_process(COMMAND ${CMAKE_C_COMPILER} -print-search-dirs OUTPUT_VARIABLE LINES OUTPUT_STRIP_TRAILING_WHITESPACE)
# Find only the part after "libraries: "
@@ -88,9 +34,9 @@ if(CMAKE_COMPILER_IS_GNUCXX)
# Replace the colons in the list with semicolons (only when not on MinGW, which uses semicolons already), and if on MinGW, just copy the line
if(NOT MINGW)
string(REGEX REPLACE ":" ";" LIBRARIES ${LINE})
else(NOT MINGW)
else()
set(LIBRARIES "${LINE}")
endif(NOT MINGW)
endif()
# Iterate through the libraries
foreach(LIBRARY ${LIBRARIES})
# Check if the first character is an equal sign, and skip that library directory as it is (I believe) the primary default and shows up later in the list anyways
@@ -98,16 +44,20 @@ if(CMAKE_COMPILER_IS_GNUCXX)
if(NOT FIRST_CHAR STREQUAL "=")
# If the directory had no = in front of it, make sure it's absolute and add it to the list of default library directories
get_filename_component(LIBRARY ${LIBRARY} ABSOLUTE)
append_to_list(DEFAULT_LIBRARY_DIRS ${LIBRARY})
endif(NOT FIRST_CHAR STREQUAL "=")
endforeach(LIBRARY)
list(APPEND DEFAULT_LIBRARY_DIRS ${LIBRARY})
endif()
endforeach()
# Remove duplicate entries from the list
if(DEFAULT_LIBRARY_DIRS)
remove_list_duplicates(DEFAULT_LIBRARY_DIRS)
endif(DEFAULT_LIBRARY_DIRS)
list(REMOVE_DUPLICATES DEFAULT_LIBRARY_DIRS)
endif()
# 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
@@ -117,61 +67,32 @@ if(CMAKE_COMPILER_IS_GNUCXX)
# If the line has the following on it, the next lines will contain directory names
if(LINE STREQUAL "#include <...> search starts here:")
set(IN_SEARCH TRUE)
else(LINE STREQUAL "#include <...> search starts here:")
else()
# If the line has the following on it, we hit the end of the list
if(LINE STREQUAL "End of search list.")
set(IN_SEARCH FALSE)
else(LINE STREQUAL "End of search list.")
else()
# If we are within the block between the above two lines...
if(IN_SEARCH)
# Get everything but the first character of the line
string(LENGTH ${LINE} LINE_LENGTH)
math(EXPR LINE_LENGTH "${LINE_LENGTH} - 1")
string(SUBSTRING ${LINE} 1 ${LINE_LENGTH} INCLUDE)
# For systems like Mac OS X, look for include paths that say " (framework directory)" at the end of them and strip that off
string(REGEX REPLACE " \\(framework directory\\)$" "" INCLUDE ${INCLUDE})
# Convert the path to an absolute one, just in case it wasn't
get_filename_component(INCLUDE ${INCLUDE} ABSOLUTE)
# Add that directory to the list of default include directories
append_to_list(DEFAULT_INCLUDE_DIRS ${INCLUDE})
endif(IN_SEARCH)
endif(LINE STREQUAL "End of search list.")
endif(LINE STREQUAL "#include <...> search starts here:")
endforeach(LINE)
list(APPEND DEFAULT_INCLUDE_DIRS ${INCLUDE})
endif()
endif()
endif()
endforeach()
# Remove duplicate entries from the list
if(DEFAULT_INCLUDE_DIRS)
remove_list_duplicates(DEFAULT_INCLUDE_DIRS)
endif(DEFAULT_INCLUDE_DIRS)
endif(CMAKE_COMPILER_IS_GNUCXX)
# If we are using Visual Studio, locate the path of the Windows Server 2008 SDK or Windows Server 2003 Platform SDK, depending on which is installed
if(MSVC)
# If the path comes up as "/registry" from any of these, the path wasn't found, otherwise, we'll set WSDK_PATH to the corresponding path
# Look for the 2008 SDK under HKLM first
get_filename_component(WSDK2008_PATH "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Microsoft SDKs\\Windows;CurrentInstallFolder]" ABSOLUTE CACHE)
if(WSDK2008_PATH STREQUAL "/registry")
# If not found, look for the 2003 SDK under HKLM
get_filename_component(WSDK2003_PATH "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\MicrosoftSDK\\InstalledSDKs\\D2FF9F89-8AA2-4373-8A31-C838BF4DBBE1;Install Dir]" ABSOLUTE CACHE)
if(WSDK2003_PATH STREQUAL "/registry")
# If not found, look for the 2008 SDK under HKCU
get_filename_component(WSDK2008_PATH "[HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\Microsoft SDKs\\Windows;CurrentInstallFolder]" ABSOLUTE CACHE)
if(WSDK2008_PATH STREQUAL "/registry")
# If not found, look for the 2003 SDK under HKCU
get_filename_component(WSDK2003_PATH "[HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\MicrosoftSDK\\InstalledSDKs\\D2FF9F89-8AA2-4373-8A31-C838BF4DBBE1;Install Dir]" ABSOLUTE CACHE)
if(WSDK2003_PATH STREQUAL "/regsitry")
# The SDK was never found, set the path to nothing
set(WSDK_PATH "")
else(WSDK2003_PATH STREQUAL "/regsitry")
set(WSDK_PATH "${WSDK2003_PATH}")
endif(WSDK2003_PATH STREQUAL "/regsitry")
else(WSDK2008_PATH STREQUAL "/registry")
set(WSDK_PATH "${WSDK2008_PATH}")
endif(WSDK2008_PATH STREQUAL "/registry")
else(WSDK2003_PATH STREQUAL "/registry")
set(WSDK_PATH "${WSDK2003_PATH}")
endif(WSDK2003_PATH STREQUAL "/registry")
else(WSDK2008_PATH STREQUAL "/registry")
set(WSDK_PATH "${WSDK2008_PATH}")
endif(WSDK2008_PATH STREQUAL "/registry")
endif(MSVC)
list(REMOVE_DUPLICATES DEFAULT_INCLUDE_DIRS)
endif()
endif()
# If the user specifies -DCMAKE_BUILD_TYPE on the command line, take their definition
# and dump it in the cache along with proper documentation, otherwise set CMAKE_BUILD_TYPE
@@ -180,39 +101,67 @@ endif(MSVC)
if(NOT MSVC)
if(CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE} CACHE STRING "Choose the type of build, options are: None(CMAKE_CXX_FLAGS or CMAKE_C_FLAGS used) Debug Release RelWithDebInfo MinSizeRel.")
else(CMAKE_BUILD_TYPE)
else()
set(CMAKE_BUILD_TYPE DEBUG CACHE STRING "Choose the type of build, options are: None(CMAKE_CXX_FLAGS or CMAKE_C_FLAGS used) Debug Release RelWithDebInfo MinSizeRel.")
endif(CMAKE_BUILD_TYPE)
endif(NOT MSVC)
endif()
endif()
# If running under MinGW, we have to force the resource compiler settings (hopefully this will be fixed in a later version of CMake)
if(MINGW)
set(CMAKE_RC_COMPILER_INIT windres)
enable_language(RC)
set(CMAKE_RC_COMPILE_OBJECT "<CMAKE_RC_COMPILER> <FLAGS> <DEFINES> -o <OBJECT> <SOURCE>")
endif(MINGW)
endif()
# Include the checking functions used later in this CMakeLists.txt
include(CheckFunctionExists)
include(CheckIncludeFile)
include(CheckTypeSize)
include(CheckLibraryExists)
if(CMAKE244_OR_BETTER)
include(CheckCXXCompilerFlag)
else(CMAKE244_OR_BETTER)
include(TestCXXAcceptsFlag)
endif(CMAKE244_OR_BETTER)
include(CheckCXXCompilerFlag)
# 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)
# If extra include directories were specified, tell cmake about them.
if(EXTRA_INCLUDE)
include_directories(${EXTRA_INCLUDE})
endif()
# If extra library directories were specified, tell cmake about them.
if(EXTRA_LIBS)
link_directories(${EXTRA_LIBS})
endif()
# setup conan
if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/conanbuildinfo.cmake")
include("${CMAKE_CURRENT_SOURCE_DIR}/conanbuildinfo.cmake")
conan_basic_setup()
endif()
# Find gettext
find_package(Gettext)
find_package(Intl)
if(GETTEXT_FOUND AND Intl_FOUND)
set(HAVE_LOCALIZATION ON)
include_directories(${Intl_INCLUDE_DIRS})
else()
message("Unable to find gettext and libintl; disabling localization")
set(HAVE_LOCALIZATION OFF)
endif()
# Use the following directories as includes
include_directories(${Anope_SOURCE_DIR}/include ${Anope_BINARY_DIR}/include ${Anope_BINARY_DIR}/lang)
include_directories(
${Anope_BINARY_DIR}/include
${Anope_SOURCE_DIR}/include
${Anope_SOURCE_DIR}/vendor
)
# Pass on REPRODUCIBLE_BUILD
if(REPRODUCIBLE_BUILD)
add_definitions(-DREPRODUCIBLE_BUILD)
endif()
# If using Windows, always add the _WIN32 define
if(WIN32)
add_definitions(-D_WIN32)
endif(WIN32)
# If using Windows, include the windows specific folder for anope_windows.h
include_directories(${Anope_SOURCE_DIR}/src/win32)
endif()
# If using Visual Studio, set the C++ flags accordingly
if(MSVC)
@@ -221,155 +170,142 @@ if(MSVC)
string(REPLACE "/GX " "" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS})
string(REPLACE "/W3 " "" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS})
# Set the compile flags to have warnings on the max setting (but disable a few annoying ones), exception handling turned on, the proper defines
set(CXXFLAGS "${CXXFLAGS} /W4 /wd4100 /wd4251 /wd4706 /wd4800 /wd4996 /EHs")
add_definitions(-DMSVCPP -D_CRT_SECURE_NO_WARNINGS)
set(CXXFLAGS "${CXXFLAGS} /W4 /wd4100 /wd4127 /wd4250 /wd4251 /wd4267 /wd4275 /wd4355 /wd4706 /wd4800 /wd4996 /EHs")
add_definitions(-D_CRT_SECURE_NO_WARNINGS)
# Otherwise, we're not using Visual Studio
else(MSVC)
else()
# 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(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}")
# 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
if(MINGW)
add_definitions(-DMINGW)
endif(MINGW)
endif(UNIX)
endif(MSVC)
set(CXXFLAGS "${CXXFLAGS} -fvisibility=hidden -fvisibility-inlines-hidden -Wall -Wextra -Wformat=2 -Wmissing-format-attribute -Wpedantic -Wno-format-nonliteral -Wno-format-zero-length -Wno-unused-parameter ${CMAKE_CXX_FLAGS}")
endif()
# If CMake has found that the given system requires a special library for dl* calls, include it with the linker flags
if(CMAKE_DL_LIBS)
set(LDFLAGS "${LDFLAGS} -l${CMAKE_DL_LIBS}")
endif(CMAKE_DL_LIBS)
list(APPEND LINK_LIBS ${CMAKE_DL_LIBS})
endif()
# Find the linker flags required for using threads.
find_package("Threads" REQUIRED)
if(CMAKE_THREAD_LIBS_INIT)
list(APPEND LINK_LIBS ${CMAKE_THREAD_LIBS_INIT})
endif()
# Under MinGW, the -shared flag isn't properly set in the module-specific linker flags, add it from the C flags for shared libraries
if(MINGW)
set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} ${CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS}")
endif(MINGW)
endif()
# Under Windows, we set the executable name for Anope to be anope
if(WIN32)
if(NOT PROGRAM_NAME)
set(PROGRAM_NAME anope)
# Under *nix, we set the executable name for Anope to be services
else(WIN32)
set(PROGRAM_NAME services)
endif(WIN32)
endif()
# If we are not using Visual Studio, we'll run the following checks
if(NOT MSVC)
# Check if the C++ compiler can accept the -pipe flag, and add it to the compile flags if it works
if(CMAKE244_OR_BETTER)
# If using CMake 2.4.4 or better, we can use check_cxx_compiler_flag
check_cxx_compiler_flag(-pipe HAVE_PIPE_FLAG)
else(CMAKE244_OR_BETTER)
# If using CMake 2.4.3 or older, we will use check_cxx_accepts_flags instead
check_cxx_accepts_flag(-pipe HAVE_PIPE_FLAG)
endif(CMAKE244_OR_BETTER)
check_cxx_compiler_flag(-pipe HAVE_PIPE_FLAG)
# If the flag was accepted, add it to the list of flags
if(HAVE_PIPE_FLAG)
set(CXXFLAGS "${CXXFLAGS} -pipe")
endif(HAVE_PIPE_FLAG)
# The following are additional library checks, they are not required for Windows
if(NOT WIN32)
# Check if socket is within the socket library (if the library exists), and add it to the linker flags if needed
check_library_exists(socket socket "" HAVE_SOCKET_LIB)
if(HAVE_SOCKET_LIB)
set(LDFLAGS "${LDFLAGS} -lsocket")
endif(HAVE_SOCKET_LIB)
# Check if inet_addr is within the nsl library (if the library exists), and add it to the linker flags if needed
check_library_exists(nsl inet_addr "" HAVE_NSL_LIB)
if(HAVE_NSL_LIB)
set(LDFLAGS "${LDFLAGS} -lnsl")
endif(HAVE_NSL_LIB)
endif(NOT WIN32)
endif(NOT MSVC)
endif()
endif()
# If DEFUMASK wasn't passed to CMake, set a default depending on if RUNGROUP was passed in or not
if(NOT DEFUMASK)
if(RUNGROUP)
set(DEFUMASK "007")
else(RUNGROUP)
else()
set(DEFUMASK "077")
endif(RUNGROUP)
endif(NOT DEFUMASK)
endif()
endif()
# 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)
# Set the DEBUG_BUILD for sysconf.h
if(CMAKE_BUILD_TYPE STREQUAL "DEBUG" OR CMAKE_BUILD_TYPE STREQUAL "RELWITHDEBINFO")
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
set(DEBUG_BUILD TRUE)
endif()
# Check for the existance of the following functions
check_function_exists(gethostbyname HAVE_GETHOSTBYNAME)
check_function_exists(gettimeofday HAVE_GETTIMEOFDAY)
check_function_exists(setgrent HAVE_SETGRENT)
check_function_exists(strcasecmp HAVE_STRCASECMP)
check_function_exists(stricmp HAVE_STRICMP)
check_function_exists(strlcat HAVE_STRLCAT)
check_function_exists(strlcpy HAVE_STRLCPY)
# Check for the existence of the following functions
check_function_exists(umask HAVE_UMASK)
check_function_exists(backtrace HAVE_BACKTRACE)
# Check for the existance of the following types
check_type_size(uint8_t UINT8_T)
check_type_size(u_int8_t U_INT8_T)
check_type_size(int16_t INT16_T)
check_type_size(uint16_t UINT16_T)
check_type_size(u_int16_t U_INT16_T)
check_type_size(int32_t INT32_T)
check_type_size(uint32_t UINT32_T)
check_type_size(u_int32_t U_INT32_T)
check_function_exists(epoll_wait HAVE_EPOLL)
check_function_exists(poll HAVE_POLL)
check_function_exists(kqueue HAVE_KQUEUE)
# Strip the leading and trailing spaces from the compile flags
if(CXXFLAGS)
strip_string(${CXXFLAGS} CXXFLAGS)
endif(CXXFLAGS)
string(STRIP ${CXXFLAGS} CXXFLAGS)
endif()
# Strip the leading and trailing spaces from the linker flags
if(LDFLAGS)
strip_string(${LDFLAGS} LDFLAGS)
endif(LDFLAGS)
string(STRIP ${LDFLAGS} LDFLAGS)
endif()
# Search for the following programs
find_program(GREP grep)
find_program(SH sh)
find_program(CHGRP chgrp)
find_program(CHMOD chmod)
find_program(PERL perl)
if(NOT WIN32 AND RUNGROUP)
find_program(CHGRP "chgrp" REQUIRED)
find_program(CHMOD "chmod" REQUIRED)
endif()
# If perl is included on the system and the user wants to use run-cc.pl, change the commands for compiling and linking
if(PERL AND USE_RUN_CC_PL)
set(CMAKE_CXX_COMPILE_OBJECT "${PERL} ${Anope_SOURCE_DIR}/run-cc.pl -q ${CMAKE_CXX_COMPILE_OBJECT}")
set(CMAKE_CXX_LINK_EXECUTABLE "${PERL} ${Anope_SOURCE_DIR}/run-cc.pl -q ${CMAKE_CXX_LINK_EXECUTABLE}")
set(CMAKE_CXX_CREATE_SHARED_MODULE "${PERL} ${Anope_SOURCE_DIR}/run-cc.pl -q ${CMAKE_CXX_CREATE_SHARED_MODULE}")
endif(PERL AND USE_RUN_CC_PL)
# If a INSTDIR was passed in to CMake, use it as the install prefix, otherwise set the default install prefix to the services directory under the user's home directory
# If a INSTDIR was passed in to CMake, use it as the install prefix, otherwise set the default install prefix to the anope directory under the user's home directory
if(INSTDIR)
set(CMAKE_INSTALL_PREFIX "${INSTDIR}")
else(INSTDIR)
set(CMAKE_INSTALL_PREFIX "$ENV{HOME}/services")
endif(INSTDIR)
elseif(NOT CMAKE_INSTALL_PREFIX)
set(CMAKE_INSTALL_PREFIX "$ENV{HOME}/anope")
endif()
# Set default paths for various directories if not already defined
if(NOT BIN_DIR)
set(BIN_DIR "bin")
endif()
if(NOT DB_DIR)
set(DB_DIR "data")
endif()
if(NOT DOC_DIR)
set(DOC_DIR "doc")
endif()
if(NOT CONF_DIR)
set(CONF_DIR "conf")
endif()
if(NOT LIB_DIR)
set(LIB_DIR "lib")
endif()
if(NOT LOCALE_DIR)
set(LOCALE_DIR "locale")
endif()
if(NOT LOGS_DIR)
set(LOGS_DIR "logs")
endif()
# 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_
file(STRINGS ${Anope_SOURCE_DIR}/src/version.sh VERSIONS REGEX "^VERSION_")
# Iterate through the strings found
foreach(VERSION_STR ${VERSIONS})
# Get the length of the string
string(LENGTH ${VERSION_STR} VERSION_LEN)
# Subtract 16 from the string's length (8 for VERSION_, 5 more for the type, 2 for the space and leading quote, 1 for the trailing quote)
math(EXPR VERSION_NUM_LEN "${VERSION_LEN} - 16")
# Extract the type from the string
string(SUBSTRING ${VERSION_STR} 8 5 VERSION_TYPE)
# Extract the actual value from the string
string(SUBSTRING ${VERSION_STR} 15 ${VERSION_NUM_LEN} VERSION)
# Set the version type to the value extract from above
set(VERSION_${VERSION_TYPE} ${VERSION})
endforeach(VERSION_STR ${VERSIONS})
string(REGEX REPLACE "^VERSION_([A-Z]+)=\"?([^\"]*)\"?$" "\\1;\\2" VERSION_OUT ${VERSION_STR})
list(LENGTH VERSION_OUT VERSION_LEN)
list(GET VERSION_OUT 0 VERSION_TYPE)
if(${VERSION_LEN} GREATER 1)
list(GET VERSION_OUT 1 VERSION_DATA)
set(VERSION_${VERSION_TYPE} ${VERSION_DATA})
endif()
endforeach()
# 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
file(STRINGS ${Anope_SOURCE_DIR}/src/version.sh VERSIONS REGEX "^#define VERSION_BUILD")
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()
endif()
# Set the version variables based on what was found above
set(VERSION_COMMA "${VERSION_MAJOR},${VERSION_MINOR},${VERSION_PATCH},${VERSION_BUILD}")
@@ -381,11 +317,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)
endif(WIN32)
configure_file(${Anope_SOURCE_DIR}/src/win32/win32.rc.cmake ${Anope_BINARY_DIR}/src/win32/win32.rc)
endif()
# 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
@@ -397,40 +333,41 @@ if(${Anope_SOURCE_DIR} STREQUAL ${Anope_BINARY_DIR})
# If using Visual Studio, add these files as well
if(MSVC)
add_to_cpack_ignored_files(".vcproj$\;.sln$\;.ncb$\;.suo$\;.dir$\;.ilk$\;.exp$\;.pdb$\;.lib$\;/debug$;/release$;/relwithdebinfo$;/minsizerel$" TRUE)
endif(MSVC)
endif(${Anope_SOURCE_DIR} STREQUAL ${Anope_BINARY_DIR})
endif()
endif()
# Go into the following directories and run their CMakeLists.txt as well
add_subdirectory(data)
add_subdirectory(docs)
add_subdirectory(lang)
add_subdirectory(language)
add_subdirectory(src)
add_subdirectory(modules)
add_subdirectory(include)
# Get the filename of the Anope binary, to use later
get_target_property(SERVICES_BINARY ${PROGRAM_NAME} LOCATION)
set(SERVICES_BINARY "$<TARGET_FILE:${PROGRAM_NAME}>")
get_filename_component(SERVICES_BINARY ${SERVICES_BINARY} NAME)
# At install time, create the following additional directories
install(CODE "file(MAKE_DIRECTORY \"\${CMAKE_INSTALL_PREFIX}/data/backups\")")
install(CODE "file(MAKE_DIRECTORY \"\${CMAKE_INSTALL_PREFIX}/data/logs\")")
install(CODE "file(MAKE_DIRECTORY \"\${CMAKE_INSTALL_PREFIX}/data/modules/runtime\")")
install(CODE "file(MAKE_DIRECTORY \"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${DB_DIR}/backups\")")
install(CODE "file(MAKE_DIRECTORY \"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${LOGS_DIR}\")")
if(WIN32)
install(CODE "file(MAKE_DIRECTORY \"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${DB_DIR}/runtime\")")
endif()
# On non-Windows platforms, if RUNGROUP is set, change the permissions of the below directories, as well as the group of the data directory
if(NOT WIN32 AND RUNGROUP)
install(CODE "execute_process(COMMAND ${CHMOD} 2775 \"\${CMAKE_INSTALL_PREFIX}/data/backups\")")
install(CODE "execute_process(COMMAND ${CHMOD} 2775 \"\${CMAKE_INSTALL_PREFIX}/data/logs\")")
install(CODE "execute_process(COMMAND ${CHMOD} 2775 \"\${CMAKE_INSTALL_PREFIX}/data/modules/runtime\")")
install(CODE "execute_process(COMMAND ${CHGRP} -R ${RUNGROUP} \"\${CMAKE_INSTALL_PREFIX}\")")
endif(NOT WIN32 AND RUNGROUP)
install(CODE "execute_process(COMMAND ${CHMOD} 2775 \"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/\${DB_DIR}/backups\")")
install(CODE "execute_process(COMMAND ${CHMOD} 2775 \"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/\${LOGS_DIR}\")")
install(CODE "execute_process(COMMAND ${CHGRP} -R ${RUNGROUP} \"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}\")")
endif()
# On Windows platforms, install extra files
if(WIN32)
install(FILES ${Anope_SOURCE_DIR}/anope.bat
DESTINATION bin
install(FILES ${Anope_SOURCE_DIR}/src/win32/anope.bat
DESTINATION ${BIN_DIR}
)
install(FILES ${Anope_SOURCE_DIR}/docs/Changes ${Anope_SOURCE_DIR}/docs/Changes.conf ${Anope_SOURCE_DIR}/docs/Changes.lang
DESTINATION .
)
endif(WIN32)
endif()
install(CODE "file(REMOVE_RECURSE \"$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/${LIB_DIR}/modules\")")
# Only process the CPack section if we have CPack
if(EXISTS "${CMAKE_ROOT}/Modules/CPack.cmake")
@@ -446,6 +383,10 @@ if(EXISTS "${CMAKE_ROOT}/Modules/CPack.cmake")
#set(CPACK_RESOURCE_FILE_README "${Anope_SOURCE_DIR}/docs/README")
# The following is primarily for NSIS
if(WIN32)
# By default, do not warn when built on machines using only VS Express:
IF(NOT DEFINED CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_NO_WARNINGS)
SET(CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_NO_WARNINGS ON)
ENDIF(NOT DEFINED CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_NO_WARNINGS)
# Also for Windows, include installing the MSVCRT library
include(InstallRequiredSystemLibraries)
set(CPACK_GENERATOR "NSIS")
@@ -456,19 +397,19 @@ if(EXISTS "${CMAKE_ROOT}/Modules/CPack.cmake")
"bin\\\\anope.bat\\\" \\\"-debug -nofork" "Anope IRC Services (Debug and Window Logging)"
"bin\\\\anope.bat\\\" \\\"-nofork" "Anope IRC Services (Window Logging)"
"bin\\\\anope.bat\\\" \\\"-nothird" "Anope IRC Services (No Third Party Modules)"
"http://www.anope.org/" "Anope Web Site"
"https://www.anope.org/" "Anope Web Site"
)
# The following doesn't work, but a bug report has been filed about it
#set(CPACK_CREATE_DESKTOP_LINK_${SERVICES_BINARY} TRUE)
set(CPACK_NSIS_MUI_ICON "${Anope_SOURCE_DIR}/src\\\\anope-icon.ico")
set(CPACK_NSIS_MUI_UNIICON "${Anope_SOURCE_DIR}/src\\\\anope-icon.ico")
set(CPACK_NSIS_MUI_ICON "${Anope_SOURCE_DIR}/src\\\\win32\\\\anope-icon.ico")
set(CPACK_NSIS_MUI_UNIICON "${Anope_SOURCE_DIR}/src\\\\win32\\\\anope-icon.ico")
set(CPACK_NSIS_INSTALLED_ICON_NAME "${SERVICES_BINARY}")
set(CPACK_NSIS_URL_INFO_ABOUT "http://www.anope.org/")
set(CPACK_NSIS_URL_INFO_ABOUT "https://www.anope.org/")
set(CPACK_NSIS_COMPRESSOR "/SOLID lzma")
endif(WIN32)
endif()
set(CPACK_SOURCE_PACKAGE_FILE_NAME "anope-${VERSION_FULL_NOBUILD}-source")
set(CPACK_SOURCE_GENERATOR "TGZ")
set(CPACK_SOURCE_IGNORE_FILES "$ENV{CPACK_IGNORED_FILES}")
set(CPACK_MONOLITHIC_INSTALL TRUE)
include(CPack)
endif(EXISTS "${CMAKE_ROOT}/Modules/CPack.cmake")
endif()
+100 -148
View File
@@ -1,8 +1,8 @@
#!/bin/sh
#
# Configuration script for Services.
# Configuration script for Anope.
#
# Anope (c) 2003-2010 Anope team
# Anope (C) 2003-2024 Anope Team
# Contact us at team@anope.org
#
# This program is free but copyrighted software; see the file COPYING for
@@ -40,94 +40,59 @@ Run_Build_System () {
WITH_INST=""
WITH_RUN=""
WITH_PERM=""
BUILD_TYPE=""
RUN_CC_PL=""
EXTRA_INCLUDE=""
EXTRA_LIBS=""
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
else
if [ "$BUILD_SYSTEM" = "cmake" ] ; then
RUN_CC_PL="-DUSE_RUN_CC_PL:BOOLEAN=OFF"
else
RUN_CC_PL="--with-makebin="
fi
if [ "$EXTRA_INCLUDE_DIRS" != "" ] ; then
EXTRA_INCLUDE="-DEXTRA_INCLUDE:STRING=$EXTRA_INCLUDE_DIRS"
fi
if [ "$BUILD_SYSTEM" = "cmake" ] ; then
case `uname -s` in
MINGW*)
GEN_TYPE="-G\"MSYS Makefiles\""
;;
esac
if [ "$EXTRA_LIB_DIRS" != "" ] ; then
EXTRA_LIBS="-DEXTRA_LIBS:STRING=$EXTRA_LIB_DIRS"
fi
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_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
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_CONFIG_ARGS $RUN_CC_PL"
REAL_SOURCE_DIR="$SOURCE_DIR"
fi
./configure $WITH_INST $WITH_RUN $WITH_PERM $BUILD_TYPE $EXTRA_CONFIG_ARGS $RUN_CC_PL
echo "cmake $GEN_TYPE $WITH_INST $WITH_RUN $WITH_PERM $BUILD_TYPE $EXTRA_INCLUDE $EXTRA_LIBS $EXTRA_CONFIG_ARGS $REAL_SOURCE_DIR"
cmake $GEN_TYPE $WITH_INST $WITH_RUN $WITH_PERM $BUILD_TYPE $EXTRA_INCLUDE $EXTRA_LIBS $EXTRA_CONFIG_ARGS $REAL_SOURCE_DIR
if [ $? -ne 0 ]; then
echo "You should fix these issues and then run ./Config -quick to rerun CMake."
exit 1
fi
echo ""
if [ "$SOURCE_DIR" = "." ] ; then
echo "Now cd build, then run make to build Anope."
cd "$pwdsave"
else
echo "Now run make to build Anope."
fi
}
@@ -148,21 +113,16 @@ export ECHO2 ECHO2SUF
# Init values
###########################################################################
BUILD_SYSTEM="cmake"
INSTDIR=$HOME/services
INSTDIR=$HOME/anope
RUNGROUP=
UMASK=
DEBUG="yes"
USE_RUN_CC_PL="no"
DEBUG="no"
EXTRA_INCLUDE_DIRS=
EXTRA_LIB_DIRS=
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
###########################################################################
@@ -176,6 +136,9 @@ while [ $# -ge 1 ] ; do
echo "-nointro Skip intro (disclaimer, etc)"
echo "-quick Skip questions, go straight to cmake"
exit 0
elif [ $1 = "-devel" ] ; then
DEBUG="yes"
INSTDIR="$PWD/run"
elif [ $1 = "-nocache" ] ; then
IGNORE_CACHE="1"
elif [ $1 = "-nointro" ] ; then
@@ -193,26 +156,30 @@ while [ $# -ge 1 ] ; do
shift 1
done
###########################################################################
# Check for CMake and (optionally) install it
###########################################################################
cmake --version 2>&1 > /dev/null
if [ $? -ne 0 ] ; then
clear
echo "Anope requires CMake 3.8 or newer, which can be downloaded at https://cmake.org/ or through your system's package manager."
echo "If you have installed CMake already, ensure it is in your PATH environment variable."
exit 0
fi
###########################################################################
if [ ! "$NO_INTRO" ] ; then
case `uname -s` in
MINGW*)
PAGER=less
;;
*)
PAGER=more
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
export MORE='-e'
. $SOURCE_DIR/src/version.sh
cat $SOURCE_DIR/.BANNER | sed "s/CURVER/$VERSION_MAJOR.$VERSION_MINOR.$VERSION_PATCH$VERSION_EXTRA/" | sed "s@SOURCE_DIR@$SOURCE_DIR@" | more
echo ""
else
echo ""
fi
echo "Beginning Services configuration."
echo "Beginning Anope configuration."
echo ""
###########################################################################
@@ -230,37 +197,7 @@ 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?"
echo "In what directory should Anope be installed?"
while [ $ok -eq 0 ] ; do
echo2 "[$INSTDIR] "
if read INPUT ; then : ; else echo "" ; exit 1 ; fi
@@ -281,7 +218,7 @@ while [ $ok -eq 0 ] ; do
fi
fi
elif exists "$INPUT/include/services.h" ; then
echo "You cannot use the Services source directory as a target directory."
echo "You cannot use the Anope source directory as a target directory."
else
ok=1
fi
@@ -293,11 +230,11 @@ echo ""
OLD_RUNGROUP="$RUNGROUP"
if [ "$RUNGROUP" ] ; then
echo "Which group should all Services data files be owned by? (If Services"
echo "Which group should all Anope data files be owned by? (If Anope"
echo "should not force files to be owned by a particular group, type \"none\""
echo "(without the quotes) and press Return.)"
else
echo "Which group should all Services data files be owned by? (If Services"
echo "Which group should all Anope data files be owned by? (If Anope"
echo "should not force files to be owned by a particular group, just press"
echo "Return.)"
fi
@@ -363,37 +300,52 @@ echo ""
####
TEMP_YN="n"
if [ "$USE_RUN_CC_PL" = "yes" ] ; then
TEMP_YN="y"
fi
echo "You can optionally have the build run through run-cc.pl, which will"
echo "cause warnings and errors (if any) to be colored yellow and red,"
echo "respectively. This relies on Perl being installed, so if you say yes"
echo "to this without Perl, the option will be ignored."
echo "NOTE: If you are using MinGW, it is NOT recommended to say yes to"
echo "this, it may fail."
echo "Would you like to utilize run-cc.pl?"
echo2 "[$TEMP_YN] "
read YN
if [ "$YN" ] ; then
if [ "$YN" = "y" ] ; then
USE_RUN_CC_PL="yes"
echo "Are there any extra include directories you wish to use?"
echo "You may only need to do this if CMake is unable to locate"
echo "missing dependencies without hints."
echo "Separate directories with semicolons."
echo "If you need no extra include directories, enter NONE in all caps."
echo2 "[$EXTRA_INCLUDE_DIRS] "
if read INPUT ; then : ; else echo "" ; exit 1 ; fi
if [ "$INPUT" ] ; then
if [ "$INPUT" = "NONE" ] ; then
EXTRA_INCLUDE_DIRS=""
else
USE_RUN_CC_PL="no"
EXTRA_INCLUDE_DIRS=$INPUT
fi
fi
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 library directories you wish to use?"
echo "You may only need to do this if CMake is unable to locate"
echo "missing dependencies without hints."
echo "Separate directories with semicolons."
echo "If you need no extra library directories, enter NONE in all caps."
echo2 "[$EXTRA_LIB_DIRS] "
if read INPUT ; then : ; else echo "" ; exit 1 ; fi
if [ "$INPUT" ] ; then
if [ "$INPUT" = "NONE" ] ; then
EXTRA_LIB_DIRS=""
else
EXTRA_LIB_DIRS=$INPUT
fi
fi
echo ""
####
echo "Are there any extra arguments you wish to pass to CMake?"
echo "If you need no extra arguments to CMake, enter NONE in all caps."
echo2 "[$EXTRA_CONFIG_ARGS] "
if read INPUT ; then : ; else echo "" ; exit 1 ; fi
if [ "$INPUT" ] ; then
EXTRA_CONFIG_ARGS=$INPUT
if [ "$INPUT" = "NONE" ] ; then
EXTRA_CONFIG_ARGS=""
else
EXTRA_CONFIG_ARGS=$INPUT
fi
fi
echo ""
@@ -406,12 +358,12 @@ echo ""
echo2 "Saving configuration results in config.cache... "
cat <<EOT >$SOURCE_DIR/config.cache
BUILD_SYSTEM="$BUILD_SYSTEM"
INSTDIR="$INSTDIR"
RUNGROUP="$RUNGROUP"
UMASK=$UMASK
DEBUG="$DEBUG"
USE_RUN_CC_PL="$USE_RUN_CC_PL"
EXTRA_INCLUDE_DIRS="$EXTRA_INCLUDE_DIRS"
EXTRA_LIB_DIRS="$EXTRA_LIB_DIRS"
EXTRA_CONFIG_ARGS="$EXTRA_CONFIG_ARGS"
EOT
echo "done."
-3
View File
@@ -1,3 +0,0 @@
@echo off
cscript /nologo "%~dp0\install.js"
pause
BIN
View File
Binary file not shown.
-103
View File
@@ -1,103 +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@
MYSQLDIR=@MYSQLDIR@
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}' 'MYSQLDIR=${MYSQLDIR}'
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:
+46
View File
@@ -0,0 +1,46 @@
## About
Anope is an open source set of IRC services. It is highly modular, with a vast number of configurable parameters, and is the most used IRC services package. There are also many modules on the [modsite](https://modules.anope.org) to add additional features. It runs on Linux, BSD, and Windows, and supports many modern IRCds, including InspIRCd, UnrealIRCd, and ircd-hybrid. For more details, credits, command line options, and contact information see [docs/README](https://github.com/anope/anope/blob/2.0/docs/README).
* [Website](https://anope.org)
* [GitHub](https://github.com/anope)
* IRC \#anope on irc.anope.org
## Installation
### Linux/BSD
Download the latest release off of the [releases page](https://github.com/anope/anope/releases).
```
$ ./Config
$ cd build
$ make
$ make install
```
Now change to the directory where you installed Anope to, e.g. `$ cd ~/anope/`
### Windows
Download the latest release off of the [releases page](https://github.com/anope/anope/releases) and run the installer.
## Configuration
Copy conf/anope.example.conf to conf/anope.conf
```
$ cp conf/anope.example.conf conf/anope.conf
```
Edit anope.conf, configuring the uplink, serverinfo, and protocol module configurations. Example link blocks for popular IRCds are included in the anope.example.conf documentation. The [Anope wiki](https://wiki.anope.org) is also a good source of information. Our support channel is located at #anope on [irc.anope.org](irc://irc.anope.org/#anope).
Note that the example configuration file includes other example configuration files. If you want to modify the other example configuration files, copy them (e.g. `modules.example.conf` to `modules.conf`) and modify the `include` directive in `anope.conf` to include the new file.
## Running
Run `$ ./bin/anope` to start Anope. If asked to provide logs for support, use the `--support` flag, e.g.: `$ ./bin/anope --support`
## Installing extra modules
Extra modules, which are usually modules which require extra libraries to use, such as m\_mysql, can be enabled with the `./extras` command from the source directory. Then re-run `Config`, `make` and `make install` again. Third party modules can be installed by placing them into the `modules/third` directory.
-5
View File
@@ -1,5 +0,0 @@
# This file is external to the read_from_file macro in Anope.cmake in order to
# get around a possible memory leak in older versions of CMake.
file(READ "${FILE}" RESULT)
message("${RESULT}")
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"
+106
View File
@@ -0,0 +1,106 @@
###############################################################################
# calculate_libraries(<source filename> <output variable for linker flags> <output variable for extra depends>)
#
# This macro is used in most of the module (sub)directories to calculate the
# library dependencies for the given source file.
###############################################################################
macro(calculate_libraries SRC SRC_LDFLAGS EXTRA_DEPENDS)
# Set up a temporary LDFLAGS for this file
set(THIS_LDFLAGS "${LDFLAGS}")
# Reset extra dependencies
set(EXTRA_DEPENDENCIES)
# Reset library paths
set(LIBRARY_PATHS)
# Reset libraries
set(LIBRARIES)
# Check to see if there are any lines matching: /* RequiredLibraries: [something] */
if(WIN32)
file(STRINGS ${SRC} REQUIRED_LIBRARIES REGEX "/\\*[ \t]*RequiredWindowsLibraries:[ \t]*.*[ \t]*\\*/")
else()
file(STRINGS ${SRC} REQUIRED_LIBRARIES REGEX "/\\*[ \t]*RequiredLibraries:[ \t]*.*[ \t]*\\*/")
endif()
# Iterate through those lines
foreach(REQUIRED_LIBRARY ${REQUIRED_LIBRARIES})
# Strip off the /* RequiredLibraries: and */ from the line
string(REGEX REPLACE "/\\*[ \t]*Required.*Libraries:[ \t]*([^ \t]*)[ \t]*\\*/" "\\1" REQUIRED_LIBRARY ${REQUIRED_LIBRARY})
# Replace all commas with semicolons
string(REGEX REPLACE "," ";" REQUIRED_LIBRARY ${REQUIRED_LIBRARY})
# Iterate through the libraries given
foreach(LIBRARY ${REQUIRED_LIBRARY})
# If the library has multiple names extract the alternate.
unset(LIBRARY_ALT)
if (${LIBRARY} MATCHES "^.+\\|.+$")
string(REGEX REPLACE ".+\\|(.*)" "\\1" LIBRARY_ALT ${LIBRARY})
string(REGEX REPLACE "(.+)\\|.*" "\\1" LIBRARY ${LIBRARY})
endif()
# Locate the library to see if it exists
if(DEFAULT_LIBRARY_DIRS OR DEFINED $ENV{VCINSTALLDIR})
find_library(FOUND_${LIBRARY}_LIBRARY NAMES ${LIBRARY} ${LIBRARY_ALT} PATHS ${DEFAULT_LIBRARY_DIRS} $ENV{VCINSTALLDIR}/lib ${EXTRA_INCLUDE} ${EXTRA_LIBS})
else()
find_library(FOUND_${LIBRARY}_LIBRARY NAMES ${LIBRARY} ${LIBRARY_ALT} PATHS ${EXTRA_INCLUDE} ${EXTRA_LIBS} NO_DEFAULT_PATH)
find_library(FOUND_${LIBRARY}_LIBRARY NAMES ${LIBRARY} ${LIBRARY_ALT} PATHS ${EXTRA_INCLUDE} ${EXTRA_LIBS})
endif()
# If the library was found, we will add it to the linker flags
if(FOUND_${LIBRARY}_LIBRARY)
if(MSVC)
# For Visual Studio, instead of editing the linker flags, we'll add the library to a separate list of extra dependencies
list(APPEND EXTRA_DEPENDENCIES "${FOUND_${LIBRARY}_LIBRARY}")
else()
# Get the path only of the library, to add it to library paths.
get_filename_component(LIBRARY_PATH ${FOUND_${LIBRARY}_LIBRARY} PATH)
list(APPEND LIBRARY_PATHS "${LIBRARY_PATH}")
# Extract the library short name, add it to the library path
get_filename_component(LIBRARY_NAME ${FOUND_${LIBRARY}_LIBRARY} NAME_WE)
string(REGEX REPLACE "^lib" "" LIBRARY_NAME ${LIBRARY_NAME})
list(APPEND LIBRARIES ${LIBRARY_NAME})
endif()
else()
# 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.")
endif()
endforeach()
endforeach()
# Remove duplicates from the library paths
if(LIBRARY_PATHS)
list(REMOVE_DUPLICATES LIBRARY_PATHS)
endif()
# Remove diplicates from the libraries
if(LIBRARIES)
list(REMOVE_DUPLICATES LIBRARIES)
endif()
# Iterate through library paths and add them to the linker flags
foreach(LIBRARY_PATH ${LIBRARY_PATHS})
if(NOT "${LIBRARY_PATH}" IN_LIST DEFAULT_LIBRARY_DIRS)
set(THIS_LDFLAGS "${THIS_LDFLAGS} -L${LIBRARY_PATH}")
endif()
endforeach()
# Iterate through libraries and add them to the linker flags
foreach(LIBRARY ${LIBRARIES})
list(APPEND EXTRA_DEPENDENCIES "${LIBRARY}")
endforeach()
set(${SRC_LDFLAGS} "${THIS_LDFLAGS}")
set(${EXTRA_DEPENDS} "${EXTRA_DEPENDENCIES}")
endmacro()
###############################################################################
# add_to_cpack_ignored_files(<item> [TRUE])
#
# A macro to update the environment variable CPACK_IGNORED_FILES which
# contains a list of files for CPack to ignore. If the optional 2nd argument
# of TRUE is given, periods will be converted to \\. for CPack.
###############################################################################
macro(add_to_cpack_ignored_files ITEM)
# Temporary copy of the original item
set(REAL_ITEM "${ITEM}")
# If we have 2+ arguments, assume that the second one was something like TRUE (doesn't matter really) and convert periods so they will be \\. for CPack
if(${ARGC} GREATER 1)
string(REPLACE "." "\\\\." REAL_ITEM ${REAL_ITEM})
endif()
# If the environment variable is already defined, just tack the item to the end
if(DEFINED ENV{CPACK_IGNORED_FILES})
set(ENV{CPACK_IGNORED_FILES} "$ENV{CPACK_IGNORED_FILES};${REAL_ITEM}")
# Otherwise set the environment variable to the item
else()
set(ENV{CPACK_IGNORED_FILES} "${REAL_ITEM}")
endif()
endmacro()
+26 -26
View File
@@ -118,7 +118,7 @@ Var AR_RegFlags
"exit_${SecName}:"
!macroend
!macro RemoveSection SecName
!macro RemoveSection_CPack SecName
; This macro is used to call section's Remove_... macro
;from the uninstaller.
;Input: section index constant name specified in Section command.
@@ -348,7 +348,7 @@ Function un.RemoveFromPath
FunctionEnd
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Uninstall sutff
; Uninstall stuff
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
###########################################
@@ -452,15 +452,15 @@ Done:
Exch $R1
FunctionEnd
Function ConditionalAddToRegisty
Function ConditionalAddToRegistry
Pop $0
Pop $1
StrCmp "$0" "" ConditionalAddToRegisty_EmptyString
StrCmp "$0" "" ConditionalAddToRegistry_EmptyString
WriteRegStr SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_NAME@" \
"$1" "$0"
;MessageBox MB_OK "Set Registry: '$1' to '$0'"
DetailPrint "Set install registry entry: '$1' to '$0'"
ConditionalAddToRegisty_EmptyString:
ConditionalAddToRegistry_EmptyString:
FunctionEnd
;--------------------------------
@@ -525,7 +525,7 @@ FunctionEnd
!insertmacro MUI_PAGE_INSTFILES
!define MUI_FINISHPAGE_SHOWREADME "$INSTDIR\docs\README.txt"
!define MUI_FINISHPAGE_SHOWREADME "$INSTDIR\doc\README.txt"
!insertmacro MUI_PAGE_FINISH
!insertmacro MUI_UNPAGE_CONFIRM
@@ -558,44 +558,44 @@ Section "-Core installation"
WriteUninstaller "$INSTDIR\Uninstall.exe"
Push "DisplayName"
Push "@CPACK_NSIS_DISPLAY_NAME@"
Call ConditionalAddToRegisty
Call ConditionalAddToRegistry
Push "DisplayVersion"
Push "@CPACK_PACKAGE_VERSION@"
Call ConditionalAddToRegisty
Call ConditionalAddToRegistry
Push "Publisher"
Push "@CPACK_PACKAGE_VENDOR@"
Call ConditionalAddToRegisty
Call ConditionalAddToRegistry
Push "UninstallString"
Push "$INSTDIR\Uninstall.exe"
Call ConditionalAddToRegisty
Call ConditionalAddToRegistry
Push "NoRepair"
Push "1"
Call ConditionalAddToRegisty
Call ConditionalAddToRegistry
!ifdef CPACK_NSIS_ADD_REMOVE
;Create add/remove functionality
Push "ModifyPath"
Push "$INSTDIR\AddRemove.exe"
Call ConditionalAddToRegisty
Call ConditionalAddToRegistry
!else
Push "NoModify"
Push "1"
Call ConditionalAddToRegisty
Call ConditionalAddToRegistry
!endif
; Optional registration
Push "DisplayIcon"
Push "$INSTDIR\@CPACK_NSIS_INSTALLED_ICON_NAME@"
Call ConditionalAddToRegisty
Call ConditionalAddToRegistry
Push "HelpLink"
Push "@CPACK_NSIS_HELP_LINK@"
Call ConditionalAddToRegisty
Call ConditionalAddToRegistry
Push "URLInfoAbout"
Push "@CPACK_NSIS_URL_INFO_ABOUT@"
Call ConditionalAddToRegisty
Call ConditionalAddToRegistry
Push "Contact"
Push "@CPACK_NSIS_CONTACT@"
Call ConditionalAddToRegisty
Call ConditionalAddToRegistry
!insertmacro MUI_STARTMENU_WRITE_BEGIN Application
;Create shortcuts
@@ -607,19 +607,19 @@ Section "-Core installation"
; Write special uninstall registry entries
Push "StartMenu"
Push "$STARTMENU_FOLDER"
Call ConditionalAddToRegisty
Call ConditionalAddToRegistry
Push "DoNotAddToPath"
Push "$DO_NOT_ADD_TO_PATH"
Call ConditionalAddToRegisty
Call ConditionalAddToRegistry
Push "AddToPathAllUsers"
Push "$ADD_TO_PATH_ALL_USERS"
Call ConditionalAddToRegisty
Call ConditionalAddToRegistry
Push "AddToPathCurrentUser"
Push "$ADD_TO_PATH_CURRENT_USER"
Call ConditionalAddToRegisty
Call ConditionalAddToRegistry
Push "InstallToDesktop"
Push "$INSTALL_DESKTOP"
Call ConditionalAddToRegisty
Call ConditionalAddToRegistry
@CPACK_NSIS_EXTRA_INSTALL_COMMANDS@
@@ -731,7 +731,7 @@ Section "Uninstall"
DeleteRegKey SHCTX "Software\@CPACK_PACKAGE_VENDOR@\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@"
; Removes all optional components
!insertmacro SectionList "RemoveSection"
!insertmacro SectionList "RemoveSection_CPack"
!insertmacro MUI_STARTMENU_GETFOLDER Application $MUI_TEMP
@@ -739,7 +739,7 @@ Section "Uninstall"
@CPACK_NSIS_DELETE_ICONS@
@CPACK_NSIS_DELETE_ICONS_EXTRA@
;Delete empty start menu parent diretories
;Delete empty start menu parent directories
StrCpy $MUI_TEMP "$SMPROGRAMS\$MUI_TEMP"
startMenuDeleteLoop:
@@ -752,13 +752,13 @@ Section "Uninstall"
StrCmp "$MUI_TEMP" "$SMPROGRAMS" startMenuDeleteLoopDone startMenuDeleteLoop
startMenuDeleteLoopDone:
; If the user changed the shortcut, then untinstall may not work. This should
; If the user changed the shortcut, then uninstall may not work. This should
; try to fix it.
StrCpy $MUI_TEMP "$START_MENU"
Delete "$SMPROGRAMS\$MUI_TEMP\Uninstall.lnk"
@CPACK_NSIS_DELETE_ICONS_EXTRA@
;Delete empty start menu parent diretories
;Delete empty start menu parent directories
StrCpy $MUI_TEMP "$SMPROGRAMS\$MUI_TEMP"
secondStartMenuDeleteLoop:
-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
-8050
View File
File diff suppressed because it is too large Load Diff
-245
View File
@@ -1,245 +0,0 @@
dnl autoconf.in for Services.
dnl
dnl Anope (c) 2003-2010 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
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])
MYSQLDIR=/usr/local/
AC_ARG_WITH(mysqlpp, [ --with-mysqlpp=/usr/local/ The base directory of the MySQL++ installation],[MYSQLDIR=$withval])
AC_SUBST(INSTDIR)
AC_SUBST(MAKEBIN)
AC_SUBST(MYSQLDIR)
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
All done! Now run "make" (or possibly "gmake") to compile Anope.
See the INSTALL, README and FAQ files if you have any problems.
EOT
+3 -3
View File
@@ -1,6 +1,6 @@
# Only install example.chk and example.conf from this directory
# Only install example.chk and anope.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 tables.sql)
set(DATA example.chk anope.example.conf botserv.example.conf hostserv.example.conf modules.example.conf operserv.example.conf chanserv.example.conf global.example.conf memoserv.example.conf nickserv.example.conf chanstats.example.conf irc2sql.example.conf stats.standalone.example.conf)
install(FILES ${DATA}
DESTINATION data
DESTINATION ${CONF_DIR}
)
File diff suppressed because it is too large Load Diff
+405
View File
@@ -0,0 +1,405 @@
/*
* Example configuration file for BotServ.
*/
/*
* First, create the service. If you do not want to have a 'BotServ', but do want the ability to have
* ChanServ assigned to channels for the use of fantasy commands, you may delete the below 'service' block.
*
* Note that deleting a 'service' block for a pseudoclient that is already online will not remove the
* client, the client becomes no different from a normal service bot, so you will have to use botserv/bot
* to manually delete the client.
*
* You may then want to map some of the below commands to other services, like placing botserv/bot on
* OperServ so you can delete the below client, and mapping assign and unassign to ChanServ so users are
* able to control whether or not ChanServ is in the channel. You may also want to map botserv/set/nobot
* to OperServ so you can restrict who can assign the other core service clients.
*/
service
{
/*
* The name of the BotServ client.
* If you change this value, you probably want to change the client directive in the configuration for the botserv module too.
*/
nick = "BotServ"
/*
* The username of the BotServ client.
*/
user = "services"
/*
* The hostname of the BotServ client.
*/
host = "services.host"
/*
* The realname of the BotServ client.
*/
gecos = "Bot Service"
/*
* The modes this client should use.
* Do not modify this unless you know what you are doing.
*
* These modes are very IRCd specific. If left commented, sane defaults
* are used based on what protocol module you have loaded.
*
* Note that setting this option incorrectly could potentially BREAK some, if
* not all, usefulness of the client. We will not support you if this client is
* unable to do certain things if this option is enabled.
*/
#modes = "+o"
/*
* An optional comma separated list of channels this service should join. Outside
* of log channels this is not very useful, as the service will just idle in the
* specified channels, and will not accept any types of commands.
*
* Prefixes may be given to the channels in the form of mode characters or prefix symbols.
*/
#channels = "@#services,#mychan"
}
/*
* Core BotServ module.
*
* Provides essential functionality for BotServ.
*/
module
{
name = "botserv"
/*
* The name of the client that should be BotServ.
*
* This directive is optional.
*/
client = "BotServ"
/*
* The default bot options for newly registered channels. Note that changing these options
* will have no effect on channels which are already registered. The list must be separated
* by spaces.
*
* The options are:
* - dontkickops: Channel operators will be protected against BotServ kicks
* - dontkickvoices: Voiced users will be protected against BotServ kicks
* - greet: The channel's BotServ bot will greet incoming users that have set a greet
* in their NickServ settings
* - fantasy: Enables the use of BotServ fantasy commands in the channel
*
* This directive is optional, if left blank, there will be no defaults.
*/
defaults = "greet fantasy"
/*
* The minimum number of users there must be in a channel before the bot joins it. The best
* value for this setting is 1 or 2. This can be 0, the service bots will not part unless
* specifically unassigned, and will keep the channel open.
*/
minusers = 1
/*
* The bots are currently not affected by any modes or bans when they try to join a channel.
* But some people may want to make it act like a real bot, that is, for example, remove all
* the bans affecting the bot before joining the channel, remove a ban that affects the bot
* set by a user when it is in the channel, and so on. Since it consumes a bit more CPU
* time, you should not enable this on larger networks.
*
* This directive is optional.
*/
#smartjoin = yes
/*
* Modes to set on service bots when they join channels, comment this out for no modes
*
* This directive is optional.
*/
botmodes = "ao"
/*
* User modes to set on service bots. Read the comment about the service:modes directive
* on why this can be a bad idea to set.
*/
#botumodes = "i"
}
/*
* Core BotServ commands.
*
* In Anope modules can provide (multiple) commands, each of which has a unique command name. Once these modules
* are loaded you can then configure the commands to be added to any client you like with any name you like.
*
* Additionally, you may provide a permission name that must be in the opertype of users executing the command.
*
* Sane defaults are provided below that do not need to be edited unless you wish to change the default behavior.
*/
/* Give it a help command. */
command { service = "BotServ"; name = "HELP"; command = "generic/help"; }
/*
* bs_assign
*
* Provides the commands:
* botserv/assign - Used to assign BotServ bots to channels
* botserv/unassign - Used to unassign BotServ bots
* botserv/set/nobot - Used to prohibit channels from being assigned BotServ bots.
*
* Used for assigning and unassigning bots to channels.
*/
module { name = "bs_assign" }
command { service = "BotServ"; name = "ASSIGN"; command = "botserv/assign"; }
command { service = "BotServ"; name = "UNASSIGN"; command = "botserv/unassign"; }
command { service = "BotServ"; name = "SET NOBOT"; command = "botserv/set/nobot"; permission = "botserv/set/nobot"; }
/*
* bs_autoassign
*
* Allows service bots to be automatically assigned to channels upon registration.
*/
#module
{
name = "bs_autoassign"
/*
* Automatically assign ChanServ to channels upon registration.
*/
bot = "ChanServ"
}
/*
* bs_badwords
*
* Provides the command botserv/badwords.
*
* Used for controlling the channel badword list.
*/
module
{
name = "bs_badwords"
/*
* The maximum number of entries a single bad words list can have.
*/
badwordsmax = 32
/*
* If set, BotServ will use case sensitive checking for badwords.
*
* This directive is optional.
*/
#casesensitive = yes
}
command { service = "BotServ"; name = "BADWORDS"; command = "botserv/badwords"; }
/*
* bs_bot
*
* Provides the command botserv/bot.
*
* Used for administrating BotServ bots.
*/
module { name = "bs_bot" }
command { service = "BotServ"; name = "BOT"; command = "botserv/bot"; permission = "botserv/bot"; }
/*
* bs_botlist
*
* Provides the command botserv/botlist.
*
* Used for listing all available bots.
*/
module { name = "bs_botlist" }
command { service = "BotServ"; name = "BOTLIST"; command = "botserv/botlist"; }
/*
* bs_control
*
* Provides the commands botserv/act and botserv/say.
*
* Used for making the bot message a channel.
*/
module { name = "bs_control" }
command { service = "BotServ"; name = "ACT"; command = "botserv/act"; }
command { service = "BotServ"; name = "SAY"; command = "botserv/say"; }
/*
* bs_info
*
* Provides the command botserv/info.
*
* Used for getting information on bots or channels.
*/
module { name = "bs_info" }
command { service = "BotServ"; name = "INFO"; command = "botserv/info"; }
/*
* bs_kick
*
* Provides the commands:
* botserv/kick - Dummy help wrapper for the KICK command.
* botserv/kick/amsg - Configures BotServ's AMSG kicker.
* botserv/kick/badwords - Configures BotServ's badwords kicker.
* botserv/kick/bolds - Configures BotServ's bold text kicker.
* botserv/kick/caps - Configures BotServ's capital letters kicker.
* botserv/kick/colors - Configures BotServ's color kicker.
* botserv/kick/flood - Configures BotServ's flood kicker.
* botserv/kick/italics - Configures BotServ's italics kicker.
* botserv/kick/repeat - Configures BotServ's repeat kicker.
* botserv/kick/reverses - Configures BotServ's reverse kicker.
* botserv/kick/underlines - Configures BotServ's underline kicker.
* botserv/set/dontkickops - Used for preventing BotServ from kicking channel operators.
* botserv/set/dontkickvoices - Used for preventing BotServ from kicking voices.
*
* Used for configuring what bots should kick for.
*/
module
{
name = "bs_kick"
/*
* The amount of time that data for a user is valid in BotServ. If the data exceeds this time,
* it is reset or deleted depending on the case. Do not set it too high, otherwise your
* resources will be slightly affected.
*/
keepdata = 10m
/*
* If set, the bots will use a kick reason that does not state the word when it is kicking.
* This is especially useful if you have young people on your network.
*
* This directive is optional.
*/
gentlebadwordreason = yes
}
command { service = "BotServ"; name = "KICK"; command = "botserv/kick"; }
command { service = "BotServ"; name = "KICK AMSG"; command = "botserv/kick/amsg"; }
command { service = "BotServ"; name = "KICK BADWORDS"; command = "botserv/kick/badwords"; }
command { service = "BotServ"; name = "KICK BOLDS"; command = "botserv/kick/bolds"; }
command { service = "BotServ"; name = "KICK CAPS"; command = "botserv/kick/caps"; }
command { service = "BotServ"; name = "KICK COLORS"; command = "botserv/kick/colors"; }
command { service = "BotServ"; name = "KICK FLOOD"; command = "botserv/kick/flood"; }
command { service = "BotServ"; name = "KICK ITALICS"; command = "botserv/kick/italics"; }
command { service = "BotServ"; name = "KICK REPEAT"; command = "botserv/kick/repeat"; }
command { service = "BotServ"; name = "KICK REVERSES"; command = "botserv/kick/reverses"; }
command { service = "BotServ"; name = "KICK UNDERLINES"; command = "botserv/kick/underlines"; }
command { service = "BotServ"; name = "SET DONTKICKOPS"; command = "botserv/set/dontkickops"; }
command { service = "BotServ"; name = "SET DONTKICKVOICES"; command = "botserv/set/dontkickvoices"; }
/*
* bs_set
*
* Provides the commands:
* botserv/set/private - Used to prohibit specific BotServ bots from being assigned to channels.
*/
module { name = "bs_set" }
command { service = "BotServ"; name = "SET"; command = "botserv/set"; }
command { service = "BotServ"; name = "SET BANEXPIRE"; command = "botserv/set/banexpire"; }
command { service = "BotServ"; name = "SET PRIVATE"; command = "botserv/set/private"; permission = "botserv/set/private"; }
/*
* greet
*
* Provides the commands:
* botserv/set/greet - Used for enabling or disabling BotServ's greet messages in a channel.
* nickserv/set/greet, nickserv/saset/greet - Used for changing a users greet message, which is displayed when they enter channels.
*/
module { name = "greet" }
command { service = "BotServ"; name = "SET GREET"; command = "botserv/set/greet"; }
command { service = "NickServ"; name = "SET GREET"; command = "nickserv/set/greet"; }
command { service = "NickServ"; name = "SASET GREET"; command = "nickserv/saset/greet"; permission = "nickserv/saset/greet"; }
/*
* GREET privilege.
*
* Used by 'greet'.
*
* Users with this privilege have their greet shown when they join channels.
*/
privilege
{
name = "GREET"
desc = _("Greet message displayed on join")
rank = 40
level = 5
flag = "g"
xop = "AOP"
}
/*
* fantasy
*
* Allows 'fantasist' commands to be used in channels.
*
* Provides the commands:
* botserv/set/fantasy - Used for enabling or disabling BotServ's fantasist commands.
*/
module
{
name = "fantasy"
/*
* Defines the prefixes for fantasy commands in channels. One of these characters will have to be prepended
* to all fantasy commands. If you choose "!", for example, fantasy commands will be "!kick",
* "!op", etc. This directive is optional, if left out, the default fantasy character is "!".
*/
#fantasycharacter = "!."
}
command { service = "BotServ"; name = "SET FANTASY"; command = "botserv/set/fantasy"; }
/*
* Fantasy commands
*
* Fantasy commands can be executed in channels that have a BotServ bot by prefixing the
* command with one of the fantasy characters configured in botserv's fantasycharacter
* directive.
*
* Sane defaults are provided below that do not need to be edited unless you wish to change the default behavior.
*/
fantasy { name = "ACCESS"; command = "chanserv/access"; }
fantasy { name = "AKICK"; command = "chanserv/akick"; }
fantasy { name = "AOP"; command = "chanserv/xop"; }
fantasy { name = "BAN"; command = "chanserv/ban"; }
fantasy { name = "CLONE"; command = "chanserv/clone"; }
fantasy { name = "DEHALFOP"; command = "chanserv/modes"; }
fantasy { name = "DEOP"; command = "chanserv/modes"; }
fantasy { name = "DEOWNER"; command = "chanserv/modes"; }
fantasy { name = "DEPROTECT"; command = "chanserv/modes"; }
fantasy { name = "DEVOICE"; command = "chanserv/modes"; }
fantasy { name = "DOWN"; command = "chanserv/down"; }
fantasy { name = "ENFORCE"; command = "chanserv/enforce"; }
fantasy { name = "ENTRYMSG"; command = "chanserv/entrymsg"; }
fantasy { name = "FLAGS"; command = "chanserv/flags"; }
fantasy { name = "HALFOP"; command = "chanserv/modes"; }
fantasy { name = "HELP"; command = "generic/help"; prepend_channel = false; }
fantasy { name = "HOP"; command = "chanserv/xop"; }
fantasy { name = "INFO"; command = "chanserv/info"; prepend_channel = false; }
fantasy { name = "INVITE"; command = "chanserv/invite"; }
fantasy { name = "K"; command = "chanserv/kick"; }
fantasy { name = "KB"; command = "chanserv/ban"; }
fantasy { name = "KICK"; command = "chanserv/kick"; }
fantasy { name = "LEVELS"; command = "chanserv/levels"; }
fantasy { name = "LIST"; command = "chanserv/list"; prepend_channel = false; }
fantasy { name = "LOG"; command = "chanserv/log"; }
fantasy { name = "MODE"; command = "chanserv/mode"; }
fantasy { name = "MUTE"; command = "chanserv/ban"; kick = no; mode = "QUIET"; }
fantasy { name = "OP"; command = "chanserv/modes"; }
fantasy { name = "OWNER"; command = "chanserv/modes"; }
fantasy { name = "PROTECT"; command = "chanserv/modes"; }
fantasy { name = "QOP"; command = "chanserv/xop"; }
fantasy { name = "SEEN"; command = "chanserv/seen"; prepend_channel = false; }
fantasy { name = "SOP"; command = "chanserv/xop"; }
fantasy { name = "STATUS"; command = "chanserv/status"; }
fantasy { name = "SUSPEND"; command = "chanserv/suspend"; permission = "chanserv/suspend"; }
fantasy { name = "SYNC"; command = "chanserv/sync"; }
fantasy { name = "TOPIC"; command = "chanserv/topic"; }
fantasy { name = "UNBAN"; command = "chanserv/unban"; }
fantasy { name = "UNSUSPEND"; command = "chanserv/unsuspend"; permission = "chanserv/suspend"; }
fantasy { name = "UP"; command = "chanserv/up"; }
fantasy { name = "VOICE"; command = "chanserv/modes"; }
fantasy { name = "VOP"; command = "chanserv/xop"; }
File diff suppressed because it is too large Load Diff
+51
View File
@@ -0,0 +1,51 @@
/*
* Example configuration file for Chanstats.
* Make sure BotServ, ChanServ and NickServ are running.
*/
module
{
name = "chanstats"
/*
* The name of this engine.
* This must match with the name of an SQL engine block.
*/
engine = "mysql/main"
/*
* An optional prefix to prepended to the name of each created table.
* Do not use the same prefix for other programs.
*/
prefix = "anope_"
smileyshappy = ":) :-) ;) ;-) :D :-D :P :-P"
smileyssad = ":( :-( ;( ;-("
smileysother = ":/ :-/"
/*
* Enable Chanstats for newly registered nicks / channels.
*/
ns_def_chanstats = yes
cs_def_chanstats = yes
}
command { service = "ChanServ"; name = "SET CHANSTATS"; command = "chanserv/set/chanstats"; }
command { service = "NickServ"; name = "SET CHANSTATS"; command = "nickserv/set/chanstats"; }
command { service = "NickServ"; name = "SASET CHANSTATS"; command = "nickserv/saset/chanstats"; permission = "nickserv/saset/chanstats"; }
module { name = "cs_fantasy_stats" }
command { service = "ChanServ"; name = "STATS"; command = "chanserv/stats"; }
command { service = "ChanServ"; name = "GSTATS"; command = "chanserv/gstats"; }
fantasy { name = "STATS"; command = "chanserv/stats"; }
fantasy { name = "GSTATS"; command = "chanserv/gstats"; }
module { name = "cs_fantasy_top" }
command { service = "ChanServ"; name = "TOP"; command = "chanserv/top"; }
command { service = "ChanServ"; name = "TOP10"; command = "chanserv/top10"; }
command { service = "ChanServ"; name = "GTOP"; command = "chanserv/gtop"; }
command { service = "ChanServ"; name = "GTOP10"; command = "chanserv/gtop10"; }
fantasy { name = "TOP"; command = "chanserv/top"; }
fantasy { name = "TOP10"; command = "chanserv/top10"; }
fantasy { name = "GTOP"; command = "chanserv/gtop"; }
fantasy { name = "GTOP10"; command = "chanserv/gtop10"; }
+6 -5
View File
@@ -9,16 +9,16 @@
###############################################################
# Anope binary directory
ANOPATH=/home/ircd/services/bin
ANOPATH=/home/ircd/anope/bin
# Anope data directory
ANODATA=/home/ircd/services/data
ANODATA=/home/ircd/anope/data
# Name of the pid file
ANOPIDF=services.pid
ANOPIDF=anope.pid
# Name of the executable
ANOPROG=services
ANOPROG=anope
# Parameters to pass to the executable
ANOARGS=""
@@ -37,7 +37,8 @@ cd $ANOPATH
if [ -f "$ANODATA/$ANOPIDF" ]
then
ANOPID=`cat "$ANODATA/$ANOPIDF"`
if [ `ps auwx | grep $ANOPROG | grep $ANOPID | grep -v -c grep` = 1 ]
kill -0 $ANOPID 2>/dev/null
if [ $? -eq 0 ]
then
exit
fi
-1551
View File
File diff suppressed because it is too large Load Diff
+115
View File
@@ -0,0 +1,115 @@
/*
* Example configuration file for Global.
*/
/*
* First, create the service.
*/
service
{
/*
* The name of the Global client.
* If you change this value, you probably want to change the client directive in the configuration for the global module too.
*/
nick = "Global"
/*
* The username of the Global client.
*/
user = "services"
/*
* The hostname of the Global client.
*/
host = "services.host"
/*
* The realname of the Global client.
*/
gecos = "Global Noticer"
/*
* The modes this client should use.
* Do not modify this unless you know what you are doing.
*
* These modes are very IRCd specific. If left commented, sane defaults
* are used based on what protocol module you have loaded.
*
* Note that setting this option incorrectly could potentially BREAK some, if
* not all, usefulness of the client. We will not support you if this client is
* unable to do certain things if this option is enabled.
*/
#modes = "+o"
/*
* An optional comma separated list of channels this service should join. Outside
* of log channels this is not very useful, as the service will just idle in the
* specified channels, and will not accept any types of commands.
*
* Prefixes may be given to the channels in the form of mode characters or prefix symbols.
*/
#channels = "@#services,#mychan"
}
/*
* Core Global module.
*
* Provides essential functionality for Global.
*/
module
{
name = "global"
/*
* The name of the client that should be Global.
*/
client = "Global"
/*
* This is the global message that will be sent when Anope is being
* shutdown/restarted.
*
* This directive is optional.
*/
#globaloncycledown = "Services are restarting, they will be back shortly - please be good while they're gone"
/*
* This is the global message that will be sent when Anope (re)joins the
* network.
*
* This directive is optional.
*/
#globaloncycleup = "Services are now back online - have a nice day"
/*
* If set, Anope will hide the IRC Operator's nick in a global
* message/notice.
*
* This directive is optional.
*/
#anonymousglobal = yes
}
/*
* Core Global commands.
*
* In Anope modules can provide (multiple) commands, each of which has a unique command name. Once these modules
* are loaded you can then configure the commands to be added to any client you like with any name you like.
*
* Additionally, you may provide a permission name that must be in the opertype of users executing the command.
*
* Sane defaults are provided below that do not need to be edited unless you wish to change the default behavior.
*/
/* Give it a help command. */
command { service = "Global"; name = "HELP"; command = "generic/help"; }
/*
* gl_global
*
* Provides the command global/global.
*
* Used for sending a message to every online user.
*/
module { name = "gl_global" }
command { service = "Global"; name = "GLOBAL"; command = "global/global"; permission = "global/global"; }
+188
View File
@@ -0,0 +1,188 @@
/*
* Example configuration file for HostServ.
*/
/*
* First, create the service.
*/
service
{
/*
* The name of the HostServ client.
* If you change this value, you probably want to change the client directive in the configuration for the hostserv module too.
*/
nick = "HostServ"
/*
* The username of the HostServ client.
*/
user = "services"
/*
* The hostname of the HostServ client.
*/
host = "services.host"
/*
* The realname of the HostServ client.
*/
gecos = "vHost Service"
/*
* The modes this client should use.
* Do not modify this unless you know what you are doing.
*
* These modes are very IRCd specific. If left commented, sane defaults
* are used based on what protocol module you have loaded.
*
* Note that setting this option incorrectly could potentially BREAK some, if
* not all, usefulness of the client. We will not support you if this client is
* unable to do certain things if this option is enabled.
*/
#modes = "+o"
/*
* An optional comma separated list of channels this service should join. Outside
* of log channels this is not very useful, as the service will just idle in the
* specified channels, and will not accept any types of commands.
*
* Prefixes may be given to the channels in the form of mode characters or prefix symbols.
*/
#channels = "@#services,#mychan"
}
/*
* Core HostServ module.
*
* Provides essential functionality for HostServ.
*/
module
{
name = "hostserv"
/*
* The name of the client that should be HostServ.
*/
client = "HostServ"
/*
* If enabled, vhosts are activated on users immediately when they are set.
*/
activate_on_set = false
}
/*
* Core HostServ commands.
*
* In Anope modules can provide (multiple) commands, each of which has a unique command name. Once these modules
* are loaded you can then configure the commands to be added to any client you like with any name you like.
*
* Additionally, you may provide a permission name that must be in the opertype of users executing the command.
*
* Sane defaults are provided below that do not need to be edited unless you wish to change the default behavior.
*/
/* Give it a help command. */
command { service = "HostServ"; name = "HELP"; command = "generic/help"; }
/*
* hs_del
*
* Provides the commands hostserv/del and hostserv/delall.
*
* Used for removing users' vHosts.
*/
module { name = "hs_del" }
command { service = "HostServ"; name = "DEL"; command = "hostserv/del"; permission = "hostserv/del"; }
command { service = "HostServ"; name = "DELALL"; command = "hostserv/delall"; permission = "hostserv/del"; }
/*
* hs_group
*
* Provides the command hostserv/group.
*
* Used for grouping one vHost to many nicks.
*/
module
{
name = "hs_group"
/*
* Upon nickserv/group, this option syncs the nick's main vHost to the grouped nick.
*/
syncongroup = true
/*
* This makes vhosts act as if they are per account.
*/
synconset = true
}
command { service = "HostServ"; name = "GROUP"; command = "hostserv/group"; }
/*
* hs_list
*
* Provides the command hostserv/list.
*
* Used for listing actively set vHosts.
*/
module { name = "hs_list" }
command { service = "HostServ"; name = "LIST"; command = "hostserv/list"; permission = "hostserv/list"; }
/*
* hs_off
*
* Provides the command hostserv/off.
*
* Used for turning off your vHost.
*/
module { name = "hs_off" }
command { service = "HostServ"; name = "OFF"; command = "hostserv/off"; }
/*
* hs_on
*
* Provides the command hostserv/on.
*
* Used for turning on your vHost.
*/
module { name = "hs_on" }
command { service = "HostServ"; name = "ON"; command = "hostserv/on"; }
/*
* hs_request
*
* Provides the commands hostserv/request, hostserv/activate, hostserv/reject, and hostserv/waiting.
*
* Used to manage vHosts requested by users.
*/
module
{
name = "hs_request"
/*
* If set, Anope will send a memo to the user requesting a vHost when it's been
* approved or rejected.
*/
#memouser = yes
/*
* If set, Anope will send a memo to all services staff when a new vHost is requested.
*/
#memooper = yes
}
command { service = "HostServ"; name = "REQUEST"; command = "hostserv/request"; }
command { service = "HostServ"; name = "ACTIVATE"; command = "hostserv/activate"; permission = "hostserv/set"; }
command { service = "HostServ"; name = "REJECT"; command = "hostserv/reject"; permission = "hostserv/set"; }
command { service = "HostServ"; name = "WAITING"; command = "hostserv/waiting"; permission = "hostserv/set"; }
/*
* hs_set
*
* Provides the commands hostserv/set and hostserv/setall.
*
* Used for setting users' vHosts.
*/
module { name = "hs_set" }
command { service = "HostServ"; name = "SET"; command = "hostserv/set"; permission = "hostserv/set"; }
command { service = "HostServ"; name = "SETALL"; command = "hostserv/setall"; permission = "hostserv/set"; }
+97
View File
@@ -0,0 +1,97 @@
/*
* Example configuration file for the irc2sql gateway
*
*/
service
{
/*
* The name of the StatServ client.
*/
nick = "StatServ"
/*
* The username of the StatServ client.
*/
user = "StatServ"
/*
* The hostname of the StatServ client.
*/
host = "stats.host"
/*
* The realname of the StatServ client.
*/
gecos = "Statistical Service"
/*
* The modes this client should use.
* Do not modify this unless you know what you are doing.
*
* These modes are very IRCd specific. If left commented, sane defaults
* are used based on what protocol module you have loaded.
*
* Note that setting this option incorrectly could potentially BREAK some, if
* not all, usefulness of the client. We will not support you if this client is
* unable to do certain things if this option is enabled.
*/
#modes = "+o"
/*
* An optional comma separated list of channels this service should join. Outside
* of log channels this is not very useful, as the service will just idle in the
* specified channels, and will not accept any types of commands.
*
* Prefixes may be given to the channels in the form of mode characters or prefix symbols.
*/
#channels = "@#stats,#mychan"
}
module
{
name = "irc2sql"
/*
* The name of the client that should send the CTCP VERSION requests.
* It must already exist or must be defined in the following service block.
*/
client = "StatServ"
/*
* The name of the SQL engine to use.
* This must be MySQL and must match the name in the mysql{} block
*/
engine = "mysql/main"
/*
* An optional prefix to prepended to the name of each created table.
* Do not use the same prefix for other programs.
*/
prefix = "anope_"
/*
* GeoIP - Automatically adds users geoip location to the user table.
* Tables are created by irc2sql, you have to run the
* geoipupdate script after you started Anope to download
* and import the GeoIP database.
*
* The geoip database can be the smaller "country" database or the
* larger "city" database. Comment to disable geoip lookup.
*/
geoip_database = "country"
/*
* Get the CTCP version from users
* The users connecting to the network will receive a CTCP VERSION
* request from the above configured stats client
*/
ctcpuser = "yes"
/*
* Send out CTCP VERSION requests to users during burst.
* Disable this if you restart Anope often and don't want to
* annoy your users.
*/
ctcpeob = "yes"
}
+243
View File
@@ -0,0 +1,243 @@
/*
* Example configuration file for MemoServ.
*/
/*
* First, create the service.
*/
service
{
/*
* The name of the MemoServ client.
* If you change this value, you probably want to change the client directive in the configuration for the memoserv module too.
*/
nick = "MemoServ"
/*
* The username of the MemoServ client.
*/
user = "services"
/*
* The hostname of the MemoServ client.
*/
host = "services.host"
/*
* The realname of the MemoServ client.
*/
gecos = "Memo Service"
/*
* The modes this client should use.
* Do not modify this unless you know what you are doing.
*
* These modes are very IRCd specific. If left commented, sane defaults
* are used based on what protocol module you have loaded.
*
* Note that setting this option incorrectly could potentially BREAK some, if
* not all, usefulness of the client. We will not support you if this client is
* unable to do certain things if this option is enabled.
*/
#modes = "+o"
/*
* An optional comma separated list of channels this service should join. Outside
* of log channels this is not very useful, as the service will just idle in the
* specified channels, and will not accept any types of commands.
*
* Prefixes may be given to the channels in the form of mode characters or prefix symbols.
*/
#channels = "@#services,#mychan"
}
/*
* Core MemoServ module.
*
* Provides essential functionality for MemoServ.
*/
module
{
name = "memoserv"
/*
* The name of the client that should be MemoServ. Clients are configured
* with the service blocks.
*/
client = "MemoServ"
/*
* The maximum number of memos a user is allowed to keep by default. Normal users may set the
* limit anywhere between 0 and this value. Services Admins can change it to any value or
* disable it.
*
* This directive is optional, but recommended. If not set, the limit is disabled
* by default, and normal users can set any limit they want.
*/
maxmemos = 20
/*
* The delay between consecutive uses of the MemoServ SEND command. This can help prevent spam
* as well as denial-of-service attacks from sending large numbers of memos and filling up disk
* space (and memory). The default 3-second wait means a maximum average of 150 bytes of memo
* per second per user under the current IRC protocol.
*
* This directive is optional, but recommended.
*/
senddelay = 3s
}
/*
* Core MemoServ commands.
*
* In Anope modules can provide (multiple) commands, each of which has a unique command name. Once these modules
* are loaded you can then configure the commands to be added to any client you like with any name you like.
*
* Additionally, you may provide a permission name that must be in the opertype of users executing the command.
*
* Sane defaults are provided below that do not need to be edited unless you wish to change the default behavior.
*/
/* Give it a help command. */
command { service = "MemoServ"; name = "HELP"; command = "generic/help"; }
/*
* ms_cancel
*
* Provides the command memoserv/cancel.
*
* Used to cancel memos already sent but not yet read.
*/
module { name = "ms_cancel" }
command { service = "MemoServ"; name = "CANCEL"; command = "memoserv/cancel"; }
/*
* ms_check
*
* Provides the command memoserv/check.
*
* Used to check if a sent memo has been read.
*/
module { name = "ms_check" }
command { service = "MemoServ"; name = "CHECK"; command = "memoserv/check"; }
/*
* ms_del
*
* Provides the command memoserv/del.
*
* Used to delete your memos.
*/
module { name = "ms_del" }
command { service = "MemoServ"; name = "DEL"; command = "memoserv/del"; }
/*
* ms_ignore
*
* Provides the command memoserv/ignore.
*
* Used to ignore memos from specific users.
*/
module
{
name = "ms_ignore"
/*
* The maximum number of entries that may be on a memo ignore list.
*
* This directive is optional.
*/
max = 32
}
command { service = "MemoServ"; name = "IGNORE"; command = "memoserv/ignore"; }
/*
* ms_info
*
* Provides the command memoserv/info.
*
* Used to show memo related information about an account or a channel.
*/
module { name = "ms_info" }
command { service = "MemoServ"; name = "INFO"; command = "memoserv/info"; }
/*
* ms_list
*
* Provides the command memoserv/list.
*
* Used to list your current memos.
*/
module { name = "ms_list" }
command { service = "MemoServ"; name = "LIST"; command = "memoserv/list"; }
/*
* ms_read
*
* Provides the command memoserv/read.
*
* Used to read your memos.
*/
module { name = "ms_read" }
command { service = "MemoServ"; name = "READ"; command = "memoserv/read"; }
/*
* ms_rsend
*
* Provides the command memoserv/rsend.
*
* Used to send a memo requiring a receipt be sent back once it is read.
*
* Requires configuring memoserv:memoreceipt.
*/
#module
{
name = "ms_rsend"
/*
* Only allow Services Operators to use ms_rsend.
*
* This directive is optional.
*/
operonly = false
}
#command { service = "MemoServ"; name = "RSEND"; command = "memoserv/rsend"; }
/*
* ms_send
*
* Provides the command memoserv/send.
*
* Used to send memos.
*/
module { name = "ms_send" }
command { service = "MemoServ"; name = "SEND"; command = "memoserv/send"; }
/*
* ms_sendall
*
* Provides the command memoserv/sendall.
*
* Used to send a mass memo to every registered user.
*/
module { name = "ms_sendall" }
command { service = "MemoServ"; name = "SENDALL"; command = "memoserv/sendall"; permission = "memoserv/sendall"; }
/*
* ms_set
*
* Provides the command memoserv/set.
*
* Used to set settings such as how you are notified of new memos, and your memo limit.
*/
module { name = "ms_set" }
command { service = "MemoServ"; name = "SET"; command = "memoserv/set"; }
/*
* ms_staff
*
* Provides the command memoserv/staff.
*
* Used to send a memo to all registered staff members.
*/
module { name = "ms_staff" }
command { service = "MemoServ"; name = "STAFF"; command = "memoserv/staff"; permission = "memoserv/staff"; }
+802
View File
@@ -0,0 +1,802 @@
/*
* [OPTIONAL] Non-Core Modules
*
* The following blocks are used to load all non-core modules, including 3rd-party modules.
* Modules can be prevented from loading by commenting out the line, other modules can be added by
* adding a module block. These modules will be loaded prior to Anope connecting to your network.
*
* Note that some of these modules are labeled EXTRA, and must be enabled prior to compiling by
* running the 'extras' script on Linux and UNIX.
*/
/*
* help
*
* Provides the command generic/help.
*
* This is a generic help command that can be used with any client.
*/
module { name = "help" }
/*
* dns
*
* Adds support for the DNS protocol. By itself this module does nothing useful,
* but other modules such as dnsbl and os_dns require this.
*/
#module
{
name = "dns"
/*
* The nameserver to use for resolving hostnames, must be an IP or a resolver configuration file.
* The below should work fine on all UNIX-like systems. Windows users will have to find their nameservers
* from ipconfig /all and put the IP here.
*/
nameserver = "/etc/resolv.conf"
#nameserver = "127.0.0.1"
/*
* How long to wait in seconds before a DNS query has timed out.
*/
timeout = 5
/* Only edit below if you are expecting to use os_dns or otherwise answer DNS queries. */
/*
* The IP and port services use to listen for DNS queries.
* Note that ports less than 1024 are privileged on UNIX/Linux systems, and
* require Anope to be started as root. If you do this, it is recommended you
* set options:user and options:group so Anope can change users after binding
* to this port.
*/
ip = "0.0.0.0"
port = 53
/*
* SOA record information.
*/
/* E-mail address of the DNS administrator. */
admin = "admin@example.com"
/* This should be the names of the public facing nameservers serving the records. */
nameservers = "ns1.example.com ns2.example.com"
/* The time slave servers are allowed to cache. This should be reasonably low
* if you want your records to be updated without much delay.
*/
refresh = 3600
/* A notify block. There should probably be one per nameserver listed in 'nameservers'.
*/
notify
{
ip = "192.0.2.0"
port = 53
}
}
/*
* dnsbl
*
* Allows configurable DNS blacklists to check connecting users against. If a user
* is found on the blacklist they will be immediately banned. This is a crucial module
* to prevent bot attacks.
*/
#module
{
name = "dnsbl"
/*
* If set, Anope will check clients against the DNSBLs when services connect to its uplink.
* This is not recommended, and on large networks will open a very large amount of DNS queries.
* Whilst services are not drastically affected by this, your nameserver/DNSBL might care.
*/
check_on_connect = no
/*
* If set, Anope will check clients when coming back from a netsplit. This can cause a large number
* of DNS queries open at once. Whilst services are not drastically affected by this, your nameserver/DNSBL
* might care.
*/
check_on_netburst = no
/*
* If set, OperServ will add clients found in the DNSBL to the akill list. Without it, OperServ simply sends
* a timed G/K-line to the IRCd and forgets about it. Can be useful if your akill list is being fill up by bots.
*/
add_to_akill = yes
blacklist
{
/* Name of the blacklist. */
name = "rbl.efnetrbl.org"
/* How long to set the ban for. */
time = 4h
/* Reason for akill.
* %n is the nick of the user
* %u is the ident/username of the user
* %g is the realname of the user
* %h is the hostname of the user
* %i is the IP of the user
* %r is the reply reason (configured below). Will be nothing if not configured.
* %N is the network name set in networkinfo:networkname
*/
reason = "You are listed in the EFnet RBL, visit https://rbl.efnetrbl.org/?i=%i for info"
/* Replies to ban and their reason. If no replies are configured, all replies get banned. */
reply
{
code = 1
reason = "Open Proxy"
}
#reply
{
code = 2
reason = "spamtrap666"
}
#reply
{
code = 3
reason = "spamtrap50"
}
reply
{
code = 4
reason = "TOR"
/*
* If set, users identified to services at the time the result comes back
* will not be banned.
*/
#allow_account = yes
}
reply
{
code = 5
reason = "Drones / Flooding"
}
}
#blacklist
{
name = "dnsbl.dronebl.org"
time = 4h
reason = "You have a host listed in the DroneBL. For more information, visit https://dronebl.org/lookup_branded?ip=%i&network=%N"
}
/* Exempt localhost from DNSBL checks */
exempt { ip = "127.0.0.0/8" }
}
/*
* helpchan
*
* Gives users who are op in the specified help channel usermode +h (helpop).
*/
#module
{
name = "helpchan"
helpchannel = "#help"
}
/*
* httpd
*
* Allows services to serve web pages. By itself, this module does nothing useful.
*
* Note that using this will allow users to get the IP of your services.
* To prevent this we recommend using a reverse proxy or a tunnel.
*/
#module
{
name = "httpd"
httpd
{
/* Name of this service. */
name = "httpd/main"
/* IP to listen on. */
ip = "0.0.0.0"
/* Port to listen on. */
port = 8080
/* Time before connections to this server are timed out. */
timeout = 30
/* Listen using SSL. Requires an SSL module. */
#ssl = yes
/* If you are using a reverse proxy that sends one of the
* extforward_headers set below, set this to its IP.
* This allows services to obtain the real IP of users by
* reading the forwarded-for HTTP header.
* Multiple IP addresses can be specified separated by a space character.
*/
#extforward_ip = "192.168.0.255 192.168.1.255"
/* The header to look for. These probably work as is. */
extforward_header = "X-Forwarded-For Forwarded-For"
}
}
/*
* ldap [EXTRA]
*
* This module allows other modules to use LDAP. By itself, this module does nothing useful.
*/
#module
{
name = "ldap"
ldap
{
server = "ldap://127.0.0.1"
/*
* Admin credentials used for performing searches and adding users.
*/
admin_binddn = "cn=Manager,dc=anope,dc=org"
admin_password = "secret"
}
}
/*
* ldap_authentication [EXTRA]
*
* This module allows many commands such as IDENTIFY, RELEASE, RECOVER, GHOST, etc. use
* LDAP to authenticate users. Requires ldap.
*/
#module
{
name = "ldap_authentication"
/*
* The distinguished name used for searching for users's accounts.
*/
basedn = "ou=users,dc=anope,dc=org"
/*
* The search filter used to look up users's accounts.
* %account is replaced with the user's account.
* %object_class is replaced with the object_class configured below.
*/
search_filter = "(&(uid=%account)(objectClass=%object_class))"
/*
* The object class used by LDAP to store user account information.
* This is used for adding new users to LDAP if registration is allowed.
*/
object_class = "anopeUser"
/*
* The attribute value used for account names.
*/
username_attribute = "uid"
/*
* The attribute value used for email addresses.
* This directive is optional.
*/
email_attribute = "email"
/*
* The attribute value used for passwords.
* Used when registering new accounts in LDAP.
*/
password_attribute = "userPassword"
/*
* If set, the reason to give the users who try to register with NickServ,
* including nick registration from grouping.
*
* If not set, then registration is not blocked.
*/
#disable_register_reason = "To register on this network visit https://some.misconfigured.site/register"
/*
* If set, the reason to give the users who try to "/msg NickServ SET EMAIL".
* If not set, then email changing is not blocked.
*/
#disable_email_reason = "To change your email address visit https://some.misconfigured.site"
}
/*
* ldap_oper [EXTRA]
*
* This module dynamically ties users to Anope opertypes when they identify
* via LDAP group membership. Requires ldap.
*
* Note that this doesn't give the user privileges on the IRCd, only in Anope.
*/
#module
{
name = "ldap_oper"
/*
* An optional binddn to use when searching for groups.
* %a is replaced with the account name of the user.
*/
#binddn = "cn=Manager,dc=anope,dc=org"
/*
* An optional password to bind with.
*/
#password = "secret"
/*
* The base DN where the groups are.
*/
basedn = "ou=groups,dc=anope,dc=org"
/*
* The filter to use when searching for users.
* %a is replaced with the account name of the user.
*/
filter = "(member=uid=%a,ou=users,dc=anope,dc=org)"
/*
* The attribute of the group that is the name of the opertype.
* The cn attribute should match a known opertype in the config.
*/
opertype_attribute = "cn"
}
/*
* mysql [EXTRA]
*
* This module allows other modules to use MySQL.
*/
#module
{
name = "mysql"
mysql
{
/* The name of this service. */
name = "mysql/main"
database = "anope"
server = "127.0.0.1"
username = "anope"
password = "mypassword"
port = 3306
}
}
/*
* redis
*
* This module allows other modules to use Redis.
*/
#module
{
name = "redis"
/* A redis database */
redis
{
/* The name of this service */
name = "redis/main"
/*
* The redis database to use. New connections default to 0.
*/
db = 0
ip = "127.0.0.1"
port = 6379
}
}
/*
* regex_pcre2 [EXTRA]
*
* Provides the regex engine regex/pcre, which uses version 2 of the Perl Compatible Regular
* Expressions library.
*/
#module { name = "regex_pcre2" }
/*
* regex_posix [EXTRA]
*
* Provides the regex engine regex/posix, which uses the POSIX compliant regular expressions.
*/
#module { name = "regex_posix" }
/*
* regex_stdlib
*
* Provides the regex engine regex/stdlib, which uses the regular expression library that is part of
* the C++ standard library.
*/
module
{
name = "regex_stdlib"
/*
* The syntax scheme to use. Can be set to awk to use the regular expression grammar used by the
* awk utility in POSIX, basic to use the basic POSIX regular expression grammar, ecmascript to
* use the modified ECMAScript regular expression grammar, egrep to use the regular expression
* grammar used by the grep utility with the -E option in POSIX, extended to use the extended
* POSIX regular expression grammar, or grep to use the regular expression grammar used by the
* grep utility in POSIX.
*
* See https://en.cppreference.com/w/cpp/regex/syntax_option_type for more information.
*/
syntax = "ecmascript"
}
/*
* regex_tre [EXTRA]
*
* Provides the regex engine regex/tre, which uses the TRE regex library.
*/
#module { name = "regex_tre" }
/*
* rewrite
*
* Allows rewriting commands sent to/from clients.
*/
#module { name = "rewrite" }
#command
{
service = "ChanServ"; name = "CLEAR"; command = "rewrite"
/* Enable rewrite. */
rewrite = true
/* Source message to match. A $ can be used to match anything. */
rewrite_source = "CLEAR $ USERS"
/*
* Message to rewrite the source message to. A $ followed by a number, e.g. $0, gets
* replaced by the number-th word from the source_message, starting from 0.
*/
rewrite_target = "KICK $1 *"
/*
* The command description. This only shows up in HELP's output.
* Comment this option to prevent the command from showing in the
* HELP command.
*/
rewrite_description = "Clears all users from a channel"
}
/*
* proxyscan
*
* This module allows you to scan connecting clients for open proxies.
* Note that using this will allow users to get the IP of your services.
*
* Currently the two supported proxy types are HTTP and SOCKS5.
*
* The proxy scanner works by attempting to connect to clients when they
* connect to the network, and if they have a proxy running instruct it to connect
* back to services. If services are able to connect through the proxy to itself
* then it knows it is an insecure proxy, and will ban it.
*/
#module
{
name = "proxyscan"
/*
* The target IP services tells the proxy to connect back to. This must be a publicly
* available IP that remote proxies can connect to.
*/
#target_ip = "127.0.0.1"
/*
* The port services tells the proxy to connect to.
*/
target_port = 7226
/*
* The listen IP services listen on for incoming connections from suspected proxies.
* This probably will be the same as target_ip, but may not be if you are behind a firewall (NAT).
*/
#listen_ip = "127.0.0.1"
/*
* The port services should listen on for incoming connections from suspected proxies.
* This most likely will be the same as target_port.
*/
listen_port = 7226
/*
* An optional notice sent to clients upon connect.
*/
#connect_notice = "We will now scan your host for insecure proxies. If you do not consent to this scan please disconnect immediately."
/*
* Who the notice should be sent from.
*/
#connect_source = "OperServ"
/*
* If set, OperServ will add infected clients to the akill list. Without it, OperServ simply sends
* a timed G/K-line to the IRCd and forgets about it. Can be useful if your akill list is being filled up by bots.
*/
add_to_akill = yes
/*
* How long before connections should be timed out.
*/
timeout = 5
proxyscan
{
/* The type of proxy to check for. A comma separated list is allowed. */
type = "HTTP"
/* The ports to check. */
port = "80,8080"
/* How long to set the ban for. */
time = 4h
/*
* The reason to ban the user for.
* %h is replaced with the type of proxy found.
* %i is replaced with the IP of proxy found.
* %p is replaced with the port.
*/
reason = "You have an open proxy running on your host (%t:%i:%p)"
}
}
/*
* sasl
*
* Some IRCds allow "SASL" authentication to let users identify to services
* during the IRCd user registration process. If this module is loaded, Anope will allow
* authenticating users through this mechanism. Supported mechanisms are:
* PLAIN, EXTERNAL.
*/
module { name = "sasl" }
/*
* ssl_gnutls [EXTRA]
*
* This module provides SSL services to Anope using GnuTLS, for example to
* connect to the uplink server(s) via SSL.
*
* You may only load either ssl_gnutls or ssl_openssl, but not both.
*/
#module
{
name = "ssl_gnutls"
/*
* An optional certificate and key for ssl_gnutls to give to the uplink.
*
* You can generate your own certificate and key pair by using:
*
* certtool --generate-privkey --bits 2048 --outfile privkey.pem
* certtool --generate-self-signed --load-privkey privkey.pem --outfile fullchain.pem
*
*/
cert = "data/fullchain.pem"
key = "data/privkey.pem"
/*
* Diffie-Hellman parameters to use when acting as a server. This is only
* required for TLS servers that want to use ephemeral DH cipher suites.
*
* This is NOT required for Anope to connect to the uplink server(s) via SSL.
*
* You can generate DH parameters by using:
*
* certtool --generate-dh-params --bits 2048 --outfile dhparams.pem
*
*/
# dhparams = "data/dhparams.pem"
}
/*
* ssl_openssl [EXTRA]
*
* This module provides SSL services to Anope using OpenSSL, for example to
* connect to the uplink server(s) via SSL.
*
* You may only load either ssl_openssl or ssl_gnutls, but not both.
*
*/
#module
{
name = "ssl_openssl"
/*
* An optional certificate and key for ssl_openssl to give to the uplink.
*
* You can generate your own certificate and key pair by using:
*
* openssl genrsa -out privkey.pem 2048
* openssl req -new -x509 -key privkey.pem -out fullchain.pem -days 1095
*/
cert = "data/fullchain.pem"
key = "data/privkey.pem"
/*
* If you wish to increase security you can disable support for older
* versions of TLS with no known vulnerabilities but that provide less
* security. For your security SSLv2 and SSLv3 are always disabled.
*/
#tlsv10 = no
#tlsv11 = no
#tlsv12 = yes
}
/*
* sql_authentication [EXTRA]
*
* This module allows authenticating users against an external SQL database using a custom
* query.
*/
#module
{
name = "sql_authentication"
/* SQL engine to use. Should be configured elsewhere with mysql, sqlite, etc. */
engine = "mysql/main"
/* Query to execute to authenticate. A non empty result from this query is considered a success,
* and the user will be authenticated.
*
* @a@ is replaced with the user's account name
* @p@ is replaced with the user's password
* @n@ is replaced with the user's nickname
* @i@ is replaced with the user's IP
*
* Note that @n@ and @i@ may not always exist in the case of a user identifying outside of the normal
* nickserv/identify command, such as through the web panel.
*
* Furthermore, if a field named email is returned from this query the user's email is
* set to its value.
*
*
* We've included some example queries for some popular website/forum systems.
*
* Drupal 6: "SELECT `mail` AS `email` FROM `users` WHERE `name` = @a@ AND `pass` = MD5(@p@) AND `status` = 1"
* e107 cms: "SELECT `user_email` AS `email` FROM `e107_user` WHERE `user_loginname` = @a@ AND `user_password` = MD5(@p@)"
* SMF Forum: "SELECT `email_address` AS `email` FROM `smf_members` WHERE `member_name` = @a@ AND `passwd` = SHA1(CONCAT(LOWER(@a@), @p@))"
* vBulletin: "SELECT `email` FROM `user` WHERE `username` = @a@ AND `password` = MD5(CONCAT(MD5(@p@), `salt`))"
* IP.Board: "SELECT `email` FROM `ibf_members` WHERE `name` = @a@ AND `members_pass_hash` = MD5(CONCAT(MD5(`members_pass_salt`), MD5(@p@)))"
*/
query = "SELECT `email_addr` AS `email` FROM `my_users` WHERE `username` = @a@ AND `password` = MD5(CONCAT('salt', @p@))"
/*
* If set, the reason to give the users who try to "/msg NickServ REGISTER".
* If not set, then registration is not blocked.
*/
#disable_reason = "To register on this network visit https://some.misconfigured.site/register"
/*
* If set, the reason to give the users who try to "/msg NickServ SET EMAIL".
* If not set, then email changing is not blocked.
*/
#disable_email_reason = "To change your email address visit https://some.misconfigured.site"
}
/*
* sql_log [EXTRA]
*
* This module adds an additional target option to log{} blocks
* that allows logging Service's logs to SQL. To log to SQL, add
* the SQL service name to log:targets prefixed by sql_log:. For
* example:
*
* log
* {
* targets = "services.log sql_log:mysql/main"
* ...
* }
*
* By default this module logs to the table `logs`, and will create
* it if it doesn't exist. This module does not create any indexes (keys)
* on the table and it is recommended you add them yourself as necessary.
*/
#module { name = "sql_log" }
/*
* sql_oper [EXTRA]
*
* This module allows granting users services operator privileges and possibly IRC Operator
* privileges based on an external SQL database using a custom query.
*/
#module
{
name = "sql_oper"
/* SQL engine to use. Should be configured elsewhere with mysql, sqlite, etc. */
engine = "mysql/main"
/* Query to execute to determine if a user should have operator privileges.
* A field named opertype must be returned in order to link the user to their oper type.
* The oper types must be configured earlier in anope.conf.
*
* If a field named modes is returned from this query then those modes are set on the user.
* Without this, only a simple +o is sent.
*
* @a@ is replaced with the user's account name
* @i@ is replaced with the user's IP
*/
query = "SELECT `opertype` FROM `my_users` WHERE `user_name` = @a@"
}
/*
* sqlite [EXTRA]
*
* This module allows other modules to use SQLite.
*/
#module
{
name = "sqlite"
/* A SQLite database */
sqlite
{
/* The name of this service. */
name = "sqlite/main"
/* The database name, it will be created if it does not exist. */
database = "anope.db"
}
}
/*
* webcpanel
*
* This module creates a web configuration panel that allows users and operators to perform any task
* as they could over IRC. If you are using the default configuration you should be able to access
* this panel by visiting http://127.0.0.1:8080 in your web browser from the machine Anope is running on.
*
* This module requires httpd.
*/
#module
{
name = "webcpanel"
/* Web server to use. */
server = "httpd/main";
/* Template to use. */
template = "default";
/* Page title. */
title = "Anope IRC Services";
}
/*
* xmlrpc
*
* Allows remote applications (websites) to execute queries in real time to retrieve data from Anope.
* By itself this module does nothing, but allows other modules (xmlrpc_main) to receive and send XMLRPC queries.
*/
#module
{
name = "xmlrpc"
/* Web service to use. Requires httpd. */
server = "httpd/main"
}
/*
* xmlrpc_main
*
* Adds the main XMLRPC core functions.
* Requires xmlrpc.
*/
#module { name = "xmlrpc_main" }
-174
View File
@@ -1,174 +0,0 @@
<?php
/*
* (C) 2010 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for furhter details.
*
*
*/
/** Object representing a MySQL query
*/
class MySQLQuery
{
/* Our query */
private $Query;
/* The result */
private $Result;
/* Socket used to connect to MySQL */
private $MysqlSock;
/** Constructor
* @param MysqlSock The MySQL socket
*/
function __construct($MysqlSock)
{
$this->MysqlSock = $MysqlSock;
}
/** Destructor
*/
function __destruct()
{
}
/** Execute a query
* @return true or false
*/
private function Execute()
{
$Res = mysql_query($this->Query, $this->MysqlSock);
$this->Result = array();
if (!empty($Res))
{
while (($Result = @mysql_fetch_assoc($Res)))
{
$this->Result[] = $Result;
}
return true;
}
return false;
}
/** Get the result for the query
* @return The result
*/
public function Result()
{
return $this->Result;
}
/** Execute a query
* @param A formatted string
* @param ... Args
* @return true or false
*/
public function Query($String, $P1 = NULL, $P2 = NULL, $P3 = NULL, $P4 = NULL, $P5 = NULL, $P6 = NULL, $P7 = NULL,
$P8 = NULL, $P9 = NULL, $P10 = NULL, $P11 = NULL, $P12 = NULL, $P13 = NULL, $P14 = NULL)
{
$this->Query = sprintf($String, $P1, $P2, $P3, $P4, $P5, $P6, $P7, $P8, $P9, $P10, $P11, $P12, $P13, $P14);
return $this->Execute();
}
/** Escape a string to by MySQL safe
* @return A new, MySQL safe string
*/
public function Escape($String)
{
return mysql_real_escape_string($String, $this->MysqlSock);
}
}
/** Main Anope class
*/
class Anope
{
/* Socket used to connect to MySQL */
private $MysqlSock;
/* True if we were able to connect successfully */
private $Connected;
/** Constructor
* @param MysqlHost The host of the MySQLd server, port can be included on this too
* @param MysqlUser The username to authenticate to MySQL with
* @param MysqlPassword The password to authenticate with
* @param MysqlDatabase The name of the Anope database
*/
function __construct($MysqlHost, $MysqlUser, $MysqlPassword, $MysqlDatabase)
{
$this->Connected = false;
$this->MysqlSock = @mysql_connect($MysqlHost, $MysqlUser, $MysqlPassword);
if ($this->MysqlSock)
$this->Connected = @mysql_select_db($MysqlDatabase, $this->MysqlSock);
}
/** Destructor
* Closes the connection to the MySQL server
*/
function __destruct()
{
if ($this->MysqlSock)
@mysql_close($this->MysqlSock);
}
/** Check if we are connected successfully
* @return true or false
*/
public function Connected()
{
return $this->Connected;
}
/** Retrieve a new query object
* @return A new Query object
*/
public function Query()
{
return new MySQLQuery($this->MysqlSock);
}
/** Anope Functions **/
/** Execute a command in Anope
* For more information read docs/MYSQL
* @param Nick The nickname to execute the command from
* @param Service The service to execute the command on
* @param Command The command to execute
*/
public function Command($Nick, $Service, $Command)
{
$Query = $this->Query();
return $Query->Query("INSERT DELAYED INTO `anope_commands` (nick, service, command) VALUES('%s', '%s', '%s')", $Query->Escape($Nick), $Query->Escape($Service), $Query->Escape($Command));
}
/** Register a nick
* @param Nick The nick to be registered
* @param Password The password
* @param Email The email address to use, defaults to NULL
* @param Returns a message confirming or denying the registration process
*/
public function Register($Nick, $Password, $Email = NULL)
{
$Query = $this->Query();
$Query->Query("SELECT nick FROM `anope_ns_alias` WHERE `nick` = '%s'", $Query->Escape($Nick));
$Result = $Query->Result();
if (isset($Result[0]['nick']))
{
return "Nickname already registered";
}
if ($this->Command($Nick, "NickServ", "REGISTER ".$Password." ".$Email))
{
return "Nick registration successful. If your network has email registration enabled check your inbox for the next step of the registration process.";
}
return "Error registering nick";
}
}
?>
-59
View File
@@ -1,59 +0,0 @@
<?php
/*
* (C) 2010 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for furhter details.
*
*
*
*/
/* This is an example functional webpage showing how to use Anopes MySQL
* Execute feature to register a nickname online
*/
/* Include Anope's PHP API */
include('Anope.php');
function IsValidEmail($Email)
{
return eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $Email);
}
if (!empty($_POST['nick']) && !empty($_POST['password1']) && !empty($_POST['password2']) && !empty($_POST['email']))
{
if ($_POST['password1'] != $_POST['password2'])
{
echo 'Passwords do not match';
}
else if (!IsValidEmail($_POST['email']))
{
echo 'Invalid email address';
}
else
{
/* Create a new connection, arguments are hostname, username, password, and database name */
$Anope = new Anope("localhost", "anope", "anoperules", "anope");
/* Check if we connected */
if (!$Anope->Connected())
{
echo "Error connecting to MySQL database";
}
else
{
echo $Anope->Register($_POST['nick'], $_POST['password1'], $_POST['email']);
}
die;
}
}
?>
</br>
<form method="post" action="Register.php">
Nick: <input type="text" name="nick"></br>
Password: <input type="password" name="password1"></br>
Confirm Password: <input type="password" name="password2"></br>
Email: <input type="text" name="email"></br>
<input type="submit" value="Submit">
</form>
+630
View File
@@ -0,0 +1,630 @@
/*
* Example configuration file for NickServ.
*/
/*
* First, create the service.
*/
service
{
/*
* The name of the NickServ client.
* If you change this value, you probably want to change the client directive in the configuration for the nickserv module too.
*/
nick = "NickServ"
/*
* The username of the NickServ client.
*/
user = "services"
/*
* The hostname of the NickServ client.
*/
host = "services.host"
/*
* The realname of the NickServ client.
*/
gecos = "Nickname Registration Service"
/*
* The modes this client should use.
* Do not modify this unless you know what you are doing.
*
* These modes are very IRCd specific. If left commented, sane defaults
* are used based on what protocol module you have loaded.
*
* Note that setting this option incorrectly could potentially BREAK some, if
* not all, usefulness of the client. We will not support you if this client is
* unable to do certain things if this option is enabled.
*/
#modes = "+o"
/*
* An optional comma separated list of channels this service should join. Outside
* of log channels this is not very useful, as the service will just idle in the
* specified channels, and will not accept any types of commands.
*
* Prefixes may be given to the channels in the form of mode characters or prefix symbols.
*/
#channels = "@#services,#mychan"
}
/*
* Core NickServ module.
*
* Provides essential functionality for NickServ.
*/
module
{
name = "nickserv"
/*
* The name of the client that should be NickServ.
*/
client = "NickServ"
/*
* Force users to give an e-mail address when they register a nick.
*
* This directive defaults to "yes" and is recommended to be enabled. This is required if e-mail registration is enabled.
*/
forceemail = yes
/*
* Require users who change their email address to confirm they
* own their new email.
*/
confirmemailchanges = no
/*
* A message sent to users on connect if they use an unregistered nick. %n will be replaced with the user's nickname.
*
* This directive is optional.
*/
#unregistered_notice = "Your nickname is not registered. To register it, use: /msg NickServ REGISTER password email"
/*
* The default options for newly registered nicks. Note that changing these options
* will have no effect on nicks which are already registered. The list must be separated
* by spaces.
*
* The options are:
* - killprotect: Kill nick if not identified within 60 seconds
* - kill_quick: Kill nick if not identified within 20 seconds, this one overrides the killprotect
* option and the killprotect option must be specified with this one
* - kill_immed: Kill nick immediately if not identified, this one overrides both the killprotect
* and kill_quick options and the killprotect option must be specified with this one
* - ns_private: Hide the nick from NickServ's LIST command
* - hide_email: Hide the nick's e-mail address from NickServ's INFO command
* - hide_mask: Hide the nick's last or current user@host from NickServ's INFO command
* - hide_status: Hide the nick's services operator access status from NickServ's INFO command
* - hide_quit: Hide the nick's last quit message from NickServ's INFO command
* - memo_signon: Notify user if they have a new memo when they sign into the nick
* - memo_receive: Notify user if they have a new memo as soon as it's received
* - memo_mail: Notify user if they have a new memo by mail
* - autoop: User will be automatically opped in channels they enter and have access to
* - neverop: User can not be added to access lists
* - msg: Messages will be sent as PRIVMSGs instead of NOTICEs, requires options:useprivmsg
* to be enabled as well
* - ns_keep_modes: Enables keepmodes, which retains user modes across sessions
*
* This directive is optional, if left blank, the options will default to memo_signon, and
* memo_receive. If you really want no defaults, use "none" by itself as the option.
*/
defaults = "killprotect ns_private hide_email hide_mask memo_signon memo_receive autoop"
/*
* The minimum length of time between consecutive uses of NickServ's REGISTER command. This
* directive is optional, but recommended. If not set, this restriction will be disabled.
*/
regdelay = 30s
/*
* The length of time before a nick's registration expires.
*
* This directive is optional, but recommended. If not set, the default is 90 days.
*/
expire = 90d
/*
* Prevents the use of the ACCESS and CERT (excluding their LIST subcommand), DROP, FORBID, SUSPEND
* and SET PASSWORD commands by services operators on other services operators.
*
* This directive is optional, but recommended.
*/
secureadmins = yes
/*
* If set, Anope will set the channel modes a user has access to upon identifying, assuming
* they are not already set.
*
* This directive is optional.
*/
modeonid = yes
/*
* If set, Anope will set these user modes on any user who identifies.
*
* This directive is optional.
*/
#modesonid = "+R"
/*
* If set, Anope will not show netsplits in the last quit message field
* of NickServ's INFO command.
*/
hidenetsplitquit = no
/*
* If set, is the length of time NickServ's killquick and kill options wait before
* forcing users off of protected nicknames.
*/
killquick = 20s
kill = 60s
/*
* If set, forbids the registration of nicks that contain an existing
* nick with services access. For example, if Tester is a Services Oper,
* you can't register NewTester or Tester123 unless you are an IRC
* Operator.
*
* NOTE: If you enable this, you will have to be logged in as an IRC
* operator in order to register a Services Root nick when setting up
* Anope for the first time.
*
* This directive is optional.
*/
#restrictopernicks = yes
/*
* The username, and possibly hostname, used for fake users created when Anope needs to
* hold a nickname.
*/
enforceruser = "enforcer"
enforcerhost = "services.host"
/*
* The length of time Anope should hold nicknames for.
*
* This directive is optional, but recommended. If not set it defaults to 1 minute.
*/
releasetimeout = 1m
/*
* When a user's nick is forcibly changed to enforce a "nick kill", their new nick will start
* with this value. The rest will be made up of 6 or 7 digits.
* Make sure this is a valid nick and Nicklen+7 is not longer than the allowed Nicklen on your ircd.
*
* This directive is optional. If not set it defaults to "Guest"
*/
guestnickprefix = "Guest"
/*
* If set, Anope does not allow ownership of nick names, only ownership of accounts.
*/
nonicknameownership = no
/*
* The minimum length of passwords
*
* This directive is optional. If not set it defaults to 10.
*/
minpasslen = 10
/*
* The maximum length of passwords
*
* This directive is optional. If not set it defaults to 50.
*/
maxpasslen = 50
}
/*
* Core NickServ commands.
*
* In Anope modules can provide (multiple) commands, each of which has a unique command name. Once these modules
* are loaded you can then configure the commands to be added to any client you like with any name you like.
*
* Additionally, you may provide a permission name that must be in the opertype of users executing the command.
*
* Sane defaults are provided below that do not need to be edited unless you wish to change the default behavior.
*/
/* Command group configuration for NickServ.
*
* Commands may optionally be placed into groups to make NickServ's HELP output easier to understand.
* Remove the following groups to use the old behavior of simply listing all NickServ commands from HELP.
*/
command_group
{
name = "nickserv/admin"
description = _("Services Operator commands")
}
/* Give it a help command. */
command { service = "NickServ"; name = "HELP"; command = "generic/help"; }
/*
* ns_ajoin
*
* Provides the command nickserv/ajoin.
*
* Used for configuring channels to join once you identify.
*/
module
{
name = "ns_ajoin"
/*
* The maximum number of channels a user can have on NickServ's AJOIN command.
*/
ajoinmax = 10
}
command { service = "NickServ"; name = "AJOIN"; command = "nickserv/ajoin"; }
/*
* ns_alist
*
* Provides the command nickserv/alist.
*
* Used for viewing what channels you have access to.
*/
module { name = "ns_alist" }
command { service = "NickServ"; name = "ALIST"; command = "nickserv/alist"; }
/*
* ns_cert
*
* Provides the command nickserv/cert.
*
* Used for configuring your SSL certificate list, which can be used to automatically identify you.
*/
module
{
name = "ns_cert"
/*
* The maximum number of entries allowed on a nickname's certificate fingerprint list.
* The default is 5. This number cannot be set to 0.
*/
max = 5
}
command { service = "NickServ"; name = "CERT"; command = "nickserv/cert"; }
/*
* ns_drop
*
* Provides the command nickserv/drop.
*
* Used for unregistering names.
*/
module { name = "ns_drop" }
command { service = "NickServ"; name = "DROP"; command = "nickserv/drop"; }
/*
* ns_getemail
*
* Provides the command nickserv/getemail.
*
* Used for getting registered accounts by searching for emails.
*/
module { name = "ns_getemail" }
command { service = "NickServ"; name = "GETEMAIL"; command = "nickserv/getemail"; permission = "nickserv/getemail"; group = "nickserv/admin"; }
/*
* ns_group
*
* Provides the commands nickserv/group, nickserv/glist, and nickserv/ungroup.
*
* Used for controlling nick groups.
*/
module
{
name = "ns_group"
/*
* The maximum number of nicks allowed in a group.
*
* This directive is optional, but recommended. If not set or set to 0, no limits will be applied.
*/
maxaliases = 16
/*
* If set, the NickServ GROUP command won't allow any group changes. This is recommended to
* prevent users from accidentally dropping their nicks, as it forces users to explicitly
* drop their nicks before adding it to another group.
*
* This directive is optional, but recommended.
*/
nogroupchange = yes
}
command { service = "NickServ"; name = "GLIST"; command = "nickserv/glist"; }
command { service = "NickServ"; name = "GROUP"; command = "nickserv/group"; }
command { service = "NickServ"; name = "UNGROUP"; command = "nickserv/ungroup"; }
/*
* ns_identify
*
* Provides the command nickserv/identify.
*
* Used for identifying to accounts.
*/
module
{
name = "ns_identify"
/*
* If set, limits the number of concurrent users that can be logged in as a given account at once.
*/
maxlogins = 10
}
command { service = "NickServ"; name = "ID"; command = "nickserv/identify"; hide = true; }
command { service = "NickServ"; name = "IDENTIFY"; command = "nickserv/identify"; }
/*
* ns_info
*
* Provides the commands:
* nickserv/info. - Used for gathering information about an account.
* nickserv/set/hide, nickserv/saset/hide - Used for configuring which options are publicly shown in nickserv/info.
*
*/
module { name = "ns_info" }
command { service = "NickServ"; name = "INFO"; command = "nickserv/info"; }
command { service = "NickServ"; name = "SET HIDE"; command = "nickserv/set/hide"; }
command { service = "NickServ"; name = "SASET HIDE"; command = "nickserv/saset/hide"; permission = "nickserv/saset/hide"; }
/*
* ns_list
*
* Provides the commands:
* nickserv/list - Used for retrieving and searching the registered account list.
* nickserv/set/private, nickserv/saset/private - Used for configuring whether or a users account shows up in nickserv/list.
*
*/
module
{
name = "ns_list"
/*
* The maximum number of nicks to be returned for a NickServ LIST command.
*/
listmax = 50
}
command { service = "NickServ"; name = "LIST"; command = "nickserv/list"; }
command { service = "NickServ"; name = "SET PRIVATE"; command = "nickserv/set/private"; }
command { service = "NickServ"; name = "SASET PRIVATE"; command = "nickserv/saset/private"; permission = "nickserv/saset/private"; }
/*
* ns_logout
*
* Provides the command nickserv/logout.
*
* Used for logging out of your account.
*/
module { name = "ns_logout" }
command { service = "NickServ"; name = "LOGOUT"; command = "nickserv/logout"; }
/*
* ns_recover
*
* Provides the command nickserv/recover.
*
* Used for recovering your nick from services or another user.
*/
module
{
name = "ns_recover"
/*
* If set, Anope will svsnick and svsjoin users who use the recover
* command on an identified user to the nick and channels of the recovered user.
*
* This directive is optional.
*/
restoreonrecover = yes
}
command { service = "NickServ"; name = "RECOVER"; command = "nickserv/recover"; }
# For compatibility with Anope 1.8 and Atheme.
command { service = "NickServ"; name = "GHOST"; command = "nickserv/recover"; hide = true; }
command { service = "NickServ"; name = "RELEASE"; command = "nickserv/recover"; hide = true; }
/*
* ns_register
*
* Provides the commands nickserv/confirm, nickserv/register, and nickserv/resend.
*
* Used for registering accounts.
*/
module
{
name = "ns_register"
/*
* Registration confirmation setting. Set to "none" for no registration confirmation,
* "mail" for email confirmation, and "admin" to have services operators manually confirm
* every registration. Set to "disable" to completely disable all registrations.
*/
registration = "none"
/*
* The minimum length of time between consecutive uses of NickServ's RESEND command.
*
* This directive is optional, but recommended. If not set, this restriction will be disabled.
*/
resenddelay = 90s
/*
* Prevents users from registering their nick if they are not connected
* for at least the given number of seconds.
*
* This directive is optional.
*/
#nickregdelay = 30s
/*
* The length of time a user using an unconfirmed account has
* before the account will be released for general use again.
*/
#unconfirmedexpire = 1d
}
command { service = "NickServ"; name = "CONFIRM"; command = "nickserv/confirm"; }
command { service = "NickServ"; name = "REGISTER"; command = "nickserv/register"; }
command { service = "NickServ"; name = "RESEND"; command = "nickserv/resend"; }
/*
* ns_resetpass
*
* Provides the command nickserv/resetpass.
*
* Used for resetting passwords by emailing users a temporary one.
*/
module { name = "ns_resetpass" }
command { service = "NickServ"; name = "RESETPASS"; command = "nickserv/resetpass"; }
/*
* ns_set
*
* Provides the commands:
* nickserv/set, nickserv/saset - Dummy help wrappers for the SET and SASET commands.
* nickserv/set/autoop, nickserv/saset/autoop - Determines whether or not modes are automatically set users when joining a channel.
* nickserv/set/display, nickserv/saset/display - Used for setting a users display name.
* nickserv/set/email, nickserv/saset/email - Used for setting a users email address.
* nickserv/set/keepmodes, nickserv/saset/keepmodes - Configure whether or not services should retain a user's modes across sessions.
* nickserv/set/kill, nickserv/saset/kill - Used for configuring nickname protection.
* nickserv/set/language, nickserv/saset/language - Used for configuring what language services use.
* nickserv/set/message, nickserv/saset/message - Used to configure how services send messages to you.
* nickserv/set/neverop, nickserv/saset/neverop - Used to configure whether a user can be added to access lists
* nickserv/saset/noexpire - Used for configuring noexpire, which prevents nicks from expiring.
* nickserv/set/password, nickserv/saset/password - Used for changing a users password.
*/
module
{
name = "ns_set"
/*
* Allow the use of the IMMED option in the NickServ SET KILL command.
*
* This directive is optional.
*/
#allowkillimmed = yes
}
command { service = "NickServ"; name = "SET"; command = "nickserv/set"; }
command { service = "NickServ"; name = "SASET"; command = "nickserv/saset"; permission = "nickserv/saset/"; group = "nickserv/admin"; }
command { service = "NickServ"; name = "SET AUTOOP"; command = "nickserv/set/autoop"; }
command { service = "NickServ"; name = "SASET AUTOOP"; command = "nickserv/saset/autoop"; permission = "nickserv/saset/autoop"; }
command { service = "NickServ"; name = "SET DISPLAY"; command = "nickserv/set/display"; }
command { service = "NickServ"; name = "SASET DISPLAY"; command = "nickserv/saset/display"; permission = "nickserv/saset/display"; }
command { service = "NickServ"; name = "SET EMAIL"; command = "nickserv/set/email"; }
command { service = "NickServ"; name = "SASET EMAIL"; command = "nickserv/saset/email"; permission = "nickserv/saset/email"; }
command { service = "NickServ"; name = "SET KEEPMODES"; command = "nickserv/set/keepmodes"; }
command { service = "NickServ"; name = "SASET KEEPMODES"; command = "nickserv/saset/keepmodes"; permission = "nickserv/saset/keepmodes"; }
command { service = "NickServ"; name = "SET KILL"; command = "nickserv/set/kill"; }
command { service = "NickServ"; name = "SASET KILL"; command = "nickserv/saset/kill"; permission = "nickserv/saset/kill"; }
command { service = "NickServ"; name = "SET LANGUAGE"; command = "nickserv/set/language"; }
command { service = "NickServ"; name = "SASET LANGUAGE"; command = "nickserv/saset/language"; permission = "nickserv/saset/language"; }
command { service = "NickServ"; name = "SET MESSAGE"; command = "nickserv/set/message"; }
command { service = "NickServ"; name = "SASET MESSAGE"; command = "nickserv/saset/message"; permission = "nickserv/saset/message"; }
command { service = "NickServ"; name = "SET PASSWORD"; command = "nickserv/set/password"; }
command { service = "NickServ"; name = "SASET PASSWORD"; command = "nickserv/saset/password"; permission = "nickserv/saset/password"; }
command { service = "NickServ"; name = "SET NEVEROP"; command = "nickserv/set/neverop"; }
command { service = "NickServ"; name = "SASET NEVEROP"; command = "nickserv/saset/neverop"; permission = "nickserv/saset/neverop"; }
command { service = "NickServ"; name = "SASET NOEXPIRE"; command = "nickserv/saset/noexpire"; permission = "nickserv/saset/noexpire"; }
/*
* ns_set_misc
*
* Provides the command nickserv/set/misc.
*
* Allows you to create arbitrary commands to set data, and have that data show up in nickserv/info.
* A field named misc_description may be given for use with help output.
*/
module { name = "ns_set_misc" }
command { service = "NickServ"; name = "SET URL"; command = "nickserv/set/misc"; misc_description = _("Associate a URL with your account"); }
command { service = "NickServ"; name = "SASET URL"; command = "nickserv/saset/misc"; misc_description = _("Associate a URL with this account"); permission = "nickserv/saset/url"; group = "nickserv/admin"; }
#command { service = "NickServ"; name = "SET DISCORD"; command = "nickserv/set/misc"; misc_description = _("Associate a Discord account with your account"); }
#command { service = "NickServ"; name = "SASET DISCORD"; command = "nickserv/saset/misc"; misc_description = _("Associate a Discord account with this account"); permission = "nickserv/saset/discord"; group = "nickserv/admin"; }
#command { service = "NickServ"; name = "SET FACEBOOK"; command = "nickserv/set/misc"; misc_description = _("Associate a Facebook URL with your account"); }
#command { service = "NickServ"; name = "SASET FACEBOOK"; command = "nickserv/saset/misc"; misc_description = _("Associate a Facebook URL with this account"); permission = "nickserv/saset/facebook"; group = "nickserv/admin"; }
#command { service = "NickServ"; name = "SET MASTODON"; command = "nickserv/set/misc"; misc_description = _("Associate a Mastodon account with your account"); }
#command { service = "NickServ"; name = "SASET MASTODON"; command = "nickserv/saset/misc"; misc_description = _("Associate a Mastodon account with this account"); permission = "nickserv/saset/mastodon"; group = "nickserv/admin"; }
/*
* ns_suspend
*
* Provides the commands nickserv/suspend and nickserv/unsuspend.
*
* Used to suspend and unsuspend nicknames. Suspended nicknames can not be used but their settings are preserved.
*/
module
{
name = "ns_suspend"
/*
* The length of time before a suspended nick becomes unsuspended.
*
* This directive is optional. If not set, the default is never.
*/
#suspendexpire = 90d
/*
* Settings to show to non-opers in NickServ's INFO output.
* Comment to completely disable showing any information about
* suspended nicknames to non-opers.
*/
show = "suspended, by, reason, on, expires"
}
command { service = "NickServ"; name = "SUSPEND"; command = "nickserv/suspend"; permission = "nickserv/suspend"; group = "nickserv/admin"; }
command { service = "NickServ"; name = "UNSUSPEND"; command = "nickserv/unsuspend"; permission = "nickserv/suspend"; group = "nickserv/admin"; }
/*
* ns_update
*
* Provides the command nickserv/update.
*
* Used to update your status on all channels, turn on your vHost, etc.
*/
module { name = "ns_update" }
command { service = "NickServ"; name = "UPDATE"; command = "nickserv/update"; }
/*
* Extra NickServ related modules.
*/
/*
* ns_maxemail
*
* Limits how many times the same email address may be used in Anope
* to register accounts.
*/
#module
{
name = "ns_maxemail"
/*
* The limit to how many registered nicks can use the same e-mail address. If set to 0 or left
* commented, there will be no limit enforced when registering new accounts or using
* /msg NickServ SET EMAIL.
*/
maxemails = 1
}
+687
View File
@@ -0,0 +1,687 @@
/*
* Example configuration file for OperServ.
*/
/*
* First, create the service.
*/
service
{
/*
* The name of the OperServ client.
* If you change this value, you probably want to change the client directive in the configuration for the operserv module too.
*/
nick = "OperServ"
/*
* The username of the OperServ client.
*/
user = "services"
/*
* The hostname of the OperServ client.
*/
host = "services.host"
/*
* The realname of the OperServ client.
*/
gecos = "Operator Service"
/*
* The modes this client should use.
* Do not modify this unless you know what you are doing.
*
* These modes are very IRCd specific. If left commented, sane defaults
* are used based on what protocol module you have loaded.
*
* Note that setting this option incorrectly could potentially BREAK some, if
* not all, usefulness of the client. We will not support you if this client is
* unable to do certain things if this option is enabled.
*/
#modes = "+o"
/*
* An optional comma separated list of channels this service should join. Outside
* of log channels this is not very useful, as the service will just idle in the
* specified channels, and will not accept any types of commands.
*
* Prefixes may be given to the channels in the form of mode characters or prefix symbols.
*/
#channels = "@#services,#mychan"
}
/*
* Core OperServ module.
*
* Provides essential functionality for OperServ.
*/
module
{
name = "operserv"
/*
* The name of the client that should be OperServ.
*/
client = "OperServ"
/*
* These define the default expiration times for, respectively, AKILLs, CHANKILLs, SNLINEs,
* and SQLINEs.
*/
autokillexpiry = 30d
chankillexpiry = 30d
snlineexpiry = 30d
sqlineexpiry = 30d
/*
* If set, this option will make Anope send an AKILL command immediately after it has been
* added with AKILL ADD. This eliminates the need for killing the user after the AKILL has
* been added.
*
* This directive is optional, but recommended.
*/
akillonadd = yes
/*
* If set, this option will make Anope send an (SVS)KILL command immediately after SNLINE ADD.
* This eliminates the need for killing the user after the SNLINE has been added.
*
* This directive is optional.
*/
killonsnline = yes
/*
* If set, this option will make Anope send an (SVS)KILL command immediately after SQLINE ADD.
* This eliminates the need for killing the user after the SQLINE has been added.
*
* This directive is optional.
*/
killonsqline = yes
/*
* Adds the nickname of the IRC Operator issuing an AKILL to the kill reason.
*
* This directive is optional.
*/
addakiller = yes
/*
* Adds akill IDs to akills. Akill IDs are given to users in their ban reason and can be used to easily view,
* modify, or remove an akill from the ID.
*/
akillids = yes
/*
* If set, only IRC Operators will be permitted to use OperServ, regardless of command access restrictions.
*
* This directive is optional, but recommended.
*/
opersonly = yes
}
/*
* Core OperServ commands.
*
* In Anope modules can provide (multiple) commands, each of which has a unique command name. Once these modules
* are loaded you can then configure the commands to be added to any client you like with any name you like.
*
* Additionally, you may provide a permission name that must be in the opertype of users executing the command.
*
* Sane defaults are provided below that do not need to be edited unless you wish to change the default behavior.
*/
/* Give it a help command. */
command { service = "OperServ"; name = "HELP"; command = "generic/help"; }
/*
* os_akill
*
* Provides the command operserv/akill.
*
* Used to ban users from the network.
*/
module { name = "os_akill" }
command { service = "OperServ"; name = "AKILL"; command = "operserv/akill"; permission = "operserv/akill"; }
/*
* os_chankill
*
* Provides the command operserv/chankill.
*
* Used to akill users from an entire channel.
*/
module { name = "os_chankill" }
command { service = "OperServ"; name = "CHANKILL"; command = "operserv/chankill"; permission = "operserv/chankill"; }
/*
* os_defcon
*
* Provides the command operserv/defcon.
*
* Allows you to set services in DefCon mode, which can be used to restrict services access
* during bot attacks.
*/
#module
{
name = "os_defcon"
/*
* Default DefCon level (1-5) to use when starting Anope up. Level 5 constitutes normal operation
* while level 1 constitutes the most restrictive operation. If this setting is left out or set to
* 0, DefCon will be disabled and the rest of this block will be ignored.
*/
#defaultlevel = 5
/*
* The following 4 directives define what operations will take place when DefCon is set to levels
* 1 through 4. Each level is a list that must be separated by spaces.
*
* The following operations can be defined at each level:
* - nonewchannels: Disables registering new channels
* - nonewnicks: Disables registering new nicks
* - nomlockchanges: Disables changing MLOCK on registered channels
* - forcechanmodes: Forces all channels to have the modes given in the later chanmodes directive
* - reducedsessions: Reduces the session limit to the value given in the later sessionlimit directive
* - nonewclients: KILL any new clients trying to connect
* - operonly: Ignore all non-IRCops
* - silentoperonly: Silently ignore all non-IRCops
* - akillnewclients: AKILL any new clients trying to connect
* - nonewmemos: No new memos will be sent to block MemoServ attacks
*/
level4 = "nonewchannels nonewnicks nomlockchanges reducedsessions"
level3 = "nonewchannels nonewnicks nomlockchanges forcechanmodes reducedsessions"
level2 = "nonewchannels nonewnicks nomlockchanges forcechanmodes reducedsessions silentoperonly"
level1 = "nonewchannels nonewnicks nomlockchanges forcechanmodes reducedsessions silentoperonly akillnewclients"
/*
* New session limit to use when a DefCon level is using "reduced" session limiting.
*/
#sessionlimit = 2
/*
* Length of time to add an AKILL for when DefCon is preventing new clients from connecting to the
* network.
*/
#akillexpire = 5m
/*
* The channel modes to set on all channels when the DefCon channel mode system is in use.
*
* Note 1: Choose these modes carefully, because when DefCon switches to a level which does NOT have
* the mode setting selected, Anope will set the reverse on all channels, e.g. if this setting
* is +RN when DefCon is used, all channels will be set to +RN, when DefCon is removed, all
* channels will be set to -RN. You don't want to set this to +k for example, because when DefCon
* is removed, all channels are set -k, removing the key from previously keyed channels.
*
* Note 2: MLOCKed modes will not be lost.
*/
#chanmodes = "+R"
/*
* This value can be used to automatically return the network to DefCon level 5 after the specified
* time period, just in case any IRC Operator forgets to remove a DefCon setting.
*
* This directive is optional.
*/
#timeout = 15m
/*
* If set, Anope will send a global message on DefCon level changes.
*
* This directive is optional.
*/
#globalondefcon = yes
/*
* If set, Anope will send the global message defined in the message directive on DefCon level
* changes.
*
* This directive is optional.
*/
#globalondefconmore = yes
/*
* Defines the message that will be sent on DefCon level changes when globalondefconmore is set.
*
* This directive is required only when globalondefconmore is set.
*/
#message = "Put your message to send your users here. Don't forget to uncomment globalondefconmore"
/*
* Defines the message that will be sent when DefCon is returned to level 5. This directive is optional,
* and will also override globalondefcon and globalondefconmore when set.
*/
#offmessage = "Services are now back to normal, sorry for any inconvenience"
/*
* Defines the reason to use when clients are KILLed or AKILLed from the network while the proper
* DefCon operation is in effect.
*/
#akillreason = "This network is currently not accepting connections, please try again later."
}
#command { service = "OperServ"; name = "DEFCON"; command = "operserv/defcon"; permission = "operserv/defcon"; }
/*
* os_dns
*
* Provides the command operserv/dns.
*
* This module requires that dns is loaded.
*
* This module allows controlling a DNS zone. This is useful for
* controlling what servers users are placed on for load balancing,
* and to automatically remove split servers.
*
* To use this module you must set a nameserver record for services
* so that DNS queries go to services.
*
* Alternatively, you may use a slave DNS server to hide service's IP,
* provide query caching, and provide better fault tolerance.
*
* To do this using BIND, configure similar to:
*
* options { max-refresh-time 60; };
* zone "irc.example.com" IN {
* type slave;
* masters { 127.0.0.1 port 5353; };
* };
*
* Where 127.0.0.1:5353 is the IP and port services are listening on.
* We recommend you externally firewall both UDP and TCP to the port
* Anope is listening on.
*
* Finally set a NS record for irc.example.com. to BIND or services.
*/
#module
{
name = "os_dns"
/* TTL for records. This should be very low if your records change often. */
ttl = 1m
/* If a server drops this many users the server is automatically removed from the DNS zone.
* This directive is optional.
*/
user_drop_mark = 50
/* The time used for user_drop_mark. */
user_drop_time = 1m
/* When a server is removed from the zone for dropping users, it is readded after this time.
* This directive is optional.
*/
user_drop_readd_time = 5m
/* If set, when a server splits, it is automatically removed from the zone. */
remove_split_servers = yes
/* If set, when a server connects to the network, it will be automatically added to
* the zone if it is a known server.
*/
readd_connected_servers = no
}
#command { service = "OperServ"; name = "DNS"; command = "operserv/dns"; permission = "operserv/dns"; }
/*
* os_config
*
* Provides the command operserv/config.
*
* Used to view and set configuration options while services are running.
*/
module { name = "os_config" }
command { service = "OperServ"; name = "CONFIG"; command = "operserv/config"; permission = "operserv/config"; }
/*
* os_forbid
*
* Provides the command operserv/forbid.
*
* Used to forbid specific nicks, channels, emails, etc. from being used.
*/
module { name = "os_forbid" }
command { service = "OperServ"; name = "FORBID"; command = "operserv/forbid"; permission = "operserv/forbid"; }
/*
* os_ignore
*
* Provides the command operserv/ignore.
*
* Used to make Anope ignore users.
*/
module { name = "os_ignore" }
command { service = "OperServ"; name = "IGNORE"; command = "operserv/ignore"; permission = "operserv/ignore"; }
/*
* os_info
*
* Provides the command operserv/info.
*
* Used to add oper only notes to users and channels.
*/
module { name = "os_info" }
command { service = "OperServ"; name = "INFO"; command = "operserv/info"; permission = "operserv/info"; }
/*
* os_jupe
*
* Provides the command operserv/jupe.
*
* Used to disconnect servers from the network and prevent them from relinking.
*/
module { name = "os_jupe" }
command { service = "OperServ"; name = "JUPE"; command = "operserv/jupe"; permission = "operserv/jupe"; }
/*
* os_kick
*
* Provides the command operserv/kick.
*
* Used to kick users from channels.
*/
module { name = "os_kick" }
command { service = "OperServ"; name = "KICK"; command = "operserv/kick"; permission = "operserv/kick"; }
/*
* os_kill
*
* Provides the command operserv/kill.
*
* Used to forcibly disconnect users from the network.
*/
module { name = "os_kill" }
command { service = "OperServ"; name = "KILL"; command = "operserv/kill"; permission = "operserv/kill"; }
/*
* os_list
*
* Provides the commands operserv/chanlist and operserv/userlist.
*
* Used to list and search the channels and users currently on the network.
*/
module { name = "os_list" }
command { service = "OperServ"; name = "CHANLIST"; command = "operserv/chanlist"; permission = "operserv/chanlist"; }
command { service = "OperServ"; name = "USERLIST"; command = "operserv/userlist"; permission = "operserv/userlist"; }
/*
* os_login
*
* Provides the commands operserv/login and operserv/logout.
*
* Used to login to OperServ, only required if your oper block requires this.
*/
module { name = "os_login" }
command { service = "OperServ"; name = "LOGIN"; command = "operserv/login"; }
command { service = "OperServ"; name = "LOGOUT"; command = "operserv/logout"; }
/*
* os_logsearch
*
* Provides the command operserv/logsearch.
*
* Used to search services log files.
*/
module
{
name = "os_logsearch"
/* The log file name to search. There should be a log{} block configured to log
* to a file of this name.
*/
logname = "services.log"
}
command { service = "OperServ"; name = "LOGSEARCH"; command = "operserv/logsearch"; permission = "operserv/logsearch"; }
/*
* os_mode
*
* Provides the commands operserv/mode and operserv/umode.
*
* Used to change user and channel modes.
*/
module { name = "os_mode" }
command { service = "OperServ"; name = "UMODE"; command = "operserv/umode"; permission = "operserv/umode"; }
command { service = "OperServ"; name = "MODE"; command = "operserv/mode"; permission = "operserv/mode"; }
/*
* os_modinfo
*
* Provides the commands operserv/modinfo and operserv/modlist.
*
* Used to show information about loaded modules.
*/
module { name = "os_modinfo" }
command { service = "OperServ"; name = "MODINFO"; command = "operserv/modinfo"; permission = "operserv/modinfo"; }
command { service = "OperServ"; name = "MODLIST"; command = "operserv/modlist"; permission = "operserv/modinfo"; }
/*
* os_module
*
* Provides the commands operserv/modload, operserv/modreload, and operserv/modunload.
*
* Used to load, reload, and unload modules.
*/
module { name = "os_module" }
command { service = "OperServ"; name = "MODLOAD"; command = "operserv/modload"; permission = "operserv/modload"; }
command { service = "OperServ"; name = "MODRELOAD"; command = "operserv/modreload"; permission = "operserv/modload"; }
command { service = "OperServ"; name = "MODUNLOAD"; command = "operserv/modunload"; permission = "operserv/modload"; }
/*
* os_news
*
* Provides the commands operserv/logonnews, operserv/opernews, and operserv/randomnews.
*
* Used to configure news notices shown to users when they connect, and opers when they oper.
*/
module
{
name = "os_news"
/*
* The service bot names to use to send news to users on connection
* and to opers when they oper.
*/
announcer = "Global"
oper_announcer = "OperServ"
/*
* The number of LOGON/OPER news items to display when a user logs on.
*
* This directive is optional, if not set it will default to 3.
*/
#newscount = 3
}
command { service = "OperServ"; name = "LOGONNEWS"; command = "operserv/logonnews"; permission = "operserv/news"; }
command { service = "OperServ"; name = "OPERNEWS"; command = "operserv/opernews"; permission = "operserv/news"; }
command { service = "OperServ"; name = "RANDOMNEWS"; command = "operserv/randomnews"; permission = "operserv/news"; }
/*
* os_noop
*
* Provides the command operserv/noop.
*
* Used to NOOP a server, which prevents users from opering on that server.
*/
module { name = "os_noop" }
command { service = "OperServ"; name = "NOOP"; command = "operserv/noop"; permission = "operserv/noop"; }
/*
* os_oper
*
* Provides the command operserv/oper.
*
* Used to configure opers and show information about opertypes.
*/
module { name = "os_oper" }
command { service = "OperServ"; name = "OPER"; command = "operserv/oper"; permission = "operserv/oper"; }
/*
* os_reload
*
* Provides the command operserv/reload.
*
* Used to reload the anope.conf configuration file.
*/
module { name = "os_reload" }
command { service = "OperServ"; name = "RELOAD"; command = "operserv/reload"; permission = "operserv/reload"; }
/*
* os_session
*
* Provides the commands operserv/exception and operserv/session.
*
* This module enables session limiting. Session limiting prevents users from connecting more than a certain
* number of times from the same IP at the same time - thus preventing most types of cloning.
* Once a host reaches its session limit, all clients attempting to connect from that host will
* be killed. Exceptions to the default session limit can be defined via the exception list.
*
* Used to manage the session limit exception list, and view currently active sessions.
*/
module
{
name = "os_session"
/*
* Default session limit per host. Once a host reaches its session limit, all clients attempting
* to connect from that host will be killed.
*
* This directive is required if os_session is loaded.
*/
defaultsessionlimit = 5
/*
* The maximum session limit that may be set for a host in an exception.
*
* This directive is required if os_session is loaded.
*/
maxsessionlimit = 100
/*
* Sets the default expiry time for session exceptions.
*/
#exceptionexpiry = 1d
/*
* The message that will be NOTICE'd to a user just before they are removed from the network because
* their host's session limit has been exceeded. It may be used to give a slightly more descriptive
* reason for the impending kill as opposed to simply "Session limit exceeded".
*
* This directive is optional, if not set, nothing will be sent.
*/
sessionlimitexceeded = "The session limit for your IP %IP% has been exceeded."
/*
* Same as above, but should be used to provide a website address where users can find out more
* about session limits and how to go about applying for an exception.
*
* Note: This directive has been intentionally commented out in an effort to remind you to change
* the URL it contains. It is recommended that you supply an address/URL where people can get help
* regarding session limits.
*
* This directive is optional, if not set, nothing will be sent.
*/
#sessionlimitdetailsloc = "Please visit https://your.website.url/ for more information about session limits."
/*
* If set and is not 0, this directive tells Anope to add an AKILL if the number of subsequent kills
* for the same host exceeds this value, preventing the network from experiencing KILL floods.
*
* This directive is optional.
*/
maxsessionkill = 15
/*
* Sets the expiry time for AKILLs set for hosts exceeding the maxsessionkill directive limit.
*
* This directive is optional, if not set, defaults to 30 minutes.
*/
sessionautokillexpiry = 30m
/*
* Sets the CIDR value used to determine which IP addresses represent the same person.
* By default this would limit 3 connections per IPv4 IP and 3 connections per IPv6 IP.
* If you are receiving IPv6 clone attacks it may be useful to set session_ipv6_cidr to
* 64 or 48.
*/
session_ipv4_cidr = 32
session_ipv6_cidr = 128
}
command { service = "OperServ"; name = "EXCEPTION"; command = "operserv/exception"; permission = "operserv/exception"; }
command { service = "OperServ"; name = "SESSION"; command = "operserv/session"; permission = "operserv/session"; }
/*
* os_set
*
* Provides the command operserv/set.
*
* Used to set various settings such as superadmin, debug mode, etc.
*/
module
{
name = "os_set"
/*
* If set, Services Admins will be able to use SUPERADMIN [ON|OFF] which will temporarily grant
* them extra privileges such as being a founder on ALL channels.
*
* This directive is optional.
*/
#superadmin = yes
}
command { service = "OperServ"; name = "SET"; command = "operserv/set"; permission = "operserv/set"; }
/*
* os_shutdown
*
* Provides the commands operserv/quit, operserv/restart, and operserv/shutdown.
*
* Used to quit, restart, or shutdown services.
*/
module { name = "os_shutdown" }
command { service = "OperServ"; name = "QUIT"; command = "operserv/quit"; permission = "operserv/quit"; }
command { service = "OperServ"; name = "RESTART"; command = "operserv/restart"; permission = "operserv/restart"; }
command { service = "OperServ"; name = "SHUTDOWN"; command = "operserv/shutdown"; permission = "operserv/shutdown"; }
/*
* os_stats
*
* Provides the operserv/stats command.
*
* Used to show statistics about services.
*/
module { name = "os_stats" }
command { service = "OperServ"; name = "STATS"; command = "operserv/stats"; permission = "operserv/stats"; }
/*
* os_svs
*
* Provides the commands operserv/svsnick, operserv/svsjoin, and operserv/svspart.
*
* Used to force users to change nicks, join and part channels.
*/
module { name = "os_svs" }
command { service = "OperServ"; name = "SVSNICK"; command = "operserv/svsnick"; permission = "operserv/svs"; }
command { service = "OperServ"; name = "SVSJOIN"; command = "operserv/svsjoin"; permission = "operserv/svs"; }
command { service = "OperServ"; name = "SVSPART"; command = "operserv/svspart"; permission = "operserv/svs"; }
/*
* os_sxline
*
* Provides the operserv/snline and operserv/sqline commands.
*
* Used to ban real names, nick names, and possibly channels.
*/
module { name = "os_sxline" }
command { service = "OperServ"; name = "SNLINE"; command = "operserv/snline"; permission = "operserv/snline"; }
command { service = "OperServ"; name = "SQLINE"; command = "operserv/sqline"; permission = "operserv/sqline"; }
/*
* os_update
*
* Provides the operserv/update command.
*
* Use to immediately update the databases.
*/
module { name = "os_update" }
command { service = "OperServ"; name = "UPDATE"; command = "operserv/update"; permission = "operserv/update"; }
+518
View File
@@ -0,0 +1,518 @@
/*
* Example configuration file for Anope. After making the appropriate
* changes to this file, place it in the Anope conf directory (as
* specified in the "Config" script, default /home/username/anope/conf)
* under the name "anope.conf".
*
* The format of this file is fairly simple: three types of comments are supported:
* - All text after a '#' on a line is ignored, as in shell scripting
* - All text after '//' on a line is ignored, as in C++
* - A block of text like this one is ignored, as in C
*
* Outside of comments, there are three structures: blocks, keys, and values.
*
* A block is a named container, which contains a number of key to value pairs
* - you may think of this as an array.
*
* A block is created like so:
* foobar
* {
* moo = "cow"
* foo = bar
* }
*
* Note that nameless blocks are allowed and are often used with comments to allow
* easily commenting an entire block, for example:
* #foobar
* {
* moo = "cow"
* foo = bar
* }
* is an entirely commented block.
*
* Keys are case insensitive. Values depend on what key - generally, information is
* given in the key comment. The quoting of values (and most other syntax) is quite
* flexible, however, please do not forget to quote your strings:
*
* "This is a parameter string with spaces in it"
*
* If you need to include a double quote inside a quoted string, precede it
* by a backslash:
*
* "This string has \"double quotes\" in it"
*
* Time parameters can be specified either as an integer representing a
* number of seconds (e.g. "3600" = 1 hour), or as an integer with a unit
* specifier: "s" = seconds, "m" = minutes, "h" = hours, "d" = days.
* Combinations (such as "1h30m") are not permitted. Examples (all of which
* represent the same length of time, one day):
*
* "86400", "86400s", "1440m", "24h", "1d"
*
* In the documentation for each directive, one of the following will be
* included to indicate whether an option is required:
*
* [REQUIRED]
* Indicates a directive which must be given. Without it, Anope will
* not start.
*
* [RECOMMENDED]
* Indicates a directive which may be omitted, but omitting it may cause
* undesirable side effects.
*
* [OPTIONAL]
* Indicates a directive which is optional. If not given, the feature
* will typically be disabled. If this is not the case, more
* information will be given in the documentation.
*
* [DISCOURAGED]
* Indicates a directive which may cause undesirable side effects if
* specified.
*
* [DEPRECATED]
* Indicates a directive which will disappear in a future version of
* Anope, usually because its functionality has been either
* superseded by that of other directives or incorporated into the main
* program.
*/
/*
* [OPTIONAL] Defines
*
* You can define values to other values, which can be used to easily change
* many values in the configuration at once.
*/
/*
* The stats.host define is used in multiple different locations throughout the
* configuration for the stats client hostname.
*/
define
{
name = "stats.host"
value = "stats.example.com"
}
/*
* [OPTIONAL] Additional Includes
*
* You can include additional configuration files here.
* You may also include executable files, which will be executed and
* the output from it will be included into your configuration.
*/
#include
{
type = "file"
name = "some.conf"
}
#include
{
type = "executable"
name = "/usr/bin/wget -q -O - https://some.misconfigured.network.com/stats.conf"
}
/*
* [REQUIRED] IRCd Config
*
* This section is used to set up Anope to connect to your IRC network.
* This section can be included multiple times, and Anope will attempt to
* connect to each server until it finally connects.
*
* Each uplink IRCd should have a corresponding configuration to allow Anope
* to link to it.
*
* An example configuration for InspIRCd that is compatible with the below uplink
* and serverinfo configuration would look like:
*
* # This goes in inspircd.conf, *NOT* your Anope config!
* <link name="stats.example.com"
* ipaddr="127.0.0.1"
* port="7000"
* sendpass="mypassword"
* recvpass="mypassword">
* <uline server="stats.example.com" silent="yes">
* <bind address="127.0.0.1" port="7000" type="servers">
*
* An example configuration for UnrealIRCd that is compatible with the below uplink
* and serverinfo configuration would look like:
*
* // This goes in unrealircd.conf, *NOT* your Anope config!
* listen {
* ip 127.0.0.1;
* port 7000;
* options {
* serversonly;
* };
* };
* link stats.example.com {
* incoming {
* mask *@127.0.0.1;
* };
* password "mypassword";
* class servers;
* };
* ulines { stats.example.com; };
*/
uplink
{
/*
* The IP address, hostname, or UNIX socket path of the IRC server you wish
* to connect Anope to.
* Usually, you will want to connect over 127.0.0.1 (aka localhost).
*
* NOTE: On some shell providers, this will not be an option.
*/
host = "127.0.0.1"
/*
* The protocol that Anope should use when connecting to the uplink. Can
* be set to "ipv4" (the default), "ipv6", or "unix".
*/
protocol = "ipv4"
/*
* Enable if Anope should connect using SSL.
* You must have an SSL module loaded for this to work.
*/
ssl = no
/*
* The port to connect to.
* The IRCd *MUST* be configured to listen on this port, and to accept
* server connections.
*
* Refer to your IRCd documentation for how this is to be done.
*/
port = 7000
/*
* The password to send to the IRC server for authentication.
* This must match the link block on your IRCd.
*
* Refer to your IRCd documentation for more information on link blocks.
*/
password = "mypassword"
}
/*
* [REQUIRED] Server Information
*
* This section contains information about the services server.
*/
serverinfo
{
/*
* The hostname that Anope will be seen as, it must have no conflicts with any
* other server names on the rest of your IRC network. Note that it does not have
* to be an existing hostname, just one that isn't on your network already.
*/
name = "stats.example.com"
/*
* The text which should appear as the server's information in /WHOIS and similar
* queries.
*/
description = "Anope IRC Statistics"
/*
* The local address that Anope will bind to before connecting to the remote
* server. This may be useful for multihomed hosts. If omitted, Anope will let
* the Operating System choose the local address. This directive is optional.
*
* If you don't know what this means or don't need to use it, just leave this
* directive commented out.
*/
#localhost = "nowhere."
/*
* What Server ID to use for this connection?
* Note: This should *ONLY* be used for TS6/P10 IRCds. Refer to your IRCd documentation
* to see if this is needed.
*/
#id = "00A"
/*
* The filename containing the Anope process ID. The path is relative to the
* services root directory.
*/
pid = "data/anope.pid"
/*
* The filename containing the Message of the Day. The path is relative to the
* services root directory.
*/
motd = "conf/motd.txt"
}
/*
* [REQUIRED] Protocol module
*
* This directive tells Anope which IRCd Protocol to speak when connecting.
* You MUST modify this to match the IRCd you run.
*
* Supported:
* - bahamut
* - hybrid
* - inspircd
* - ngircd
* - plexus
* - ratbox
* - solanum
* - unrealircd
*/
module
{
name = "inspircd"
}
/*
* [REQUIRED] Network Information
*
* This section contains information about the IRC network that Anope will be
* connecting to.
*/
networkinfo
{
/*
* This is the name of the network that Anope will be running on.
*/
networkname = "LocalNet"
/*
* Set this to the maximum allowed nick length on your network.
* Be sure to set this correctly, as setting this wrong can result in
* Anope being disconnected from the network. Defaults to 31.
*/
#nicklen = 31
/* Set this to the maximum allowed ident length on your network.
* Be sure to set this correctly, as setting this wrong can result in
* Anope being disconnected from the network. Defaults to 10.
*/
#userlen = 10
/* Set this to the maximum allowed hostname length on your network.
* Be sure to set this correctly, as setting this wrong can result in
* Anope being disconnected from the network. Defaults to 64.
*/
#hostlen = 64
/* Set this to the maximum allowed channel length on your network.
* Defaults to 64.
*/
#chanlen = 32
/* The maximum number of list modes settable on a channel (such as b, e, I).
* Comment out or set to 0 to disable.
*/
modelistsize = 100
/*
* The characters allowed in hostnames. This is used for validating hostnames given
* to services, such as BotServ bot hostnames and user vhosts. Changing this is not
* recommended unless you know for sure your IRCd supports whatever characters you are
* wanting to use. Telling services to set a vHost containing characters your IRCd
* disallows could potentially break the IRCd and/or Anope.
*
* It is recommended you DON'T change this.
*/
vhost_chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.-"
/*
* If set to true, allows vHosts to not contain dots (.).
* Newer IRCds generally do not have a problem with this, but the same warning as
* vhost_chars applies.
*
* It is recommended you DON'T change this.
*/
allow_undotted_vhosts = false
/*
* The characters that are not allowed to be at the very beginning or very ending
* of a vHost. The same warning as vhost_chars applies.
*
* It is recommended you DON'T change this.
*/
disallow_start_or_end = ".-"
}
/*
* [REQUIRED] Anope Options
*
* This section contains various options which determine how Anope will operate.
*/
options
{
/*
* On Linux/UNIX systems Anope can setuid and setgid to this user and group
* after starting up. This is useful if Anope has to bind to privileged ports.
*/
#user = "anope"
#group = "anope"
/*
* The case mapping used by services. This must be set to a valid locale name
* installed on your machine. Anope uses this case map to compare, with
* case insensitivity, things such as nick names, channel names, etc.
*
* We provide two special casemaps shipped with Anope, ascii and rfc1459.
*
* This value should be set to what your IRCd uses, which is probably rfc1459,
* however Anope has always used ascii for comparison, so the default is ascii.
*
* Changing this value once set is not recommended.
*/
casemap = "ascii"
/*
* Sets the timeout period for reading from the uplink.
*/
readtimeout = 5s
/*
* Sets the interval between sending warning messages for program errors via
* WALLOPS/GLOBOPS.
*/
warningtimeout = 4h
/*
* If set, Anope will only show /stats o to IRC Operators. This directive
* is optional.
*/
#hidestatso = yes
/*
* A space-separated list of U-lined servers on your network, it is assumed that
* the servers in this list are allowed to set channel modes and Anope will
* not attempt to reverse their mode changes.
*
* WARNING: Do NOT put your normal IRC user servers in this directive.
*
* This directive is optional.
*/
#ulineservers = "services.your.network"
/*
* How long to wait between connection retries with the uplink(s).
*/
retrywait = 60s
}
/*
* [RECOMMENDED] Logging Configuration
*
* This section is used for configuring what is logged and where it is logged to.
* You may have multiple log blocks if you wish. Remember to properly secure any
* channels you choose to have Anope log to!
*/
log
{
/*
* Target(s) to log to, which may be one of the following:
* - a channel name
* - a filename
* - globops
*/
target = "stats.log"
/* Log to both stats.log and the channel #stats
*
* Note that some older IRCds, such as Ratbox, require services to be in the
* log channel to be able to message it. To do this, configure service:channels to
* join your logging channel.
*/
#target = "stats.log #stats"
/*
* The source(s) to only accept log messages from. Leave commented to allow all sources.
* This can be a users name, a channel name, one of our clients (e.g. OperServ), or a server name.
*/
#source = ""
/*
* The bot used to log generic messages which have no predefined sender if there
* is a channel in the target directive.
*/
bot = "Global"
/*
* The number of days to keep log files, only useful if you are logging to a file.
* Set to 0 to never delete old log files.
*
* Note that Anope must run 24 hours a day for this feature to work correctly.
*/
logage = 7
/*
* What types of log messages should be logged by this block. There are nine general categories:
*
* servers - Server actions, linking, squitting, etc.
* channels - Actions in channels such as joins, parts, kicks, etc.
* users - User actions such as connecting, disconnecting, changing name, etc.
* other - All other messages without a category.
* rawio - Logs raw input and output from services
* debug - Debug messages (log files can become VERY large from this).
*
* These options determine what messages from the categories should be logged. Wildcards are accepted, and
* you can also negate values with a ~. For example, "~operserv/akill operserv/*" would log all operserv
* messages except for operserv/akill. Note that processing stops at the first matching option, which
* means "* ~operserv/*" would log everything because * matches everything.
*
* Valid server options are:
* connect, quit, sync, squit
*
* Valid channel options are:
* create, destroy, join, part, kick, leave, mode
*
* Valid user options are:
* connect, disconnect, quit, nick, ident, host, mode, maxusers, oper, away
*
* Rawio and debug are simple yes/no answers, there are no types for them.
*
* Note that modules may add their own values to these options.
*/
servers = "*"
#channels = "~mode *"
users = "connect disconnect nick"
other = "*"
rawio = no
debug = no
}
/*
* [REQUIRED] MySQL Database configuration.
*
* mysql
*
* This module allows other modules to use MySQL.
*/
module
{
name = "mysql"
mysql
{
/* The name of this service. */
name = "mysql/main"
database = "anope"
server = "127.0.0.1"
username = "anope"
password = "mypassword"
port = 3306
}
}
/*
* IRC2SQL Gateway
* This module collects data about users, channels and servers. It doesn't build stats
* itself, however, it gives you the database, it's up to you how you use it.
*
* Requires a MySQL Database and MySQL version 5.5 or higher
*/
include
{
type = "file"
name = "irc2sql.example.conf"
}
-386
View File
@@ -1,386 +0,0 @@
-- If you need to create your db, uncomment the following lines.
--
-- CREATE DATABASE anope;
-- USE anope;
-- --------------------------------------------------------
--
-- Table structure for table 'anope_extra'
--
DROP TABLE IF EXISTS anope_extra;
CREATE TABLE anope_extra (
data text NOT NULL default ''
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
-- --------------------------------------------------------
--
-- Table structure for table 'anope_commands'
--
DROP TABLE IF EXISTS anope_commands;
CREATE TABLE anope_commands (
nick varchar(255) NOT NULL default '',
service varchar(255) NOT NULL default '',
command text NOT NULL default ''
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
-- --------------------------------------------------------
--
-- Table structure for table 'anope_ns_core'
--
DROP TABLE IF EXISTS anope_ns_core;
CREATE TABLE anope_ns_core (
display varchar(255) NOT NULL default '',
pass text NOT NULL,
email text NOT NULL default '',
greet text NOT NULL default '',
icq int(10) unsigned NOT NULL default '0',
url text NOT NULL default '',
flags text NOT NULL default '',
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=MyISAM DEFAULT CHARSET=latin1;
--
-- Table structure for table 'anope_ns_core_metadata'
--
DROP TABLE IF EXISTS anope_ns_core_metadata;
CREATE TABLE anope_ns_core_metadata (
nick varchar(255) NOT NULL default '',
name varchar(255) NOT NULL default '',
value text NOT NULL default '',
PRIMARY KEY (name)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
-- ---------------------------------------------------------
--
-- Table structure for table 'anope_ns_alias'
--
DROP TABLE IF EXISTS anope_ns_alias;
CREATE TABLE 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 default '',
display varchar(255) NOT NULL default '',
PRIMARY KEY (nick)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
--
-- Table structure for table 'anope_ns_alias_metadata'
--
DROP TABLE IF EXISTS anope_ns_alias_metadata;
CREATE TABLE anope_ns_alias_metadata (
nick varchar(255) NOT NULL default '',
name varchar(255) NOT NULL default '',
value text NOT NULL default '',
PRIMARY KEY (name)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
-- --------------------------------------------------------
--
-- Table structure for table 'anope_ns_access'
--
DROP TABLE IF EXISTS anope_ns_access;
CREATE TABLE anope_ns_access (
display varchar(255) NOT NULL default '',
access varchar(160) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
-- ---------------------------------------------------------
--
-- Table structure for table 'anope_ns_request'
--
DROP TABLE IF EXISTS anope_ns_request;
CREATE TABLE 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=MyISAM DEFAULT CHARSET=latin1;
-- --------------------------------------------------------
--
-- Table structure for table 'anope_cs_access'
--
DROP TABLE IF EXISTS anope_cs_access;
CREATE TABLE 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,display)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
-- --------------------------------------------------------
--
-- Table structure for table 'anope_cs_akick'
--
DROP TABLE IF EXISTS anope_cs_akick;
CREATE TABLE 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 default '',
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=MyISAM DEFAULT CHARSET=latin1;
-- --------------------------------------------------------
--
-- Table structure for table 'anope_bs_badwords'
--
DROP TABLE IF EXISTS anope_bs_badwords;
CREATE TABLE 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=MyISAM DEFAULT CHARSET=latin1;
-- --------------------------------------------------------
--
-- Table structure for table 'anope_cs_info'
--
DROP TABLE IF EXISTS anope_cs_info;
CREATE TABLE anope_cs_info (
name varchar(255) NOT NULL default '',
founder text NOT NULL,
successor text NOT NULL,
descr text NOT NULL,
url text NOT NULL,
email 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 default '',
forbidby text NOT NULL,
forbidreason text NOT NULL,
bantype smallint(6) NOT NULL default '0',
mlock_on text NOT NULL default '',
mlock_off text NOT NULL default '',
mlock_params text NOT NULL default '',
entry_message text NOT NULL,
memomax smallint(5) unsigned NOT NULL default '0',
botnick varchar(255) NOT NULL default '',
botflags text NOT NULL default '',
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=MyISAM DEFAULT CHARSET=latin1;
-- --------------------------------------------------------
--
-- Table structure for table 'anope_cs_info_metadata'
--
DROP TABLE IF EXISTS anope_cs_info_metadata;
CREATE TABLE anope_cs_info_metadata (
channel varchar(255) NOT NULL default '',
name varchar(255) NOT NULL default '',
value text NOT NULL default ''
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
-- --------------------------------------------------------
--
-- Table structure for table 'anope_cs_levels'
--
DROP TABLE IF EXISTS anope_cs_levels;
CREATE TABLE 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=MyISAM DEFAULT CHARSET=latin1;
-- --------------------------------------------------------
--
-- Table structure for table 'anope_cs_ttb'
--
DROP TABLE IF EXISTS anope_cs_ttb;
CREATE TABLE 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=MyISAM DEFAULT CHARSET=latin1;
-- --------------------------------------------------------
--
-- Table structure for table 'anope_bs_core'
--
DROP TABLE IF EXISTS anope_bs_core;
CREATE TABLE anope_bs_core (
nick varchar(255) NOT NULL default '',
user varchar(255) NOT NULL default '',
host text NOT NULL default '',
rname text NOT NULL default '',
flags text NOT NULL default '',
created int(10) unsigned NOT NULL default '0',
chancount int(11) NOT NULL default '0',
PRIMARY KEY (nick)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
-- --------------------------------------------------------
--
-- Table structure for table 'anope_bs_info_metadata'
--
DROP TABLE IF EXISTS anope_bs_info_metadata;
CREATE TABLE anope_bs_info_metadata (
botname varchar(255) NOT NULL default '',
name varchar(255) NOT NULL default '',
value text NOT NULL default ''
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
-- --------------------------------------------------------
--
-- Table structure for table 'anope_ms_info'
--
DROP TABLE IF EXISTS anope_ms_info;
CREATE TABLE anope_ms_info (
receiver varchar(255) NOT NULL,
number int(11) NOT NULL default '0',
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'
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
-- --------------------------------------------------------
--
-- Table structure for table 'anope_os_akills'
--
DROP TABLE IF EXISTS anope_os_akills;
CREATE TABLE 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=MyISAM DEFAULT CHARSET=latin1;
-- --------------------------------------------------------
--
-- Table structure for table 'anope_os_core'
--
DROP TABLE IF EXISTS anope_os_core;
CREATE TABLE 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',
sglines_count int(11) NOT NULL default '0',
sqlines_count int(11) NOT NULL default '0',
szlines_count int(11) NOT NULL default '0'
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
-- --------------------------------------------------------
--
-- Table structure for table 'anope_os_exceptions'
--
DROP TABLE IF EXISTS anope_os_exceptions;
CREATE TABLE 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=MyISAM DEFAULT CHARSET=latin1;
-- --------------------------------------------------------
--
-- Table structure for table 'anope_os_sxlines'
--
DROP TABLE IF EXISTS anope_os_sxlines;
CREATE TABLE anope_os_sxlines (
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=MyISAM DEFAULT CHARSET=latin1;
-- --------------------------------------------------------
--
-- Table structure for table 'anope_metadata'
--
DROP TABLE IF EXISTS anope_metadata;
CREATE TABLE anope_metadata (
name varchar(255) NOT NULL default '',
value text NOT NULL default '',
PRIMARY KEY (name)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
-- --------------------------------------------------------
--
-- Table structure for table 'anope_info'
--
DROP TABLE IF EXISTS anope_info;
CREATE TABLE anope_info (
version int(11) default NULL,
date datetime default NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
-1
View File
@@ -1 +0,0 @@
astyle --style=java --indent=tab --brackets=break-closing --indent-switches --indent-cases --brackets=break
-4
View File
@@ -1,4 +0,0 @@
Reported Bugs from Bugzilla: http://bugs.anope.org/
---------------------------------------------------
-106
View File
@@ -1,106 +0,0 @@
C++-style Casting
=================
In C, you can cast in one of two ways:
(type)var
type(var)
The problem with C-style casting is that it allows a programmer to get away
with too much, and is also not designed to handle C++ classes.
C++ has 4 types of casting in addition to allowing C-style casting. They are:
static_cast
const_cast
dynamic_cast
reinterpret_cast
The syntax is usually *_cast<type>(var).
static_cast
-----------
From my expierence, this cast is closest to C-style casting for non-pointer
types as well as between some (but not all) pointer types. This type of cast,
like C-style casting, is performed at compile-time. static_cast can also do
a downcast of a derived class to a base class, but only if the base class is
not a virtual base class. Sometimes the result of this cast can become
undefined. static_cast is a bit more strict that C-style casting, though. It
disallows certain class conversions that would've been allowed with a C-style
cast. static_cast also doesn't allow you to cast to an incomplete type. In
these cases, I would try either dynamic_cast or reinterpret_cast.
const_cast
----------
This cast is mainly to add or remove const-ness or volatile-ness from a
variable. This is safer than using a C-style cast to change the const-ness
of a variable. In most cases if you try to use one of the other casts and it
complains about const-ness, you will want to either use this cast instead or
wrap the other cast around this cast. An example:
const int *a;
static_cast<void *>(a); <-- This will fail.
To remedy the above, you would might try this:
const int *a;
const_cast<void *>(a); <-- But this will still fail.
The real solution is this:
const int *a;
static_cast<void *>(const_cast<int *>(a));
It is not recommended to use const_cast on the this variable within a member
function of a class that is declared const. Instead you should use the mutable
keyword on the variable in the class's definition.
dynamic_cast
------------
This cast can only be used on pointers or references to classes. It can cast a
derived class to a base class, a derived class to another derived class
(provided that both are children of the same base class), or a base class to a
derived class. You can also use this to cast a class to void *. This cast is
done at run-time as opposed to the other casts, and relies on C++'s RTTI to be
enabled. It is meant to be used on polymorphic classes, so use static_cast on
non-polymorphic classes.
derived-to-base conversions are actually done statically, so you use either
dynamic_cast or static_cast on them, regardless of if the classes are
polymorphic or not.
derived-to-derived or base-to-derived conversions, however, rely on run-time
type information, and this cast is used on those classes that are polymorphic.
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.
reinterpret_cast
----------------
This cast I would use only as a last resort if static_cast isn't allowed on a
conversion. It allows for conversions between two unrelated types, such as
going from char * to int *. It can also be used to convert a pointer to an
integral type and vica versa. The sites I've read mention how the result is
non-portable, which I assume means the resulting object code is non-portable,
so since the code is compiled on many systems anyways, I don't see this as
being a huge issue. It is recommended to only use this if necessary, though.
Links
=====
The following links are web sites I've used to get this information, and might
describe some of the above a bit better than I have. :P
http://www.acm.org/crossroads/xrds3-1/ovp3-1.html
http://www.cplusplus.com/doc/tutorial/typecasting.html
http://www.codeguru.com/forum/showthread.php?t=312456
http://www.cs.umd.edu/class/sum2003/cmsc311/Notes/BitOp/cast.html
http://msdn.microsoft.com/en-us/library/5f6c9f8h(VS.80).aspx
http://en.wikibooks.org/wiki/C%2B%2B_Programming/Type_Casting
http://www.informit.com/guides/content.aspx?g=cplusplus&seqNum=134
-- CyberBotX, Nov 23, 2008
+4 -4
View File
@@ -6,10 +6,10 @@ if(WIN32)
if(IN_SOURCE)
# 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)
endif()
set(DOCS Changes Changes.conf DEFCON FAQ INSTALL LANGUAGE MODULES ${CMAKE_CURRENT_BINARY_DIR}/README.txt WIN32.txt)
install(FILES ${DOCS}
DESTINATION docs
DESTINATION ${DOC_DIR}
)
set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${CMAKE_CURRENT_BINARY_DIR}/README.txt")
endif(WIN32)
endif()
-170
View File
@@ -1,170 +0,0 @@
Orginally pulled from: http://www.inspircd.org/wiki/Coding_Guidelines
Yes, I'm aware the formatting of this document is ugly. It'll be fixed when someone cares. Read the wiki page if you want pretty for now.
---
InspIRCd Coding Guidelines
The following are a set of guidelines for writing patches to InspIRCd, or for creating modules for distribution with the official package. These
guidelines were written a time after InspIRCd development started, and so not all code yet follows these. This will be rectified with time.
1. Comments
Multi Line
Multiple line comments should follow the C-style comment, for example:
/*
* This is a multiple line comment, huzzah..
*/
Single Line
Single line comments should also be in the C style, for example:
/* This is a boring one-line comment */
Doxygen commenting
If you wish your comment to show in doxygen, the comment should be directly above the item you are documenting (a class, function, enum, etc)
and the first line should be "/**". For example:
/** This is a doxygen multiline comment.
* Description of thingymebob here.
*/
The first line after the "**" is used as the short description of the item (up to the full stop) and everything afterwards as the detailed
description.
Indentation
Tabs. Tabs. ONLY TABS. Use a single tab for each level of indentation, for example:
int main()
{
<tab>if (condition)
<tab>{
<tab><tab>code
<tab>}
}
Separation
Always put a space in between a keyword like if/while and the condition, for example:
if (foo == bar)
NOT
if(foo == bar)
Braces
Always put braces opening and closing blocks on separate lines, see the identation example. For example, place braces like this:
if (apples == "green")
{
cout << "Apples are green" << endl;
}
and not:
if (apples == "green") {
cout << "Apples are green" << endl;
}
The one exception to this is if you are declaring a class method which is only one line long, in that case the following is acceptable in most cases:
class foo : public bar
{
foo() { }
getrandomfoo() { return rand(); }
};
Templates
Where possible, use templates rather than #defines. Avoid use of RTTI.
Structs
Structs should be declared in the following fashion:
struct BodyPartBasket
{
int arms;
int legs;
int scrotalsacs;
};
and not like this:
typedef struct
{
int arms;
int legs;
int scrotalsacs;
} BodyPartBasket;
The second way is not required in C++ to be able to do this:
BodyPartBasket mybasket;
Plus, placing the name at the bottom of the declaration makes readability more difficult (as you have to scroll down to the bottom of the
struct to find its name).
(where possible, call them classes rather than structs.)
Variable naming
Class and struct names should be in camel case with a leading capital letter, for example "MyBagOfBones" and not "my_bag_of_bones" or
"mybagofbones". Variable names can be in either camel case with a leading capital letter or alternatively all lower case, so long as the same
naming convention is adhered to throughout the class. No classes or variables should be named in capitals unless this makes sense for the
name (for example "class DNS"). Constants and enum values should always be completely in CAPITALS and underscores may be used, for example:
enum DecayState
{
DECAYED_MOULDY = 0,
DECAYED_SMELLY = 1,
DECAYED_MAGGOTS = 2
};
All value names in an enum should be started with the same text which should be related in some way to the enum's use. For example "DNS_CNAME,
DNS_A, DNS_AAAA".
Use of references
Wherever possible, when dealing with any complex class, pass a const reference rather than a copy of the class. For example:
MyThingy::MyThingy(const std::string &thingyvalue)
{
}
Of course, if you intended to change the string you can just omit the 'const'.
Use of char pointers
Whenever you use char pointers (char*, char**) try to use const equivalents. This is much safer and avoids ugly and dangerous casts. For example:
MyThingy::Thingify(const char* const* wotsits)
{
}
If it is possible without performance loss, consider avoiding char pointers altogether and using std::string instead.
Use of STL
For more information on use of STL in InspIRCd, please see the separate STL FAQ.
Making copies of data
Never ever make a copy of a piece of data unless it is absolutely necessary. For example, don't use strlcpy() to make a copy of the const char* string
returned by std::string::c_str(), if the change can be done to the std::string itself. The same goes for unnecessary variable assignments, especially
those which assign large classes.
namespace std
Avoid the following:
using namespace std;
It might take a bit more typing, but things work better if you don't set (then later assume) the namespace -- specify it explicitly when you want to
use it.
Linefeeds
Unix linefeeds only please. We do not like to see our screens covered in ^M. :-)
Portability
Always make sure your code is portable to all supported operating systems, remember of course that as of 1.1.8 this includes windows. Don't write code
that only works on windows, or only works on Linux. Test your code on all platforms or ask for help from other developers who have the platforms you
want to test on.
new() and delete(), malloc() and free()
Apart from the fact that using malloc() and free() is bad practice in C++ code, you must never use malloc() or free() in InspIRCd, within its modules
or within the core. This is because if you use malloc() or free() in windows, the memory is claimed from the program's local heap. In windows, each
shared object (module, dll) has its own heap, which is protected from other dlls and executables. To get around this issue and allow more posix-like
memory access from other dlls in the program (other modules), InspIRCd overrides the operators new and delete to ensure that memory allocated by them
comes from the windows global heap. If you use malloc() and free() for this, the ircd will segfault when another module tries to access the memory you
have allocated!
strdup()
As with malloc(), above, strdup() should be avoided. Where strdup() is absolutely necessary, use strnewdup() which is our strdup() implementation that
calls operator new instead of using malloc(). char arrays allocated by strnewdup() should be deleted with operator delete[].
CoreExport and DllImport
Prefix all types you want to import or export to other modules with CoreExport and DllImport macros. These do nothing in POSIX operating systems,
however in windows these are expanded to the instructions __declspec(dllimport) and __declspec(dllexport) respectively depending on where they are
used and how.
External Dependencies
If a module is compiled as standard, or the code is part of the core, you must not use any dependencies that are not available as standard on all
supported operating systems beyond libstdc++, libc, and whatever else is currently required to build the core. Modules which use nonstandard
dependencies belong in the modules/extra directory.
Profiling and Performance
It is one thing to assume that code performs bad, it is another thing to prove that it actually is. A lot of experienced programmers talk about
'premature optimisation', and here is what it means: if you have a piece of code called once on startup that takes 10 seconds instead of one second to
run, and a piece of code that takes 0.05 seconds to run when it should take 0.01, and it is called once per second, the second piece of code is the
priority.
In other words, make sure that what you think is slow, and a performance problem in Insp actually is.
To do this, use the callgrind tool from Valgrind (valgrind --tool=cachegrind bin/inspircd -nofork -debug), and kcachegrind (or similar) to view the
output files.
+260 -252
View File
@@ -1,339 +1,347 @@
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
675 Mass Ave, Cambridge, MA 02139, USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
Preamble
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Library General Public License instead.) You can apply it to
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Lesser General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
You may charge a fee for the physical act of transferring a copy, and
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the entire
whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three years,
to give any third party, for a charge no more than your cost of
physically performing source distribution, a complete machine-readable
copy of the corresponding source code, to be distributed under the terms
of Sections 1 and 2 above on a medium customarily used for software
interchange; or,
c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is allowed
only for noncommercial distribution and only if you received the program
in object code or executable form with such an offer, in accord with
Subsection b above.)
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent license
would not permit royalty-free redistribution of the Program by all those
who receive copies directly or indirectly through you, then the only way
you could satisfy both it and this License would be to refrain entirely
from distribution of the Program.
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is implemented
by public license practices. Many people have made generous contributions
to the wide range of software distributed through that system in reliance
on consistent application of that system; it is up to the author/donor to
decide if he or she is willing to distribute software through any other
system and a licensee cannot impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
This section is intended to make thoroughly clear what is believed to be
a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
Appendix: How to Apply These Terms to Your New Programs
END OF TERMS AND CONDITIONS
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
How to Apply These Terms to Your New Programs
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make
it free software which everyone can redistribute and change under
these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) 19yy <name of author>
<one line to give the program's name and an idea of what it does.>
Copyright (C) yyyy name of author
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301, USA.
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
Gnomovision version 69, Copyright (C) 19yy name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
Gnomovision version 69, Copyright (C) year name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details
type `show w'. This is free software, and you are welcome
to redistribute it under certain conditions; type `show c'
for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James Hacker.
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James Hacker.
<signature of Ty Coon>, 1 April 1989
Ty Coon, President of Vice
<signature of Ty Coon>, 1 April 1989
Ty Coon, President of Vice
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Library General
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License.
+48 -97
View File
@@ -1,100 +1,51 @@
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 2.1.3
-------------------
Added alternate command suggestions when a user runs an invalid command.
Added support for the IRCv3 +draft/channel-context tag.
Added support for the IRCv3 +draft/reply tag.
Allow using more than one fingerprint in an oper block.
Changed chanserv/drop to use confirmation codes to confirm a channel drop.
Cleaned up more of the codebase to use Modern C++17.
Enabled using more field limits sent by the IRC server instead of requiring the user to configure them.
Fixed NickServ lying about the minimum password length.
Fixed a crash when sending emails.
Fixed bs_kick not using the correct kick message for automatic kicks.
Increased the security of randomly generated confirmation codes.
Removed the ns_access module and associated cs_secure and ns_secure options.
Removed the ns_status module.
Reworked how messages are sent in protocol modules to allow sending message tags.
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)
Anope Version 2.1.2
-------------------
Bumped the minimum OpenSSL version to 1.1.0.
Bumped the minumum GnuTLS version to 3.0.0.
Disabled SSLv3 support in the m_ssl_openssl module.
Modernized mutex and thread code to use Modern C++.
Normalised the program exit codes.
Updated the Dutch translation.
Updated the French translation.
Provided by Ankit <ankit@nevitus.com> - 2009
F Segfault on shutdown
Anope Version 2.1.1
-------------------
Added the UNBANME privilege to allow users to unban themselves.
Fixed building on Windows systems without chgrp/chmod.
Fixed creating sockets in the m_dns, m_httpd, m_proxyscan, and m_redis modules.
Fixed reading the values of command line arguments.
Moved core privilege descriptions to the example configs.
Updated the Italian translation.
Updated the Polish translation.
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.
Anope Version 2.1.0
-------------------
Added support for access list entry descriptions.
Added support for linking over a UNIX socket.
Added support for server-initiated logins and logouts on UnrealIRCd.
Added support for server-initiated logouts on InspIRCd.
Added support for the ANONYMOUS SASL mechanism.
Allowed users to opt-out of being added to channel access lists.
Cleaned up the codebase to use Modern C++17.
Modernized the build system to use a modern version of CMake.
Removed support for using insecure encryption methods as the primary method.
Removed the Windows-only anopesmtp tool.
Removed the two day X-line cap.
Updated all references to IRCServices to refer to Anope instead.
+43 -49
View File
@@ -1,52 +1,46 @@
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
Anope Version 2.1.3
-------------------
** ADDED CONFIGURATION DIRECTIVES **
Opertypes have been added, through the opertype blocks.
Services Operators are now specified in the oper blocks.
Added options:didyoumeandifference.
Added support for multiple SSL fingerprints in oper:certfp.
Added the chanserv/cert oper privilege for modifying other user's certificate lists.
Changed networkinfo:chanlen to default to 32 if not set.
Changed networkinfo:hostlen to default to 64 if not set.
Changed networkinfo:modelistsize to default to 100 if not set.
Changed networkinfo:nicklen to default to 31 if not set.
Changed networkinfo:userlen to default to 10 if not set.
Increased the default maximum password length to 50 characters.
Increased the default minimum password length to 10 characters.
Removed the cs_secure option in module:defaults from the chanserv module (now always enabled).
Removed the nickserv/saset/secure command.
Removed the nickserv/saset/secure oper privilege.
Removed the nickserv/set/secure command.
Removed the nickserv/status command.
Removed the ns_access module.
Removed the ns_secure option in module:defaults from the nickserv module (now always enabled).
** 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.
Anope Version 2.1.2
-------------------
Added module:tlsv10 to the ssl_openssl module for configuring whether TLSv1.0 is usable (defaults to no).
Added module:tlsv11 to the ssl_openssl module for configuring whether TLSv1.1 is usable (defaults to yes).
Added module:tlsv12 to the ssl_openssl module for configuring whether TLSv1.2 is usable (defaults to yes).
Removed module:sslv3 from the ssl_openssl module (now always disabled).
Removed the m_ prefix from the names of the chanstats, dns, dnsbl, helpchan, httpd, ldap, ldap_oper, mysql, proxyscan, redis, regex_pcre2, regex_posix, regex_stdlib, regex_tre, rewrite, sasl, sql_log, sql_oper, sqlite, ssl_gnutls, ssl_openssl, xmlrpc, and xmlrpc_main modules.
** 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.
Anope Version 2.1.1
-------------------
Added the m_regex_stdlib module.
Removed the m_regex_pcre module (use m_regex_pcre2 instead).
Anope Version 2.1.0
-------------------
Added nickserv:minpasslen for configuring the minimum password length (defaults to 8).
Removed nickserv:strictpasswords as it is obsolete now nickserv:minpasslen exists.
Removed the inspircd12 and inspircd20 modules (use inspircd instead).
Removed the ns_getpass module (no supported encryption modules).
Removed the os_oline module (no supported IRCds).
Removed the unreal module (use unrealircd instead).
Renamed nickserv:passlen to nickserv:maxpasslen.
Renamed the charybdis module to solanum.
Renamed the inspircd3 module to inspircd.
Renamed the unreal4 module to unrealircd.
Replaced uplink:ipv6 with uplink:protocol.
-255
View File
@@ -1,255 +0,0 @@
Anope Version 1.9.2
--------------------
*** New Strings:
CHAN_INVITE_OTHER_SUCCESS
NICK_HELP_CONFIRM_OPER
CHAN_QOP_DISABLED
CHAN_QOP_NICKS_ONLY
CHAN_QOP_ADDED
CHAN_QOP_MOVED
CHAN_QOP_NO_SUCH_ENTRY
CHAN_QOP_NOT_FOUND
CHAN_QOP_DELETED
CHAN_QOP_DELETED_ONE
CHAN_QOP_DELETED_SEVERAL
CHAN_QOP_LIST_EMPTY
CHAN_QOP_LIST_HEADER
CHAN_QOP_CLEAR
CHAN_HELP_QOP
CHAN_QOP_SYNTAX
CHAN_HELP_CMD_QOP
CHAN_HELP_SET_PASSWORD
CHAN_LEVEL_AUTOOWNER
CHAN_LEVEL_OWNER
CHAN_LEVEL_OWNERME
CHAN_ACCESS_VIEW_XOP_FORMAT
CHAN_ACCESS_VIEW_AXS_FORMAT
CHAN_SET_PERSIST_SYNTAX
CHAN_SET_PERSIST_ON
CHAN_SET_PERSIST_OFF
CHAN_INFO_OPT_PERSIST
BOT_UNASSIGN_PERSISTANT_CHAN
CHAN_HELP_SET_PERSIST
NICK_RESETPASS_SYNTAX
NICK_RESETPASS_SUBJECT
NICK_RESETPASS_MESSAGE
NICK_RESETPASS_COMPLETE
NICK_CONFIRM_EXPIRED
NICK_CONFIRM_SUCCESS
NICK_HELP_CMD_RESETPASS
NICK_HELP_RESETPASS
CHAN_UNBANNED_OTHER
OPER_HELP_SYNC
OPER_HELP_CMD_SQLSYNC
OPER_SYNC_UPDATING
OPER_SYNC_UPDATED
CHAN_LEVELS_CHANGED_FOUNDER
*** Mod Strings:
CHAN_HELP_SET
CHAN_REGISTER_SYNTAX
CHAN_ACCESS_SYNTAX
CHAN_HELP_ACCESS
CHAN_HELP_SET
NICK_HELP_CONFIRM
CHAN_UNBAN_SYNTAX
CHAN_HELP_CMD_UNBAN
CHAN_HELP_UNBAN
CHAN_HELP_REGISTER
CHAN_HELP_DROP
CHAN_HELP_LEVELS
*** Del Strings:
CHAN_PASSWORD_IS
CHAN_SET_PASSWORD_FAILED
CHAN_PASSWORD_CHANGED
CHAN_IDENTIFY_SUCCEEDED
CHAN_IDENTIFY_FAILED
CHAN_HELP_IDENTIFY
CHAN_IDENTIFY_SYNTAX
CHAN_HELP_CMD_IDENTIFY
CHAN_LOGOUT_FOUNDER_FAILED
CHAN_LOGOUT_SUCCEDED
CHAN_LOGOUT_NOT_LOGGEDIN
CHAN_LOGOUT_ALL_SUCCEEDED
CHAN_SERVADMIN_HELP_LOGOUT
CHAN_HELP_LOGOUT
CHAN_LOGOUT_SERVADMIN_SYNTAX
CHAN_LOGOUT_SYNTAX
CHAN_HELP_CMD_LOGOUT
CHAN_GETPASS_UNAVAILABLE
CHAN_GETPASSWORD_IS
CHAN_SERVADMIN_HELP_GETPASS
CHAN_GETPASS_SYNTAX
CHAN_HELP_CMD_GETPASS
CHAN_SENDPASS_SUBJECT
CHAN_SENDPASS_HEAD
CHAN_SENDPASS_LINE_1
CHAN_SENDPASS_LINE_2
CHAN_SENDPASS_LINE_3
CHAN_SENDPASS_LINE_4
CHAN_SENDPASS_LINE_5
CHAN_SENDPASS_OK
CHAN_SENDPASS_UNAVAILABLE
CHAN_HELP_SENDPASS
CHAN_SENDPASS_SYNTAX
CHAN_HELP_CMD_SENDPASS
OPER_DEFCON_NO_CONF
Anope Version 1.9.1
--------------------
*** New Strings:
COMMAND_REQUIRES_PERM
COMMAND_IDENTIFY_REQUIRED
COMMAND_CANNOT_USE
COMMAND_CAN_USE
NICK_STATUS_REPLY
NICK_INFO_SERVICES_OPERTYPE
CHAN_LOGOUT_NOT_LOGGEDIN
CHAN_INVITE_ALREADY_IN
CHAN_INVITE_SUCCESS
CHAN_OP_SYNTAX
CHAN_HALFOP_SYNTAX
CHAN_VOICE_SYNTAX
CHAN_PROTECT_SYNTAX
CHAN_OWNER_SYNTAX
CHAN_DEOP_SYNTAX
CHAN_DEHALFOP_SYNTAX
CHAN_DEVOICE_SYNTAX
CHAN_DEPROTECT_SYNTAX
CHAN_DEOWNER_SYNTAX
CHAN_KICK_SYNTAX
CHAN_BAN_SYNTAX
MEMO_STAFF_SYNTAX
OPER_JUPE_INVALID_SERVER
*** Mod Strings:
NICK_LOGOUT_SERVICESADMIN
CHAN_STATUS_SYNTAX
CHAN_GETKEY_KEY
MEMO_SET_NOTIFY_SYNTAX
BOT_REASON_BADWORD
BOT_BOTLIST_EMPTY
OPER_IGNORE_SYNTAX
OPER_DEFCON_SYNTAX
OPER_HELP_EXCEPTION
OPER_HELP_SESSION
NEWS_LOGON_SYNTAX
NEWS_OPER_SYNTAX
NEWS_RANDOM_SYNTAX
NEWS_HELP_LOGON
NEWS_HELP_OPER
NEWS_HELP_RANDOM
NICK_HELP_STATUS
NICK_HELP_SENDPASS
NICK_SERVADMIN_HELP
NICK_SERVADMIN_HELP_LOGOUT
NICK_SERVADMIN_HELP_DROP
NICK_SERVADMIN_HELP_INFO
NICK_SERVADMIN_HELP_LIST
NICK_SERVADMIN_HELP_ALIST
NICK_SERVADMIN_HELP_GLIST
CHAN_HELP_SET_RESTRICTED
CHAN_HELP_OP
CHAN_HELP_DEOP
CHAN_HELP_VOICE
CHAN_HELP_DEVOICE
CHAN_HELP_HALFOP
CHAN_HELP_DEHALFOP
CHAN_HELP_PROTECT
CHAN_HELP_DEPROTECT
CHAN_HELP_OWNER
CHAN_HELP_DEOWNER
CHAN_HELP_KICK
CHAN_HELP_CLEAR
CHAN_HELP_GETKEY
CHAN_HELP_SENDPASS
CHAN_SERVADMIN_HELP
CHAN_SERVADMIN_HELP_LOGOUT
CHAN_SERVADMIN_HELP_DROP
CHAN_SERVADMIN_HELP_SET
CHAN_SERVADMIN_HELP_INFO
CHAN_SERVADMIN_HELP_LIST
MEMO_HELP_SET_NOTIFY
MEMO_HELP_STAFF
OPER_HELP_CMD_CHANKILL
OPER_HELP_STATS
OPER_HELP_IGNORE
OPER_HELP_UMODE
OPER_HELP_ULINE
OPER_HELP_SVSNICK
OPER_HELP_SET
BOT_HELP
BOT_SERVADMIN_HELP_BOT
BOT_SERVADMIN_HELP_SET
HOST_DELALL_SYNTAX
HOST_SET_SYNTAX
HOST_SETALL_SYNTAX
HOST_DEL_SYNTAX
*** Del Strings:
PERMISSION_DENIED
RAW_DISABLED
HELP_LIMIT_SERV_OPER
HELP_LIMIT_SERV_ADMIN
HELP_LIMIT_SERV_ROOT
HELP_LIMIT_IRC_OPER
HELP_LIMIT_HOST_SETTER
HELP_LIMIT_HOST_REMOVER
NICK_STATUS_0
NICK_STATUS_1
NICK_STATUS_2
NICK_STATUS_3
NICK_INFO_SERVICES_OPER
NICK_INFO_SERVICES_ADMIN
NICK_INFO_SERVICES_ROOT
CHAN_MUST_REGISTER_NICK
CHAN_MUST_IDENTIFY_NICK
OPER_ADMIN_SYNTAX
OPER_ADMIN_SKELETON
OPER_ADMIN_EXISTS
OPER_ADMIN_REACHED_LIMIT
OPER_ADMIN_ADDED
OPER_ADMIN_NOT_FOUND
OPER_ADMIN_NO_MATCH
OPER_ADMIN_DELETED
OPER_ADMIN_DELETED_ONE
OPER_ADMIN_DELETED_SEVERAL
OPER_ADMIN_LIST_EMPTY
OPER_ADMIN_LIST_HEADER
OPER_ADMIN_LIST_FORMAT
OPER_ADMIN_CLEAR
OPER_ADMIN_MOVED
OPER_OPER_SYNTAX
OPER_OPER_SKELETON
OPER_OPER_EXISTS
OPER_OPER_REACHED_LIMIT
OPER_OPER_ADDED
OPER_OPER_NOT_FOUND
OPER_OPER_NO_MATCH
OPER_OPER_DELETED
OPER_OPER_DELETED_ONE
OPER_OPER_DELETED_SEVERAL
OPER_OPER_LIST_EMPTY
OPER_OPER_LIST_HEADER
OPER_OPER_LIST_FORMAT
OPER_OPER_CLEAR
OPER_OPER_MOVED
OPER_SET_SQL_ON
OPER_SET_SQL_OFF
OPER_SET_SQL_ERROR
OPER_SET_SQL_ERROR_INIT
OPER_SET_SQL_ERROR_DISABLED
OPER_RAW_SYNTAX
HELP_HELP
HELP_HELP_BOT
HELP_HELP_HOST
OPER_HELP_CMD_OPER
OPER_HELP_CMD_ADMIN
OPER_HELP_OPER
OPER_HELP_ADMIN
OPER_HELP_SET_SQL
OPER_HELP_RAW
HOST_ID
HOST_NOT_REGGED
HOST_OFF_UNREAL
+28 -32
View File
@@ -1,4 +1,4 @@
Anope DefCon
Anope DefCon
------------
1) Introduction
@@ -10,8 +10,8 @@ Anope DefCon
1) Introduction
Anope 1.6 onwards supports a unique protection mechanism based on the
military "Defense Readiness Condition" (DefCon) system. It is based on
Anope supports a unique protection mechanism based on the
military "Defense Readiness Condition" (DefCon) system. It is based on
5 levels of defense readiness defined as:
DEFCON5 Normal peacetime readiness
@@ -23,18 +23,19 @@ Anope DefCon
These are configurable levels that mandates what actions Anope should
take in case of emergency and change in readiness status.
It is used to prevent abuse to both Services, and the ircd on which they
It is used to prevent abuse to both Anope, and the IRCd on which they
are running. Also to protect the users, primarily in the event of Clones
and/or FloodBOT attacks.
and/or FloodBOT attacks.
2) Installation
The DefCon system is part of Anope's core,
The DefCon system has to be configured on your services.conf file to
be enabled. The defcon module will not unload unless all non-optional
directives are set. Look for the defcon block
section on your services.conf file for more information.
The DefCon system has to be configured on your operserv.conf file to
be enabled. Defcon will be disabled if "defaultlevel" in the defcon
block is left commented, or set to 0. Look for the defcon block
on your operserv.conf file for more information on enabling and
configuring it.
Make sure you restart Anope after changing the DefCon configuration
directives.
@@ -43,26 +44,26 @@ Anope DefCon
Pre-defined DefCon actions:
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 channel registrations
No New Nick Registrations
No Mode Lock changes
Force Chan Mode
Use Reduced Session Limit
KILL any new clients trying to connect
Ignore everyone but opers
Silently ignore everyone but opers
AKILL all new clients trying to connect
No new memos sent to block MemoServ attacks
Information regarding how to enable this for specific defcon levels can
be found in services.conf
be found in operserv.conf
4) Usage
Anope starts up in DEFCON5 (normal readiness). To change the Defcon level
in action use:
/msg OperServ DEFCON 1|2|3|4|5
Anope starts up in DEFCON5 (normal readiness). To change the Defcon level
in action use:
/msg OperServ DEFCON 1|2|3|4|5
5) Usage Example
@@ -70,28 +71,23 @@ Anope DefCon
/msg OperServ DEFCON 4
*** Global -- from OperServ: dengel Changed the DEFCON level to 4
-OperServ- Services are now at DEFCON 4
-OperServ- * No new channel registrations
-OperServ- * No new nick registrations
-OperServ- * No MLOCK changes
-OperServ- * No mode lock changes
-OperServ- * Use the reduced session limit of 5
-Global- The Defcon Level is now at Level: 4
-Global- The Defcon Level is now at: 4
Restore normal readiness:
/msg OperServ DEFCON 5
*** Global -- from OperServ: dengel Changed the DEFCON level to 5
-OperServ- Services are now at DEFCON 5
-Global- Services are now back to normal, sorry for any inconvenience
6) Support
You might get DefCon support by posting on our online forum, or maybe on
You might get DefCon support by posting on our online forum, or maybe on
our #anope channel at /server irc.anope.org.
-42
View File
@@ -1,42 +0,0 @@
Anope Internal Events
---------------------
1) Intro
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.
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) Using Events
Anope is told about modules wanting to hook to events by the function
ModuleManager::Attach(EventName, Module*);, eg:
ModuleManager::Attach(I_OnJoinChannel, this);
You can also specifcy an array of events:
Implementation i[] = { I_OnJoinChannel, I_OnPartChannel };
ModuleManager::Attach(i, this, 2);
Where 2 is the number of events in the list
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:
void OnJoinChannel(User *u, Channel *c) { }
void OnPartChannel(User *u, Channel *c) { }
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).
+5 -5
View File
@@ -1,10 +1,10 @@
Frequently Asked Questions (FAQ) concerning Anope
------------------------------------------------
The information in the 1.9 FAQ is subject to change at any
-------------------------------------------------
The information in the 2.0 FAQ is subject to change at any
moment due to new developments. Please visit our website
for the most up to date information.
An updated version of the FAQ can be found here:
http://wiki.anope.org/index.php/FAQ
https://wiki.anope.org/index.php/2.0/FAQ
+33 -106
View File
@@ -19,159 +19,88 @@ Note: You should also read the README and FAQ files!
The very first thing you need to do is to get the Anope package (if not
already done). You can find it at:
http://www.anope.org/
https://www.anope.org/
Anope can be built one of two ways. The recommended way is to use CMake.
You can check if CMake is already installed on your system using the
command:
Anope requires cmake to build. You can check if CMake is already
installed on your system using the command:
cmake --version
If it's installed, you will get a line that says something similar to
"cmake version 2.6-patch 1". If the version is less than 2.4 or you get
"cmake version 2.8.12.2". If the version is less than 2.4 or you get
an error saying the command was not found, you will not be able to use
CMake unless you install it yourself into your home directory. CMake
can be downloaded from:
http://www.cmake.org/cmake/resources/software.html
If you are unable to install CMake yourself (either due to lack of space
or restrictions by your hosting provider), you still have the alternative
to use the provided configure script. This option is not recommended and
will eventually be phased out, but is provided for compatibility for those
lacking CMake.
https://cmake.org/download/
Next, unpack the package in your home directory, and go into the created
directory.
If there are any extra modules you want to enable, such as mysql, run
the 'extras' script to enable them. If you do not know you can come back
later and enable them.
Now type ./Config to start the configuration script. It will ask you a
few questions, and figure out how to compile Anope on your system. If
you are unsure about the answer to a question, use the default value.
The question to using configure or cmake depends on your decision from
above. If you have CMake and wish to use it, answer with cmake, otherwise
answer with configure.
You can now type make to compile Anope. If there are errors in the
Makefile, *try to use gmake* instead. If it still doesn't work, you (or
the system administrator if it's a shell) must install GNU make. You may
find it at ftp://prep.ai.mit.edu/pub/gnu/.
Now type make install (or gmake install; see above). This will install
Now cd build and type make and make install. This will install
all the needed files in the paths you specified with the configure
script, and setup file permissions. You should ensure that the data
directory is not accessible by other users, as malicious users may
cause trouble on your network if passwords are not encrypted, or read
the memos of any user.
If you see errors during this process, please mail us with the *complete*
error output, and don't forget to mention your OS, compiler and C++ library
versions.
Now go into the data directory (by default, ~/services/data). Copy the example
configuration file (example.conf) to services.conf, and open the latter
Now go into the conf directory (by default, ~/anope/conf). Copy the example
configuration file (anope.example.conf) to anope.conf, and open the latter
with your favorite text editor. It contains all the configuration
directives Anope will use at startup. Read the instructions contained in
the file carefully. Using the default values is NOT a good idea, and will
most likely not work!
If you need help, you should subscribe to the Anope mailing list and mail
there to get help from other users. See the README file for more
information.
If you need help, you should visit https://forum.anope.org/ or #anope on
irc.anope.org. Provide *complete* error output, along with other relevant
information eg. OS, compiler and C++ library versions.
See the README file for more information.
2) Upgrading Anope
If you got a .diff file and want to patch the old Anope sources with it,
do the following:
* Copy the .diff file into the root Anope sources directory.
* Type patch -p1 <file.diff
Note that upgrading anope with a patchfile isn't recommended. You should
download a new, clean source package, as this will give the best results.
To upgrade Anope, just follow the installation instructions described in
section 1. There are however a few specific guidelines:
* IMPORTANT: Back up your old databases!
* If you are upgrading to a new major release, ALWAYS restart a
fresh configuration file from example.conf.
fresh configuration file from anope.example.conf.
3) Setting up the IRCd
Services acts as an IRC server with pseudo-clients on it. To link them to
your network, you'll need to add some lines in the ircd.conf of their hub
server (as stated in the RemoteServer configuration directive).
Anope acts as an IRC server with pseudo-clients on it. To link them to
your network, you'll need to configure your IRCd to allow services to link.
For samples below we'll take services.localhost.net as the name of the
Services (as stated in the ServerName configuration directive). Note that
this samples are made to be as generic as possible, but there might be
small variations, depending on your IRCd. For IRCd-specific help with
configuration, read near the end of this section.
The configuration varies depending on the IRCd, but you will probably need
a link block (also called connect block, or C line), a U line (also called
a shared block), and be sure that the IRCd is listening on the given port
in the link block.
First, the C/N lines, that allow Services to link. They also need a
Y:line to work correctly.
Y:27:180:0:0:4000000
C:127.0.0.1:mypass:services.localhost.net::30
N:127.0.0.1:mypass:services.localhost.net::30
"mypass" is the same password you mentioned in the RemoteServer
configuration directive. 127.0.0.1 is the IP from which Services connect
from (linking in localhost is the most efficient way to run Services).
Then, you have to set-up an U:line, that will allow Services to change
channel modes, topics, and much more without being opped in the channel.
U:services.localhost.net:*:*
NOTE: if you have more than one server in your network, this line MUST
be added on ALL servers, or things won't work correctly.
Finally, you'll need to add an H:line, to make the OperServ JUPE command
work correctly.
H:*::Services.LocalHost.Net
Example link configurations can be found in anope.example.conf for some of the
popular IRCds.
Don't forget to /rehash your IRCd to apply changes.
A new trend in ircd configuration is popping all over the place, good
examples are the latest Hybrid, Unreal and Bahamut, which use a more
"readable" form of configuration. For those, use something like:
link services.localhost.net
{
username *;
hostname localhost;
bind-ip *;
port 6667;
hub *;
password-connect "mypass";
password-receive "mypass";
class servers;
};
Note that this block-style configuration files differ heavily, depending
on the IRCd. Consult the interactive link maker (link is below) for more
details on the exact configuration used by your IRCd.
If you're unable to get a link with your IRCd after reading this section,
you might try the interactive link maker, which is located at:
http://anope.org/ilm.php
4) Starting Anope
Go into the directory where binaries were installed (by default, this is
~/services). Type ./services to launch Anope.
~/anope/bin). Type ./anope to launch Anope.
If there are syntax errors in the configuration file they will be
displayed on the screen. Correct them until there are no errors anymore.
A successful startup won't generate any message.
Give Services at least one minute to link to your network, as certain
Give Anope at least one minute to link to your network, as certain
IRCds on some OSes may be really slow for the link process. If nothing
happens after about a minute, it is probably a configuration problem. Try
to launch Anope with ./services -debug -nofork to see any errors that it
to launch Anope with ./anope -debug -nofork to see any errors that it
encounters, and try to correct them.
If you need help to solve errors, feel free to subscribe to the Anope
@@ -180,21 +109,19 @@ Note: You should also read the README and FAQ files!
5) Setting up a crontab
A crontab entry will allow you to check periodically whether Anope is
still running, and restart it if not. You'll need to have Anope binaries
and data installed in the same directory for this to work without
modification.
still running, and restart it if not.
First rename the example.chk script that is in Anope path (by default,
this is ~/services) to services.chk and edit it. You'll need to modify
the CONFIGURATION part of the file. Then ensure that the file is marked
as executable by typing chmod +x services.chk, and try to launch the
this is ~/anope/conf) to anope.chk and edit it. You'll need to
modify the CONFIGURATION part of the file. Then ensure that the file is
marked as executable by typing chmod +x anope.chk, and try to launch the
script to see if it works (Anope must not be running when you do this ;))
When this is done, you'll have to add the crontab entry. Type crontab -e.
This will open the default text editor with the crontab file. Enter the
following (with correct path):
*/5 * * * * /home/ircd/services/services.chk >/dev/null 2>&1
*/5 * * * * /home/ircd/anope/conf/anope.chk >/dev/null 2>&1
The */5 at the beginning means "check every 5 minutes". You may replace
the 5 with other another number if you want (but less than 60). Consult
+144
View File
@@ -0,0 +1,144 @@
Instructions d'installation d'Anope
-----------------------------------
1) Installation d'Anope
2) Mettre à jour Anope
3) Configuration de l'IRCd
4) Mettre en route Anope
5) Mettre en place un crontab
Note : Vous devrez également lire les fichiers README et FAQ !
1) Installation d'Anope
NOTE IMPORTANTE : il est déconseillé d'utiliser (et même d'installer)
Anope en tant que root. Utilisez un utilisateur non
privilégié. Celui que vous utilisez pour l'IRCd ou
un utilisateur dédié suffira.
La première chose que vous devez faire est d'obtenir le package Anope
(si ce n'est déjà fait). Vous pouvez le trouver ici :
https://www.anope.org/
Anope nécessite cmake pour être compilé. Vous pouvez vérifier si CMake
est déjà installé sur votre système avec la commande :
cmake --version
Si CMake est installé, vous aurez une ligne qui dit quelque chose comme
"cmake version 2.8.12.2". Si la version est inférieure à 2.4 ou si vous
obtenez une erreur disant que la commande n'a pas été trouvée, vous ne
pourrez pas utiliser CMake à moins de l'installer vous-même dans votre
répertoire home. CMake peut être téléchargé ici :
https://cmake.org/download/
Ensuite, décompressez le package dans votre répertoire home, et allez
dans le répértoire qui vient d'être créé.
Si il y a des modules facultatifs que vous voulez activer comme mysql,
exécuter le script 'extras' pour les activer. Si vous ne savez pas, vous
pouvez les activer plus tard.
Maintenant, tapez ./Config pour lancer le script de configuration. Il
va vous poser quelques questions, et déterminer comment compiler Anope
sur votre système. Si vous ne savez pas comment répondre à une question,
utilisez la valeur par défaut.
Allez dans le dossier build (cd build) et tapez make et make install.
Ceci va installer tous les fichiers nécessaires dans les dossiers que
vous avez indiqués avec le script Config et régler les permissions des
fichiers. Vous devez vous assurer que le répertoire data n'est pas
accessible par les autres utilisateurs, car des utilisateurs
malveillants pourraient causer des problèmes sur votre réseau, si les
mots de passe ne sont pas chiffrés, ou lire les mémos de tous les
utilisateurs.
Allez maintenant dans le répertoire conf (par défaut, ~/anope/conf).
Copiez l'exemple de fichier de configuration (anope.example.conf) en
anope.conf et ouvrez ce dernier avec votre éditeur de texte favori.
Il contient toutes les directives de configuration qu'Anope va utiliser
en démarrant. Lisez attentivement les instructions contenues dans le
fichier. L'utilisation des valeurs par défaut n'est pas toujours
recommandée, et Anope ne fonctionnera probablement pas !
Si vous avez besoin d'aide, vous pouvez aller sur le site
https://forum.anope.org/ ou le canal #anope sur irc.anope.org.
Fournissez *l'essemble* des erreurs qui apparaîssent, en plus de
toutes informations utiles, comme les versions de votre OS, du
compilateur utilisé et de la librairie C++. Lisez le fichier README
pour plus d'informations.
2) Mettre à jour Anope
Pour mettre à jour Anope, suivez simplement les instructions
d'installation décrites dans la section 1. Prenez garde cependant :
* IMPORTANT : Sauvegardez vos anciennes bases de données !
* Si vous mettez à jour vers une nouvelle version majeure,
recommencez *toujours* toute votre configuration à partir du
fichier anope.example.conf.
3) Configuration de l'IRCd
Anope agit comme un serveur IRC avec des pseudo-clients.
Pour les relier à votre réseau, vous aurez besoin de configurer votre
IRCd pour permettre aux services de se connecter.
La configuration dépend de l'IRCd utilisé, mais vous aurez probablement
besoin d'un bloc link (aussi appelé connect block, ou C:line) et un
U:line (aussi appelé shared block). Assurez-vous que l'IRCd écoute
sur le port donné dans le bloc link.
Des exemples de configurations de bloc link peuvent être trouvés dans
le fichier anope.example.conf pour certains des IRCd les plus populaires.
Souvenez-vous de /rehash votre IRCd pour appliquer les changements.
4) Mettre en route Anope
Allez dans le répertoire où les fichiers binaires ont été installés
(par défaut, ~/anope/bin). Tapez ./anope pour lancer Anope.
S'il y a des erreurs de syntaxe dans le fichier de configuration, elles
seront affichées à l'écran. Corrigez-les jusqu'à ce qu'il n'y en ait
plus. Un démarrage réussi ne générera pas de message.
Donnez aux services au moins une minute pour se connecter à votre
réseau, car certains IRCds sur certains systèmes peuvent être très
lents pour le processus de liaison. Si rien ne se passe après environ
une minute, il y a probablement un problème de configuration. Essayez
de lancer Anope en mode debug avec ./anope -debug -nofork pour voir
toutes les erreurs rencontrées et essayez de les corriger.
Si vous avez besoin d'aide pour résoudre des erreurs, n'hésitez pas à
vous abonner à la liste de diffusion Anope et d'y poser vos question.
Voir le fichier README pour plus de détails.
5) Mettre en place un crontab
Une entrée crontab vous permettra de vérifier périodiquement si Anope
est toujours en cours d'exécution et de le redémarrer s'il n'est pas.
D'abord renommez le script example.chk qui est dans les dossiers
d'Anope (par défaut, ~/anope/conf) en anope.chk et modifiez-le.
Vous aurez besoin de modifier la partie CONFIGURATION du fichier.
Assurez-vous ensuite que le fichier est marqué comme exécutable en
tapant chmod +x anope.chk et essayez de lancer le script pour voir
si cela fonctionne (Anope ne doit pas être en marche lorsque vous
testez cela ;))
Lorsque c'est fait, vous devrez ajouter l'entrée crontab. Entrez
crontab -e. Cela va ouvrir l'éditeur de texte par défaut avec le
fichier crontab. Entrez la ligne suivante (avec le chemin correct) :
*/5 * * * * /home/ircd/anope/conf/anope.chk > /dev/null 2>&1
Le */5 au début signifie "vérifier toutes les 5 minutes". Vous pouvez
remplacer le 5 par un autre numéro si vous voulez (mais moins de 60).
Consultez les pages de manuel de votre système pour plus de détails sur
la syntaxe du fichier crontab. Les pages de manuel intéressantes sont
crontab(5), crontab(1) et cron(8).
Sauvegardez, quittez, et c'est installé !
-378
View File
@@ -1,378 +0,0 @@
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, which is
explained in depth in the next section.
Scroll down to the bottom and find the class for this module and rename it
to something reflecting your IRCd name. Find the function:
pmodule_ircd_version("Unreal 3.2+");
This is 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.
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.
pmodule_ircd_useTSMode(0);
3) The IRCDVar struct
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 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) 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.
5) SVSNICK: Can the ircd use SVSNICK to change some ones nick? Otherwise,
KILL is used. Use 1 for yes, 0 for no.
6) VHOST: Can a user's host be changed on the fly? Enabling this allow
HostServ online. Use 1 for yes, 0 for no.
7) SGLINE: Does the IRCd support realname (geocs) bans? Use 1 for yes,
0 for no.
8) SQLINE: Does the IRCd support nick bans? Use 1 for yes, 0 for no.
9) SZLINE: Does the IRCd support SZLINES? Use 1 for yes, 0 for no.
10) Number of Server Args: When an IRCd connects, this is the number of
parameters that are passed.
11) Join to Set: Services must join a channel to set any modes on that
channel. Use 1 for yes, 0 for no.
12) 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.
13) TS Topic Forward: Some IRCd's (like UnrealIRCd) like their topic TS
set forward by +1. Use 1 for yes, 0 for no.
14) 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.
15) SQline Channels: The IRCd's supports banning channel names via
SQLINES. Use 1 for yes, 0 for no.
16) 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.
17) SVSMODE -b: We can use SVSMODE to unban hosts from a channel. Use
1 for yes, 0 for no.
18) Reverse: We can do a reverse check when unbanning. For use with
DreamForge based IRCd's. Use 1 for yes, 0 for no.
19) vIdent: Support for including a user's ident in their vHost. Use
1 for yes, 0 for no.
20) SVSHOLD: Support for temporarily 'holding' a nick, instead of using
a nick enforcer client. Use 1 for yes, 0 for no.
21) TS on MODE: We need to send a timestamp when modes are being changed.
Use 1 for yes, 0 for no.
22) 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.
23) OMODE: We can use OperServ to give some user a temporary O:LINE.
Use 1 for yes, 0 for no.
24) Umode: We can use OperServ to change a user's mode. Use 1 for yes,
0 for no.
25) Vhost On Nick: On NICK the IRCd sends the VHOST. Use 1 for yes,
0 for no.
26) Change Realname: Change real name. Use 1 for yes, 0 for no.
27) 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.
28) No Knock Requires +i: Does the No Knock channel mode require invite
only channels? Use 1 for yes, 0 for no.
29) Chan Modes: If sent in CAPAB/PROTOCOL, we store it in here. This is
NULL by default.
30) Tokens: Can we use tokens to talk to the IRCd? Use 1 for yes,
0 for no.
31) base64 SJOIN TS: Are the timestamps sent with a SJOIN in base64? Use
1 for yes, 0 for no.
32) SJOIN Ban Char: Character used to identify bans. Use ''.
33) SJOIN Except Char: Character used to identify exceptions. Use ''.
34) SJOIN Invite char: Character used to idenfity invexs. Use ''.
35) SVSMODE UCMODE: Can we clear user channel modes with SVSMODE? Use
1 for yes, 0 for no.
36) SGline Enforce: Does the IRCd enforce SGLINES for us or do we need to
do so? Use 1 for yes, 0 for no.
37) Vhost Character: The character used to represent the vHost mode, if
this is supported by the IRCd.
38) TS6: Does the IRCd support TS6? Use 1 for yes, 0 for no.
39) P10: Is this IRCd a P10-style IRCd? Use 1 for yes, 0 for no.
40) Character Set: Unreal passes the character set during PROTOCTL,
the value is stored here. Set this NULL to start.
41) 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.
42) Global TLD Prefix: Prefix used to send global messages, should probably
be "$"
43) Max Modes: The max number of mode changes we can send in one line
4) Modes
Anope is told about modes in the moduleAddModes() function.
For the most part, the syntax for adding channel and user modes are:
ModeManager::AddUserMode(new UserMode(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, '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, '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 std::string &value) { }
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 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) 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");
}
3) Ensure that the CAPAB/PROTOCTL event his handled correctly.
A) In the function module constructor make 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)
{
CapabParse(ac, av);
return MOD_CONT;
}
This function should call the CapabParse function which parses
the received CAPAB/PROTOCTL line.
7) 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.
+65
View File
@@ -0,0 +1,65 @@
Anope Multi Language Support
----------------------------
1) Building Anope with gettext support
2) Adding a new language
3) Using languages with modules
4) Updating a language file
1) Building Anope with gettext support
To build Anope with gettext support, gettext and its development libraries must be installed on the system.
On Debian install the locales-all package.
On Ubuntu run locale-gen for each language you want to enable.
For example:
locale-gen es_ES.UTF-8
Then execute:
dpkg-reconfigure locales
Building Anope on Windows with gettext support is explained in docs/WIN32.txt
2) Adding a new language
Anope uses gettext (https://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 anope.conf.
Note that on Windows it is not quite this simple, windows.cpp must be edited and Anope recompiled and restarted.
Poedit (https://poedit.net/) is a popular po file editor, and we recommend using it or another editor designed to edit
po files (especially on Windows).
If you have finished a language file translation and you want others to use it, please send it to team@anope.org
(don't forget to mention clearly your (nick)name, your e-mail and the language name). You'll of course get full credit for it.
NOTE: There is no guarantee we will use your work so please do not be offended if we say no thanks.
3) Using languages with modules
Module authors can easily add the ability to have their modules translated by adding _() around the strings they
want translated (messages to the user, etc).
If you want to translate a module someone has made, first generate a .pot file if there isn't one already using
`xgettext -s -d modulename -o modulename.pot --from-code=utf-8 --keyword --keyword=_ modulename.cpp`.
The .pot file is a template of all of the language strings extracted from the source file.
Next, run msginit on the .pot file with
`msginit -l language -o modulename.language.po -i modulename.pot`.
Translate the new .po file and rerun ./Config; make && make install.
All .po and .pot files should be placed in modules/third/language. Additionally an update script is provided there
that will create .pot files and merge any changes to it with existing .po files.
4) Updating a language file
Poedit (https://poedit.net/) is a popular po file editor, and we recommend using it or another editor designed to edit
po files (especially on Windows).
Before editing the relevant file in languages/, run `update.sh` in the languages/ folder, i.e. `cd` to it and run
./update.sh
This will update the language file to contain all strings that need a translation.
Then commit only the changed .po files in git.
+46 -42
View File
@@ -12,7 +12,7 @@ Anope Modules
1) Introduction
Anope 1.6 onwards supports external modules. External modules are pieces
Anope supports external modules. External modules are pieces
of code that can be attached to a running Anope process dynamically. These
modules can serve several purposes, and perform all kind of operations to
enhance your network.
@@ -22,16 +22,16 @@ Anope Modules
1. If modules are supported by your system, they will be configured
automatically when you run ./Config. The modules will be installed
to the modules directory in your data path (by default this will
be ~/services/modules).
be ~/anope/data/modules).
Note: you might need to run "make distclean" prior to running ./Config
2. Compile Anope as usual using ./Config. The "make" process will now
compile module support into Anope, and compile the default sample
modules, and any other module located in the modules folder or any
of its sub-directories, eg. modules/extra.
2. Compile Anope as usual. The (g)make process will now compile module
support into Anope, and compile the default sample modules, and/or
any other module located on the modules folder ("src/modules/").
3. Install Anope as usual. The install process will place the compiled
modules in their runtime location, making them available for loading.
3. Install Anope as usual. The "make install" process will place the
compiled modules in their runtime location, making them available
for loading.
4. Start or restart services to make use of the new Anope executable.
Note that you do not need to restart to load new or changed modules,
@@ -42,59 +42,64 @@ Anope Modules
All module manipulation commands are done through OperServ. These are:
MODLOAD Load a module
MODRELOAD Reload a module
MODUNLOAD Un-Load a module
MODLIST List loaded modules
MODINFO Info about a loaded module
These commands available to Service Roots only.
Access to the above commands require the operserv/modload and modlist
permissions. Refer to operserv.example.conf.
You can also load (and pre-load) Modules automatically by loading them
on startup. To do so, edit your services.conf file and change the values
of "ModuleAutoload" and "ModuleDelayedAutoload" to include the modules
you want to load every time Anope starts.
on startup. To do so, edit any one of the configuration files (you may
want to use modules.conf for third-party/extra modules, or a config
file relevant to the *Serv your module operates on, eg. hostserv.conf),
and use the following method to load a module on startup or reload:
module { name="hs_modname" }
4) Usage Example
/msg OperServ modload hs_moo
*** Global -- from OperServ: dengel loaded module hs_moo
-OperServ- Module hs_moo loaded
/msg OperServ modload ns_identify
-OperServ- Module ns_identify loaded
/msg OperServ modinfo hs_moo
-OperServ- Module: hs_moo Version: 1.1 Author: Anope loaded: Mar 21 10:54:37 2004 CLT
-OperServ- Providing command: /msg HostServ moo
/msg OperServ modinfo ns_identify
-OperServ- Module: ns_identify Version: 1.9.7 Author: Anope loaded: Jun 17 18:43:08 2012 BST (2 minutes ago)
-OperServ- Providing service: nickserv/identify
-OperServ- Command ID on NickServ is linked to nickserv/identify
-OperServ- Command IDENTIFY on NickServ is linked to nickserv/identify
/msg HostServ moo
-HostServ- MOO! - This command was loaded via a module!
/msg OperServ modreload ns_identify
-OperServ- Module ns_identify reloaded
/msg OperServ modunload hs_moo
*** Global -- from OperServ: dengel unloaded module hs_moo
-OperServ- Module hs_moo unloaded
/msg OperServ modunload ns_identify
-OperServ- Module ns_identify unloaded
/msg HostServ moo
-HostServ- Unknown command moo. "/msg HostServ HELP" for help.
/msg NickServ IDENTIFY
-NickServ- Unknown command identify. "/msg NickServ HELP" for help.
NOTE: Doing the above, with the command still existing in a config file,
will result in a log message, similar to the following:
<@NickServ> Command IDENTIFY exists on me, but its service nickserv/identify was not found!
* Note that the name of the module file is "hs_moo.c", yet we load
and reference the module as "hs_moo" only. By naming convention
* Note that the name of the module source file is "ns_identify.cpp", yet we
load and reference the module as "ns_identify" only. By naming convention
modules have an abbreviated service name they attach to (hs_ for
HostServ, cs_ for ChanServ, etc) followed by a descriptive keyword.
5) More Modules
Anope ships with three sample modules that only illustrates some of the
implemented module capabilities. They don't really do much or anything
useful.
You can download more useful modules from http://modules.anope.org/. Just
grab the module file (usually with a .c extension). Place the module
file in your modules (src/modules) folder; the same folder that contains
both hs_moo.c and catserv.c module files.
You can download more useful modules from https://modules.anope.org/. Just
grab the module file (usually with a .cpp extension). Place the module
file in your modules (anope-1.9.x/modules/third) folder; although any of
the other folders within the modules directory will work.
The new modules need to be compiled and installed before you can make
use of them:
1. Make sure you're in the main source directory. (usually anope-1.X.XX/)
2. Run `make modules` to compile any new or changed modules.
3. Run `make install` to install the modules.
2. Run ./Config to find and configure modules, then `cd build`.
3. Run `make` to compile Anope, and any modules.
4. Run `make install` to copy the compiled binaries to the ~/anope/
directory.
You can now use /msg OperServ MODLOAD to load the new modules.
@@ -112,13 +117,12 @@ Anope Modules
There are a number of useful documents on the Anope Wiki. The Anope Wiki
can be reached at:
* http://wiki.anope.org/
* https://wiki.anope.org/
8) Modules Repository
You can find modules at http://modules.anope.org
You can find modules at https://modules.anope.org/
These modules are 3rd party and as such are not supported by the Anope Team.
Contact the Module Author directly with problems, not the Anope Team.
-27
View File
@@ -1,27 +0,0 @@
Anope MySQL Support
-------------------
MySQL support was readded in version 1.9.2 In the form of three modules.
db_mysql_read - Allows you to load your databases from MySQL.
db_mysql_write - Allows live updating of SQL tables whenever something is executed in Anope.
db_mysql_execute - Allows executing of Anope commands via SQL.
To execute commands via SQL, you must insert the command into the anope_commands table, an example is as follows:
INSERT INTO `anope_commands` (nick, service, command) VALUES('Adam', 'NickServ', 'REGISTER qwerty Adam@anope.org');
By default, every 60 seconds Anope checks this table for commands to execute. When Anope sees a new command to execute, it checks the following.
If the nick given is -SQLUser, then the command gets executed by a special fake user within Anope called -SQLUser. -SQLUser has every permission and command available, there are no permission checks at all for this user, it can do anything.
If the nick is not -SQLUser, it checks to see if it is a registered nick. If it is, it sees if there are any users online using the NickCore of that nick.
If there is a user online with that core the command gets executed as if that user executed it, and the reply goes to that user.
If there isn't a user online with the core, it creates a fake user as the nick given to it, and gives to it the permissions the user would have if they were online and identified.
If the nick is not registered, it checks to see if there is a user currently on that nick. If there is, it executes the command as that user, and the reply goes to that user.
If the nick is not registered and no one is using the nick, it creates a fake user of the nick given to it, and gives it regular nonidentified user access.
Currently there is no way to check to see if a command was executed successfully within Anope from SQL (even if there was, the possibly update delay would be a problem).
IMPORTANT: When using db_mysql_write when you already have a database, you need to do an initial import of the data to SQL (as db_mysql_write only updates it when it is changed, it never actually mass-dumps all of your data into SQL). To do this, start Anope and execute /OperServ SQLSYNC.
-7
View File
@@ -1,7 +0,0 @@
Highlighted News in Anope 1.9
=============================
* 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.
+258 -367
View File
@@ -1,367 +1,258 @@
Anope -- a set of IRC services for IRC networks
-----------------------------------------------
Anope is 2003-2010 Anope Team <team@anope.org>.
Based on Epona 2000-2002 PegSoft <epona@pegsoft.net>.
Based on Services 1996-1999 Andrew Church <achurch@achurch.org>.
This program is free but copyrighted software; see the file COPYING for
details.
Information about Anope may be found at http://www.anope.org/
Information about Epona may be found at http://www.epona.org/
Information about Services may be found at http://www.ircservices.esper.net/
Table of Contents
-----------------
1) Credits
2) Presentation
3) Installation
4) Command Line Options
5) Messages Translation
6) Contact and Mailing List
1) Credits
Anope is based on Lara's Epona version 1.4.14.
Epona is based on Andy Church's IRC Services version 4.3.3.
The original credits:
* Mauritz Antunes
Portuguese translation
* Jose R. Holzmann, Raul S. Villarreal
Spanish translation
* Andrew Kempe <theshadow@shadowfire.org>
News system
* <d.duca@eurcom.net>
Italian translation
* <mikado@holyfire.com>
Turkish translation
* Andrew Kempe <theshadow@shadowfire.org>
Session limiting
Epona credits:
* lara <lara@pegsoft.net>
Main coding
* CafeiN <oytuny@yahoo.com>
Turkish translation
* Sylvain Cresto aka tost <scresto@netsante.fr>
FreeBSD 5 patch
* Marcelo Conde Foscarini aka Bras <ircadmin@brmarket.net>
Portuguese translation
* Alvaro Toledo aka POLLITO <atoledo@keldon.org>
Spanish translation
* chemical <chemical@musicplay.de>
German translation
* shine <dh@shinewelt.de>
German translation
* Guven Guzelbey aka MeShGuL <guzelbey@cs.utk.edu>
Turkish translation
* Jordi Pujol <jordi.pujol@aujac.org>
Catalan translation
* Eva Dachs <evadachs@terra.es>
Catalan translation
* Toni Perez <toni.perez@aujac.org>
Catalan translation
* Sergios Karalis <sergios_k@hotmail.com>
Greek translation
* Thomas J. Stensas aka ShadowMaster <shadowmaster@shadow-realm.org>
Ultimate 3.x support
Anope credits:
* Adam Kramer <ribosome@anope.org>
* Adam <adam@anope.org>
* Alvaro Toledo <atoledo@keldon.org>
* Amanda Folson <amanda@anope.org>
* Andrew Berquist <vash@anope.org>
* Björn Stiddien <keeper@anope.org>
* Charles Kingsley <chaz@anope.org>
* Chris Hogben <heinz@anope.org>
* Daniel Engel <dane@zero.org>
* David <dv@diboo.net>
* David Narayan <jester@phrixus.net>
* David Robson <rob@anope.org>
* Daniele Nicolucci <jollino@sogno.net>
* Florian Schulze <certus@anope.org>
* Gabriel Acevedo H. <drstein@anope.org>
* Jan Milants <viper@anope.org>
* Jens Voss <dukepyrolator@anope.org>
* JH <jh@irc-chat.net>
* Joris Vink <joris@anope.org>
* Lucas Nussbaum <lucas@lucas-nussbaum.net>
* Mark Summers <mark@goopler.net>
* Matthew Beeching <jobe@invictachat.net>
* Naram Qashat <cyberbotx@anope.org>
* Pieter Bootsma <geniusdex@anope.org>
* Robin Burchell <w00t@inspircd.org>
* Thomas Juberg Stensås <ShadowMaster@Shadow-Realm.org>
* Trystan .S Lee <trystan@nomadirc.net>
* openglx <openglx@brasnerd.com.br>
Anope Translations:
* GeniusDex <geniusdex@anope.org> (nl.l)
* Kein <kein-of@yandex.ru> (ru.l)
* Stuff <the.stuff@gmx.de> (de.l)
* Gabriel Acevedo H. <drstein@anope.org> (es.l)
* Janos Kapitany <sarkanyka@cjbchat.hu> (hun.l)
* Szymon S'wierkosz <szymek@adres.pl> (pl.l)
Anope uses the strlcat() and strlcpy() functions from OpenSSH 2.5.1p2.
These functions are copyrighted by Todd C. Miller:
Copyright (c) 1998 Todd C. Miller <Todd.Miller@courtesan.com>
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
3. The name of the author may not be used to endorse or promote
products derived from this software without specific prior written
permission.
THIS SOFTWARE IS PROVIDED `AS IS'' AND ANY EXPRESS OR IMPLIED
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
2) Presentation
Anope is a set of Services for IRC networks that allows users to manage
their nicks and channels in a secure and efficient way, and administrators
to manage their network with powerful tools.
Currently available services are:
* NickServ, a powerful nickname manager that users can use to protect
themselves against nick stealing. Each user has its own nickname
group, that allows the user to register as many nicks as needed
while still being able to take profit of his privileges and to
modify the nick configuration. NickServ also has an optional
password retrieval feature.
* ChanServ, a powerful channel manager that helps users to administer
their channels in a totally customizable way. ChanServ has an
internal list of privileged users and banned users that controls
accesses on a per-channel basis. It eliminates all takeover
problems, because of its powerful op/unban/invite and even mass
deop and mass kick functions.
* MemoServ, an helpful companion that allows sending short messages
to offline users, that they can then read when they come online
later.
* BotServ, an original service that allows users to get a permanent,
friendly bot on their channels in an easy way. Each bot can be
configured to monitor the channels against floods, repetitions,
caps writing, and swearing, and to take appropriate actions. It
also can handle user-friendly commands (like !op, !deop, !voice,
!devoice, !kick, and many others), say a short greet message when
an user joins a channel, and even "take over" ChanServ actions such
as auto-opping users, saying the entry notice, and so on. This
service can be disabled if you want to save some bandwidth.
* OperServ, the IRCops' and IRC admins' black box, that allows them
to manage the list of network bans (also known as AKILL (DALnet) or
GLINE (Undernet)), to configure messages displayed to users when
they log on, to set modes and to kick users from any channel, to
send notices quickly to the entire network, and much more!
* HostServ, a neat service that allows users to show custom vHosts
(virtual hosts) instead of their real IP address; this only works
on daemons supporting ip cloaking, such as UnrealIRCd, UltimateIRCd
and ViagraIRCd.
Anope currently works with:
* Bahamut 1.4.27 or later (including 1.8)
* InspIRCd 1.1, 1.2, or 2.0
* Ratbox 2.0.6 or later
* UnrealIRCd 3.2 or later
Anope could also work with some of the daemons derived by the ones listed
above, but there's no support for them if they work or don't work.
3) Installation
See the INSTALL file for instruction on installing Anope.
4) Command Line Options
Normally, Anope can be run simply by invoking the "services" executable.
Anope will then use the defaults specified in the services.conf file, and
connect to the specified uplink server. Alternatively, any of the
following command-line options can be specified to change the default
values:
-remote server[:port] Connect to the specified server
-local host -or- Connect from the specified address (e.g. for
[host]:[port] multihomed servers)
-name servername Our server name (e.g. services.some.net)
-desc string Description of us (e.g. SomeNet Services)
-user username Username for Services' nicks (e.g. services)
-host hostname Hostname for Services' nicks (e.g. esper.net)
-dir directory Directory containing Services' data files
(e.g. /usr/local/lib/services)
-log filename Services log filename (e.g. services.log)
-update secs How often to update databases (in seconds)
-expire secs How often to check for nick/channel
expiration (in seconds)
Additionally, the following command-line options can be used to modify
the behavior of Anope:
-debug Enable debugging mode; more info sent to log (give
option more times for more info)
-readonly Enable read-only mode; no changes to databases
allowed, .db files and log not written
-skeleton Enable skeleton mode; like read-only mode, but only
OperServ is available
-nofork Do not fork after startup; log messages will be
written to terminal (as well as to the log file
if not in read-only mode)
-forceload Try to load as much of the databases as possible,
even if errors are encountered
-noexpire Expiration routines won't be run at all
-logchan Startup with logchan enabled
-version Display the version of Anope
-nothird Do not load the modules specified in ModulesAutoload
or ModulesDelayedAutoload in the config file
-protocoldebug Debug each incoming message after protocol parsing
-support Used for support, same as -debug -nofork -nothird
Upon starting, Anope will parse its command-line parameters, open its
logfile, then (assuming the -nofork option is not given) detach itself
and run in the background. If Anope encounters a problem reading the
database files or cannot connect to its uplink server, it will terminate
immediately; otherwise, it will run until the connection is terminated
(or a QUIT, SHUTDOWN, or RESTART command is sent; see OperServ's help).
In the case of an error, an appropriate error message will be written to
the log file.
If Anope is run with the "-readonly" command-line option, it can serve as
a "backup" to the full version of services. A "full" version of services
(run without -readonly) will automatically reintroduce its pseudo-clients
(NickServ, ChanServ, etc.), while a "backup" services will not, thus
allowing full services to be brought up at any time without disrupting
the network (and without having to take backup services down beforehand).
If Anope is run with the "-skeleton" command-line option, it will not try
to load the nickname or channel databases, and will respond with "service
is inactive" messages to any commands sent to NickServ, ChanServ,
MemoServ or BotServ. This can be useful as an emergency stopgap measure
when the main copy of Anope cannot be started.
The "-debug" option is useful if you find or suspect a problem in Anope.
Giving it once on the command line will cause all traffic to and from
services as well as some other debugging information to be recorded in
the log file; if you send a bug report, PLEASE include an excerpt from
the log file WITH DEBUGGING ACTIVE; we cannot emphasize enough how
important this is to tracking down problems. (You can also enable
debugging while Services is running using OperServ's SET DEBUG command.)
If you repeat the -debug option more than once, the debugging level will
be increased, which provides more detailed information but may also slow
Anope down considerably and make the log file grow dramatically faster
(in particular, at debug level 4 a message is written to the log for
every character received from the server). In general, a debug level of 1
is sufficient for the coding team to be able to trace a problem, because
all network traffic is included and we can usually reproduce the problem.
The "-forceload" option is provided to attempt recovery of data from
corrupted or truncated databases. Normally, if Anope encounters an error
writing to a database file, it will attempt to restore the original
version of the file and report an error to the logfile and through
WALLOPS. However, if this should fail (which normally should not happen),
or if Anope is terminated abruptly e.g. by kill -9 or a power failure,
then one or more of the databases may be corrupt. Normally, this will
cause Anope to abort the next time you try to run it; however, if yo
give the -forceload option to Anope, it will instead read as much as it
can, then skip to the next database. For obvious reasons, it's highly
recommended to keep backup copies of your databases in case something
does happen (since Anope will stop at the first error in a database, even
with -forceload, meaning you lose any data after that).
5) Messages Translations
Anope has a powerful option in NickServ allowing users to choose what
language it must use when sending messages to users. Messages are stored
in language files (located in the lang directory).
Anope is currently provided with thirteen languages: Catalan, Dutch,
English, French, German, Greek, Hungarian, Italian, Polish, Portuguese,
Russian, Spanish and Turkish. If you want to translate Anope messages
into another language, follow this instructions:
* Copy the lang/en_us.l file to a meaningful name (for example, if
you would like to translate messages in Spanish, you would rename
it to es.l).
* Edit the file with your favorite text editor. Carefully read the
instructions given at the top of the file, and start translating
the whole file. The file is big, so make sure you have some coffee
available ;) Try to avoid the use of English words as much as
possible. If the new language contains only a few 'special'
characters, try and use latin representations of it, if possible.
Remember that most clients are only capable of handling the
ISO-8859-1 charset. Of course, if you are translating Anope to a
language with a totally different charset, such as Russian, feel
free to use the one that suites it best (and the one that is in use
by most speakers of that language ;)).
* When this is done, you have two solutions: either patch Services
source code so they take in account the new language file
(basically, you'll have to modify lang/Makefile, language.c and
maybe services.h), or send us the translated file so we can make
the patch and include your language in the next Anope release.
* Note that there is a language tool on bin/langtool.pl that can aid
the verification process on newly created language files. Try to
use it before you submit a language file.
When new major releases come out, you'll not have to retranslate the
whole file; the Changes.lang file will help you to know which messages
were added, modified or deleted.
If you did a language file translation, and want to let others use it,
please send it to team@anope.org (don't forget to mention clearly your
(nick)name, your e-mail and the language name). You'll of course get full
credit for it, and will even get future final major releases before
anyone else to complete the translation!... ;)
6) Contact
For announcements and discussions about Anope, please visit our
Portal and Forums at http://www.anope.org/ -- make sure you register
yourself and your network to get full benefits.
If you read the documentation carefully, and didn't find the answer to
your question, feel free to post on the website forums or join our irc
channel (irc.anope.org #anope). Once you join our Support channel, just
type "? report" for instructions on how to report a Bug. Be as precise as
possible when asking a question, because we have no extraordinary powers
and can't guess things if they aren't provided. The more precise you are,
the sooner you'll be likely to get an answer.
If you think you found a bug, add it to the bug tracking system
(http://bugs.anope.org) and - again - be as precise as possible. Also say
whether the bug happens always or under what circumstances, and anything
that could be useful to track your bug down. If you wrote a patch, send
it over. :)
Anope -- a set of IRC services for IRC networks
-----------------------------------------------
Anope is 2003-2024 Anope Team <team@anope.org>.
Based on Epona 2000-2002 PegSoft <epona@pegsoft.net>.
Based on Services 1996-1999 Andrew Church <achurch@achurch.org>.
This program is free but copyrighted software; see the file COPYING for
details.
Information about Anope may be found at https://www.anope.org/
Table of Contents
-----------------
1) Credits
2) Presentation
3) Installation
4) Command Line Options
5) Messages Translation
6) Contact
1) Credits
Anope is based on Lara's Epona version 1.4.14.
Epona is based on Andy Church's IRC Services version 4.3.3.
The original credits:
* Mauritz Antunes
Portuguese translation
* Jose R. Holzmann, Raul S. Villarreal
Spanish translation
* Andrew Kempe <theshadow@shadowfire.org>
News system
* <d.duca@eurcom.net>
Italian translation
* <mikado@holyfire.com>
Turkish translation
* Andrew Kempe <theshadow@shadowfire.org>
Session limiting
Epona credits:
* lara <lara@pegsoft.net>
Main coding
* CafeiN <oytuny@yahoo.com>
Turkish translation
* Sylvain Cresto aka tost <scresto@netsante.fr>
FreeBSD 5 patch
* Marcelo Conde Foscarini aka Bras <ircadmin@brmarket.net>
Portuguese translation
* Alvaro Toledo aka POLLITO <atoledo@keldon.org>
Spanish translation
* chemical <chemical@musicplay.de>
German translation
* shine <dh@shinewelt.de>
German translation
* Guven Guzelbey aka MeShGuL <guzelbey@cs.utk.edu>
Turkish translation
* Jordi Pujol <jordi.pujol@aujac.org>
Catalan translation
* Eva Dachs <evadachs@terra.es>
Catalan translation
* Toni Perez <toni.perez@aujac.org>
Catalan translation
* Sergios Karalis <sergios_k@hotmail.com>
Greek translation
* Thomas J. Stensas aka ShadowMaster <shadowmaster@shadow-realm.org>
Ultimate 3.x support
Anope credits:
* Adam Kramer <ribosome@anope.org>
* Adam <adam@anope.org>
* Alvaro Toledo <atoledo@keldon.org>
* Amanda Folson <amanda@anope.org>
* Andrew Berquist <vash@anope.org>
* Björn Stiddien <keeper@anope.org>
* Charles Kingsley <chaz@anope.org>
* Chris Hogben <heinz@anope.org>
* Daniel Engel <dane@zero.org>
* David <dv@diboo.net>
* David Narayan <jester@phrixus.net>
* David Robson <rob@anope.org>
* Daniele Nicolucci <jollino@sogno.net>
* Florian Schulze <certus@anope.org>
* Gabriel Acevedo H. <drstein@anope.org>
* Jan Milants <viper@anope.org>
* Jens Voss <dukepyrolator@anope.org>
* JH <jh@irc-chat.net>
* Joris Vink <joris@anope.org>
* Lee Holmes <lethality@anope.org>
* Lucas Nussbaum <lucas@lucas-nussbaum.net>
* Mark Summers <mark@goopler.net>
* Matthew Beeching <jobe@mdbnet.co.uk>
* Naram Qashat <cyberbotx@anope.org>
* Phil Lavin <phil@anope.org>
* Pieter Bootsma <geniusdex@anope.org>
* Robin Burchell <w00t@inspircd.org>
* Sean Roe <therock247uk@anope.org>
* Sebastian V <hal9000@anope.org>
* Thomas Juberg Stensås <ShadowMaster@Shadow-Realm.org>
* Trystan .S Lee <trystan@nomadirc.net>
* openglx <openglx@brasnerd.com.br>
Anope Translations:
* Robby <robby@chatbelgie.be> (nl_NL)
* Kein <kein-of@yandex.ru> (ru_RU)
* Maik Funke <Han@mefalcon.org> (de_DE)
* Isaac Fontal <i_fontal@hotmail.com> (es_ES)
* Janos Kapitany <sarkanyka@cjbchat.hu> (hu_HU)
* Szymon S'wierkosz <szymek@adres.pl> (pl_PL)
* Christopher N. <saka@epiknet.org> (fr_FR)
* Yusuf Kurekci <ysfm.20@gmail.com> (tr_TR)
Anope Web panel:
* Denis M. (Phr33d0m) <god@politeia.in>
2) Presentation
Anope is a set of services for IRC networks that allows users to manage
their nicks and channels in a secure and efficient way, and administrators
to manage their network with powerful tools.
Currently available services are:
* NickServ, a powerful nickname manager that users can use to protect
themselves against nick stealing. Each user has its own nickname
group, that allows the user to register as many nicks as needed
while still being able to take profit of his privileges and to
modify the nick configuration. NickServ also has an optional
password retrieval feature.
* ChanServ, a powerful channel manager that helps users to administer
their channels in a totally customizable way. ChanServ has an
internal list of privileged users and banned users that controls
accesses on a per-channel basis. It eliminates all takeover
problems, because of its powerful op/unban/invite and even mass
deop and mass kick functions.
* MemoServ, an helpful companion that allows sending short messages
to offline users, that they can then read when they come online
later.
* BotServ, an original service that allows users to get a permanent,
friendly bot on their channels in an easy way. Each bot can be
configured to monitor the channels against floods, repetitions,
caps writing, and swearing, and to take appropriate actions. It
also can handle user-friendly commands (like !op, !deop, !voice,
!devoice, !kick, and many others), say a short greet message when
an user joins a channel, and even "take over" ChanServ actions such
as auto-opping users, saying the entry notice, and so on. This
service can be disabled if you want to save some bandwidth.
* OperServ, the IRCops' and IRC admins' black box, that allows them
to manage the list of network bans (also known as AKILL (DALnet) or
GLINE (Undernet)), to configure messages displayed to users when
they log on, to set modes and to kick users from any channel, to
send notices quickly to the entire network, and much more!
* HostServ, a neat service that allows users to show custom vHosts
(virtual hosts) instead of their real IP address; this only works
on daemons supporting ip cloaking, such as UnrealIRCd.
Anope currently works with:
* Bahamut 1.4.27 or later (including 1.8)
* ircd-hybrid 8.2.23 or later
* InspIRCd 3 or later
* ngIRCd 19.2 or later
* Plexus 3 or later
* Ratbox 2.0.6 or later
* Solanum (all versions)
* UnrealIRCd 4 or later
Anope could also work with some of the daemons derived by the ones listed
above, but there's no support for them if they work or don't work.
3) Installation
See the INSTALL file for instruction on installing Anope.
4) Command Line Options
Normally, Anope can be run simply by invoking the "services" executable.
Any of the following command-line options can be specified to change
the behavior of Anope:
--debug Enable debugging mode; more info sent to log (give
option more times for more info)
--readonly Enable read-only mode; no changes to databases
allowed
--nofork Do not fork after startup; log messages will be
written to terminal
--noexpire Expiration routines won't be run at all
--version Display the version of Anope
--nothird Do not load the non-core modules specified
--protocoldebug Debug each incoming message after protocol parsing
--support Used for support, same as --debug --nofork --nothird
Upon starting, Anope will parse its command-line parameters then
(assuming the --nofork option is not given) detach itself and run in the
background. If Anope encounters a problem reading the database files or
cannot connect to its uplink server, it will terminate immediately;
otherwise, it will run until the connection is terminated (or a QUIT,
SHUTDOWN, or RESTART command is sent; see OperServ's help).
In the case of an error, an appropriate error message will be written to
the log file.
If Anope is run with the "--readonly" command-line option, it can serve as
a "backup" to the full version of services. A "full" version of services
(run without --readonly) will automatically reintroduce its pseudo-clients
(NickServ, ChanServ, etc.), while a "backup" services will not, thus
allowing full services to be brought up at any time without disrupting
the network (and without having to take backup services down beforehand).
The "--debug" option is useful if you find or suspect a problem in Anope.
Giving it once on the command line will cause all traffic to and from
services as well as some other debugging information to be recorded in
the log file; if you send a bug report, PLEASE include an excerpt from
the log file WITH DEBUGGING ACTIVE; we cannot emphasize enough how
important this is to tracking down problems. (You can also enable
debugging while Anope is running using OperServ's SET DEBUG command.)
If you repeat use --debug=<level>, the debugging level will be increased,
which provides more detailed information but may also slow Anope down
considerably and make the log file grow dramatically faster. In general,
a debug level of 1 is sufficient for the coding team to be able to trace
a problem, because all network traffic is included and we can usually
reproduce the problem.
5) Messages Translations
Please see LANGUAGE for this information
6) Contact
For announcements and discussions about Anope, please visit our
Portal and Forums at https://www.anope.org/ -- make sure you register
yourself to get full benefits.
If you read the documentation carefully, and didn't find the answer to
your question, feel free to post on the website forums or join our irc
channel (irc.anope.org #anope). Once you join our Support channel be as
precise as possible when asking a question, because we have no extraordinary
powers and can't guess things if they aren't provided.
The more precise you are the sooner you'll be likely to get an answer.
If you think you found a bug, add it to the bug tracking system
(https://github.com/anope/anope/issues) and - again - be as precise as possible.
Also say whether the bug happens always or under what circumstances, and anything
that could be useful to track your bug down. If you wrote a patch, send
it over. :)
+160
View File
@@ -0,0 +1,160 @@
Anope has Redis database support (https://redis.io/).
This document explains the data structure used by Anope, and explains how
keyspace notification works.
This is not a tutorial on how to use Redis, see https://redis.io/documentation
for that.
Table of Contents
-----------------
1) Data structure
2) Keyspace notifications
3) Examples of modifying, deleting, and creating objects
1) Data structure
There are 4 key namespaces in Anope, they are:
id - The keys in id are used to atomically create object ids for new
objects. For example, if I were to create a new BotInfo I would first:
redis 127.0.0.1:6379> INCR id:BotInfo
To get the object ID of the new object.
ids - The keys in ids contain a set of all object ids of the given type.
For example:
redis 127.0.0.1:6379> SMEMBERS ids:BotInfo
Returns "1", "2", "3", "4", "5", "6", "7", "8" because I have 8 bots that
have IDs 1, 2, 3, 4, 5, 6, 7, and 8, respectively.
hash - The keys in hash are the actual objects, stored as hashes. For
example, if I had just looked up all BotInfo ids and wanted to iterate
over all of them, I would start by:
redis 127.0.0.1:6379> HGETALL hash:BotInfo:1
Which gets all keys and values from the hash of type BotInfo with id 1.
This may return:
"nick" -> "BotServ"
"user" -> "services"
"host" -> "services.anope.org"
"created" -> "1368704765"
value - The keys in value only exist to aid looking up object IDs. They
are sets of object IDs and are used to map key+value pairs to objects.
For example:
redis 127.0.0.1:6379> SMEMBERS value:NickAlias:nick:Adam
Returns a set of object ids of NickAlias objects that have the key
'nick' set to the value 'Adam' in its hash. Clearly this can only
ever contain at most one object, since it is not possible to have
more than one registered nick with the same name, but other keys
will contain more than one, such as:
redis 127.0.0.1:6379> SMEMBERS value:NickCore:email:adam@anope.org
Which would return all accounts with the email "adam@anope.org".
redis 127.0.0.1:6379> SMEMBERS value:ChanAccess:mask:Adam
Which would return all access entries set on the account "Adam".
Behavior similar to SQL's AND, can be achieved using the
SINTER command, which does set intersection on one or more sets.
2) Keyspace notifications
Redis 2.7 (unstable) and 2.8 (stable) and newer support keyspace notifications
(https://redis.io/topics/notifications). This allows Redis to notify Anope of
any external changes to objects in the database. Once notified, Anope will
immediately update the object. Otherwise, Anope keeps all objects in memory
and will not regularly read from the database once started.
You can use this to modify objects in Redis and have them immediately reflected
back into Anope. Additionally you can use this feature to run multiple Anope
instances simultaneously from the same database (see also, Redis database
replication).
To use keyspace notifications you MUST execute
redis 127.0.0.1:6379> CONFIG SET notify-keyspace-events KA
OK
or set notify-keyspace-events in redis.conf properly. Anope always executes
CONFIG SET when it first connects.
If you do not enable keyspace events properly Anope will be UNABLE to see any
object modifications you do.
The key space ids and value are managed entirely by Anope, you do
not (and should not) modify them. Once you modify the object (hash), Anope will
update them for you to correctly reflect any changes made to the object.
Finally, always use atomic operations. If you are inserting a new object with
multiple commands, or inserting multiple objects at once, specifically if the
objects depend on each other, you MUST use a transaction.
3) Examples of modifying, deleting, and creating objects
These examples will ONLY work if you meet the criteria in section 2.
If I want to change the email account 'Adam' to 'Adam@anope.org', I would execute the following:
redis 127.0.0.1:6379> SMEMBERS value:NickCore:display:Adam
Which returns a value of "1", which is the object id I want to modify.
Now to change the email:
redis 127.0.0.1:6379> HSET hash:NickCore:1 email Adam@anope.org
You can now see this in NickServ's INFO command:
-NickServ- Email address: Adam@anope.org
If I want to drop the account "Adam", I would execute the following:
redis 127.0.0.1:6379> SMEMBERS value:NickCore:display:Adam
Which returns a value of "1". I would then check:
redis 127.0.0.1:6379> SMEMBERS value:NickAlias:nc:Adam
To see what nicknames depend on this account to exist, as I will
have to remove those too. This returns the values "2", and "3".
Finally, I can drop the nick using a transaction via:
redis 127.0.0.1:6379> MULTI
OK
redis 127.0.0.1:6379> DEL hash:NickAlias:2
QUEUED
redis 127.0.0.1:6379> DEL hash:NickAlias:3
QUEUED
redis 127.0.0.1:6379> DEL hash:NickCore:1
QUEUED
redis 127.0.0.1:6379> EXEC
Or alternatively simply:
redis 127.0.0.1:6379> DEL hash:NickAlias:2 hash:NickAlias:3 hash:NickCore:1
If I wanted to create a BotServ bot, I would execute the following:
redis 127.0.0.1:6379> INCR id:BotInfo
Which returns a new object ID for me, in this example it will be "8".
Now I can create the object:
HMSET hash:BotInfo:8 nick redis user redis host services.anope.org realname "Anope IRC Services"
Note if you are using HSET instead of HMSET you will need to use a transaction, as shown in the above example.
If you are watching your services logs you will immediately see:
USERS: redis!redis@services.anope.org (Anope IRC Services) connected to the network (services.anope.org)
And the bot redis will be in BotServ's bot list.
Notice how ids:BotInfo and the value keys are updated automatically.
-80
View File
@@ -1,80 +0,0 @@
Legend:
x = done
? = unsure
+ = in progress
1.9.2
-----
[x] Redo database insanity.
[x] Move database load/save to a module
[x] realtime SQL/whatever module using events (possibly ongoing)
[x] flatfile save on a periodic timer
[x] SANE password encryption - prefix password with the method it was encrypted with, allowing for *seamless* upgrading to different methods
[x] Salted SHA256 (contact Special for this)
[x] New database format (text, not binary - works very well for merging and so on)
[x] generic database routines modules can use to create their own database
[?] IRCd capability support: don't rely on CAPAB, provide an interface to turn capabilities on specifically
[x] Socket subsystem needs some serious loving
[x] Multiple sockets
[x] Asynchronous, using select() (multiple engines? not really needed..)
[x] Callbacks, event style, see also inspircd
[x] generic way to check which modes a user has set (u->HasUmode(UMODE_OPER))
[x] 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?)
[x] Last used time on AKICK/access entries
[x] Channel passwords seem to be of limited use, think of a more appropriate way to handle this
[+] General options block, ability to turn LOGCHAN on from the config file..
[x] Docs directory cleanup
[x] Fix permanent channels support properly
[x] CS SET INHABIT to keep pseudoclient in a channel after it empties to maintain banlists and such
[x] Set forbidden channels +s
[x] SendAkill should just take a pointer to the Akill class instead of millions of fields (same for some other stuff)
[x] burn do_sjoin with fire
[x] Channel access additions
[x] Setter
[x] Last used
Future
------
[ ] Asynchronous DNS
[ ] CIDR Akills, session exceptions, etc
[ ] Hashing system for storing just about everything needs to die
[ ] Move a (lot) of stuff to class members as a defined interface rather than copypasta everywhere (ns_set, ns_saset!)
[?] Remote identification (1.9.1? will this break stuff?)
[ ] Language charset stuff, including collation (1.9.1? phoenix?)
[ ] Add support for +k, +q, etc type umodes
[ ] 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
[ ] 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
[+] Method to store listmodes (more generically than AKICK, too) for e.g. +beI and extbans, etc.
[ ] Channel access additions
[ ] Time added
[ ] Time modified
[ ] Expiry (useful?)
[ ] 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)
[ ] Merge NS INFO blah ALL with NS INFO blah, if you're requesting info, you really want the info anyway.
[?] 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
[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)
[?] NS MARK, CS MARK. Allow multiple marks. Combine into OS MARK? (AKA os_info)
[?] 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)")
[?] OS INJECT
[?] Drop CS SET ENTRYMSG, replace with a 'news' type system? (limited to a configured number of items, default 3)
-309
View File
@@ -1,309 +0,0 @@
Troubleshooting Guide for Anope 1.9
------------------------------------------------
NOTE:
An updated version of this guide can be found on our wiki:
http://wiki.anope.org/index.php/Troubleshooting
Table of Contents
-----------------
1) General
1.1) Anope complains in the logfile about being unable to load the default
language.
1.2) Anope spricht kein Deutsch!, etc. (Anope doesn't speak my language!)
1.3) I selected a language other than English, but sometimes Anope sends
responses in English instead.
1.4) Anope always dies after about five minutes, saying "FATAL ERROR! Can't
back up nick.db".
1.5) Anope crashed with a segmentation fault.
1.6) I've found a bug that's not mentioned here or in the README or BUGS
files. What should I do?
1.7) My FreeBSD box complains about 'Shared object "nss_dns.so.1" not
found'
1.8) Anope and long (more then 30 character) nicknames.
2) Installation / Configuration
2.1) When I run "make", I get an error message like "missing separator",
"Unassociated shell command", "Unexpected end of line seen", etc.
2.2) I get an error like "Makefile.inc not found".
2.3) I typed "./services" at the command line, but nothing happened!
2.4) Whenever I start Anope, I get a message on my IRC server saying
"connection refused" or something similar, and Anope gives an error
message from the server saying "Closing Link: ...".
2.5) My IRC server is giving me messages like "Connection to
services.whatever.net[127.0.0.1] activated" and then "Access denied --
no N line". Why?
2.6) When I say "/connect services.*", it doesn't work!
2.7) Anope starts up okay, but if I try to register a nickname, it comes
back with "Sorry, registration failed."
2.8) Anope reports (via /stats u or /msg OperServ STATS) a different number
of users online than I get from doing /lusers.
3) BotServ
3.1) How do I add bots to BotServ?
3.2) Why do kick triggers and fantasy commands fail to work with my Bahamut
IRCd?
4) ChanServ
4.1) Anope's channel mode setting doesn't work. I can't set modes with
OperServ, and every time ChanServ tries to set a mode, my server
reverses the change.
4.2) Anope ignored the SET SUCCESSOR setting and deleted a channel when the
founder expired.
4.3) How to auto voice all those whom join my #channel?
4.4) Channel options like RESTRICTED or SECUREOPS don't work. What's wrong?
5) OperServ
5.1) Using the OperServ JUPE command results in server messages like
"Server juped.server introduced by non-hub server services.my.net".
5.2) When I add an AKILL, the users matching it don't get killed.
5.3) Trying to use OperServ gives me "Access denied".
5.4) I can't get /OS UMODES and /OS SVSNICK to work!
5.5) What is a Super-Admin? How does it work? Why might it not work?
-------------------------------------------------------------------------------
1) General
1.1) Anope complains in the logfile about being unable to load the default
language.
You forgot to run "make install".
1.2) Anope spricht kein Deutsch!, etc. (Anope doesn't speak my language!)
See section 5 of the README file.
1.3) I selected a language other than English, but sometimes Anope sends
responses in English instead.
Some language files are not complete--in other words, they only have a
translation of some of the message Anope uses. In this case, the
missing messages will be displayed in English. You can either wait for
the primary translator to provide us with a translation, or do the
translation yourself and send us the messages translated into your
language.
1.4) Anope always dies after about five minutes, saying "FATAL ERROR! Can't
back up nick.db".
Make sure that the user Anope runs as has write access to the data
directory, and that the data directory actually exists (the latter
shouldn't be a problem if you ran the Config script). This means Anope
needs write and execute permission on the data directory itself and execute
permission on every parent directory of the data directory.
1.5) Anope crashed with a segmentation fault.
See if you can reproduce this by doing a certain sequence of things. If
so, please report it to us (see part 6 of README file). If not, you're
probably out of luck; if you like, you can report it to us anyway, but
chances are it won't get fixed if we don't have instructions on reproducing
it. If you do have such a problem, you may find the crontab utility useful
for dealing with it.
Also, see the DumpCore directive in the configuration file. It allows Anope
to dump its core whenever it's segfaulting, usually calling it core and
placing it into Anope's main directory. Open up gdb by issuing the
following command at your shell:
* gdb services core
(of course replacing 'core' with the name of the core if different) and
type 'bt' at the gdb prompt. After that, send us the output you got and
keep the core file in a safe place, in case we need it to dig deeper into
the problem.
1.6) I've found a bug that's not mentioned here or in the README or BUGS files.
What should I do?
See section 6 of the README file.
1.7) My FreeBSD box complains about 'Shared object "nss_dns.so.1" not found'
We haven't figured out the exact cause yet, but as a quickfix you can
delete the /etc/nsswitch.conf file. Please keep in mind that removing a
configuration file can be dangerous, so only do this if you know what you
are doing.
1.8) Anope and long (more then 30 character) nicknames.
By default, Anope only supports nicknames up to 30 characters (NICKLEN=30).
If your IRCd allows for longer nicknames or has been modified to do so
Anope will start logging a lot of ("NICK from nonexistent nick") messages.
This is because once a user uses a nick that is too long for Anope to handle,
Anope loses track of the user for the remainder of the session.
It is POSSIBLE but not NOT RECOMMENDED to extend the maximum length of nicknames
Anope can track, however this will also break database compatibility. DBs saved
with Anope set to allow for example 40 chars cannot be read by a clean Anope
installation and vice versa. So changing the maximum nick length is only possible
when starting with fresh databases and even then the consequences of this are
UNTESTED.
In order to change the maximum internal nick length, change the NICKMAX setting
in include/config.h, recompile anope and start without databases.
2) Installation / Configuration
2.1) When I run "make", I get an error message like "missing separator",
"Unassociated shell command", "Unexpected end of line seen", etc.
Your make program isn't compatible with the Makefile for Anope. The
Makefile was designed to work with GNU make, and as such may not work on
other systems' "make" programs. If you get an error from "make", obtain
GNU make from ftp://prep.ai.mit.edu/pub/gnu/make/ (or wherever you prefer) and
use it instead of your system's default "make". Note that GNU make may
already be installed on your system; try using the command "gmake" instead
of "make".
The make programs bundled with SunOS/Solaris and FreeBSD have been reported
not to work; you will need to use GNU make on these systems.
2.2) I get an error like "Makefile.inc not found".
You forgot to run the Config script first. See the INSTALL file for
compilation instructions.
2.3) I typed "./services" at the command line, but nothing happened!
Anope puts itself in the background when it starts, so you get your shell
prompt right back. Meanwhile, Anope will continue setting up, then connect
to the IRC server specified in services.conf (or on the command line). If
it doesn't connect, you probably specified the wrong IRCd or RemoteServer in
the configuration file. Check to make sure that you are actually running one of
the supported IRCds, also. A list of supported IRCds can be found in the README
file.
You can also check the log file (services.log by default) for error
messages. Starting services with the -support command line option
will prevent it from running in the background will output the
messages written to the log file to the console as well. Please note that this
will also prevent 3rd party modules from loading and will put Anope into
debug mode.
2.4) Whenever I start Anope, I get a message on my IRC server saying
"connection refused" or something similar, and Anope gives an error
message from the server saying "Closing Link: ...".
See section 3 of the INSTALL file.
2.5) My IRC server is giving me messages like "Connection to
services.whatever.net[127.0.0.1] activated" and then "Access denied -- no
N line". Why?
This is typically caused by including a port number in the C:line for
services, which tells your server to try to autoconnect to it (depending on
the class (Y:line) settings). This is not what you want, because Anope
will connect to the server itself, but does not listen for servers to
connect to it. The solution is to remove the port number from the C:line.
2.6) When I say "/connect services.*", it doesn't work!
You cannot /connect services. When you start Anope, it will attempt to
connect to the server you specified in services.conf. Please see the answer
above for more information.
2.7) Anope starts up okay, but if I try to register a nickname, it comes back
with "Sorry, registration failed."
Make sure you've selected the correct IRC server type in the configure
script; see section 3 of the INSTALL file for details.
2.8) Anope reports (via /stats u or /msg OperServ STATS) a different number of
users online than I get from doing /lusers.
Anope doesn't count its own pseudo-clients (NickServ, ChanServ, etc.) in
its user count, while the IRC server does.
3) BotServ
3.1) How do I add bots to BotServ?
Read /msg BotServ HELP and /msg BotServ HELP BOT. Note that you need to be
opered up and identified as a Services Administrator in Anope before you
can use the BOT command.
3.2) Why do kick triggers and fantasy commands fail to work with my Bahamut
IRCd?
Bahamut allows you to setup a server as 'serviceshub'. This will filter
certain data that services usually don't need to process. This option also
filters channel messages, because DALnet's services have no use for them.
Anope parses the channel messages for kick triggers and fantasy commands.
To make sure these work the server type of the hub they're linked to should
be simply 'hub' and not 'serviceshub'.
4) ChanServ
4.1) Anope's channel mode setting doesn't work. I can't set modes with
OperServ, and every time ChanServ tries to set a mode, my server reverses
the change.
Make sure EVERY server on your network has a U: line for Services in
ircd.conf, for example:
U:services.whatever.net:*:*
4.2) Anope ignored the SET SUCCESSOR setting and deleted a channel when the
founder expired.
Normally, this is because the successor had too many channels registered.
In this case, you will see an entry in the log file like the following:
[date] Successor (SuccessorNick) of channel #somechannel owns too many
channels, deleting channel #somechannel
If you don't get a message like this or you can verify that the successor
wasn't running into the channel limit, please report it using the
bug-reporting procedure in section 6 of the README file.
4.3) How to auto voice all those whom join my #channel?
Execute the following commands (/cs is an alias for /msg ChanServ):
/cs set #channel secure off
/cs set #channel xop off
/cs levels #channel set AUTOVOICE -1
4.4) Channel options like RESTRICTED or SECUREOPS don't work. What's wrong?
Make sure that you didn't put any of your normal IRCd's as a ULined server
in Anope. Some access checks for clients from ULined servers are skipped to
avoid fights between the ULined servers. This is usually only useful when
you have a statistics server connected to your network.
5) OperServ
5.1) Using the OperServ JUPE command results in server messages like "Server
juped.server introduced by non-hub server services.my.net".
Services' uplink must have an H: line for Services in the ircd.conf file,
which looks something like:
H:*::services.whatever.net
5.2) When I add an AKILL, the users matching it don't get killed.
Use the AkillOnAdd configuration directive.
5.3) Trying to use OperServ gives me "Access denied".
Check that you're opered on your IRCd (ie, moded +o)
Check that you're identified to a nickname listed within an opertype allowed to do the command you're trying.
Check whether you can use /msg operserv staff
5.4) I can't get /OS UMODES and /OS SVSNICK to work!
You need to be a SuperAdmin to be able to use these commands.
5.5) What is a Super-Admin? How does it work? Why might it not work?
SuperAdmin's have extra privileges, including being founder on all
channels. It must be activated on a per user basis and is only available to
Services Roots. It is set using OperServ and is not persistent. It only
works if SuperAdmin is not commented in the services configuration file,
which is commented out by default. Read /msg OperServ HELP SET SUPERADMIN
for further help.
+21 -83
View File
@@ -18,56 +18,23 @@ Anope for Windows
1) Download the required files:
* Current Anope source:
http://sourceforge.net/project/showfiles.php?group_id=94081
https://github.com/anope/anope/releases
* CMake:
http://www.cmake.org/cmake/resources/software.html
https://cmake.org/download/
(NOTE: When installing, tell CMake to add itself to the PATH.)
If you have Visual C++ 6, 7 (.NET 2002/2003), 8 (2005), or 9 (2008) skip ahead to step 2, else you
need to download the following free components from Microsoft. Once
downloaded, install these packages.
If you have Visual C++ 10 or 11 (2010/2012) skip ahead to step 2, else you
need to download and install the following free component from Microsoft.
* Microsoft Visual C++ 2008 Express Edition:
http://www.microsoft.com/express/vc/
or
* Microsoft Visual C++ 2005 Express Edition:
http://www.microsoft.com/downloads/details.aspx?FamilyId=7B0B0339-613A-46E6-AB4D-080D4D4A8C4E&displaylang=en
then download and install:
* Microsoft Windows 2008 SDK:
http://www.microsoft.com/downloads/details.aspx?FamilyId=E6E1C3DF-A74F-4207-8586-711EBE331CDC&displaylang=en
or (if you prefer a smaller download)
* Microsoft Windows 2003 Platform SDK: (Requires WGA validation)
http://www.microsoft.com/downloads/details.aspx?FamilyId=0BAF2B35-C656-4969-ACE8-E4C0C0716ADB&displaylang=en
(NOTE: Although they say for Windows Server 2003 or 2008, they do infact work on all supported
versions of Windows. When installing the 2003 SDK, you should select the Custom option, and only select
to have the Microsoft Windows Core SDK installed. When installing the 2008 SDK, you should select the
Custom option, and only select to have the Developer Tools installed, but also expand that and deselect
the Visual C++ Compilers as well as the Mobile Tools. Doing this will decrease the install time as well
as the space used by the SDK.)
If you chose to download the 2003 SDK, it will not work out-of-the-box on either Visual C++ 2005 Express or
Visual C++ 2008 Express. The 2008 SDK will work out-of-the-box with Visual C++ 2008 Express but not with
Visual C++ 2005 Express.
* Microsoft Visual C++ 2010 Express Edition:
http://www.microsoft.com/visualstudio/eng/downloads#d-2010-express
2) Unpack the Anope tarball with your favorite uncompression program
(WinZip or WinRAR, etc).
3) (Note before this step: If you fall under one of the situations at the end of Step 1 where it says that the
SDK will not work out of the box, do not bring up the Visual C++ Command Prompt by using the link in
the Windows Start Menu. Instead, edit vsvars32.bat in the directory where you unpacked the source code
in step 2, so the first line that says "@SET VSINSTALLDIR=<whatever>" has the directory where you installed
Visual C++ Express to, if different from the default. Save the file and then run it instead.)
Bring up the Visual C++ Command Prompt; This will launch a
3) Bring up the Visual C++ Command Prompt; This will launch a
DOS Command Prompt like window, which will set the environment
properties needed to make Anope.
@@ -84,7 +51,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 +70,14 @@ 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 mysql and
the SSL modules. If these libraries are installed in nonstandard
locations, cmake will probably not find them and should be told where
they are by passing their location to Config.
The libraries used to build the 'extra' modules are available at
https://github.com/Adam-/windows-scripts.
5) You are now ready to compile. If you said you wanted to use NMake in step 4,
at the prompt type:
@@ -128,7 +103,7 @@ Anope for Windows
INSTALL within the Solution Explorer. Right-click on INSTALL and choose Build.
When you have done this, all the files will be installed to where they belong.
The only thing you need to do is rename "data/example.conf" to be "data/services.conf",
The only thing you need to do is rename "data/anope.example.conf" to be "data/anope.conf",
and then follow the steps to set up Anope.
You have now completed the building phase of Anope for Windows. You can
@@ -145,23 +120,11 @@ Anope for Windows
Notepad will cause strange characters to appear, and you may not be able to
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.
Open anope.conf, and read through it carefully and adjust the settings
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 +137,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
@@ -220,4 +159,3 @@ Anope for Windows
Anope's Windows Installer was made using:
* NSIS 2.20 <http://nsis.sourceforge.net>
+29
View File
@@ -0,0 +1,29 @@
XMLRPC using PHP's xmlrpc_encode_request and xmlrpc_decode functions is supported.
This allows external applications, such as websites, to execute remote procedure calls to Anope in real time.
Currently there are 5 supported XMLRPC calls, provided by xmlrpc_main:
checkAuthentication - Takes two parameters, an account name and a password. Checks if the account name is valid and the password
is correct for the account name, useful for making login pages on websites.
command - Takes three parameters, a service name (BotServ, ChanServ, NickServ), a user name (whether online or not), and the command
to execute. This will execute the given command to Anope using the given service name. If the user given is online, the
command reply will go to them, if not it is returned by XMLRPC.
stats - Takes no parameters, returns miscellaneous stats that can be found in the /operserv stats command.
channel - Takes one parameter, a channel name, and returns real time information regarding that channel, such as users, modes
(ban lists and such), topic etc.
user - Takes one parameter, a user name, and returns real time information regarding that user.
opers - Takes no parameters, returns opertypes, their privileges and commands.
notice - Takes three parameters, source user, target user, and message. Sends a message to the user.
XMLRPC was designed to be used with db_sql, and will not return any information that can be pulled from the SQL
database, such as accounts and registered channel information. It is instead used for pulling realtime data such
as users and channels currently online. For examples on how to use these calls in PHP, see xmlrpc.php in docs/XMLRPC.
Also note that the parameter named "id" is reserved for query ID. If you pass a query to Anope containing a value for id. it will
be stored by Anope and the same id will be passed back in the result.
+145
View File
@@ -0,0 +1,145 @@
<?php
/**
* XMLRPC Functions
*
* (C) 2003-2024 Anope Team
* Contact us at team@anope.org
*/
class AnopeXMLRPC
{
/**
* The XMLRPC host
*
* @var string
*/
private $host;
/**
* Initiate a new AnopeXMLRPC instance
*
* @param $host
*/
public function __construct($host)
{
$this->host = $host;
}
/**
* Run an XMLRPC command. Name should be a query name and params an array of parameters, eg:
* $this->raw("checkAuthentication", ["adam", "qwerty"]);
* If successful returns back an array of useful information.
*
* Note that $params["id"] is reserved for query ID, you may set it to something if you wish.
* If you do, the same ID will be passed back with the reply from Anope.
*
* @param $name
* @param $params
* @return array|null
*/
public function run($name, $params)
{
$xmlquery = xmlrpc_encode_request($name, $params);
$context = stream_context_create(["http" => [
"method" => "POST",
"header" => "Content-Type: text/xml",
"content" => $xmlquery]]);
$inbuf = file_get_contents($this->host, false, $context);
$response = xmlrpc_decode($inbuf);
if ($response) {
return $response;
}
return null;
}
/**
* Do Command on Service as User, eg:
* $anope->command("ChanServ", "Adam", "REGISTER #adam");
* Returns an array of information regarding the command execution, if
* If 'online' is set to yes, then the reply to the command was sent to the user on IRC.
* If 'online' is set to no, then the reply to the command is in the array member 'return'
*
* @param $service
* @param $user
* @param $command
* @return array|null
*/
public function command($service, $user, $command)
{
return $this->run("command", [$service, $user, $command]);
}
/**
* Check an account/nick name and password to see if they are valid
* Returns the account display name if valid
*
* @param $account
* @param $pass
* @return string|null
*/
public function auth($account, $pass)
{
$ret = $this->run("checkAuthentication", [$account, $pass]);
if ($ret && $ret["result"] == "Success") {
return $ret["account"];
}
return null;
}
/**
* Returns an array of misc stats regarding Anope
*
* @return array|null
*/
public function stats()
{
return $this->run("stats", null);
}
/**
* Look up data for a channel
* Returns an array containing channel information, or an array of size one
* (just containing the name) if the channel does not exist
*
* @param $channel
* @return array|null
*/
public function channel($channel)
{
return $this->run("channel", [$channel]);
}
/**
* Sent a notice to a user.
* Returns an array containing channel information, or an array of size one
* (just containing the name) if the channel does not exist
*
* @param $source
* @param $target
* @param $message
* @return array|null
*/
public function notice($source, $target, $message)
{
return $this->run("notice", [$source, $target, $message]);
}
/**
* Like channel(), but different.
*
* @param $user
* @return array|null
*/
public function user($user)
{
return $this->run("user", [$user]);
}
}
$anope = new AnopeXMLRPC("http://127.0.0.1:8080/xmlrpc");
View File
Executable
+168
View File
@@ -0,0 +1,168 @@
#!/usr/bin/env perl
#
# Script taken from InspIRCd, https://www.inspircd.org/
#
# This program is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
# details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
#
BEGIN { require 5.8.0; }
use strict;
use warnings FATAL => qw(all);
use File::Copy ();
use Cwd;
sub list_extras ();
sub enable_extras (@);
sub disable_extras (@);
# Routine to list out the extra/ modules that have been enabled.
# Note: when getting any filenames out and comparing, it's important to lc it if the
# file system is not case-sensitive (== Epoc, MacOS, OS/2 (incl DOS/DJGPP), VMS, Win32
# (incl NetWare, Symbian)). Cygwin may or may not be case-sensitive, depending on
# configuration, however, File::Spec does not currently tell us (it assumes Unix behavior).
sub list_extras () {
use File::Spec;
# @_ not used
my $srcdir = File::Spec->catdir("modules");
my $abs_srcdir = File::Spec->rel2abs($srcdir);
local $_;
my $dd;
opendir $dd, File::Spec->catdir($abs_srcdir, "extra") or die (File::Spec->catdir($abs_srcdir, "extra") . ": $!\n");
my @extras = map { File::Spec->case_tolerant() ? lc($_) : $_ } (readdir($dd));
closedir $dd;
undef $dd;
opendir $dd, $abs_srcdir or die "$abs_srcdir: $!\n";
my @sources = map { File::Spec->case_tolerant() ? lc($_) : $_ } (readdir($dd));
closedir $dd;
undef $dd;
my $maxlen = (sort { $b <=> $a } (map {length($_)} (@extras)))[0];
my %extras = ();
EXTRA: for my $extra (@extras) {
next if (File::Spec->curdir() eq $extra || File::Spec->updir() eq $extra);
my $abs_extra = File::Spec->catfile($abs_srcdir, "extra", $extra);
my $abs_source = File::Spec->catfile($abs_srcdir, $extra);
next unless ($extra =~ m/\.(cpp|h)$/ || (-d $abs_extra)); # C++ Source/Header, or directory
if (-l $abs_source) {
# Symlink, is it in the right place?
my $targ = readlink($abs_source);
my $abs_targ = File::Spec->rel2abs($targ, $abs_srcdir);
if ($abs_targ eq $abs_extra) {
$extras{$extra} = "\e[32;1menabled\e[0m";
} else {
$extras{$extra} = sprintf("\e[31;1mwrong symlink target (%s)\e[0m", $abs_targ);
}
} elsif (-e $abs_source) {
my ($devext, $inoext) = stat($abs_extra);
my ($devsrc, $inosrc, undef, $lnksrc) = stat($abs_source);
if ($lnksrc > 1) {
if ($devsrc == $devext && $inosrc == $inoext) {
$extras{$extra} = "\e[32;1menabled\e[0m";
} else {
$extras{$extra} = sprintf("\e[31;1mwrong hardlink target (%d:%d)\e[0m", $devsrc, $inosrc);
}
} else {
open my $extfd, "<", $abs_extra;
open my $srcfd, "<", $abs_source;
local $/ = undef;
if (scalar(<$extfd>) eq scalar(<$srcfd>)) {
$extras{$extra} = "\e[32;1menabled\e[0m";
} else {
$extras{$extra} = sprintf("\e[31;1mout of synch (re-copy)\e[0m");
}
}
} else {
$extras{$extra} = "\e[33;1mdisabled\e[0m";
}
}
for my $extra (sort {$a cmp $b} keys(%extras)) {
my $text = $extras{$extra};
if ($text =~ m/needed by/ && $text !~ m/enabled/) {
printf "\e[31;1;5m%-*s = %s%s\e[0m\n", $maxlen, $extra, $text, ($text =~ m/needed by/ ? ")" : "");
} else {
printf "%-*s = %s%s\n", $maxlen, $extra, $text, ($text =~ m/needed by/ ? "\e[0m)" : "");
}
}
return keys(%extras) if wantarray; # Can be used by manage_extras.
}
sub enable_extras (@) {
my (@extras) = @_;
for my $extra (@extras) {
my $extrapath = "modules/extra/$extra";
if (!-e $extrapath) {
print STDERR "Cannot enable \e[32;1m$extra\e[0m : No such file or directory in modules/extra\n";
next;
}
my $source = "modules/$extra";
if (-e $source) {
print STDERR "Cannot enable \e[32;1m$extra\e[0m : destination in modules exists (might already be enabled?)\n";
next;
}
print "Enabling $extra ... \n";
symlink "extra/$extra", $source or print STDERR "$source: Cannot link to 'extra/$extra': $!\n";
}
}
sub disable_extras (@)
{
opendir my $dd, "modules/extra/";
my @files = readdir($dd);
closedir $dd;
my (@extras) = @_;
EXTRA: for my $extra (@extras) {
my $extrapath = "modules/extra/$extra";
my $source = "modules/$extra";
if (!-e $extrapath) {
print STDERR "Cannot disable \e[32;1m$extra\e[0m : Is not an extra\n";
next;
}
if ((! -l $source) || readlink($source) ne "extra/$extra") {
print STDERR "Cannot disable \e[32;1m$extra\e[0m : Source is not a link or doesn't refer to the right file. Remove manually if this is in error.\n";
next;
}
# Now remove.
print "Disabling $extra ... \n";
unlink "modules/$extra" or print STDERR "Cannot disable \e[32;1m$extra\e[0m : $!\n";
}
}
my $clearscreen = `clear`;
print $clearscreen;
while (1)
{
list_extras; # print the module list
print "\nPlease enter the name of the module or type 'q' to quit.: ";
my $input = <STDIN>;
chop($input); # remove the trailing \n from the user input
if ($input eq "q") {
if (-e "build/CMakeFiles") {
system("cmake", "build/.");
print "\nNow cd build, then run make to build Anope.\n\n";
} else {
print "\nBuild directory not found. You should run ./Config now.\n\n"
}
exit 0;
}
print $clearscreen;
if ($input eq "") {
next;
}
if (-e "modules/$input") {
disable_extras($input)
} else {
enable_extras($input)
}
}
+20 -28
View File
@@ -1,30 +1,22 @@
# 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-bin executable to modify version.h, setting it's linker flags as well
add_executable(version-bin version.cpp)
set_target_properties(version-bin PROPERTIES LINKER_LANGUAGE CXX LINK_FLAGS "${LDFLAGS}")
set(version_BINARY "$<TARGET_FILE:version-bin>")
# Modify version.h from the above executable, with dependencies to version.cpp
# and all of the source files in the main build
add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/version.h ${CMAKE_CURRENT_BINARY_DIR}/build.h
COMMAND version-bin ${Anope_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR}/version.h ${CMAKE_CURRENT_BINARY_DIR}/build.h
DEPENDS version-bin ${SRC_SRCS}
)
# Add version-bin 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)
add_to_cpack_ignored_files("build.h$" TRUE)
endif()
# Add a custom target to the above file
add_custom_target(headers DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/version.h)
add_custom_target(headers DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/version.h ${CMAKE_CURRENT_BINARY_DIR}/build.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 slist.h
touch $@
clean:
(rm -f language.h)
distclean: clean
(rm -f sysconf.h version.h)
+174
View File
@@ -0,0 +1,174 @@
/*
*
* (C) 2003-2024 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
*
* Based on the original code of Epona by Lara.
* Based on the original code of Services by Andy Church.
*/
#pragma once
#include "services.h"
#include "anope.h"
#include "serialize.h"
#include "service.h"
enum
{
ACCESS_INVALID = -10000,
ACCESS_FOUNDER = 10001
};
/* A privilege, probably configured using a privilege{} block. Most
* commands require specific privileges to be executed. The AccessProvider
* backing each ChanAccess determines whether that ChanAccess has a given
* privilege.
*/
struct CoreExport Privilege final
{
Anope::string name;
Anope::string desc;
/* Rank relative to other privileges */
int rank;
Privilege(const Anope::string &name, const Anope::string &desc, int rank);
bool operator==(const Privilege &other) const;
};
class CoreExport PrivilegeManager final
{
static std::vector<Privilege> Privileges;
public:
static void AddPrivilege(Privilege p);
static void RemovePrivilege(Privilege &p);
static Privilege *FindPrivilege(const Anope::string &name);
static std::vector<Privilege> &GetPrivileges();
static void ClearPrivileges();
};
/* A provider of access. Only used for creating ChanAccesses, as
* they contain pure virtual functions.
*/
class CoreExport AccessProvider
: public Service
{
public:
AccessProvider(Module *owner, const Anope::string &name);
virtual ~AccessProvider();
/** Creates a new ChanAccess entry using this provider.
* @return The new entry
*/
virtual ChanAccess *Create() = 0;
private:
static std::list<AccessProvider *> Providers;
public:
static const std::list<AccessProvider *>& GetProviders();
};
/* Represents one entry of an access list on a channel. */
class CoreExport ChanAccess
: public Serializable
{
Anope::string mask;
/* account this access entry is for, if any */
Serialize::Reference<NickCore> nc;
public:
typedef std::vector<ChanAccess *> Path;
/* The provider that created this access entry */
AccessProvider *provider;
/* Channel this access entry is on */
Serialize::Reference<ChannelInfo> ci;
Anope::string creator;
Anope::string description;
time_t last_seen;
time_t created;
ChanAccess(AccessProvider *p);
virtual ~ChanAccess();
void SetMask(const Anope::string &mask, ChannelInfo *ci);
const Anope::string &Mask() const;
NickCore *GetAccount() const;
void Serialize(Serialize::Data &data) const override;
static Serializable *Unserialize(Serializable *obj, Serialize::Data &);
static const unsigned int MAX_DEPTH = 4;
/** Check if this access entry matches the given user or account
* @param u The user
* @param nc The account
* @param next Next channel to check if any
*/
virtual bool Matches(const User *u, const NickCore *nc, ChannelInfo *&next) const;
/** Check if this access entry has the given privilege.
* @param name The privilege name
*/
virtual bool HasPriv(const Anope::string &name) const = 0;
/** Serialize the access given by this access entry into a human
* readable form. chanserv/access will return a number, chanserv/xop
* will be AOP, SOP, etc.
*/
virtual Anope::string AccessSerialize() const = 0;
/** Unserialize this access entry from the given data. This data
* will be fetched from AccessSerialize.
*/
virtual void AccessUnserialize(const Anope::string &data) = 0;
/* Comparison operators to other Access entries */
virtual bool operator>(const ChanAccess &other) const;
virtual bool operator<(const ChanAccess &other) const;
bool operator>=(const ChanAccess &other) const;
bool operator<=(const ChanAccess &other) const;
};
/* A group of access entries. This is used commonly, for example with ChannelInfo::AccessFor,
* to show what access a user has on a channel because users can match multiple access entries.
*/
class CoreExport AccessGroup final
{
public:
/* access entries + paths */
std::vector<ChanAccess::Path> paths;
/* Channel these access entries are on */
const ChannelInfo *ci;
/* Account these entries affect, if any */
const NickCore *nc;
/* super_admin always gets all privs. founder is a special case where ci->founder == nc */
bool super_admin, founder;
AccessGroup();
/** Check if this access group has a certain privilege. Eg, it
* will check every ChanAccess entry of this group for any that
* has the given privilege.
* @param priv The privilege
* @return true if any entry has the given privilege
*/
bool HasPriv(const Anope::string &priv) const;
/** Get the "highest" access entry from this group of entries.
* The highest entry is determined by the entry that has the privilege
* with the highest rank (see Privilege::rank).
* @return The "highest" entry
*/
const ChanAccess *Highest() const;
/* Comparison operators to other AccessGroups */
bool operator>(const AccessGroup &other) const;
bool operator<(const AccessGroup &other) const;
bool operator>=(const AccessGroup &other) const;
bool operator<=(const AccessGroup &other) const;
inline bool empty() const { return paths.empty(); }
};
+206 -183
View File
@@ -1,218 +1,241 @@
/* NickServ nickname structures. */
/** Flags set on NickAliases
/*
*
* (C) 2003-2024 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
*
* Based on the original code of Epona by Lara.
* Based on the original code of Services by Andy Church.
*/
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,
#pragma once
NS_END
};
#include "extensible.h"
#include "serialize.h"
#include "anope.h"
#include "memo.h"
#include "base.h"
/** Flags set on NickCores
typedef Anope::hash_map<NickAlias *> nickalias_map;
typedef Anope::hash_map<NickCore *> nickcore_map;
typedef std::unordered_map<uint64_t, NickCore *> nickcoreid_map;
extern CoreExport Serialize::Checker<nickalias_map> NickAliasList;
extern CoreExport Serialize::Checker<nickcore_map> NickCoreList;
extern CoreExport nickcoreid_map NickCoreIdList;
/* A registered nickname.
* It matters that Base is here before Extensible (it is inherited by Serializable)
*/
enum NickCoreFlag
class CoreExport NickAlias final
: public Serializable
, public Extensible
{
NI_BEGIN,
Anope::string vhost_ident, vhost_host, vhost_creator;
time_t vhost_created;
/* 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,
public:
Anope::string nick;
Anope::string last_quit;
Anope::string last_realname;
/* Last usermask this nick was seen on, eg user@host */
Anope::string last_usermask;
/* Last uncloaked usermask, requires nickserv/auspex to see */
Anope::string last_realhost;
time_t time_registered;
time_t last_seen;
/* Account this nick is tied to. Multiple nicks can be tied to a single account. */
Serialize::Reference<NickCore> nc;
NI_END
};
/** XXX: this really needs to die with fire and be merged with metadata into NickCore or something.
*/
class CoreExport NickRequest
{
public:
NickRequest(const std::string &nickname);
~NickRequest();
NickRequest *next, *prev;
char *nick;
std::string passcode;
std::string password;
char *email;
time_t requested;
time_t lastmail; /* Unsaved */
};
class NickCore;
class CoreExport NickAlias : public Extensible, public Flags<NickNameFlag>
{
public:
/** Default constructor
/** Constructor
* @param nickname The nick
* @param nickcore The nickcofe for this nick
*/
NickAlias(const std::string &nickname, NickCore *nickcore);
/** Default destructor
* @param nickcore The nickcore for this nick
*/
NickAlias(const Anope::string &nickname, NickCore *nickcore);
~NickAlias();
NickAlias *next, *prev;
char *nick; /* Nickname */
char *last_quit; /* Last quit message */
char *last_realname; /* Last realname */
char *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 */
NickCore *nc; /* I'm an alias of this */
HostInfo hostinfo;
void Serialize(Serialize::Data &data) const override;
static Serializable *Unserialize(Serializable *obj, Serialize::Data &);
/** Release a nick
* See the comment in users.cpp
/** Set a vhost for the user
* @param ident The ident
* @param host The host
* @param creator Who created the vhost
* @param time When the vhost was created
*/
void Release();
void SetVhost(const Anope::string &ident, const Anope::string &host, const Anope::string &creator, time_t created = Anope::CurTime);
/** 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
/** Remove a users vhost
**/
void RemoveVhost();
/** Check if the user has a vhost
* @return true or false
*/
void OnCancel(User *u);
bool HasVhost() const;
/** Retrieve the vhost ident
* @return the ident
*/
const Anope::string &GetVhostIdent() const;
/** Retrieve the vhost host
* @return the host
*/
const Anope::string &GetVhostHost() const;
/** Retrieve the vhost mask
* @param the mask
*/
Anope::string GetVhostMask() const;
/** Retrieve the vhost creator
* @return the creator
*/
const Anope::string &GetVhostCreator() const;
/** Retrieve when the vhost was created
* @return the time it was created
*/
time_t GetVhostCreated() const;
/** Finds a registered nick
* @param nick The nick to lookup
* @return the nick, if found
*/
static NickAlias *Find(const Anope::string &nick);
};
class CoreExport NickCore : public Extensible, public Flags<NickCoreFlag>
/* A registered account. Each account must have a NickAlias with the same nick as the
* account's display.
* It matters that Base is here before Extensible (it is inherited by Serializable)
*/
class CoreExport NickCore final
: public Serializable
, public Extensible
{
public:
/** Default constructor
* @param display The display nick
*/
NickCore(const std::string &nickdisplay);
/** Default destructor
*/
~NickCore();
NickCore *next, *prev;
std::list<User *> Users;
char *display; /* How the nick is displayed */
std::string pass; /* 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 */
uint16 language; /* Language selected by nickname owner (LANG_*) */
std::vector<std::string> access; /* Access list, vector of strings */
/* Channels which reference this core in some way (this is on their access list, akick list, is founder, successor, etc) */
Serialize::Checker<std::map<ChannelInfo *, int> > chanaccess;
/* Unique identifier for the account. */
uint64_t id;
public:
/* Name of the account. Find(display)->nc == this. */
Anope::string display;
/* User password in form of hashm:data */
Anope::string pass;
Anope::string email;
/* Locale name of the language of the user. Empty means default language */
Anope::string language;
MemoInfo memos;
uint16 channelcount; /* Number of channels currently registered */
std::map<Anope::string, Anope::string> last_modes;
OperType *ot;
/* Nicknames registered that are grouped to this account.
* for n in aliases, n->nc == this.
*/
Serialize::Checker<std::vector<NickAlias *> > aliases;
/* Set if this user is a services operator. o->ot must exist. */
Oper *o;
/* Unsaved data */
time_t lastmail; /* Last time this nick record got a mail */
SList aliases; /* List of aliases */
/** Check whether this opertype has access to run the given command string.
* @param cmdstr The string to check, e.g. botserv/set/private.
* @return True if this opertype may run the specified command, false otherwise.
*/
virtual bool HasCommand(const std::string &cmdstr) const;
/* Number of channels registered by this account */
uint16_t channelcount;
/* Last time an email was sent to this user */
time_t lastmail;
/* Users online now logged into this account */
std::list<User *> users;
/** Constructor
* @param display The display nick
* @param id The account id
*/
NickCore(const Anope::string &nickdisplay, uint64_t nickid = 0);
~NickCore();
void Serialize(Serialize::Data &data) const override;
static Serializable *Unserialize(Serializable *obj, Serialize::Data &);
/** Changes the display for this account
* @param na The new display, must be grouped to this account.
*/
void SetDisplay(const NickAlias *na);
/** Checks whether this account is a services oper or not.
* @return True if this account is a services oper, false otherwise.
*/
virtual bool IsServicesOper() const;
/** Check whether this opertype has access to the given special permission.
* @param privstr The priv to check for, e.g. users/auspex.
* @return True if this opertype has the specified priv, false otherwise.
*/
virtual bool HasPriv(const std::string &privstr) const;
/** Retrieves the account id for this user */
uint64_t GetId();
/** Add an entry to the nick's access list
*
* @param entry The nick!ident@host entry to add to the access list
*
* Adds a new entry into the access list.
/** Finds an account
* @param nick The account name to find
* @return The account, if it exists
*/
void AddAccess(const std::string &entry);
static NickCore *Find(const Anope::string &nick);
/** Get an entry from the nick's access list by index
*
* @param entry Index in the access list vector to retrieve
* @return The access list entry of the given index if within bounds, an empty string if the vector is empty or the index is out of bounds
*
* Retrieves an entry from the access list corresponding to the given index.
*/
std::string GetAccess(unsigned entry);
/** Find an entry in the nick's access list
*
* @param entry The nick!ident@host entry to search for
* @return True if the entry is found in the access list, false otherwise
*
* Search for an entry within the access list.
*/
bool FindAccess(const std::string &entry);
/** Erase an entry from the nick's access list
*
* @param entry The nick!ident@host entry to remove
*
* Removes the specified access list entry from the access list.
*/
void EraseAccess(const std::string &entry);
/** Clears the entire nick's access list
*
* Deletes all the memory allocated in the access list vector and then clears the vector.
*/
void ClearAccess();
void AddChannelReference(ChannelInfo *ci);
void RemoveChannelReference(ChannelInfo *ci);
void GetChannelReferences(std::deque<ChannelInfo *> &queue);
};
/* A request to check if an account/password is valid. These can exist for
* extended periods due to the time some authentication modules take.
*/
class CoreExport IdentifyRequest
{
/* Owner of this request, used to cleanup requests if a module is unloaded
* while a request us pending */
Module *owner;
Anope::string account;
Anope::string password;
std::set<Module *> holds;
bool dispatched = false;
bool success = false;
static std::set<IdentifyRequest *> Requests;
protected:
IdentifyRequest(Module *o, const Anope::string &acc, const Anope::string &pass);
virtual ~IdentifyRequest();
public:
/* One of these is called when the request goes through */
virtual void OnSuccess() = 0;
virtual void OnFail() = 0;
Module *GetOwner() const { return owner; }
const Anope::string &GetAccount() const { return account; }
const Anope::string &GetPassword() const { return password; }
/* Holds this request. When a request is held it must be Released later
* for the request to complete. Multiple modules may hold a request at any time,
* but the request is not complete until every module has released it. If you do not
* require holding this (eg, your password check is done in this thread and immediately)
* then you don't need to hold the request before calling `Success()`.
* @param m The module holding this request
*/
void Hold(Module *m);
/** Releases a held request
* @param m The module releasing the hold
*/
void Release(Module *m);
/** Called by modules when this IdentifyRequest has succeeded.
* If this request is behind held it must still be Released after calling this.
* @param m The module confirming authentication
*/
void Success(Module *m);
/** Used to either finalize this request or marks
* it as dispatched and begins waiting for the module(s)
* that have holds to finish.
*/
void Dispatch();
static void ModuleUnload(Module *m);
};
+810
View File
@@ -0,0 +1,810 @@
/*
*
* (C) 2003-2024 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
*
* Based on the original code of Epona by Lara.
* Based on the original code of Services by Andy Church.
*/
#pragma once
#include <signal.h>
#include "hashcomp.h"
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 CoreExport string final
{
private:
/**
* The actual string is stored in an std::string as it can be converted to
* ci::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 char *_str, size_type n) : _string(_str, n) { }
string(const std::string &_str) : _string(_str) { }
string(const ci::string &_str) : _string(_str.c_str()) { }
string(const string &_str, size_type pos, size_type n = npos) : _string(_str._string, pos, n) { }
template <class InputIterator> string(InputIterator first, InputIterator last) : _string(first, last) { }
string(const string &) = default;
/**
* 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 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 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 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 string &_str) const { return ci::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 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 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 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);
/**
* 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 const char *data() const { return this->_string.data(); }
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()); }
/**
* Returns if the string is empty or not.
*/
inline bool empty() const { return this->_string.empty(); }
/**
* Returns the string's length.
*/
inline size_type length() const { return this->_string.length(); }
/**
* Returns the size of the currently allocated storage space in the string object.
* This can be equal or greater than the length of the string.
*/
inline size_type capacity() const { return this->_string.capacity(); }
/**
* Add a char to the end of the string.
*/
inline void push_back(char c) { return this->_string.push_back(c); }
inline string &append(const string &s) { this->_string.append(s.str()); return *this; }
inline string &append(const char *s, size_t n) { this->_string.append(s, n); return *this; }
/**
* Resizes the string content to n characters.
*/
inline void resize(size_type n) { return this->_string.resize(n); }
/**
* Erases characters from the string.
*/
inline iterator erase(const iterator &i) { return this->_string.erase(i); }
inline iterator erase(const iterator &first, const iterator &last) { return this->_string.erase(first, last); }
inline void erase(size_type pos = 0, size_type n = std::string::npos) { this->_string.erase(pos, n); }
/**
* Trim leading and trailing white spaces from the string.
*/
inline string &ltrim(const Anope::string &what = " \t\r\n")
{
while (!this->_string.empty() && what.find(this->_string[0]) != Anope::string::npos)
this->_string.erase(this->_string.begin());
return *this;
}
inline string &rtrim(const Anope::string &what = " \t\r\n")
{
while (!this->_string.empty() && what.find(this->_string[this->_string.length() - 1]) != Anope::string::npos)
this->_string.erase(this->_string.length() - 1);
return *this;
}
inline string &trim(const Anope::string &what = " \t\r\n")
{
this->ltrim(what);
this->rtrim(what);
return *this;
}
/**
* 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); }
inline int compare(size_t pos, size_t len, const string &str) const { return ci::string(this->_string.c_str()).compare(pos, len, ci::string(str.c_str())); }
inline int compare(size_t pos, size_t len, const string &str, size_t subpos, size_type sublen = npos) const { return ci::string(this->_string.c_str()).compare(pos, len, ci::string(str.c_str()), subpos, sublen); }
inline int compare(size_t pos, size_t len, const char *s, size_type n = npos) const { return ci::string(this->_string.c_str()).compare(pos, len, s, n); }
/**
* 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) const
{
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) const
{
Anope::string new_string = *this;
size_type pos = new_string.find_ci(_orig), orig_length = _orig.length(), repl_length = _repl.length();
while (pos != npos)
{
new_string = new_string.substr(0, pos) + _repl + new_string.substr(pos + orig_length);
pos = new_string.find_ci(_orig, pos + repl_length);
}
return new_string;
}
/**
* Get the string in lowercase.
*/
inline string lower() const
{
Anope::string new_string = *this;
for (auto &chr : new_string)
chr = Anope::tolower(chr);
return new_string;
}
/**
* Get the string in uppercase.
*/
inline string upper() const
{
Anope::string new_string = *this;
for (auto &chr : new_string)
chr = Anope::toupper(chr);
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);
friend std::istream &operator>>(std::istream &is, string &_str);
};
inline std::ostream &operator<<(std::ostream &os, const string &_str) { return os << _str._string; }
/* This is not standard to make operator>> behave like operator<< in that it will allow extracting a whole line, not just one word */
inline std::istream &operator>>(std::istream &is, string &_str) { return std::getline(is, _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; }
struct hash_ci final
{
inline size_t operator()(const string &s) const
{
return std::hash<std::string>()(s.lower().str());
}
};
struct hash_cs final
{
inline size_t operator()(const string &s) const
{
return std::hash<std::string>()(s.str());
}
};
struct compare final
{
inline bool operator()(const string &s1, const string &s2) const
{
return s1.equals_ci(s2);
}
};
template<typename T>
using map = std::map<string, T, ci::less>;
template<typename T>
using multimap = std::multimap<string, T, ci::less>;
template<typename T>
using hash_map = std::unordered_map<string, T, hash_ci, compare>;
#ifndef REPRODUCIBLE_BUILD
static const char *const compiled = __TIME__ " " __DATE__;
#endif
/** The time Anope started.
*/
extern CoreExport time_t StartTime;
/** The value to return from main()
*/
extern int ReturnValue;
extern sig_atomic_t Signal;
extern CoreExport bool Quitting;
extern CoreExport bool Restarting;
extern CoreExport Anope::string QuitReason;
/** 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;
/** The debug level we are running at.
*/
extern CoreExport int Debug;
/** Other command line options.
*/
extern CoreExport bool ReadOnly, NoFork, NoThird, NoExpire, ProtocolDebug;
/** The root of the Anope installation. Usually ~/anope
*/
extern CoreExport Anope::string ServicesDir;
/** Anope binary name (eg anope)
*/
extern CoreExport Anope::string ServicesBin;
/** Various directory paths. These can be set at runtime by command line args
*/
extern CoreExport Anope::string ConfigDir;
extern CoreExport Anope::string DataDir;
extern CoreExport Anope::string ModuleDir;
extern CoreExport Anope::string LocaleDir;
extern CoreExport Anope::string LogDir;
/** The uplink we are currently connected to
*/
extern CoreExport size_t CurrentUplink;
/** Various methods to determine the Anope version running
*/
extern CoreExport string Version();
extern CoreExport string VersionShort();
extern CoreExport string VersionBuildString();
extern CoreExport int VersionMajor();
extern CoreExport int VersionMinor();
extern CoreExport int VersionPatch();
/** Determines if we are still attached to the terminal, and can print
* messages to the user via stderr/stdout.
* @return true if still attached
*/
extern bool AtTerm();
/** Used to "fork" the process and go into the background during initial startup
* while we are AtTerm(). The actual fork is not done here, but earlier, and this
* simply notifies the parent via kill() to exit().
*/
extern void Fork();
/** Does something with the signal in Anope::Signal
*/
extern void HandleSignal();
/** One of the first functions called, does general initialization such as reading
* command line args, loading the configuration, doing the initial fork() if necessary,
* initializing language support, loading modules, and loading databases.
* @throws CoreException if something bad went wrong
*/
extern bool Init(int ac, char **av);
/** Calls the save database event
*/
extern CoreExport void SaveDatabases();
/** Check whether two strings match.
* @param str The string to check against the pattern (e.g. foobar)
* @param mask The pattern to check (e.g. foo*bar)
* @param case_sensitive Whether or not the match is case sensitive, default false.
* @param use_regex Whether or not to try regex. case_sensitive is not used in regex.
*/
extern CoreExport bool Match(const string &str, const string &mask, bool case_sensitive = false, bool use_regex = false);
/** 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 string &src, string &dest);
extern CoreExport void Unhex(const string &src, char *dest, size_t sz);
/** Base 64 encode a string
* @param src The string to encode
* @param target Where the encoded string is placed
*/
extern CoreExport void B64Encode(const string &src, string &target);
/** Base 64 decode a string
* @param src The base64 encoded string
* @param target The plain text result
*/
extern CoreExport void B64Decode(const string &src, string &target);
/** Encrypts what is in 'src' to 'dest'
* @param src The source string to encrypt
* @param dest The destination where the encrypted string is placed
*/
extern CoreExport void Encrypt(const Anope::string &src, Anope::string &dest);
/** Hashes a buffer with SipHash-2-4
* @param src The start of the buffer to hash
* @param src_sz The total number of bytes in the buffer
* @param key A 16 byte key to hash the buffer with.
*/
extern CoreExport uint64_t SipHash24(const void *src, unsigned long src_sz, const char key[16]);
/** Returns a sequence of data formatted as the format argument specifies.
** After the format parameter, the function expects at least as many
** additional arguments as specified in format.
* @param fmt Format of the Message
* @param ... any number of parameters
* @return a Anope::string
*/
extern CoreExport string printf(const char *fmt, ...) ATTR_FORMAT(1, 2);
/** Return the last error code
* @return The error code
*/
extern CoreExport int LastErrorCode();
/** Return the last error, uses errno/GetLastError() to determine this
* @return An error message
*/
extern CoreExport string LastError();
/** Determines if a path is a file
*/
extern CoreExport bool IsFile(const Anope::string &file);
/** Converts a string into seconds
* @param s The string, eg 3d
* @return The time represented by the string, eg 259,200
*/
extern CoreExport time_t DoTime(const Anope::string &s);
/** Retrieves a human readable string representing the time in seconds
* @param seconds The time on seconds, eg 60
* @param nc The account to use language settings for to translate this string, if applicable
* @return A human readable string, eg "1 minute"
*/
extern CoreExport Anope::string Duration(time_t seconds, const NickCore *nc = NULL);
/** Generates a human readable string of type "expires in ..."
* @param expires time in seconds
* @param nc The account to use language settings for to translate this string, if applicable
* @return A human readable string, eg "expires in 5 days"
*/
extern CoreExport Anope::string Expires(time_t seconds, const NickCore *nc = NULL);
/** Converts a time in seconds (epoch) to a human readable format.
* @param t The time
* @param nc The account to use language settings for to translate this string, if applicable
* @param short_output If true, the output is just a date (eg, "Apr 12 20:18:22 2009 MSD"), else it includes the date and how long ago/from now that date is, (eg "Apr 12 20:18:22 2009 MSD (1313 days, 9 hours, 32 minutes ago)"
*/
extern CoreExport Anope::string strftime(time_t t, const NickCore *nc = NULL, bool short_output = false);
/** Normalize buffer, stripping control characters and colors
* @param A string to be parsed for control and color codes
* @return A string stripped of control and color codes
*/
extern CoreExport Anope::string NormalizeBuffer(const Anope::string &);
/** Main processing routine. Parses the message and takes the appropriate action.
* @param Raw message from the uplink
*/
extern void Process(const Anope::string &);
/** Does a blocking dns query and returns the first IP.
* @param host host to look up
* @param type inet addr type
* @return the IP if it was found, else the host
*/
extern Anope::string Resolve(const Anope::string &host, int type);
/** Does a blocking dns query and returns all IPs.
* @param host host to look up
* @param type inet addr type
* @return A list of all IPs that the host resolves to
*/
extern std::vector<Anope::string> ResolveMultiple(const Anope::string &host, int type);
/** Generate a string of random letters and numbers
* @param len The length of the string returned
*/
extern CoreExport Anope::string Random(size_t len);
/** Calculates the levenshtein distance between two strings.
* @param s1 The first string.
* @param s2 The second string.
*/
extern CoreExport size_t Distance(const Anope::string &s1, const Anope::string &s2);
}
/** sepstream allows for splitting token separated 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;
/** Separator value
*/
char sep;
/** Current string position
*/
size_t pos = 0;
/** If set then GetToken() can return an empty string
*/
bool allow_empty;
public:
/** Create a sepstream and fill it with the provided data
*/
sepstream(const Anope::string &source, char separator, bool allowempty = false);
/** 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
*/
bool GetToken(Anope::string &token);
/** Gets token number 'num' from the stream
* @param token The token is placed here
* @param num The token number to fetch
* @return True if the token was able to be fetched
*/
bool GetToken(Anope::string &token, int num);
/** Gets every token from this stream
* @param token Tokens are pushed back here
*/
template<typename T> void GetTokens(T &token)
{
token.clear();
Anope::string t;
while (this->GetToken(t))
token.push_back(t);
}
/** Gets token number 'num' from the stream and all remaining tokens.
* @param token The token is placed here
* @param num The token number to fetch
* @return True if the token was able to be fetched
*/
bool GetTokenRemainder(Anope::string &token, int num);
/** Determines the number of tokens in this stream.
* @return The number of tokens in this stream
*/
int NumTokens();
/** Fetch the entire remaining stream, without tokenizing
* @return The remaining part of the stream
*/
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
*/
bool StreamEnd();
};
/** A derived form of sepstream, which separates on commas
*/
class commasepstream final
: public sepstream
{
public:
/** Initialize with comma separator
*/
commasepstream(const Anope::string &source, bool allowempty = false) : sepstream(source, ',', allowempty) { }
};
/** A derived form of sepstream, which separates on spaces
*/
class spacesepstream final
: public sepstream
{
public:
/** Initialize with space separator
*/
spacesepstream(const Anope::string &source) : sepstream(source, ' ') { }
};
/** 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 CoreExport CoreException
: public std::exception
{
protected:
/** Holds the error message to be displayed
*/
Anope::string err;
/** Source of the exception
*/
Anope::string source;
public:
/** Default constructor, just uses the error message 'Core threw an exception'.
*/
CoreException() : err("Core threw an exception"), source("The core") { }
/** This constructor can be used to specify an error message before throwing.
*/
CoreException(const Anope::string &message) : err(message), source("The core") { }
/** This constructor can be used to specify an error message before throwing,
* and to specify the source of the exception.
*/
CoreException(const Anope::string &message, const Anope::string &src) : err(message), source(src) { }
/** This destructor solves world hunger, cancels the world debt, and causes the world to end.
* Actually no, it does nothing. Never mind.
* @throws Nothing!
*/
virtual ~CoreException() noexcept = default;
/** Returns the reason for the exception.
* The module should probably put something informative here as the user will see this upon failure.
*/
virtual const Anope::string &GetReason() const
{
return err;
}
virtual const Anope::string &GetSource() const
{
return source;
}
};
class CoreExport ModuleException
: public CoreException
{
public:
/** Default constructor, just uses the error message 'Module threw an exception'.
*/
ModuleException() : CoreException("Module threw an exception", "A Module") { }
/** This constructor can be used to specify an error message before throwing.
*/
ModuleException(const Anope::string &message) : CoreException(message, "A Module") { }
/** This destructor solves world hunger, cancels the world debt, and causes the world to end.
* Actually no, it does nothing. Never mind.
* @throws Nothing!
*/
virtual ~ModuleException() noexcept = default;
};
class CoreExport ConvertException final
: public CoreException
{
public:
ConvertException(const Anope::string &reason = "") : CoreException(reason) { }
virtual ~ConvertException() noexcept = default;
};
/** Convert something to a string
*/
inline Anope::string stringify(const Anope::string &x)
{
return x;
}
template<typename T> inline Anope::string stringify(const T &x)
{
std::ostringstream stream;
if (!(stream << x))
throw ConvertException("Stringify fail");
return stream.str();
}
template<typename T> inline void convert(const Anope::string &s, T &x, Anope::string &leftover, bool failIfLeftoverChars = true)
{
leftover.clear();
std::istringstream i(s.str());
char c;
if (!(i >> x))
throw ConvertException("Convert fail");
if (failIfLeftoverChars)
{
if (i.get(c))
throw ConvertException("Convert fail");
}
else
{
std::string left;
getline(i, left);
leftover = left;
}
}
template<typename T> inline void convert(const Anope::string &s, T &x, bool failIfLeftoverChars = true)
{
Anope::string Unused;
convert(s, x, Unused, failIfLeftoverChars);
}
template<typename T> inline T convertTo(const Anope::string &s, Anope::string &leftover, bool failIfLeftoverChars = true)
{
T x;
convert(s, x, leftover, failIfLeftoverChars);
return x;
}
template<typename T> inline T convertTo(const Anope::string &s, bool failIfLeftoverChars = true)
{
T x;
convert(s, x, failIfLeftoverChars);
return x;
}
/** Casts to be used instead of dynamic_cast, this uses dynamic_cast
* for debug builds and static_cast on release builds
* to speed up the program because dynamic_cast relies on RTTI.
*/
#ifdef DEBUG_BUILD
# include <typeinfo>
template<typename T, typename O> inline T anope_dynamic_static_cast(O ptr)
{
T ret = dynamic_cast<T>(ptr);
if (ptr != NULL && ret == NULL)
throw CoreException(Anope::string("anope_dynamic_static_cast<") + typeid(T).name() + ">(" + typeid(O).name() + ") fail");
return ret;
}
#else
template<typename T, typename O> inline T anope_dynamic_static_cast(O ptr)
{
return static_cast<T>(ptr);
}
#endif
+138
View File
@@ -0,0 +1,138 @@
/*
*
* (C) 2008-2011 Adam <Adam@anope.org>
* (C) 2008-2024 Anope Team <team@anope.org>
*
* Please read COPYING and README for further details.
*/
#pragma once
#include "services.h"
/** The base class that most classes in Anope inherit from
*/
class CoreExport Base
{
/* References to this base class */
std::set<ReferenceBase *> *references = nullptr;
public:
virtual ~Base();
/** Adds a reference to this object. Eg, when a Reference
* is created referring to this object this is called. It is used to
* cleanup references when this object is destructed.
*/
void AddReference(ReferenceBase *r);
void DelReference(ReferenceBase *r);
};
class ReferenceBase
{
protected:
bool invalid = false;
public:
ReferenceBase() = default;
ReferenceBase(const ReferenceBase &other) : invalid(other.invalid) { }
virtual ~ReferenceBase() = default;
inline void Invalidate() { this->invalid = true; }
};
/** Used to hold pointers to objects that may be deleted. A Reference will
* no longer be valid once the object it refers is destructed.
*/
template<typename T>
class Reference
: public ReferenceBase
{
protected:
T *ref = nullptr;
public:
Reference() = default;
Reference(T *obj) : ref(obj)
{
if (ref)
ref->AddReference(this);
}
Reference(const Reference<T> &other) : ReferenceBase(other), ref(other.ref)
{
if (operator bool())
ref->AddReference(this);
}
virtual ~Reference()
{
if (operator bool())
ref->DelReference(this);
}
inline Reference<T>& operator=(const Reference<T> &other)
{
if (this != &other)
{
if (*this)
this->ref->DelReference(this);
this->ref = other.ref;
this->invalid = other.invalid;
if (*this)
this->ref->AddReference(this);
}
return *this;
}
/* We explicitly call operator bool here in several places to prevent other
* operators, such operator T*, from being called instead, which will mess
* with any class inheriting from this that overloads this operator.
*/
virtual operator bool()
{
if (!this->invalid)
return this->ref != NULL;
return false;
}
inline operator T*()
{
if (operator bool())
return this->ref;
return NULL;
}
inline T *operator->()
{
if (operator bool())
return this->ref;
return NULL;
}
inline T *operator*()
{
if (operator bool())
return this->ref;
return NULL;
}
/** Note that we can't have an operator< that returns this->ref < other.ref
* because this function is used to sort objects in containers (such as set
* or map), and if the references themselves can change if the object they
* refer to is invalidated or changed, then this screws with the order that
* the objects would be in the container without properly adjusting the
* container, resulting in weird stuff.
*
* As such, we don't allow storing references in containers that require
* operator<, because they would not be able to compare what the references
* actually referred to.
*/
inline bool operator==(const Reference<T> &other)
{
if (!this->invalid)
return this->ref == other;
return false;
}
};
+100 -52
View File
@@ -1,77 +1,75 @@
/*
* Copyright (C) 2008-2010 Robin Burchell <w00t@inspircd.org>
* Copyright (C) 2008-2010 Anope Team <team@anope.org>
*
* (C) 2008-2011 Robin Burchell <w00t@inspircd.org>
* (C) 2008-2024 Anope Team <team@anope.org>
*
* Please read COPYING and README for further details.
*
*
* $Id$
*
*/
/** Flags settable on a bot
*/
enum BotFlag
#pragma once
#include "users.h"
#include "anope.h"
#include "serialize.h"
#include "commands.h"
typedef Anope::map<BotInfo *> botinfo_map;
extern CoreExport Serialize::Checker<botinfo_map> BotListByNick, BotListByUID;
/* A service bot (NickServ, ChanServ, a BotServ bot, etc). */
class CoreExport BotInfo final
: public User
, public Serializable
{
BI_BEGIN,
/* This bot can only be assigned by IRCops */
BI_PRIVATE,
/* The following flags are used to determin what bot really is what.
* Since you *could* have ChanServ really named BotServ or something stupid,
* this keeps track of them and allows them to be renamed in the config
* at any time, even if they already exist in the database
*/
BI_CHANSERV,
BI_BOTSERV,
BI_HOSTSERV,
BI_OPERSERV,
BI_MEMOSERV,
BI_NICKSERV,
BI_GLOBAL,
BI_END
};
struct CommandHash;
class CoreExport BotInfo : public Extensible, public Flags<BotFlag>
{
public:
BotInfo *next, *prev;
std::string uid; /* required for UID supporting servers, as opposed to the shitty struct Uid. */
std::string nick; /* Nickname of the bot */
std::string user; /* Its user name */
std::string host; /* Its hostname */
std::string real; /* Its real name */
time_t created; /* Birth date ;) */
int16 chancount; /* Number of channels that use the bot. */
/* Dynamic data */
time_t lastmsg; /* Last time we said something */
CommandHash **cmdTable;
/* Channels this bot is assigned to */
Serialize::Checker<std::set<ChannelInfo *> > channels;
public:
time_t created;
/* Last time this bot said something (via privmsg) */
time_t lastmsg;
/* Map of actual command names -> service name/permission required */
CommandInfo::map commands;
/* Modes the bot should have as configured in service:modes */
Anope::string botmodes;
/* Channels the bot should be in as configured in service:channels */
std::vector<Anope::string> botchannels;
/* Whether or not this bot is introduced to the network */
bool introduced;
/* Bot can only be assigned by irc ops */
bool oper_only;
/* Bot is defined in the configuration file */
bool conf;
/** Create a new bot.
* @param nick The nickname to assign to the bot.
* @param user The ident to give the bot.
* @param host The hostname to give the bot.
* @param real The realname to give the bot.
* @param bmodes The modes to give the bot.
*/
BotInfo(const std::string &nick, const std::string &user = "", const std::string &host = "", const std::string &real = "");
BotInfo(const Anope::string &nick, const Anope::string &user = "", const Anope::string &host = "", const Anope::string &real = "", const Anope::string &bmodes = "");
/** Destroy a bot, clearing up appropriately.
*/
virtual ~BotInfo();
/** Change the nickname set on a bot.
void Serialize(Serialize::Data &data) const;
static Serializable *Unserialize(Serializable *obj, Serialize::Data &);
void GenerateUID();
void OnKill();
/** 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.
/** Return the channels this bot is assigned to
*/
void RejoinAll();
const std::set<ChannelInfo *> &GetChannels() const;
/** Assign this bot to a given channel, removing the existing assigned bot if one exists.
* @param u The user assigning the bot, or NULL
@@ -84,4 +82,54 @@ class CoreExport BotInfo : public Extensible, public Flags<BotFlag>
* @param ci The channel registration to remove the bot from.
*/
void UnAssign(User *u, ChannelInfo *ci);
/** Get the number of channels this bot is assigned to
*/
unsigned GetChannelCount() const;
/** Join this bot to a channel
* @param c The channel
* @param status The status the bot should have on the channel
*/
void Join(Channel *c, ChannelStatus *status = NULL);
/** Join this bot to a channel
* @param chname The channel name
* @param status The status the bot should have on the channel
*/
void Join(const Anope::string &chname, ChannelStatus *status = NULL);
/** Part this bot from a channel
* @param c The channel
* @param reason The reason we're parting
*/
void Part(Channel *c, const Anope::string &reason = "");
/** Called when a user messages this bot
* @param u The user
* @param message The users' message
* @params tags Message tags
*/
virtual void OnMessage(User *u, const Anope::string &message, const Anope::map<Anope::string> &tags);
/** Link a command name to a command in services
* @param cname The command name
* @param sname The service name
* @param permission Permission required to execute the command, if any
* @return The commandinfo for the newly created command
*/
CommandInfo &SetCommand(const Anope::string &cname, const Anope::string &sname, const Anope::string &permission = "");
/** Get command info for a command
* @param cname The command name
* @return A struct containing service name and permission
*/
CommandInfo *GetCommand(const Anope::string &cname);
/** Find a bot by nick
* @param nick The nick
* @param nick_only True to only look by nick, and not by UID
* @return The bot, if it exists
*/
static BotInfo *Find(const Anope::string &nick, bool nick_only = false);
};
+200 -147
View File
@@ -1,110 +1,116 @@
/* Channel support
*
* (C) 2008-2010 Anope Team
* (C) 2008-2024 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
*
* $Id$
*
*/
struct UserData
{
UserData()
{
lastline = NULL;
last_use = last_start = time(NULL);
lines = times = 0;
}
#pragma once
virtual ~UserData() { delete [] lastline; }
#include "anope.h"
#include "extensible.h"
#include "modes.h"
#include "serialize.h"
/* Data validity */
time_t last_use;
typedef Anope::hash_map<Channel *> channel_map;
/* for flood kicker */
int16 lines;
time_t last_start;
extern CoreExport channel_map ChannelList;
/* for repeat kicker */
char *lastline;
int16 times;
};
struct UserContainer
/* A user container, there is one of these per user per channel. */
struct ChanUserContainer final
: public Extensible
{
User *user;
UserData ud;
Flags<ChannelModeName> *Status;
Channel *chan;
/* Status the user has in the channel */
ChannelStatus status;
UserContainer(User *u) : user(u) { }
virtual ~UserContainer() { }
ChanUserContainer(User *u, Channel *c) : user(u), chan(c) { }
};
typedef std::list<UserContainer *> CUserList;
enum ChannelFlags
class CoreExport Channel final
: public Base
, public Extensible
{
/* 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
};
static std::vector<Channel *> deleting;
class CoreExport Channel : public Extensible, public Flags<ChannelFlags>
{
private:
public:
typedef std::multimap<Anope::string, Anope::string> ModeList;
private:
/** A map of channel modes with their parameters set on this channel
*/
std::map<ChannelModeName, std::string> Params;
ModeList modes;
/* Modes set on the channel */
std::bitset<128> modes;
public:
/* Channel name */
Anope::string name;
/* Set if this channel is registered. ci->c == this. Contains information relevant to the registered channel */
Serialize::Reference<ChannelInfo> ci;
/* When the channel was created */
time_t creation_time;
/* If the channel has just been created in a netjoin */
bool syncing;
/* Is configured in the conf as a channel bots should be in */
bool botchannel;
public:
/** Default constructor
/* Users in the channel */
typedef std::map<User *, ChanUserContainer *> ChanUserList;
ChanUserList users;
/* Current topic of the channel */
Anope::string topic;
/* Who set the topic */
Anope::string topic_setter;
/* The timestamp associated with the topic. Not necessarily anywhere close to Anope::CurTime.
* This is the time the topic was *originally set*. When we restore the topic we want to change the TS back
* to this, but we can only do this on certain IRCds.
*/
time_t topic_ts;
/* The actual time the topic was set, probably close to Anope::CurTime */
time_t topic_time;
time_t server_modetime; /* Time of last server MODE */
time_t chanserv_modetime; /* Time of last check_modes() */
int16_t server_modecount; /* Number of server MODEs this second */
int16_t chanserv_modecount; /* Number of check_mode()'s this sec */
int16_t bouncy_modes; /* Did we fail to set modes here? */
private:
/** Constructor
* @param name The channel name
* @param ts The time the channel was created
*/
Channel(const std::string &name, time_t ts = time(NULL));
Channel(const Anope::string &nname, time_t ts = Anope::CurTime);
/** Default destructor
public:
/** Destructor
*/
~Channel();
Channel *next, *prev;
std::string name; /* Channel name */
ChannelInfo *ci; /* Corresponding ChannelInfo */
time_t creation_time; /* When channel was created */
char *topic;
std::string topic_setter;
time_t topic_time; /* When topic was set */
EList *bans;
EList *excepts;
EList *invites;
/* List of users in the channel */
CUserList users;
BanData *bd;
time_t server_modetime; /* Time of last server MODE */
time_t chanserv_modetime; /* Time of last check_modes() */
int16 server_modecount; /* Number of server MODEs this second */
int16 chanserv_modecount; /* Number of check_mode()'s this sec */
int16 bouncy_modes; /* Did we fail to set modes here? */
int16 topic_sync; /* Is the topic in sync? */
/** 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();
/** Check if a channels modes are correct.
*/
void CheckModes();
/** Check if this channel should be deleted
*/
bool CheckDelete();
/** Join a user internally to the channel
* @param u The user
* @param status The status to give the user, if any
* @return The UserContainer for the user
*/
void JoinUser(User *u);
ChanUserContainer *JoinUser(User *u, const ChannelStatus *status);
/** Remove a user internally from the channel
* @param u The user
@@ -115,7 +121,7 @@ class CoreExport Channel : public Extensible, public Flags<ChannelFlags>
* @param u The user
* @return A user container if found, else NULL
*/
UserContainer *FindUser(User *u);
ChanUserContainer *FindUser(User *u) const;
/** Check if a user has a status on a channel
* @param u The user
@@ -127,138 +133,185 @@ class CoreExport Channel : public Extensible, public Flags<ChannelFlags>
/** 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
* @param name The mode name, eg CMODE_OP, CMODE_VOICE
* @return true or false
*/
bool HasUserStatus(User *u, ChannelModeName Name);
/** See if the channel has any modes at all
* @return true or false
*/
inline const bool HasModes() const { return modes.count(); }
bool HasUserStatus(User *u, const Anope::string &name);
/** See if a channel has a mode
* @param Name The mode name
* @return true or false
* @param name The mode name
* @return The number of modes set
* @param param The optional mode param
*/
bool HasMode(ChannelModeName Name);
size_t HasMode(const Anope::string &name, const Anope::string &param = "");
/** Set a mode internally on a channel, this is not sent out to the IRCd
* @param setter The setter
* @param cm The mode
* @param param The param
* @param EnforceMLock true if mlocks should be enforced, false to override mlock
* @param enforce_mlock true if mlocks should be enforced, false to override mlock
*/
void SetModeInternal(ChannelMode *cm, const std::string &param = "", bool EnforceMLock = true);
void SetModeInternal(MessageSource &source, ChannelMode *cm, const Anope::string &param = "", bool enforce_mlock = true);
/** Remove a mode internally on a channel, this is not sent out to the IRCd
* @param setter The Setter
* @param cm The mode
* @param param The param
* @param EnforceMLock true if mlocks should be enforced, false to override mlock
* @param enforce_mlock true if mlocks should be enforced, false to override mlock
*/
void RemoveModeInternal(ChannelMode *cm, const std::string &param = "", bool EnforceMLock = true);
void RemoveModeInternal(MessageSource &source, ChannelMode *cm, const Anope::string &param = "", bool enforce_mlock = 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
* @param enforce_mlock true if mlocks should be enforced, false to override mlock
*/
void SetMode(BotInfo *bi, ChannelMode *cm, const std::string &param = "", bool EnforceMLock = true);
void SetMode(BotInfo *bi, ChannelMode *cm, const Anope::string &param = "", bool enforce_mlock = true);
/**
* Set a mode on a channel
* @param bi The client setting the modes
* @param Name The mode name
* @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
* @param enforce_mlock true if mlocks should be enforced, false to override mlock
*/
void SetMode(BotInfo *bi, ChannelModeName Name, const std::string &param = "", bool EnforceMLock = true);
/**
* Set a mode on a channel
* @param bi The client setting the modes
* @param Mode 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, char Mode, const std::string &param = "", bool EnforceMLock = true);
void SetMode(BotInfo *bi, const Anope::string &name, const Anope::string &param = "", bool enforce_mlock = 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
* @param enforce_mlock true if mlocks should be enforced, false to override mlock
*/
void RemoveMode(BotInfo *bi, ChannelMode *cm, const std::string &param = "", bool EnforceMLock = true);
void RemoveMode(BotInfo *bi, ChannelMode *cm, const Anope::string &param = "", bool enforce_mlock = true);
/**
* Remove a mode from a channel
* @param bi The client setting the modes
* @param Name The mode name
* @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
* @param enforce_mlock true if mlocks should be enforced, false to override mlock
*/
void RemoveMode(BotInfo *bi, ChannelModeName Name, const std::string &param = "", bool EnforceMLock = true);
/**
* Remove a mode from a channel
* @param bi The client setting the modes
* @param Mode 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, char Mode, const std::string &param = "", bool EnforceMLock = true);
void RemoveMode(BotInfo *bi, const Anope::string &name, const Anope::string &param = "", bool enforce_mlock = true);
/** Clear all the modes from the channel
* @param bi The client unsetting the modes
/** Get a modes parameter for the channel
* @param name The mode
* @param target a string to put the param into
* @return true if the parameter was fetched, false if on error (mode not set) etc.
*/
void ClearModes(BotInfo *bi = NULL);
bool GetParam(const Anope::string &name, Anope::string &target) const;
/** Clear all the bans from the channel
* @param bi The client unsetting the modes
*/
void ClearBans(BotInfo *bi = NULL);
/** Clear all the excepts from the channel
* @param bi The client unsetting the modes
*/
void ClearExcepts(BotInfo *bi = NULL);
/** Clear all the invites from the channel
* @param bi The client unsetting the modes
*/
void ClearInvites(BotInfo *bi = NULL);
/** Get a param from the channel
* @param Name The mode
* @param Target a string to put the param into
* @return true on success
*/
const bool GetParam(ChannelModeName Name, std::string &Target);
/** Check if a mode is set and has a param
* @param Name The mode
*/
const bool HasParam(ChannelModeName Name);
/** 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 enforce_mlock Should mlock be enforced on this mode change
* @param cmodes The modes to set
*/
void SetModes(BotInfo *bi, bool EnforceMLock, const char *cmodes, ...);
void SetModes(BotInfo *bi, bool enforce_mlock, const char *cmodes, ...) ATTR_FORMAT(4, 5);
void SetModes(BotInfo *bi, bool enforce_mlock, const Anope::string &cmodes);
/** Set a string of modes internally on a channel
* @param source The setter
* @param mode the modes
* @param enforce_mlock true to enforce mlock
*/
void SetModesInternal(MessageSource &source, const Anope::string &mode, time_t ts = 0, bool enforce_mlock = true);
/** Does the given user match the given list? (CMODE_BAN, CMODE_EXCEPT, etc, a list mode)
* @param u The user
* @param list The mode of the list to check (eg CMODE_BAN)
* @return true if the user matches the list
*/
bool MatchesList(User *u, const Anope::string &list);
/** 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 std::string &source, const std::string &nick, const std::string &reason);
void KickInternal(const MessageSource &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
* @return true if the kick was successful, false if a module blocked the kick
*/
bool Kick(BotInfo *bi, User *u, const char *reason = NULL, ...);
};
bool Kick(BotInfo *bi, User *u, const char *reason = NULL, ...) ATTR_FORMAT(4, 5);
bool Kick(BotInfo *bi, User *u, const Anope::string &reason);
/** Get all modes set on this channel, excluding status modes.
* @return a map of modes and their optional parameters.
*/
const ModeList &GetModes() const;
/** Get a list of modes on a channel
* @param name A mode name to get the list of
* @return a vector of the list mode entries
*/
std::vector<Anope::string> GetModeList(const Anope::string &name);
/** 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 requiring 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(User *u, 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);
/** Set the correct modes, or remove the ones granted without permission,
* for the specified user.
* @param user The user to give/remove modes to/from
* @param give_modes if true modes may be given to the user
*/
void SetCorrectModes(User *u, bool give_modes);
/** Unbans a user from this channel.
* @param u The user to unban
* @param mode The mode to unban
* @param full Whether or not to match using the user's real host and IP
* @return whether or not a ban was removed
*/
bool Unban(User *u, const Anope::string &mode, bool full = false);
/** 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);
/** Find which bot should send mode/topic/etc changes for this channel
* @return The bot
*/
BotInfo *WhoSends() const;
/** Finds a channel
* @param name The channel to find
* @return The channel, if found
*/
static Channel *Find(const Anope::string &name);
/** Finds or creates a channel
* @param name The channel name
* @param created Set to true if the channel was just created
* @param ts The time the channel was created
*/
static Channel *FindOrCreate(const Anope::string &name, bool &created, time_t ts = Anope::CurTime);
void QueueForDeletion();
static void DeleteChannels();
};
+172 -14
View File
@@ -1,28 +1,186 @@
/* Declarations for command data.
*
* (C) 2003-2010 Anope Team
* (C) 2003-2024 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for furhter details.
* Please read COPYING and README for further details.
*
* Based on the original code of Epona by Lara.
* Based on the original code of Services by Andy Church.
*
* $Id$
*
*/
#include "modules.h"
#pragma once
/*************************************************************************/
#include "service.h"
#include "anope.h"
#include "channels.h"
/* Routines for looking up commands. Command lists are arrays that must be
* terminated with a NULL name.
struct CommandGroup final
{
Anope::string name, description;
};
/* Used in BotInfo::commands */
struct CommandInfo final
{
typedef Anope::map<CommandInfo> map;
/* Service name of the command */
Anope::string name;
/* Permission required to execute the command */
Anope::string permission;
/* Group this command is in */
Anope::string group;
/* whether or not to hide this command in help output */
bool hide = false;
/* Only used with fantasy */
bool prepend_channel = false;
};
/* Where the replies from commands go to. User inherits from this and is the normal
* source of a CommandReply
*/
struct CoreExport CommandReply
{
virtual ~CommandReply() = default;
virtual void SendMessage(BotInfo *source, const Anope::string &msg) = 0;
virtual void SendMessage(CommandSource &source, const Anope::string &msg);
};
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(const std::string &service, User *u, CommandHash *cmdTable[], const char *cmd);
//extern MDE void do_help_limited(char *service, User * u, Command * c);
/* The source for a command */
class CoreExport CommandSource final
{
/* The nick executing the command */
Anope::string nick;
/* User executing the command, may be NULL */
Reference<User> u;
public:
/* The account executing the command */
Reference<NickCore> nc;
/* for web clients */
Anope::string ip;
/* Where the reply should go */
CommandReply *reply;
/* Channel the command was executed on (fantasy) */
Reference<Channel> c = nullptr;
/* The service this command is on */
Reference<BotInfo> service;
/* The actual name of the command being executed */
Anope::string command;
/* The permission of the command being executed */
Anope::string permission;
/* The unique identifier of the executing message. */
Anope::string msgid;
/*************************************************************************/
CommandSource(const Anope::string &n, User *user, NickCore *core, CommandReply *reply, BotInfo *bi, const Anope::string &m = "");
const Anope::string &GetNick() const;
User *GetUser();
NickCore *GetAccount();
AccessGroup AccessFor(ChannelInfo *ci);
bool IsFounder(ChannelInfo *ci);
void Reply(const char *message, ...) ATTR_FORMAT(2, 3);
void Reply(const Anope::string &message);
bool HasCommand(const Anope::string &cmd);
bool HasPriv(const Anope::string &cmd);
bool IsServicesOper();
bool IsOper();
};
/** Every services command is a class, inheriting from Command.
*/
class CoreExport Command
: public Service
{
Anope::string desc;
std::vector<Anope::string> syntax;
/* Allow unregistered users to use this command */
bool allow_unregistered;
/* Command requires that a user is executing it */
bool require_user;
public:
/* Maximum parameters accepted by this command */
size_t max_params;
/* Minimum parameters required to use this command */
size_t min_params;
/* Module which owns us */
Module *module;
protected:
/** Create a new command.
* @param owner The owner of the command
* @param sname The command name
* @param min_params The minimum number of parameters the parser will require to execute this command
* @param max_params The maximum number of parameters the parser will create, after max_params, all will be combined into the last argument.
* NOTE: If max_params is not set (default), there is no limit to the max number of params.
*/
Command(Module *owner, const Anope::string &sname, size_t min_params, size_t max_params = 0);
public:
virtual ~Command() = default;
protected:
void SetDesc(const Anope::string &d);
void ClearSyntax();
void SetSyntax(const Anope::string &s);
void SendSyntax(CommandSource &);
void AllowUnregistered(bool b);
void RequireUser(bool b);
public:
bool AllowUnregistered() const;
bool RequireUser() const;
/** Get the command description
* @param source The source wanting the command description
* @return The commands description
*/
virtual const Anope::string GetDesc(CommandSource &source) const;
/** Execute this command.
* @param source The source
* @param params Command parameters
*/
virtual void Execute(CommandSource &source, const std::vector<Anope::string> &params) = 0;
/** Called when HELP is requested for the client this command is on.
* @param source The source
*/
virtual void OnServHelp(CommandSource &source);
/** Requested when the user is requesting help on this command. Help on this command should be sent to the user.
* @param source The source
* @param subcommand The subcommand the user is requesting help on, or an empty string. (e.g. /ns help set foo bar lol gives a subcommand of "FOO BAR LOL")
* @return true if help was provided to the user, false otherwise.
*/
virtual bool OnHelp(CommandSource &source, const Anope::string &subcommand);
/** Requested when the user provides bad syntax to this command (not enough params, etc).
* @param source The source
* @param subcommand The subcommand the user tried to use
*/
virtual void OnSyntaxError(CommandSource &source, const Anope::string &subcommand);
/** Runs a command
* @param source The source of the command
* @param message The full message to run, the command is at the beginning of the message
*/
static void Run(CommandSource &source, const Anope::string &message);
void Run(CommandSource &source, const Anope::string &, const CommandInfo &, std::vector<Anope::string> &params);
/** Looks up a command name from the service name.
* Note that if the same command exists multiple places this will return the first one encountered
* @param command_service The command service to lookup, eg, nickserv/register
* @param bot If found, is set to the bot the command is on, eg NickServ
* @param name If found, is set to the command name, eg REGISTER
* @return true if the given command service exists
*/
static bool FindCommandFromService(const Anope::string &command_service, BotInfo *&bi, Anope::string &name);
};
+170 -24
View File
@@ -1,40 +1,186 @@
/* Services configuration.
/*
*
* (C) 2003-2010 Anope Team
* (C) 2003-2024 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for furhter details.
* Please read COPYING and README for further details.
*
* Based on the original code of Epona by Lara.
* Based on the original code of Services by Andy Church.
*
* $Id$
*
* Based on the original code of Services by Andy Church.
*/
#ifndef CONFIG_H
#define CONFIG_H
#pragma once
/* Note that most of the options which used to be here have been moved to
* services.conf. */
#include "account.h"
#include "regchannel.h"
#include "users.h"
#include "opertype.h"
#include <stack>
/*************************************************************************/
namespace Configuration
{
namespace Internal
{
class CoreExport Block
{
friend struct Configuration::Conf;
/******* General configuration *******/
public:
typedef Anope::map<Anope::string> item_map;
typedef Anope::multimap<Block> block_map;
/* Name of log file (in Services directory) */
#define LOG_FILENAME "services.log"
private:
Anope::string name;
item_map items;
block_map blocks;
int linenum;
/******************* END OF USER-CONFIGURABLE SECTION ********************/
/* Represents a missing tag. */
static Block EmptyBlock;
/* Size of input buffer (note: this is different from BUFSIZ)
* This must be big enough to hold at least one full IRC message, or messy
* things will happen. */
#define BUFSIZE 1024
public:
Block(const Anope::string &);
const Anope::string &GetName() const;
int CountBlock(const Anope::string &name) const;
const Block *GetBlock(const Anope::string &name, int num = 0) const;
Block *GetMutableBlock(const Anope::string &name, int num = 0);
/* Maximum amount of data from/to the network to buffer (bytes). */
#define NET_BUFSIZE 65536
template<typename T> T Get(const Anope::string &tag, const Anope::string &def = "") const
{
const Anope::string &value = this->Get<const Anope::string>(tag, def);
if (!value.empty())
try
{
return convertTo<T>(value);
}
catch (const ConvertException &) { }
return T();
}
/**************************************************************************/
bool Set(const Anope::string &tag, const Anope::string &value);
const item_map &GetItems() const;
};
#endif /* CONFIG_H */
template<> CoreExport const Anope::string Block::Get(const Anope::string &tag, const Anope::string &def) const;
template<> CoreExport time_t Block::Get(const Anope::string &tag, const Anope::string &def) const;
template<> CoreExport bool Block::Get(const Anope::string &tag, const Anope::string &def) const;
} // namespace Internal
typedef const Internal::Block Block;
typedef Internal::Block MutableBlock;
/** Represents a configuration file
*/
class File final
{
Anope::string name;
bool executable;
FILE *fp = nullptr;
public:
File(const Anope::string &, bool);
~File();
const Anope::string &GetName() const;
Anope::string GetPath() const;
bool IsOpen() const;
bool Open();
void Close();
bool End() const;
Anope::string Read();
};
struct Uplink;
struct CoreExport Conf final
: Block
{
/* options:readtimeout */
time_t ReadTimeout;
/* options:useprivmsg */
bool UsePrivmsg;
/* If we should default to privmsging clients */
bool DefPrivmsg;
/* Default language */
Anope::string DefLanguage;
/* options:timeoutcheck */
time_t TimeoutCheck;
/* options:usestrictprivmsg */
bool UseStrictPrivmsg;
/* networkinfo:nickchars */
Anope::string NickChars;
/* either "/msg " or "/" */
Anope::string StrictPrivmsg;
/* List of uplink servers to try and connect to */
std::vector<Uplink> Uplinks;
/* A vector of our logfile options */
std::vector<LogInfo> LogInfos;
/* Array of ulined servers */
std::vector<Anope::string> Ulines;
/* List of available opertypes */
std::vector<OperType *> MyOperTypes;
/* List of pairs of opers and their opertype from the config */
std::vector<Oper *> Opers;
/* Map of fantasy commands */
CommandInfo::map Fantasy;
/* Command groups */
std::vector<CommandGroup> CommandGroups;
/* List of modules to autoload */
std::vector<Anope::string> ModulesAutoLoad;
/* module configuration blocks */
std::map<Anope::string, Block *> modules;
Anope::map<Anope::string> bots;
Conf();
~Conf();
void LoadConf(File &file);
void Post(Conf *old);
Block *GetModule(Module *);
Block *GetModule(const Anope::string &name);
BotInfo *GetClient(const Anope::string &name);
const Block *GetCommand(CommandSource &);
};
struct Uplink final
{
Anope::string host;
unsigned port;
Anope::string password;
int protocol;
Uplink(const Anope::string &_host, int _port, const Anope::string &_password, int _protocol) : host(_host), port(_port), password(_password), protocol(_protocol) { }
inline bool operator==(const Uplink &other) const { return host == other.host && port == other.port && password == other.password && protocol == other.protocol; }
inline bool operator!=(const Uplink &other) const { return !(*this == other); }
};
}
/** 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 CoreExport ConfigException final
: public CoreException
{
public:
/** Default constructor, just uses the error message 'Config threw an exception'.
*/
ConfigException() : CoreException("Config threw an exception", "Config Parser") { }
/** This constructor can be used to specify an error message before throwing.
*/
ConfigException(const Anope::string &message) : CoreException(message, "Config Parser") { }
/** This destructor solves world hunger, cancels the world debt, and causes the world to end.
* Actually no, it does nothing. Never mind.
* @throws Nothing!
*/
virtual ~ConfigException() noexcept = default;
};
extern Configuration::File ServicesConf;
extern CoreExport Configuration::Conf *Config;
-903
View File
@@ -1,903 +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 &);
/** Below here is a list of variables which contain the config files values
*/
/* IRCd module in use */
char *IRCDModule;
/* Host to connect to **/
char *LocalHost;
/* List of uplink servers to try and connect to */
std::list<Uplink *> Uplinks;
/* Our server name */
char *ServerName;
/* Our servers description */
char *ServerDesc;
/* The username/ident of services clients */
char *ServiceUser;
/* The hostname if services clients */
char *ServiceHost;
/* Help channel, ops here get usermode +h **/
char *HelpChannel;
/* Log channel */
char *LogChannel;
/* Name of the network were on */
char *NetworkName;
/* The max legnth of nicks */
unsigned NickLen;
/* Max length of idents */
unsigned UserLen;
/* Max lenght of hostnames */
unsigned HostLen;
/* Max length of passwords */
unsigned PassLen;
/* NickServ Name */
char *s_NickServ;
/* ChanServ Name */
char *s_ChanServ;
/* MemoServ Name */
char *s_MemoServ;
/* BotServ Name */
char *s_BotServ;
/* OperServ name */
char *s_OperServ;
/* Global name */
char *s_GlobalNoticer;
/* NickServs realname */
char *desc_NickServ;
/* ChanServ realname */
char *desc_ChanServ;
/* MemoServ relname */
char *desc_MemoServ;
/* BotServ realname */
char *desc_BotServ;
/* OperServ realname */
char *desc_OperServ;
/* Global realname */
char *desc_GlobalNoticer;
/* HostServ Name */
char *s_HostServ;
/* HostServ realname */
char *desc_HostServ;
/* Filename for the PID file */
char *PIDFilename;
/* MOTD filename */
char *MOTDFilename;
/* True if its ok to not be able to save backs */
bool NoBackupOkay;
/* Do password checking when new people register */
bool StrictPasswords;
/* How many times you're allowed to give a bad password before being killed */
unsigned BadPassLimit;
/* How long before bad passwords are forgotten */
time_t BadPassTimeout;
/* Delay between automatic database updates */
time_t UpdateTimeout;
/* Delay between checks for expired nicks and channels */
time_t ExpireTimeout;
/* How long to wait for something from the uplink, this is passed to select() */
time_t ReadTimeout;
/* How often to send program errors */
time_t WarningTimeout;
/* How long to process things such as timers to see if there is anything to calll */
time_t TimeoutCheck;
/* Num of days logfiles are kept */
int KeepLogs;
/* Number of days backups are kept */
int KeepBackups;
/* Forbidding requires a reason */
bool ForceForbidReason;
/* Services should use privmsgs instead of notices */
bool UsePrivmsg;
/* Services only respond to full PRIVMSG client@services.server.name messages */
bool UseStrictPrivMsg;
/* Dump a core file if we crash */
bool DumpCore;
/* Log users connecting/existing/changing nicks */
bool LogUsers;
/* Number of seconds between consecutive uses of the REGISTER command
* Not to be confused with NSRegDelay */
unsigned NickRegDelay;
/* Max number if news items allowed in the list */
unsigned NewsCount;
/* Default mlock modes */
std::string MLock;
/* Default botmodes on channels, defaults to ao */
std::string BotModes;
/* How many times to try and reconnect to the uplink before giving up */
unsigned MaxRetries;
/* How long to wait between connection attempts */
int RetryWait;
/* Services can use email */
bool UseMail;
/* Path to the sendmail executable */
char *SendMailPath;
/* Address to send from */
char *SendFrom;
/* Only opers can have services send mail */
bool RestrictMail;
/* Delay between sending mail */
time_t MailDelay;
/* Don't quote the To: address */
bool DontQuoteAddresses;
/* Prefix of guest nicks when a user gets forced off of a nick */
char *NSGuestNickPrefix;
/* Allow users to set kill immed on */
bool NSAllowKillImmed;
/* Don't allow nicks to use /ns group to regroup nicks */
bool NSNoGroupChange;
/* Default flags for newly registered nicks */
Flags<NickCoreFlag> NSDefFlags;
/* Default language used by services */
unsigned NSDefLanguage;
/* Users must be connected this long before they can register
* Not to be confused with NickRegDelay */
time_t NSRegDelay;
/* Time before the registering mail will be resent */
time_t NSResendDelay;
/* How long before nicks expir */
time_t NSExpire;
/* Time before NickRequests expire */
time_t NSRExpire;
/* Force email when registering */
bool NSForceEmail;
/* Max number of nicks in a group */
int NSMaxAliases;
/* Max number of allowed strings on the access list */
unsigned NSAccessMax;
/* Enforcer client user name */
char *NSEnforcerUser;
/* Enforcer client hostname */
char *NSEnforcerHost;
/* How long before recovered nicks are released */
time_t NSReleaseTimeout;
/* /nickserv list is oper only */
bool NSListOpersOnly;
/* Max number of entries that can be returned from the list command */
unsigned NSListMax;
/* Only allow usermode +a etc on real services admins */
bool NSSecureAdmins;
/* Services opers must be /operd on the ircd aswell */
bool NSStrictPrivileges;
/* Use email to verify new users registering */
bool NSEmailReg;
/* Set the proper channel modes on users when they identify */
bool NSModeOnID;
/* Add the users hostnask their access list when they register */
bool NSAddAccessOnReg;
/* Default flags for newly registered channels */
Flags<ChannelInfoFlag> CSDefFlags;
/* Max number of channels a user can own */
unsigned CSMaxReg;
/* Time before a channel expires */
time_t CSExpire;
/* Default ban type to use for channels */
int CSDefBantype;
/* Max number of entries allowed on channel access lists */
unsigned CSAccessMax;
/* Max number of entries allowed on autokick lists */
unsigned CSAutokickMax;
/* Default autokick reason */
char *CSAutokickReason;
/* Time ChanServ should stay in the channel to hold it to keep users from getting in */
time_t CSInhabit;
/* ChanServ's LIST command is oper only */
bool CSListOpersOnly;
/* Max number of entries allowed to be returned from the LIST command */
unsigned CSListMax;
/* true to make ChanServ oper only */
bool CSOpersOnly;
/* Max number of memos allowed */
unsigned MSMaxMemos;
/* Time you must wait between sending memos */
time_t MSSendDelay;
/* Notify all of the aliases of the core the memo was sent to */
bool MSNotifyAll;
/* Who can use memos reciepts */
unsigned MSMemoReceipt;
/* Defai;t BotServ flags */
Flags<BotServFlag> BSDefFlags;
/* How long before botserv forgets a user. This is used for flood kickers etc */
time_t BSKeepData;
/* Min number of users to have in the channel before the service bot joins */
unsigned BSMinUsers;
/* Max number of words allowed on the badwordslist */
unsigned BSBadWordsMax;
/* BotServ bot only joins if it would normally allowed to, abides by bans etc */
bool BSSmartJoin;
/* Dont tell users what badword they used */
bool BSGentleBWReason;
/* Case sensitive badwords matching */
bool BSCaseSensitive;
/* Char to use for the fantasy char, eg ! */
char *BSFantasyCharacter;
/* Only show /stats o to opers */
bool HideStatsO;
/* Send out a global when services shut down or restart */
bool GlobalOnCycle;
/* Don't include the opers name in globals */
bool AnonymousGlobal;
/* Dont allow users to register nicks with oper names in them */
bool RestrictOperNicks;
/* Message to send when shutting down */
char *GlobalOnCycleMessage;
/* Message to send when starting up */
char *GlobalOnCycleUP;
/* Super admin is allowed */
bool SuperAdmin;
/* Log things said through ACT/SAY */
bool LogBot;
/* Log when new user max is reached */
bool LogMaxUsers;
/* Default expiry time for akills */
time_t AutokillExpiry;
/* Default expiry time for chan kills */
time_t ChankillExpiry;
/* Default expiry time for SGLine Expire */
time_t SGLineExpiry;
/* Default expiry time for SQLines */
time_t SQLineExpiry;
/* Default expiry time for SZLine */
time_t SZLineExpiry;
/* Actually akill the user when the akill is added */
bool AkillOnAdd;
/* Kill users on SGline */
bool KillonSGline;
/* Kill users on SQline */
bool KillonSQline;
/* Send a WALLOPS/GLOBOPS when a user opers */
bool WallOper;
/* Send a WALLOPS/GLOBOPS when a nonoper tries to use OperServ */
bool WallBadOS;
/* Send a WALLOPS/GLOBOPS when someone uses the GLOBAL command */
bool WallOSGlobal;
/* Send a WALLOPS/GLOBOPS when someone uses the MODE command */
bool WallOSMode;
/* Send a WALLOPS/GLOBOPS when someone uses the CLEARMODES command */
bool WallOSClearmodes;
/* Send a WALLOPS/GLOBOPS when someone uses the KICK command */
bool WallOSKick;
/* Send a WALLOPS/GLOBOPS when someone uses the AKILL command */
bool WallOSAkill;
/* Send a WALLOPS/GLOBOPS when someone uses the SGLINE command */
bool WallOSSGLine;
/* Send a WALLOPS/GLOBOPS when someone uses the SQLINE command */
bool WallOSSQLine;
/* Send a WALLOPS/GLOBOPS when someone uses the SZLINE command */
bool WallOSSZLine;
/* Send a WALLOPS/GLOBOPS when someone uses the NOOP command */
bool WallOSNoOp;
/* Send a WALLOPS/GLOBOPS when when someone uses the JUPE command */
bool WallOSJupe;
/* Send a WALLOPS/GLOBOPS when an akill expires */
bool WallAkillExpire;
/* Send a WALLOPS/GLOBOPS when SGLines expire */
bool WallSGLineExpire;
/* Send a WALLOPS/GLOBOPS when SQLines expire */
bool WallSQLineExpire;
/* Send a WALLOPS/GLOBOPS when SZLines expire */
bool WallSZLineExpire;
/* Send a WALLOPS/GLOBOPS when exceptions expire */
bool WallExceptionExpire;
/* Send a WALLOPS/GLOBOPS when DROP is used */
bool WallDrop;
/* Send a WALLOPS/GLOBOPS when FORBID is used */
bool WallForbid;
/* Send a WALLOPS/GLOBOPS when GETPASS is used */
bool WallGetpass;
/* Send a WALLOPS/GLOBOPS when SETPASS is used */
bool WallSetpass;
/* Add the akillers nick to the akill reason */
bool AddAkiller;
/* Limit sessions */
bool LimitSessions;
/* The default session limit */
unsigned DefSessionLimit;
/* How long before exceptions expire */
time_t ExceptionExpiry;
/* How many times to kill before adding an KILL */
int MaxSessionKill;
/* Max limit that can be used for exceptions */
unsigned MaxSessionLimit;
/* How long session akills should last */
time_t SessionAutoKillExpiry;
/* Reason to use for session kills */
char *SessionLimitExceeded;
/* Optional second reason */
char *SessionLimitDetailsLoc;
/* OperServ requires you to be an operator */
bool OSOpersOnly;
/* List of modules to autoload */
std::list<std::string> ModulesAutoLoad;
/* Encryption modules */
std::list<std::string> EncModuleList;
/* Database modules */
std::list<std::string> DBModuleList;
/* HostServ Core Modules */
std::list<std::string> HostServCoreModules;
/* MemoServ Core Modules */
std::list<std::string> MemoServCoreModules;
/* BotServ Core Modules */
std::list<std::string> BotServCoreModules;
/* OperServ Core Modules */
std::list<std::string> OperServCoreModules;
/* NickServ Core Modules */
std::list<std::string> NickServCoreModules;
/* ChanServ Core Modules */
std::list<std::string> ChanServCoreModules;
/* Default defcon level */
int DefConLevel;
/* Timeout before defcon is reset */
time_t DefConTimeOut;
/* Session limiit to use when using defcon */
int DefConSessionLimit;
/* How long to add akills for defcon */
time_t DefConAKILL;
/* Chan modes for defcon */
char *DefConChanModes;
/* Should we global on defcon */
bool GlobalOnDefcon;
/* Should we send DefconMessage aswell? */
bool GlobalOnDefconMore;
/* Message to send when defcon is off */
char *DefConOffMessage;
/* Message to send when defcon is on*/
char *DefconMessage;
/* Reason to akill clients for defcon */
char *DefConAkillReason;
/* User keys to use for generating random hashes for pass codes etc */
long unsigned int UserKey1;
long unsigned int UserKey2;
long unsigned int UserKey3;
/* Numeric */
char *Numeric;
/* Array of ulined servers */
char **Ulines;
/* Number of ulines */
int NumUlines;
/* List of available opertypes */
std::list<OperType *> MyOperTypes;
/* List of pairs of opers and their opertype from the config */
std::list<std::pair<std::string, std::string> > Opers;
};
/** This class can be used on its own to represent an exception, or derived to represent a module-specific exception.
* When a module whishes to abort, e.g. within a constructor, it should throw an exception using ModuleException or
* a class derived from ModuleException. If a module throws an exception during its constructor, the module will not
* be loaded. If this happens, the error message returned by ModuleException::GetReason will be displayed to the user
* attempting to load the module, or dumped to the console if the ircd is currently loading for the first time.
*/
class ConfigException : public CoreException
{
public:
/** Default constructor, just uses the error mesage 'Config threw an exception'.
*/
ConfigException() : CoreException("Config threw an exception", "Config Parser") {}
/** This constructor can be used to specify an error message before throwing.
*/
ConfigException(const 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
+47 -32
View File
@@ -1,40 +1,55 @@
/* Set default values for any constants that should be in include files but
/*
*
* (C) 2003-2010 Anope Team
* (C) 2003-2024 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for furhter details.
* Please read COPYING and README for further details.
*
* Based on the original code of Epona by Lara.
* Based on the original code of Services by Andy Church.
*
*
* $Id$
*
* Based on the original code of Services by Andy Church.
*/
/*************************************************************************/
#pragma once
#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
/*************************************************************************/
class AccessGroup;
class AutoKick;
class BotInfo;
class CallBack;
class ChanAccess;
class Channel;
class ChannelInfo;
class ChannelStatus;
struct ChanUserContainer;
class ClientSocket;
class Command;
class CommandSource;
namespace Configuration { struct Conf; }
class ConnectionSocket;
namespace DNS { struct Query; }
class Entry;
class IdentifyRequest;
class InfoFormatter;
class IRCDProto;
class ListenSocket;
class Log;
class Memo;
class MessageSource;
class Module;
class NickAlias;
class NickCore;
class OperType;
class ReferenceBase;
class Regex;
class Serializable;
class Server;
class Socket;
class Thread;
class User;
class XLine;
class XLineManager;
struct BadWord;
struct Exception;
struct MemoInfo;
struct ModeLock;
struct Oper;
namespace SASL { struct Message; }
+245 -211
View File
@@ -1,232 +1,266 @@
/*
*
* Copyright (C) 2008-2010 Anope Team <team@anope.org>
* (C) 2003-2024 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
*
*
* $Id$
*
*/
/** Dummy base class we use to cast everything to/from
*/
class ExtensibleItemBase
#pragma once
#include "anope.h"
#include "serialize.h"
#include "service.h"
#include "logger.h"
class Extensible;
class CoreExport ExtensibleBase
: public Service
{
public:
ExtensibleItemBase() { }
virtual ~ExtensibleItemBase() { }
};
protected:
std::map<Extensible *, void *> items;
/** Class used to represent an extensible item that doesn't hold a pointer
*/
template<typename T> class ExtensibleItemRegular : public ExtensibleItemBase
{
protected:
T Item;
ExtensibleBase(Module *m, const Anope::string &n);
~ExtensibleBase();
public:
ExtensibleItemRegular(T item) : Item(item) { }
virtual ~ExtensibleItemRegular() { }
T GetItem() const { return Item; }
};
public:
virtual void Unset(Extensible *obj) = 0;
/** 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; }
/* called when an object we are keep track of is serializing */
virtual void ExtensibleSerialize(const Extensible *, const Serializable *, Serialize::Data &) const { }
virtual void ExtensibleUnserialize(Extensible *, Serializable *, Serialize::Data &) { }
};
class CoreExport Extensible
{
private:
std::map<std::string, ExtensibleItemBase *> Extension_Items;
public:
std::set<ExtensibleBase *> extension_items;
public:
/** Default constructor, does nothing
*/
Extensible() { }
virtual ~Extensible();
/** Default destructor, deletes all of the extensible items in this object
* then clears the map
*/
virtual ~Extensible()
{
for (std::map<std::string, ExtensibleItemBase *>::iterator it = Extension_Items.begin(); it != Extension_Items.end(); ++it)
{
delete it->second;
}
Extension_Items.clear();
}
void UnsetExtensibles();
/** 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
*/
bool Extend(const std::string &key, ExtensibleItemBase *p)
{
bool Ret = this->Extension_Items.insert(std::make_pair(key, p)).second;
if (!Ret)
delete p;
return Ret;
}
template<typename T> T *GetExt(const Anope::string &name) const;
bool HasExt(const Anope::string &name) const;
/** 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
*/
bool Extend(const std::string &key)
{
/* This will only add an item if it doesnt already exist,
* the return value is a std::pair of an iterator to the
* element, and a bool saying if it was actually inserted.
*/
return 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 std::string &key)
{
std::map<std::string, ExtensibleItemBase *>::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 std::string &key, T &p)
{
std::map<std::string, ExtensibleItemBase *>::iterator it = this->Extension_Items.find(key);
if (it != this->Extension_Items.end())
{
p = dynamic_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 std::string &key, T *&p)
{
std::map<std::string, ExtensibleItemBase *>::iterator it = this->Extension_Items.find(key);
if (it != this->Extension_Items.end())
{
p = dynamic_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 std::string &key, T *&p)
{
std::map<std::string, ExtensibleItemBase *>::iterator it = this->Extension_Items.find(key);
if (it != this->Extension_Items.end())
{
p = dynamic_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 std::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<std::string> &list)
{
for (std::map<std::string, ExtensibleItemBase *>::iterator i = Extension_Items.begin(); i != Extension_Items.end(); ++i)
{
list.push_back(i->first);
}
}
template<typename T> T *Extend(const Anope::string &name, const T &what);
template<typename T> T *Extend(const Anope::string &name);
template<typename T> T *Require(const Anope::string &name);
template<typename T> void Shrink(const Anope::string &name);
static void ExtensibleSerialize(const Extensible *, const Serializable *, Serialize::Data &data);
static void ExtensibleUnserialize(Extensible *, Serializable *, Serialize::Data &data);
};
template<typename T>
class BaseExtensibleItem
: public ExtensibleBase
{
protected:
virtual T *Create(Extensible *) = 0;
public:
BaseExtensibleItem(Module *m, const Anope::string &n) : ExtensibleBase(m, n) { }
~BaseExtensibleItem()
{
while (!items.empty())
{
std::map<Extensible *, void *>::iterator it = items.begin();
Extensible *obj = it->first;
T *value = static_cast<T *>(it->second);
obj->extension_items.erase(this);
items.erase(it);
delete value;
}
}
T *Set(Extensible *obj, const T &value)
{
T *t = Set(obj);
if (t)
*t = value;
return t;
}
T *Set(Extensible *obj)
{
T *t = Create(obj);
Unset(obj);
items[obj] = t;
obj->extension_items.insert(this);
return t;
}
void Unset(Extensible *obj) override
{
T *value = Get(obj);
items.erase(obj);
obj->extension_items.erase(this);
delete value;
}
T *Get(const Extensible *obj) const
{
std::map<Extensible *, void *>::const_iterator it = items.find(const_cast<Extensible *>(obj));
if (it != items.end())
return static_cast<T *>(it->second);
return NULL;
}
bool HasExt(const Extensible *obj) const
{
return items.find(const_cast<Extensible *>(obj)) != items.end();
}
T *Require(Extensible *obj)
{
T *t = Get(obj);
if (t)
return t;
return Set(obj);
}
};
template<typename T>
class ExtensibleItem
: public BaseExtensibleItem<T>
{
protected:
T *Create(Extensible *obj) override
{
return new T(obj);
}
public:
ExtensibleItem(Module *m, const Anope::string &n) : BaseExtensibleItem<T>(m, n) { }
};
template<typename T>
class PrimitiveExtensibleItem
: public BaseExtensibleItem<T>
{
protected:
T *Create(Extensible *obj) override
{
return new T();
}
public:
PrimitiveExtensibleItem(Module *m, const Anope::string &n) : BaseExtensibleItem<T>(m, n) { }
};
template<>
class PrimitiveExtensibleItem<bool> : public BaseExtensibleItem<bool>
{
protected:
bool *Create(Extensible *) override
{
return NULL;
}
public:
PrimitiveExtensibleItem(Module *m, const Anope::string &n) : BaseExtensibleItem<bool>(m, n) { }
};
template<typename T>
class SerializableExtensibleItem
: public PrimitiveExtensibleItem<T>
{
public:
SerializableExtensibleItem(Module *m, const Anope::string &n) : PrimitiveExtensibleItem<T>(m, n) { }
void ExtensibleSerialize(const Extensible *e, const Serializable *s, Serialize::Data &data) const override
{
T *t = this->Get(e);
data[this->name] << *t;
}
void ExtensibleUnserialize(Extensible *e, Serializable *s, Serialize::Data &data) override
{
T t;
if (data[this->name] >> t)
this->Set(e, t);
else
this->Unset(e);
}
};
template<>
class SerializableExtensibleItem<bool> : public PrimitiveExtensibleItem<bool>
{
public:
SerializableExtensibleItem(Module *m, const Anope::string &n) : PrimitiveExtensibleItem<bool>(m, n) { }
void ExtensibleSerialize(const Extensible *e, const Serializable *s, Serialize::Data &data) const override
{
data[this->name] << true;
}
void ExtensibleUnserialize(Extensible *e, Serializable *s, Serialize::Data &data) override
{
bool b = false;
data[this->name] >> b;
if (b)
this->Set(e);
else
this->Unset(e);
}
};
template<typename T>
struct ExtensibleRef final
: ServiceReference<BaseExtensibleItem<T> >
{
ExtensibleRef(const Anope::string &n) : ServiceReference<BaseExtensibleItem<T> >("Extensible", n) { }
};
template<typename T>
T *Extensible::GetExt(const Anope::string &name) const
{
ExtensibleRef<T> ref(name);
if (ref)
return ref->Get(this);
Log(LOG_DEBUG) << "GetExt for nonexistent type " << name << " on " << static_cast<const void *>(this);
return NULL;
}
template<typename T>
T *Extensible::Extend(const Anope::string &name, const T &what)
{
T *t = Extend<T>(name);
if (t)
*t = what;
return t;
}
template<typename T>
T *Extensible::Extend(const Anope::string &name)
{
ExtensibleRef<T> ref(name);
if (ref)
return ref->Set(this);
Log(LOG_DEBUG) << "Extend for nonexistent type " << name << " on " << static_cast<void *>(this);
return NULL;
}
template<typename T>
T *Extensible::Require(const Anope::string &name)
{
if (HasExt(name))
return GetExt<T>(name);
else
return Extend<T>(name);
}
template<typename T>
void Extensible::Shrink(const Anope::string &name)
{
ExtensibleRef<T> ref(name);
if (ref)
ref->Unset(this);
else
Log(LOG_DEBUG) << "Shrink for nonexistent type " << name << " on " << static_cast<void *>(this);
}
-591
View File
@@ -1,591 +0,0 @@
/* Prototypes and external variable declarations.
*
* (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$
*
*/
#ifndef EXTERN_H
#define EXTERN_H
#define E extern CoreExport
#define EI extern DllExport
#include "slist.h"
#include "hashcomp.h"
E void ModuleRunTimeDirCleanUp();
E char *uplink;
/* IRC Variables */
E IRCDVar *ircd;
E int UseTSMODE; /* hack to get around bahamut clones that don't send TSMODE */
E IRCDProto *ircdproto;
/**** actions.c ****/
E void kill_user(const std::string &source, const std::string &user, const std::string &reason);
E bool bad_password(User *u);
E void sqline(const std::string &mask, const std::string &reason);
E void common_unban(ChannelInfo *ci, const std::string &nick);
/**** botserv.c ****/
E BotInfo *botlists[256];
E int nbots;
E void get_botserv_stats(long *nrec, long *memuse);
E void bs_init();
E void botserv(User *u, char *buf);
E void botmsgs(User *u, BotInfo *bi, char *buf);
E void botchanmsgs(User *u, ChannelInfo *ci, char *buf);
E BotInfo *findbot(const std::string &nick);
/** Finds a pseudoclient, given a UID. Useful for TS6 protocol modules.
* @param uid The UID to search for
* @return The pseudoclient structure, or NULL if one could not be found
*/
E void bot_join(ChannelInfo *ci);
E char *normalizeBuffer(const char *);
E void insert_bot(BotInfo * bi);
E void bot_raw_ban(User * requester, ChannelInfo * ci, char *nick, const char *reason);
E void bot_raw_kick(User * requester, ChannelInfo * ci, char *nick, const char *reason);
E void bot_raw_mode(User * requester, ChannelInfo * ci, const char *mode, char *nick);
/**** channels.c ****/
E Channel *chanlist[1024];
E void get_channel_stats(long *nrec, long *memuse);
E Channel *findchan(const char *chan);
E Channel *firstchan();
E Channel *nextchan();
E void ChanSetInternalModes(Channel *c, int ac, const char **av);
E User *nc_on_chan(Channel * c, NickCore * nc);
E char *chan_get_modes(Channel * chan, int complete, int plus);
E int get_access_level(ChannelInfo * ci, NickAlias * na);
E const char *get_xop_level(int level);
E void do_cmode(const char *source, int ac, const char **av);
E void do_join(const char *source, int ac, const char **av);
E void do_kick(const std::string &source, int ac, const char **av);
E void do_part(const char *source, int ac, const char **av);
E void do_topic(const char *source, int ac, const char **av);
E void MassChannelModes(BotInfo *bi, const std::string &modes);
E void chan_set_correct_modes(User * user, Channel * c, int give_modes);
E void restore_unsynced_topics();
E Entry *entry_create(char *mask);
E Entry *entry_add(EList *list, const char *mask);
E void entry_delete(EList *list, Entry *e);
E EList *list_create();
E int entry_match(Entry *e, const ci::string &nick, const ci::string &user, const ci::string &host, uint32 ip);
E int entry_match_mask(Entry *e, const char *mask, uint32 ip);
E Entry *elist_match(EList *list, const char *nick, const char *user, const char *host, uint32 ip);
E Entry *elist_match_mask(EList *list, const char *mask, uint32 ip);
E Entry *elist_match_user(EList *list, User *u);
E Entry *elist_find_mask(EList *list, const char *mask);
E long get_memuse(EList *list);
#define whosends(ci) ((!(ci) || !((ci)->botflags.HasFlag(BS_SYMBIOSIS)) || !(ci)->bi || !(ci)->c || (ci)->c->users.size() < Config.BSMinUsers) ? findbot(Config.s_ChanServ) : (ci)->bi)
/**** chanserv.c ****/
E ChannelInfo *chanlists[256];
E LevelInfo levelinfo[];
E void get_chanserv_stats(long *nrec, long *memuse);
E void alpha_insert_chan(ChannelInfo * ci);
E void reset_levels(ChannelInfo * ci);
E void cs_init();
E void chanserv(User * u, char *buf);
E void expire_chans();
E void cs_remove_nick(const NickCore * nc);
E void check_modes(Channel * c);
E int check_valid_admin(User * user, Channel * chan, int servermode);
E int check_valid_op(User * user, Channel * chan, int servermode);
E int check_should_op(User * user, char *chan);
E int check_should_voice(User * user, char *chan);
E int check_should_halfop(User * user, char *chan);
E int check_should_owner(User * user, char *chan);
E int check_should_protect(User * user, char *chan);
E void record_topic(const char *chan);
E void restore_topic(const char *chan);
E int check_topiclock(Channel * c, time_t topic_time);
E ChannelInfo *cs_findchan(const std::string &chan);
E int check_access(User * user, ChannelInfo * ci, int what);
E bool IsFounder(User *user, ChannelInfo *ci);
E bool IsRealFounder(User *user, ChannelInfo *ci);
E int get_access(User *user, ChannelInfo *ci);
E void update_cs_lastseen(User * user, ChannelInfo * ci);
E int get_idealban(ChannelInfo * ci, User * u, char *ret, int retlen);
E AutoKick *is_stuck(ChannelInfo * ci, const char *mask);
E void stick_mask(ChannelInfo * ci, AutoKick * akick);
E void stick_all(ChannelInfo * ci);
E int levelinfo_maxwidth;
E char *get_mlock_modes(ChannelInfo * ci, int complete);
/**** compat.c ****/
#if !HAVE_STRICMP && !HAVE_STRCASECMP
E int stricmp(const char *s1, const char *s2);
E int strnicmp(const char *s1, const char *s2, size_t len);
#endif
#ifdef _WIN32
char *sockstrerror(int error);
#endif
/**** config.c ****/
E std::string services_conf;
E ServerConfig Config;
E int read_config(int reload);
/* hostserv.c */
E void do_on_id(User *u);
E void hostserv(User *u, char *buf);
E void HostServSyncVhosts(NickAlias *na);
/**** encrypt.c ****/
E int enc_encrypt(const std::string &src, std::string &dest);
E int enc_encrypt_in_place(std::string &buf);
E int enc_decrypt(const std::string &src, std::string &dest);
E int enc_check_password(std::string &plaintext, std::string &password);
/**** hostserv.c ****/
E void get_hostserv_stats(long *nrec, long *memuse);
E void hostserv_init();
/**** init.c ****/
E void introduce_user(const std::string &user);
E bool GetCommandLineArgument(const std::string &name, char shortname = 0);
E bool GetCommandLineArgument(const std::string &name, char shortname, std::string &param);
E int init_primary(int ac, char **av);
E int init_secondary(int ac, char **av);
E Uplink *uplink_server;
/**** ircd.c ****/
E void pmodule_ircd_proto(IRCDProto *);
E void pmodule_ircd_var(IRCDVar * ircdvar);
E void pmodule_ircd_version(const char *version);
E void pmodule_ircd_useTSMode(int use);
/**** language.c ****/
E char **langtexts[NUM_LANGS];
E char *langnames[NUM_LANGS];
E int langlist[NUM_LANGS];
E void lang_init();
E int strftime_lang(char *buf, int size, User * u, int format, struct tm *tm);
E void syntax_error(char *service, User * u, const char *command, int msgnum);
E const char *getstring(NickAlias *na, int index);
E const char *getstring(NickCore *nc, int index);
E const char *getstring(User *nc, int index);
E const char *getstring(int index);
/**** log.c ****/
E int open_log();
E void close_log();
E void log_perror(const char *fmt, ...) FORMAT(printf,1,2);
E void fatal(const char *fmt, ...) FORMAT(printf,1,2);
E void fatal_perror(const char *fmt, ...) FORMAT(printf,1,2);
/**** mail.c ****/
E MailInfo *MailBegin(User *u, NickCore *nc, char *subject, char *service);
E MailInfo *MailRegBegin(User *u, NickRequest *nr, char *subject, char *service);
E MailInfo *MailMemoBegin(NickCore * nc);
E void MailEnd(MailInfo *mail);
E void MailReset(User *u, NickCore *nc);
E int MailValidate(const char *email);
/**** main.c ****/
E const char version_number[];
E const char version_number_dotted[];
E const char version_build[];
E char *version_protocol;
E const char version_flags[];
E std::string services_dir;
E std::string log_filename;
E int debug;
E int readonly;
E bool LogChan;
E int nofork;
E int forceload;
E int nothird;
E int noexpire;
E int protocoldebug;
E int is44;
E int quitting;
E int shutting_down;
E const char *quitmsg;
E int save_data;
E int got_alarm;
E time_t start_time;
E Socket *UplinkSock;
E void save_databases();
E void expire_all();
E void sighandler(int signum);
E void do_restart_services();
/**** memory.c ****/
E void *smalloc(long size);
E void *scalloc(long elsize, long els);
E void *srealloc(void *oldptr, long newsize);
E char *sstrdup(const char *s);
/**** memoserv.c ****/
E void ms_init();
E void memoserv(User * u, char *buf);
E void check_memos(User * u);
E MemoInfo *getmemoinfo(const char *name, int *ischan, int *isforbid);
E void memo_send(User * u, const char *name, const char *text, int z);
E int delmemo(MemoInfo * mi, int num);
/**** messages.c ****/
E int m_nickcoll(const char *user);
E int m_away(const char *source, const char *msg);
E int m_kill(const std::string &nick, const char *msg);
E int m_motd(const char *source);
E int m_privmsg(const char *source, const std::string &receiver, const char *msg);
E int m_stats(const char *source, int ac, const char **av);
E int m_whois(const char *source, const char *who);
E int m_time(const char *source, int ac, const char **av);
E int m_version(const char *source, int ac, const char **av);
/**** misc.c ****/
E int toupper(char);
E int tolower(char);
E char *strscpy(char *d, const char *s, size_t len);
#ifndef HAVE_STRLCPY
E size_t strlcpy(char *, const char *, size_t);
#endif
#ifndef HAVE_STRLCAT
E size_t strlcat(char *, const char *, size_t);
#endif
E const char *stristr(const char *s1, const char *s2);
E char *strnrepl(char *s, int32 size, const char *old, const char *nstr);
E const char *merge_args(int argc, char **argv);
E const char *merge_args(int argc, const char **argv);
E time_t dotime(const char *s);
E const char *duration(NickCore *nc, char *buf, int bufsize, time_t seconds);
E const char *expire_left(NickCore *nc, char *buf, int len, time_t expires);
E int doValidHost(const char *host, int type);
typedef int (*range_callback_t) (User * u, int num, va_list args);
E int process_numlist(const char *numstr, int *count_ret,
range_callback_t callback, User * u, ...);
E int isValidHost(const char *host, int type);
E int isvalidchar(const char c);
E char *myStrGetToken(const char *str, const char dilim, int token_number);
E char *myStrGetOnlyToken(const char *str, const char dilim,
int token_number);
E char *myStrSubString(const char *src, int start, int end);
E char *myStrGetTokenRemainder(const char *str, const char dilim,
int token_number);
E char *stripModePrefix(const char *str);
E int myNumToken(const char *str, const char dilim);
E void doCleanBuffer(char *str);
E void EnforceQlinedNick(const std::string &nick, const char *killer);
E int nickIsServices(const char *nick, int bot);
E void add_entropy_userkeys();
E void rand_init();
E unsigned char getrandom8();
E uint16 getrandom16();
E uint32 getrandom32();
E char *str_signed(unsigned char *str);
E void ntoa(struct in_addr addr, char *ipaddr, int len);
E std::list<std::string> BuildStringList(const std::string &);
E std::list<ci::string> BuildStringList(const ci::string &);
E std::vector<std::string> BuildStringVector(const std::string &);
E void binary_to_hex(unsigned char *bin, char *hex, int length);
E uint32 cidr_to_netmask(uint16 cidr);
E uint16 netmask_to_cidr(uint32 mask);
E int str_is_wildcard(const char *str);
E int str_is_pure_wildcard(const char *str);
E uint32 str_is_ip(char *str);
E int str_is_cidr(char *str, uint32 * ip, uint32 * mask, char **host);
/**** modes.cpp ****/
/* Number of generic modes we support */
E unsigned GenericChannelModes, GenericUserModes;
E std::bitset<128> DefMLockOn;
E std::bitset<128> DefMLockOff;
E std::map<ChannelModeName, std::string> DefMLockParams;
/* Modes to set on bots when they join the channel */
E std::list<ChannelModeStatus *> BotModes;
E void SetDefaultMLock();
/**** modules.c ****/
E void modules_unload_all(bool unload_proto); /* Read warnings near function source */
/**** nickserv.c ****/
E NickAlias *nalists[1024];
E NickCore *nclists[1024];
E NickRequest *nrlists[1024];
E NickRequest *findrequestnick(const char *nick);
E void insert_requestnick(NickRequest * nr);
E void alpha_insert_alias(NickAlias * na);
E void insert_core(NickCore * nc);
E void get_aliases_stats(long *nrec, long *memuse);
E void get_core_stats(long *nrec, long *memuse);
E void change_core_display(NickCore * nc);
E void change_core_display(NickCore * nc, const char *newdisplay);
E int do_setmodes(User * u);
E void ns_init();
E void nickserv(User * u, char *buf);
E int validate_user(User * u);
E void expire_nicks();
E void expire_requests();
E NickAlias *findnick(const char *nick);
E NickAlias *findnick(const std::string &nick);
E NickCore *findcore(const char *nick);
E bool is_on_access(User *u, NickCore *nc);
/**** operserv.c ****/
E SList akills, sglines, sqlines, szlines;
E int DefConModesSet;
E Flags<ChannelModeName> DefConModesOn;
E Flags<ChannelModeName> DefConModesOff;
E std::map<ChannelModeName, std::string> DefConModesOnParams;
E bool SetDefConParam(ChannelModeName, std::string &);
E bool GetDefConParam(ChannelModeName, std::string *);
E void UnsetDefConParam(ChannelModeName);
E void operserv(User *u, char *buf);
E void os_init();
E int add_akill(User *u, const char *mask, const char *by, const time_t expires, const char *reason);
E int check_akill(const char *nick, const char *username, const char *host, const char *vhost, const char *ip);
E void expire_akills();
E void oper_global(char *nick, const char *fmt, ...);
E int add_sgline(User *u, const char *mask, const char *by, time_t expires, const char *reason);
E int check_sgline(const char *nick, const char *realname);
E void expire_sglines();
E int add_sqline(User *u, const char *mask, const char *by, time_t expires, const char *reason);
E int check_sqline(const char *nick, int nick_change);
E void expire_sqlines();
E int check_chan_sqline(const char *chan);
E int add_szline(User * u, const char *mask, const char *by,
time_t expires, const char *reason);
E void expire_szlines();
E int check_szline(const char *nick, char *ip);
E Server *server_global(Server * s, char *msg);
E std::vector<NewsItem *> News;
E bool CheckDefCon(DefconLevel Level);
E bool CheckDefCon(int level, DefconLevel Level);
E void AddDefCon(int level, DefconLevel Level);
E void DelDefCon(int level, DefconLevel Level);
E std::vector<std::bitset<32> > DefCon;
/**** process.c ****/
E int allow_ignore;
E IgnoreData *ignore;
E void add_ignore(const char *nick, time_t delta);
E IgnoreData *get_ignore(const char *nick);
E int delete_ignore(const char *nick);
E int clear_ignores();
E int split_buf(char *buf, const char ***argv, int colon_special);
E void process(const std::string &buf);
/**** send.c ****/
E void send_cmd(const char *source, const char *fmt, ...) FORMAT(printf,2,3);
E void send_cmd(const std::string &source, const char *fmt, ...) FORMAT(printf,2,3);
E void notice_server(char *source, Server * s, const char *fmt, ...)
FORMAT(printf,3,4);
E void notice_list(const char *source, const char *dest, char **text); // MARK_DEPRECATED;
E void notice_lang(const std::string &source, User *dest, int message, ...); // MARK_DEPRECATED;
E void notice_help(const char *source, User *dest, int message, ...); // MARK_DEPRECATED;
/**** servers.c ****/
E Server *servlist;
E Server *me_server;
E Server *serv_uplink;
E Flags<CapabType> Capab;
E CapabInfo Capab_Info[];
E Server *first_server(ServerFlag flag);
E Server *next_server(ServerFlag flag);
E void CapabParse(int ac, const char **av);
E int is_ulined(const char *server);
E int is_sync(Server *server);
E Server *new_server(Server * uplink, const char *name, const char *desc, ServerFlag flag, const std::string &suid);
E Server *findserver(Server *s, const char *name);
E void do_server(const char *source, const char *servername, const char *hops, const char *descript, const std::string &numeric);
E void do_squit(const char *source, int ac, const char **av);
E int anope_check_sync(const char *name);
E void finish_sync(Server *serv, int sync_links);
E void ts6_uid_init();
E void ts6_uid_increment(unsigned int slot);
E const char *ts6_uid_retrieve();
E const char *ts6_sid_retrieve();
/**** sessions.c ****/
E Exception *exceptions;
E int16 nexceptions;
E Session *sessionlist[1024];
E int32 nsessions;
E void get_session_stats(long *nrec, long *memuse);
E void get_exception_stats(long *nrec, long *memuse);
E int add_session(const char *nick, const char *host, char *hostip);
E void del_session(const char *host);
E void expire_exceptions();
E Session *findsession(const char *host);
E Exception *find_host_exception(const char *host);
E Exception *find_hostip_exception(const char *host, const char *hostip);
E int exception_add(User * u, const char *mask, const int limit,
const char *reason, const char *who,
const time_t expires);
/**** slist.c ****/
E int slist_add(SList *slist, void *item);
E void slist_clear(SList *slist, int free);
E int slist_delete(SList *slist, int index);
E int slist_delete_range(SList *slist, const char *range, slist_delcheckcb_t cb, ...);
E int slist_enum(SList *slist, const char *range, slist_enumcb_t cb, ...);
E int slist_full(SList *slist);
E int slist_indexof(SList *slist, void *item);
E void slist_init(SList *slist);
E void slist_pack(SList *slist);
E int slist_remove(SList *slist, void *item);
E int slist_setcapacity(SList *slist, int16 capacity);
/**** sockets.cpp ****/
E SocketEngine socketEngine;
E int32 TotalRead;
E int32 TotalWritten;
/**** users.c ****/
E User *userlist[1024];
E int32 opcnt;
E uint32 maxusercnt, usercnt;
E time_t maxusertime;
E void get_user_stats(long *nusers, long *memuse);
E User *finduser(const std::string &nick);
E User *firstuser();
E User *nextuser();
E User *find_byuid(const std::string &uid);
E User *first_uid();
E User *next_uid();
E Server *findserver_uid(Server * s, const char *name);
E char *TS6SID;
E char *TS6UPLINK;
E User *do_nick(const char *source, const char *nick, const char *username, const char *host,
const char *server, const char *realname, time_t ts, uint32 ip, const char *vhost, const char *uid);
E void do_umode(const char *source, int ac, const char **av);
E void do_quit(const char *source, int ac, const char **av);
E void do_kill(const std::string &source, const std::string &reason);
E int is_oper(User * user);
E int is_protected(User * user);
E int is_excepted(ChannelInfo * ci, User * user);
E int is_excepted_mask(ChannelInfo * ci, const char *mask);
E int match_usermask(const char *mask, User * user);
E char *create_mask(User * u);
E void UserSetInternalModes(User *user, int ac, const char **av);
/******************************************************************************/
E const char *base64enc(long i);
E long base64dec(const char *b64);
E long base64dects(const char *ts);
E int b64_encode(const char *src, size_t srclength, char *target, size_t targsize);
E int b64_decode(const char *src, char *target, size_t targsize);
E const char *encode_ip(unsigned char *ip);
E int decode_ip(const char *buf);
E char *host_resolve(char *host);
#ifdef _WIN32
E char *GetWindowsVersion() ;
E int SupportedWindowsVersion();
#endif
#endif /* EXTERN_H */
+72 -354
View File
@@ -1,135 +1,78 @@
/*
* Copyright (C) 2002-2010 InspIRCd Development Team
* Copyright (C) 2009-2010 Anope Team <team@anope.org>
*
* (C) 2002-2011 InspIRCd Development Team
* (C) 2009-2024 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_
#pragma once
#include <string>
#include <locale>
#include <unordered_map>
/*******************************************************
* This file contains classes and templates that deal
* with the comparison and hashing of 'irc strings'.
* An 'irc string' is a string which compares in a
* case insensitive manner, and as per RFC 1459 will
* treat [ identical to {, ] identical to }, and \
* as identical to |.
*
* Our hashing functions are designed to accept
* std::string and compare/hash them as type irc::string
* by converting them internally. This makes them
* backwards compatible with other code which is not
* aware of irc::string.
*******************************************************/
#include "services.h"
#ifndef LOWERMAP
#define LOWERMAP
/** A mapping of uppercase to lowercase, including scandinavian
* 'oddities' as specified by RFC1459, e.g. { -> [, and | -> \
*/
unsigned const char rfc_case_insensitive_map[256] = {
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, /* 0-19 */
20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, /* 20-39 */
40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, /* 40-59 */
60, 61, 62, 63, 64, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, /* 60-79 */
112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 94, 95, 96, 97, 98, 99, /* 80-99 */
100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, /* 100-119 */
120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, /* 120-139 */
140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, /* 140-159 */
160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, /* 160-179 */
180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, /* 180-199 */
200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, /* 200-219 */
220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, /* 220-239 */
240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255 /* 240-255 */
};
/** Case insensitive map, ASCII rules.
* That is;
* [ != {, but A == a.
*/
unsigned const char ascii_case_insensitive_map[256] = {
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, /* 0-19 */
20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, /* 20-39 */
40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, /* 40-59 */
60, 61, 62, 63, 64, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, /* 60-79 */
112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 91, 92, 93, 94, 95, 96, 97, 98, 99, /* 80-99 */
100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, /* 100-119 */
120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, /* 120-139 */
140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, /* 140-159 */
160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, /* 160-179 */
180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, /* 180-199 */
200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, /* 200-219 */
220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, /* 220-239 */
240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255 /* 240-255 */
};
#endif
/** The irc namespace contains a number of helper classes.
*/
namespace irc
namespace Anope
{
/** The irc_char_traits class is used for RFC-style comparison of strings.
* This class is used to implement irc::string, a case-insensitive, RFC-
* comparing string class.
*/
struct irc_char_traits : std::char_traits<char>
class string;
/* Casemap in use by Anope. ci::string's comparison functions use this (and thus Anope::string) */
extern std::locale casemap;
extern CoreExport void CaseMapRebuild();
extern CoreExport unsigned char tolower(unsigned char);
extern CoreExport unsigned char toupper(unsigned char);
/* ASCII case insensitive ctype. */
template<typename char_type>
class ascii_ctype
: public std::ctype<char_type>
{
/** Check if two chars match.
* @param c1st First character
* @param c2nd Second character
* @return true if the characters are equal
*/
static bool eq(char c1st, char c2nd);
public:
char_type do_toupper(char_type c) const override
{
if (c >= 'a' && c <= 'z')
return c - 32;
else
return c;
}
/** Check if two chars do NOT match.
* @param c1st First character
* @param c2nd Second character
* @return true if the characters are unequal
*/
static bool ne(char c1st, char c2nd);
/** Check if one char is less than another.
* @param c1st First character
* @param c2nd Second character
* @return true if c1st is less than c2nd
*/
static bool lt(char c1st, char c2nd);
/** Compare two strings of size n.
* @param str1 First string
* @param str2 Second string
* @param n Length to compare to
* @return similar to strcmp, zero for equal, less than zero for str1
* being less and greater than zero for str1 being greater than str2.
*/
static int compare(const char *str1, const char *str2, size_t n);
/** Find a char within a string up to position n.
* @param s1 String to find in
* @param n Position to search up to
* @param c Character to search for
* @return Pointer to the first occurance of c in s1
*/
static const char *find(const char *s1, int n, char c);
char_type do_tolower(char_type c) const override
{
if (c >= 'A' && c <= 'Z')
return c + 32;
else
return c;
}
};
/** This typedef declares irc::string based upon irc_char_traits.
*/
typedef std::basic_string<char, irc_char_traits, std::allocator<char> > string;
/* rfc1459 case insensitive ctype, { = [, } = ], and | = \ */
template<typename char_type>
class rfc1459_ctype final
: public ascii_ctype<char_type>
{
public:
char_type do_toupper(char_type c) const override
{
if (c == '{' || c == '}' || c == '|')
return c - 32;
else
return ascii_ctype<char_type>::do_toupper(c);
}
char_type do_tolower(char_type c) const override
{
if (c == '[' || c == ']' || c == '\\')
return c + 32;
else
return ascii_ctype<char_type>::do_tolower(c);
}
};
}
/** The ci namespace contains a number of helper classes.
/** The ci namespace contains a number of helper classes relevant to case insensitive strings.
*/
namespace ci
{
@@ -137,7 +80,8 @@ namespace ci
* This class is used to implement ci::string, a case-insensitive, ASCII-
* comparing string class.
*/
struct CoreExport ci_char_traits : std::char_traits<char>
struct CoreExport ci_char_traits final
: std::char_traits<char>
{
/** Check if two chars match.
* @param c1st First character
@@ -173,7 +117,7 @@ namespace ci
* @param s1 String to find in
* @param n Position to search up to
* @param c Character to search for
* @return Pointer to the first occurance of c in s1
* @return Pointer to the first occurrence of c in s1
*/
static const char *find(const char *s1, int n, char c);
};
@@ -181,58 +125,16 @@ namespace ci
/** This typedef declares ci::string based upon ci_char_traits.
*/
typedef std::basic_string<char, ci_char_traits, std::allocator<char> > string;
}
/* 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 << std::string(str.c_str()); }
/** Operator >> for irc::string
*/
inline std::istream &operator>>(std::istream &is, irc::string &str)
{
std::string tmp;
is >> tmp;
str = tmp.c_str();
return is;
}
/** Operator << for ci::string
*/
inline std::ostream &operator<<(std::ostream &os, const ci::string &str) { return os << std::string(str.c_str()); }
/** Operator >> for ci::string
*/
inline std::istream &operator>>(std::istream &is, ci::string &str)
{
std::string tmp;
is >> tmp;
str = tmp.c_str();
return is;
}
/* Define operators for + and == with irc::string to std::string for easy assignment
* and comparison
*
* Operator +
*/
inline std::string operator+(std::string &leftval, irc::string &rightval)
{
return leftval + std::string(rightval.c_str());
}
/* Define operators for + and == with irc::string to std::string for easy assignment
* and comparison
*
* Operator +
*/
inline irc::string operator+(irc::string &leftval, std::string &rightval)
{
return leftval + irc::string(rightval.c_str());
struct CoreExport less final
{
/** Compare two Anope::strings as ci::strings and find which one is less
* @param s1 The first string
* @param s2 The second string
* @return true if s1 < s2, else false
*/
bool operator()(const Anope::string &s1, const Anope::string &s2) const;
};
}
/* Define operators for + and == with ci::string to std::string for easy assignment
@@ -255,46 +157,6 @@ inline ci::string operator+(ci::string &leftval, std::string &rightval)
return leftval + ci::string(rightval.c_str());
}
/* Define operators for + and == with irc::string to ci::string for easy assignment
* and comparison
*
* Operator +
*/
inline irc::string operator+(irc::string &leftval, ci::string &rightval)
{
return leftval + irc::string(rightval.c_str());
}
/* Define operators for + and == with irc::string to ci::string for easy assignment
* and comparison
*
* Operator +
*/
inline ci::string operator+(ci::string &leftval, irc::string &rightval)
{
return leftval + ci::string(rightval.c_str());
}
/* Define operators for + and == with irc::string to std::string for easy assignment
* and comparison
*
* Operator ==
*/
inline bool operator==(const std::string &leftval, const irc::string &rightval)
{
return leftval.c_str() == rightval;
}
/* Define operators for + and == with irc::string to std::string for easy assignment
* and comparison
*
* Operator ==
*/
inline bool operator==(const irc::string &leftval, const std::string &rightval)
{
return leftval == rightval.c_str();
}
/* Define operators for + and == with ci::string to std::string for easy assignment
* and comparison
*
@@ -315,40 +177,6 @@ inline bool operator==(const ci::string &leftval, const std::string &rightval)
return leftval == rightval.c_str();
}
/* Define operators for + and == with irc::string to ci::string for easy assignment
* and comparison
*
* Operator ==
*/
inline bool operator==(const ci::string &leftval, const irc::string &rightval)
{
return leftval.c_str() == rightval;
}
/* Define operators for + and == with irc::string to ci::string for easy assignment
* and comparison
*
* Operator ==
*/
inline bool operator==(const irc::string &leftval, const ci::string &rightval)
{
return leftval == rightval.c_str();
}
/* Define operators != for irc::string to std::string for easy comparison
*/
inline bool operator!=(const irc::string &leftval, const std::string &rightval)
{
return !(leftval == rightval.c_str());
}
/* Define operators != for std::string to irc::string for easy comparison
*/
inline bool operator!=(const std::string &leftval, const irc::string &rightval)
{
return !(leftval.c_str() == rightval);
}
/* Define operators != for ci::string to std::string for easy comparison
*/
inline bool operator!=(const ci::string &leftval, const std::string &rightval)
@@ -356,119 +184,9 @@ inline bool operator!=(const ci::string &leftval, const std::string &rightval)
return !(leftval == rightval.c_str());
}
/* Define operators != for ci::string to irc::string for easy comparison
/* Define operators != for std::string to ci::string for easy comparison
*/
inline bool operator!=(const std::string &leftval, const ci::string &rightval)
{
return !(leftval.c_str() == rightval);
}
/* Define operators != for irc::string to ci::string for easy comparison
*/
inline bool operator!=(const irc::string &leftval, const ci::string &rightval)
{
return !(leftval == rightval.c_str());
}
/* Define operators != for irc::string to ci::string for easy comparison
*/
inline bool operator!=(const ci::string &leftval, const irc::string &rightval)
{
return !(leftval.c_str() == rightval);
}
/** 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);
sepstream(const ci::string &source, char seperator);
sepstream(const char *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);
virtual bool GetToken(ci::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 commasepstream : public sepstream
{
public:
/** Initialize with comma seperator
*/
commasepstream(const std::string &source) : sepstream(source, ',') { }
commasepstream(const ci::string &source) : sepstream(source, ',') { }
commasepstream(const char *source) : sepstream(source, ',') { }
};
/** A derived form of sepstream, which seperates on spaces
*/
class spacesepstream : public sepstream
{
public:
/** Initialize with space seperator
*/
spacesepstream(const std::string &source) : sepstream(source, ' ') { }
spacesepstream(const ci::string &source) : sepstream(source, ' ') { }
spacesepstream(const char *source) : sepstream(source, ' ') { }
};
#endif
+128
View File
@@ -0,0 +1,128 @@
/*
*
* (C) 2008-2024 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
*/
#pragma once
#include "anope.h"
namespace Language
{
/* Languages we support as configured in anope.conf. They are
* added to this list if we detect a language exists in the correct
* location for each language.
*/
extern CoreExport std::vector<Anope::string> Languages;
/* Domains to search when looking for translations other than the
* default "anope domain. This is used by modules who add their own
* language files (and thus domains) to Anope. If a module is loaded
* and we detect a language file exists for at least one of the supported
* languages for the module, then we add the module's domain (its name)
* here.
*
* When strings are translated they are checked against all domains.
*/
extern std::vector<Anope::string> Domains;
/** Initialize the language system. Finds valid language files and
* populates the Languages list.
*/
extern void InitLanguages();
/** Translates a string to the default language.
* @param string A string to translate
* @return The translated string if found, else the original string.
*/
extern CoreExport const char *Translate(const char *string);
/** Translates a string to the language of the given user.
* @param u The user to translate the string for
* @param string A string to translate
* @return The translated string if found, else the original string.
*/
extern CoreExport const char *Translate(User *u, const char *string);
/** Translates a string to the language of the given account.
* @param nc The account to translate the string for
* @param string A string to translate
* @return The translated string if count, else the original string
*/
extern CoreExport const char *Translate(const NickCore *nc, const char *string);
/** Translatesa string to the given language.
* @param lang The language to translate to
* @param string The string to translate
* @return The translated string if found, else the original string.
*/
extern CoreExport const char *Translate(const char *lang, const char *string);
} // namespace Language
/* Commonly used language strings */
#define MORE_INFO _("\002%s%s HELP %s\002 for more information.")
#define BAD_USERHOST_MASK _("Mask must be in the form \037user\037@\037host\037.")
#define BAD_EXPIRY_TIME _("Invalid expiry time.")
#define USERHOST_MASK_TOO_WIDE _("%s coverage is too wide; Please use a more specific mask.")
#define READ_ONLY_MODE _("Services are in read-only mode!")
#define PASSWORD_INCORRECT _("Password incorrect.")
#define ACCESS_DENIED _("Access denied.")
#define MORE_OBSCURE_PASSWORD _("Please try again with a more obscure password. Passwords should not be\n" \
"something that could be easily guessed (e.g. your real name or your nick) and\n" \
"cannot contain the space or tab characters.\n")
#define PASSWORD_TOO_SHORT _("Your password is too short. It must be longer than %u characters.")
#define PASSWORD_TOO_LONG _("Your password is too long. It must be shorter than %u characters.")
#define NICK_NOT_REGISTERED _("Your nick isn't registered.")
#define NICK_X_NOT_REGISTERED _("Nick \002%s\002 isn't registered.")
#define NICK_X_NOT_IN_USE _("Nick \002%s\002 isn't currently in use.")
#define NICK_X_NOT_ON_CHAN _("\002%s\002 is not currently on channel %s.")
#define NICK_X_SUSPENDED _("Nick %s is currently suspended.")
#define CHAN_X_SUSPENDED _("Channel %s is currently suspended.")
#define CHAN_X_NOT_REGISTERED _("Channel \002%s\002 isn't registered.")
#define CHAN_X_NOT_IN_USE _("Channel \002%s\002 doesn't exist.")
#define NICK_IDENTIFY_REQUIRED _("You must be logged into an account to use that command.")
#define MAIL_X_INVALID _("\002%s\002 is not a valid e-mail address.")
#define UNKNOWN _("<unknown>")
#define NO_EXPIRE _("does not expire")
#define LIST_INCORRECT_RANGE _("Incorrect range specified. The correct syntax is \002#\037from\037-\037to\037\002.")
#define NICK_IS_SECURE _("This nickname is registered and protected. If it is your\n" \
"nick, type \002%s%s IDENTIFY \037password\037\002. Otherwise,\n" \
"please choose a different nick.")
#define FORCENICKCHANGE_NOW _("This nickname has been registered; you may not use it.")
#define NICK_CANNOT_BE_REGISTERED _("Nickname \002%s\002 may not be registered.")
#define NICK_ALREADY_REGISTERED _("Nickname \002%s\002 is already registered!")
#define NICK_SET_DISPLAY_CHANGED _("The new display is now \002%s\002.")
#define NICK_CONFIRM_INVALID _("Invalid passcode has been entered, please check the e-mail again, and retry.")
#define CHAN_NOT_ALLOWED_TO_JOIN _("You are not permitted to be on this channel.")
#define CHAN_X_INVALID _("Channel %s is not a valid channel.")
#define CHAN_REACHED_CHANNEL_LIMIT _("Sorry, you have already reached your limit of \002%d\002 channels.")
#define CHAN_EXCEEDED_CHANNEL_LIMIT _("Sorry, you have already exceeded your limit of \002%d\002 channels.")
#define CHAN_SYMBOL_REQUIRED _("Please use the symbol of \002#\002 when attempting to register.")
#define CHAN_SETTING_CHANGED _("%s for %s set to %s.")
#define CHAN_SETTING_UNSET _("%s for %s unset.")
#define CHAN_ACCESS_LEVEL_RANGE _("Access level must be between %d and %d inclusive.")
#define CHAN_INFO_HEADER _("Information for channel \002%s\002:")
#define CHAN_EXCEPTED _("\002%s\002 matches an except on %s and cannot be banned until the except has been removed.")
#define MEMO_NEW_X_MEMO_ARRIVED _("There is a new memo on channel %s.\n" \
"Type \002%s%s READ %s %zu\002 to read it.")
#define MEMO_NEW_MEMO_ARRIVED _("You have a new memo from %s.\n" \
"Type \002%s%s READ %zu\002 to read it.")
#define MEMO_HAVE_NO_MEMOS _("You have no memos.")
#define MEMO_X_HAS_NO_MEMOS _("%s has no memos.")
#define MEMO_SEND_DISABLED _("Sorry, memo sending is temporarily disabled.")
#define MEMO_HAVE_NO_NEW_MEMOS _("You have no new memos.")
#define MEMO_X_HAS_NO_NEW_MEMOS _("%s has no new memos.")
#define BOT_DOES_NOT_EXIST _("Bot \002%s\002 does not exist.")
#define BOT_NOT_ASSIGNED _("You must assign a bot to the channel before using this command.")
#define BOT_NOT_ON_CHANNEL _("Bot is not on channel \002%s\002.")
#define HOST_SET_ERROR _("A vHost must be in the format of a valid hostname.")
#define HOST_SET_IDENT_ERROR _("A vHost ident must be in the format of a valid ident.")
#define HOST_SET_TOOLONG _("Error! The vHost is too long, please use a hostname shorter than %zu characters.")
#define HOST_SET_IDENTTOOLONG _("Error! The vHost ident is too long, please use an ident shorter than %zu characters.")
#define HOST_NOT_ASSIGNED _("Please contact an Operator to get a vHost assigned to this nick.")
#define HOST_NO_VIDENT _("Your IRCd does not support vIdent's, if this is incorrect, please report this as a possible bug")
+91
View File
@@ -0,0 +1,91 @@
/*
*
* (C) 2003-2024 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
*
* Based on the original code of Epona by Lara.
* Based on the original code of Services by Andy Church.
*/
#pragma once
#include "services.h"
#include "anope.h"
/** A class to process numbered lists (passed to most DEL/LIST/VIEW commands).
* The function HandleNumber is called for every number in the list. Note that
* if descending is true it gets called in descending order. This is so deleting
* the index passed to the function from an array will not cause the other indexes
* passed to the function to be incorrect. This keeps us from having to have an
* 'in use' flag on everything.
*/
class CoreExport NumberList
{
private:
bool is_valid = true;
std::set<unsigned> numbers;
bool desc;
public:
/** Processes a numbered list
* @param list The list
* @param descending True to make HandleNumber get called with numbers in descending order
*/
NumberList(const Anope::string &list, bool descending);
/** Destructor, does nothing
*/
virtual ~NumberList() = default;
/** Should be called after the constructors are done running. This calls the callbacks.
*/
void Process();
/** Called with a number from the list
* @param number The number
*/
virtual void HandleNumber(unsigned number);
/** Called when there is an error with the numbered list
* Return false to immediately stop processing the list and return
* This is all done before we start calling HandleNumber, so no numbers will have been processed yet
* @param list The list
* @return false to stop processing
*/
virtual bool InvalidRange(const Anope::string &list);
};
/** This class handles formatting LIST/VIEW replies.
*/
class CoreExport ListFormatter final
{
public:
typedef std::map<Anope::string, Anope::string> ListEntry;
private:
NickCore *nc;
std::vector<Anope::string> columns;
std::vector<ListEntry> entries;
public:
ListFormatter(NickCore *nc);
ListFormatter &AddColumn(const Anope::string &name);
void AddEntry(const ListEntry &entry);
bool IsEmpty() const;
void Process(std::vector<Anope::string> &);
};
/** This class handles formatting INFO replies
*/
class CoreExport InfoFormatter final
{
NickCore *nc;
std::vector<std::pair<Anope::string, Anope::string> > replies;
unsigned longest = 0;
public:
InfoFormatter(NickCore *nc);
void Process(std::vector<Anope::string> &);
Anope::string &operator[](const Anope::string &key);
void AddOption(const Anope::string &opt);
};
+141
View File
@@ -0,0 +1,141 @@
/*
*
* (C) 2003-2024 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
*
* Based on the original code of Epona by Lara.
* Based on the original code of Services by Andy Church.
*/
#pragma once
#include "anope.h"
#include "defs.h"
enum LogType
{
/* Used whenever an administrator uses an administrative command */
LOG_ADMIN,
/* Used whenever an administrator overrides something, such as adding
* access to a channel where they don't have permission to.
*/
LOG_OVERRIDE,
/* Any other command usage */
LOG_COMMAND,
LOG_SERVER,
LOG_CHANNEL,
LOG_USER,
LOG_MODULE,
LOG_NORMAL,
LOG_TERMINAL,
LOG_RAWIO,
LOG_DEBUG,
LOG_DEBUG_2,
LOG_DEBUG_3,
LOG_DEBUG_4
};
struct LogFile final
{
Anope::string filename;
std::ofstream stream;
LogFile(const Anope::string &name);
~LogFile();
const Anope::string &GetName() const;
};
/* Represents a single log message */
class CoreExport Log final
{
public:
/* Bot that should log this message */
BotInfo *bi = nullptr;
/* For commands, the user executing the command, but might not always exist */
User *u = nullptr;
/* For commands, the account executing the command, but will not always exist */
NickCore *nc = nullptr;
/* For commands, the command being executed */
Command *c = nullptr;
/* For commands, the command source */
CommandSource *source = nullptr;
/* Used for LOG_CHANNEL */
Channel *chan = nullptr;
/* For commands, the channel the command was executed on, will not always exist */
const ChannelInfo *ci = nullptr;
/* For LOG_SERVER */
Server *s = nullptr;
/* For LOG_MODULE */
Module *m = nullptr;
LogType type;
Anope::string category;
std::stringstream buf;
Log(LogType type = LOG_NORMAL, const Anope::string &category = "", BotInfo *bi = NULL);
/* LOG_COMMAND/OVERRIDE/ADMIN */
Log(LogType type, CommandSource &source, Command *c, ChannelInfo *ci = NULL);
/* LOG_CHANNEL */
Log(User *u, Channel *c, const Anope::string &category = "");
/* LOG_USER */
Log(User *u, const Anope::string &category = "", BotInfo *bi = NULL);
/* LOG_SERVER */
Log(Server *s, const Anope::string &category = "", BotInfo *bi = NULL);
Log(BotInfo *b, const Anope::string &category = "");
Log(Module *m, const Anope::string &category = "", BotInfo *bi = NULL);
~Log();
private:
Anope::string FormatSource() const;
Anope::string FormatCommand() const;
public:
Anope::string BuildPrefix() const;
template<typename T> Log &operator<<(T val)
{
this->buf << val;
return *this;
}
};
/* Configured in the configuration file, actually does the message logging */
class CoreExport LogInfo final
{
public:
BotInfo *bot = nullptr;
std::vector<Anope::string> targets;
std::vector<LogFile *> logfiles;
int last_day = 0;
std::vector<Anope::string> sources;
int log_age;
std::vector<Anope::string> admin;
std::vector<Anope::string> override;
std::vector<Anope::string> commands;
std::vector<Anope::string> servers;
std::vector<Anope::string> users;
std::vector<Anope::string> channels;
std::vector<Anope::string> normal;
bool raw_io;
bool debug;
LogInfo(int logage, bool rawio, bool debug);
~LogInfo();
void OpenLogFiles();
bool HasType(LogType ltype, const Anope::string &type) const;
/* Logs the message l if configured to */
void ProcessMessage(const Log *l);
};
+55
View File
@@ -0,0 +1,55 @@
/*
*
* (C) 2003-2024 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
*
* Based on the original code of Epona by Lara.
* Based on the original code of Services by Andy Church.
*/
#pragma once
#include "anope.h"
#include "threadengine.h"
#include "serialize.h"
namespace Mail
{
extern CoreExport bool Send(User *from, NickCore *to, BotInfo *service, const Anope::string &subject, const Anope::string &message);
extern CoreExport bool Send(NickCore *to, const Anope::string &subject, const Anope::string &message);
extern CoreExport bool Validate(const Anope::string &email);
/* A email message being sent */
class Message final
: public Thread
{
private:
Anope::string sendmail_path;
Anope::string send_from;
Anope::string mail_to;
Anope::string addr;
Anope::string subject;
Anope::string message;
Anope::string content_type;
bool dont_quote_addresses;
bool success = false;
public:
/** Construct this message. Once constructed call Thread::Start to launch the mail sending.
* @param sf Config->SendFrom
* @param mailto Name of person being mailed (u->nick, nc->display, etc)
* @param addr Destination address to mail
* @param subject Message subject
* @param message The actual message
*/
Message(const Anope::string &sf, const Anope::string &mailto, const Anope::string &addr, const Anope::string &subject, const Anope::string &message);
~Message();
/* Called from within the thread to actually send the mail */
void Run() override;
};
} // namespace Mail
+53
View File
@@ -0,0 +1,53 @@
/*
*
* (C) 2003-2024 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
*
* Based on the original code of Epona by Lara.
* Based on the original code of Services by Andy Church.
*/
#pragma once
#include "anope.h"
#include "serialize.h"
class CoreExport Memo final
: public Serializable
{
public:
MemoInfo *mi;
bool unread;
bool receipt;
Memo();
~Memo();
void Serialize(Serialize::Data &data) const override;
static Serializable *Unserialize(Serializable *obj, Serialize::Data &);
Anope::string owner;
/* When it was sent */
time_t time;
Anope::string sender;
Anope::string text;
};
/* Memo info structures. Since both nicknames and channels can have memos,
* we encapsulate memo data in a MemoInfo to make it easier to handle.
*/
struct CoreExport MemoInfo final
{
int16_t memomax = 0;
Serialize::Checker<std::vector<Memo *> > memos;
std::vector<Anope::string> ignores;
MemoInfo();
Memo *GetMemo(unsigned index) const;
unsigned GetIndex(Memo *m) const;
void Del(unsigned index);
bool HasIgnore(User *u);
static MemoInfo *GetMemoInfo(const Anope::string &targ, bool &is_chan);
};
+185 -13
View File
@@ -1,23 +1,195 @@
/* Declarations of IRC message structures, variables, and functions.
/*
*
* (C) 2003-2010 Anope Team
* (C) 2003-2024 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for furhter details.
* Please read COPYING and README for further details.
*
* Based on the original code of Epona by Lara.
* Based on the original code of Services by Andy Church.
*
* $Id$
*
* Based on the original code of Services by Andy Church.
*/
/*************************************************************************/
#include "modules.h"
#pragma once
extern Message messages[];
extern void moduleAddMsgs();
extern Message *find_message(const char *name);
#include "protocol.h"
/* Common IRCD messages.
* Protocol modules may chose to include some, none, or all of these handlers
* as they see fit.
*/
/*************************************************************************/
namespace Message
{
struct CoreExport Away
: IRCDMessage
{
Away(Module *creator, const Anope::string &mname = "AWAY") : IRCDMessage(creator, mname, 0) { SetFlag(FLAG_REQUIRE_USER); SetFlag(FLAG_SOFT_LIMIT); }
void Run(MessageSource &source, const std::vector<Anope::string> &params, const Anope::map<Anope::string> &tags) override;
};
struct CoreExport Capab
: IRCDMessage
{
Capab(Module *creator, const Anope::string &mname = "CAPAB") : IRCDMessage(creator, mname, 1) { SetFlag(FLAG_SOFT_LIMIT); }
void Run(MessageSource &source, const std::vector<Anope::string> &params, const Anope::map<Anope::string> &tags) override;
};
struct CoreExport Error
: IRCDMessage
{
Error(Module *creator, const Anope::string &mname = "ERROR") : IRCDMessage(creator, mname, 1) { }
void Run(MessageSource &source, const std::vector<Anope::string> &params, const Anope::map<Anope::string> &tags) override;
};
struct CoreExport Invite
: IRCDMessage
{
Invite(Module *creator, const Anope::string &mname = "INVITE") : IRCDMessage(creator, mname, 2) { SetFlag(FLAG_REQUIRE_USER); SetFlag(FLAG_SOFT_LIMIT); }
void Run(MessageSource &source, const std::vector<Anope::string> &params, const Anope::map<Anope::string> &tags) override;
};
struct CoreExport Join
: IRCDMessage
{
Join(Module *creator, const Anope::string &mname = "JOIN") : IRCDMessage(creator, mname, 1) { SetFlag(FLAG_REQUIRE_USER); SetFlag(FLAG_SOFT_LIMIT); }
void Run(MessageSource &source, const std::vector<Anope::string> &params, const Anope::map<Anope::string> &tags) override;
typedef std::pair<ChannelStatus, User *> SJoinUser;
/** Handle a SJOIN.
* @param source The source of the SJOIN
* @param chan The channel the users are joining to
* @param ts The TS for the channel
* @param modes The modes sent with the SJOIN, if any
* @param users The users and their status, if any
*/
static void SJoin(MessageSource &source, const Anope::string &chan, time_t ts, const Anope::string &modes, const std::list<SJoinUser> &users);
};
struct CoreExport Kick
: IRCDMessage
{
Kick(Module *creator, const Anope::string &mname = "KICK") : IRCDMessage(creator, mname, 2) { SetFlag(FLAG_SOFT_LIMIT); }
void Run(MessageSource &source, const std::vector<Anope::string> &params, const Anope::map<Anope::string> &tags) override;
};
struct CoreExport Kill
: IRCDMessage
{
Kill(Module *creator, const Anope::string &mname = "KILL") : IRCDMessage(creator, mname, 2) { }
void Run(MessageSource &source, const std::vector<Anope::string> &params, const Anope::map<Anope::string> &tags) override;
};
struct CoreExport Mode
: IRCDMessage
{
Mode(Module *creator, const Anope::string &mname = "MODE") : IRCDMessage(creator, mname, 2) { SetFlag(FLAG_SOFT_LIMIT); }
void Run(MessageSource &source, const std::vector<Anope::string> &params, const Anope::map<Anope::string> &tags) override;
};
struct CoreExport MOTD
: IRCDMessage
{
MOTD(Module *creator, const Anope::string &mname = "MOTD") : IRCDMessage(creator, mname, 1) { }
void Run(MessageSource &source, const std::vector<Anope::string> &params, const Anope::map<Anope::string> &tags) override;
};
struct CoreExport Notice
: IRCDMessage
{
Notice(Module *creator, const Anope::string &mname = "NOTICE") : IRCDMessage(creator, mname, 2) { SetFlag(FLAG_REQUIRE_USER); }
void Run(MessageSource &source, const std::vector<Anope::string> &params, const Anope::map<Anope::string> &tags) override;
};
struct CoreExport Part
: IRCDMessage
{
Part(Module *creator, const Anope::string &mname = "PART") : IRCDMessage(creator, mname, 1) { SetFlag(FLAG_REQUIRE_USER); SetFlag(FLAG_SOFT_LIMIT); }
void Run(MessageSource &source, const std::vector<Anope::string> &params, const Anope::map<Anope::string> &tags) override;
};
struct CoreExport Ping
: IRCDMessage
{
Ping(Module *creator, const Anope::string &mname = "PING") : IRCDMessage(creator, mname, 1) { SetFlag(FLAG_SOFT_LIMIT); }
void Run(MessageSource &source, const std::vector<Anope::string> &params, const Anope::map<Anope::string> &tags) override;
};
struct CoreExport Privmsg
: IRCDMessage
{
Privmsg(Module *creator, const Anope::string &mname = "PRIVMSG") : IRCDMessage(creator, mname, 2) { SetFlag(FLAG_REQUIRE_USER); }
void Run(MessageSource &source, const std::vector<Anope::string> &params, const Anope::map<Anope::string> &tags) override;
};
struct CoreExport Quit
: IRCDMessage
{
Quit(Module *creator, const Anope::string &mname = "QUIT") : IRCDMessage(creator, mname, 1) { SetFlag(FLAG_REQUIRE_USER); }
void Run(MessageSource &source, const std::vector<Anope::string> &params, const Anope::map<Anope::string> &tags) override;
};
struct CoreExport SQuit
: IRCDMessage
{
SQuit(Module *creator, const Anope::string &mname = "SQUIT") : IRCDMessage(creator, mname, 2) { }
void Run(MessageSource &source, const std::vector<Anope::string> &params, const Anope::map<Anope::string> &tags) override;
};
struct CoreExport Stats
: IRCDMessage
{
Stats(Module *creator, const Anope::string &mname = "STATS") : IRCDMessage(creator, mname, 1) { SetFlag(FLAG_REQUIRE_USER); SetFlag(FLAG_SOFT_LIMIT); }
void Run(MessageSource &source, const std::vector<Anope::string> &params, const Anope::map<Anope::string> &tags) override;
};
struct CoreExport Time
: IRCDMessage
{
Time(Module *creator, const Anope::string &mname = "TIME") : IRCDMessage(creator, mname, 0) { SetFlag(FLAG_SOFT_LIMIT); }
void Run(MessageSource &source, const std::vector<Anope::string> &params, const Anope::map<Anope::string> &tags) override;
};
struct CoreExport Topic
: IRCDMessage
{
Topic(Module *creator, const Anope::string &mname = "TOPIC") : IRCDMessage(creator, mname, 2) { SetFlag(FLAG_REQUIRE_USER); }
void Run(MessageSource &source, const std::vector<Anope::string> &params, const Anope::map<Anope::string> &tags) override;
};
struct CoreExport Version
: IRCDMessage
{
Version(Module *creator, const Anope::string &mname = "VERSION") : IRCDMessage(creator, mname, 0) { SetFlag(FLAG_SOFT_LIMIT); }
void Run(MessageSource &source, const std::vector<Anope::string> &params, const Anope::map<Anope::string> &tags) override;
};
struct CoreExport Whois
: IRCDMessage
{
Whois(Module *creator, const Anope::string &mname = "WHOIS") : IRCDMessage(creator, mname, 1) { SetFlag(FLAG_SOFT_LIMIT); }
void Run(MessageSource &source, const std::vector<Anope::string> &params, const Anope::map<Anope::string> &tags) override;
};
} // namespace Message
+257 -356
View File
@@ -1,53 +1,15 @@
/* Mode support
*
* Copyright (C) 2008-2010 Adam <Adam@anope.org>
* Copyright (C) 2008-2010 Anope Team <team@anope.org>
* (C) 2008-2011 Adam <Adam@anope.org>
* (C) 2008-2024 Anope Team <team@anope.org>
*
* Please read COPYING and README for further details.
*
*
* $Id$
*
*/
/** 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,
#pragma once
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
};
#include "anope.h"
#include "base.h"
/** The different types of modes
*/
@@ -67,465 +29,404 @@ enum ModeType
*/
enum ModeClass
{
/* Channel mode */
MC_CHANNEL,
/* User mode */
MC_USER
};
/** This class is the basis of all modes in Anope
*/
class CoreExport Mode
: public Base
{
public:
/* Class of mode this is */
ModeClass Class;
/* Mode char for this */
char ModeChar;
/* Type of mode this is */
ModeType Type;
public:
/* Mode name */
Anope::string name;
/* Class of mode this is (user/channel) */
ModeClass mclass;
/* Mode char for this, eg 'b' */
char mchar;
/* Type of mode this is, eg MODE_LIST */
ModeType type;
/** Default constructor
* @param mClass The type of mode this is
* @param modeChar The mode char
/** constructor
* @param mname The mode name
* @param mclass The type of mode this is
* @param mc The mode char
* @param type The mode type
*/
Mode(ModeClass mClass, char modeChar, ModeType type);
Mode(const Anope::string &mname, ModeClass mclass, char mc, ModeType type);
virtual ~Mode() = default;
/** Default destructor
/** Can a user set this mode, used for mlock
* @param u The user
*/
virtual ~Mode();
virtual bool CanSet(User *u) const;
};
/** This class is a user mode, all user modes use this/inherit from this
*/
class CoreExport UserMode : public Mode
class CoreExport UserMode
: public Mode
{
public:
/* Mode name */
UserModeName Name;
/** Default constructor
* @param nName The mode name
* @param modeChar The mode char
public:
/** constructor
* @param name The mode name
* @param mc The mode char
*/
UserMode(UserModeName mName, char modeChar);
/** Default destructor
*/
virtual ~UserMode();
UserMode(const Anope::string &name, char mc);
};
class UserModeParam : public UserMode
class CoreExport UserModeParam
: public UserMode
{
public:
/** Default constructor
* @param mName The mode name
* @param modeChar The mode char
public:
/** constructor
* @param name The mode name
* @param mc The mode char
*/
UserModeParam(UserModeName mName, char modeChar);
UserModeParam(const Anope::string &name, char mc);
/** Check if the param is valid
* @param value The param
* @return true or false
*/
virtual bool IsValid(const std::string &value) { return true; }
virtual bool IsValid(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
class CoreExport ChannelMode
: public Mode
{
public:
public:
/* channel modes that can possibly unwrap this mode */
std::vector<ChannelMode *> listeners;
/* Mode name */
ChannelModeName Name;
/** Default constructor
* @param mName The mode name
* @param modeChar The mode char
/** constructor
* @param name The mode name
* @param mc The mode char
*/
ChannelMode(ChannelModeName mName, char modeChar);
ChannelMode(const Anope::string &name, char mc);
/** Default destructor
*/
virtual ~ChannelMode();
bool CanSet(User *u) const override;
/** 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 void Check() { }
/** 'wrap' this channel mode and param to the underlying mode and param
*/
virtual bool CanSet(User *u) { return true; }
virtual ChannelMode *Wrap(Anope::string &param);
/** 'unwrap' this mode to our internal representation
*/
ChannelMode *Unwrap(Anope::string &param);
/** called when a mode is being unwrapped, and is asking us if we can unwrap it
*/
virtual ChannelMode *Unwrap(ChannelMode *, Anope::string &param);
};
/** This is a mode for lists, eg b/e/I. These modes should inherit from this
*/
class CoreExport ChannelModeList : public ChannelMode
class CoreExport ChannelModeList
: public ChannelMode
{
public:
/** Default constructor
* @param mName The mode name
* @param modeChar The mode char
public:
/** constructor
* @param name The mode name
* @param mc The mode char
*/
ChannelModeList(ChannelModeName mName, char modeChar);
/** Default destructor
*/
virtual ~ChannelModeList();
ChannelModeList(const Anope::string &name, char mc);
/** Is the mask valid
* @param mask The mask
* @return true for yes, false for no
*/
virtual bool IsValid(const std::string &mask) { return true; }
virtual bool IsValid(Anope::string &mask) const;
/** Add the mask to the channel, this should be overridden
/** Checks if mask affects user
* Should only be used for extbans or other weird ircd-specific things.
* @param u The user
* @param e The entry to match against
* @return true on match
*/
virtual bool Matches(User *u, const Entry *e) { return false; }
/** Called when a mask is added to a channel
* @param chan The channel
* @param mask The mask
*/
virtual void AddMask(Channel *chan, const char *mask) { }
virtual void OnAdd(Channel *chan, const Anope::string &mask) { }
/** Delete the mask from the channel, this should be overridden
/** Called when a mask is removed from a channel
* @param chan The channel
* @param mask The mask
*/
virtual void DelMask(Channel *chan, const char *mask) { }
virtual void OnDel(Channel *chan, const Anope::string &mask) { }
};
/** This is a mode with a paramater, eg +k/l. These modes should use/inherit from this
/** This is a mode with a parameter, eg +k/l. These modes should use/inherit from this
*/
class CoreExport ChannelModeParam : public ChannelMode
class CoreExport ChannelModeParam
: public ChannelMode
{
public:
/** Default constructor
* @param mName The mode name
* @param modeChar The mode char
* @param MinusArg true if this mode sends no arg when unsetting
public:
/** constructor
* @param name The mode name
* @param mc The mode char
* @param minus_no_arg true if this mode sends no arg when unsetting
*/
ChannelModeParam(ChannelModeName mName, char modeChar, bool MinusArg = false);
/** Default destructor
*/
virtual ~ChannelModeParam();
ChannelModeParam(const Anope::string &name, char mc, bool minus_no_arg = false);
/* Should we send an arg when unsetting this mode? */
bool MinusNoArg;
bool minus_no_arg;
/** Is the param valid
* @param value The param
* @return true for yes, false for no
*/
virtual bool IsValid(const std::string &value) { return true; }
virtual bool IsValid(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
class CoreExport ChannelModeStatus
: public ChannelMode
{
public:
public:
/* The symbol, eg @ % + */
char Symbol;
/** Default constructor
* @param mName The mode name
* @param modeChar The mode char
* @param mSymbol The symbol for the mode, eg @ % +
char symbol;
/* The "level" of the mode, used to compare with other modes.
* Used so we know op > halfop > voice etc.
*/
ChannelModeStatus(ChannelModeName mName, char modeChar, char mSymbol);
unsigned level;
/** Default destructor
/** constructor
* @param name The mode name
* @param mc The mode char
* @param msymbol The symbol for the mode, eg @ %
* @param mlevel A level for the mode, which is usually determined by the PREFIX capab
*/
virtual ~ChannelModeStatus();
ChannelModeStatus(const Anope::string &name, char mc, char msymbol, unsigned mlevel);
};
/** Channel mode +b
/** A virtual mode. This mode doesn't natively exist on the IRCd (like extbans),
* but we still have a representation for it.
*/
class CoreExport ChannelModeBan : public ChannelModeList
template<typename T>
class CoreExport ChannelModeVirtual
: public T
{
public:
ChannelModeBan(char modeChar) : ChannelModeList(CMODE_BAN, modeChar) { }
Anope::string base;
ChannelMode *basech;
void AddMask(Channel *chan, const char *mask);
public:
ChannelModeVirtual(const Anope::string &mname, const Anope::string &basename);
void DelMask(Channel *chan, const char *mask);
~ChannelModeVirtual();
void Check() override;
ChannelMode *Wrap(Anope::string &param) override;
ChannelMode *Unwrap(ChannelMode *cm, Anope::string &param) override = 0;
};
/** Channel mode +e
*/
class CoreExport ChannelModeExcept : public ChannelModeList
/* The status a user has on a channel (+v, +h, +o) etc */
class CoreExport ChannelStatus final
{
public:
ChannelModeExcept(char modeChar) : ChannelModeList(CMODE_EXCEPT, modeChar) { }
void AddMask(Channel *chan, const char *mask);
void DelMask(Channel *chan, const char *mask);
Anope::string modes;
public:
ChannelStatus() = default;
ChannelStatus(const Anope::string &modes);
void AddMode(char c);
void DelMode(char c);
bool HasMode(char c) const;
bool Empty() const;
void Clear();
const Anope::string &Modes() const;
Anope::string BuildModePrefixList() const;
};
/** Channel mode +I
*/
class CoreExport ChannelModeInvite : public ChannelModeList
class CoreExport UserModeOperOnly
: public UserMode
{
public:
ChannelModeInvite(char modeChar) : ChannelModeList(CMODE_INVITEOVERRIDE, modeChar) { }
public:
UserModeOperOnly(const Anope::string &mname, char um) : UserMode(mname, um) { }
void AddMask(Channel *chan, const char *mask);
void DelMask(Channel *chan, const char *mask);
bool CanSet(User *u) const override;
};
class CoreExport UserModeNoone
: public UserMode
{
public:
UserModeNoone(const Anope::string &mname, char um) : UserMode(mname, um) { }
bool CanSet(User *u) const override;
};
/** Channel mode +k (key)
*/
class CoreExport ChannelModeKey : public ChannelModeParam
class CoreExport ChannelModeKey
: public ChannelModeParam
{
public:
ChannelModeKey(char modeChar) : ChannelModeParam(CMODE_KEY, modeChar) { }
public:
ChannelModeKey(char mc) : ChannelModeParam("KEY", mc) { }
bool IsValid(const std::string &value);
bool IsValid(Anope::string &value) const override;
};
/** Channel mode +f (flood)
/** This class is used for oper only channel modes
*/
class ChannelModeFlood : public ChannelModeParam
class CoreExport ChannelModeOperOnly
: public ChannelMode
{
public:
ChannelModeFlood(char modeChar, bool minusNoArg = false) : ChannelModeParam(CMODE_FLOOD, modeChar, minusNoArg) { }
bool IsValid(const std::string &value);
};
/** This class is used for channel mode +A (Admin only)
* Only opers can mlock it
*/
class CoreExport ChannelModeAdmin : public ChannelMode
{
public:
ChannelModeAdmin(char modeChar) : ChannelMode(CMODE_ADMINONLY, modeChar) { }
public:
ChannelModeOperOnly(const Anope::string &mname, char mc) : ChannelMode(mname, mc) { }
/* Opers only */
bool CanSet(User *u);
bool CanSet(User *u) const override;
};
/** This class is used for channel mode +O (Opers only)
* Only opers can mlock it
/** This class is used for channel modes only servers may set
*/
class CoreExport ChannelModeOper : public ChannelMode
class CoreExport ChannelModeNoone
: public ChannelMode
{
public:
ChannelModeOper(char modeChar) : ChannelMode(CMODE_OPERONLY, modeChar) { }
public:
ChannelModeNoone(const Anope::string &mname, char mc) : ChannelMode(mname, mc) { }
/* Opers only */
bool CanSet(User *u);
};
/** This class is used for channel mode +r (registered channel)
* No one may mlock r
*/
class CoreExport ChannelModeRegistered : public ChannelMode
{
public:
ChannelModeRegistered(char modeChar) : ChannelMode(CMODE_REGISTERED, modeChar) { }
/* No one mlocks +r */
bool CanSet(User *u);
bool CanSet(User *u) const override;
};
enum StackerType
{
ST_CHANNEL,
ST_USER
};
class StackerInfo
{
public:
/* Modes to be added */
std::list<std::pair<void *, std::string> > AddModes;
/* Modes to be deleted */
std::list<std::pair<void *, std::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(void *Mode, bool Set, const std::string &Param);
};
/** This is mode manager
/** This is the 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
* them on a channel or user at once
*/
class CoreExport ModeManager
class CoreExport ModeManager final
{
protected:
/* List of pairs of user/channels and their stacker info */
static std::list<std::pair<void *, StackerInfo *> > StackerObjects;
public:
/** Get the stacker info for an item, if one doesnt exist it is created
* @param Item The user/channel etc
* @return The stacker info
/* Number of generic channel and user modes we are tracking */
static unsigned GenericChannelModes;
static unsigned GenericUserModes;
/** Add a user mode to Anope
* @param um A UserMode or UserMode derived class
* @return true on success, false on error
*/
static StackerInfo *GetInfo(void *Item);
static bool AddUserMode(UserMode *um);
/** 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
/** Add a channel mode to Anope
* @param cm A ChannelMode or ChannelMode derived class
* @return true on success, false on error
*/
static std::list<std::string> BuildModeStrings(StackerInfo *info);
static bool AddChannelMode(ChannelMode *cm);
/** Add a mode to the stacker, internal use only
* @param bi The client to set the modes from
* @param u The user
* @param um The user mode
* @param Set Adding or removing?
* @param Param A param, if there is one
/** Remove a user mode from Anope
* @param um A UserMode to remove
*/
static void StackerAddInternal(BotInfo *bi, User *u, UserMode *um, bool Set, const std::string &Param);
static void RemoveUserMode(UserMode *um);
/** Add a mode to the stacker, internal use only
* @param bi The client to set the modes from
* @param c The channel
* @param cm The channel mode
* @param Set Adding or removing?
* @param Param A param, if there is one
/** Remove a channel mode from Anope
* @param um A ChanneMode to remove
*/
static void StackerAddInternal(BotInfo *bi, Channel *c, ChannelMode *cm, bool Set, const std::string &Param);
static void RemoveChannelMode(ChannelMode *cm);
/** 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
/** Find a channel mode
* @param mode The mode
* @return The mode class
*/
static void StackerAddInternal(BotInfo *bi, void *Object, void *Mode, bool Set, const std::string &Param, StackerType Type);
static ChannelMode *FindChannelModeByChar(char mode);
public:
/* User modes */
static std::map<char, UserMode *> UserModesByChar;
static std::map<UserModeName, UserMode *> UserModesByName;
/* Channel modes */
static std::map<char, ChannelMode *> ChannelModesByChar;
static std::map<ChannelModeName, ChannelMode *> ChannelModesByName;
/* Although there are two different maps for UserModes and ChannelModes
* the pointers in each are the same. This is used to increase
* efficiency.
*/
/* List of all modes Anope knows about */
static std::list<Mode *> Modes;
/** Find a user mode
* @param mode The mode
* @return The mode class
*/
static UserMode *FindUserModeByChar(char mode);
/** 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);
/** Find a channel mode
* @param name The modename
* @return The mode class
*/
static ChannelMode *FindChannelModeByName(const Anope::string &name);
/** 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 user mode
* @param name The modename
* @return The mode class
*/
static UserMode *FindUserModeByName(const Anope::string &name);
/** Find a channel mode
* @param Mode The mode
* @return The mode class
*/
static ChannelMode *FindChannelModeByChar(char Mode);
/** Gets the channel mode char for a symbol (eg + returns v)
* @param symbol The symbol
* @return The char
*/
static char GetStatusChar(char symbol);
/** 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);
/** Gets the channel mode char for a symbol (eg + returns v)
* @param Value The symbol
* @return The char
*/
static char GetStatusChar(char Value);
static const std::vector<ChannelMode *> &GetChannelModes();
static const std::vector<UserMode *> &GetUserModes();
static const std::vector<ChannelModeStatus *> &GetStatusChannelModesByRank();
static void RebuildStatusModes();
/** 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 std::string &Param = "");
/** 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 Name The channel mode name
* @param Set true for setting, false for removing
* @param Param The param, if there is one
*/
static void StackerAdd(BotInfo *bi, Channel *c, ChannelModeName Name, bool Set, const std::string &Param = "");
/** 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 Mode The mode char
* @param Set true for setting, false for removing
* @param Param The param, if there is one
*/
static void StackerAdd(BotInfo *bi, Channel *c, const char Mode, bool Set, const std::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 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 std::string &Param = "");
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 Name The user mode name
* @param Set true for setting, false for removing
* @param Param The param, if there is one
* @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, UserModeName Name, bool Set, const std::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 Mode The mode to be set
* @param Set true for setting, false for removing
* @param Param The param, if there is one
*/
static void StackerAdd(BotInfo *bi, User *u, const char Mode, bool Set, const std::string &Param = "");
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, channel, or mode from the stacker
*/
static void StackerDel(User *u);
static void StackerDel(Channel *c);
static void StackerDel(Mode *m);
};
/** Represents a mask set on a channel (b/e/I)
*/
class CoreExport Entry final
{
Anope::string name;
Anope::string mask;
public:
unsigned short cidr_len = 0;
int family = 0;
Anope::string nick, user, host, real;
/** Constructor
* @param mode What mode this host is for, can be empty for unknown/no mode
* @param host A full or partial nick!ident@host/cidr#real name mask
*/
Entry(const Anope::string &mode, const Anope::string &host);
/** Get the banned mask for this entry
* @return The mask
*/
Anope::string GetMask() const;
Anope::string GetNUHMask() const;
/** Check if this entry matches a user
* @param u The user
* @param full True to match against a users real host and IP
* @return true on match
*/
bool Matches(User *u, bool full = false) const;
};
+46 -6
View File
@@ -1,11 +1,51 @@
#ifndef MODULE_H
#define MODULE_H
/*
*
* (C) 2003-2024 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
*
* Based on the original code of Epona by Lara.
* Based on the original code of Services by Andy Church.
*/
#include "services.h"
#pragma once
#include "access.h"
#include "account.h"
#include "anope.h"
#include "base.h"
#include "bots.h"
#include "channels.h"
#include "commands.h"
#include "config.h"
#include "extensible.h"
#include "hashcomp.h"
#include "language.h"
#include "lists.h"
#include "logger.h"
#include "mail.h"
#include "memo.h"
#include "messages.h"
#include "modes.h"
#include "modules.h"
#include "version.h"
#endif
#include "opertype.h"
#include "protocol.h"
#include "regexpr.h"
#include "regchannel.h"
#include "serialize.h"
#include "servers.h"
#include "service.h"
#include "services.h"
#include "socketengine.h"
#include "sockets.h"
#include "threadengine.h"
#include "timers.h"
#include "uplink.h"
#include "users.h"
#include "xline.h"
#include "modules/pseudoclients/chanserv.h"
#include "modules/pseudoclients/global.h"
#include "modules/pseudoclients/memoserv.h"
#include "modules/pseudoclients/nickserv.h"
+687 -870
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