]> git.ipfire.org Git - thirdparty/openldap.git/commitdiff
ITS#7786 Try to synthesize missing attribute types
authorOndřej Kuzník <ondra@mistotebe.net>
Tue, 30 Mar 2021 07:43:48 +0000 (08:43 +0100)
committerQuanah Gibson-Mount <quanah@openldap.org>
Wed, 31 Mar 2021 16:14:25 +0000 (16:14 +0000)
servers/slapd/slapmodify.c

index a22fb6443dfdac3da4cb7eb8db2fcf6259633a2c..78d64b05f154c39c2b912283aa0ce964e8dda230 100644 (file)
@@ -309,6 +309,16 @@ slapmodify( int argc, char **argv )
                                int normalize = 0;
 
                                local_rc = slap_str2ad( mod->mod_type, &mods.sm_desc, &text );
+                               /*
+                                * Usually this would be a bad idea (way too dangerous, risks
+                                * corrupting the DB), but ITS#7786 documents this as a last
+                                * resort to fix cn=config and missing attributes are one of
+                                * the possible issues we might encounter.
+                                */
+                               if ( local_rc == LDAP_UNDEFINED_TYPE &&
+                                               (slapMode & SLAP_TOOL_NO_SCHEMA_CHECK) ) {
+                                       local_rc = slap_str2undef_ad( mod->mod_type, &mods.sm_desc, &text, 0 );
+                               }
                                if ( local_rc != LDAP_SUCCESS ) {
                                        fprintf( stderr, "%s: slap_str2ad(\"%s\") failed for entry \"%s\" (%d: %s, lineno=%lu)\n",
                                                progname, mod->mod_type, lr.lr_dn.bv_val, local_rc, text, lineno );