X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fback-ldap%2Fdelete.c;h=d545f77b14701c032cc8e4015cb0bc2b937f328b;hb=4d36fd5a3ed407b0a53004d1431f1669222138b4;hp=2035493684b400ee69eaee8205174e2d6c9134a3;hpb=c55a82baa24abc4fa63b7dc50de2d3758d69514b;p=openldap diff --git a/servers/slapd/back-ldap/delete.c b/servers/slapd/back-ldap/delete.c index 2035493684..d545f77b14 100644 --- a/servers/slapd/back-ldap/delete.c +++ b/servers/slapd/back-ldap/delete.c @@ -1,7 +1,7 @@ /* delete.c - ldap backend delete function */ /* $OpenLDAP$ */ /* - * Copyright 1998-2000 The OpenLDAP Foundation, All Rights Reserved. + * Copyright 1998-2002 The OpenLDAP Foundation, All Rights Reserved. * COPYING RESTRICTIONS APPLY, see COPYRIGHT file */ /* This is an altered version */ @@ -24,6 +24,15 @@ * ever read sources, credits should appear in the documentation. * * 4. This notice may not be removed or altered. + * + * + * + * Copyright 2000, Pierangelo Masarati, All rights reserved. + * + * This software is being modified by Pierangelo Masarati. + * The previously reported conditions apply to the modified code as well. + * Changes in the original code are highlighted where required. + * Credits for the original code go to the author, Howard Chu. */ #include "portable.h" @@ -41,23 +50,58 @@ ldap_back_delete( Backend *be, Connection *conn, Operation *op, - const char *dn, - const char *ndn + struct berval *dn, + struct berval *ndn ) { struct ldapinfo *li = (struct ldapinfo *) be->be_private; struct ldapconn *lc; + struct berval mdn = { 0, NULL }; + lc = ldap_back_getconn( li, conn, op ); - if (!lc) + + if ( !lc || !ldap_back_dobind( lc, op ) ) { return( -1 ); + } - if (!lc->bound) { - ldap_back_dobind(lc, op); - if (!lc->bound) - return( -1 ); + /* + * Rewrite the compare dn, if needed + */ +#ifdef ENABLE_REWRITE + switch ( rewrite_session( li->rwinfo, "deleteDn", dn->bv_val, conn, &mdn.bv_val ) ) { + case REWRITE_REGEXEC_OK: + if ( mdn.bv_val == NULL ) { + mdn.bv_val = ( char * )dn->bv_val; + } +#ifdef NEW_LOGGING + LDAP_LOG( BACK_LDAP, DETAIL1, + "[rw] deleteDn: \"%s\" -> \"%s\"\n", dn->bv_val, mdn.bv_val, 0 ); +#else /* !NEW_LOGGING */ + Debug( LDAP_DEBUG_ARGS, "rw> deleteDn: \"%s\" -> \"%s\"\n%s", + dn->bv_val, mdn.bv_val, "" ); +#endif /* !NEW_LOGGING */ + break; + + case REWRITE_REGEXEC_UNWILLING: + send_ldap_result( conn, op, LDAP_UNWILLING_TO_PERFORM, + NULL, "Unwilling to perform", NULL, NULL ); + return( -1 ); + + case REWRITE_REGEXEC_ERR: + send_ldap_result( conn, op, LDAP_OTHER, + NULL, "Operations error", NULL, NULL ); + return( -1 ); } +#else /* !ENABLE_REWRITE */ + ldap_back_dn_massage( li, dn, &mdn, 0, 1 ); +#endif /* !ENABLE_REWRITE */ + + ldap_delete_s( lc->ld, mdn.bv_val ); - ldap_delete_s( lc->ld, dn ); + if ( mdn.bv_val != dn->bv_val ) { + free( mdn.bv_val ); + } + return( ldap_back_op_result( lc, op ) ); }