/* $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
*/
+/*
+ * Portions Copyright (C) The Internet Society (1997)
+ * ASN.1 fragments are from RFC 2251; see RFC for full legal notices.
+ */
/* LDAPv3 Controls (RFC2251)
*
LDAPControl *const *c;
assert( ld != NULL );
+ assert( LDAP_VALID(ld) );
assert( ber != NULL );
if( ctrls == NULL ) {
tag = ber_scanf( ber, "{a" /*}*/, &tctrl->ldctl_oid );
- if( tag != LBER_ERROR ) {
- tag = ber_peek_tag( ber, &len );
+ if( tag == LBER_ERROR ) {
+ *ctrls = NULL;
+ ldap_controls_free( tctrls );
+ return LDAP_DECODING_ERROR;
}
+ tag = ber_peek_tag( ber, &len );
+
if( tag == LBER_BOOLEAN ) {
ber_int_t crit;
tag = ber_scanf( ber, "b", &crit );
tctrl->ldctl_iscritical = crit ? (char) 0 : (char) ~0;
- }
-
- if( tag != LBER_ERROR ) {
tag = ber_peek_tag( ber, &len );
}
if( tag == LBER_OCTETSTRING ) {
tag = ber_scanf( ber, "o", &tctrl->ldctl_value );
-
} else {
tctrl->ldctl_value.bv_val = NULL;
}
- if( tag == LBER_ERROR ) {
- *ctrls = NULL;
- ldap_controls_free( tctrls );
- return LDAP_DECODING_ERROR;
- }
-
*ctrls = tctrls;
}
return NULL;
}
- new = (LDAPControl **) LDAP_MALLOC( i * sizeof(LDAPControl *) );
+ new = (LDAPControl **) LDAP_MALLOC( (i+1) * sizeof(LDAPControl *) );
if( new == NULL ) {
/* memory allocation failure */
}
/*
- * Copyright 1998-2002 The OpenLDAP Foundation, All Rights Reserved.
+ * Copyright 1998-2003 The OpenLDAP Foundation, All Rights Reserved.
* COPYING RESTRICTIONS APPLY, see COPYRIGHT file
*/
/* Adapted for inclusion into OpenLDAP by Kurt D. Zeilenga */
* Modification to OpenLDAP source by Novell, Inc.
* June 2000 sfs Added control utilities
*/
+/* Note: A verbatim copy of version 2.0.1 of the OpenLDAP Public License
+ * can be found in the file "build/LICENSE-2.0.1" in this distribution
+ * of OpenLDAP Software.
+ */
/*---
ldap_create_control
LDAPControl **ctrlp )
{
LDAPControl *ctrl;
- struct berval *bvalp;
assert( requestOID != NULL );
+ assert( ber != NULL );
assert( ctrlp != NULL );
ctrl = (LDAPControl *) LDAP_MALLOC( sizeof(LDAPControl) );
return LDAP_NO_MEMORY;
}
- if ( ber_flatten( ber, &bvalp ) == -1 ) {
+ if ( ber_flatten2( ber, &ctrl->ldctl_value, 1 ) == -1 ) {
LDAP_FREE( ctrl );
return LDAP_NO_MEMORY;
}
- ctrl->ldctl_value = *bvalp;
- ber_memfree( bvalp );
-
ctrl->ldctl_oid = LDAP_STRDUP( requestOID );
ctrl->ldctl_iscritical = iscritical;
LDAPControl *const *c;
assert( ld != NULL );
+ assert( LDAP_VALID(ld) );
if( ctrls == NULL ) {
/* use default server controls */