【问题标题】:Python-Ldap lib. Import LDIFPython-Ldap 库。导入 LDIF
【发布时间】:2015-03-04 17:38:23
【问题描述】:

可以这样导入LDIF吗

dn: cn=vpupkin,cn=people,ou=company,dc=domain,dc=com
c: UA
cn: vpupkin
employeetype: Indoor Front-end developer
gidnumber: 500
givenname: Vasya
homedirectory: /home/vpupkin
host: example.com
l: Kyiv
loginshell: /bin/bash
mail: vpupkin@domain.com
o: Microsoft
objectclass: inetOrgPerson
objectclass: posixAccount
objectclass: top
objectclass: shadowAccount
objectclass: ldapPublicKey
objectclass: extensibleObject
labeleduri: skype://test
sn: Pupkin
sshpublickey: ssh-rsa key
st: Trudova, 15
telephonenumber: 7777777777
uid: vpupkin
uidnumber: 1000
userpassword: {SHA}fEqNCco3Yq9h5ZUglD3CZJT4lBs=

使用 python-ldap 库 (http://www.python-ldap.org/)?

是的,我可以通过 http://www.grotan.com/ldap/python-ldap-samples.html#add 这样的方式将新记录添加到 LDAP,但我不确定这样的文本 ldif 文件。

附言。完整答案在这里http://pastebin.com/eQU7xBfj

【问题讨论】:

  • 为什么要使用 Python?您可以通过ldapadd 实用程序直接使用此文件。无需插入更多软件,当然也无需编写任何代码。
  • @EJP 因为最好在 python 脚本中使用 python 代码而不是外部 linux 命令。
  • 不,不是。使用现有且经过良好测试的软件总是比编写自己的软件更好。

标签: python openldap python-ldap ldif


【解决方案1】:

python-ldap 包含一个LDIF Parser module。使用它来解析 LDIF 并将结果字典提交给ldap_connection.add_s()

示例用法:

from StringIO import StringIO
import ldif
from ldap import modlist

ldif_file = StringIO("""dn: cn=vpupkin,cn=people,ou=company,dc=domain,dc=com
c: UA
cn: vpupkin
""")

parser = ldif.LDIFRecordList(ldif_file)
parser.parse()

for dn, entry in parser.all_records:
    add_modlist = modlist.addModlist(entry)
    ldap_conn.add_s(dn, add_modlist)

【讨论】:

  • 你能帮忙举个简单的例子吗?
  • 对不起,我自己已经有一段时间没有需要这个了。我添加了一个小例子
【解决方案2】:

你也可以试试下面的方法:

class MyLDIF(ldif.LDIFParser):
   def __init__(self, input):
      ldif.LDIFParser.__init__(self,input)

   def handle(self,dn,entry):
      ldif = modlist.addModlist(entry)
      l = ldap.open('localhost', 389)
      try:
          l.bind("cn=Manager,dc=exapmle,dc=org", "Secret123")
      except ldap.SERVER_DOWN, e:
          print "ldap server is down"
      else:
          l.add_s(dn, ldif)

 def enable_schema():
    parser = MyLDIF(open('/tmp/a1.ldif', 'rb'))
    parser.parse()

我使用python-ldap docs 中给出的示例得出上述解决方案

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多