From 10e01964fc135c317870558e80deda0556a83e18 Mon Sep 17 00:00:00 2001 From: Kurt Zeilenga Date: Mon, 13 Feb 2006 21:37:39 +0000 Subject: [PATCH] slapadd no-schema-check support (not yet documented) --- servers/slapd/back-ldbm/compare.c | 5 +---- servers/slapd/slap.h | 1 + servers/slapd/slapadd.c | 20 +++++++++++--------- servers/slapd/slapcommon.c | 9 ++++++--- 4 files changed, 19 insertions(+), 16 deletions(-) diff --git a/servers/slapd/back-ldbm/compare.c b/servers/slapd/back-ldbm/compare.c index 7b80428047..ab6022809e 100644 --- a/servers/slapd/back-ldbm/compare.c +++ b/servers/slapd/back-ldbm/compare.c @@ -46,10 +46,7 @@ ldbm_back_compare( e = dn2entry_r( op->o_bd, &op->o_req_ndn, &matched ); if ( e == NULL ) { if ( matched != NULL ) { - struct berval bv; - - ber_str2bv_x( matched, 0, 1, &bv, op->o_tmpmemctx ); - rs->sr_matched = bv.bv_val; + rs->sr_matched = ch_strdup( matched->e_dn ); rs->sr_ref = is_entry_referral( matched ) ? get_entry_referrals( op, matched ) : NULL; diff --git a/servers/slapd/slap.h b/servers/slapd/slap.h index bbd56960b9..0037828491 100644 --- a/servers/slapd/slap.h +++ b/servers/slapd/slap.h @@ -1538,6 +1538,7 @@ LDAP_SLAPD_V (int) slapMode; #define SLAP_TOOL_READMAIN 0x0200 #define SLAP_TOOL_READONLY 0x0400 #define SLAP_TOOL_QUICK 0x0800 +#define SLAP_TOOL_NO_SCHEMA_CHECK 0x1000 #define SB_TLS_DEFAULT (-1) #define SB_TLS_OFF 0 diff --git a/servers/slapd/slapadd.c b/servers/slapd/slapadd.c index 588fa2a282..11cf55f371 100644 --- a/servers/slapd/slapadd.c +++ b/servers/slapd/slapadd.c @@ -193,16 +193,18 @@ slapadd( int argc, char **argv ) /* check schema */ op->o_bd = be; - rc = entry_schema_check( op, e, NULL, manage, - &text, textbuf, textlen ); + if ( (slapMode & SLAP_TOOL_NO_SCHEMA_CHECK) == 0) { + rc = entry_schema_check( op, e, NULL, manage, + &text, textbuf, textlen ); - if( rc != LDAP_SUCCESS ) { - fprintf( stderr, "%s: dn=\"%s\" (line=%d): (%d) %s\n", - progname, e->e_dn, lineno, rc, text ); - rc = EXIT_FAILURE; - entry_free( e ); - if( continuemode ) continue; - break; + if( rc != LDAP_SUCCESS ) { + fprintf( stderr, "%s: dn=\"%s\" (line=%d): (%d) %s\n", + progname, e->e_dn, lineno, rc, text ); + rc = EXIT_FAILURE; + entry_free( e ); + if( continuemode ) continue; + break; + } } } diff --git a/servers/slapd/slapcommon.c b/servers/slapd/slapcommon.c index dbe0ed2a3a..581e066352 100644 --- a/servers/slapd/slapcommon.c +++ b/servers/slapd/slapcommon.c @@ -63,7 +63,7 @@ usage( int tool, const char *progname ) case SLAPADD: options = " [-c]\n\t[-g] [-n databasenumber | -b suffix]\n" - "\t[-l ldiffile] [-q] [-u] [-w]\n"; + "\t[-l ldiffile] [-q] [-u] [-s] [-w]\n"; break; case SLAPAUTH: @@ -209,7 +209,7 @@ slap_tool_init( switch( tool ) { case SLAPADD: - options = "b:cd:f:F:gl:n:qtuvw"; + options = "b:cd:f:F:gl:n:qstuvw"; break; case SLAPCAT: @@ -376,7 +376,10 @@ slap_tool_init( break; case 's': /* dump subtree */ - subtree = strdup( optarg ); + if ( tool == SLAPADD ) + mode |= SLAP_TOOL_NO_SCHEMA_CHECK; + else if ( tool == SLAPCAT ) + subtree = strdup( optarg ); break; case 't': /* turn on truncate */ -- 2.39.5