|
|
/*++
Copyright (c) 1996-2001 Microsoft Corporation
Module Name:
dnslibp.h
Abstract:
Domain Name System (DNS) Library
Private DNS Library Routines
Author:
Jim Gilroy (jamesg) December 7, 1996
Revision History:
--*/
#ifndef _DNSLIBP_INCLUDED_
#define _DNSLIBP_INCLUDED_
#include <windns.h>
#include <dnsapi.h>
#include <dnslib.h>
#ifdef __cplusplus
extern "C" { #endif // __cplusplus
// headers are screwed up
// neither ntdef.h nor winnt.h brings in complete set, so depending
// on whether you include nt.h or not you end up with different set
#define MINCHAR 0x80
#define MAXCHAR 0x7f
#define MINSHORT 0x8000
#define MAXSHORT 0x7fff
#define MINLONG 0x80000000
#define MAXLONG 0x7fffffff
#define MAXBYTE 0xff
#define MAXUCHAR 0xff
#define MAXWORD 0xffff
#define MAXUSHORT 0xffff
#define MAXDWORD 0xffffffff
#define MAXULONG 0xffffffff
//
// Handy bad ptr
//
#define DNS_BAD_PTR ((PVOID)(-1))
//
// "Wire" char set
//
// Explicitly create wire char set in case the ACE format
// wins out.
//
#define DnsCharSetWire DnsCharSetUtf8
//
// Private DNS_RECORD Flag field structure definition and macros
//
typedef struct _PrivateRecordFlags { DWORD Section : 2; DWORD Delete : 1; DWORD CharSet : 2;
DWORD Cached : 1; // or maybe a "Source" field
DWORD HostsFile : 1; DWORD Cluster : 1;
DWORD Unused : 3; DWORD Matched : 1; DWORD FreeData : 1; DWORD FreeOwner : 1;
DWORD Reserved : 18; } PRIV_RR_FLAGS, *PPRIV_RR_FLAGS;
#define RRFLAGS( pRecord ) ((PPRIV_RR_FLAGS)&pRecord->Flags.DW)
// Defined in dnslib.h too late to pull now
//#define FLAG_Section( pRecord ) (RRFLAGS( pRecord )->Section)
//#define FLAG_Delete( pRecord ) (RRFLAGS( pRecord )->Delete)
//#define FLAG_CharSet( pRecord ) (RRFLAGS( pRecord )->CharSet)
//#define FLAG_FreeData( pRecord ) (RRFLAGS( pRecord )->FreeData)
//#define FLAG_FreeOwner( pRecord ) (RRFLAGS( pRecord )->FreeOwner)
//#define FLAG_Matched( pRecord ) (RRFLAGS( pRecord )->Matched)
//#define FLAG_Cached( pRecord ) (RRFLAGS( pRecord )->Cached)
#define FLAG_HostsFile( pRecord ) (RRFLAGS( pRecord )->HostsFile)
#define FLAG_Cluster( pRecord ) (RRFLAGS( pRecord )->Cluster)
//#define SET_FREE_OWNER(pRR) (FLAG_FreeOwner(pRR) = TRUE)
//#define SET_FREE_DATA(pRR) (FLAG_FreeData(pRR) = TRUE)
//#define SET_RR_MATCHED(pRR) (FLAG_Matched(pRR) = TRUE)
#define SET_RR_HOSTS_FILE(pRR) (FLAG_HostsFile(pRR) = TRUE)
#define SET_RR_CLUSTER(pRR) (FLAG_Cluster(pRR) = TRUE)
//#define CLEAR_FREE_OWNER(pRR) (FLAG_FreeOwner(pRR) = FALSE)
//#define CLEAR_FREE_DATA(pRR) (FLAG_FreeData(pRR) = FALSE)
//#define CLEAR_RR_MATCHED(pRR) (FLAG_Matched(pRR) = FALSE)
#define CLEAR_RR_HOSTS_FILE(pRR) (FLAG_HostsFile(pRR) = FALSE)
//#define IS_FREE_OWNER(pRR) (FLAG_FreeOwner(pRR))
//#define IS_FREE_DATA(pRR) (FLAG_FreeData(pRR))
//#define IS_RR_MATCHED(pRR) (FLAG_Matched(pRR))
#define IS_HOSTS_FILE_RR(pRR) (FLAG_HostsFile(pRR))
#define IS_CLUSTER_RR(pRR) (FLAG_Cluster(pRR))
//#define IS_ANSWER_RR(pRR) (FLAG_Section(pRR) == DNSREC_ANSWER)
//#define IS_AUTHORITY_RR(pRR) (FLAG_Section(pRR) == DNSREC_AUTHORITY)
//#define IS_ADDITIONAL_RR(pRR) (FLAG_Section(pRR) == DNSREC_ADDITIONAL)
//
// Address family info (addr.c)
//
typedef struct _AddrFamilyInfo { WORD Family; WORD DnsType; DWORD LengthAddr; DWORD LengthSockaddr; DWORD OffsetToAddrInSockaddr; } FAMILY_INFO, *PFAMILY_INFO;
extern FAMILY_INFO AddrFamilyTable[];
#define FamilyInfoIp4 (AddrFamilyTable[0])
#define FamilyInfoIp6 (AddrFamilyTable[1])
#define FamilyInfoAtm (AddrFamilyTable[2])
#define pFamilyInfoIp4 (&AddrFamilyTable[0])
#define pFamilyInfoIp6 (&AddrFamilyTable[1])
#define pFamilyInfoAtm (&AddrFamilyTable[2])
PFAMILY_INFO FamilyInfo_GetForFamily( IN DWORD Family );
#define FamilyInfo_GetForSockaddr(pSA) \
FamilyInfo_GetForFamily( (pSA)->sa_family )
//
// IP Union
//
// DCR: probably should have just used sockaddr here
//
// Advantages over sockaddr_in6
// - bool test
// - addresses pointers start in the same place for both
// types
// - size
// - no munging (sockaddr_in6) needs casting to get back to IP4
// alternatively regular sockaddr is not fixed size
//
// If keep this type should make it available for all address
// operations including local IP, in which case should include
// flag field for cluster, weird info.
//
typedef struct _DnsIpUnion { BOOL IsIp6; union { IP4_ADDRESS Ip4; IP6_ADDRESS Ip6; } Addr; } IP_UNION, *PIP_UNION;
#define IPUNION_IS_IP4( p ) (!(p)->IsIp6)
#define IPUNION_IS_IP6( p ) ((p)->IsIp6)
#define IPUNION_IP4_PTR( p ) (&(p)->Addr.Ip4)
#define IPUNION_IP6_PTR( p ) (&(p)->Addr.Ip6)
#define IPUNION_GET_IP4( p ) ((p)->Addr.Ip4)
#define IPUNION_GET_IP6( p ) ((p)->Addr.Ip6)
#define IPUNION_SET_IP4( p, ip4 ) \
{ \ PIP_UNION pip = (p); \ pip->IsIp6 = FALSE; \ pip->Addr.Ip4 = (ip4); \ }
#define IPUNION_SET_IP6( p, ip6 ) \
{ \ PIP_UNION pip = (p); \ pip->IsIp6 = TRUE; \ pip->Addr.Ip6 = (ip6); \ }
//
// Address manipulation (addr.c)
//
BOOL Dns_EqualIpUnion( IN PIP_UNION pIp1, IN PIP_UNION pIp2 );
BOOL Dns_SockaddrToIpUnion( OUT PIP_UNION pIpUnion, IN PSOCKADDR pSockaddr );
IP6_ADDRESS Ip6AddressFromSockaddr( IN PSOCKADDR pSockaddr );
VOID InitSockaddrWithIp6Address( OUT PSOCKADDR pSockaddr, IN IP6_ADDRESS Ip6Addr, IN WORD Port );
DNS_STATUS Dns_AddressToSockaddr( OUT PSOCKADDR pSockaddr, IN OUT PDWORD pSockaddrLength, IN BOOL fClearSockaddr, IN PBYTE pAddr, IN DWORD AddrLength, IN DWORD AddrFamily );
DWORD Family_SockaddrLength( IN WORD Family );
DWORD Sockaddr_Length( IN PSOCKADDR pSockaddr );
//
// String to address conversion (straddr.c)
//
// Most of the routines are public. These ones handle
// non-NULL terminated strings for DNS server file load.
//
BOOL Dns_Ip4StringToAddressEx_A( OUT PIP4_ADDRESS pIp4Addr, IN PCSTR pchString, IN DWORD StringLength );
BOOL Dns_Ip6StringToAddressEx_A( OUT PIP6_ADDRESS pIp6Addr, IN PCSTR pchString, IN DWORD StringLength );
//
// RPC-able type (record.c)
//
BOOL Dns_IsRpcRecordType( IN WORD wType );
//
// Record copy (rrcopy.c)
//
PDNS_RECORD WINAPI Dns_RecordCopy_W( IN PDNS_RECORD pRecord );
PDNS_RECORD WINAPI Dns_RecordCopy_A( IN PDNS_RECORD pRecord );
PDNS_RECORD Dns_RecordListCopyEx( IN PDNS_RECORD pRR, IN DWORD ScreenFlag, IN DNS_CHARSET CharSetIn, IN DNS_CHARSET CharSetOut );
//
// Record list routines (rrlist.c)
//
//
// Record screening (rrlist.c)
//
#define SCREEN_OUT_ANSWER (0x00000001)
#define SCREEN_OUT_AUTHORITY (0x00000010)
#define SCREEN_OUT_ADDITIONAL (0x00000100)
#define SCREEN_OUT_NON_RPC (0x00100000)
#define SCREEN_OUT_SECTION \
(SCREEN_OUT_ANSWER | SCREEN_OUT_AUTHORITY | SCREEN_OUT_ADDITIONAL)
BOOL Dns_ScreenRecord( IN PDNS_RECORD pRR, IN DWORD ScreenFlag );
PDNS_RECORD Dns_RecordListScreen( IN PDNS_RECORD pRR, IN DWORD ScreenFlag );
DWORD Dns_RecordListGetMinimumTtl( IN PDNS_RECORD pRRList );
//
// New free
// DCR: switch to dnslib.h when world builds clean
//
#undef Dns_RecordListFree
VOID WINAPI Dns_RecordListFree( IN OUT PDNS_RECORD pRRList );
//
// String (string.c)
//
DWORD MultiSz_Length_A( IN PCSTR pmszString );
PSTR MultiSz_NextString_A( IN PCSTR pmszString );
PSTR MultiSz_Copy_A( IN PCSTR pmszString );
//
// Name utilities (name.c)
//
DWORD Dns_MakeCanonicalNameW( OUT PWSTR pBuffer, IN DWORD BufLength, IN PWSTR pwsString, IN DWORD StringLength );
DWORD Dns_MakeCanonicalNameInPlaceW( IN PWCHAR pwString, IN DWORD StringLength );
//
// Name checking -- server name checking levels
//
#define DNS_ALLOW_RFC_NAMES_ONLY (0)
#define DNS_ALLOW_NONRFC_NAMES (1)
#define DNS_ALLOW_MULTIBYTE_NAMES (2)
#define DNS_ALLOW_ALL_NAMES (3)
INT Dns_DowncaseNameLabel( OUT PCHAR pchResult, IN PCHAR pchLabel, IN DWORD cchLabel, IN DWORD dwFlags );
PSTR Dns_NameAppend_A( OUT PCHAR pNameBuffer, IN DWORD BufferLength, IN PSTR pszName, IN PSTR pszDomain );
PWSTR Dns_NameAppend_W( OUT PWCHAR pNameBuffer, IN DWORD BufferLength, IN PWSTR pwsName, IN PWSTR pwsDomain );
PSTR Dns_SplitHostFromDomainName_A( IN PSTR pszName );
BOOL _fastcall Dns_IsNameNumeric_A( IN PCSTR pszName );
DWORD Dns_NameCopyWireToUnicode( OUT PWCHAR pBufferUnicode, IN PCSTR pszNameWire );
DWORD Dns_NameCopyUnicodeToWire( OUT PCHAR pBufferWire, IN PCWSTR pwsNameUnicode );
DWORD Dns_NameCopyStandard_W( OUT PWCHAR pBuffer, IN PCWSTR pwsNameUnicode );
DWORD Dns_NameCopyStandard_A( OUT PCHAR pBuffer, IN PCSTR pszName );
//
// Sting to address (straddr.c)
//
// Need for hostent routine which doesn unicode\ANSI.
//
BOOL Dns_StringToAddressEx( OUT PCHAR pAddrBuf, IN OUT PDWORD pBufLength, IN PCSTR pString, IN OUT PDWORD pAddrFamily, IN BOOL fUnicode, IN BOOL fReverse );
//
// Special record creation (rralloc.c)
//
PDNS_RECORD Dns_CreateFlatRecord( IN PDNS_NAME pOwnerName, IN WORD wType, IN PCHAR pData, IN DWORD DataLength, IN DWORD Ttl, IN DNS_CHARSET NameCharSet, IN DNS_CHARSET RecordCharSet );
PDNS_RECORD Dns_CreatePtrTypeRecord( IN PDNS_NAME pOwnerName, IN BOOL fCopyName, IN PDNS_NAME pTargetName, IN WORD wType, IN DWORD Ttl, IN DNS_CHARSET NameCharSet, IN DNS_CHARSET RecordCharSet );
PDNS_RECORD Dns_CreatePtrRecordEx( IN PIP_UNION pIp, IN PDNS_NAME pszHostName, IN DWORD Ttl, IN DNS_CHARSET NameCharSet, IN DNS_CHARSET RecordCharSet );
PDNS_RECORD Dns_CreatePtrRecordExEx( IN PIP_UNION pIp, IN PSTR pszHostName, IN PSTR pszDomainName, IN DWORD Ttl, IN DNS_CHARSET NameCharSet, IN DNS_CHARSET RecordCharSet );
PDNS_RECORD Dns_CreateARecord( IN PDNS_NAME pOwnerName, IN IP_ADDRESS IpAddress, IN DWORD Ttl, IN DNS_CHARSET NameCharSet, IN DNS_CHARSET RecordCharSet );
PDNS_RECORD Dns_CreateAAAARecord( IN PDNS_NAME pOwnerName, IN IP6_ADDRESS Ip6Address, IN DWORD Ttl, IN DNS_CHARSET NameCharSet, IN DNS_CHARSET RecordCharSet );
PDNS_RECORD Dns_CreateForwardRecord( IN PDNS_NAME pOwnerName, IN PIP_UNION pIp, IN DWORD Ttl, IN DNS_CHARSET NameCharSet, IN DNS_CHARSET RecordCharSet );
PDNS_RECORD Dns_CreateForwardRecordFromSockaddr( IN PDNS_NAME pOwnerName, IN PSOCKADDR pSockaddr, IN DWORD Ttl, IN DNS_CHARSET NameCharSet, IN DNS_CHARSET RecordCharSet );
PDNS_RECORD Dns_CreateRecordForIpString_W( IN PCWSTR pwsName, IN WORD wType, IN DWORD Ttl );
//
// Security stuff (security.c)
//
#define SECURITY_WIN32
#include <sspi.h>
#define DNS_SPN_SERVICE_CLASS "DNS"
#define DNS_SPN_SERVICE_CLASS_W L"DNS"
//
// Some useful stats
//
extern DWORD SecContextCreate; extern DWORD SecContextFree; extern DWORD SecContextQueue; extern DWORD SecContextQueueInNego; extern DWORD SecContextDequeue; extern DWORD SecContextTimeout; extern DWORD SecPackAlloc; extern DWORD SecPackFree;
// Security packet verifications
extern DWORD SecTkeyInvalid; extern DWORD SecTkeyBadTime; extern DWORD SecTsigFormerr; extern DWORD SecTsigEcho; extern DWORD SecTsigBadKey; extern DWORD SecTsigVerifySuccess; extern DWORD SecTsigVerifyOldSig; extern DWORD SecTsigVerifyFailed;
// Hacks
// Allowing old TSIG off by default, server can turn on.
// Big Time skew on by default
extern BOOL SecAllowOldTsig; extern DWORD SecTsigVerifyOldSig; extern DWORD SecTsigVerifyOldFailed; extern DWORD SecBigTimeSkew; extern DWORD SecBigTimeSkewBypass;
//
// Security globals
// expose some of these which may be accessed by update library
//
extern BOOL g_fSecurityPackageInitialized; extern DWORD g_SecurityTokenMaxLength;
//
// Security context cache
//
VOID Dns_TimeoutSecurityContextList( IN BOOL fClearList );
//
// Security API
//
BOOL Dns_DnsNameToKerberosTargetName( IN LPSTR pszDnsName, IN LPSTR pszKerberosTargetName );
DNS_STATUS Dns_StartSecurity( IN BOOL fProcessAttach );
DNS_STATUS Dns_StartServerSecurity( VOID );
DNS_STATUS Dns_InitializeSecurityPackage( OUT PDWORD pdwMaxMessage, IN BOOL bDnsSvr );
VOID Dns_TerminateSecurityPackage( VOID );
HANDLE Dns_CreateAPIContext( IN DWORD Flags, IN PVOID Credentials, OPTIONAL IN BOOL fUnicode );
VOID Dns_FreeAPIContext( IN OUT HANDLE hContextHandle );
PVOID Dns_GetApiContextCredentials( IN HANDLE hContextHandle );
DWORD Dns_GetCurrentRid( VOID);
BOOL Dns_CreateUserCredentials( IN PCHAR pszUser, IN DWORD dwUserLength, IN PCHAR pszDomain, IN DWORD dwDomainLength, IN PCHAR pszPassword, IN DWORD dwPasswordLength, IN BOOL FromWide, OUT PCHAR * ppCreds );
PSEC_WINNT_AUTH_IDENTITY_W Dns_AllocateAndInitializeCredentialsW( IN PSEC_WINNT_AUTH_IDENTITY_W pAuthIn );
PSEC_WINNT_AUTH_IDENTITY_A Dns_AllocateAndInitializeCredentialsA( IN PSEC_WINNT_AUTH_IDENTITY_A pAuthIn );
VOID Dns_FreeAuthIdentityCredentials( IN PVOID pAuthIn );
DNS_STATUS Dns_SignMessageWithGssTsig( IN HANDLE hContext, IN PDNS_HEADER pMsgHead, IN PCHAR pMsgBufEnd, IN OUT PCHAR * ppCurrent );
#if 1
DNS_STATUS Dns_RefreshSSpiCredentialsHandle( IN BOOL bDnsSvr, IN PCHAR pCreds ); #endif
VOID Dns_FreeSecurityContextList( VOID );
//
// Client security routines
//
DNS_STATUS Dns_DoSecureUpdate( IN PDNS_MSG_BUF pMsgSend, OUT PDNS_MSG_BUF pMsgRecv, IN OUT PHANDLE phContext, IN DWORD dwFlag, IN PDNS_NETINFO pNetworkInfo, IN PIP_ARRAY aipServer, IN LPSTR pszNameServer, IN PCHAR pCreds, IN PCHAR pszContext );
//
// Server security routines
//
DNS_STATUS Dns_FindSecurityContextFromAndVerifySignature( IN PHANDLE phContext, IN IP_ADDRESS ipRemote, IN PDNS_HEADER pMsgHead, IN PCHAR pMsgEnd );
DNS_STATUS Dns_ServerNegotiateTkey( IN IP_ADDRESS ipRemote, IN PDNS_HEADER pMsgHead, IN PCHAR pMsgEnd, IN PCHAR pMsgBufEnd, IN BOOL fBreakOnAscFailure, OUT PCHAR * ppCurrent );
DNS_STATUS Dns_SrvImpersonateClient( IN HANDLE hContext );
DNS_STATUS Dns_SrvRevertToSelf( IN HANDLE hContext );
VOID Dns_CleanupSessionAndEnlistContext( IN OUT HANDLE hSession );
DWORD Dns_GetKeyVersion( IN LPSTR pszContext );
//
// Security utilities
//
DNS_STATUS Dns_CreateSecurityDescriptor( OUT PSECURITY_DESCRIPTOR * ppSD, IN DWORD AclCount, IN PSID * SidPtrArray, IN DWORD * AccessMaskArray );
//
// Security credentials
//
// Only defined if WINNT_AUTH_IDENTITY defined
#ifdef __RPCDCE_H__
PSEC_WINNT_AUTH_IDENTITY_W Dns_AllocateCredentials( IN PWSTR pwsUserName, IN PWSTR pwsDomain, IN PWSTR pwsPassword ); #endif
DNS_STATUS Dns_ImpersonateUser( IN PDNS_CREDENTIALS pCreds );
VOID Dns_FreeCredentials( IN PDNS_CREDENTIALS pCreds );
PDNS_CREDENTIALS Dns_CopyCredentials( IN PDNS_CREDENTIALS pCreds );
//
// Debug globals
//
// Expose here to allow debug file sharing
//
typedef struct _DnsDebugInfo { DWORD Flag; HANDLE hFile;
DWORD FileCurrentSize; DWORD FileWrapCount; DWORD FileWrapSize;
DWORD LastThreadId; DWORD LastSecond;
BOOL fConsole;
CHAR FileName[ MAX_PATH ]; } DNS_DEBUG_INFO, *PDNS_DEBUG_INFO;
// WANING: MUST ONLY be called in dnsapi.dll
PDNS_DEBUG_INFO Dns_SetDebugGlobals( IN OUT PDNS_DEBUG_INFO pInfo );
//
// No DnsApi.dll
//
// If not using dnsapi.dll, let those names be used without
//
#ifdef NO_DNSAPI_DLL
//
// remove DnsApi.dll function definition
//
// timer
#undef InitializeSecondsTimer
#undef GetCurrentTimeInSeconds
// IP array
#undef DnsValidateIpAddressArray
#undef DnsCreateIpAddressArrayCopy
#undef DnsCreateIpArray
#undef DnsSizeofIpArray
#undef DnsBuildIpArray
#undef DnsCreateIpArrayCopy
#undef DnsIsAddressInIpArray
#undef DnsAddIpToIpArray
#undef DnsClearIpArray
#undef DnsCheckAndMakeIpArraySubset
#undef DnsDeleteIpFromIpArray
#undef DnsRemoveZerosFromIpArray
#undef DnsDiffOfIpArrays
#undef DnsIntersectionOfIpArrays
// general DNS utilities
#undef DnsGetDomainName
#undef DnsValidateAndCategorizeDnsName
#undef DnsStatusString
#undef DnsMapRcodeToStatus
#undef DnsIsStatusRcode
#undef DnsResponseCodeString
#undef DnsResponseCodeExplanationString
#undef DnsOpcodeString
#undef DnsOpcodeCharacter
#undef DnsSectionNameString
// local machine info
#undef Dns_GetIpAddresses
// records
#undef DnsWinsRecordFlagForString
#undef DnsWinsRecordFlagString
#undef DnsIsAMailboxType
#undef DnsRecordTypeForName
#undef DnsRecordStringForType
#undef DnsRecordStringForWritableType
#undef DnsIsStringCountValidForTextType
#undef DnsIpv6StringToAddress
#undef DnsIpv6AddressToString
// strings
#undef DnsCreateStringCopy
#undef DnsGetBufferLengthForStringCopy
#undef DnsCopyStringEx
#undef DnsStringCopyAllocateEx
#undef DnsWriteReverseNameStringForIpAddress
#undef DnsCreateReverseNameStringForIpAddress
#undef DnsValidateDnsName_UTF8
#undef DnsValidateDnsName_W
#undef DnsRelationalCompare_UTF8
#undef DnsRelationalCompare_W
#undef DnsValidateDnsString_UTF8
#undef DnsValidateDnsString_W
#undef DnsCreateStandardDnsNameCopy
#undef DnsDowncaseDnsNameLabel
#undef DnsUnicodeToUtf8
#undef DnsUtf8ToUnicode
#undef DnsValidateUtf8Byte
//
// redefine DnsApi.dll function as dnslib function
//
// timer
#define InitializeSecondsTimer() Dns_InitializeSecondsTimer()
#define GetCurrentTimeInSeconds() Dns_GetCurrentTimeInSeconds()
// IP array
#define DnsValidateIpAddressArray(a,b,c) Dns_ValidateIpAddressArray(a,b,c)
#define DnsCreateIpAddressArrayCopy(a,b) Dns_CreateIpAddressArrayCopy(a,b)
#define DnsCreateIpArray(a) Dns_CreateIpArray(a)
#define DnsSizeofIpArray(a) Dns_SizeofIpArray(a)
#define DnsBuildIpArray(a,b) Dns_BuildIpArray((a),(b))
#define DnsCreateIpArrayCopy(a) Dns_CreateIpArrayCopy(a)
#define DnsIsAddressInIpArray(a,b) Dns_IsAddressInIpArray((a),(b))
#define DnsAddIpToIpArray(a,b) Dns_AddIpToIpArray((a),(b))
#define DnsClearIpArray(a) Dns_ClearIpArray(a)
#define DnsCheckAndMakeIpArraySubset(a,b) Dns_CheckAndMakeIpArraySubset((a),(b))
#define DnsDeleteIpFromIpArray(a,b) Dns_DeleteIpFromIpArray((a),(b))
#define DnsRemoveZerosFromIpArray(a) Dns_RemoveZerosFromIpArray(a)
#define DnsDiffOfIpArrays(a,b,c,d,e) Dns_DiffOfIpArrays((a),(b),(c),(d),(e))
#define DnsIntersectionOfIpArrays(a,b,c) Dns_IntersectionOfIpArrays((a),(b),(c))
// general DNS utilities
#define DnsGetDomainName(a) Dns_GetDomainName(a)
#define DnsValidateAndCategorizeDnsName(a,b) Dns_ValidateAndCategorizeDnsName(a,b)
#define DnsStatusString(a) Dns_StatusString(a)
#define DnsMapRcodeToStatus(a) Dns_MapRcodeToStatus(a)
#define DnsIsStatusRcode(a) Dns_IsStatusRcode(a)
#define DnsResponseCodeString(a) Dns_ResponseCodeString(a)
#define DnsResponseCodeExplanationString(a) Dns_ResponseCodeExplanationString(a)
#define DnsOpcodeString(a) Dns_OpcodeString(a)
#define DnsOpcodeCharacter(a) Dns_OpcodeCharacter(a)
#define DnsSectionNameString(a,b) Dns_SectionNameString(a,b)
// local machine info
#define DnsGetIpAddresses(a,b) Dns_GetIpAddresses(a,b)
// records
#define DnsWinsRecordFlagForString(a,b) Dns_WinsRecordFlagForString(a,b)
#define DnsWinsRecordFlagString(a,b) Dns_WinsRecordFlagString(a,b)
#define DnsIsAMailboxType(a) Dns_IsAMailboxType(a)
#define DnsRecordTypeForName(a,b) Dns_RecordTypeForName(a,b)
#define DnsRecordStringForType(a) Dns_RecordStringForType(a)
#define DnsRecordStringForWritableType(a) Dns_RecordStringForWritableType(a)
#define DnsIsStringCountValidForTextType(a,b) Dns_IsStringCountValidForTextType(a,b)
// strings
#define DnsCreateStringCopy(a,b) Dns_CreateStringCopy(a,b)
#define DnsGetBufferLengthForStringCopy(a,b,c,d) Dns_GetBufferLengthForStringCopy(a,b,c,d)
#define DnsCopyStringEx(a,b,c,d,e) Dns_CopyStringEx(a,b,c,d,e)
#define DnsStringCopyAllocateEx(a,b,c,d) Dns_NameCopyAllocateEx(a,b,c,d)
#define DnsValidateDnsName_UTF8(a) Dns_ValidateDnsName_UTF8(a)
#define DnsValidateDnsName_W(a) Dns_ValidateDnsName_W(a)
#define DnsRelationalCompare_UTF8(a,b,c,d) Dns_RelationalCompare_UTF8(a,b,c,d)
#define DnsRelationalCompare_W(a,b,c,d) Dns_RelationalCompare_W(a,b,c,d)
#define DnsValidateDnsString_UTF8(a) Dns_ValidateDnsString_UTF8(a)
#define DnsValidateDnsString_W(a) Dns_ValidateDnsString_W(a)
#define DnsCreateStandardDnsNameCopy(a,b,c) Dns_CreateStandardDnsNameCopy(a,b,c)
#define DnsDowncaseDnsNameLabel(a,b,c,d) Dns_DowncaseDnsNameLabel(a,b,c,d)
#define DnsUnicodeToUtf8(a,b,c,d) Dns_UnicodeToUtf8(a,b,c,d)
#define DnsUtf8ToUnicode(a,b,c,d) Dns_Utf8ToUnicode(a,b,c,d)
#define DnsValidateUtf8Byte(a,b) Dns_ValidateUtf8Byte(a,b)
// address\string mapping
// some ones to make official?
#define DnsIpv6StringToAddress(a,b,c) Dns_Ip6StringToAddressEx_A(a,b,c)
#define DnsIpv6AddressToString(a,b) Dns_Ip6AddressToString_A(a,b)
#define DnsWriteReverseNameStringForIpAddress(a,b) Dns_WriteReverseNameForIp4Address(a,b)
#define DnsWriteReverseNameStringForIpAddress_W(a,b)Dns_WriteReverseNameForIp4Address_W(a,b)
#define DnsCreateReverseNameStringForIpAddress(a) Dns_CreateReverseNameStringForIpAddress(a)
#endif // NO_DNSAPI_DLL
//
// Use old names
// Covering old names with new -- done for dnsapi.dll (and associated utils)
// This is done only for non-exported routines.
// Exported routines must be directly covered.
//
// IP array
#define DnsValidateIpAddressArray(a,b,c) Dns_ValidateIpAddressArray(a,b,c)
#define DnsCreateIpAddressArrayCopy(a,b) Dns_CreateIpAddressArrayCopy(a,b)
#define DnsCreateIpArray(a) Dns_CreateIpArray(a)
#define DnsSizeofIpArray(a) Dns_SizeofIpArray(a)
#define DnsBuildIpArray(a,b) Dns_BuildIpArray((a),(b))
#define DnsCreateIpArrayCopy(a) Dns_CreateIpArrayCopy(a)
#define DnsIsAddressInIpArray(a,b) Dns_IsAddressInIpArray((a),(b))
#define DnsAddIpToIpArray(a,b) Dns_AddIpToIpArray((a),(b))
#define DnsClearIpArray(a) Dns_ClearIpArray(a)
#define DnsCheckAndMakeIpArraySubset(a,b) Dns_CheckAndMakeIpArraySubset((a),(b))
#define DnsDeleteIpFromIpArray(a,b) Dns_DeleteIpFromIpArray((a),(b))
#define DnsRemoveZerosFromIpArray(a) Dns_RemoveZerosFromIpArray(a)
#define DnsDiffOfIpArrays(a,b,c,d,e) Dns_DiffOfIpArrays((a),(b),(c),(d),(e))
#define DnsIntersectionOfIpArrays(a,b,c) Dns_IntersectionOfIpArrays((a),(b),(c))
// DNS configuration
#define DnsInitNetworkInfo() Dns_InitNetworkInfo()
#define DnsGetDnsAdapterInfo(a) Dns_GetDnsAdapterInfo(a)
#define DnsGetDnsNetworkInfo(a,b) Dns_GetDnsNetworkInfo(a,b)
#define DnsCreateAdapterInfo(a) Dns_CreateAdapterInfo(a)
#define DnsCreateSearchList(a,b) Dns_CreateSearchList(a,b)
#define DnsCreateNetworkInfo(a) Dns_CreateNetworkInfo(a)
#define DnsSizeofAdapterInfo(a) Dns_SizeofAdapterInfo(a)
#define DnsCreateAdapterInfoCopy(a) Dns_CreateAdapterInfoCopy(a)
#define DnsCreateSearchListCopy(a) Dns_CreateSearchListCopy(a)
#define DnsCreateNetworkInfoCopy(a) Dns_CreateNetworkInfoCopy(a)
#define DnsAddAdapterInfoToNetworkInfo(a,b) Dns_AddAdapterInfoToNetworkInfo(a,b)
#define DnsGetNextSearchName(a,b,c) Dns_GetNextSearchName(a,b,c)
#define DnsConvertIpArrayToAdapterInfo(a) Dns_ConvertIpArrayToAdapterInfo(a)
#define DnsConvertIpArrayToNetworkInfo(a,b) Dns_ConvertIpArrayToNetworkInfo(a,b)
#define DnsConvertNetworkInfoToIpArray(a) Dns_ConvertNetworkInfoToIpArray(a)
#define DnsFreeAdapterInfo(a) Dns_FreeAdapterInfo(a)
#define DnsFreeSearchList(a) Dns_FreeSearchList(a)
#define DnsFreeNetworkInfo(a) Dns_FreeNetworkInfo(a)
// same stuff but the infamous "NetAdapter"
#define DnsConvertNetworkInfoToIpArray(a) Dns_ConvertNetworkInfoToIpArray(a)
#define DnsFreeNetworkInfo(a) Dns_FreeNetworkInfo(a)
#define DnsCreateNetworkInfo(a) Dns_CreateNetworkInfo(a)
#define DnsCreateNetworkInfoCopy(a) Dns_CreateNetworkInfoCopy(a)
#define DnsCreateUpdateNetworkInfo(a,b) Dns_CreateUpdateNetworkInfo((b),NULL,(a),0)
// packet
#define DnsAllocateMsgBuf(a) Dns_AllocateMsgBuf(a)
#define DnsInitializeMsgBuf(a) Dns_InitializeMsgBuf(a)
#define DnsWriteDottedNameToPacket(a,b,c,d,e,f) Dns_WriteDottedNameToPacket(a,b,c,d,e,f)
#define DnsWriteStringToPacket(a,b,c,d) Dns_WriteStringToPacket(a,b,c,d)
#define DnsWriteQuestionToMessage(a,b,c,d) Dns_WriteQuestionToMessage(a,b,c,d)
#define DnsWriteRecordStructureToMessage(a,b,c,d,e) Dns_WriteRecordStructureToMessage(a,b,c,d,e)
#define DnsWriteRecordStructureToPacket(a,b,c) Dns_WriteRecordStructureToPacket(a,b,c)
#define DnsAddRecordsToMessage(a,b,c) Dns_AddRecordsToMessage(a,b,c)
#define DnsSkipPacketName(a,b) Dns_SkipPacketName(a,b)
#define DnsExtractRecordsFromMessage(a,b,c) Dns_ExtractRecordsFromMessage(a,b,c)
#define DnsReadPacketName(a,b,c,d,e,f,g) Dns_ReadPacketName(a,b,c,d,e,f,g)
// socket
#define DnsCreateSocket(a,b,c) Dns_CreateSocket(a,b,c)
#define DnsCloseSocket(a) Dns_CloseSocket(a)
#define DnsCloseConnection(a) Dns_CloseConnection(a)
#define DnsSetupGlobalAsyncSocket() Dns_SetupGlobalAsyncSocket()
// send
#define DnsSend(a) Dns_Send(a)
#define DnsRecv(b) Dns_Recv(b)
#define DnsRecvUdp(b) Dns_RecvUdp(b)
#define DnsSendMultipleUdp(a,b) Dns_SendMultipleUdp(a,b)
#define DnsSendAndRecvUdp(a,b,c) Dns_SendAndRecvUdp(a,b,c)
#define DnsSendAndRecvUdpEx(a,b,c) Dns_SendAndRecvUdpEx(a,b,c)
#define DnsOpenTcpConnectionAndSend(a,b,c) Dns_OpenTcpConnectionAndSend(a,b,c)
#define DnsRecvTcp(a) Dns_RecvTcp(a)
#define DnsSendAndRecvTcp(a,b,c) Dns_SendAndRecvTcp(a,b,c)
#define DnsInitializeMsgRemoteSockaddr(a,b) Dns_InitializeMsgRemoteSockaddr(a,b)
//
// Redefinitions to old naming
//
// DCR: remove once fixed
// shouldn't be in use anywhere but DNS source tree
//
#if 0
#define DnsStartDebug(a,b,c,d,e) Dns_StartDebug(a,b,c,d,e)
#define DnsEndDebug() Dns_EndDebug()
#define DnsAssert(a,b,c) Dns_Assert(a,b,c)
#define DnsDebugFlush() DnsDbg_Flush()
#define DnsDebugCSEnter(a,b,c,d) DnsDbg_CSEnter(a,b,c,d)
#define DnsDebugCSLeave(a,b,c,d) DnsDbg_CSLeave(a,b,c,d)
#define DnsPrintf DnsDbg_Printf
#define DnsDbgPrint DnsDbg_PrintfToDebugger
#define DnsDebugLock() DnsDbg_Lock()
#define DnsDebugUnlock() DnsDbg_Unlock()
#endif
#ifdef __cplusplus
} #endif // __cplusplus
#endif // _DNSLIBP_INCLUDED_
|