Esempio n. 1
0
/*
 * Qsort comparison function for char** data type
 */
int
VmDnsQsortPPCHARCmp(
    const void*		ppStr1,
    const void*		ppStr2
    )
{

    if ((ppStr1 == NULL || *(char * const *)ppStr1 == NULL) &&
        (ppStr2 == NULL || *(char * const *)ppStr2 == NULL))
    {
        return 0;
    }

    if (ppStr1 == NULL || *(char * const *)ppStr1 == NULL)
    {
       return -1;
    }

    if (ppStr2 == NULL || *(char * const *)ppStr2 == NULL)
    {
       return 1;
    }

   return VmDnsStringCompareA(* (char * const *) ppStr1, * (char * const *) ppStr2, TRUE);
}
Esempio n. 2
0
DWORD
VmDnsParseRecordType(
    PSTR            pszRecordType,
    VMDNS_RR_TYPE*  pType
    )
{
    DWORD idx = 0;
    DWORD dwError = ERROR_INVALID_PARAMETER;

    BAIL_ON_VMDNS_INVALID_POINTER(pszRecordType, dwError);
    BAIL_ON_VMDNS_INVALID_POINTER(pType, dwError);

    for (; idx < gRecordTypeMapSize; ++idx)
    {
        if (!VmDnsStringCompareA(pszRecordType,
                                gRecordTypeMap[idx].pszName,
                                FALSE))
        {
            *pType = gRecordTypeMap[idx].type;
            dwError = ERROR_SUCCESS;
            break;
        }
    }

cleanup:
    return dwError;
error:
    goto cleanup;
}
Esempio n. 3
0
BOOLEAN
VmDnsCompareRecordCommon(
    PVMDNS_RECORD   pRecord1,
    PVMDNS_RECORD   pRecord2
    )
{
    BOOLEAN result = TRUE;
    if (!pRecord1 && !pRecord2)
    {
        result = TRUE;
    }
    else if (!pRecord1 || !pRecord2)
    {
        result = FALSE;
    }
    else if (pRecord1->dwType != pRecord2->dwType)
    {
        result = FALSE;
    }
    else if (pRecord1->iClass != pRecord2->iClass)
    {
        result = FALSE;
    }
    else if (pRecord1->dwTtl != pRecord2->dwTtl)
    {
        result = FALSE;
    }
    else if (VmDnsStringCompareA(pRecord1->pszName, pRecord2->pszName, TRUE))
    {
        result = FALSE;
    }

    return result;
}
Esempio n. 4
0
BOOLEAN
VmDnsMatchSrvRecord(
    PVMDNS_RECORD   pRecord,
    PVMDNS_RECORD   pTemplate
    )
{
    return  VmDnsMatchRecordCommon(pRecord, pTemplate) &&
            VmDnsStringCompareA(pRecord->Data.SRV.pNameTarget,
                        pTemplate->Data.SRV.pNameTarget, FALSE) == 0;
}
Esempio n. 5
0
BOOLEAN
VmDnsComparePtrRecord(
    PVMDNS_RECORD   pRecord1,
    PVMDNS_RECORD   pRecord2
    )
{
    return VmDnsCompareRecordCommon(pRecord1, pRecord2) &&
        VmDnsStringCompareA(pRecord1->Data.PTR.pNameHost,
                        pRecord2->Data.PTR.pNameHost, FALSE) == 0;
}
Esempio n. 6
0
BOOLEAN
VmDnsCompareSrvRecord(
    PVMDNS_RECORD   pRecord1,
    PVMDNS_RECORD   pRecord2
    )
{
    return  VmDnsCompareRecordCommon(pRecord1, pRecord2) &&
            VmDnsStringCompareA(pRecord1->Data.SRV.pNameTarget,
                        pRecord2->Data.SRV.pNameTarget, FALSE) == 0 &&
            pRecord1->Data.SRV.wPort == pRecord2->Data.SRV.wPort &&
            pRecord1->Data.SRV.wPriority == pRecord2->Data.SRV.wPriority &&
            pRecord1->Data.SRV.wWeight == pRecord2->Data.SRV.wWeight;
}
Esempio n. 7
0
DWORD
VmDnsCacheEvictEntryProc(
    PVMDNS_NAME_ENTRY  pNameEntry,
    PVMDNS_ZONE_OBJECT pZoneObject
    )
{
    //assumes locks for cache and hashmap are already held
    DWORD dwError = 0;

    //Remove if not SOA
    if (VmDnsStringCompareA(
                pZoneObject->pszName,
                pNameEntry->pszName,
                FALSE
                ) != 0)
    {
        dwError = VmDnsZoneRemoveNameEntry(
                            pZoneObject,
                            pNameEntry
                            );
        BAIL_ON_VMDNS_ERROR(dwError);

        VmDnsLog(
            VMDNS_LOG_LEVEL_DEBUG,
            "Purged (%s) from Zone (%s) Cache",
            pNameEntry->pszName,
            pZoneObject->pszName
            );
    }
    else
    {
        dwError = ERROR_INVALID_PARAMETER;
    }

cleanup:
    return dwError;

error:
    goto cleanup;
}
Esempio n. 8
0
DWORD
VmDnsParseServiceProtocol(
    PSTR                    pszServiceType,
    VMDNS_SERVICE_PROTOCOL* pProtocol,
    PSTR*                   ppszName
    )
{
    DWORD idx = 0;
    DWORD dwError = ERROR_INVALID_PARAMETER;

    BAIL_ON_VMDNS_INVALID_POINTER(pszServiceType, dwError);

    for (; idx < gProtocolNameMapSize; ++idx)
    {
        if (!VmDnsStringCompareA(pszServiceType,
                                gProtocolNameMap[idx].pszUserFriendlyName,
                                FALSE))
        {
            dwError = ERROR_SUCCESS;
            if (pProtocol)
            {
                *pProtocol = gProtocolNameMap[idx].protocol;
            }
            if (ppszName)
            {
                dwError = VmDnsAllocateStringA(gProtocolNameMap[idx].pszName, ppszName);
            }
            break;
        }
    }

cleanup:
    return dwError;
error:
    goto cleanup;
}
Esempio n. 9
0
static int
VmDnsForwarderLookup(
    PVMDNS_FORWARDER_CONTEXT    pForwarder,
    PCSTR                       pszForwardHost
    )
{
    int index = -1;
    DWORD i = 0;

    for (i = 0; i < pForwarder->dwCount; ++i)
    {
        int match = VmDnsStringCompareA(
                                pForwarder->pForwarderEntries[i]->pszForwarder,
                                pszForwardHost,
                                FALSE);
        if (match == 0)
        {
            index = i;
            break;
        }
    }

    return index;
}
Esempio n. 10
0
static
BOOL
VmDnsIsMemberOf(
    PSTR* ppszMemberships,
    DWORD dwMemberships,
    PCSTR pszGroupName
    )
{
    BOOL bRetVal = FALSE;
    int nCmpRet = 0;
    DWORD i = 0;

    for(i = 0; i < dwMemberships; ++i)
    {
        nCmpRet = VmDnsStringCompareA(ppszMemberships[i], pszGroupName, FALSE);
        if (nCmpRet == 0)
        {
            bRetVal = TRUE;
            break;
        }
    }

    return bRetVal;
}
Esempio n. 11
0
DWORD
VmDnsCachePurgeRecord(
    PVMDNS_ZONE_OBJECT pZoneObject,
    PCSTR              pszRecord,
    DWORD              dwCachePurgeEvent
    )
{
    PVMDNS_RECORD_LIST pList = NULL;
    DWORD dwError = 0;

    if (VmDnsStringCompareA(pZoneObject->pszName, pszRecord, FALSE) == 0)
    {
        //update SOA record
        dwError = VmDnsStoreGetRecords(
                        pZoneObject->pszName,
                        pZoneObject->pszName,
                        &pList
                        );
        BAIL_ON_VMDNS_ERROR(dwError);

        dwError = VmDnsZoneUpdateRecords(
                            pZoneObject,
                            pZoneObject->pszName,
                            pList
                            );
        BAIL_ON_VMDNS_ERROR(dwError);

        VmDnsLog(
            VMDNS_LOG_LEVEL_DEBUG,
            "Refreshed (%s) in Cache",
            pZoneObject->pszName
            );
    }
    else
    {
        dwError = VmDnsZonePurgeRecords(pZoneObject, pszRecord);
        BAIL_ON_VMDNS_ERROR_IF(dwError && dwError != ERROR_NOT_FOUND)

        if (dwError == ERROR_NOT_FOUND)
        {
            VmDnsLog(
                VMDNS_LOG_LEVEL_DEBUG,
                "Record (%s) not found in Cache",
                pszRecord
                );

            dwError = 0;
        }
        else
        {
            if (dwCachePurgeEvent == CACHE_PURGE_MODIFICATION)
            {
                VmMetricsCounterIncrement(gVmDnsCounterMetrics[CACHE_MODIFY_PURGE_COUNT]);
            }
            else if (dwCachePurgeEvent == CACHE_PURGE_REPLICATION)
            {
                VmMetricsCounterIncrement(gVmDnsCounterMetrics[CACHE_NOTIFY_PURGE_COUNT]);
            }

            VmDnsLog(
                VMDNS_LOG_LEVEL_DEBUG,
                "Succesfully Purged (%s) from Cache",
                pszRecord
                );
        }
    }

cleanup:
    if (pList)
    {
        VmDnsRecordListRelease(pList);
    }

    return dwError;

error:
    goto cleanup;
}
Esempio n. 12
0
DWORD
VmDnsParseArgs(
    int argc,
    char* argv[],
    int* pLoggingLevel,
    PCSTR* ppszLogFileName,
    int* pLdapPort,
    PBOOLEAN pbEnableSysLog,
    PBOOLEAN pbConsoleMode
)
{
    DWORD dwError = ERROR_SUCCESS;
    int i = 1; // first arg is the <name of exe>.exe

    while( i < argc )
    {
        if( VmDnsIsCmdLineOption( argv[i] ) != FALSE )
        {
            if ( VmDnsStringCompareA(
                          VMDNS_OPTION_LOGGING_LEVEL, argv[i], TRUE ) == 0 )
            {
                dwError = VmDnsGetCmdLineIntOption(
                    argc, argv, &i, pLoggingLevel
                );
                BAIL_ON_VMDNS_ERROR(dwError);
            }
            else if ( VmDnsStringCompareA(
                          VMDNS_OPTION_LOG_FILE_NAME, argv[i], TRUE ) == 0 )
            {
                VmDnsGetCmdLineOption( argc, argv, &i, ppszLogFileName );
            }
            else if ( VmDnsStringCompareA(
                          VMDNS_OPTION_PORT, argv[i], TRUE ) == 0 )
            {
                dwError = VmDnsGetCmdLineIntOption(
                    argc, argv, &i, pLdapPort
                );
                BAIL_ON_VMDNS_ERROR(dwError);
            }
            else if ( VmDnsStringCompareA(
                          VMDNS_OPTION_ENABLE_SYSLOG, argv[i], TRUE ) == 0 )
            {
                if ( pbEnableSysLog != NULL )
                {
                    *pbEnableSysLog = TRUE;
                }
            }
            else if (VmDnsStringCompareA(
                VMDNS_OPTION_CONSOLE_MODE, argv[i], TRUE) == 0)
            {
                if (pbConsoleMode != NULL)
                {
                    *pbConsoleMode = TRUE;
                }
            }
            else
            {
                dwError = ERROR_INVALID_PARAMETER;
                BAIL_ON_VMDNS_ERROR(dwError);
            }
        }

        i++;
    } // while

error:

    return dwError;
}