[python-ldap] modifyModlist : are old and new values get compared somehow ?

Benjamin Dauvergne bdauvergne at entrouvert.com
Mon Nov 30 07:10:00 EST 2015


Le 11/30, mh at ow2.org a écrit :
> Hi,
> 
> In the following code,
> 
>     old = {'attr':['oldvalue']}
>     new = {'attr':['newvalue']}
> 
>     mod = modlist.modifyModlist(old,new)
> 
>     l.modify_s(dn,mod)
> 
> 
> I'm not sure to fully understand the documentation ; it seems the new
> attribute value is modified in all case - whatever the value stored in
> old attr ; in this case what's the point in specifying an 'oldvalue' ?

As LDAP is a multivalued database i.e. each attribute can have multiple values, what's computed by
modifyModlist is a "diff": remove old values, add new values. If you want to keep some old
values because for example the schema forbid a value to be missing (and between the DELETE and the
ADD there will be a time where no value is defined) you have create your modlist yourself such as:

  l.modify_s(dn, [(ldap.MOD_REPLACE, attr, ['newvalue'])])

modlist.modifyModlist is just an helper function to build such change lists, possible value for the
action are:
- ldap.MOD_ADD
- ldap.MOD_DELETE
- ldap.MOD_REPLACE
- ldap.MOD_INCREMENT

-- 
Benjamin Dauvergne - Tel Entrouvert: 01 43 35 01 35 - Tel perso: 01 84 16 24 53


More information about the python-ldap mailing list