mirror of
https://git.openldap.org/openldap/openldap.git
synced 2024-12-21 03:10:25 +08:00
allow '-o value-check={yes|no}' for optional value checking, disabled in quick mode (ITS#6592)
This commit is contained in:
parent
34f4f38acc
commit
856f1b401a
@ -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
|
||||
|
@ -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) ) {
|
||||
|
@ -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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user