}
*ctrls = NULL;
- len = ber_pvt_ber_remaining(ber);
+ len = ber_pvt_ber_remaining( ber );
if( len == 0) {
/* no controls */
return LDAP_SUCCESS;
}
-
if(( tag = ber_peek_tag( ber, &len )) != LDAP_TAG_CONTROLS ) {
if( tag == LBER_ERROR ) {
/* decoding error */
new->ldctl_oid = NULL;
}
- if( c->ldctl_value.bv_len > 0 ) {
- new->ldctl_value.bv_val = (char *) LDAP_MALLOC( c->ldctl_value.bv_len );
+ if( c->ldctl_value.bv_val != NULL ) {
+ new->ldctl_value.bv_val =
+ (char *) LDAP_MALLOC( c->ldctl_value.bv_len + 1 );
if(new->ldctl_value.bv_val == NULL) {
if(new->ldctl_oid != NULL) {
return NULL;
}
- SAFEMEMCPY( new->ldctl_value.bv_val, c->ldctl_value.bv_val,
+ new->ldctl_value.bv_len = c->ldctl_value.bv_len;
+
+ AC_MEMCPY( new->ldctl_value.bv_val, c->ldctl_value.bv_val,
c->ldctl_value.bv_len );
- new->ldctl_value.bv_len = c->ldctl_value.bv_len;
+ new->ldctl_value.bv_val[new->ldctl_value.bv_len] = '\0';
} else {
new->ldctl_value.bv_len = 0;
* June 2000 sfs Added control utilities
*/
/*---
- ldap_int_create_control
+ ldap_create_control
Internal function to create an LDAP control from the encoded BerElement.
---*/
int
-ldap_int_create_control(
- const char *requestOID,
+ldap_create_control(
+ LDAP_CONST char *requestOID,
BerElement *ber,
int iscritical,
LDAPControl **ctrlp )
LDAPControl *ctrl;
struct berval *bvalp;
- if ( requestOID == NULL || ber == NULL || ctrlp == NULL ) {
+ if ( requestOID == NULL || ctrlp == NULL ) {
return LDAP_PARAM_ERROR;
}
- if ( ber_flatten( ber, &bvalp ) == LBER_ERROR ) {
+ ctrl = (LDAPControl *) LDAP_MALLOC( sizeof(LDAPControl) );
+ if ( ctrl == NULL ) {
return LDAP_NO_MEMORY;
}
- ctrl = (LDAPControl *) LBER_MALLOC( sizeof(LDAPControl) );
- if ( ctrl == NULL ) {
- ber_bvfree( bvalp );
+ if ( ber_flatten( ber, &bvalp ) == LBER_ERROR ) {
+ LDAP_FREE( ctrl );
return LDAP_NO_MEMORY;
}
ctrl->ldctl_value = *bvalp;
- LDAP_FREE( bvalp );
+ ber_memfree( bvalp );
ctrl->ldctl_oid = LDAP_STRDUP( requestOID );
ctrl->ldctl_iscritical = iscritical;
- if ( ctrl->ldctl_oid == NULL ) {
- LBER_FREE( ctrl );
+ if ( requestOID != NULL && ctrl->ldctl_oid == NULL ) {
+ ldap_control_free( ctrl );
return LDAP_NO_MEMORY;
}