]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/dn.c
Fix LBER_ERROR vs. -1 confusion.
[openldap] / servers / slapd / dn.c
index 346817765b670f6c33620a06337d7579ec0852ad..148d8155e9756adda8cd41f9053395a96af96769 100644 (file)
@@ -1,7 +1,7 @@
 /* dn.c - routines for dealing with distinguished names */
 /* $OpenLDAP$ */
 /*
- * Copyright 1998-2002 The OpenLDAP Foundation, All Rights Reserved.
+ * Copyright 1998-2003 The OpenLDAP Foundation, All Rights Reserved.
  * COPYING RESTRICTIONS APPLY, see COPYRIGHT file
  */
 
 
 #include "slap.h"
 
-const struct berval slap_empty_bv = { 0, "" };
-
-#define SLAP_LDAPDN_PRETTY 0x1
+#include "lutil.h"
 
-#define SLAP_LDAPDN_MAXLEN 8192
+const struct berval slap_empty_bv = { 0, "" };
 
 /*
  * The DN syntax-related functions take advantage of the dn representation
@@ -391,7 +389,8 @@ dnNormalize2(
                /*
                 * Back to string representation
                 */
-               rc = ldap_dn2bv( dn, out, LDAP_DN_FORMAT_LDAPV3 );
+               rc = ldap_dn2bv( dn, out,
+                       LDAP_DN_FORMAT_LDAPV3 | LDAP_DN_PRETTY );
 
                ldap_dnfree( dn );
 
@@ -490,6 +489,60 @@ dnPretty2(
        return LDAP_SUCCESS;
 }
 
+int
+dnPrettyNormalDN(
+       Syntax *syntax,
+       struct berval *val,
+       LDAPDN **dn,
+       int flags )
+{
+       assert( val );
+       assert( dn );
+
+#ifdef NEW_LOGGING
+       LDAP_LOG( OPERATION, ARGS, ">>> dn%sDN: <%s>\n", 
+                       flags == SLAP_LDAPDN_PRETTY ? "Pretty" : "Normal", 
+                       val->bv_val, 0 );
+#else
+       Debug( LDAP_DEBUG_TRACE, ">>> dn%sDN: <%s>\n", 
+                       flags == SLAP_LDAPDN_PRETTY ? "Pretty" : "Normal", 
+                       val->bv_val, 0 );
+#endif
+
+       if ( val->bv_len == 0 ) {
+               return LDAP_SUCCESS;
+
+       } else if ( val->bv_len > SLAP_LDAPDN_MAXLEN ) {
+               return LDAP_INVALID_SYNTAX;
+
+       } else {
+               int             rc;
+
+               /* FIXME: should be liberal in what we accept */
+               rc = ldap_bv2dn( val, dn, LDAP_DN_FORMAT_LDAP );
+               if ( rc != LDAP_SUCCESS ) {
+                       return LDAP_INVALID_SYNTAX;
+               }
+
+               assert( strlen( val->bv_val ) == val->bv_len );
+
+               /*
+                * Schema-aware rewrite
+                */
+               if ( LDAPDN_rewrite( *dn, flags ) != LDAP_SUCCESS ) {
+                       ldap_dnfree( *dn );
+                       *dn = NULL;
+                       return LDAP_INVALID_SYNTAX;
+               }
+       }
+
+       Debug( LDAP_DEBUG_TRACE, "<<< dn%sDN\n", 
+                       flags == SLAP_LDAPDN_PRETTY ? "Pretty" : "Normal",
+                       0, 0 );
+
+       return LDAP_SUCCESS;
+}
+
 /*
  * Combination of both dnPretty and dnNormalize
  */
@@ -559,7 +612,8 @@ dnPrettyNormal(
                        return LDAP_INVALID_SYNTAX;
                }
 
-               rc = ldap_dn2bv( dn, normal, LDAP_DN_FORMAT_LDAPV3 );
+               rc = ldap_dn2bv( dn, normal,
+                       LDAP_DN_FORMAT_LDAPV3 | LDAP_DN_PRETTY );
 
                ldap_dnfree( dn );
                if ( rc != LDAP_SUCCESS ) {
@@ -672,7 +726,8 @@ dnExtractRdn(
                return rc;
        }
 
-       rc = ldap_rdn2bv( tmpRDN, rdn, LDAP_DN_FORMAT_LDAPV3 );
+       rc = ldap_rdn2bv( tmpRDN, rdn, LDAP_DN_FORMAT_LDAPV3 | LDAP_DN_PRETTY );
+
        ldap_rdnfree( tmpRDN );
        if ( rc != LDAP_SUCCESS ) {
                return rc;
@@ -799,7 +854,7 @@ build_new_dn( struct berval * new_dn,
        new_dn->bv_len = parent_dn->bv_len + newrdn->bv_len + 1;
        new_dn->bv_val = (char *) ch_malloc( new_dn->bv_len + 1 );
 
-       ptr = slap_strcopy( new_dn->bv_val, newrdn->bv_val );
+       ptr = lutil_strcopy( new_dn->bv_val, newrdn->bv_val );
        *ptr++ = ',';
        strcpy( ptr, parent_dn->bv_val );
 }