主题: 关于批量导入生成的ldif文件不能导入的问题。

使用python create_mail_user_OpenLDAP.py  aaa.csv 后生成aaa.ldif文件然后通过my ldap server导入报错 导入不成功。

2 最后由 kwoks (2010-07-29 09:02:56) 编辑

回复: 关于批量导入生成的ldif文件不能导入的问题。

csv格式如下
kwoks.cc,chang_p,78976734,常平,10,all:gad_all

回复: 关于批量导入生成的ldif文件不能导入的问题。

将生成的 LDIF 文件里的一个帐号的 LDIF 内容贴一下看看。

回复: 关于批量导入生成的ldif文件不能导入的问题。

以下是 utf-8 格式 csv文件生成的ldif 文件其中一个帐号的内容

dn:: bWFpbD1jaGFuZ19wQO+7v2lzY3JlYXRlLmNvbSxvdT1Vc2Vycyxkb21haW5OYW1lPe+7v2l
zY3JlYXRlLmNvbSxvPWRvbWFpbnMsZGM9aXNjcmVhdGUsZGM9Y29t
changetype: add
objectClass: inetOrgPerson
objectClass: mailUser
objectClass: shadowAccount
objectClass: amavisAccount
mail:: Y2hhbmdfcEDvu79pc2NyZWF0ZS5jb20=
userPassword: 19410919cp
mailQuota: 10
cn:: 5bi46JCN
sn: chang_p
uid: chang_p
storageBaseDirectory: /var/vmail/vmail01
mailMessageStore:: 77u/aXNjcmVhdGUuY29tL2MvY2gvY2hhL2NoYW5nX3AtMjAxMC4wNy4yO
S4wMS41NS40Ni8=
homeDirectory:: L3Zhci92bWFpbC92bWFpbDAxL++7v2lzY3JlYXRlLmNvbS9jL2NoL2NoYS9j
aGFuZ19wLTIwMTAuMDcuMjkuMDEuNTUuNDYv
accountStatus: active
mtaTransport: dovecot
enabledService: mail
enabledService: smtp
enabledService: pop3
enabledService: pop3secured
enabledService: imap
enabledService: imapsecured
enabledService: deliver
enabledService: forward
enabledService: senderbcc
enabledService: recipientbcc
enabledService: managesieve
enabledService: internal
enabledService: managesievesecured
enabledService: shadowaddress
enabledService: displayedInGlobalAddressBook
memberOfGroup:: YWxsQO+7v2lzY3JlYXRlLmNvbQ==
memberOfGroup:: Z2FkX2FsbEDvu79pc2NyZWF0ZS5jb20=

回复: 关于批量导入生成的ldif文件不能导入的问题。

以下是ascii 格式 csv文件生成的ldif

dn: mail=chang_p@kwoks.cc,ou=Users,domainName=kwoks.cc,o=domains,dc=
kwoks,dc=cc
changetype: add
objectClass: inetOrgPerson
objectClass: mailUser
objectClass: shadowAccount
objectClass: amavisAccount
mail: chang_p@kwoks.cc
userPassword: 19410919cp
mailQuota: 10
cn:: s6PGvA==
sn: chang_p
uid: chang_p
storageBaseDirectory: /var/vmail/vmail01
mailMessageStore: kwoks.cc/c/ch/cha/chang_p-2010.07.29.06.27.26/
homeDirectory: /var/vmail/vmail01/kwoks.cc/c/ch/cha/chang_p-2010.07.29.0
6.27.26/
accountStatus: active
mtaTransport: dovecot
enabledService: mail
enabledService: smtp
enabledService: pop3
enabledService: pop3secured
enabledService: imap
enabledService: imapsecured
enabledService: deliver
enabledService: forward
enabledService: senderbcc
enabledService: recipientbcc
enabledService: managesieve
enabledService: internal
enabledService: managesievesecured
enabledService: shadowaddress
enabledService: displayedInGlobalAddressBook
memberOfGroup: all@kwoks.cc
memberOfGroup: gad_all@kwoks.cc

回复: 关于批量导入生成的ldif文件不能导入的问题。

ascii 格式的看上去没问题。你导入时是什么错误信息?

7 最后由 kwoks (2010-07-29 09:25:51) 编辑

回复: 关于批量导入生成的ldif文件不能导入的问题。

# Prompt to import user data.
'''
Would you like to import them now?""" % (ldif_file)

answer = raw_input('[Y|n] ').lower().strip()

if answer == '' or answer == 'y':
    # Import data.
    conn = ldap.initialize(LDAP_URI)
    conn.set_option(ldap.OPT_PROTOCOL_VERSION, 3)   # Use LDAP v3
    conn.bind_s(BINDDN, BINDPW)
    conn.unbind()
else:
    pass
'''
这一段代码并没有执行。
然后 我用了phpldapadmin导入(ascii生成的ldif)

