forked from Deuxfleurs/bottin
57 lines
1.7 KiB
Go
57 lines
1.7 KiB
Go
|
package message
|
||
|
|
||
|
import "fmt"
|
||
|
|
||
|
// BindResponse ::= [APPLICATION 1] SEQUENCE {
|
||
|
// COMPONENTS OF LDAPResult,
|
||
|
// serverSaslCreds [7] OCTET STRING OPTIONAL }
|
||
|
|
||
|
func readBindResponse(bytes *Bytes) (bindresponse BindResponse, err error) {
|
||
|
err = bytes.ReadSubBytes(classApplication, TagBindResponse, bindresponse.readComponents)
|
||
|
if err != nil {
|
||
|
err = LdapError{fmt.Sprintf("readBindResponse:\n%s", err.Error())}
|
||
|
return
|
||
|
}
|
||
|
return
|
||
|
}
|
||
|
|
||
|
func (response *BindResponse) readComponents(bytes *Bytes) (err error) {
|
||
|
response.LDAPResult.readComponents(bytes)
|
||
|
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 == TagBindResponseServerSaslCreds {
|
||
|
var serverSaslCreds OCTETSTRING
|
||
|
serverSaslCreds, err = readTaggedOCTETSTRING(bytes, classContextSpecific, TagBindResponseServerSaslCreds)
|
||
|
if err != nil {
|
||
|
err = LdapError{fmt.Sprintf("readComponents:\n%s", err.Error())}
|
||
|
return
|
||
|
}
|
||
|
response.serverSaslCreds = serverSaslCreds.Pointer()
|
||
|
}
|
||
|
}
|
||
|
return
|
||
|
}
|
||
|
|
||
|
func (response BindResponse) write(bytes *Bytes) (size int) {
|
||
|
if response.serverSaslCreds != nil {
|
||
|
size += response.serverSaslCreds.writeTagged(bytes, classContextSpecific, TagBindResponseServerSaslCreds)
|
||
|
}
|
||
|
size += response.LDAPResult.writeComponents(bytes)
|
||
|
size += bytes.WriteTagAndLength(classApplication, isCompound, TagBindResponse, size)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
func (response BindResponse) size() (size int) {
|
||
|
if response.serverSaslCreds != nil {
|
||
|
size += response.serverSaslCreds.sizeTagged(TagBindResponseServerSaslCreds)
|
||
|
}
|
||
|
size += response.LDAPResult.sizeComponents()
|
||
|
size += sizeTagAndLength(TagBindResponse, size)
|
||
|
return
|
||
|
}
|