Coder Social home page Coder Social logo

ldif's Introduction

ldif - parse and generate LDIF data (see RFC 2849).

Commit activity Code size in bytes License Latest version PyPI Downloads

This is a fork of the ldif module from python-ldap with python3/unicode support.

One of its benefits is that it's a pure-python package (you don't depend on the libldap2-dev (or similar) package that needs to be installed on your laptop / test machine / production server).

See the last entry in changelog for a more complete list of differences.

This package only support Python 3 (>= 3.7, actually).

Usage

Parse LDIF from a file (or BytesIO):

from ldif import LDIFParser
from pprint import pprint

parser = LDIFParser(open("data.ldif", "rb"))
for dn, record in parser.parse():
    print('got entry record: %s' % dn)
    pprint(record)

Write LDIF to a file (or BytesIO):

from ldif import LDIFWriter

writer = LDIFWriter(open("data.ldif", "wb"))
writer.unparse("[email protected]", {
    "cn": ["Alice Alison"],
    "mail": ["[email protected]"],
    "objectclass": ["top", "person"],
})

Unicode support

The stream object that is passed to parser or writer must be an ascii byte stream.

The spec allows to include arbitrary data in base64 encoding or via URL. There is no way of knowing the encoding of this data. To handle this, there are two modes:

By default, the LDIFParser will try to interpret all values as UTF-8 and leave only the ones that fail to decode as bytes. But you can also pass an encoding of None to the constructor, in which case the parser will not try to do any conversion and return bytes directly.

Changelog

See here

ldif's People

Contributors

abilianhq avatar fladi avatar fumiyas avatar mariavarga avatar nhamilakis avatar sfermigier avatar xi avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

ldif's Issues

ldapmodify generation is not working

I am trying to generate an LDIF file to run through the ldapmodify command, but it's not working.
Here is the relevant code :

ldif_writer = LDIFWriter(file.open('wb'))
ldif_writer.unparse(
    dn=dn, record=dict(
        changetype=["modify"],
        add=['memberUid'],
        memberUid=[username]
    )) 

The result file created looks like this :

dn: cn=group-name,dc=company,dc=com
add: memberUid
changetype: modify
memberUid: user1

Which when used with the ldapmodify command raises the following error :

ldapmodify: wrong attributeType at line 3, entry "cn=group-name,dc=company,dc=com"

I manually edited the ldif file and inverted the changetype line as it needs to be before the add line
as follows

dn: cn=group-name,dc=company,dc=com
changetype: modify
add: memberUid
memberUid: user1

And the command works fine. Is there another way to generate modify files that i missed ? Maybe there should be a way to force the order of attributes (list, OrderedDict)

Thanks in advance for your help, this module is very useful, as i could find no other that allowed to just parse LDIF files without having the rest of the LDAP functionalities.

Name Collision w/Python-Ldap

Unfortunately, this package has a name collision with the python-ldap package ...

Both use the ldif namespace, which creates problems - as in you can't install both.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.