On 7/6/06 9:25, Young, Darren <[EMAIL PROTECTED]> wrote: > > How can/should I change one value in a multivalued attribue? The > attribute I have in question is mailAlternateAddress of which there can > be any number of them attached to a given dn. As in: > > dn: uid=testacct,ou=people,o=gsb,dc=uchicago,dc=edu > mailAlternateAddress: [EMAIL PROTECTED] > mailAlternateAddress: [EMAIL PROTECTED] > mailAlternateAddress: [EMAIL PROTECTED] > > $ldap->modify or $ldap->replace? Or is it a delete the old and add a > new?
You need a modify operation that deletes the old value and adds a new value. > If I do: > > replace => [ mailAlternateAddress => '[EMAIL PROTECTED]'] > > That'll replace all the others with that one. Yes. > Say I want to change the [EMAIL PROTECTED] to [EMAIL PROTECTED] in > the above example, I could (but should I): > > $entry->delete ( 'mailAlternateAddress' => [ '[EMAIL PROTECTED]' ] ); > $entry->add ( 'mailAlternateAddress' => [ '[EMAIL PROTECTED]' ] ); Yes. I don't tend to use the Net::LDAP::Entry class much myself, but I believe that will do the right thing. You should be able to pass the single values being deleted/added as simple scalars rather than wrapping them inside an array. You will need to call $entry->update($ldap) after this. Don't forget that you can do these exact modifications in a single protocol exchange with the server. There's no need to do a read/mangle/modify cycle. So something like this should also work and avoid the extra round trip: $ldap->modify("uid=testacct,ou=people,o=gsb,dc=uchicago,dc=edu", delete => { mailAternateAddress => '[EMAIL PROTECTED]' }, add => { mailAternateAddress => '[EMAIL PROTECTED]' }); (It would also work (and read/mangle/modify would not) in the situation where you had permission to modify the values but not read the values. Password attributes are often like this, though I suspect something like mailAlternateAddress wouldn't be :-) > Or is there a way to use the replace => an existing attribute/value pair > with a new value method? No, the "replace" modification type affects *all* the values of the attribute. Delete and add is what you want. Cheers, Chris