Package ldaptor :: Package protocols :: Package ldap :: Package autofill :: Module posixAccount
[hide private]
[frames] | no frames]

Source Code for Module ldaptor.protocols.ldap.autofill.posixAccount

 1  from twisted.internet import defer 
 2  from ldaptor import numberalloc 
 3  from ldaptor.protocols.ldap import ldapsyntax, autofill 
 4   
5 -class Autofill_posix: #TODO baseclass
6 - def __init__(self, 7 baseDN, 8 freeNumberGetter=numberalloc.getFreeNumber):
9 self.baseDN = baseDN 10 self.freeNumberGetter = freeNumberGetter
11
12 - def _cb_gotNumbers(self, r, ldapObject):
13 uid, gid = r 14 15 ok, val = uid 16 if not ok: 17 val.trap() 18 ldapObject['uidNumber'] = [str(val)] 19 20 ok, val = gid 21 if not ok: 22 val.trap() 23 ldapObject['gidNumber'] = [str(val)]
24
25 - def start(self, ldapObject):
26 assert 'objectClass' in ldapObject 27 if 'posixAccount' not in ldapObject['objectClass']: 28 raise autofill.ObjectMissingObjectClassException, ldapObject 29 30 assert 'loginShell' not in ldapObject 31 ldapObject['loginShell'] = ['/bin/sh'] 32 33 baseObject = ldapsyntax.LDAPEntry(client=ldapObject.client, 34 dn=self.baseDN) 35 d1 = self.freeNumberGetter(baseObject, 'uidNumber', min=1000) 36 37 d2 = self.freeNumberGetter(baseObject, 'gidNumber', min=1000) 38 39 d = defer.DeferredList([d1, d2], fireOnOneErrback=1) 40 41 # silence the log 42 d1.addErrback(lambda x:None) 43 d2.addErrback(lambda x:None) 44 45 d.addCallback(self._cb_gotNumbers, ldapObject) 46 return d
47
48 - def notify(self, ldapObject, attributeType):
49 pass
50