package message import "fmt" // // LDAPResult ::= SEQUENCE { // resultCode ENUMERATED { // success (0), // operationsError (1), // protocolError (2), // timeLimitExceeded (3), // sizeLimitExceeded (4), // compareFalse (5), // compareTrue (6), // authMethodNotSupported (7), // strongerAuthRequired (8), // -- 9 reserved -- // referral (10), // adminLimitExceeded (11), // unavailableCriticalExtension (12), // confidentialityRequired (13), // saslBindInProgress (14), // // // //Sermersheim Standards Track [Page 55] // // //RFC 4511 LDAPv3 June 2006 // // // noSuchAttribute (16), // undefinedAttributeType (17), // inappropriateMatching (18), // constraintViolation (19), // attributeOrValueExists (20), // invalidAttributeSyntax (21), // -- 22-31 unused -- // noSuchObject (32), // aliasProblem (33), // invalidDNSyntax (34), // -- 35 reserved for undefined isLeaf -- // aliasDereferencingProblem (36), // -- 37-47 unused -- // inappropriateAuthentication (48), // invalidCredentials (49), // insufficientAccessRights (50), // busy (51), // unavailable (52), // unwillingToPerform (53), // loopDetect (54), // -- 55-63 unused -- // namingViolation (64), // objectClassViolation (65), // notAllowedOnNonLeaf (66), // notAllowedOnRDN (67), // entryAlreadyExists (68), // objectClassModsProhibited (69), // -- 70 reserved for CLDAP -- // affectsMultipleDSAs (71), // -- 72-79 unused -- // other (80), // ... }, // matchedDN LDAPDN, // diagnosticMessage LDAPString, // referral [3] Referral OPTIONAL } func readTaggedLDAPResult(bytes *Bytes, class int, tag int) (ret LDAPResult, err error) { err = bytes.ReadSubBytes(class, tag, ret.readComponents) if err != nil { err = LdapError{fmt.Sprintf("readTaggedLDAPResult:\n%s", err.Error())} } return } func readLDAPResult(bytes *Bytes) (ldapresult LDAPResult, err error) { return readTaggedLDAPResult(bytes, classUniversal, tagSequence) } func (ldapresult *LDAPResult) readComponents(bytes *Bytes) (err error) { ldapresult.resultCode, err = readENUMERATED(bytes, EnumeratedLDAPResultCode) if err != nil { err = LdapError{fmt.Sprintf("readComponents:\n%s", err.Error())} return } ldapresult.matchedDN, err = readLDAPDN(bytes) if err != nil { err = LdapError{fmt.Sprintf("readComponents:\n%s", err.Error())} return } ldapresult.diagnosticMessage, err = readLDAPString(bytes) if err != nil { err = LdapError{fmt.Sprintf("readComponents:\n%s", err.Error())} return } if bytes.HasMoreData() { var tag TagAndLength tag, err = bytes.PreviewTagAndLength() if err != nil { err = LdapError{fmt.Sprintf("readComponents:\n%s", err.Error())} return } if tag.Tag == TagLDAPResultReferral { var referral Referral referral, err = readTaggedReferral(bytes, classContextSpecific, TagLDAPResultReferral) if err != nil { err = LdapError{fmt.Sprintf("readComponents:\n%s", err.Error())} return } ldapresult.referral = referral.Pointer() } } return } // // LDAPResult ::= SEQUENCE { // resultCode ENUMERATED { // success (0), // operationsError (1), // protocolError (2), // timeLimitExceeded (3), // sizeLimitExceeded (4), // compareFalse (5), // compareTrue (6), // authMethodNotSupported (7), // strongerAuthRequired (8), // -- 9 reserved -- // referral (10), // adminLimitExceeded (11), // unavailableCriticalExtension (12), // confidentialityRequired (13), // saslBindInProgress (14), // // // //Sermersheim Standards Track [Page 55] // // //RFC 4511 LDAPv3 June 2006 // // // noSuchAttribute (16), // undefinedAttributeType (17), // inappropriateMatching (18), // constraintViolation (19), // attributeOrValueExists (20), // invalidAttributeSyntax (21), // -- 22-31 unused -- // noSuchObject (32), // aliasProblem (33), // invalidDNSyntax (34), // -- 35 reserved for undefined isLeaf -- // aliasDereferencingProblem (36), // -- 37-47 unused -- // inappropriateAuthentication (48), // invalidCredentials (49), // insufficientAccessRights (50), // busy (51), // unavailable (52), // unwillingToPerform (53), // loopDetect (54), // -- 55-63 unused -- // namingViolation (64), // objectClassViolation (65), // notAllowedOnNonLeaf (66), // notAllowedOnRDN (67), // entryAlreadyExists (68), // objectClassModsProhibited (69), // -- 70 reserved for CLDAP -- // affectsMultipleDSAs (71), // -- 72-79 unused -- // other (80), // ... }, // matchedDN LDAPDN, // diagnosticMessage LDAPString, // referral [3] Referral OPTIONAL } func (l LDAPResult) write(bytes *Bytes) (size int) { size += l.writeComponents(bytes) size += bytes.WriteTagAndLength(classUniversal, isCompound, tagSequence, size) return } func (l LDAPResult) writeComponents(bytes *Bytes) (size int) { if l.referral != nil { size += l.referral.writeTagged(bytes, classContextSpecific, TagLDAPResultReferral) } size += l.diagnosticMessage.write(bytes) size += l.matchedDN.write(bytes) size += l.resultCode.write(bytes) return } // // LDAPResult ::= SEQUENCE { // resultCode ENUMERATED { // success (0), // operationsError (1), // protocolError (2), // timeLimitExceeded (3), // sizeLimitExceeded (4), // compareFalse (5), // compareTrue (6), // authMethodNotSupported (7), // strongerAuthRequired (8), // -- 9 reserved -- // referral (10), // adminLimitExceeded (11), // unavailableCriticalExtension (12), // confidentialityRequired (13), // saslBindInProgress (14), // // // //Sermersheim Standards Track [Page 55] // // //RFC 4511 LDAPv3 June 2006 // // // noSuchAttribute (16), // undefinedAttributeType (17), // inappropriateMatching (18), // constraintViolation (19), // attributeOrValueExists (20), // invalidAttributeSyntax (21), // -- 22-31 unused -- // noSuchObject (32), // aliasProblem (33), // invalidDNSyntax (34), // -- 35 reserved for undefined isLeaf -- // aliasDereferencingProblem (36), // -- 37-47 unused -- // inappropriateAuthentication (48), // invalidCredentials (49), // insufficientAccessRights (50), // busy (51), // unavailable (52), // unwillingToPerform (53), // loopDetect (54), // -- 55-63 unused -- // namingViolation (64), // objectClassViolation (65), // notAllowedOnNonLeaf (66), // notAllowedOnRDN (67), // entryAlreadyExists (68), // objectClassModsProhibited (69), // -- 70 reserved for CLDAP -- // affectsMultipleDSAs (71), // -- 72-79 unused -- // other (80), // ... }, // matchedDN LDAPDN, // diagnosticMessage LDAPString, // referral [3] Referral OPTIONAL } func (l LDAPResult) size() (size int) { size += l.sizeComponents() size += sizeTagAndLength(tagSequence, size) return } func (l LDAPResult) sizeTagged(tag int) (size int) { size += l.sizeComponents() size += sizeTagAndLength(tag, size) return } func (l LDAPResult) sizeComponents() (size int) { if l.referral != nil { size += l.referral.sizeTagged(TagLDAPResultReferral) } size += l.diagnosticMessage.size() size += l.matchedDN.size() size += l.resultCode.size() return } func (l *LDAPResult) SetResultCode(code int) { l.resultCode = ENUMERATED(code) } func (l *LDAPResult) SeMatchedDN(code string) { l.matchedDN = LDAPDN(code) } func (l *LDAPResult) SetDiagnosticMessage(code string) { l.diagnosticMessage = LDAPString(code) } func (l *LDAPResult) SetReferral(r *Referral) { l.referral = r }