]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/schema_init.c
allow array of more generic syntaxes
[openldap] / servers / slapd / schema_init.c
index 8eec00300e9d7171a8ffa9cf93ce8c4b28f0f83e..12ec8a8e1d3cd8579908870f9ed9c4d757538a9e 100644 (file)
 
 #include "ldap_utf8.h"
 
-#ifdef HAVE_TLS
-#include <openssl/x509.h>
-#include <openssl/err.h>
-#include <openssl/rsa.h>
-#include <openssl/crypto.h>
-#include <openssl/pem.h>
-#include <openssl/bio.h>
-#include <openssl/asn1.h>
-#include <openssl/x509v3.h>
-#include <openssl/ssl.h>
-#endif
-
 #include "lutil.h"
 #include "lutil_hash.h"
 #define HASH_BYTES                             LUTIL_HASH_BYTES
@@ -109,21 +97,72 @@ sequenceValidate(
        return LDAP_SUCCESS;
 }
 
-
-#ifdef HAVE_TLS
+/* X.509 certificate validation */
 static int certificateValidate( Syntax *syntax, struct berval *in )
 {
-       X509 *xcert=NULL;
-       unsigned char *p = (unsigned char *)in->bv_val;
-       xcert = d2i_X509(NULL, &p, in->bv_len);
-       if ( !xcert ) return LDAP_INVALID_SYNTAX;
-       X509_free(xcert);
+       BerElementBuffer berbuf;
+       BerElement *ber = (BerElement *)&berbuf;
+       ber_tag_t tag;
+       ber_len_t len;
+       ber_int_t i, version = 0;
+
+       ber_init2( ber, in, LBER_USE_DER );
+       tag = ber_skip_tag( ber, &len );        /* Signed wrapper */
+       if ( tag != LBER_SEQUENCE ) return LDAP_INVALID_SYNTAX;
+       tag = ber_skip_tag( ber, &len );        /* Sequence */
+       if ( tag != LBER_SEQUENCE ) return LDAP_INVALID_SYNTAX;
+       tag = ber_skip_tag( ber, &len );
+       if ( tag == 0xa0 ) {    /* Optional version */
+               tag = ber_get_int( ber, &version );
+               if ( tag != LBER_INTEGER ) return LDAP_INVALID_SYNTAX;
+       }
+       tag = ber_get_int( ber, &i );   /* Serial */
+       if ( tag != LBER_INTEGER ) return LDAP_INVALID_SYNTAX;
+       tag = ber_skip_tag( ber, &len );        /* Signature Algorithm */
+       if ( tag != LBER_SEQUENCE ) return LDAP_INVALID_SYNTAX;
+       ber_skip_data( ber, len );
+       tag = ber_skip_tag( ber, &len );        /* Issuer DN */
+       if ( tag != LBER_SEQUENCE ) return LDAP_INVALID_SYNTAX;
+       ber_skip_data( ber, len );
+       tag = ber_skip_tag( ber, &len );        /* Validity */
+       if ( tag != LBER_SEQUENCE ) return LDAP_INVALID_SYNTAX;
+       ber_skip_data( ber, len );
+       tag = ber_skip_tag( ber, &len );        /* Subject DN */
+       if ( tag != LBER_SEQUENCE ) return LDAP_INVALID_SYNTAX;
+       ber_skip_data( ber, len );
+       tag = ber_skip_tag( ber, &len );        /* Subject PublicKeyInfo */
+       if ( tag != LBER_SEQUENCE ) return LDAP_INVALID_SYNTAX;
+       ber_skip_data( ber, len );
+       tag = ber_skip_tag( ber, &len );
+       if ( tag == 0xa1 ) {    /* issuerUniqueID */
+               if ( version < 1 ) return LDAP_INVALID_SYNTAX;
+               ber_skip_data( ber, len );
+               tag = ber_skip_tag( ber, &len );
+       }
+       if ( tag == 0xa2 ) {    /* subjectUniqueID */
+               if ( version < 1 ) return LDAP_INVALID_SYNTAX;
+               ber_skip_data( ber, len );
+               tag = ber_skip_tag( ber, &len );
+       }
+       if ( tag == 0xa3 ) {    /* Extensions */
+               if ( version < 2 ) return LDAP_INVALID_SYNTAX;
+               tag = ber_skip_tag( ber, &len );
+               if ( tag != LBER_SEQUENCE ) return LDAP_INVALID_SYNTAX;
+               ber_skip_data( ber, len );
+               tag = ber_skip_tag( ber, &len );
+       }
+       /* signatureAlgorithm */
+       if ( tag != LBER_SEQUENCE ) return LDAP_INVALID_SYNTAX;
+       ber_skip_data( ber, len );
+       tag = ber_skip_tag( ber, &len );
+       /* Signature */
+       if ( tag != LBER_BITSTRING ) return LDAP_INVALID_SYNTAX; 
+       ber_skip_data( ber, len );
+       tag = ber_skip_tag( ber, &len );
+       /* Must be at end now */
+       if ( len || tag != LBER_DEFAULT ) return LDAP_INVALID_SYNTAX;
        return LDAP_SUCCESS;
 }
