ldap.modlist.modifyModlist()

Paul Wankadia junyer at gmail.com
Fri Sep 19 08:21:00 CEST 2008


Hi, Michael.

The current implementation of modifyModlist() clashed with some ACLs
because it touches too many values. :/

Here's a replacement that I hacked together:

def ModifyList(old_attrs, new_attrs):
  modify = []
  old_keys = set(old_attrs)
  new_keys = set(new_attrs)
  for attr in old_keys - new_keys:
    modify.append((ldap.MOD_DELETE, attr, None))
  for attr in new_keys - old_keys:
    modify.append((ldap.MOD_ADD, attr, new_attrs[attr]))
  for attr in old_keys & new_keys:
    old_values = set(old_attrs[attr])
    new_values = set(new_attrs[attr])
    if len(old_values) == 1 and len(new_values) == 1:
      if old_values != new_values:
        modify.append((ldap.MOD_REPLACE, attr, list(new_values)))
    else:
      delta = old_values - new_values
      if delta:
        modify.append((ldap.MOD_DELETE, attr, list(delta)))
      delta = new_values - old_values
      if delta:
        modify.append((ldap.MOD_ADD, attr, list(delta)))
  return modify

Would you be averse to reimplementing modifyModlist() in a similar way?

Thanks for your consideration.



More information about the python-ldap mailing list