summary refs log tree commit diff
path: root/client.c (follow)
Commit message (Collapse)AuthorAge
* Intercept client PONGJune McEnroe2021-10-03
| | | | | | | Since pounce responds to server PINGs itself and doesn't relay them to clients, the only PING a client could be responding to is one of pounce's, in which case it doesn't make sense to relay the PONG to the server.
* Track client idle timeJune McEnroe2021-10-03
| | | | Bumped on both send and receive.
* Log IRC to standard output with -vJune McEnroe2021-10-02
| | | | | So that it can actually be logged to a file separate from any errors or status messages. Also make sure only LF is used when logging.
* Remove redundant clientDiff functionJune McEnroe2021-09-02
|
* Use CapBits as length of FiltersJune McEnroe2021-08-28
| | | | | This should hopefully prevent accidentally using CapSomething rather than CapSomethingBit as an index in the future.
* Avoid overwriting manual AWAY messagesJune McEnroe2021-08-21
| | | | | | Setting an AWAY message then disconnecting will no longer replace the AWAY message with the default one. Reconnecting continues to always clear AWAY.
* Replace verbose colors with two types of arrowsJune McEnroe2021-08-20
| | | | | | While the colors were easy to identify in blocks, the meaning of arrows is easier to remember, and survive logs being pasted for debugging.
* Use seprintf for snip, removing strlcpynJune McEnroe2021-06-09
|
* Use seprintf for reserializeJune McEnroe2021-06-09
|
* Refactor hasTag to be usable in more placesJune McEnroe2021-01-24
|
* Support echo-message capabilityJune McEnroe2021-01-24
| | | | | | | Only request it with labeled-response, since it is impossible to correlate messages to clients without. For clients without echo-message, synthesize a label on PRIVMSG/NOTICE/TAGMSG, then filter out received messages with that label.
* Add lazy client registration timeoutJune McEnroe2020-11-20
| | | | | | I don't think this is worth adding a configuration option for since real clients will definitely accomplish registration faster than 10s and it's long enough to even type out manually for testing.
* Only allow clients to AUTHENTICATE if using a certJune McEnroe2020-11-16
| | | | | | Otherwise the successful authentication message can leak information to unauthenticated clients when both certificate and password authentication are enabled.
* Set client sockets non-blockingJune McEnroe2020-11-16
| | | | | | | | | | | | | | | | | | | | | Except for during writes. This prevents pounce getting blocked on a client sending only a partial TLS record, for example. Writes still need to block because pounce doesn't have a way to resume them. (And it would do so by having a buffer, but sockets already have a send buffer, so what would be the point of that?) I don't think it should be a problem since outside of stateSync, writes only happen when poll returns POLLOUT. I feel like ideally SO_SNDLOWAT would be set to guarantee a full IRC message can always be written on POLLOUT, but since it's actually TLS records being sent, it's not obvious what the size would be. I'm also making an assumption here that tls_read returning TLS_WANT_POLLOUT is unlikely to happen, since I don't actually set pollfd.events based on that. I'm not sure how wanting to resume a tls_read after a POLLOUT could be cleanly handled. I'm just going to hope that if it does happen, the regular poll loop will eventually sort it out...
* Make struct Client publicJune McEnroe2020-11-14
|
* Wait for POLLIN to do client tls_handshakeJune McEnroe2020-11-13
| | | | | | | | | | | Otherwise a client could cause pounce to hang (since the sockets are left blocking) by opening a connection without handshaking! Oops, that's pretty bad. Since the sockets are still blocking, a hang can still be caused by a client sending a partial handshake then waiting. More fixes to follow. pounce is slightly protected from this when used with calico, as it applies a timeout to waiting for the ClientHello.
* Refactor reserialization and client self-producingJune McEnroe2020-08-31
|
* Add support for OpenBSDJune McEnroe2020-08-27
|
* Fix unintended interception of NICK after registrationJune McEnroe2020-08-13
| | | | Another bug caused by trying to support broken clients. I'm annoyed.
* Implement stub of palaverapp.com capabilityJune McEnroe2020-08-11
| | | | | | This needs to be documented! But the documentation won't make any sense until there's something that can implement the actual functionality of the capability.
* Refactor intercept to use Handlers and fix QUIT w/o message 1.4p1June McEnroe2020-08-10
| | | | | | The change to support broken clients with bad line endings broke the interception of QUIT with no message parameter, because the CR is part of the length passed to intercept.
* Refactor clientCA and clientSTS as clientCapsJune McEnroe2020-08-10
|
* Say "OpenSSL" in additional permission noticesJune McEnroe2020-08-06
| | | | LibreSSL is "a modified version of that library".
* Handle broken clients sending only \nJune McEnroe2020-08-06
| | | | | Sigh. The robustness principle enables the proliferation of worse quality software.
* Use snprintf instead of strlcpyJune McEnroe2020-07-31
|
* Add additional permission for linking with LibreSSLJune McEnroe2020-06-08
| | | | https://www.gnu.org/licenses/gpl-faq.en.html#GPLIncompatibleLibs
* Add server send queueing with time intervalJune McEnroe2020-05-11
| | | | | | | | | This addresses pounce getting killed with "Excess flood" when it sends NAMES commands for too many channels when a client connects. These commands, as well as automatic AWAY commands, are by default throttled to 5 per second. Tested on freenode with 36 channels and 200ms interval.
* Advertise STS policyJune McEnroe2020-02-27
| | | | | Duration is set to INT_MAX since pounce will never accept cleartext connections.
* Set consumer pos with CAP REQ causal.agency/consumer=nJune McEnroe2020-02-27
| | | | | So the spec doesn't say I can use cap values in CAP REQ. But it also doesn't explicitly say I can't.
* Rename causal.agency/consumer tag causal.agency/posJune McEnroe2020-02-27
|
* Add 1 to consumer ID tagsJune McEnroe2020-02-27
| | | | It should indicate the position after having seen the tagged message.
* Add causal.agency/consumer capabilityJune McEnroe2020-02-27
|
* Send CAP LS 302 to the serverJune McEnroe2020-02-27
|
* Properly treat CAP LS version as a numberJune McEnroe2020-02-27
|
* Support CAP LS 302 from clientsJune McEnroe2020-02-27
|
* Support cap-notifyJune McEnroe2020-02-27
|
* Support setnameJune McEnroe2020-02-26
|
* Support labeled-responseJune McEnroe2020-02-26
|
* Support batchJune McEnroe2020-02-26
|
* Clean up intercept tag skipJune McEnroe2020-02-26
| | | | "Tag skip" like it's a speedrun :3
* Also skip the origin in wordcmpJune McEnroe2020-02-26
| | | | I think for some caps we need to filter messages without origins.
* Use %n for tags when formatting intercepted PRIVMSG/NOTICEJune McEnroe2020-02-26
|
* Tweak buffer sizesJune McEnroe2020-02-26
| | | | | | Filter functions are dealing with lines not including CRLF, so they already have extra space. serverFormat is using snprintf which wants to always write a NUL at the end of the string.
* Add time tag to lines missing itJune McEnroe2020-02-25
| | | | | If a line was produced by another client, it won't have one from the server.
* Support message-tagsJune McEnroe2020-02-25
|
* Request server-time from the server and filter tags for clientsJune McEnroe2020-02-25
| | | | | | | | This doesn't yet, but it will break the "robustness principle" according to which a server "SHOULD NOT" assume that a client capable of parsing one tag is capable of parsing all tags. In future, TagCaps will have all other caps that use tags ORed into it, and only if the client supports none of them will tags be filtered out.
* Bump buffer sizes to allow for tagsJune McEnroe2020-02-25
| | | | | I still think this limit is unreasonably large in comparison to 512 for the actual message.
* Remove bad assertJune McEnroe2020-02-18
| | | | | If there's no room left in the buffer, tls_read will return 0 (since we gave it zero length to read into) and cause client->error to be set.
* Add option to set local client CAJune McEnroe2020-01-12
| | | | | | | | | This is a little bit messy. Allows setting either -A or -W or both. Implements SASL EXTERNAL for clients that expect that when connecting with a client certificate. Need to test that reloading still works inside capsicum, since I suspect that rewind call may be blocked.
* Add a vendor capability for passive clientsJune McEnroe2020-01-10
| | | | | | This way things like litterbox can do it automatically without having to be configured with a hyphen-prefixed username, which is usually invalid anywhere else.