From 86d23423ac38aa432df119b14439c3512cdb57cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Kuzn=C3=ADk?= Date: Thu, 24 Oct 2024 15:59:37 +0100 Subject: [PATCH] ITS#7080 Do not munge path twice --- servers/slapd/back-ldif/ldif.c | 45 +++++++++++++++++----------------- 1 file changed, 23 insertions(+), 22 deletions(-) diff --git a/servers/slapd/back-ldif/ldif.c b/servers/slapd/back-ldif/ldif.c index 2364c10211..1f3be63cd8 100644 --- a/servers/slapd/back-ldif/ldif.c +++ b/servers/slapd/back-ldif/ldif.c @@ -1576,28 +1576,6 @@ ldif_back_delete( Operation *op, SlapReply *rs ) goto done; } - rc = ndn2path( op, &op->o_req_ndn, &path, 0 ); - if ( rc != LDAP_SUCCESS ) { - goto done; - } - - ldif2dir_len( path ); - ldif2dir_name( path ); - if ( rmdir( path.bv_val ) < 0 ) { - switch ( errno ) { - case ENOTEMPTY: - rc = LDAP_NOT_ALLOWED_ON_NONLEAF; - break; - case ENOENT: - /* is leaf, go on */ - break; - default: - rc = LDAP_OTHER; - rs->sr_text = "internal error (cannot delete subtree directory)"; - break; - } - } - /* pre-read */ if ( op->o_preread ) { Entry *e = NULL; @@ -1620,6 +1598,29 @@ ldif_back_delete( Operation *op, SlapReply *rs ) } } entry_free( e ); + } else { + rc = ndn2path( op, &op->o_req_ndn, &path, 0 ); + } + + if ( rc != LDAP_SUCCESS ) { + goto done; + } + + ldif2dir_len( path ); + ldif2dir_name( path ); + if ( rmdir( path.bv_val ) < 0 ) { + switch ( errno ) { + case ENOTEMPTY: + rc = LDAP_NOT_ALLOWED_ON_NONLEAF; + break; + case ENOENT: + /* is leaf, go on */ + break; + default: + rc = LDAP_OTHER; + rs->sr_text = "internal error (cannot delete subtree directory)"; + break; + } } if ( rc == LDAP_SUCCESS ) {