首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >这个LDAP过滤器包有什么问题?

这个LDAP过滤器包有什么问题?
EN

Stack Overflow用户
提问于 2014-11-19 16:38:32
回答 1查看 992关注 0票数 0

我正在尝试移植一个从Perl查询LDAP服务器的程序,使用Go版本,我收到了过滤器格式错误的响应:

00000057: LdapErr: DSID-0C0C0968,注释:服务器无法解码搜索请求筛选器,数据0,v1db1\x00

我已经使用tcpdump来捕获使用我的程序的Perl和Go版本传输到服务器的数据,并且发现它们发送的过滤包略有不同。这个问题不是关于Go程序中的任何可能的but,而是关于理解LDAP过滤包的内容。

编码滤波器是:

代码语言:javascript
复制
(objectClass=*)

而Perl生成的数据包(服务器喜欢的)如下所示:

代码语言:javascript
复制
ASCII   .  .  o  b  j  e  c  t  C  l  a  s  s
Hex    87 0b 6f 62 6a 65 63 74 43 6c 61 73 73
Byte#   0  1  2  3  4  5  6  7  8  9 10 11 12

Go生成的数据包(服务器不喜欢)如下所示:

代码语言:javascript
复制
ASCII  .  .  .  .  o  b  j  e  c  t  C  l  a  s  s
Hex   a7 0d 04 0b 6f 62 6a 65 63 74 43 6c 61 73 73
Byte#  0  1  2  3  4  5  6  7  8  9 10 11 12 13 14

这是我自己的邮包分类:

  • ##Byte 0:标记当我从两个包中剖析Byte 0时,我看到它们是相同的,除了原语/构造位(在Perl版本中被设置为原语),并在Go版本中构造。详情请参见DER编码。 Bit# 87 6 54321 per10 0 00111 Go 10 1 00111
  • 位87:在这两个包中,10 = 具体语境
  • 位6:在Perl版本0=基元中,在Go版本1= Constructed中
  • 位54321: 00111 =7= 对象描述符
  • ##Byte 1:长度

Perl版本为11个字节,Go版本为13个字节

  • Go版本的##Bytes 2-3
  • 字节2: Tag 04:子字符串筛选器(见4.5.1 RFC 4511节)
  • 字节3:长度为11个字节
  • ##Remainder:有效载荷

对于这两个包,这只是ASCII文本objectClass

我对RFC 4511节4.5.1的解读表明Go版本“更正确”,然而Perl版本是与服务器一起工作的版本。怎么回事?

Wireshark能够解析两个数据包,并平等地解释它们。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-19 17:32:58

Perl版本是正确的,Go版本是不正确的。

正如您所指出的,RFC 4511节4.5.1指定了过滤器元素的编码,如下所示:

代码语言:javascript
复制
    Filter ::= CHOICE {
         and             [0] SET SIZE (1..MAX) OF filter Filter,
         or              [1] SET SIZE (1..MAX) OF filter Filter,
         not             [2] Filter,
         equalityMatch   [3] AttributeValueAssertion,
         substrings      [4] SubstringFilter,
         greaterOrEqual  [5] AttributeValueAssertion,
         lessOrEqual     [6] AttributeValueAssertion,
         present         [7] AttributeDescription,
         approxMatch     [8] AttributeValueAssertion,
         extensibleMatch [9] MatchingRuleAssertion,
         ...  }

在这种情况下,有关的部分是:

代码语言:javascript
复制
         present         [7] AttributeDescription,

AttributeDescription元素在同一规范的4.1.4节中定义:

代码语言:javascript
复制
    AttributeDescription ::= LDAPString
                            -- Constrained to <attributedescription>
                            -- [RFC4512]

第4.1.2节:

代码语言:javascript
复制
    LDAPString ::= OCTET STRING -- UTF-8 encoded,
                                -- [ISO10646] characters

这意味着当前的过滤器组件是一个八进制字符串,它是一个基本元素。Go不正确地将其转换为构造的元素,并且目录服务器正确地拒绝了该格式错误的请求。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27022146

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档