]> git.ipfire.org Git - thirdparty/openldap.git/commitdiff
ITS#10548 slapmodify: don't replace creation-related opattrs
authorHoward Chu <hyc@openldap.org>
Wed, 22 Jul 2026 19:43:16 +0000 (20:43 +0100)
committerHoward Chu <hyc@openldap.org>
Wed, 22 Jul 2026 19:43:16 +0000 (20:43 +0100)
entryUUID, createTimestamp, and creatorsName should never be changed
after initially set. Can set them if they're missing, otherwise
leave them alone.

servers/slapd/slapmodify.c

index 20ae30c1b2873f7b7dc921f6c4a8f859808e1c1b..2f3b14cf36980ae1b31003aa0f2367d2d1ab91a6 100644 (file)
@@ -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], &timestamp );
                        }
 
                        a = attr_find( e->e_attrs, slap_schema.si_ad_entryCSN );