Changeset 760 in code


Ignore:
Timestamp:
Dec 9, 2021, 10:21:08 PM (3 years ago)
Author:
contact
Message:

Add support for downstream multi-line AUTHENTICATE commands

Useful for long passwords.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/downstream.go

    r758 r760  
    22
    33import (
     4        "bytes"
    45        "context"
    56        "crypto/tls"
     
    276277        server                       sasl.Server
    277278        plainUsername, plainPassword string
     279        pendingResp                  bytes.Buffer
    278280}
    279281
     
    967969                dc.sasl = &downstreamSASL{server: server}
    968970        } else {
    969                 // TODO: multi-line messages
    970                 if msg.Params[0] == "+" {
    971                         resp = nil
    972                 } else if resp, err = base64.StdEncoding.DecodeString(msg.Params[0]); err != nil {
     971                chunk := msg.Params[0]
     972                if chunk == "+" {
     973                        chunk = ""
     974                }
     975
     976                if dc.sasl.pendingResp.Len()+len(chunk) > 10*1024 {
     977                        return nil, ircError{&irc.Message{
     978                                Prefix:  dc.srv.prefix(),
     979                                Command: irc.ERR_SASLFAIL,
     980                                Params:  []string{dc.nick, "Response too long"},
     981                        }}
     982                }
     983
     984                dc.sasl.pendingResp.WriteString(chunk)
     985
     986                if len(chunk) == 400 {
     987                        return nil, nil // Multi-line response, wait for the next command
     988                }
     989
     990                resp, err = base64.StdEncoding.DecodeString(dc.sasl.pendingResp.String())
     991                if err != nil {
    973992                        return nil, ircError{&irc.Message{
    974993                                Prefix:  dc.srv.prefix(),
     
    977996                        }}
    978997                }
     998
     999                dc.sasl.pendingResp.Reset()
    9791000        }
    9801001
Note: See TracChangeset for help on using the changeset viewer.