]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/schema_init.c
trace illegal condition in backsql_strfcat
[openldap] / servers / slapd / schema_init.c
index 5e41856b58be662ae11b99203aea83b7a4756192..8d157a5976b3a45d9e04124bc3f3091942a74042 100644 (file)
@@ -37,7 +37,7 @@
 /* recycled matching routines */
 #define bitStringMatch                                 octetStringMatch
 #define numericStringMatch                             caseIgnoreIA5Match
-#define objectIdentifierMatch                  caseIgnoreIA5Match
+#define objectIdentifierMatch                  octetStringMatch
 #define telephoneNumberMatch                   caseIgnoreIA5Match
 #define telephoneNumberSubstringsMatch caseIgnoreIA5SubstringsMatch
 #define generalizedTimeMatch                   caseIgnoreIA5Match
@@ -138,7 +138,7 @@ octetStringMatch(
 }
 
 /* Index generation function */
-static int octetStringIndexer(
+int octetStringIndexer(
        slap_mask_t use,
        slap_mask_t flags,
        Syntax *syntax,
@@ -186,6 +186,7 @@ static int octetStringIndexer(
        }
 
        keys[i].bv_val = NULL;
+       keys[i].bv_len = 0;
 
        *keysp = keys;
 
@@ -193,20 +194,20 @@ static int octetStringIndexer(
 }
 
 /* Index generation function */
-static int octetStringFilter(
+int octetStringFilter(
        slap_mask_t use,
        slap_mask_t flags,
        Syntax *syntax,
        MatchingRule *mr,
        struct berval *prefix,
-       void * assertValue,
+       void * assertedValue,
        BerVarray *keysp )
 {
        size_t slen, mlen;
        BerVarray keys;
        HASH_CONTEXT   HASHcontext;
        unsigned char   HASHdigest[HASH_BYTES];
-       struct berval *value = (struct berval *) assertValue;
+       struct berval *value = (struct berval *) assertedValue;
        struct berval digest;
        digest.bv_val = HASHdigest;
        digest.bv_len = sizeof(HASHdigest);
@@ -231,6 +232,7 @@ static int octetStringFilter(
 
        ber_dupbv( keys, &digest );
        keys[1].bv_val = NULL;
+       keys[1].bv_len = 0;
 
        *keysp = keys;
 
@@ -929,7 +931,7 @@ approxFilter(
        Syntax *syntax,
        MatchingRule *mr,
        struct berval *prefix,
-       void * assertValue,
+       void * assertedValue,
        BerVarray *keysp )
 {
        char *c;
@@ -938,7 +940,7 @@ approxFilter(
        BerVarray keys;
 
        /* Yes, this is necessary */
-       val = UTF8bvnormalize( ((struct berval *)assertValue),
+       val = UTF8bvnormalize( ((struct berval *)assertedValue),
                NULL, LDAP_UTF8_APPROX );
        if( val == NULL || val->bv_val == NULL ) {
                keys = (struct berval *)ch_malloc( sizeof(struct berval) );
@@ -1068,7 +1070,7 @@ approxFilter(
        Syntax *syntax,
        MatchingRule *mr,
        struct berval *prefix,
-       void * assertValue,
+       void * assertedValue,
        BerVarray *keysp )
 {
        BerVarray keys;
@@ -1077,7 +1079,7 @@ approxFilter(
        keys = (struct berval *)ch_malloc( sizeof( struct berval * ) * 2 );
 
        /* Yes, this is necessary */
-       s = UTF8normalize( ((struct berval *)assertValue),
+       s = UTF8normalize( ((struct berval *)assertedValue),
                             UTF8_NOCASEFOLD );
        if( s == NULL ) {
                keys[0] = NULL;
@@ -1333,7 +1335,7 @@ static int caseExactIgnoreFilter(
        Syntax *syntax,
        MatchingRule *mr,
        struct berval *prefix,
-       void * assertValue,
+       void * assertedValue,
        BerVarray *keysp )
 {
        unsigned casefold;
@@ -1353,7 +1355,7 @@ static int caseExactIgnoreFilter(
        casefold = ( mr != caseExactMatchingRule )
                ? LDAP_UTF8_CASEFOLD : LDAP_UTF8_NOCASEFOLD;
 
-       UTF8bvnormalize( (struct berval *) assertValue, &value, casefold );
+       UTF8bvnormalize( (struct berval *) assertedValue, &value, casefold );
        /* This usually happens if filter contains bad UTF8 */
        if( value.bv_val == NULL ) {
                keys = ch_malloc( sizeof( struct berval ) );
@@ -1572,7 +1574,7 @@ static int caseExactIgnoreSubstringsFilter(
        Syntax *syntax,
        MatchingRule *mr,
        struct berval *prefix,
-       void * assertValue,
+       void * assertedValue,
        BerVarray *keysp )
 {
        SubstringsAssertion *sa;
@@ -1589,7 +1591,7 @@ static int caseExactIgnoreSubstringsFilter(
        casefold = ( mr != caseExactSubstringsMatchingRule )
                ? LDAP_UTF8_CASEFOLD : LDAP_UTF8_NOCASEFOLD;
 
-       sa = UTF8SubstringsassertionNormalize( assertValue, casefold );
+       sa = UTF8SubstringsassertionNormalize( assertedValue, casefold );
        if( sa == NULL ) {
                *keysp = NULL;
                return LDAP_SUCCESS;
@@ -2021,7 +2023,7 @@ static int integerFilter(
        Syntax *syntax,
        MatchingRule *mr,
        struct berval *prefix,
-       void * assertValue,
+       void * assertedValue,
        BerVarray *keysp )
 {
        size_t slen, mlen;
@@ -2036,7 +2038,7 @@ static int integerFilter(
        slen = syntax->ssyn_oidlen;
        mlen = mr->smr_oidlen;
 
-       integerNormalize( syntax, assertValue, &norm );
+       integerNormalize( syntax, assertedValue, &norm );
 
        keys = ch_malloc( sizeof( struct berval ) * 2 );
 
@@ -2415,7 +2417,7 @@ static int caseExactIA5Filter(
        Syntax *syntax,
        MatchingRule *mr,
        struct berval *prefix,
-       void * assertValue,
+       void * assertedValue,
        BerVarray *keysp )
 {
        size_t slen, mlen;
@@ -2430,7 +2432,7 @@ static int caseExactIA5Filter(
        slen = syntax->ssyn_oidlen;
        mlen = mr->smr_oidlen;
 
-       value = (struct berval *) assertValue;
+       value = (struct berval *) assertedValue;
 
        keys = ch_malloc( sizeof( struct berval ) * 2 );
 
@@ -2621,10 +2623,10 @@ static int caseExactIA5SubstringsFilter(
        Syntax *syntax,
        MatchingRule *mr,
        struct berval *prefix,
-       void * assertValue,
+       void * assertedValue,
        BerVarray *keysp )
 {
-       SubstringsAssertion *sa = assertValue;
+       SubstringsAssertion *sa = assertedValue;
        char pre;
        ber_len_t nkeys = 0;
        size_t slen, mlen, klen;
@@ -3002,7 +3004,7 @@ static int caseIgnoreIA5Filter(
        Syntax *syntax,
        MatchingRule *mr,
        struct berval *prefix,
-       void * assertValue,
+       void * assertedValue,
        BerVarray *keysp )
 {
        size_t slen, mlen;
@@ -3017,7 +3019,7 @@ static int caseIgnoreIA5Filter(
        slen = syntax->ssyn_oidlen;
        mlen = mr->smr_oidlen;
 
-       ber_dupbv( &value, (struct berval *) assertValue );
+       ber_dupbv( &value, (struct berval *) assertedValue );
        ldap_pvt_str2lower( value.bv_val );
 
        keys = ch_malloc( sizeof( struct berval ) * 2 );
@@ -3216,10 +3218,10 @@ static int caseIgnoreIA5SubstringsFilter(
        Syntax *syntax,
        MatchingRule *mr,
        struct berval *prefix,
-       void * assertValue,
+       void * assertedValue,
        BerVarray *keysp )
 {
-       SubstringsAssertion *sa = assertValue;
+       SubstringsAssertion *sa = assertedValue;
        char pre;
        ber_len_t nkeys = 0;
        size_t slen, mlen, klen;
@@ -3915,13 +3917,13 @@ static int certificateExactFilter(
        Syntax *syntax,
        MatchingRule *mr,
        struct berval *prefix,
-       void * assertValue,
+       void * assertedValue,
        BerVarray *keysp )
 {
        BerVarray keys;
        struct berval asserted_serial;
 
-       serial_and_issuer_parse(assertValue,
+       serial_and_issuer_parse(assertedValue,
                                &asserted_serial,
                                NULL);
 
@@ -4266,19 +4268,10 @@ bootParameterValidate(
        return LDAP_SUCCESS;
 }
 
-static struct syntax_defs_rec {
-       char *sd_desc;
 #define X_BINARY "X-BINARY-TRANSFER-REQUIRED 'TRUE' "
 #define X_NOT_H_R "X-NOT-HUMAN-READABLE 'TRUE' "
-       int sd_flags;
-       slap_syntax_validate_func *sd_validate;
-       slap_syntax_transform_func *sd_normalize;
-       slap_syntax_transform_func *sd_pretty;
-#ifdef SLAPD_BINARY_CONVERSION
-       slap_syntax_transform_func *sd_ber2str;
-       slap_syntax_transform_func *sd_str2ber;
-#endif
-} syntax_defs[] = {
+
+static slap_syntax_defs_rec syntax_defs[] = {
        {"( 1.3.6.1.4.1.1466.115.121.1.1 DESC 'ACI Item' "
                X_BINARY X_NOT_H_R ")",
                SLAP_SYNTAX_BINARY|SLAP_SYNTAX_BER, NULL, NULL, NULL},
@@ -4456,17 +4449,7 @@ static struct syntax_defs_rec {
  * 2.5.13.43   readerAndKeyIDMatch
  * 2.5.13.44   attributeIntegrityMatch
  */
-static struct mrule_defs_rec {
-       char *                                          mrd_desc;
-       slap_mask_t                                     mrd_usage;
-       slap_mr_convert_func *          mrd_convert;
-       slap_mr_normalize_func *        mrd_normalize;
-       slap_mr_match_func *            mrd_match;
-       slap_mr_indexer_func *          mrd_indexer;
-       slap_mr_filter_func *           mrd_filter;
-
-       char *                                          mrd_associated;
-} mrule_defs[] = {
+static slap_mrule_defs_rec mrule_defs[] = {
        /*
         * EQUALITY matching rules must be listed after associated APPROX
         * matching rules.  So, we list all APPROX matching rules first.
@@ -4523,7 +4506,7 @@ static struct mrule_defs_rec {
 
        {"( 2.5.13.4 NAME 'caseIgnoreSubstringsMatch' "
                "SYNTAX 1.3.6.1.4.1.1466.115.121.1.58 )",
-               SLAP_MR_SUBSTR | SLAP_MR_EXT,
+               SLAP_MR_SUBSTR,
                NULL, NULL,
                caseExactIgnoreSubstringsMatch,
                caseExactIgnoreSubstringsIndexer,
@@ -4546,7 +4529,7 @@ static struct mrule_defs_rec {
 
        {"( 2.5.13.7 NAME 'caseExactSubstringsMatch' "
                "SYNTAX 1.3.6.1.4.1.1466.115.121.1.58 )",
-               SLAP_MR_SUBSTR | SLAP_MR_EXT,
+               SLAP_MR_SUBSTR,
                NULL, NULL,
                caseExactIgnoreSubstringsMatch,
                caseExactIgnoreSubstringsIndexer,
@@ -4564,7 +4547,7 @@ static struct mrule_defs_rec {
 
        {"( 2.5.13.10 NAME 'numericStringSubstringsMatch' "
                "SYNTAX 1.3.6.1.4.1.1466.115.121.1.58 )",
-               SLAP_MR_SUBSTR | SLAP_MR_EXT,
+               SLAP_MR_SUBSTR,
                NULL, NULL,
                caseIgnoreIA5SubstringsMatch,
                caseIgnoreIA5SubstringsIndexer,
@@ -4580,7 +4563,7 @@ static struct mrule_defs_rec {
 
        {"( 2.5.13.12 NAME 'caseIgnoreListSubstringsMatch' "
                "SYNTAX 1.3.6.1.4.1.1466.115.121.1.58 )",
-               SLAP_MR_SUBSTR | SLAP_MR_EXT,
+               SLAP_MR_SUBSTR,
                NULL, NULL,
                caseIgnoreListSubstringsMatch, NULL, NULL,
                NULL},
@@ -4631,7 +4614,7 @@ static struct mrule_defs_rec {
 
        {"( 2.5.13.21 NAME 'telephoneNumberSubstringsMatch' "
                "SYNTAX 1.3.6.1.4.1.1466.115.121.1.58 )",
-               SLAP_MR_SUBSTR | SLAP_MR_EXT,
+               SLAP_MR_SUBSTR,
                NULL, NULL,
                telephoneNumberSubstringsMatch,
                telephoneNumberSubstringsIndexer,
@@ -4775,17 +4758,7 @@ slap_schema_init( void )
        assert( schema_init_done == 0 );
 
        for ( i=0; syntax_defs[i].sd_desc != NULL; i++ ) {
-               res = register_syntax( syntax_defs[i].sd_desc,
-                       syntax_defs[i].sd_flags,
-                       syntax_defs[i].sd_validate,
-                       syntax_defs[i].sd_normalize,
-                       syntax_defs[i].sd_pretty
-#ifdef SLAPD_BINARY_CONVERSION
-                       ,
-                       syntax_defs[i].sd_ber2str,
-                       syntax_defs[i].sd_str2ber
-#endif
-               );
+               res = register_syntax( &syntax_defs[i] );
 
                if ( res ) {
                        fprintf( stderr, "slap_schema_init: Error registering syntax %s\n",
@@ -4802,15 +4775,7 @@ slap_schema_init( void )
                        continue;
                }
 
-               res = register_matching_rule(
-                       mrule_defs[i].mrd_desc,
-                       mrule_defs[i].mrd_usage,
-                       mrule_defs[i].mrd_convert,
-                       mrule_defs[i].mrd_normalize,
-                       mrule_defs[i].mrd_match,
-                       mrule_defs[i].mrd_indexer,
-                       mrule_defs[i].mrd_filter,
-                       mrule_defs[i].mrd_associated );
+               res = register_matching_rule( &mrule_defs[i] );
 
                if ( res ) {
                        fprintf( stderr,