38 lines
945 B
Go
38 lines
945 B
Go
|
package ldap
|
||
|
|
||
|
import (
|
||
|
"errors"
|
||
|
|
||
|
ber "github.com/go-asn1-ber/asn1-ber"
|
||
|
)
|
||
|
|
||
|
var ErrConnUnbound = NewError(ErrorNetwork, errors.New("ldap: connection is closed"))
|
||
|
|
||
|
type unbindRequest struct{}
|
||
|
|
||
|
func (unbindRequest) appendTo(envelope *ber.Packet) error {
|
||
|
envelope.AppendChild(ber.Encode(ber.ClassApplication, ber.TypePrimitive, ApplicationUnbindRequest, nil, ApplicationMap[ApplicationUnbindRequest]))
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
// Unbind will perform an unbind request. The Unbind operation
|
||
|
// should be thought of as the "quit" operation.
|
||
|
// See https://datatracker.ietf.org/doc/html/rfc4511#section-4.3
|
||
|
func (l *Conn) Unbind() error {
|
||
|
if l.IsClosing() {
|
||
|
return ErrConnUnbound
|
||
|
}
|
||
|
|
||
|
_, err := l.doRequest(unbindRequest{})
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
// Sending an unbindRequest will make the connection unusable.
|
||
|
// Pending requests will fail with:
|
||
|
// LDAP Result Code 200 "Network Error": ldap: response channel closed
|
||
|
l.Close()
|
||
|
|
||
|
return nil
|
||
|
}
|