Ejemplo n.º 1
0
DWORD
VmDnsDeserializeDnsPtrRecord(
    PVMDNS_MESSAGE_BUFFER pVmDnsBuffer,
    PVMDNS_RECORD_DATA pData
    )
{
    DWORD dwError = 0;
    UINT16 dwRDataLength = 0;
    UINT16 uReceivedRDataLength = 0;

    if (!pVmDnsBuffer ||
        !pData)
    {
        dwError = ERROR_INVALID_PARAMETER;
        BAIL_ON_VMDNS_ERROR(dwError);
    }

    dwError = VmDnsReadUINT16FromBuffer(
                                pVmDnsBuffer,
                                &dwRDataLength
                                );
    BAIL_ON_VMDNS_ERROR(dwError);

    if (!dwRDataLength)
    {
        dwError = ERROR_EMPTY;
        BAIL_ON_VMDNS_ERROR(dwError);
    }

    dwError = VmDnsReadDomainNameFromBuffer(
                             pVmDnsBuffer,
                             &pData->NS.pNameHost
                             );
    BAIL_ON_VMDNS_ERROR(dwError);

    dwError = VmDnsPtrRecordGetRDataLength(
                *pData,
                &uReceivedRDataLength,
                pVmDnsBuffer->bTokenizeDomainName
                );
    BAIL_ON_VMDNS_ERROR(dwError);

    if (dwRDataLength != uReceivedRDataLength)
    {
        dwError = ERROR_INVALID_USER_BUFFER;
        BAIL_ON_VMDNS_ERROR(dwError);
    }


cleanup:

    return dwError;
error:

    goto cleanup;
}
Ejemplo n.º 2
0
DWORD
VmDnsReadRecordFromBuffer(
        PVMDNS_MESSAGE_BUFFER pVmDnsBuffer,
        PVMDNS_RECORD *ppDnsRecord
        )
{
    DWORD dwError = 0;
    PVMDNS_RECORD pDnsRecord = NULL;
    DWORD dwIndex =  0;

    if (!pVmDnsBuffer || !ppDnsRecord)
    {
        dwError = ERROR_INVALID_PARAMETER;
        BAIL_ON_VMDNS_ERROR(dwError);
    }

    dwError = VmDnsAllocateMemory(
                              sizeof(VMDNS_RECORD),
                              (PVOID *)&pDnsRecord
                              );
    BAIL_ON_VMDNS_ERROR(dwError);

    dwError = VmDnsReadDomainNameFromBuffer(
                              pVmDnsBuffer,
                              &pDnsRecord->pszName
                              );
    BAIL_ON_VMDNS_ERROR(dwError);

    dwError = VmDnsReadUINT16FromBuffer(
                             pVmDnsBuffer,
                             &pDnsRecord->dwType
                             );
    BAIL_ON_VMDNS_ERROR(dwError);

    dwError = VmDnsReadUINT16FromBuffer(
                             pVmDnsBuffer,
                             &pDnsRecord->iClass
                             );
    BAIL_ON_VMDNS_ERROR(dwError);

    dwError = VmDnsReadUINT32FromBuffer(
                             pVmDnsBuffer,
                             &pDnsRecord->dwTtl
                             );
    BAIL_ON_VMDNS_ERROR(dwError);

    for (; dwIndex < gRecordMethodMapSize; ++dwIndex)
    {
        if (pDnsRecord->dwType == gRecordMethods[dwIndex].type)
        {
            dwError = gRecordMethods[dwIndex].pfnDeSerialize(
                                                    pVmDnsBuffer,
                                                    &pDnsRecord->Data
                                                    );
            BAIL_ON_VMDNS_ERROR(dwError);
        }
    }

    *ppDnsRecord = pDnsRecord;

cleanup:

    return dwError;
error:

    if (ppDnsRecord)
    {
        *ppDnsRecord = NULL;
    }
    VMDNS_FREE_RECORD(pDnsRecord);
    goto cleanup;
}
Ejemplo n.º 3
0
DWORD
VmDnsDeserializeDnsSrvRecord(
    PVMDNS_MESSAGE_BUFFER pVmDnsBuffer,
    PVMDNS_RECORD_DATA pData
    )
{
    DWORD dwError = 0;
    UINT16 dwRDataLength = 0;
    UINT16 uReceivedRDataLength = 0;

    if (!pVmDnsBuffer ||
        !pData
       )
    {
        dwError = ERROR_INVALID_PARAMETER;
        BAIL_ON_VMDNS_ERROR(dwError);
    }

    dwError = VmDnsReadUINT16FromBuffer(
                                  pVmDnsBuffer,
                                  &dwRDataLength
                                  );
    BAIL_ON_VMDNS_ERROR(dwError);

    if (!dwRDataLength)
    {
        dwError = ERROR_EMPTY;
        BAIL_ON_VMDNS_ERROR(dwError);
    }

    dwError = VmDnsReadUINT16FromBuffer(
                                 pVmDnsBuffer,
                                 &pData->SRV.wPriority
                                 );
    BAIL_ON_VMDNS_ERROR(dwError);

    dwError = VmDnsReadUINT16FromBuffer(
                                 pVmDnsBuffer,
                                 &pData->SRV.wWeight
                                 );
    BAIL_ON_VMDNS_ERROR(dwError);

    dwError = VmDnsReadUINT16FromBuffer(
                                 pVmDnsBuffer,
                                 &pData->SRV.wPort
                                 );
    BAIL_ON_VMDNS_ERROR(dwError);

    dwError = VmDnsReadDomainNameFromBuffer(
                                 pVmDnsBuffer,
                                 &pData->SRV.pNameTarget
                                 );
    BAIL_ON_VMDNS_ERROR(dwError);

    dwError = VmDnsSrvGetRDataLength(
                *pData,
                &uReceivedRDataLength,
                pVmDnsBuffer->bTokenizeDomainName
                );
    BAIL_ON_VMDNS_ERROR(dwError);


cleanup:

    return dwError;
error:

    goto cleanup;
}