Repository navigation
Fix services, SASL order, and labeled list replies - #43
Merged
Merged
Conversation
NickServ SET PASSWORD rotates an identified account after checking the current password, using a fresh salt. NickServ and ChanServ cannot be taken as nicks or account names. A founder is opped when they identify on a channel they already joined, and ChanServ OP restores that status after a deop. Logout does not remove it. SASL PLAIN is accepted while capability negotiation is still open, which is the order clients send. Registration is finished only once the welcome burst is released. LIST, WHO, NAMES, and the mode-list replies are queued as one write, so a full reply queue waits instead of dropping the tail. SAFELIST and ELIST=M are advertised. batch and labeled-response are negotiated independently; a label is applied only when both are on, and a client's own PRIVMSG is not labeled. Fixes #37 Fixes #38 Fixes #39 Fixes #40 Fixes #41 Fixes #42
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
SET PASSWORD <current> <new>rotates an identified account. The current password is required, the new hash uses a fresh salt, and the password is not logged.HELPlists the command. AccountDROPis intentionally not added: founder rights are still compared by name, so a dropped name must not be re-registered into someone else's channels.NickServandChanServare refused with432(Reserved nickname) and cannot be registered as accounts. Comparison uses the rfc1459 fold. PRIVMSG to those names was already intercepted, so this closes impersonation rather than credential theft.MODE +opath JOIN already uses./msg ChanServ OP #channelrestores ops after a deop for an identified founder who is on the channel and is not already op. Logout does not deop.HELPlistsOP.907is sent when registration has finished (NICK/USERpaired and capability negotiation closed) or when this connection already holds an account.AUTHENTICATEduringCAPnegotiation works in the usual order:CAP LS,NICK,USER,CAP REQ sasl,AUTHENTICATE,CAP END.LIST/WHO/NAMES/mode lists cannot lose their closing numeric.SAFELISTandELIST=Mare on the existing005(the line stays under 510 bytes).U/C/T/Nare not advertised.321isChannel :Users Name.batchandlabeled-responseare advertised and acknowledged independently. Labeling runs only when both are enabled. A valid label is opaque, required, and at most 64 bytes; an invalid label is ignored and the command still runs. Zero replies become one labeledACK(not for a client's ownPRIVMSG/NOTICE). One reply carries@label. Several are onelabeled-responsebatch: the label is on the open,@batchis merged onto the inner lines, and the close is unlabeled. Client tags are not relayed.Fixes #37
Fixes #38
Fixes #39
Fixes #40
Fixes #41
Fixes #42
Test plan
cargo test --release --locked -- --test-threads=1(lib 114, e2e 13, ircv3 28, services 6, and the rest of the suite, 0 failed)tests/services.rs: reserved nicks, password rotation, SASL afterNICK/USER, founder op on identify, ChanServOP,LISTmask and321header, labeledPING/PONG/LIST/PRIVMSG