[822] | 1 | package sasl
|
---|
| 2 |
|
---|
| 3 | // The ANONYMOUS mechanism name.
|
---|
| 4 | const Anonymous = "ANONYMOUS"
|
---|
| 5 |
|
---|
| 6 | type anonymousClient struct {
|
---|
| 7 | Trace string
|
---|
| 8 | }
|
---|
| 9 |
|
---|
| 10 | func (c *anonymousClient) Start() (mech string, ir []byte, err error) {
|
---|
| 11 | mech = Anonymous
|
---|
| 12 | ir = []byte(c.Trace)
|
---|
| 13 | return
|
---|
| 14 | }
|
---|
| 15 |
|
---|
| 16 | func (c *anonymousClient) Next(challenge []byte) (response []byte, err error) {
|
---|
| 17 | return nil, ErrUnexpectedServerChallenge
|
---|
| 18 | }
|
---|
| 19 |
|
---|
| 20 | // A client implementation of the ANONYMOUS authentication mechanism, as
|
---|
| 21 | // described in RFC 4505.
|
---|
| 22 | func NewAnonymousClient(trace string) Client {
|
---|
| 23 | return &anonymousClient{trace}
|
---|
| 24 | }
|
---|
| 25 |
|
---|
| 26 | // Get trace information from clients logging in anonymously.
|
---|
| 27 | type AnonymousAuthenticator func(trace string) error
|
---|
| 28 |
|
---|
| 29 | type anonymousServer struct {
|
---|
| 30 | done bool
|
---|
| 31 | authenticate AnonymousAuthenticator
|
---|
| 32 | }
|
---|
| 33 |
|
---|
| 34 | func (s *anonymousServer) Next(response []byte) (challenge []byte, done bool, err error) {
|
---|
| 35 | if s.done {
|
---|
| 36 | err = ErrUnexpectedClientResponse
|
---|
| 37 | return
|
---|
| 38 | }
|
---|
| 39 |
|
---|
| 40 | // No initial response, send an empty challenge
|
---|
| 41 | if response == nil {
|
---|
| 42 | return []byte{}, false, nil
|
---|
| 43 | }
|
---|
| 44 |
|
---|
| 45 | s.done = true
|
---|
| 46 |
|
---|
| 47 | err = s.authenticate(string(response))
|
---|
| 48 | done = true
|
---|
| 49 | return
|
---|
| 50 | }
|
---|
| 51 |
|
---|
| 52 | // A server implementation of the ANONYMOUS authentication mechanism, as
|
---|
| 53 | // described in RFC 4505.
|
---|
| 54 | func NewAnonymousServer(authenticator AnonymousAuthenticator) Server {
|
---|
| 55 | return &anonymousServer{authenticate: authenticator}
|
---|
| 56 | }
|
---|