X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fattr.c;h=2a6b5f180e6a5b8bec29205d293cb2908fac3fda;hb=3d522a0c9fd79b0275a219bde1f4465b181a9318;hp=3c5f77d60155d2aa262de8776c7939e7c756397c;hpb=03fcb6526d8359acadbba58ff1ae8cd6d69ff8e7;p=openldap
diff --git a/servers/slapd/attr.c b/servers/slapd/attr.c
index 3c5f77d601..2a6b5f180e 100644
--- a/servers/slapd/attr.c
+++ b/servers/slapd/attr.c
@@ -1,9 +1,28 @@
+/* attr.c - routines for dealing with attributes */
/* $OpenLDAP$ */
-/*
- * Copyright 1998-2003 The OpenLDAP Foundation, All Rights Reserved.
- * COPYING RESTRICTIONS APPLY, see COPYRIGHT file
+/* This work is part of OpenLDAP Software .
+ *
+ * Copyright 1998-2003 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
+ * .
+ */
+/* 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.
*/
-/* attr.c - routines for dealing with attributes */
#include "portable.h"
@@ -111,8 +130,8 @@ Attribute *attrs_dup( Attribute *a )
* attr_merge - merge the given type and value with the list of
* attributes in attrs.
*
- * For SLAP_NVALUES: nvals must be NULL if the attribute has no
- * normalizer. In this case, a->a_nvals will be set equal to a->a_vals.
+ * nvals must be NULL if the attribute has no normalizer.
+ * In this case, a->a_nvals will be set equal to a->a_vals.
*
* returns 0 everything went ok
* -1 trouble
@@ -162,15 +181,17 @@ attr_merge_normalize(
BerVarray nvals = NULL;
int rc;
- if ( desc->ad_type->sat_equality->smr_normalize ) {
+ if ( desc->ad_type->sat_equality &&
+ desc->ad_type->sat_equality->smr_normalize )
+ {
int i;
- for ( i = 0; vals[i].bv_val; i++);
+ for ( i = 0; vals[i].bv_val; i++ );
- nvals = ch_calloc( sizeof(struct berval), i + 1 );
+ nvals = sl_calloc( sizeof(struct berval), i + 1, memctx );
for ( i = 0; vals[i].bv_val; i++ ) {
rc = (*desc->ad_type->sat_equality->smr_normalize)(
- 0,
+ SLAP_MR_VALUE_OF_ATTRIBUTE_SYNTAX,
desc->ad_type->sat_syntax,
desc->ad_type->sat_equality,
&vals[i], &nvals[i], memctx );
@@ -186,7 +207,9 @@ attr_merge_normalize(
rc = attr_merge( e, desc, vals, nvals );
error_return:;
- ber_bvarray_free( nvals );
+ if ( nvals != NULL ) {
+ ber_bvarray_free_x( nvals, memctx );
+ }
return rc;
}
@@ -233,9 +256,11 @@ attr_merge_normalize_one(
struct berval *nvalp;
int rc;
- if ( desc->ad_type->sat_equality->smr_normalize ) {
+ if ( desc->ad_type->sat_equality &&
+ desc->ad_type->sat_equality->smr_normalize )
+ {
rc = (*desc->ad_type->sat_equality->smr_normalize)(
- 0,
+ SLAP_MR_VALUE_OF_ATTRIBUTE_SYNTAX,
desc->ad_type->sat_syntax,
desc->ad_type->sat_equality,
val, &nval, memctx );
@@ -250,7 +275,7 @@ attr_merge_normalize_one(
rc = attr_merge_one( e, desc, val, nvalp );
if ( nvalp != NULL ) {
- ch_free( nval.bv_val );
+ sl_free( nval.bv_val, memctx );
}
return rc;
}