]> git.sur5r.net Git - openldap/commitdiff
Initial, very unforgiving, booleanValidate and booleanMatch.
authorKurt Zeilenga <kurt@openldap.org>
Thu, 29 Jun 2000 19:00:17 +0000 (19:00 +0000)
committerKurt Zeilenga <kurt@openldap.org>
Thu, 29 Jun 2000 19:00:17 +0000 (19:00 +0000)
servers/slapd/schema_init.c

index ec4da72eb2f6ec70b14341531b3f10dce75e7b2d..1c3d4b26243226341673712319c7b7108f96d189 100644 (file)
@@ -22,7 +22,6 @@
 
 /* unimplemented validators */
 #define bitStringValidate                              NULL
-#define booleanValidate                                        NULL
 
 /* recycled normalization routines */
 #define faxNumberNormalize                             numericStringNormalize
 
 /* unimplemented normalizers */
 #define bitStringNormalize                             NULL
-#define booleanNormalize                               NULL
 
 /* unimplemented pretters */
-#define booleanPretty                                  NULL
 #define dnPretty                                               NULL
 #define integerPretty                                  NULL
 
@@ -301,6 +298,49 @@ blobValidate(
        return LDAP_SUCCESS;
 }
 
+/*
+ * Handling boolean syntax and matching is quite rigid.
+ * A more flexible approach would be to allow a variety
+ * of strings to be normalized and prettied into TRUE
+ * and FALSE.
+ */
+static int
+booleanValidate(
+       Syntax *syntax,
+       struct berval *in )
+{
+       /* very unforgiving validation, requires no normalization
+        * before simplistic matching
+        */
+
+       if( in->bv_len == 4 ) {
+               if( !memcmp( in->bv_val, "TRUE", 4 ) ) {
+                       return LDAP_SUCCESS;
+               }
+       } else if( in->bv_len == 5 ) {
+               if( !memcmp( in->bv_val, "FALSE", 5 ) ) {
+                       return LDAP_SUCCESS;
+               }
+       }
+
+       return LDAP_INVALID_SYNTAX;
+}
+
+static int
+booleanMatch(
+       int *matchp,
+       unsigned flags,
+       Syntax *syntax,
+       MatchingRule *mr,
+       struct berval *value,
+       void *assertedValue )
+{
+       /* simplistic matching allowed by rigid validation */
+       struct berval *asserted = (struct berval *) assertedValue;
+       *matchp = value->bv_len != asserted->bv_len;
+       return LDAP_SUCCESS;
+}
+
 static int
 UTF8StringValidate(
        Syntax *syntax,
@@ -1503,7 +1543,7 @@ struct syntax_defs_rec syntax_defs[] = {
        {"( 1.3.6.1.4.1.1466.115.121.1.6 DESC 'Bit String' )",
                0, bitStringValidate, bitStringNormalize, NULL },
        {"( 1.3.6.1.4.1.1466.115.121.1.7 DESC 'Boolean' )",
-               0, booleanValidate, booleanNormalize, booleanPretty},
+               0, booleanValidate, NULL, 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, berValidate, NULL, NULL},
@@ -1718,6 +1758,11 @@ struct mrule_defs_rec mrule_defs[] = {
                SLAP_MR_SUBSTR | SLAP_MR_EXT,
                NULL, NULL, caseIgnoreListSubstringsMatch, NULL, NULL},
 
+       {"( 2.5.13.13 NAME 'booleanMatch' "
+               "SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 )",
+               SLAP_MR_EQUALITY | SLAP_MR_EXT,
+               NULL, NULL, booleanMatch, NULL, NULL},
+
        {"( 2.5.13.14 NAME 'integerMatch' "
                "SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 )",
                SLAP_MR_EQUALITY | SLAP_MR_EXT,