def __init__(self, dn, attributes):
self.dn = dn
self.attributes = attributes
+ self.cache = {}
def __getitem__(self, key):
+ if key in self.cache:
+ return self.cache[key]
+
if key in self.attributes:
if key in self.array_values:
- return self.attributes[key]
-
- if not len(self.attributes[key]) == 1:
+ self.cache[key] = self.attributes[key]
+ elif not len(self.attributes[key]) == 1:
raise ValueError, 'non-array value has not exactly one value'
-
- if key in self.int_values:
- return int(self.attributes[key][0])
+ elif key in self.int_values:
+ self.cache[key] = int(self.attributes[key][0])
else:
- return self.attributes[key][0]
+ self.cache[key] = self.attributes[key][0]
elif key in self.defaults:
- return self.defaults[key]
+ self.cache[key] = self.defaults[key]
else:
raise IndexError, "No such key: %s (dn: %s)"%(key, self.dn)
+ return self.cache[key]
+
def __contains__(self, key):
return key in self.attributes
def pw_active(self):
if not 'userPassword' in self:
return False
- if self['userPassword'] == '{crypt}*LK*':
+ if self['userPassword'].upper() == '{CRYPT}*LK*':
return False
- if self['userPassword'].startswith("{crypt}!"):
+ if self['userPassword'].upper().startswith("{CRYPT}!"):
return False
return True
def get_password(self):
p = self['userPassword']
- if not p.startswith('{crypt}') or len(p) > 50:
+ if not p.upper().startswith('{CRYPT}') or len(p) > 50:
return p
else:
return p[7:]
def is_active_user(self):
return self['accountStatus'] == 'active' and self.numkeys() != 0
+ def is_guest_account(self):
+ return supplementaryGid in self and 'guest' in self['supplementaryGid']
+
def latitude_dec(self, anonymized=False):
return userdir_ldap.DecDegree(self['latitude'], anonymized)
def longitude_dec(self, anonymized=False):