|
def rremove(origin, match):
|
|
if origin.endswith(match):
|
|
return origin[:-len(match)]
|
|
return origin
|
|
|
|
def ldap_path(entry, *arg):
|
|
if arg:
|
|
return "%s,%s"%(ldap_path(entry), ldap_path(arg))
|
|
else:
|
|
if type(entry) == tuple:
|
|
return ldap_path(*entry)
|
|
if entry.find(',') != -1:
|
|
print(entry)
|
|
raise Exception('Warning: ldap query injection detected')
|
|
return entry
|
|
|
|
def clean_user_name(user_name):
|
|
return clean_value(rremove(user_name, '@lilik.it'))
|
|
|
|
def clean_value(value):
|
|
'''
|
|
TODO:
|
|
search_filter: the filter of the search request. It must conform to the LDAP
|
|
filter syntax specified in RFC4515. If the search filter contains the
|
|
following characters you must use the relevant escape ASCII sequence, as per
|
|
RFC4515 (section 3):
|
|
‘*’ -> ‘\\2A’, ‘(‘ -> ‘\\28’, ‘)’ -> ‘\\29’, ‘\’ -> ‘\\5C’, chr(0) -> ‘\\00’.
|
|
'''
|
|
return value
|
|
|
|
class DictDiffer(object):
|
|
"""
|
|
Calculate the difference between two dictionaries as:
|
|
(1) items added
|
|
(2) items removed
|
|
(3) keys same in both but changed values
|
|
(4) keys same in both and unchanged values
|
|
"""
|
|
def __init__(self, current_dict, past_dict):
|
|
self.current_dict, self.past_dict = current_dict, past_dict
|
|
self.set_current, self.set_past = set(current_dict.keys()), set(past_dict.keys())
|
|
self.intersect = self.set_current.intersection(self.set_past)
|
|
def added(self):
|
|
return self.set_current - self.intersect
|
|
def removed(self):
|
|
return self.set_past - self.intersect
|
|
def changed(self):
|
|
return set(o for o in self.intersect if self.past_dict[o] != self.current_dict[o])
|
|
def unchanged(self):
|
|
return set(o for o in self.intersect if self.past_dict[o] == self.current_dict[o])
|