]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/dn.c
Add back-ndb
[openldap] / servers / slapd / dn.c
index 2f16b47bf5644c7c7989652f2aaed7d551f1cd63..95520700e381e565fece56be343ed9d2e1398f9f 100644 (file)
@@ -2,7 +2,7 @@
 /* $OpenLDAP$ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
- * Copyright 1998-2007 The OpenLDAP Foundation.
+ * Copyright 1998-2008 The OpenLDAP Foundation.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -231,7 +231,7 @@ rdnValidate(
  * uses an insertion sort; should be fine since the number of AVAs in
  * a RDN should be limited.
  */
-static void
+static int
 AVA_Sort( LDAPRDN rdn, int nAVAs )
 {
        LDAPAVA *ava_i;
@@ -260,17 +260,22 @@ AVA_Sort( LDAPRDN rdn, int nAVAs )
                                                d <= 0 ? ava_i->la_value.bv_len 
                                                        : ava_j->la_value.bv_len );
 
-                               if ( a == 0 && d != 0 ) {
+                               if ( a == 0 ) {
                                        a = d;
                                }
                        }
-                       if ( a >= 0 )
+                       /* Duplicates are not allowed */
+                       if ( a == 0 )
+                               return LDAP_INVALID_DN_SYNTAX;
+
+                       if ( a > 0 )
                                break;
 
                        rdn[ j+1 ] = rdn[ j ];
                }
                rdn[ j+1 ] = ava_i;
        }
+       return LDAP_SUCCESS;
 }
 
 static int
@@ -391,10 +396,13 @@ LDAPRDN_rewrite( LDAPRDN rdn, unsigned flags, void *ctx )
                        ava->la_flags |= LDAP_AVA_FREE_VALUE;
                }
        }
-       if ( do_sort )
-               AVA_Sort( rdn, iAVA );
+       rc = LDAP_SUCCESS;
 
-       return LDAP_SUCCESS;
+       if ( do_sort ) {
+               rc = AVA_Sort( rdn, iAVA );
+       }
+
+       return rc;
 }
 
 /*
@@ -431,7 +439,7 @@ dnNormalize(
        assert( val != NULL );
        assert( out != NULL );
 
-       Debug( LDAP_DEBUG_TRACE, ">>> dnNormalize: <%s>\n", val->bv_val, 0, 0 );
+       Debug( LDAP_DEBUG_TRACE, ">>> dnNormalize: <%s>\n", val->bv_val ? val->bv_val : "", 0, 0 );
 
        if ( val->bv_len != 0 ) {
                LDAPDN          dn = NULL;
@@ -470,7 +478,7 @@ dnNormalize(
                ber_dupbv_x( out, val, ctx );
        }
 
-       Debug( LDAP_DEBUG_TRACE, "<<< dnNormalize: <%s>\n", out->bv_val, 0, 0 );
+       Debug( LDAP_DEBUG_TRACE, "<<< dnNormalize: <%s>\n", out->bv_val ? out->bv_val : "", 0, 0 );
 
        return LDAP_SUCCESS;
 }
@@ -487,7 +495,7 @@ rdnNormalize(
        assert( val != NULL );
        assert( out != NULL );
 
-       Debug( LDAP_DEBUG_TRACE, ">>> dnNormalize: <%s>\n", val->bv_val, 0, 0 );
+       Debug( LDAP_DEBUG_TRACE, ">>> dnNormalize: <%s>\n", val->bv_val ? val->bv_val : "", 0, 0 );
        if ( val->bv_len != 0 ) {
                LDAPRDN         rdn = NULL;
                int             rc;
@@ -528,7 +536,7 @@ rdnNormalize(
                ber_dupbv_x( out, val, ctx );
        }
 
-       Debug( LDAP_DEBUG_TRACE, "<<< dnNormalize: <%s>\n", out->bv_val, 0, 0 );
+       Debug( LDAP_DEBUG_TRACE, "<<< dnNormalize: <%s>\n", out->bv_val ? out->bv_val : "", 0, 0 );
 
        return LDAP_SUCCESS;
 }
@@ -543,7 +551,7 @@ dnPretty(
        assert( val != NULL );
        assert( out != NULL );
 
-       Debug( LDAP_DEBUG_TRACE, ">>> dnPretty: <%s>\n", val->bv_val, 0, 0 );
+       Debug( LDAP_DEBUG_TRACE, ">>> dnPretty: <%s>\n", val->bv_val ? val->bv_val : "", 0, 0 );
 
        if ( val->bv_len == 0 ) {
                ber_dupbv_x( out, val, ctx );
@@ -585,7 +593,7 @@ dnPretty(
                }
        }
 
-       Debug( LDAP_DEBUG_TRACE, "<<< dnPretty: <%s>\n", out->bv_val, 0, 0 );
+       Debug( LDAP_DEBUG_TRACE, "<<< dnPretty: <%s>\n", out->bv_val ? out->bv_val : "", 0, 0 );
 
        return LDAP_SUCCESS;
 }
@@ -600,7 +608,7 @@ rdnPretty(
        assert( val != NULL );
        assert( out != NULL );
 
-       Debug( LDAP_DEBUG_TRACE, ">>> dnPretty: <%s>\n", val->bv_val, 0, 0 );
+       Debug( LDAP_DEBUG_TRACE, ">>> rdnPretty: <%s>\n", val->bv_val ? val->bv_val : "", 0, 0 );
 
        if ( val->bv_len == 0 ) {
                ber_dupbv_x( out, val, ctx );
@@ -644,7 +652,7 @@ rdnPretty(
                }
        }
 
-       Debug( LDAP_DEBUG_TRACE, "<<< dnPretty: <%s>\n", out->bv_val, 0, 0 );
+       Debug( LDAP_DEBUG_TRACE, "<<< dnPretty: <%s>\n", out->bv_val ? out->bv_val : "", 0, 0 );
 
        return LDAP_SUCCESS;
 }
@@ -663,7 +671,7 @@ dnPrettyNormalDN(
 
        Debug( LDAP_DEBUG_TRACE, ">>> dn%sDN: <%s>\n", 
                        flags == SLAP_LDAPDN_PRETTY ? "Pretty" : "Normal", 
-                       val->bv_val, 0 );
+                       val->bv_val ? val->bv_val : "", 0 );
 
        if ( val->bv_len == 0 ) {
                return LDAP_SUCCESS;
@@ -710,7 +718,7 @@ dnPrettyNormal(
        struct berval *normal,
        void *ctx)
 {
-       Debug( LDAP_DEBUG_TRACE, ">>> dnPrettyNormal: <%s>\n", val->bv_val, 0, 0 );
+       Debug( LDAP_DEBUG_TRACE, ">>> dnPrettyNormal: <%s>\n", val->bv_val ? val->bv_val : "", 0, 0 );
 
        assert( val != NULL );
        assert( pretty != NULL );
@@ -778,7 +786,8 @@ dnPrettyNormal(
        }
 
        Debug( LDAP_DEBUG_TRACE, "<<< dnPrettyNormal: <%s>, <%s>\n",
-               pretty->bv_val, normal->bv_val, 0 );
+               pretty->bv_val ? pretty->bv_val : "",
+               normal->bv_val ? normal->bv_val : "", 0 );
 
        return LDAP_SUCCESS;
 }