Difference between revisions of "Python - LDAP"

From PeformIQ Upgrade
Jump to navigation Jump to search
(New page: =Using the Python LDAP Module= ==Search== <pre> </pre> ==Modify== <pre> </pre> == Add== <pre> #!/usr/bin/env python # #---------------------------------------------------------------...)
 
 
(4 intermediate revisions by the same user not shown)
Line 2: Line 2:


==Search==
==Search==
The searches are made by binding anonymously.


<pre>
<pre>
#!/usr/bin/env python
#
#---------------------------------------------------------------------------------------------------
import sys
import ldap
#---------------------------------------------------------------------------------------------------
LDAP_HOST = 'xxx'
#---------------------------------------------------------------------------------------------------
l = ldap.initialize("ldap://%s:389" 5 LDAP_HOST)
l.simple_bind_s("","")
base_dn = "ou=xxx,dc=performiq,dc=com,dc=au"
filter  = "(&(objectclass=xxx)(uid=svt*))"
rows = l.search_s(base_dn, ldap.SCOPE_SUBTREE, filter)
print "Returned -> %d rows" % len(rows)
for row in rows:
  print row
  col0 = row[0].split(', ')[0]
  uid  = col0.split(',')[0].split('=')[1]
  type = col0.split(',')[1].split('=')[1]
  if row[1].has_key('groups'):
      group = row[1]['groups'][0].split(',')[0].split('=')[1]
  else:
      group = ''
  print "%s,%s,%s" % (uid, type, group)
#---------------------------------------------------------------------------------------------------
</pre>
</pre>


==Modify==
Returned data looks like:


<pre>
<pre>
(
  'uid=xxxx,ou=internal,ou=people,dc=xxxx,dc=com',
  {
      'cn'            : ['xxxx'],
      'description'  : ['xxxx'],
      'objectClass'  : ['xxxx'],
      'sn'            : ['xxxx'],
      'groups'        : ['cn=xxxx,ou=xxxx,dc=performiq,dc=com,dc=au'],
      'uid'          : ['xxxx']
  }
)
</pre>
</pre>


== Add==
==Modify==
 
Adds, mods and deletes require binding as a user with appropriate rights.


<pre>
<pre>
Line 23: Line 79:
#---------------------------------------------------------------------------------------------------
#---------------------------------------------------------------------------------------------------


new = (
HOST    = 'hx30'
  'uid=apstokesd,ou=internal,ou=people,dc=auspost,dc=com',
PORT    = 6389
  {
 
      'cn'            : ['apxxxkesd'],
#---------------------------------------------------------------------------------------------------
      'description'   : ['apxxxkesd'],
 
      'objectClass'   : ['auspostUser'],
idx = 0
      'sn'           : ['apxxxkesd'],
 
      'groups'        : ['cn=GRP_Facility,ou=groups,dc=auspost,dc=com'],
l = ldap.initialize("ldap://%s:%d" % (HOST, PORT))
      'uid'          : ['apxxxkesd']
 
  }
l.simple_bind_s("cn=xxx,dc=performiq,dc=com,dc=au","xxx")
)
 
base_dn = "uid=svt_PLH%05d,ou=xxx,ou=xxx,dc=performiq,dc=com,dc=au" % idx
 
print base_dn
 
mod_attrs = [
              (ldap.MOD_REPLACE, 'description''SVT User %05d' % idx),
              (ldap.MOD_DELETE,  'GivenName',    'Francis' ),
              (ldap.MOD_ADD,    'GivenName',    'Frank' )
            ]
 
rc = l.modify_s(base_dn, mod_attrs)
 
print rc
</pre>
 
== Add==
 
<pre>
#!/usr/bin/env python
#
#---------------------------------------------------------------------------------------------------
 
import sys
import ldap


#---------------------------------------------------------------------------------------------------
#---------------------------------------------------------------------------------------------------
Line 39: Line 119:
def record(idx):
def record(idx):
   add_record = [
   add_record = [
       ('objectclass', ['auspostuser']),
       ('objectclass', ['objectclass']),
       ('uid', ['svt_PLH%05d' % idx]),
       ('uid',         ['svt_PLH%05d' % idx]),
       ('cn', ['SVT PLH%05d' % idx] ),
       ('cn',           ['SVT PLH%05d' % idx] ),
       ('sn', ['svt_PLH%05d' % idx] ),
       ('sn',           ['svt_PLH%05d' % idx] ),
       ('description', ['PLH test %05d' % idx]),
       ('description', ['PLH test %05d' % idx]),
       ('userpassword', ['secret']),
       ('userpassword', ['secret']),
       ('ou', ['users'])
       ('ou',           ['ou'])
   ]
   ]


Line 56: Line 136:
l = ldap.initialize("ldap://%s:%d" % (HOST, PORT))
l = ldap.initialize("ldap://%s:%d" % (HOST, PORT))


l.simple_bind_s("cn=XXX,dc=XXX,dc=com","XXX")
l.simple_bind_s("cn=xxxx,dc=performiq,dc=com,dc=au","xxxx")


base_dn = "uid=svt_XXX%05d,ou=people,ou=external,dc=XXX,dc=com" % idx
base_dn = "uid=svt_xxx%05d,ou=xxx,ou=xxx,dc=performiq,dc=com,dc=au" % idx


add_rec = record(idx)
add_rec = record(idx)
Line 83: Line 163:
l = ldap.initialize("ldap://%s:%s" % (HOST,PORT))
l = ldap.initialize("ldap://%s:%s" % (HOST,PORT))


l.simple_bind_s("cn=XXX,dc=XXX,dc=com","XXXX")
l.simple_bind_s("cn=xxx,dc=performiq,dc=com,dc=au","XXXX")


base_dn = "uid=svt_XXX%05d,ou=people,dc=XXX,dc=com" % idx
base_dn = "uid=svt_xxx%05d,ou=xxx,dc=performiq,dc=com,dc=au" % idx


print base_dn
print base_dn
Line 94: Line 174:
</pre>
</pre>


=Links=
* http://www.packtpub.com/article/python-ldap-applications-more-ldap-operations-and-the-ldap-url-library


[[Category:Python]]
[[Category:Python]]
[[Category:LDAP]]
[[Category:LDAP]]

Latest revision as of 10:55, 2 April 2009

Using the Python LDAP Module

Search

The searches are made by binding anonymously.

#!/usr/bin/env python
#
#---------------------------------------------------------------------------------------------------

import sys
import ldap

#---------------------------------------------------------------------------------------------------

LDAP_HOST = 'xxx'

#---------------------------------------------------------------------------------------------------

l = ldap.initialize("ldap://%s:389" 5 LDAP_HOST)

l.simple_bind_s("","")

base_dn = "ou=xxx,dc=performiq,dc=com,dc=au"
filter  = "(&(objectclass=xxx)(uid=svt*))"

rows = l.search_s(base_dn, ldap.SCOPE_SUBTREE, filter)

print "Returned -> %d rows" % len(rows)

for row in rows:
   print row

   col0 = row[0].split(', ')[0]

   uid  = col0.split(',')[0].split('=')[1]
   type = col0.split(',')[1].split('=')[1]

   if row[1].has_key('groups'):
      group = row[1]['groups'][0].split(',')[0].split('=')[1]
   else:
      group = ''

   print "%s,%s,%s" % (uid, type, group)

#---------------------------------------------------------------------------------------------------

Returned data looks like:

(
   'uid=xxxx,ou=internal,ou=people,dc=xxxx,dc=com',
   {
      'cn'            : ['xxxx'],
      'description'   : ['xxxx'],
      'objectClass'   : ['xxxx'],
      'sn'            : ['xxxx'],
      'groups'        : ['cn=xxxx,ou=xxxx,dc=performiq,dc=com,dc=au'],
      'uid'           : ['xxxx']
   }
)

Modify

Adds, mods and deletes require binding as a user with appropriate rights.

#!/usr/bin/env python
#
#---------------------------------------------------------------------------------------------------

import sys
import ldap

#---------------------------------------------------------------------------------------------------

HOST    = 'hx30'
PORT    = 6389

#---------------------------------------------------------------------------------------------------

idx = 0

l = ldap.initialize("ldap://%s:%d" % (HOST, PORT))

l.simple_bind_s("cn=xxx,dc=performiq,dc=com,dc=au","xxx")

base_dn = "uid=svt_PLH%05d,ou=xxx,ou=xxx,dc=performiq,dc=com,dc=au" % idx

print base_dn

mod_attrs = [
               (ldap.MOD_REPLACE, 'description',  'SVT User %05d' % idx),
               (ldap.MOD_DELETE,  'GivenName',    'Francis' ),
               (ldap.MOD_ADD,     'GivenName',    'Frank' )
            ]

rc = l.modify_s(base_dn, mod_attrs)

print rc

Add

#!/usr/bin/env python
#
#---------------------------------------------------------------------------------------------------

import sys
import ldap

#---------------------------------------------------------------------------------------------------

def record(idx):
   add_record = [
      ('objectclass',  ['objectclass']),
      ('uid',          ['svt_PLH%05d' % idx]),
      ('cn',           ['SVT PLH%05d' % idx] ),
      ('sn',           ['svt_PLH%05d' % idx] ),
      ('description',  ['PLH test %05d' % idx]),
      ('userpassword', ['secret']),
      ('ou',           ['ou'])
   ]

   return add_record

#---------------------------------------------------------------------------------------------------

idx = 3

l = ldap.initialize("ldap://%s:%d" % (HOST, PORT))

l.simple_bind_s("cn=xxxx,dc=performiq,dc=com,dc=au","xxxx")

base_dn = "uid=svt_xxx%05d,ou=xxx,ou=xxx,dc=performiq,dc=com,dc=au" % idx

add_rec = record(idx)

rc = l.add_s(base_dn, add_rec)

print rc

Delete

#!/usr/bin/env python
#
#---------------------------------------------------------------------------------------------------

import sys
import ldap

#---------------------------------------------------------------------------------------------------

idx = 0

l = ldap.initialize("ldap://%s:%s" % (HOST,PORT))

l.simple_bind_s("cn=xxx,dc=performiq,dc=com,dc=au","XXXX")

base_dn = "uid=svt_xxx%05d,ou=xxx,dc=performiq,dc=com,dc=au" % idx

print base_dn

rc = l.delete_s(base_dn)

print rc

Links