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