in asfpy/ldapadmin.py [0:0]
def next_user_uid(self):
""" Find lowest available user account uid with a matching available gid """
try:
r = self.lc.search_s(LDAP_PEOPLE_BASE, ldap.SCOPE_SUBTREE, 'uid=*', ['uidNumber', 'gidNumber'])
un_avail_uids = sorted([int(item[1]["uidNumber"][0].decode('utf8')) for item in r])
un_avail_gids = sorted([int(item[1]["gidNumber"][0].decode('utf8')) for item in r])
avail_uids = self._find_gaps(un_avail_uids)
avail_gids = self._find_gaps(un_avail_gids)
# In case there are no gaps, increment the last returned UID
# If the new UID is not unavailable append it to the list of
# available_uids.
n_uid = int(un_avail_uids[-1]+1)
while n_uid in un_avail_gids:
n_uid+=1
avail_uids.append(n_uid)
# Ensure you got something
assert(type(avail_uids) is list and len(avail_uids) > 0 and type(avail_gids) is list and len(avail_gids) > 0)
for uid in avail_uids:
if uid >= MINIMUM_USER_UID and uid in avail_gids:
return(uid)
continue
raise ConnectionException('Unable to find a UID') # Should not happen, but ...
except ldap.TIMEOUT:
raise ConnectionException(BACKEND_TIMEOUT)
except AssertionError:
raise ConnectionException(ASSERTION_FAILED)