Exemple #1
0
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;
}
Exemple #2
0
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;
}