From df312502ac486d78fb67ad53a02742f18ea6fcec Mon Sep 17 00:00:00 2001 From: Pierangelo Masarati Date: Fri, 5 Mar 2004 10:33:43 +0000 Subject: [PATCH] append trailing slash to AD canonical if DN is exactly a domain (ITS#3000) --- libraries/libldap/getdn.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) 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; -- 2.39.5