/* dn.c - routines for dealing with distinguished names */
/* $OpenLDAP$ */
-/*
- * Copyright 1998-2003 The OpenLDAP Foundation, All Rights Reserved.
- * COPYING RESTRICTIONS APPLY, see COPYRIGHT file
+/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
+ *
+ * Copyright 1998-2004 The OpenLDAP Foundation.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted only as authorized by the OpenLDAP
+ * Public License.
+ *
+ * A copy of this license is available in the file LICENSE in the
+ * top-level directory of the distribution or, alternatively, at
+ * <http://www.OpenLDAP.org/license.html>.
+ */
+/* Portions Copyright (c) 1995 Regents of the University of Michigan.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms are permitted
+ * provided that this notice is preserved and that due credit is given
+ * to the University of Michigan at Ann Arbor. The name of the University
+ * may not be used to endorse or promote products derived from this
+ * software without specific prior written permission. This software
+ * is provided ``as is'' without express or implied warranty.
*/
#include "portable.h"
#include <ac/string.h>
#include <ac/time.h>
-#include "ldap_pvt.h"
-
#include "slap.h"
-
+#include "ldap_pvt.h" /* must be after slap.h, to get ldap_bv2dn_x() & co */
#include "lutil.h"
/*
slap_mr_normalize_func *normf = NULL;
slap_syntax_transform_func *transf = NULL;
MatchingRule *mr = NULL;
- struct berval bv = { 0, NULL };
+ struct berval bv = BER_BVNULL;
int do_sort = 0;
assert( ava );
* if value is empty, use empty_bv
*/
rc = ( *normf )(
- 0,
+ SLAP_MR_VALUE_OF_ASSERTION_SYNTAX,
ad->ad_type->sat_syntax,
mr,
ava->la_value.bv_len
if( bv.bv_val ) {
- ber_memfree_x( ava->la_value.bv_val, ctx );
+ if ( ava->la_flags & LDAP_AVA_FREE_VALUE )
+ ber_memfree_x( ava->la_value.bv_val, ctx );
ava->la_value = bv;
+ ava->la_flags |= LDAP_AVA_FREE_VALUE;
}
if( do_sort ) AVA_Sort( rdn, iAVA );
* Schema-aware rewrite
*/
if ( LDAPDN_rewrite( dn, 0, ctx ) != LDAP_SUCCESS ) {
- ldap_dnfree( dn );
+ ldap_dnfree_x( dn, ctx );
return LDAP_INVALID_SYNTAX;
}
return LDAP_SUCCESS;
}
-#if 0
-/*
- * dn "pretty"ing routine
- */
int
dnPretty(
- Syntax *syntax,
- struct berval *val,
- struct berval **pretty)
-{
- struct berval *out;
- int rc;
-
- assert( pretty && *pretty == NULL );
-
- out = ch_malloc( sizeof( struct berval ) );
- rc = dnPretty2( syntax, val, out );
- if ( rc != LDAP_SUCCESS )
- free( out );
- else
- *pretty = out;
- return rc;
-}
-#endif
-
-int
-dnPretty2(
Syntax *syntax,
struct berval *val,
struct berval *out,
}
}
+#ifdef NEW_LOGGING
+ LDAP_LOG( OPERATION, ARGS, "<<< dnPretty: <%s>\n", out->bv_val, 0, 0 );
+#else
Debug( LDAP_DEBUG_TRACE, "<<< dnPretty: <%s>\n", out->bv_val, 0, 0 );
+#endif
return LDAP_SUCCESS;
}
void
build_new_dn( struct berval * new_dn,
struct berval * parent_dn,
- struct berval * newrdn )
+ struct berval * newrdn,
+ void *memctx )
{
char *ptr;
- if ( parent_dn == NULL ) {
+ if ( parent_dn == NULL || parent_dn->bv_len == 0 ) {
ber_dupbv( new_dn, newrdn );
return;
}
new_dn->bv_len = parent_dn->bv_len + newrdn->bv_len + 1;
- new_dn->bv_val = (char *) ch_malloc( new_dn->bv_len + 1 );
+ new_dn->bv_val = (char *) slap_sl_malloc( new_dn->bv_len + 1, memctx );
ptr = lutil_strcopy( new_dn->bv_val, newrdn->bv_val );
*ptr++ = ',';
dnX509normalize( void *x509_name, struct berval *out )
{
/* Invoke the LDAP library's converter with our schema-rewriter */
- return ldap_X509dn2bv( x509_name, out, LDAPDN_rewrite, 0 );
+ int rc = ldap_X509dn2bv( x509_name, out, LDAPDN_rewrite, 0 );
+
+ Debug( LDAP_DEBUG_TRACE,
+ "dnX509Normalize: <%s>\n", out->bv_val, 0, 0 );
+
+ return rc;
}
/*