DWORD VmDirSchemaModMutexAcquire( PVDIR_OPERATION pOperation ) { DWORD dwError = 0; PSTR pszDN = NULL; if (!pOperation) { dwError = ERROR_INVALID_PARAMETER; BAIL_ON_VMDIR_ERROR(dwError); } if (pOperation->reqCode == LDAP_REQ_ADD) { pszDN = BERVAL_NORM_VAL(pOperation->request.addReq.pEntry->dn); } else if (pOperation->reqCode == LDAP_REQ_MODIFY) { pszDN = BERVAL_NORM_VAL(pOperation->request.modifyReq.dn); } if (VmDirStringEndsWith(pszDN, SCHEMA_NAMING_CONTEXT_DN, FALSE) && pszDN[SCHEMA_NAMING_CONTEXT_DN_LEN]) { if (VmDirIsInUserTxn(pOperation->pBECtx)) { dwError = VMDIR_ERROR_UNWILLING_TO_PERFORM; VMDIR_LOG_ERROR(VMDIR_LOG_MASK_ALL, "%s: schema change not supported within user transaction %d", __func__, dwError); BAIL_ON_VMDIR_ERROR(dwError); } if (pOperation->dwSchemaWriteOp == 0) { dwError = VmDirLockMutex(gVdirSchemaGlobals.cacheModMutex); BAIL_ON_VMDIR_ERROR(dwError); } pOperation->dwSchemaWriteOp++; } error: return dwError; }
static int _VmDirSASLMutexLock( PVOID pSASLMutex ) { DWORD dwError = SASL_OK; PVMDIR_MUTEX pLocalMutex = (PVMDIR_MUTEX) pSASLMutex; dwError = VmDirLockMutex(pLocalMutex); BAIL_ON_VMDIR_ERROR(dwError); cleanup: return (int)dwError; error: VMDIR_LOG_ERROR( VMDIR_LOG_MASK_ALL, "_VmDirSASLMutexLock failed (%d)", dwError); dwError = SASL_FAIL; goto cleanup; }