Don't send erc-sasl-user as USER command argument
* lisp/erc/erc-sasl.el (erc-sasl--send-cap-ls): Add internal switch for sending an opening "CAP LS". The rationale for not enabling this by default is twofold: one, it more strongly implies that ERC supports IRCv3 client capability negotiation, which is somewhat disingenuous; and, two, We'd still be "faking it" by firing and forgetting, and more balls in the air makes things less predictable. (erc--register-connection): Possibly send a "CAP LS" before anything depending on the value of `erc-sasl--send-cap-ls'. Also, don't attempt to send `erc-session-username' when it holds an SASL username because the latter may contain protocol-defying characters. * test/lisp/erc/resources/base/local-modules/fourth.eld: change user parameter of "USER" command to reflect nick when `erc-sasl-user' is set to `:user'. (Bug#59976.)
This commit is contained in:
parent
f0c9088878
commit
102a3e3b44
2 changed files with 20 additions and 7 deletions
|
@ -414,17 +414,30 @@ This doesn't solicit or validate a suite of supported mechanisms."
|
|||
" "))
|
||||
(erc-sasl--destroy proc))
|
||||
|
||||
(defvar erc-sasl--send-cap-ls nil
|
||||
"Whether to send an opening \"CAP LS\" command.
|
||||
This is an escape hatch for picky servers. If you need it turned
|
||||
into a user option, please let ERC know via \\[erc-bug].
|
||||
Otherwise, expect it to disappear in subsequent versions.")
|
||||
|
||||
(cl-defmethod erc--register-connection (&context (erc-sasl-mode (eql t)))
|
||||
"Send speculative/pipelined CAP and AUTHENTICATE and hope for the best."
|
||||
"Send speculative CAP and pipelined AUTHENTICATE and hope for the best."
|
||||
(if-let* ((c (erc-sasl--state-client erc-sasl--state))
|
||||
(m (sasl-mechanism-name (sasl-client-mechanism c))))
|
||||
(progn
|
||||
(erc-server-send "CAP REQ :sasl")
|
||||
(if (and erc-session-password
|
||||
(eq :password (alist-get 'password erc-sasl--options)))
|
||||
(let (erc-session-password)
|
||||
(erc-login))
|
||||
(erc-server-send (if erc-sasl--send-cap-ls "CAP LS" "CAP REQ :sasl"))
|
||||
(let ((erc-session-password
|
||||
(and erc-session-password
|
||||
(not (eq :password (alist-get 'password erc-sasl--options)))
|
||||
erc-session-password))
|
||||
(erc-session-username
|
||||
;; The username may contain a colon or a space
|
||||
(if (eq :user (alist-get 'user erc-sasl--options))
|
||||
(erc-current-nick)
|
||||
erc-session-username)))
|
||||
(erc-login))
|
||||
(when erc-sasl--send-cap-ls
|
||||
(erc-server-send "CAP REQ :sasl"))
|
||||
(erc-server-send (format "AUTHENTICATE %s" m)))
|
||||
(erc-sasl--destroy erc-server-process)))
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
;; -*- mode: lisp-data; -*-
|
||||
((cap 10 "CAP REQ :sasl"))
|
||||
((nick 10 "NICK tester`"))
|
||||
((user 10 "USER tester 0 * :tester"))
|
||||
((user 10 "USER tester` 0 * :tester"))
|
||||
|
||||
((authenticate 10 "AUTHENTICATE PLAIN")
|
||||
(0.0 ":irc.foonet.org CAP * ACK sasl")
|
||||
|
|
Loading…
Add table
Reference in a new issue