Date: Mon, 22 Jan 2007 13:02:40 -0700
> From: Richard Megginson <rmeggins@xxxxxxxxxx>
> Rob Crittenden wrote:
>> Pete Rowley wrote:
>>> New pre-operation plugin:
>>
>> In dna_get_next_value() what could cause a call to
>> slapi_search_internal_get_entry() to fail that you have to try 3 times?
>>
> It's actually the mod operation that can fail, the original value is
> deleted and the new value added in one operation with two mods, if the
> original value has changed since the search the mod operation will
> fail. It's a way to get an atomic increment.
Ok. So I think the errors should be treated a little differently. If
the search fails, that's bad - probably a fatal error, or perhaps
someone deleted the configuration entry out from under you. I think
that if the mod fails, you should check the error code, for something
like LDAP_TYPE_OR_VALUE_EXISTS, which means the mod->add failed because
attribute already has that value, or whatever specific error is returned
from the mod->delete value operation when the value doesn't exist.
Other errors are probably fatal.
You should only be able to get LDAP_NO_SUCH_ATTRIBUTE, not
LDAP_TYPE_OR_VALUE_EXISTS from this operation. The delete of the old value
must fail before it even tries to add the new value. This is the standard
test-and-set operation in LDAP. (And of course LDAP_NO_SUCH_OBJECT if someone
is really messing with you...)
--
-- Howard Chu
Chief Architect, Symas Corp. http://www.symas.com
Director, Highland Sun http://highlandsun.com/hyc
OpenLDAP Core Team http://www.openldap.org/project/
--
Fedora-directory-devel mailing list
Fedora-directory-devel@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/fedora-directory-devel