Exemplo n.º 1
0
VOID
VMCARpcFreeCertificateContainer(PVMCA_CERTIFICATE_CONTAINER pCertContainer)
{
 if (pCertContainer != NULL) {
    VMCARpcFreeMemory(pCertContainer->pCert);
    VMCARpcFreeMemory(pCertContainer);
    pCertContainer = NULL;
 }
}
Exemplo n.º 2
0
VOID
VMCARpcFreeCertificateArray(PVMCA_CERTIFICATE_ARRAY pCertArray)
{
    if (pCertArray == NULL) return;

    if (pCertArray->dwCount > 0) {
        unsigned int iEntry  = 0;
        // free string in each container
        for (; iEntry < pCertArray->dwCount; iEntry++) {
            VMCARpcFreeMemory( pCertArray->certificates[iEntry].pCert);
        }
        VMCARpcFreeMemory(pCertArray);
    }
}
Exemplo n.º 3
0
DWORD
VMCARpcAllocateStringW(
    RP_PWSTR  pwszSrc,
    RP_PWSTR* ppwszDst
    )
{
    DWORD dwError = 0;
    size_t len = 0;
    RP_PWSTR pwszDst = NULL;

    if (!pwszSrc || !ppwszDst)
    {
        dwError = ERROR_INVALID_PARAMETER;
        BAIL_ON_VMCA_ERROR(dwError);
    }

    dwError = LwWc16sLen(pwszSrc, &len);
    BAIL_ON_VMCA_ERROR(dwError);

    dwError = VMCARpcAllocateMemory(
                    sizeof(RP_WSTR) * (len + 1),
                    (PVOID*)&pwszDst);
    BAIL_ON_VMCA_ERROR(dwError);

    dwError = LwWc16snCpy(pwszDst, pwszSrc, len);
    BAIL_ON_VMCA_ERROR(dwError);

    *ppwszDst = pwszDst;

cleanup:

    return dwError;

error:

    if (ppwszDst)
    {
        *ppwszDst = NULL;
    }

    if (pwszDst)
    {
        VMCARpcFreeMemory(pwszDst);
    }

    goto cleanup;
}
Exemplo n.º 4
0
DWORD
VMCARpcAllocateString(
    PSTR  pszSrc,
    PSTR* ppszDst
    )
{
    DWORD dwError = 0;
    size_t len = 0;
    PSTR pszDst = NULL;

    if (!pszSrc || !ppszDst)
    {
        dwError = ERROR_INVALID_PARAMETER;
        BAIL_ON_VMCA_ERROR(dwError);
    }

    len = strlen(pszSrc);
    // + 1 for \'0'

    dwError = VMCARpcAllocateMemory(
                    sizeof(RP_STR) * (len + 1),
                    (PVOID*)&pszDst);
    BAIL_ON_VMCA_ERROR(dwError);
    memcpy(pszDst, pszSrc, len);
    *ppszDst = pszDst;

cleanup:

    return dwError;

error:

    if (ppszDst)
    {
        *ppszDst = NULL;
    }

    if (pszDst)
    {
        VMCARpcFreeMemory(pszDst);
    }

    goto cleanup;
}
Exemplo n.º 5
0
DWORD
VMCARpcAllocateUnicodeStringFromAnsi(
    RP_PCSTR  pszSrc,
    RP_PWSTR* ppwszDst
    )
{
    DWORD dwError = 0;
    RP_PWSTR pwszTmp = NULL;
    RP_PWSTR pwszDst = NULL;

    dwError = LwMbsToWc16s(pszSrc, &pwszTmp);
    BAIL_ON_VMCA_ERROR(dwError);

    dwError = VMCARpcAllocateStringW(pwszTmp, &pwszDst);
    BAIL_ON_VMCA_ERROR(dwError);

    *ppwszDst = pwszDst;

cleanup:

    if (pwszTmp)
    {
        LwFreeMemory(pwszTmp);
    }

    return dwError;

error:

    *ppwszDst = NULL;

    if (pwszDst)
    {
        VMCARpcFreeMemory(pwszDst);
    }

    goto cleanup;
}
Exemplo n.º 6
0
unsigned int
VMCAGetCRL(
    unsigned char *pszClientCachedCRLID,
    unsigned int dwFileOffset,
    unsigned int dwSize,
    VMCA_FILE_BUFFER **ppCRLData
    )
{
    DWORD dwError = 0;
    PVMCA_FILE_BUFFER pCRLData = NULL;
    DWORD dwCount = 0;
    PSTR pszCRLFile = NULL;
    unsigned char buff[FILE_CHUNK] = { 0 };
    BOOLEAN bLocked = FALSE;

    VMCA_LOCK_MUTEX_SHARED(&gVMCAServerGlobals.svcMutex, bLocked);

    dwError = VMCASrvValidateCA();
    BAIL_ON_VMCA_ERROR(dwError);

    dwError = VMCAGetCRLNamePath(&pszCRLFile);
    BAIL_ON_VMCA_ERROR(dwError);

    dwError = VMCARpcAllocateMemory(
                    sizeof(VMCA_FILE_BUFFER),
                    (PVOID*)&pCRLData);
    BAIL_ON_VMCA_ERROR(dwError);
    memset(pCRLData, 0, sizeof(VMCA_FILE_BUFFER));

    dwError = VMCAReadDataFromFile(
        pszCRLFile,
        dwFileOffset,
        dwSize,
        (char*)&buff,
        &dwCount);
    BAIL_ON_VMCA_ERROR(dwError);
    if (dwCount > 0)
    {
        dwError = VMCARpcAllocateMemory(dwCount * sizeof(unsigned char),
            (PVOID*) &pCRLData->buffer);
        BAIL_ON_VMCA_ERROR(dwError);
        memcpy((PVOID) pCRLData->buffer, buff,(size_t) dwCount);
    }

    pCRLData->dwCount = dwCount;
    *ppCRLData = pCRLData;

cleanup :

    VMCA_LOCK_MUTEX_UNLOCK(&gVMCAServerGlobals.svcMutex, bLocked);

    VMCA_SAFE_FREE_STRINGA(pszCRLFile);
    return dwError;

error:
    if(pCRLData != NULL)
    {
        if(pCRLData->buffer != NULL)
        {
            VMCARpcFreeMemory((PVOID) pCRLData->buffer);
        }
        VMCARpcFreeMemory((PVOID)pCRLData);
    }
    if(ppCRLData)
    {
        *ppCRLData = NULL;
    }
    goto cleanup;
}
Exemplo n.º 7
0
unsigned int
RpcVMCAGetCRL(
    handle_t IDL_handle,
    unsigned char *pszClientCachedCRLID,
    unsigned int dwFileOffset,
    unsigned int dwSize,
    VMCA_FILE_BUFFER **ppCRLData
)
{
    DWORD dwError = 0;
    VMCA_FILE_BUFFER* pTempCRLData = NULL;
    VMCA_FILE_BUFFER* pCRLData = NULL;

    VMCA_LOG_DEBUG("Entering %s", __FUNCTION__);

    if(ppCRLData == NULL) {
        dwError = ERROR_INVALID_PARAMETER;
        BAIL_ON_VMCA_ERROR(dwError);
    }

    dwError = VMCACheckAccess(IDL_handle, FALSE);
    BAIL_ON_VMCA_ERROR(dwError);

    dwError =  VMCAGetCRL(
        dwFileOffset,
        dwSize,
        &pTempCRLData);
    BAIL_ON_VMCA_ERROR(dwError);


   dwError = VMCARpcAllocateMemory
            (
            sizeof(pCRLData),
            (PVOID*) &pCRLData
            );
    BAIL_ON_VMCA_ERROR(dwError);
    pCRLData->dwCount = pTempCRLData->dwCount;
    if(pCRLData->dwCount > 0)
    {
        dwError = VMCARpcAllocateMemory(
                pCRLData->dwCount * sizeof(unsigned char),
                (PVOID*) &pCRLData->buffer);
        BAIL_ON_VMCA_ERROR(dwError);
        memcpy(
            (PVOID*) pCRLData->buffer,
            pTempCRLData->buffer,
            (size_t) pCRLData->dwCount);
    }

    *ppCRLData = pCRLData;
    pTempCRLData = NULL;

cleanup:
    if ( pTempCRLData )
    {
        VMCA_SAFE_FREE_MEMORY(pTempCRLData->buffer);
        VMCA_SAFE_FREE_MEMORY(pTempCRLData);
    }
    VMCA_LOG_DEBUG("Exiting %s, Status = %d", __FUNCTION__, dwError);
    return dwError;
error:
    if (ppCRLData)
    {
        *ppCRLData = NULL;
    }

    if(pCRLData)
    {
        if(pCRLData->buffer)
        {
            VMCARpcFreeMemory((PVOID) pCRLData->buffer);
        }
        VMCARpcFreeMemory((PVOID)pCRLData);
    }

    goto cleanup;
}