From: Quanah Gibson-Mount Date: Tue, 11 Nov 2008 00:53:19 +0000 (+0000) Subject: More for ITS#5663 X-Git-Tag: OPENLDAP_REL_ENG_2_4_13~37 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=afec3f6acfea9b5062e6881c238f0404cd7e1db1;p=openldap More for ITS#5663 --- diff --git a/servers/slapd/syntax.c b/servers/slapd/syntax.c index 40bb88e63d..12ff35f7dd 100644 --- a/servers/slapd/syntax.c +++ b/servers/slapd/syntax.c @@ -209,6 +209,47 @@ syn_add( ssyn->ssyn_str2ber = def->sd_str2ber; #endif + if ( def->sd_validate == NULL && def->sd_pretty == NULL && syn->syn_extensions != NULL ) { + LDAPSchemaExtensionItem **lsei; + Syntax *subst = NULL; + + for ( lsei = syn->syn_extensions; *lsei != NULL; lsei++) { + if ( strcmp( (*lsei)->lsei_name, "X-SUBST" ) != 0 ) { + continue; + } + + assert( (*lsei)->lsei_values != NULL ); + if ( (*lsei)->lsei_values[0] == '\0' + || (*lsei)->lsei_values[1] != '\0' ) + { + Debug( LDAP_DEBUG_ANY, "syn_add(%s): exactly one substitute syntax must be present\n", + ssyn->ssyn_syn.syn_oid, 0, 0 ); + return SLAP_SCHERR_SYN_SUBST_NOT_SPECIFIED; + } + + subst = syn_find( (*lsei)->lsei_values[0] ); + if ( subst == NULL ) { + Debug( LDAP_DEBUG_ANY, "syn_add(%s): substitute syntax %s not found\n", + ssyn->ssyn_syn.syn_oid, (*lsei)->lsei_values[0], 0 ); + return SLAP_SCHERR_SYN_SUBST_NOT_FOUND; + } + break; + } + + if ( subst != NULL ) { + ssyn->ssyn_flags = subst->ssyn_flags; + ssyn->ssyn_validate = subst->ssyn_validate; + ssyn->ssyn_pretty = subst->ssyn_pretty; + + ssyn->ssyn_sups = NULL; + +#ifdef SLAPD_BINARY_CONVERSION + ssyn->ssyn_ber2str = subst->ssyn_ber2str; + ssyn->ssyn_str2ber = subst->ssyn_str2ber; +#endif + } + } + if ( def->sd_sups != NULL ) { int cnt;