Leaked source code of windows server 2003
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
/*++
Copyright (c) 1996-2002 Microsoft Corporation
Module Name:
dnsapi.c
Abstract:
Domain Name System (DNS) API
Random DNS API routines.
Author:
GlennC 22-Jan-1997
Revision History:
Jim Gilroy (jamesg) March 2000 cleanup Jim Gilroy (jamesg) May 2002 security\robustness fixups
--*/
#include "local.h"
#include <lmcons.h>
#define DNS_NET_FAILURE_CACHE_TIME 30 // Seconds
//
// Globals
//
DWORD g_NetFailureTime; DNS_STATUS g_NetFailureStatus;
IP4_ADDRESS g_LastDNSServerUpdated = 0;
//
// Net failure caching
//
BOOL IsKnownNetFailure( VOID ) /*++
Routine Description:
None.
Arguments:
None.
Return Value:
None.
--*/ { BOOL flag = FALSE;
DNSDBG( TRACE, ( "IsKnownNetFailure()\n" ));
LOCK_GENERAL();
if ( g_NetFailureStatus ) { if ( g_NetFailureTime < Dns_GetCurrentTimeInSeconds() ) { g_NetFailureTime = 0; g_NetFailureStatus = ERROR_SUCCESS; flag = FALSE; } else { SetLastError( g_NetFailureStatus ); flag = TRUE; } }
UNLOCK_GENERAL();
return flag; }
VOID SetKnownNetFailure( IN DNS_STATUS Status ) /*++
Routine Description:
None.
Arguments:
None.
Return Value:
None.
--*/ { DNSDBG( TRACE, ( "SetKnownNetFailure()\n" ));
LOCK_GENERAL();
g_NetFailureTime = Dns_GetCurrentTimeInSeconds() + DNS_NET_FAILURE_CACHE_TIME; g_NetFailureStatus = Status;
UNLOCK_GENERAL(); }
BOOL WINAPI DnsGetCacheDataTable( OUT PDNS_CACHE_TABLE * ppTable ) /*++
Routine Description:
Get cache data table.
Arguments:
ppTable -- address to receive ptr to cache data table
Return Value:
ERROR_SUCCES if successful. Error code on failure.
--*/ { DNS_STATUS status = ERROR_SUCCESS; DWORD rpcStatus = ERROR_SUCCESS; PDNS_RPC_CACHE_TABLE pcacheTable = NULL;
DNSDBG( TRACE, ( "DnsGetCacheDataTable()\n" ));
if ( ! ppTable ) { return FALSE; }
RpcTryExcept { status = CRrReadCache( NULL, &pcacheTable ); } RpcExcept( DNS_RPC_EXCEPTION_FILTER ) { status = RpcExceptionCode(); } RpcEndExcept
// set out param
*ppTable = (PDNS_CACHE_TABLE) pcacheTable;
#if DBG
if ( status != ERROR_SUCCESS ) { DNSDBG( RPC, ( "DnsGetCacheDataTable() status = %d\n", status )); } #endif
return( pcacheTable && status == ERROR_SUCCESS ); }
//
// End dnsapi.c
//
|