aboutsummaryrefslogtreecommitdiff
path: root/goldap/result.go
diff options
context:
space:
mode:
Diffstat (limited to 'goldap/result.go')
-rw-r--r--goldap/result.go282
1 files changed, 282 insertions, 0 deletions
diff --git a/goldap/result.go b/goldap/result.go
new file mode 100644
index 0000000..8a2c7ae
--- /dev/null
+++ b/goldap/result.go
@@ -0,0 +1,282 @@
+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
+}