Source code for ldaptor.protocols.ldap.autofill.posixAccount
from twisted.internet import defer
from ldaptor import numberalloc
from ldaptor.protocols.ldap import ldapsyntax, autofill
[docs]class Autofill_posix: #TODO baseclass
def __init__(self,
baseDN,
freeNumberGetter=numberalloc.getFreeNumber):
self.baseDN = baseDN
self.freeNumberGetter = freeNumberGetter
def _cb_gotNumbers(self, r, ldapObject):
uid, gid = r
ok, val = uid
if not ok:
val.trap()
ldapObject['uidNumber'] = [str(val)]
ok, val = gid
if not ok:
val.trap()
ldapObject['gidNumber'] = [str(val)]
[docs] def start(self, ldapObject):
assert 'objectClass' in ldapObject
if 'posixAccount' not in ldapObject['objectClass']:
raise autofill.ObjectMissingObjectClassException, ldapObject
assert 'loginShell' not in ldapObject
ldapObject['loginShell'] = ['/bin/sh']
baseObject = ldapsyntax.LDAPEntry(client=ldapObject.client,
dn=self.baseDN)
d1 = self.freeNumberGetter(baseObject, 'uidNumber', min=1000)
d2 = self.freeNumberGetter(baseObject, 'gidNumber', min=1000)
d = defer.DeferredList([d1, d2], fireOnOneErrback=1)
# silence the log
d1.addErrback(lambda x:None)
d2.addErrback(lambda x:None)
d.addCallback(self._cb_gotNumbers, ldapObject)
return d
[docs] def notify(self, ldapObject, attributeType):
pass