不能增加该对象到LDAP服务器。
不能增加该对象到LDAP服务器。
LDAP said:    Invalid syntax
Error number:    0x15 (LDAP_INVALID_SYNTAX)
描述:    An invalid attribute value was specified.
warn    LDIF text import
Could not add object mail=chang_p@kwoks.cc,ou=Users,domainName=kwoks.cc,o=domains,dc=kwoks,dc=cc
LDAP said:    Invalid syntax
Error number:    0x15 (LDAP_INVALID_SYNTAX)
描述:    An invalid attribute value was specified.

回复: 关于批量导入生成的ldif文件不能导入的问题。

有一个要注意的,对于超过70个字符的行,LDIF 里会自动换行并在换行的开头有一个空格表示续航。
你看看是否是你粘贴的时候将这个空格给去掉了。

回复: 关于批量导入生成的ldif文件不能导入的问题。

是有空行的。我只是截取了。第一个帐号的内容给你看。

回复: 关于批量导入生成的ldif文件不能导入的问题。

dn: mail=guo_jb@kwoks.cc,ou=Users,domainName=kwoks.cc,o=domains,dc=k
woks,dc=cc

回复: 关于批量导入生成的ldif文件不能导入的问题。

将 "changetype: add" 这行去掉。
并且似乎 cn 属性会出错,不能有多字节字符。我看看是否可以修正。

回复: 关于批量导入生成的ldif文件不能导入的问题。

cn这个应该是中文姓名。
你的意思是将ldif里面所有的"changetype: add" 删除是吧。然后尝试导入?

回复: 关于批量导入生成的ldif文件不能导入的问题。

是的,删除 changetype: add。

刚才用 0.6.0 里的 create_mail_user_OpenLDAP.py 尝试导入一个,没有问题啊。用中文姓名也没问题。

回复: 关于批量导入生成的ldif文件不能导入的问题。

请问是不是删除ldif文件里的changetype: add行,然后再通过phpldapadmin导入

回复: 关于批量导入生成的ldif文件不能导入的问题。

测试之后发现
用windows 自带文件 工具 编辑后的txt 文件存成utf-8格式之后,再用create_mail..py生成ldif文件
这时第一个帐号转换成这样
dn:: bWFpbD1jaGFuZ19wQO+7v2lzY3JlYXRlLmNvbSxvdT1Vc2Vycyxkb21haW5OYW1lPe+7v2l
zY3JlYXRlLmNvbSxvPWRvbWFpbnMsZGM9aXNjcmVhdGUsZGM9Y29t

第二个帐号开始是正确的
dn: mail=guo_jb@kwoks.com,ou=Users,domainName=iscreate.com,o=domains,dc=i
screate,dc=com
---
版主说我的csv文件有问题.

但是,也没有检查出什么问题.
再试

回复: 关于批量导入生成的ldif文件不能导入的问题。

解决的笨方法:
首先将csv文件存成utf-8格式 ,然后将其用create_mail_O.....py 转换成ldif文件

这里ldif文件首个帐号的
dn:部份为成dn:: 和一些乱码
mail:也是
storageBaseDirectory:
mailMessageStore:
homeDirectory:
memberOfGroup:
里面的都为乱码
这时候 将首个帐号的上面的乱码部份都改成和第二个帐号一样类型的字符 保存 就可以通过phpldapadmin导入.

虽然说管理员说是我的csv有问题.但是,我还是觉得create...py转换工具 有可能有问题.请检查.

17 最后由 bluegloom (2010-07-29 20:14:12) 编辑

回复: 关于批量导入生成的ldif文件不能导入的问题。

你导入的时候密码是:78976734 为什么生成的ldif文件密码是19410919cp?
是不是生成文件的时候,参数修改错了?
建议先把汉字名字去掉试试,感觉这个东西可能和乱码有关系。

回复: 关于批量导入生成的ldif文件不能导入的问题。

确实用英文名字是正确的。
但是 很奇怪的是,中文的csv文件,转换之后,就是第一个帐号的信息出错 后面的不会

回复: 关于批量导入生成的ldif文件不能导入的问题。

感觉和你操作系统的字符编码有关系

回复: 关于批量导入生成的ldif文件不能导入的问题。

我也发生这个错误了。csv文件绝对是utf8编码。但是只要最后一个字段是汉字。呵呵,生成的ldif条目就打不进去。是英文的,统统进去了。

回复: 关于批量导入生成的ldif文件不能导入的问题。

感觉也是create那个py脚本的问题。没有处理好编码问题。
问题貌似出在最后一个group中,如果是汉字,那么就完蛋。是英文就没事。(在ldif中自动变为groupname@domain.com格式)

回复: 关于批量导入生成的ldif文件不能导入的问题。

我测试过,用create的py脚本生成的ldif文件,用ultraedit查看,其中中文会变成乱码,但把这些乱码导入ldap后,在ldap中看到的中文是对的,不知为何。