allow '-o value-check={yes|no}' for optional value checking, disabled in quick mode (ITS#6592)

This commit is contained in:
Pierangelo Masarati 2010-09-07 05:47:55 +00:00
parent 34f4f38acc
commit 856f1b401a
3 changed files with 73 additions and 0 deletions

View File

@ -1588,6 +1588,7 @@ LDAP_SLAPD_V (int) slapMode;
#define SLAP_TOOL_READONLY 0x0400
#define SLAP_TOOL_QUICK 0x0800
#define SLAP_TOOL_NO_SCHEMA_CHECK 0x1000
#define SLAP_TOOL_VALUE_CHECK 0x2000
#define SB_TLS_DEFAULT (-1)
#define SB_TLS_OFF 0

View File

@ -103,6 +103,14 @@ slapadd( int argc, char **argv )
checkvals = (slapMode & SLAP_TOOL_QUICK) ? 0 : 1;
/* do not check values in quick mode */
if ( slapMode & SLAP_TOOL_QUICK ) {
if ( slapMode & SLAP_TOOL_VALUE_CHECK ) {
fprintf( stderr, "%s: value-check incompatible with quick mode; disabled.\n", progname );
slapMode &= ~SLAP_TOOL_VALUE_CHECK;
}
}
lmax = 0;
nextline = 0;
@ -267,6 +275,34 @@ slapadd( int argc, char **argv )
}
textbuf[ 0 ] = '\0';
}
if ( (slapMode & SLAP_TOOL_VALUE_CHECK) != 0) {
Modifications *ml = NULL;
if ( slap_entry2mods( e, &ml, &text, textbuf, textlen )
!= 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;
}
textbuf[ 0 ] = '\0';
rc = slap_mods_check( op, ml, &text, textbuf, textlen, NULL );
slap_mods_free( ml, 1 );
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;
}
textbuf[ 0 ] = '\0';
}
}
if ( SLAP_LASTMOD(be) ) {

View File

@ -192,6 +192,42 @@ parse_slapopt( int tool, int *mode )
#endif /* LOG_LOCAL4 */
#endif /* LDAP_DEBUG && LDAP_SYSLOG */
} else if ( strncasecmp( optarg, "schema-check", len ) == 0 ) {
switch ( tool ) {
case SLAPADD:
if ( strcasecmp( p, "yes" ) == 0 ) {
*mode &= ~SLAP_TOOL_NO_SCHEMA_CHECK;
} else if ( strcasecmp( p, "no" ) == 0 ) {
*mode |= SLAP_TOOL_NO_SCHEMA_CHECK;
} else {
Debug( LDAP_DEBUG_ANY, "unable to parse schema-check=\"%s\".\n", p, 0, 0 );
return -1;
}
break;
default:
Debug( LDAP_DEBUG_ANY, "schema-check meaningless for tool.\n", 0, 0, 0 );
break;
}
} else if ( strncasecmp( optarg, "value-check", len ) == 0 ) {
switch ( tool ) {
case SLAPADD:
if ( strcasecmp( p, "yes" ) == 0 ) {
*mode |= SLAP_TOOL_VALUE_CHECK;
} else if ( strcasecmp( p, "no" ) == 0 ) {
*mode &= ~SLAP_TOOL_VALUE_CHECK;
} else {
Debug( LDAP_DEBUG_ANY, "unable to parse value-check=\"%s\".\n", p, 0, 0 );
return -1;
}
break;
default:
Debug( LDAP_DEBUG_ANY, "value-check meaningless for tool.\n", 0, 0, 0 );
break;
}
} else {
return -1;
}