]> git.ipfire.org Git - thirdparty/openldap.git/commitdiff
ITS#10414 Do not replace tool's provided buffer master 818/head
authorOndřej Kuzník <ondra@mistotebe.net>
Tue, 16 Dec 2025 13:56:34 +0000 (13:56 +0000)
committerQuanah Gibson-Mount <quanah@openldap.org>
Tue, 16 Dec 2025 16:33:10 +0000 (16:33 +0000)
servers/slapd/bconfig.c

index 4d793fde58823dd8516737a380e0824eb4184dbb..3004898cf52590a8645b7c448dde49012af3eefa 100644 (file)
@@ -8040,6 +8040,8 @@ config_tool_entry_put( BackendDB *be, Entry *e, struct berval *text )
                                        strncmp( e->e_nname.bv_val + 
                                        STRLENOF( "olcDatabase" ), "=frontend",
                                        STRLENOF( "=frontend" ))) {
                                        strncmp( e->e_nname.bv_val + 
                                        STRLENOF( "olcDatabase" ), "=frontend",
                                        STRLENOF( "=frontend" ))) {
+                               struct berval message = BER_BVC("autocreation of \"olcDatabase={-1}frontend\" failed");
+
                                memset( &ca, 0, sizeof(ConfigArgs));
                                ca.be = frontendDB;
                                ca.bi = frontendDB->bd_info;
                                memset( &ca, 0, sizeof(ConfigArgs));
                                ca.be = frontendDB;
                                ca.bi = frontendDB->bd_info;
@@ -8061,8 +8063,7 @@ config_tool_entry_put( BackendDB *be, Entry *e, struct berval *text )
                                op->o_ndn = be->be_rootndn;
                                rc = slap_add_opattrs(op, NULL, NULL, 0, 0);
                                if ( rc != LDAP_SUCCESS ) {
                                op->o_ndn = be->be_rootndn;
                                rc = slap_add_opattrs(op, NULL, NULL, 0, 0);
                                if ( rc != LDAP_SUCCESS ) {
-                                       text->bv_val = "autocreation of \"olcDatabase={-1}frontend\" failed";
-                                       text->bv_len = STRLENOF("autocreation of \"olcDatabase={-1}frontend\" failed");
+                                       ber_bvreplace( text, &message );
                                        return NOID;
                                }
 
                                        return NOID;
                                }
 
@@ -8070,8 +8071,7 @@ config_tool_entry_put( BackendDB *be, Entry *e, struct berval *text )
                                                bi->bi_tool_entry_put( &cfb->cb_db, ce, text ) != NOID ) {
                                        cfb->cb_got_ldif |= BCONFIG_GOT_FRONTEND;
                                } else {
                                                bi->bi_tool_entry_put( &cfb->cb_db, ce, text ) != NOID ) {
                                        cfb->cb_got_ldif |= BCONFIG_GOT_FRONTEND;
                                } else {
-                                       text->bv_val = "autocreation of \"olcDatabase={-1}frontend\" failed";
-                                       text->bv_len = STRLENOF("autocreation of \"olcDatabase={-1}frontend\" failed");
+                                       ber_bvreplace( text, &message );
                                        return NOID;
                                }
                        } else {
                                        return NOID;
                                }
                        } else {
@@ -8117,6 +8117,8 @@ config_tool_entry_put( BackendDB *be, Entry *e, struct berval *text )
                                        strncmp( e->e_nname.bv_val +
                                        STRLENOF( "olcDatabase" ), "=config",
                                        STRLENOF( "=config" )) ) {
                                        strncmp( e->e_nname.bv_val +
                                        STRLENOF( "olcDatabase" ), "=config",
                                        STRLENOF( "=config" )) ) {
+                               struct berval message = BER_BVC("autocreation of \"olcDatabase={0}config\" failed");
+
                                memset( &ca, 0, sizeof(ConfigArgs));
                                ca.be = LDAP_STAILQ_FIRST( &backendDB );
                                ca.bi = ca.be->bd_info;
                                memset( &ca, 0, sizeof(ConfigArgs));
                                ca.be = LDAP_STAILQ_FIRST( &backendDB );
                                ca.bi = ca.be->bd_info;
@@ -8139,16 +8141,14 @@ config_tool_entry_put( BackendDB *be, Entry *e, struct berval *text )
                                op->ora_e = ce;
                                rc = slap_add_opattrs(op, NULL, NULL, 0, 0);
                                if ( rc != LDAP_SUCCESS ) {
                                op->ora_e = ce;
                                rc = slap_add_opattrs(op, NULL, NULL, 0, 0);
                                if ( rc != LDAP_SUCCESS ) {
-                                       text->bv_val = "autocreation of \"olcDatabase={0}config\" failed";
-                                       text->bv_len = STRLENOF("autocreation of \"olcDatabase={0}config\" failed");
+                                       ber_bvreplace( text, &message );
                                        return NOID;
                                }
                                if (ce && bi && bi->bi_tool_entry_put &&
                                                bi->bi_tool_entry_put( &cfb->cb_db, ce, text ) != NOID ) {
                                        cfb->cb_got_ldif |= BCONFIG_GOT_CONFIG;
                                } else {
                                        return NOID;
                                }
                                if (ce && bi && bi->bi_tool_entry_put &&
                                                bi->bi_tool_entry_put( &cfb->cb_db, ce, text ) != NOID ) {
                                        cfb->cb_got_ldif |= BCONFIG_GOT_CONFIG;
                                } else {
-                                       text->bv_val = "autocreation of \"olcDatabase={0}config\" failed";
-                                       text->bv_len = STRLENOF("autocreation of \"olcDatabase={0}config\" failed");
+                                       ber_bvreplace( text, &message );
                                        return NOID;
                                }
                        } else {
                                        return NOID;
                                }
                        } else {
@@ -8160,7 +8160,9 @@ config_tool_entry_put( BackendDB *be, Entry *e, struct berval *text )
                config_add_internal( cfb, e, &ca, NULL, NULL, NULL ) == 0 )
                return bi->bi_tool_entry_put( &cfb->cb_db, e, text );
        else {
                config_add_internal( cfb, e, &ca, NULL, NULL, NULL ) == 0 )
                return bi->bi_tool_entry_put( &cfb->cb_db, e, text );
        else {
-               ber_str2bv( ca.cr_msg, 0, 0, text );
+               struct berval bv;
+               ber_str2bv( ca.cr_msg, 0, 0, &bv );
+               ber_bvreplace( text, &bv );
                return NOID;
        }
 }
                return NOID;
        }
 }