]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/entry.c
liberally accept many LDAPv2/LDAPv3 stuff in DN (quoted parts, ';' as rdn separator...
[openldap] / servers / slapd / entry.c
index c4d49baec1288a90ae7b440050033e4b3b385189..ccb773a5a775e8d5d35ee0f4d0100ab489ab95d0 100644 (file)
@@ -176,10 +176,23 @@ str2entry( char *s )
                }
 
                if( slapMode & SLAP_TOOL_MODE ) {
+                       struct berval *pval;
                        slap_syntax_validate_func *validate =
                                ad->ad_type->sat_syntax->ssyn_validate;
+                       slap_syntax_transform_func *pretty =
+                               ad->ad_type->sat_syntax->ssyn_pretty;
 
-                       if( !validate ) {
+                       if( pretty ) {
+                               rc = pretty( ad->ad_type->sat_syntax,
+                                       &value, &pval );
+
+                       } else if( validate ) {
+                               /*
+                                * validate value per syntax
+                                */
+                               rc = validate( ad->ad_type->sat_syntax, &value );
+
+                       } else {
 #ifdef NEW_LOGGING
                                LDAP_LOG(( "operation", LDAP_LEVEL_INFO,
                                           "str2entry: no validator for syntax %s\n", 
@@ -195,11 +208,6 @@ str2entry( char *s )
                                return NULL;
                        }
 
-                       /*
-                        * validate value per syntax
-                        */
-                       rc = validate( ad->ad_type->sat_syntax, &value );
-
                        if( rc != 0 ) {
 #ifdef NEW_LOGGING
                                LDAP_LOG(( "operation", LDAP_LEVEL_ERR,
@@ -215,6 +223,12 @@ str2entry( char *s )
                                free( type );
                                return NULL;
                        }
+
+                       if( pretty ) {
+                               free( value.bv_val );
+                               value = *pval;
+                               free( pval );
+                       }
                }
 
                rc = attr_merge( e, ad, vals );