2015-03-04 4 views
1

Можно ли импортировать LDIF как этотPython-Ldap lib. Импорт 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: [email protected] 
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= 

с помощью питона-Ldap библиотеки (http://www.python-ldap.org/)?

Да, я могу добавить новую запись в LDAP таким образом http://www.grotan.com/ldap/python-ldap-samples.html#add, но я не уверен в таком текстовом ldif-файле.

PS. Полный ответ здесь http://pastebin.com/eQU7xBfj

+0

Зачем использовать Python вообще? Вы можете использовать этот файл напрямую с помощью утилиты 'ldapadd'. Не нужно вставлять дополнительное программное обеспечение, и, конечно же, нет необходимости запрашивать какой-либо код. – EJP

+0

@EJP, потому что лучше использовать код python в скрипте python вместо внешней команды linux. – ipeacocks

+0

Нет, это не так. Всегда и везде лучше использовать существующее и проверенное программное обеспечение, а не писать свои собственные. – EJP

ответ

3

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) 
+0

Вы могли бы помочь с любым тривиальным примером? – ipeacocks

+0

Извините, прошло какое-то время, так как мне это было нужно. Я добавил небольшой пример – dhke

+0

Cool. Спасибо. – ipeacocks

1

Вы можете попробовать метод ниже тоже:

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

Смежные вопросы