When checking for an E-Line match, we want to actually check for a
current match even if we previously matched and are set exempt.
This fixes situations where you have an E-Lined CGI:IRC address,
a G-Lined IP range for some area/host/etc and a smaller E-Lined
IP range for known good clients. Currently when CGI:IRC changes
the IP, E-Lines are rechecked but because the user is already exempt
(from the CGI:IRC E-Line), they are set no longer exempt and match
a G-Line, when they should match an E-Line.
This exact change has been done before in commit 'c8b344e' and shortly
reverted in 'c490a90' to fix issue #989 (CGI:IRC users remaining exempt
when the CGI:IRC address is E-Lined but they are not).
The actual cause to this issue was likely that the user's hostname was
not changed from the CGI:IRC hostname/IP prior to rechecking E-Lines.
This is being fixed in a separate commit.
ChangeIP() calls SetClientIP() which revalidates whether the user
matches an ELine. However, because the hostname has not changed yet
the user may incorrectly be marked as non-exempt.
Since CGI:IRC calls it's 'ChangeIP()' either from 'OnCheckReady()'
or 'OnUserRegister()', both of which are called after the user has
sent NICK/USER, we can safely skip re-setting the ExtItem prior to
this point.
This skips the first 'OnSetUserIP()' from 'User::AddUser()' as
the 'OnSetConnectClass()' catch handles the initial setting.
Sending history to some bots can cause problems as without the
IRCv3 chathistory batch they have no way of knowing what messages
are history and what they should respond to.
Closes#1450.
- Remind admins that not setting a DIE/RESTART password does not
disable use of those commands.
- Remove references to 1.2 and modules being able to create custom
logging methods. This was never implemented in the 2.0 branch.
- Remove references to an SASL improvement that was reverted.
- Update various InspIRCd website links to use HTTPS over HTTP.
- Update a link to the IRCv3 website to point to the new website.
When SASL is properly configured with a 'target' server, we are able
to inform the client when the message fails to send.
Currently if a target is configured and it is offline, no response is
sent. This can cause some clients to time out while waiting for a response.
If a target isn't configured, behaviour will not change with this commit.
The default of '*' will still send to all servers.
Updated example config with 'target' variable.
This prevents a bug where we send malformed messages to the client
when dlerror() returns an error message containing more than one
line. This has been observed on macOS but probably will happen on
other UNIX systems too.
This also fixes a potential problem where dlerror() returns NULL
and converting it to std::string causes a crash. I can't see any
way that this might happen but it is better to be safe than sorry.
This will almost always be % but if the server admin is using the
customprefix module and remaps it to something else messages will
not be sent out correctly.