From 275f3be3638d6574f69dcfceb7f9d0fa8115d698 Mon Sep 17 00:00:00 2001 From: Kurt Zeilenga Date: Wed, 13 Feb 2002 06:35:27 +0000 Subject: [PATCH] Misc. DN fixes and cleanups, namely don't muck with AVA_BINARY values Also, pass empty_bv when bv_val is NULL. --- INSTALL | 3 +-- Makefile.in | 1 + libraries/libldap/getdn.c | 22 +++++++++------------- servers/slapd/dn.c | 13 +++++++++++-- 4 files changed, 22 insertions(+), 17 deletions(-) diff --git a/INSTALL b/INSTALL index 7bd6fa56fb..47c24c4f02 100644 --- a/INSTALL +++ b/INSTALL @@ -31,8 +31,7 @@ Making and Installing the OpenLDAP Distribution % ./configure --help - to list available configuration options. A description of these - options is provided in the 'CONFIGURE OPTIONS' section below. + to list available configuration options. The configure script uses environmental variables for determining compiler/linker options including: diff --git a/Makefile.in b/Makefile.in index 7d797afff3..9a2ac0afe2 100644 --- a/Makefile.in +++ b/Makefile.in @@ -29,5 +29,6 @@ veryclean-local: FORCE distclean: veryclean FORCE +check: test test: FORCE cd tests; make test diff --git a/libraries/libldap/getdn.c b/libraries/libldap/getdn.c index 91eb163b82..0bb8b184ee 100644 --- a/libraries/libldap/getdn.c +++ b/libraries/libldap/getdn.c @@ -2864,7 +2864,6 @@ int ldap_dn2bv( LDAPDN *dn, struct berval *bv, unsigned flags ) int ( *sv2s ) ( struct berval *v, char *s, unsigned f, ber_len_t *l ); assert( bv ); - bv->bv_len = 0; bv->bv_val = NULL; @@ -2883,13 +2882,13 @@ int ldap_dn2bv( LDAPDN *dn, struct berval *bv, unsigned flags ) case LDAP_DN_FORMAT_LDAPV3: sv2l = strval2strlen; sv2s = strval2str; - goto got_funcs; + if( 0 ) { case LDAP_DN_FORMAT_LDAPV2: - sv2l = strval2IA5strlen; - sv2s = strval2IA5str; -got_funcs: - + sv2l = strval2IA5strlen; + sv2s = strval2IA5str; + } + for ( iRDN = 0, len = 0; dn[ 0 ][ iRDN ]; iRDN++ ) { ber_len_t rdnl; LDAPRDN *rdn = dn[ 0 ][ iRDN ]; @@ -2932,7 +2931,6 @@ got_funcs: break; case LDAP_DN_FORMAT_UFN: { - /* * FIXME: quoting from RFC 1781: * @@ -3047,11 +3045,10 @@ got_funcs: #endif /* DC_IN_UFN */ rc = LDAP_SUCCESS; - break; - } - case LDAP_DN_FORMAT_DCE: + } break; + case LDAP_DN_FORMAT_DCE: for ( iRDN = 0, len = 0; dn[ 0 ][ iRDN ]; iRDN++ ) { ber_len_t rdnl; LDAPRDN *rdn = dn[ 0 ][ iRDN ]; @@ -3090,7 +3087,6 @@ got_funcs: break; case LDAP_DN_FORMAT_AD_CANONICAL: { - /* * Sort of UFN for DCE DNs: a slash ('/') separated * global->local DN with no types; strictly speaking, @@ -3172,8 +3168,7 @@ got_funcs: bv->bv_val[ bv->bv_len ] = '\0'; rc = LDAP_SUCCESS; - break; - } + } break; default: return LDAP_PARAM_ERROR; @@ -3181,6 +3176,7 @@ got_funcs: Debug( LDAP_DEBUG_TRACE, "<= ldap_dn2bv(%s,%u)=%d\n", bv->bv_val, flags, rc ); + return_results:; return( rc ); } diff --git a/servers/slapd/dn.c b/servers/slapd/dn.c index b776e18e30..812a2a0b09 100644 --- a/servers/slapd/dn.c +++ b/servers/slapd/dn.c @@ -258,7 +258,12 @@ LDAPDN_rewrite( LDAPDN *dn, unsigned flags ) */ ava->la_attr = ad->ad_cname; - if( flags & SLAP_LDAPDN_PRETTY ) { + if( ava->la_flags & LDAP_AVA_BINARY ) { + /* AVA is binary encoded, don't muck with it */ + transf = NULL; + mr = NULL; + + } else if( flags & SLAP_LDAPDN_PRETTY ) { transf = ad->ad_type->sat_syntax->ssyn_pretty; mr = NULL; } else { @@ -269,9 +274,13 @@ LDAPDN_rewrite( LDAPDN *dn, unsigned flags ) if ( transf ) { /* * transform value by normalize/pretty function + * if value is empty, use empty_bv */ rc = ( *transf )( ad->ad_type->sat_syntax, - &ava->la_value, &bv ); + ava->la_value.bv_len + ? &ava->la_value + : (struct berval *) &slap_empty_bv, + &bv ); if ( rc != LDAP_SUCCESS ) { return LDAP_INVALID_SYNTAX; -- 2.39.5