From b9e2fd0dd6d8ad614a6c595f168058cd2ebc4bca Mon Sep 17 00:00:00 2001 From: Pierangelo Masarati Date: Fri, 24 Aug 2007 12:29:33 +0000 Subject: [PATCH] ldap_control*_dup() is no longer private; add ldap_pvt_put_control --- include/ldap_pvt.h | 11 +++---- libraries/libldap/controls.c | 58 ++++++++++++++++++++---------------- 2 files changed, 36 insertions(+), 33 deletions(-) diff --git a/include/ldap_pvt.h b/include/ldap_pvt.h index bbf461c7b4..90b2934032 100644 --- a/include/ldap_pvt.h +++ b/include/ldap_pvt.h @@ -194,13 +194,10 @@ LDAP_F (void) ldap_pvt_hex_unescape LDAP_P(( char *s )); LDAP_HEXLOWER(c) || LDAP_HEXUPPER(c)) /* controls.c */ -struct ldapcontrol; -LDAP_F (struct ldapcontrol *) ldap_control_dup LDAP_P(( - const struct ldapcontrol *ctrl )); - -LDAP_F (struct ldapcontrol **) ldap_controls_dup LDAP_P(( - struct ldapcontrol *const *ctrls )); - +LDAP_F (int) +ldap_pvt_put_control LDAP_P(( + const struct ldapcontrol *c, + BerElement *ber )); LDAP_F (int) ldap_pvt_get_controls LDAP_P(( BerElement *be, struct ldapcontrol ***ctrlsp)); diff --git a/libraries/libldap/controls.c b/libraries/libldap/controls.c index ab5ae46da9..059dc5266f 100644 --- a/libraries/libldap/controls.c +++ b/libraries/libldap/controls.c @@ -51,6 +51,36 @@ * } */ +int +ldap_pvt_put_control( + const LDAPControl *c, + BerElement *ber ) +{ + if ( ber_printf( ber, "{s" /*}*/, c->ldctl_oid ) == -1 ) { + return LDAP_ENCODING_ERROR; + } + + if ( c->ldctl_iscritical /* only if true */ + && ( ber_printf( ber, "b", + (ber_int_t) c->ldctl_iscritical ) == -1 ) ) + { + return LDAP_ENCODING_ERROR; + } + + if ( !BER_BVISNULL( &c->ldctl_value ) /* only if we have a value */ + && ( ber_printf( ber, "O", &c->ldctl_value ) == -1 ) ) + { + return LDAP_ENCODING_ERROR; + } + + if ( ber_printf( ber, /*{*/"N}" ) == -1 ) { + return LDAP_ENCODING_ERROR; + } + + return LDAP_SUCCESS; +} + + /* * ldap_int_put_controls */ @@ -97,32 +127,8 @@ ldap_int_put_controls( } for( c = ctrls ; *c != NULL; c++ ) { - if ( ber_printf( ber, "{s" /*}*/, - (*c)->ldctl_oid ) == -1 ) - { - ld->ld_errno = LDAP_ENCODING_ERROR; - return ld->ld_errno; - } - - if( (*c)->ldctl_iscritical /* only if true */ - && ( ber_printf( ber, "b", - (ber_int_t) (*c)->ldctl_iscritical ) == -1 ) ) - { - ld->ld_errno = LDAP_ENCODING_ERROR; - return ld->ld_errno; - } - - if( (*c)->ldctl_value.bv_val != NULL /* only if we have a value */ - && ( ber_printf( ber, "O", - &((*c)->ldctl_value) ) == -1 ) ) - { - ld->ld_errno = LDAP_ENCODING_ERROR; - return ld->ld_errno; - } - - - if( ber_printf( ber, /*{*/"N}" ) == -1 ) { - ld->ld_errno = LDAP_ENCODING_ERROR; + ld->ld_errno = ldap_pvt_put_control( *c, ber ); + if ( ld->ld_errno != LDAP_SUCCESS ) { return ld->ld_errno; } } -- 2.39.5