|
|
@@ -1559,7 +1559,17 @@ entry2str_internal_size_attrlist( const Slapi_Attr *attrlist, int entry2str_ctrl
|
|
|
/* ";adcsn-" + a->a_deletioncsn */
|
|
|
if ( a->a_deletioncsn )
|
|
|
{
|
|
|
- elen+= 1 + LDIF_CSNPREFIX_MAXLENGTH + CSN_STRSIZE;
|
|
|
+ elen += 1 + LDIF_CSNPREFIX_MAXLENGTH + CSN_STRSIZE;
|
|
|
+ }
|
|
|
+ if ( valueset_isempty(&a->a_deleted_values)) {
|
|
|
+ /* this means the entry is deleted and has no more attributes,
|
|
|
+ * when writing the attr to disk we would loose the AD-csn.
|
|
|
+ * Add an empty value to the set of deleted values. This will
|
|
|
+ * never be seen by any client. It will never be moved to the
|
|
|
+ * present values and is only used to preserve the AD-csn
|
|
|
+ * We need to add the size for that.
|
|
|
+ */
|
|
|
+ elen += 1 + LDIF_CSNPREFIX_MAXLENGTH + CSN_STRSIZE;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
@@ -1731,7 +1741,7 @@ entry2str_internal_put_attrlist( const Slapi_Attr *attrlist, int attr_state, int
|
|
|
* present values and is only used to preserve the AD-csn
|
|
|
*/
|
|
|
valueset_add_string ((Slapi_ValueSet *)&a->a_deleted_values, "", CSN_TYPE_VALUE_DELETED, a->a_deletioncsn);
|
|
|
- }
|
|
|
+ }
|
|
|
|
|
|
entry2str_internal_put_valueset(a->a_type, a->a_deletioncsn, CSN_TYPE_ATTRIBUTE_DELETED, attr_state, &a->a_deleted_values, VALUE_DELETED, ecur, typebuf, typebuf_len, entry2str_ctrl);
|
|
|
}
|