-#else
-#define certificateValidate sequenceValidate
-#endif
 
 int
 octetStringMatch(
@@ -2078,7 +2117,11 @@ IA5StringNormalize(
        /* Ignore initial whitespace */
        while ( ASCII_SPACE( *p ) ) p++;
 
-       normalized->bv_val = ber_strdup_x( p, ctx );
+       normalized->bv_len = val->bv_len - ( p - val->bv_val );
+       normalized->bv_val = slap_sl_malloc( normalized->bv_len + 1, ctx );
+       AC_MEMCPY( normalized->bv_val, p, normalized->bv_len );
+       normalized->bv_val[normalized->bv_len] = '\0';
+
        p = q = normalized->bv_val;
 
        while ( *p ) {
@@ -2107,7 +2150,7 @@ IA5StringNormalize(
         * position.  One is enough because the above loop collapsed
         * all whitespace to a single space.
         */
-       if ( ASCII_SPACE( q[-1] ) ) --q;
+       if ( q > normalized->bv_val && ASCII_SPACE( q[-1] ) ) --q;
 
        /* null terminate */
        *q = '\0';
@@ -3202,7 +3245,6 @@ serialNumberAndIssuerNormalize(
        return LDAP_SUCCESS;
 }
 
-#ifdef HAVE_TLS
 static int
 certificateExactNormalize(
        slap_mask_t usage,
@@ -3212,14 +3254,16 @@ certificateExactNormalize(
        struct berval *normalized,
        void *ctx )
 {
-       int rc = LDAP_INVALID_SYNTAX;
-       unsigned char *p;
-       char *serial = NULL;
+       BerElementBuffer berbuf;
+       BerElement *ber = (BerElement *)&berbuf;
+       ber_tag_t tag;
+       ber_len_t len;
+       ber_int_t i;
+       char serial[64];
        ber_len_t seriallen;
-       struct berval issuer_dn = BER_BVNULL;
-       X509_NAME *name = NULL;
-       ASN1_INTEGER *sn = NULL;
-       X509 *xcert = NULL;
+       struct berval issuer_dn = BER_BVNULL, bvdn;
+       unsigned char *p;
+       int rc = LDAP_INVALID_SYNTAX;
 
        if( BER_BVISEMPTY( val ) ) goto done;
 
@@ -3229,19 +3273,23 @@ certificateExactNormalize(
 
        assert( SLAP_MR_IS_VALUE_OF_ATTRIBUTE_SYNTAX(usage) != 0 );
 
-       p = (unsigned char *)val->bv_val;
-       xcert = d2i_X509( NULL, &p, val->bv_len);
-       if( xcert == NULL ) goto done;
-
-       sn=X509_get_serialNumber(xcert);
-       if ( sn == NULL ) goto done;
-       serial=i2s_ASN1_INTEGER(0, sn );
-       if( serial == NULL ) goto done;
-       seriallen=strlen(serial);
-
-       name=X509_get_issuer_name(xcert);
-       if( name == NULL ) goto done;
-       rc = dnX509normalize( name, &issuer_dn );
+       ber_init2( ber, val, LBER_USE_DER );
+       tag = ber_skip_tag( ber, &len );        /* Signed Sequence */
+       tag = ber_skip_tag( ber, &len );        /* Sequence */
+       tag = ber_skip_tag( ber, &len );        /* Optional version? */
+       if ( tag == 0xa0 )
+               tag = ber_get_int( ber, &i );   /* version */
+       ber_get_int( ber, &i );                         /* serial */
+
+       seriallen = snprintf( serial, sizeof(serial), "%d", i );
+       tag = ber_skip_tag( ber, &len );        /* SignatureAlg */
+       ber_skip_data( ber, len );
+       tag = ber_peek_tag( ber, &len );        /* IssuerDN */
+       len = ber_ptrlen( ber );
+       bvdn.bv_val = val->bv_val + len;
+       bvdn.bv_len = val->bv_len - len;
+
+       rc = dnX509normalize( &bvdn, &issuer_dn );
        if( rc != LDAP_SUCCESS ) goto done;
 
        normalized->bv_len = STRLENOF( "{ serialNumber , issuer \"\" }" )
@@ -3273,13 +3321,10 @@ certificateExactNormalize(
        rc = LDAP_SUCCESS;
 
 done:
-       if (xcert) X509_free(xcert);
-       if (serial) ch_free(serial);
        if (issuer_dn.bv_val) ber_memfree(issuer_dn.bv_val);
 
        return rc;
 }
-#endif /* HAVE_TLS */
 
 
 #ifndef SUPPORT_OBSOLETE_UTC_SYNTAX
@@ -3960,6 +4005,12 @@ firstComponentNormalize(
        return rc;
 }
 
+static char *country_gen_syn[] = {
+       "1.3.6.1.4.1.1466.115.121.1.15",
+       "1.3.6.1.4.1.1466.115.121.1.26",
+       "1.3.6.1.4.1.1466.115.121.1.44",
+       NULL
+};
 
 #define X_BINARY "X-BINARY-TRANSFER-REQUIRED 'TRUE' "
 #define X_NOT_H_R "X-NOT-HUMAN-READABLE 'TRUE' "
@@ -3967,176 +4018,186 @@ firstComponentNormalize(
 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},
+               SLAP_SYNTAX_BINARY|SLAP_SYNTAX_BER, NULL, NULL, NULL},
        {"( 1.3.6.1.4.1.1466.115.121.1.2 DESC 'Access Point' " X_NOT_H_R ")",
-               0, NULL, NULL},
+               0, NULL, NULL, NULL},
        {"( 1.3.6.1.4.1.1466.115.121.1.3 DESC 'Attribute Type Description' )",
-               0, NULL, NULL},
+               0, NULL, NULL, NULL},
        {"( 1.3.6.1.4.1.1466.115.121.1.4 DESC 'Audio' "
                X_NOT_H_R ")",
-               SLAP_SYNTAX_BLOB, blobValidate, NULL},
+               SLAP_SYNTAX_BLOB, NULL, blobValidate, NULL},
        {"( 1.3.6.1.4.1.1466.115.121.1.5 DESC 'Binary' "
                X_NOT_H_R ")",
-               SLAP_SYNTAX_BER, berValidate, NULL},
+               SLAP_SYNTAX_BER, NULL, berValidate, NULL},
        {"( 1.3.6.1.4.1.1466.115.121.1.6 DESC 'Bit String' )",
-               0, bitStringValidate, NULL },
+               0, NULL, bitStringValidate, NULL },
        {"( 1.3.6.1.4.1.1466.115.121.1.7 DESC 'Boolean' )",
-               0, booleanValidate, NULL},
+               0, NULL, booleanValidate, NULL},
        {"( 1.3.6.1.4.1.1466.115.121.1.8 DESC 'Certificate' "
                X_BINARY X_NOT_H_R ")",
-               SLAP_SYNTAX_BINARY|SLAP_SYNTAX_BER, certificateValidate, NULL},
+               SLAP_SYNTAX_BINARY|SLAP_SYNTAX_BER,
+               NULL, certificateValidate, NULL},
        {"( 1.3.6.1.4.1.1466.115.121.1.9 DESC 'Certificate List' "
                X_BINARY X_NOT_H_R ")",
-               SLAP_SYNTAX_BINARY|SLAP_SYNTAX_BER, sequenceValidate, NULL},
+               SLAP_SYNTAX_BINARY|SLAP_SYNTAX_BER,
+               NULL, sequenceValidate, NULL},
        {"( 1.3.6.1.4.1.1466.115.121.1.10 DESC 'Certificate Pair' "
                X_BINARY X_NOT_H_R ")",
-               SLAP_SYNTAX_BINARY|SLAP_SYNTAX_BER, sequenceValidate, NULL},
+               SLAP_SYNTAX_BINARY|SLAP_SYNTAX_BER,
+               NULL, sequenceValidate, NULL},
+#if 0  /* need to go __after__ printableString */
        {"( 1.3.6.1.4.1.1466.115.121.1.11 DESC 'Country String' )",
-               0, countryStringValidate, NULL},
+               0, "1.3.6.1.4.1.1466.115.121.1.44",
+               countryStringValidate, NULL},
+#endif
        {"( 1.3.6.1.4.1.1466.115.121.1.12 DESC 'Distinguished Name' )",
-               0, dnValidate, dnPretty},
+               0, NULL, dnValidate, dnPretty},
        {"( 1.2.36.79672281.1.5.0 DESC 'RDN' )",
-               0, rdnValidate, rdnPretty},
+               0, NULL, rdnValidate, rdnPretty},
 #ifdef LDAP_COMP_MATCH
        {"( 1.2.36.79672281.1.5.3 DESC 'allComponents' )",
-               0, allComponentsValidate, NULL},
+               0, NULL, allComponentsValidate, NULL},
        {"( 1.2.36.79672281.1.5.2 DESC 'componentFilterMatch assertion') ",
-               0, componentFilterValidate, NULL},
+               0, NULL, componentFilterValidate, NULL},
 #endif
        {"( 1.3.6.1.4.1.1466.115.121.1.13 DESC 'Data Quality' )",
-               0, NULL, NULL},
+               0, NULL, NULL, NULL},
        {"( 1.3.6.1.4.1.1466.115.121.1.14 DESC 'Delivery Method' )",
-               0, deliveryMethodValidate, NULL},
+               0, NULL, deliveryMethodValidate, NULL},
        {"( 1.3.6.1.4.1.1466.115.121.1.15 DESC 'Directory String' )",
-               0, UTF8StringValidate, NULL},
+               0, NULL, UTF8StringValidate, NULL},
        {"( 1.3.6.1.4.1.1466.115.121.1.16 DESC 'DIT Content Rule Description' )",
-               0, NULL, NULL},
+               0, NULL, NULL, NULL},
        {"( 1.3.6.1.4.1.1466.115.121.1.17 DESC 'DIT Structure Rule Description' )",
-               0, NULL, NULL},
+               0, NULL, NULL, NULL},
        {"( 1.3.6.1.4.1.1466.115.121.1.19 DESC 'DSA Quality' )",
-               0, NULL, NULL},
+               0, NULL, NULL, NULL},
        {"( 1.3.6.1.4.1.1466.115.121.1.20 DESC 'DSE Type' )",
-               0, NULL, NULL},
+               0, NULL, NULL, NULL},
        {"( 1.3.6.1.4.1.1466.115.121.1.21 DESC 'Enhanced Guide' )",
-               0, NULL, NULL},
+               0, NULL, NULL, NULL},
        {"( 1.3.6.1.4.1.1466.115.121.1.22 DESC 'Facsimile Telephone Number' )",
-               0, printablesStringValidate, NULL},
+               0, NULL, printablesStringValidate, NULL},
        {"( 1.3.6.1.4.1.1466.115.121.1.23 DESC 'Fax' " X_NOT_H_R ")",
-               SLAP_SYNTAX_BLOB, NULL, NULL},
+               SLAP_SYNTAX_BLOB, NULL, NULL, NULL},
        {"( 1.3.6.1.4.1.1466.115.121.1.24 DESC 'Generalized Time' )",
-               0, generalizedTimeValidate, NULL},
+               0, NULL, generalizedTimeValidate, NULL},
        {"( 1.3.6.1.4.1.1466.115.121.1.25 DESC 'Guide' )",
-               0, NULL, NULL},
+               0, NULL, NULL, NULL},
        {"( 1.3.6.1.4.1.1466.115.121.1.26 DESC 'IA5 String' )",
-               0, IA5StringValidate, NULL},
+               0, NULL, IA5StringValidate, NULL},
        {"( 1.3.6.1.4.1.1466.115.121.1.27 DESC 'Integer' )",
-               0, integerValidate, NULL},
+               0, NULL, integerValidate, NULL},
        {"( 1.3.6.1.4.1.1466.115.121.1.28 DESC 'JPEG' " X_NOT_H_R ")",
-               SLAP_SYNTAX_BLOB, blobValidate, NULL},
+               SLAP_SYNTAX_BLOB, NULL, blobValidate, NULL},
        {"( 1.3.6.1.4.1.1466.115.121.1.29 DESC 'Master And Shadow Access Points' )",
-               0, NULL, NULL},
+               0, NULL, NULL, NULL},
        {"( 1.3.6.1.4.1.1466.115.121.1.30 DESC 'Matching Rule Description' )",
-               0, NULL, NULL},
+               0, NULL, NULL, NULL},
        {"( 1.3.6.1.4.1.1466.115.121.1.31 DESC 'Matching Rule Use Description' )",
-               0, NULL, NULL},
+               0, NULL, NULL, NULL},
        {"( 1.3.6.1.4.1.1466.115.121.1.32 DESC 'Mail Preference' )",
-               0, NULL, NULL},
+               0, NULL, NULL, NULL},
        {"( 1.3.6.1.4.1.1466.115.121.1.33 DESC 'MHS OR Address' )",
-               0, NULL, NULL},
+               0, NULL, NULL, NULL},
        {"( 1.3.6.1.4.1.1466.115.121.1.34 DESC 'Name And Optional UID' )",
-               0, nameUIDValidate, nameUIDPretty },
+               0, NULL, nameUIDValidate, nameUIDPretty },
        {"( 1.3.6.1.4.1.1466.115.121.1.35 DESC 'Name Form Description' )",
-               0, NULL, NULL},
+               0, NULL, NULL, NULL},
        {"( 1.3.6.1.4.1.1466.115.121.1.36 DESC 'Numeric String' )",
-               0, numericStringValidate, NULL},
+               0, NULL, numericStringValidate, NULL},
        {"( 1.3.6.1.4.1.1466.115.121.1.37 DESC 'Object Class Description' )",
-               0, NULL, NULL},
+               0, NULL, NULL, NULL},
        {"( 1.3.6.1.4.1.1466.115.121.1.38 DESC 'OID' )",
-               0, numericoidValidate, NULL},
+               0, NULL, numericoidValidate, NULL},
        {"( 1.3.6.1.4.1.1466.115.121.1.39 DESC 'Other Mailbox' )",
-               0, IA5StringValidate, NULL},
+               0, NULL, IA5StringValidate, NULL},
        {"( 1.3.6.1.4.1.1466.115.121.1.40 DESC 'Octet String' )",
-               0, blobValidate, NULL},
+               0, NULL, blobValidate, NULL},
        {"( 1.3.6.1.4.1.1466.115.121.1.41 DESC 'Postal Address' )",
-               0, UTF8StringValidate, NULL},
+               0, NULL, UTF8StringValidate, NULL},
        {"( 1.3.6.1.4.1.1466.115.121.1.42 DESC 'Protocol Information' )",
-               0, NULL, NULL},
+               0, NULL, NULL, NULL},
        {"( 1.3.6.1.4.1.1466.115.121.1.43 DESC 'Presentation Address' )",
-               0, NULL, NULL},
+               0, NULL, NULL, NULL},
        {"( 1.3.6.1.4.1.1466.115.121.1.44 DESC 'Printable String' )",
-               0, printableStringValidate, NULL},
+               0, NULL, printableStringValidate, NULL},
+       /* moved here because now depends on Directory String, IA5 String 
+        * and Printable String */
+       {"( 1.3.6.1.4.1.1466.115.121.1.11 DESC 'Country String' )",
+               0, country_gen_syn, countryStringValidate, NULL},
        {"( 1.3.6.1.4.1.1466.115.121.1.45 DESC 'SubtreeSpecification' )",
 #define subtreeSpecificationValidate UTF8StringValidate /* FIXME */
-               0, subtreeSpecificationValidate, NULL},
+               0, NULL, subtreeSpecificationValidate, NULL},
        {"( 1.3.6.1.4.1.1466.115.121.1.49 DESC 'Supported Algorithm' "
                X_BINARY X_NOT_H_R ")",
-               SLAP_SYNTAX_BINARY|SLAP_SYNTAX_BER, berValidate, NULL},
+               SLAP_SYNTAX_BINARY|SLAP_SYNTAX_BER, NULL, berValidate, NULL},
        {"( 1.3.6.1.4.1.1466.115.121.1.50 DESC 'Telephone Number' )",
-               0, printableStringValidate, NULL},
+               0, NULL, printableStringValidate, NULL},
        {"( 1.3.6.1.4.1.1466.115.121.1.51 DESC 'Teletex Terminal Identifier' )",
-               0, NULL, NULL},
+               0, NULL, NULL, NULL},
        {"( 1.3.6.1.4.1.1466.115.121.1.52 DESC 'Telex Number' )",
-               0, printablesStringValidate, NULL},
+               0, NULL, printablesStringValidate, NULL},
 #ifdef SUPPORT_OBSOLETE_UTC_SYNTAX
        {"( 1.3.6.1.4.1.1466.115.121.1.53 DESC 'UTC Time' )",
-               0, utcTimeValidate, NULL},
+               0, NULL, utcTimeValidate, NULL},
 #endif
        {"( 1.3.6.1.4.1.1466.115.121.1.54 DESC 'LDAP Syntax Description' )",
-               0, NULL, NULL},
+               0, NULL, NULL, NULL},
        {"( 1.3.6.1.4.1.1466.115.121.1.55 DESC 'Modify Rights' )",
-               0, NULL, NULL},
+               0, NULL, NULL, NULL},
        {"( 1.3.6.1.4.1.1466.115.121.1.56 DESC 'LDAP Schema Definition' )",
-               0, NULL, NULL},
+               0, NULL, NULL, NULL},
        {"( 1.3.6.1.4.1.1466.115.121.1.57 DESC 'LDAP Schema Description' )",
-               0, NULL, NULL},
+               0, NULL, NULL, NULL},
        {"( 1.3.6.1.4.1.1466.115.121.1.58 DESC 'Substring Assertion' )",
-               0, NULL, NULL},
+               0, NULL, NULL, NULL},
 
        /* RFC 2307 NIS Syntaxes */
        {"( 1.3.6.1.1.1.0.0  DESC 'RFC2307 NIS Netgroup Triple' )",
-               0, nisNetgroupTripleValidate, NULL},
+               0, NULL, nisNetgroupTripleValidate, NULL},
        {"( 1.3.6.1.1.1.0.1  DESC 'RFC2307 Boot Parameter' )",
-               0, bootParameterValidate, NULL},
+               0, NULL, bootParameterValidate, NULL},
 
        /* draft-zeilenga-ldap-x509 */
        {"( 1.3.6.1.1.15.1 DESC 'Certificate Exact Assertion' )",
-               SLAP_SYNTAX_HIDE,
+               SLAP_SYNTAX_HIDE, NULL,
                serialNumberAndIssuerValidate,
                serialNumberAndIssuerPretty},
        {"( 1.3.6.1.1.15.2 DESC 'Certificate Assertion' )",
-               SLAP_SYNTAX_HIDE, NULL, NULL},
+               SLAP_SYNTAX_HIDE, NULL, NULL, NULL},
        {"( 1.3.6.1.1.15.3 DESC 'Certificate Pair Exact Assertion' )",
-               SLAP_SYNTAX_HIDE, NULL, NULL},
+               SLAP_SYNTAX_HIDE, NULL, NULL, NULL},
        {"( 1.3.6.1.1.15.4 DESC 'Certificate Pair Assertion' )",
-               SLAP_SYNTAX_HIDE, NULL, NULL},
+               SLAP_SYNTAX_HIDE, NULL, NULL, NULL},
        {"( 1.3.6.1.1.15.5 DESC 'Certificate List Exact Assertion' )",
-               SLAP_SYNTAX_HIDE, NULL, NULL},
+               SLAP_SYNTAX_HIDE, NULL, NULL, NULL},
        {"( 1.3.6.1.1.15.6 DESC 'Certificate List Assertion' )",
-               SLAP_SYNTAX_HIDE, NULL, NULL},
+               SLAP_SYNTAX_HIDE, NULL, NULL, NULL},
        {"( 1.3.6.1.1.15.7 DESC 'Algorithm Identifier' )",
-               SLAP_SYNTAX_HIDE, NULL, NULL},
+               SLAP_SYNTAX_HIDE, NULL, NULL, NULL},
 
 #ifdef SLAPD_AUTHPASSWD
        /* needs updating */
        {"( 1.3.6.1.4.1.4203.666.2.2 DESC 'OpenLDAP authPassword' )",
-               SLAP_SYNTAX_HIDE, NULL, NULL},
+               SLAP_SYNTAX_HIDE, NULL, NULL, NULL},
 #endif
 
        {"( 1.3.6.1.1.16.1 DESC 'UUID' )",
-               0, UUIDValidate, UUIDPretty},
+               0, NULL, UUIDValidate, UUIDPretty},
 
        {"( 1.3.6.1.4.1.4203.666.11.2.1 DESC 'CSN' )",
-               SLAP_SYNTAX_HIDE, csnValidate, NULL},
+               SLAP_SYNTAX_HIDE, NULL, csnValidate, NULL},
 
        /* OpenLDAP Void Syntax */
        {"( 1.3.6.1.4.1.4203.1.1.1 DESC 'OpenLDAP void' )" ,
-               SLAP_SYNTAX_HIDE, inValidate, NULL},
+               SLAP_SYNTAX_HIDE, NULL, inValidate, NULL},
 
        /* FIXME: OID is unused, but not registered yet */
        {"( 1.3.6.1.4.1.4203.666.2.7 DESC 'OpenLDAP authz' )",
-               SLAP_SYNTAX_HIDE, authzValidate, authzPretty},
+               SLAP_SYNTAX_HIDE, NULL, authzValidate, authzPretty},
 
-       {NULL, 0, NULL, NULL}
+       {NULL, 0, NULL, NULL, NULL}
 };
 
 char *certificateExactMatchSyntaxes[] = {