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))
|
(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)))
|
(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))
|
(if-let* ((c (erc-sasl--state-client erc-sasl--state))
|
||||||
(m (sasl-mechanism-name (sasl-client-mechanism c))))
|
(m (sasl-mechanism-name (sasl-client-mechanism c))))
|
||||||
(progn
|
(progn
|
||||||
(erc-server-send "CAP REQ :sasl")
|
(erc-server-send (if erc-sasl--send-cap-ls "CAP LS" "CAP REQ :sasl"))
|
||||||
(if (and erc-session-password
|
(let ((erc-session-password
|
||||||
(eq :password (alist-get 'password erc-sasl--options)))
|
(and erc-session-password
|
||||||
(let (erc-session-password)
|
(not (eq :password (alist-get 'password erc-sasl--options)))
|
||||||
(erc-login))
|
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))
|
(erc-login))
|
||||||
|
(when erc-sasl--send-cap-ls
|
||||||
|
(erc-server-send "CAP REQ :sasl"))
|
||||||
(erc-server-send (format "AUTHENTICATE %s" m)))
|
(erc-server-send (format "AUTHENTICATE %s" m)))
|
||||||
(erc-sasl--destroy erc-server-process)))
|
(erc-sasl--destroy erc-server-process)))
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
;; -*- mode: lisp-data; -*-
|
;; -*- mode: lisp-data; -*-
|
||||||
((cap 10 "CAP REQ :sasl"))
|
((cap 10 "CAP REQ :sasl"))
|
||||||
((nick 10 "NICK tester`"))
|
((nick 10 "NICK tester`"))
|
||||||
((user 10 "USER tester 0 * :tester"))
|
((user 10 "USER tester` 0 * :tester"))
|
||||||
|
|
||||||
((authenticate 10 "AUTHENTICATE PLAIN")
|
((authenticate 10 "AUTHENTICATE PLAIN")
|
||||||
(0.0 ":irc.foonet.org CAP * ACK sasl")
|
(0.0 ":irc.foonet.org CAP * ACK sasl")
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue