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