理解Pythonldap中的命名冲突

2024-04-25 23:44:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一套不同的需要“保存”(他们都是新的记录)。以下代码用于提交更改集:

def commit(self):
    l = ldap.initialize(self.ldapURL)
    l.simple_bind_s(self.ldapUser,self.ldapPass)
    for dn,ldif in self.ldapAdds.iteritems():
        try:
            print json.dumps(ldif,indent=4)
            l.add_s(dn,ldif)
            print "a",
        except ldap.ALREADY_EXISTS:
            pass

    for dn,ldif in self.ldapMods.iteritems():
        l.modify_s(dn,ldif)
        print "m",
    print ""
    l.unbind_s()
    self.ldapAdds = dict()
    self.ldapMods = dict()

不幸的是,我得到以下错误:

Traceback (most recent call last): File "./ldapUpdate.py", line 868, in lMods.commit() File "./ldapUpdate.py", line 769, in commit l.add_s(dn,ldif) File "/sites/utils/Python/lib/python2.7/site-packages/ldap/ldapobject.py", line 216, in add_s return self.add_ext_s(dn,modlist,None,None) File "/sites/utils/Python/lib/python2.7/site-packages/ldap/ldapobject.py", line 202, in add_ext_s resp_type, resp_data, resp_msgid, resp_ctrls = self.result3(msgid,all=1,timeout=self.timeout) File "/sites/utils/Python/lib/python2.7/site-packages/ldap/ldapobject.py", line 519, in result3 resp_ctrl_classes=resp_ctrl_classes File "/sites/utils/Python/lib/python2.7/site-packages/ldap/ldapobject.py", line 526, in result4 ldap_result = self._ldap_call(self._l.result4,msgid,all,timeout,add_ctrls,add_intermediates,add_extop) File "/sites/utils/Python/lib/python2.7/site-packages/ldap/ldapobject.py", line 108, in _ldap_call result = func(*args,**kwargs) ldap.NAMING_VIOLATION: {'info': "naming attribute 'src' has no equality matching rule", 'desc': 'Naming violation'}

失败的ldiff记录如下所示:

[
    [  "src",   "ecare/ecare-self.ear" ], 
    [  "modname",  "ecare-self"  ], 
    [  "dest",   "/sites/MODULES/ecare/ecare-self.ear"], 
    [  "objectClass",  [  "ctlapp", "ctlmodule", "top" ] ], 
    [  "action",  "rsync" ], 
    [  "depot",  "DEPOT" ]
]

SLAPD不喜欢的src字段是什么?有没有人更了解命名违规行为?你知道吗

“src”在schema中有这个定义

attributetype ( 1.3.6.4.2.7888.5.1.16 NAME 'src'
                SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
                X-ORIGIN 'user defined' )

“ctlapp”在架构中有此定义

objectclass ( 1.3.6.4.2.7888.5.1.22 NAME 'ctlapp'
                DESC 'ATT deployable component'
                SUP ctlmodule STRUCTURAL
                MUST ( src $ depot $ dest $ action )
                X-ORIGIN 'user defined' )

Tags: inpyselfsrcaddliblinesite
1条回答
网友
1楼 · 发布于 2024-04-25 23:44:55

“src”的正确模式定义应该是:

attributetype ( 1.3.6.4.2.7888.5.1.16 NAME 'src'
                DESC 'ATT source path'
                EQUALITY caseExactMatch
                SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{512}
                X-ORIGIN 'user defined' )

“平等”条款不见了。这就是违反命名规则的原因。你知道吗

相关问题 更多 >