web-dev-qa-db-ja.com

ldap_add:制約違反(19)

ldapaddおよびldifファイルを使用してユーザーをインポートする際に問題が発生します。私が得ているエラーは:

ldap_add: Constraint violation (19)
additional info: structuralObjectClass: no user modification allowed

インポートされたユーザーはすべてou=People,dc=example,dc=orgの一部です。 LDAPサーバーにはすでにこのベースDNが含まれています。

/etc/ldap/slapd.d/cn=config/olcDatabase={1}hdb.ldifファイルには、次のACLエントリが含まれています。

olcAccess: {2}to dn.base="ou=People,dc=example,dc=org" attrs=children by gr
 oup.exact="cn=Manager,ou=Roles,dc=example,dc=org" manage

ldifファイルは次のようにインポートされます。

ldapadd -f import.ldif -xv -D "cn=drupal,ou=Apps,dc=example,dc=org" -h localhost -W

cn=drupal,ou=Apps[...]エントリはcn=Manager,ou=Roles,dc=example,dc=orgのメンバーであるため、書き込むための十分なアクセス許可が必要です( manageは使用可能な最高レベルのアクセス許可であるため )。

ldapaddコマンドを発行すると、最初のldifエントリでインポートが失敗します。コマンドの完全な出力は次のようになります。

add objectClass:
    top
    person
    inetOrgPerson
add uid:
    John.Merrell
add mail:
    [email protected]
add cn:
    John D Merrell
add structuralObjectClass:
    inetOrgPerson
add entryUUID:
    65236c42-09b7-1020-9318-9fca7c043dfc
add creatorsName:
    cn=drupal,ou=Apps,dc=bidnetwork,dc=org
add createTimestamp:
    20110503095643Z
add userPassword:
    2678u8yyy
add givenName:
    John D
add sn:
    Merrell
add entryCSN:
    20110629121956.880164Z#000000#000#000000
add modifiersName:
    cn=drupal,ou=Apps,dc=bidnetwork,dc=org
add modifyTimestamp:
    20110629121956Z
adding new entry "[email protected],ou=People,dc=example,dc=org"
ldap_add: Constraint violation (19)
    additional info: structuralObjectClass: no user modification allowed

LDAPに存在する、または存在しないユーザーのインポートをテストしましたが、どちらの場合も前述のエラーが発生します。

問題の原因とそれを回避する方法を誰かが説明できますか?

6
Max

これらのLDIFファイルをどのように生成しましたか? structuralObjectClassはOpenLDAPの内部値の1つであり、ユーザー(管理者であっても)は通常これらを変更できません。

これらのstructuralObjectClass行をLDIFから削除するか、slapaddを使用してエントリをインポートし直します(slapcatを使用してLDIFファイルを生成したに違いありません)。

9

http://phpldapadmin.sourceforge.net/wiki/index.php/Main_Page のようなツールを使用してデータをエクスポートする場合は、Web UIでInclude system attributesを選択しないでください。

enter image description here

1
jsvisa

以下は問題の解決策ではありませんが、構造要素を削除するためのユーティリティコードです。サンプルpythonコードは構造要素を削除します。out.ldifを使用してください。

structural_elements = ["structuralObjectClass","entryUUID", "creatorsName","createTimestamp","entryCSN", "modifiersName","modifyTimestamp"]
    with open("ldap_data_out.ldif","w+") as outfile:
        with open("ldap_data_in.ldif", "r") as infile:
            lines = infile.readlines()
            for line in lines:
                print line.split(":")[0]
                if line.split(":")[0] in structural_elements:
                    print "ignoring ,", line
                else:
                    outfile.write(line)
0

ldifファイルの次の行を削除する必要があります。

structuralObjectClass: 
entryUUID: 
creatorsName: 
createTimestamp: 
entryCSN: 
modifiersName: 
modifyTimestamp: 
0
user335858