append trailing slash to AD canonical if DN is exactly a domain (ITS#3000)

This commit is contained in:
Pierangelo Masarati 2004-03-05 10:33:43 +00:00
parent 87a4c01b29
commit df312502ac

View File

@ -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;