【发布时间】:2018-12-15 14:00:33
【问题描述】:
我使用 asn1c 来解析 LDAP 消息。
为此,在编译了rfc4511中定义的ASN.1定义后,我使用ber_decode和xer_fprint函数进行解码和打印我的程序中的内容。
例如,下面指出的两个输出与两个不同的 LDAP 消息相关:
<LDAPMessage>
<messageID>1</messageID>
<protocolOp>
<bindRequest>
<version>3</version>
<name>75 69 64 3D 61 2C 64 63 3D 63 6F 6D</name>
<authentication>
<simple>70 61 73 73 77 6F 72 64</simple>
</authentication>
</bindRequest>
</protocolOp>
</LDAPMessage>
<LDAPMessage>
<messageID>5</messageID>
<protocolOp>
<searchRequest>
<baseObject></baseObject>
<scope><baseObject/></scope>
<derefAliases><neverDerefAliases/></derefAliases>
<sizeLimit>0</sizeLimit>
<timeLimit>0</timeLimit>
<typesOnly><true/></typesOnly>
<filter>
<present>4F 62 6A 65 63 74 43 6C 61 73 73</present>
</filter>
<attributes>
<selector>31 2E 31</selector>
</attributes>
</searchRequest>
</protocolOp>
</LDAPMessage>
如您所见,name、simple、present和selector字段的值显示为十六进制。虽然我希望它们显示为人类可读值(类似于wireshark所做的)。
second message on the wireshark (present field have ObjectClass Value)
我知道在此链接 (decoding asn.1 compiler output as strings) 中提出了同样的问题。 Lev Walkin 说 OCTET STRING 应该替换为 IA5String 或 UTF8String。但在 LDAP ASN.1 定义中,OCTET STRING 已经在很多地方使用。
我应该改变哪一个?我对用 IA5String 或 UTF8String 替换 OCTET STRING 的看法是否正确?这应该在 LDAP ASN.1 定义中还是在其他地方完成?更改 LDAP 标准定义有什么问题吗?比如我只把LDAPDN :: = LDAPString改成了LDAPDN :: = UTF8String,但是在ber_decode函数中遇到了错误。
以人类可读的方式显示所有值的一般解决方案是什么?
谢谢...
【问题讨论】: