From: Pierangelo Masarati Date: Fri, 5 Mar 2004 10:36:17 +0000 (+0000) Subject: append trailing slash to AD canonical if DN is exactly a domain (ITS#3000) X-Git-Tag: OPENLDAP_REL_ENG_2_2_7~43 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=d90b0a82da0e28e0a123e51ef08b0c265cfd648e;p=openldap append trailing slash to AD canonical if DN is exactly a domain (ITS#3000) --- diff --git a/CHANGES b/CHANGES index ea7e1329b7..2f08963a68 100644 --- a/CHANGES +++ b/CHANGES @@ -3,6 +3,7 @@ OpenLDAP 2.2 Change Log OpenLDAP 2.2.7 Engineering Added total operation count in back-monitor (ITS#2983) Fixed search abandon handling in backglue (ITS#2999) + Fixed (undocumented) AD canonical DN (ITS#3000) OpenLDAP 2.2.6 Release Fixed slapd SASL callback handling (ITS#2926) diff --git a/libraries/libldap/getdn.c b/libraries/libldap/getdn.c index 078d7b0a7c..0dee28d71f 100644 --- a/libraries/libldap/getdn.c +++ b/libraries/libldap/getdn.c @@ -3227,6 +3227,8 @@ int ldap_dn2bv_x( LDAPDN dn, struct berval *bv, unsigned flags, void *ctx ) break; case LDAP_DN_FORMAT_AD_CANONICAL: { + int trailing_slash = 1; + /* * Sort of UFN for DCE DNs: a slash ('/') separated * global->local DN with no types; strictly speaking, @@ -3251,7 +3253,7 @@ int ldap_dn2bv_x( LDAPDN dn, struct berval *bv, unsigned flags, void *ctx ) len += rdnl; } - if ( ( bv->bv_val = LDAP_MALLOCX( len + 1, ctx ) ) == NULL ) { + if ( ( bv->bv_val = LDAP_MALLOCX( len + 2, ctx ) ) == NULL ) { rc = LDAP_NO_MEMORY; break; } @@ -3260,6 +3262,8 @@ int ldap_dn2bv_x( LDAPDN dn, struct berval *bv, unsigned flags, void *ctx ) if ( iRDN && dn2domain( dn, bv, 0, &iRDN ) != 0 ) { for ( l = bv->bv_len; iRDN >= 0 ; iRDN-- ) { ber_len_t rdnl; + + trailing_slash = 0; if ( rdn2ADstr( dn[ iRDN ], &bv->bv_val[ l ], flags, &rdnl, 0 ) ) { @@ -3301,9 +3305,15 @@ int ldap_dn2bv_x( LDAPDN dn, struct berval *bv, unsigned flags, void *ctx ) } } + if ( trailing_slash ) { + bv->bv_val[ len ] = '/'; + len++; + } + bv->bv_len = len; bv->bv_val[ bv->bv_len ] = '\0'; + rc = LDAP_SUCCESS; } break;