37 lines
1.2 KiB
Go
37 lines
1.2 KiB
Go
package message
|
|
|
|
import "fmt"
|
|
|
|
//
|
|
// AuthenticationChoice ::= CHOICE {
|
|
// simple [0] OCTET STRING,
|
|
// -- 1 and 2 reserved
|
|
// sasl [3] SaslCredentials,
|
|
// ... }
|
|
|
|
func readAuthenticationChoice(bytes *Bytes) (ret AuthenticationChoice, err error) {
|
|
tagAndLength, err := bytes.PreviewTagAndLength()
|
|
if err != nil {
|
|
err = LdapError{fmt.Sprintf("readAuthenticationChoice:\n%s", err.Error())}
|
|
return
|
|
}
|
|
err = tagAndLength.ExpectClass(classContextSpecific)
|
|
if err != nil {
|
|
err = LdapError{fmt.Sprintf("readAuthenticationChoice:\n%s", err.Error())}
|
|
return
|
|
}
|
|
switch tagAndLength.Tag {
|
|
case TagAuthenticationChoiceSimple:
|
|
ret, err = readTaggedOCTETSTRING(bytes, classContextSpecific, TagAuthenticationChoiceSimple)
|
|
case TagAuthenticationChoiceSaslCredentials:
|
|
ret, err = readSaslCredentials(bytes)
|
|
default:
|
|
err = LdapError{fmt.Sprintf("readAuthenticationChoice: invalid tag value %d for AuthenticationChoice", tagAndLength.Tag)}
|
|
return
|
|
}
|
|
if err != nil {
|
|
err = LdapError{fmt.Sprintf("readAuthenticationChoice:\n%s", err.Error())}
|
|
return
|
|
}
|
|
return
|
|
}
|