...

Source file src/github.com/go-ldap/ldap/v3/compare.go

Documentation: github.com/go-ldap/ldap/v3

     1  package ldap
     2  
     3  import (
     4  	"fmt"
     5  
     6  	ber "github.com/go-asn1-ber/asn1-ber"
     7  )
     8  
     9  // CompareRequest represents an LDAP CompareRequest operation.
    10  type CompareRequest struct {
    11  	DN        string
    12  	Attribute string
    13  	Value     string
    14  }
    15  
    16  func (req *CompareRequest) appendTo(envelope *ber.Packet) error {
    17  	pkt := ber.Encode(ber.ClassApplication, ber.TypeConstructed, ApplicationCompareRequest, nil, "Compare Request")
    18  	pkt.AppendChild(ber.NewString(ber.ClassUniversal, ber.TypePrimitive, ber.TagOctetString, req.DN, "DN"))
    19  
    20  	ava := ber.Encode(ber.ClassUniversal, ber.TypeConstructed, ber.TagSequence, nil, "AttributeValueAssertion")
    21  	ava.AppendChild(ber.NewString(ber.ClassUniversal, ber.TypePrimitive, ber.TagOctetString, req.Attribute, "AttributeDesc"))
    22  	ava.AppendChild(ber.Encode(ber.ClassUniversal, ber.TypePrimitive, ber.TagOctetString, req.Value, "AssertionValue"))
    23  
    24  	pkt.AppendChild(ava)
    25  
    26  	envelope.AppendChild(pkt)
    27  
    28  	return nil
    29  }
    30  
    31  // Compare checks to see if the attribute of the dn matches value. Returns true if it does otherwise
    32  // false with any error that occurs if any.
    33  func (l *Conn) Compare(dn, attribute, value string) (bool, error) {
    34  	msgCtx, err := l.doRequest(&CompareRequest{
    35  		DN:        dn,
    36  		Attribute: attribute,
    37  		Value:     value,
    38  	})
    39  	if err != nil {
    40  		return false, err
    41  	}
    42  	defer l.finishMessage(msgCtx)
    43  
    44  	packet, err := l.readPacket(msgCtx)
    45  	if err != nil {
    46  		return false, err
    47  	}
    48  
    49  	if packet.Children[1].Tag == ApplicationCompareResponse {
    50  		err := GetLDAPError(packet)
    51  
    52  		switch {
    53  		case IsErrorWithCode(err, LDAPResultCompareTrue):
    54  			return true, nil
    55  		case IsErrorWithCode(err, LDAPResultCompareFalse):
    56  			return false, nil
    57  		default:
    58  			return false, err
    59  		}
    60  	}
    61  	return false, fmt.Errorf("unexpected Response: %d", packet.Children[1].Tag)
    62  }
    63  

View as plain text