1 from twisted.internet import defer
2 from ldaptor import numberalloc
3 from ldaptor.protocols.ldap import ldapsyntax, autofill
4
9 self.baseDN = baseDN
10 self.freeNumberGetter = freeNumberGetter
11
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
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):
50