Пример #1
0
BOOLEAN
VmDnsValidateSrvRecord(
    PVMDNS_RECORD   pRecord
    )
{
    return VmDnsValidateRecordCommon(pRecord) &&
            VmDnsStringLenA(pRecord->Data.SRV.pNameTarget) <= VMDNS_NAME_LENGTH_MAX;
}
Пример #2
0
BOOLEAN
VmDnsValidateRecordCommon(
    PVMDNS_RECORD   pRecord
    )
{
    if (pRecord &&
        VmDnsStringLenA(pRecord->pszName) <= VMDNS_NAME_LENGTH_MAX &&
        pRecord->iClass == VMDNS_CLASS_IN)
    {
        return TRUE;
    }

    return FALSE;
}
Пример #3
0
DWORD
VmDnsWriteDomainNameStringToBuffer(
    PSTR pszDomainName,
    PVMDNS_MESSAGE_BUFFER pVmDnsBuffer
    )
{
    DWORD dwError = 0;
    DWORD dwStringLength = 0;

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

    dwStringLength = VmDnsStringLenA(pszDomainName);

    if (dwStringLength > VMDNS_NAME_LENGTH_MAX)
    {
        dwError = ERROR_LABEL_TOO_LONG;
        BAIL_ON_VMDNS_ERROR(dwError);
    }

    if (dwStringLength)
    {
        dwError = VmDnsWriteStringToBuffer(
                                pszDomainName,
                                dwStringLength,
                                pVmDnsBuffer
                                );
        BAIL_ON_VMDNS_ERROR(dwError);
    }

    dwError = VmDnsWriteCharToBuffer(
                                  0,
                                  pVmDnsBuffer
                                  );
    BAIL_ON_VMDNS_ERROR(dwError);

cleanup:
    return dwError;
error:
    goto cleanup;
}
Пример #4
0
DWORD
VmDnsWriteDomainNameLabelsToBuffer(
    PSTR pszDomainName,
    PVMDNS_MESSAGE_BUFFER pVmDnsBuffer
    )
{
    DWORD dwError = 0;
    PSTR pszTempString = NULL;
    PSTR  pToken = NULL;
    PSTR  pNextToken = NULL;
    DWORD dwTotalStringLength = 0;

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

    dwError = VmDnsAllocateStringA(
                            pszDomainName,
                            &pszTempString
                            );
    BAIL_ON_VMDNS_ERROR(dwError);

    pToken = VmDnsStringTokA(
                      pszTempString,
                      ".",
                      &pNextToken
                      );

    while(pToken)
    {
        DWORD dwStringLength = 0;

        dwStringLength = VmDnsStringLenA(pToken);

        if (dwStringLength > VMDNS_LABEL_LENGTH_MAX)
        {
            dwError = ERROR_LABEL_TOO_LONG;
            BAIL_ON_VMDNS_ERROR(dwError);
        }

        dwError = VmDnsWriteStringToBuffer(
                                pToken,
                                dwStringLength,
                                pVmDnsBuffer
                                );
        BAIL_ON_VMDNS_ERROR(dwError);

        dwTotalStringLength += dwStringLength+1;

        if (dwTotalStringLength > VMDNS_NAME_LENGTH_MAX)
        {
            dwError = ERROR_LABEL_TOO_LONG;
            BAIL_ON_VMDNS_ERROR(dwError);
        }

        pToken = VmDnsStringTokA(
                             NULL,
                             ".",
                             &pNextToken
                             );
    }

    if (++dwTotalStringLength > VMDNS_NAME_LENGTH_MAX)
    {
        dwError = ERROR_LABEL_TOO_LONG;
        BAIL_ON_VMDNS_ERROR(dwError);
    }

    dwError = VmDnsWriteCharToBuffer(
                                  0,
                                  pVmDnsBuffer
                                  );
    BAIL_ON_VMDNS_ERROR(dwError);

cleanup:

    VMDNS_SAFE_FREE_STRINGA(pszTempString);
    return dwError;
error:

    goto cleanup;
}
Пример #5
0
DWORD
VmDnsGetDomainNameLength(
    PSTR pszDomainName,
    PUINT16 puSize,
    BOOL bTokenizeDomainName
    )
{
    DWORD dwError = 0;
    PSTR pszTempString = NULL;
    PSTR  pToken = NULL;
    PSTR  pNextToken = NULL;
    UINT16 uTotalStringLength = 0;

    if (!puSize)
    {
        dwError = ERROR_INVALID_PARAMETER;
        BAIL_ON_VMDNS_ERROR(dwError);
    }

    if (bTokenizeDomainName)
    {
        dwError = VmDnsAllocateStringA(
                                pszDomainName,
                                &pszTempString
                                );
        BAIL_ON_VMDNS_ERROR(dwError);

        pToken = VmDnsStringTokA(
                          pszTempString,
                          ".",
                          &pNextToken
                          );

        while(++uTotalStringLength && pToken)
        {
            UINT16 uStringLength = 0;

            uStringLength = VmDnsStringLenA(pToken);

            uTotalStringLength += uStringLength;

            pToken = VmDnsStringTokA(
                                 NULL,
                                 ".",
                                 &pNextToken
                                 );
        }
    }
    else
    {
        uTotalStringLength = VmDnsStringLenA(pszDomainName) + 1;
    }

    *puSize = uTotalStringLength;

cleanup:

    VMDNS_SAFE_FREE_STRINGA(pszTempString);
    return dwError;
error:

    if (puSize)
    {
        *puSize = 0;
    }
    goto cleanup;
}