Calls to CIRCSock::Quit() eventually result in the object's destructor
being called, which itself calls CIRCSock::Quit() again. Avoid sending
multiple quit messages to the remote server by checking if the
underlying socket is already marked for closing.
When the module is loaded globally or per-user the
`m_bTemporaryAcceptMotd` would be used to store state on connecting to
an MOTD which could lead to timing issues of a full or partial MOTD
being incorrectly sent to another server while another user requested
motd via the module.
This commit will now track this state per IRCSock so if another
connected user requests an MOTD and another server sends an MOTD it will
not lead to MOTDs being incorrectly unblocked.
The output style of tables was recently changed. This broke the
ControlpanelModule integration test. Adapt some of the patterns used so
that they work again.
Signed-off-by: Uli Schlachter <psychon@znc.in>
Previously, "more or less unrelated" things would fail. After this
change, also a message is printing that gives a hint on what went wrong.
Signed-off-by: Uli Schlachter <psychon@znc.in>
Don't use a key which is a valid nickname, now changed to "@nick-prefix@" instead.
If you had loaded the crypt module before, the old settings will be converted.
Also check if the nick-prefix and status-prefix aren't the same or overlapping, "*" or "." are then used depending on either value. If they would be the same, you would be messaging a module instead of a user.
And if they'd overlap, depending on the nick, you could be messaging a module as well.
The test wrongly succeeded in C instead of correctly failing in C++
That caused off_t to be different types in core and in modpython on
32-bit systems, and modpython couldn't load with undefined symbol.
Found using UBSan.
Full fix would require adding visibility attribute to CUser,
CIRCNetwork, CModule, CModuleEntry, CModInfo *and* make sure these
attributes are visible to enough code.
The second statement is more difficult to fulfill, because forward
declaration of CUser is not enough, because the attribute is on class
definition. So Modules.h would need to include many other includes.
Probably it should be changed at some point.
See http://stackoverflow.com/questions/27976687/clangs-ubsan-function-pointer-is-this-illegal