]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/attr.c
Add missing semicolon.
[openldap] / servers / slapd / attr.c
index 163cac3f0dbb6a3076b0bbac0d0f9a2e5ca6ef73..8e3112200bf99c96797bc4776f39c2869615172d 100644 (file)
@@ -18,7 +18,7 @@
 #include <sys/param.h>
 #endif
 
-#include "ldapconfig.h"
+#include "ldap_defaults.h"
 #include "slap.h"
 
 #ifdef LDAP_DEBUG
@@ -40,15 +40,9 @@ attr_free( Attribute *a )
 char *
 attr_normalize( char *s )
 {
-       char    *save;
-
        assert( s != NULL );
 
-       for ( save = s; *s; s++ ) {
-               *s = TOLOWER( (unsigned char) *s );
-       }
-
-       return( save );
+       return( str2lower( s ) );
 }
 
 /*
@@ -227,18 +221,22 @@ attr_syntax_config(
            strcasecmp( argv[lasti], "cis" ) == 0 ) {
                at->at_syntax_oid = "1.3.6.1.4.1.1466.115.121.1.15";
                at->at_equality_oid = "2.5.13.2";
+               at->at_ordering_oid = "2.5.13.3";
+               at->at_substr_oid = "2.5.13.4";
        } else if ( strcasecmp( argv[lasti], "telephone" ) == 0 ||
            strcasecmp( argv[lasti], "tel" ) == 0 ) {
                at->at_syntax_oid = "1.3.6.1.4.1.1466.115.121.1.50";
                at->at_equality_oid = "2.5.13.20";
+               at->at_substr_oid = "2.5.13.21";
        } else if ( strcasecmp( argv[lasti], "dn" ) == 0 ) {
                at->at_syntax_oid = "1.3.6.1.4.1.1466.115.121.1.12";
                at->at_equality_oid = "2.5.13.1";
        } else if ( strcasecmp( argv[lasti], "caseexactstring" ) == 0 ||
            strcasecmp( argv[lasti], "ces" ) == 0 ) {
                at->at_syntax_oid = "1.3.6.1.4.1.1466.115.121.1.15";
-               /* notice: this is caseExactIA5Match */
-               at->at_equality_oid = "1.3.6.1.4.1.1466.109.114.1";
+               at->at_equality_oid = "2.5.13.5";
+               at->at_ordering_oid = "2.5.13.6";
+               at->at_substr_oid = "2.5.13.7";
        } else if ( strcasecmp( argv[lasti], "binary" ) == 0 ||
            strcasecmp( argv[lasti], "bin" ) == 0 ) {
                at->at_syntax_oid = "1.3.6.1.4.1.1466.115.121.1.5";
@@ -505,19 +503,16 @@ at_add(
        }
 
        if ( at->at_syntax_oid ) {
-#if 0
                if ( (syn = syn_find(sat->sat_syntax_oid)) ) {
                        sat->sat_syntax = syn;
                } else {
                        *err = sat->sat_syntax_oid;
                        return SLAP_SCHERR_SYN_NOT_FOUND;
                }
-#endif
                if ( !strcmp(at->at_syntax_oid,
                             "1.3.6.1.4.1.1466.115.121.1.15") ) {
                        if ( at->at_equality_oid &&
-                            !strcmp(at->at_equality_oid,
-                                    "1.3.6.1.4.1.1466.109.114.1") ) {
+                            !strcmp(at->at_equality_oid, "2.5.13.5") ) {
                                sat->sat_syntax_compat = SYNTAX_CES;
                        } else {
                                sat->sat_syntax_compat = SYNTAX_CIS;
@@ -537,7 +532,6 @@ at_add(
                sat->sat_syntax_compat = DEFAULT_SYNTAX;
        }
 
-#if 0
        if ( sat->sat_equality_oid ) {
                if ( (mr = mr_find(sat->sat_equality_oid)) ) {
                        sat->sat_equality = mr;
@@ -562,7 +556,27 @@ at_add(
                        return SLAP_SCHERR_MR_NOT_FOUND;
                }
        }
-#endif
+
+       /*
+        * Now inherit definitions from superiors.  We only check the
+        * direct superior since that one has already inherited from
+        * its own superiorss
+        */
+       if ( sat->sat_sup ) {
+               if ( !sat->sat_syntax ) {
+                       sat->sat_syntax = sat->sat_sup->sat_syntax;
+                       sat->sat_syntax_len = sat->sat_sup->sat_syntax_len;
+               }
+               if ( !sat->sat_equality ) {
+                       sat->sat_equality = sat->sat_sup->sat_equality;
+               }
+               if ( !sat->sat_ordering ) {
+                       sat->sat_ordering = sat->sat_sup->sat_ordering;
+               }
+               if ( !sat->sat_substr ) {
+                       sat->sat_substr = sat->sat_sup->sat_substr;
+               }
+       }
        code = at_insert(sat,err);
        return code;
 }