DWORD VmDirDeleteEntryViaDN( PCSTR pszDN ) { DWORD dwError = 0; VDIR_OPERATION op = {0}; DeleteReq *dr = NULL; if (IsNullOrEmptyString(pszDN)) { BAIL_WITH_VMDIR_ERROR(dwError, VMDIR_ERROR_INVALID_PARAMETER); } dwError = VmDirInitStackOperation(&op, VDIR_OPERATION_TYPE_INTERNAL, LDAP_REQ_DELETE, NULL); BAIL_ON_VMDIR_ERROR(dwError); op.pBEIF = VmDirBackendSelect(NULL); op.reqDn.lberbv_val = (PSTR)pszDN; op.reqDn.lberbv_len = VmDirStringLenA(pszDN); dr = &op.request.deleteReq; dr->dn.lberbv.bv_val = op.reqDn.lberbv.bv_val; dr->dn.lberbv.bv_len = op.reqDn.lberbv.bv_len; dwError = VmDirInternalDeleteEntry(&op); BAIL_ON_VMDIR_ERROR(dwError); cleanup: VmDirFreeOperationContent(&op); return dwError; error: goto cleanup; }
DWORD VmDirDeleteEntry( PVDIR_ENTRY pEntry ) { DWORD dwError = 0; VDIR_OPERATION op = {0}; DeleteReq *dr = NULL; dwError = VmDirInitStackOperation(&op, VDIR_OPERATION_TYPE_INTERNAL, LDAP_REQ_DELETE, NULL); BAIL_ON_VMDIR_ERROR(dwError); op.pBEIF = VmDirBackendSelect(NULL); op.reqDn.lberbv_val = pEntry->dn.lberbv.bv_val; op.reqDn.lberbv_len = pEntry->dn.lberbv.bv_len; dr = &op.request.deleteReq; dr->dn.lberbv.bv_val = op.reqDn.lberbv.bv_val; dr->dn.lberbv.bv_len = op.reqDn.lberbv.bv_len; dwError = VmDirInternalDeleteEntry(&op); BAIL_ON_VMDIR_ERROR(dwError); cleanup: VmDirFreeOperationContent(&op); return dwError; error: goto cleanup; }
int VmDirMLDelete( PVDIR_OPERATION pOperation ) { DWORD dwError = 0; PSTR pszLocalErrMsg = NULL; pOperation->pBECtx->pBE = VmDirBackendSelect(pOperation->reqDn.lberbv.bv_val); assert(pOperation->pBECtx->pBE); // AnonymousBind Or in case of a failed bind, do not grant delete access if (pOperation->conn->bIsAnonymousBind || VmDirIsFailedAccessInfo(&pOperation->conn->AccessInfo)) { dwError = LDAP_INSUFFICIENT_ACCESS; BAIL_ON_VMDIR_ERROR_WITH_MSG( dwError, pszLocalErrMsg, "Not bind/authenticate yet" ); } dwError = VmDirInternalDeleteEntry( pOperation ); BAIL_ON_VMDIR_ERROR( dwError ); cleanup: VmDirSendLdapResult( pOperation ); VMDIR_SAFE_FREE_MEMORY( pszLocalErrMsg ); return pOperation->ldapResult.errCode; error: VMDIR_SET_LDAP_RESULT_ERROR( &(pOperation->ldapResult), dwError, pszLocalErrMsg); goto cleanup; }
int VmDirMLDelete( PVDIR_OPERATION pOperation ) { DWORD dwError = 0; PSTR pszLocalErrMsg = NULL; pOperation->pBECtx->pBE = VmDirBackendSelect(pOperation->reqDn.lberbv.bv_val); assert(pOperation->pBECtx->pBE); // AnonymousBind Or in case of a failed bind, do not grant delete access if (pOperation->conn->bIsAnonymousBind || VmDirIsFailedAccessInfo(&pOperation->conn->AccessInfo)) { dwError = LDAP_INSUFFICIENT_ACCESS; BAIL_ON_VMDIR_ERROR_WITH_MSG( dwError, pszLocalErrMsg, "Not bind/authenticate yet" ); } if (VmDirRaftDisallowUpdates("Delete")) { dwError = VMDIR_ERROR_UNWILLING_TO_PERFORM; BAIL_ON_VMDIR_ERROR( dwError ); } dwError = VmDirInternalDeleteEntry( pOperation ); BAIL_ON_VMDIR_ERROR( dwError ); if (pOperation->opType == VDIR_OPERATION_TYPE_EXTERNAL) { pOperation->pBEIF->pfnBESetMaxOriginatingUSN(pOperation->pBECtx, pOperation->pBECtx->wTxnUSN); } cleanup: VMDIR_SAFE_FREE_MEMORY( pszLocalErrMsg ); return pOperation->ldapResult.errCode; error: VMDIR_SET_LDAP_RESULT_ERROR( &(pOperation->ldapResult), dwError, pszLocalErrMsg); goto cleanup; }