From: Howard Chu Date: Wed, 22 Jul 2026 19:43:16 +0000 (+0100) Subject: ITS#10548 slapmodify: don't replace creation-related opattrs X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=refs%2Fheads%2Fmaster;p=thirdparty%2Fopenldap.git ITS#10548 slapmodify: don't replace creation-related opattrs entryUUID, createTimestamp, and creatorsName should never be changed after initially set. Can set them if they're missing, otherwise leave them alone. --- diff --git a/servers/slapd/slapmodify.c b/servers/slapd/slapmodify.c index 20ae30c1b2..2f3b14cf36 100644 --- a/servers/slapd/slapmodify.c +++ b/servers/slapd/slapmodify.c @@ -496,39 +496,23 @@ slapmodify( int argc, char **argv ) } a = attr_find( e->e_attrs, slap_schema.si_ad_entryUUID ); - if ( a != NULL ) { - if ( a->a_vals != a->a_nvals ) { - SLAP_FREE( a->a_nvals[0].bv_val ); - SLAP_FREE( a->a_nvals ); - } - SLAP_FREE( a->a_vals[0].bv_val ); - SLAP_FREE( a->a_vals ); - a->a_vals = NULL; - a->a_nvals = NULL; - a->a_numvals = 0; + if ( a == NULL ) { + vals[0].bv_len = lutil_uuidstr( uuidbuf, sizeof( uuidbuf ) ); + vals[0].bv_val = uuidbuf; + attr_merge_normalize_one( e, slap_schema.si_ad_entryUUID, vals, NULL ); } - vals[0].bv_len = lutil_uuidstr( uuidbuf, sizeof( uuidbuf ) ); - vals[0].bv_val = uuidbuf; - attr_merge_normalize_one( e, slap_schema.si_ad_entryUUID, vals, NULL ); a = attr_find( e->e_attrs, slap_schema.si_ad_creatorsName ); if ( a == NULL ) { vals[0] = name; nvals[0] = nname; attr_merge( e, slap_schema.si_ad_creatorsName, vals, nvals ); - - } else { - ber_bvreplace( &a->a_vals[0], &name ); - ber_bvreplace( &a->a_nvals[0], &nname ); } a = attr_find( e->e_attrs, slap_schema.si_ad_createTimestamp ); if ( a == NULL ) { vals[0] = timestamp; attr_merge( e, slap_schema.si_ad_createTimestamp, vals, NULL ); - - } else { - ber_bvreplace( &a->a_vals[0], ×tamp ); } a = attr_find( e->e_attrs, slap_schema.si_ad_entryCSN );