mirror of https://github.com/lianthony/NT4.0
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.
1227 lines
26 KiB
1227 lines
26 KiB
/*++
|
|
|
|
Copyright (c) 1995 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
dnsapi.h
|
|
|
|
Abstract:
|
|
|
|
Domain Name System (DNS) Server
|
|
|
|
DNS Server API to support admin clients.
|
|
|
|
Author:
|
|
|
|
Jim Gilroy (jamesg) September 23, 1995
|
|
|
|
Revision History:
|
|
|
|
Dan Morin (t-danmo) 28-Nov-95 Changed LPSTR to LPCSTR on most APIs
|
|
|
|
--*/
|
|
|
|
|
|
#ifndef _DNSAPI_INCLUDED_
|
|
#define _DNSAPI_INCLUDED_
|
|
|
|
#ifdef __cplusplus
|
|
extern "C"
|
|
{
|
|
#endif // _cplusplus
|
|
|
|
|
|
//
|
|
// Use stdcall for our API conventions
|
|
//
|
|
// Explicitly state this as C++ compiler will otherwise
|
|
// assume cdecl.
|
|
//
|
|
|
|
#define DNS_API_FUNCTION __stdcall
|
|
|
|
|
|
//
|
|
// Basic DNS definitions
|
|
//
|
|
|
|
#define DNS_MAX_NAME_LENGTH (255)
|
|
|
|
|
|
//
|
|
// RPC interface
|
|
//
|
|
|
|
#define DNS_INTERFACE_NAME "DNSSERVER"
|
|
|
|
//
|
|
// RPC security
|
|
//
|
|
|
|
#define DNS_RPC_SECURITY "DnsServerApp"
|
|
#define DNS_RPC_SECURITY_AUTH_ID 10
|
|
|
|
//
|
|
// RPC transports
|
|
//
|
|
|
|
#define DNS_RPC_NAMED_PIPE "\\PIPE\\DNSSERVER"
|
|
#define DNS_RPC_SERVER_PORT ""
|
|
#define DNS_RPC_LPC_EP "DNSSERVERLPC"
|
|
|
|
#define DNS_RPC_USE_TCPIP 0x1
|
|
#define DNS_RPC_USE_NAMED_PIPE 0x2
|
|
#define DNS_RPC_USE_LPC 0x4
|
|
#define DNS_RPC_USE_ALL_PROTOCOLS 0xffffffff
|
|
|
|
|
|
//
|
|
// DNS public types
|
|
//
|
|
|
|
typedef LONG DNS_STATUS, *PDNS_STATUS;
|
|
typedef DWORD DNS_HANDLE, *PDNS_HANDLE;
|
|
typedef DWORD DNS_APIOP;
|
|
typedef DWORD IP_ADDRESS, *PIP_ADDRESS;
|
|
|
|
//
|
|
// IP Address Array type
|
|
//
|
|
|
|
#if defined(MIDL_PASS)
|
|
|
|
#define LPSTR [string] char *
|
|
#define LPCSTR [string] const char *
|
|
|
|
typedef struct _IP_ARRAY
|
|
{
|
|
DWORD cAddrCount;
|
|
[size_is( cAddrCount )] IP_ADDRESS aipAddrs[];
|
|
}
|
|
IP_ARRAY, *PIP_ARRAY;
|
|
|
|
#else
|
|
|
|
typedef struct _IP_ARRAY
|
|
{
|
|
DWORD cAddrCount;
|
|
IP_ADDRESS aipAddrs[];
|
|
}
|
|
IP_ARRAY, *PIP_ARRAY;
|
|
|
|
#endif
|
|
|
|
//
|
|
// DNS API Errors
|
|
//
|
|
|
|
#define DNS_ERROR_MASK 0xcc000000
|
|
#define DNS_ERROR_SERVER_FAILURE 0xcc000001
|
|
#define DNS_ERROR_NOT_YET_IMPLEMENTED 0xcc000002
|
|
#define DNS_ERROR_OLD_API 0xcc000003
|
|
|
|
#define DNS_ERROR_NAME_DOES_NOT_EXIST 0xcc000010
|
|
#define DNS_ERROR_INVALID_NAME 0xcc000011
|
|
#define DNS_ERROR_INVALID_IP_ADDRESS 0xcc000012
|
|
#define DNS_ERROR_INVALID_DATA 0xcc000013
|
|
|
|
|
|
//
|
|
// Packet format
|
|
//
|
|
|
|
#define DNS_INFO_NO_RECORDS 0x4c000030
|
|
#define DNS_INFO_NAME_ERROR 0x4c000031
|
|
#define DNS_ERROR_RCODE 0xcc000032
|
|
#define DNS_ERROR_MESSAGE_FORMAT 0xcc000033
|
|
#define DNS_ERROR_MESSAGE_HEADER_FORMAT 0xcc000034
|
|
|
|
|
|
//
|
|
// Zone errors
|
|
//
|
|
|
|
#define DNS_ERROR_ZONE_DOES_NOT_EXIST 0xcc000101
|
|
#define DNS_ERROR_NO_ZONE_INFO 0xcc000102
|
|
#define DNS_ERROR_INVALID_ZONE_OPERATION 0xcc000103
|
|
#define DNS_ERROR_ZONE_CONFIGURATION_ERROR 0xcc000104
|
|
#define DNS_ERROR_ZONE_HAS_NO_SOA_RECORD 0xcc000105
|
|
#define DNS_ERROR_ZONE_HAS_NO_NS_RECORDS 0xcc000106
|
|
#define DNS_ERROR_ZONE_LOCKED 0xcc000107
|
|
|
|
#define DNS_ERROR_ZONE_CREATION_FAILED 0xcc000110
|
|
#define DNS_ERROR_ZONE_ALREADY_EXISTS 0xcc000111
|
|
#define DNS_ERROR_AUTOZONE_ALREADY_EXISTS 0xcc000112
|
|
#define DNS_ERROR_INVALID_ZONE_TYPE 0xcc000113
|
|
#define DNS_ERROR_SECONDARY_REQUIRES_MASTER_IP 0xcc000114
|
|
|
|
#define DNS_ERROR_ZONE_NOT_SECONDARY 0xcc000120
|
|
#define DNS_ERROR_NEED_SECONDARY_ADDRESSES 0xcc000121
|
|
#define DNS_ERROR_WINS_INIT_FAILED 0xcc000122
|
|
#define DNS_ERROR_NEED_WINS_SERVERS 0xcc000123
|
|
#define DNS_ERROR_NBSTAT_INIT_FAILED 0xcc000124
|
|
#define DNS_ERROR_SOA_DELETE_INVALID 0xcc000125
|
|
|
|
//
|
|
// Datafile errors
|
|
//
|
|
|
|
#define DNS_ERROR_PRIMARY_REQUIRES_DATAFILE 0xcc000201
|
|
#define DNS_ERROR_INVALID_DATAFILE_NAME 0xcc000202
|
|
#define DNS_ERROR_DATAFILE_OPEN_FAILURE 0xcc000203
|
|
#define DNS_ERROR_FILE_WRITEBACK_FAILED 0xcc000204
|
|
#define DNS_ERROR_DATAFILE_PARSING 0xcc000205
|
|
|
|
|
|
//
|
|
// Database errors
|
|
//
|
|
|
|
#define DNS_ERROR_RECORD_DOES_NOT_EXIST 0xcc000300
|
|
#define DNS_ERROR_RECORD_FORMAT 0xcc000301
|
|
#define DNS_ERROR_NODE_CREATION_FAILED 0xcc000302
|
|
#define DNS_ERROR_UNKNOWN_RECORD_TYPE 0xcc000303
|
|
#define DNS_ERROR_RECORD_TIMED_OUT 0xcc000304
|
|
|
|
#define DNS_ERROR_NAME_NOT_IN_ZONE 0xcc000305
|
|
#define DNS_ERROR_CNAME_LOOP 0xcc000306
|
|
#define DNS_ERROR_NODE_IS_CNAME 0xcc000307
|
|
#define DNS_ERROR_CNAME_COLLISION 0xcc000308
|
|
#define DNS_ERROR_RECORD_ONLY_AT_ZONE_ROOT 0xcc000309
|
|
#define DNS_ERROR_RECORD_ALREADY_EXISTS 0xcc000310
|
|
#define DNS_ERROR_SECONDARY_DATA 0xcc000311
|
|
#define DNS_ERROR_NO_CREATE_CACHE_DATA 0xcc000312
|
|
|
|
#define DNS_WARNING_PTR_CREATE_FAILED 0x8c000332
|
|
#define DNS_WARNING_DOMAIN_UNDELETED 0x8c000333
|
|
|
|
//
|
|
// Operation errors
|
|
//
|
|
|
|
#define DNS_INFO_AXFR_COMPLETE 0x4c000403
|
|
#define DNS_ERROR_AXFR 0xcc000404
|
|
#define DNS_INFO_ADDED_LOCAL_WINS 0x4c000405
|
|
|
|
|
|
|
|
|
|
//
|
|
// DNS Server information
|
|
//
|
|
|
|
typedef struct _DNS_SERVER_INFO
|
|
{
|
|
DWORD dwVersion;
|
|
LPSTR pszServerName;
|
|
|
|
// boot
|
|
|
|
DWORD fBootRegistry;
|
|
|
|
// IP interfaces
|
|
|
|
PIP_ARRAY aipServerAddrs;
|
|
PIP_ARRAY aipListenAddrs;
|
|
|
|
// recursion lookup timeout
|
|
|
|
DWORD dwRecursionTimeout;
|
|
|
|
// forwarders
|
|
|
|
PIP_ARRAY aipForwarders;
|
|
DWORD dwForwardTimeout;
|
|
DWORD fSlave;
|
|
|
|
// save some space, just in case
|
|
|
|
DWORD pvReserved1;
|
|
DWORD pvReserved2;
|
|
DWORD pvReserved3;
|
|
}
|
|
DNS_SERVER_INFO, *PDNS_SERVER_INFO;
|
|
|
|
|
|
|
|
//
|
|
// Server configuration API
|
|
//
|
|
|
|
DNS_STATUS
|
|
DNS_API_FUNCTION
|
|
DnsGetServerInfo(
|
|
IN LPCSTR pszServer,
|
|
OUT PDNS_SERVER_INFO * ppServerInfo
|
|
);
|
|
|
|
VOID
|
|
DNS_API_FUNCTION
|
|
DnsFreeServerInfo(
|
|
IN OUT PDNS_SERVER_INFO pServerInfo
|
|
);
|
|
|
|
DNS_STATUS
|
|
DNS_API_FUNCTION
|
|
DnsResetBootMethod(
|
|
IN LPCSTR pszServer,
|
|
IN DWORD fBootRegistry
|
|
);
|
|
|
|
DNS_STATUS
|
|
DNS_API_FUNCTION
|
|
DnsResetServerListenAddresses(
|
|
IN LPCSTR pszServer,
|
|
IN DWORD cListenAddrs,
|
|
IN PIP_ADDRESS aipListenAddrs
|
|
);
|
|
|
|
DNS_STATUS
|
|
DNS_API_FUNCTION
|
|
DnsResetForwarders(
|
|
IN LPCSTR pszServer,
|
|
IN DWORD cForwarders,
|
|
IN PIP_ADDRESS aipForwarders,
|
|
IN DWORD dwForwardTimeout,
|
|
IN DWORD fSlave
|
|
);
|
|
|
|
|
|
//
|
|
// DNS server statistics
|
|
//
|
|
|
|
typedef struct _DNS_SYSTEMTIME
|
|
{
|
|
WORD wYear;
|
|
WORD wMonth;
|
|
WORD wDayOfWeek;
|
|
WORD wDay;
|
|
WORD wHour;
|
|
WORD wMinute;
|
|
WORD wSecond;
|
|
WORD wMilliseconds;
|
|
}
|
|
DNS_SYSTEMTIME;
|
|
|
|
typedef struct _DNS_STATISTICS
|
|
{
|
|
//
|
|
// Queries and responses
|
|
//
|
|
|
|
DWORD UdpQueries;
|
|
DWORD UdpResponses;
|
|
DWORD UdpQueriesSent;
|
|
DWORD UdpResponsesReceived;
|
|
|
|
DWORD TcpClientConnections;
|
|
DWORD TcpQueries;
|
|
DWORD TcpResponses;
|
|
DWORD TcpQueriesSent;
|
|
DWORD TcpResponsesReceived;
|
|
|
|
//
|
|
// Recursion
|
|
//
|
|
|
|
DWORD RecurseLookups;
|
|
DWORD RecurseResponses;
|
|
|
|
DWORD RecursePasses;
|
|
DWORD RecurseQuestions;
|
|
DWORD RecurseForwards;
|
|
DWORD RecurseTimeouts;
|
|
DWORD RecurseFailures;
|
|
DWORD RecursePartialFailures;
|
|
|
|
DWORD RecurseRootQuery;
|
|
DWORD RecurseRootResponse;
|
|
DWORD RecurseTcpTry;
|
|
DWORD RecurseTcpQuery;
|
|
DWORD RecurseTcpResponse;
|
|
|
|
// Recursion Packets
|
|
|
|
DWORD RecursePacketUsed;
|
|
DWORD RecursePacketReturn;
|
|
|
|
//
|
|
// WINS lookup
|
|
//
|
|
|
|
DWORD WinsLookups;
|
|
DWORD WinsResponses;
|
|
DWORD WinsReverseLookups;
|
|
DWORD WinsReverseResponses;
|
|
|
|
// Zone transfer secondary
|
|
|
|
DWORD SecSoaQueries;
|
|
DWORD SecSoaResponses;
|
|
DWORD SecNotifyReceived;
|
|
DWORD SecAxfrRequested;
|
|
DWORD SecAxfrRejected;
|
|
DWORD SecAxfrFailed;
|
|
DWORD SecAxfrSuccessful;
|
|
|
|
// Zone transfer master
|
|
|
|
DWORD MasterNotifySent;
|
|
DWORD MasterAxfrReceived;
|
|
DWORD MasterAxfrInvalid;
|
|
DWORD MasterAxfrRefused;
|
|
DWORD MasterAxfrDenied;
|
|
DWORD MasterAxfrFailed;
|
|
DWORD MasterAxfrSuccessful;
|
|
|
|
//
|
|
// Database
|
|
//
|
|
|
|
DWORD DatabaseMemory;
|
|
|
|
//
|
|
// Nodes
|
|
//
|
|
|
|
DWORD NodeAlloc;
|
|
DWORD NodeFree;
|
|
DWORD NodeNetAllocs;
|
|
DWORD NodeMemory;
|
|
|
|
DWORD NodeInUse;
|
|
DWORD NodeUsed;
|
|
DWORD NodeReturn;
|
|
|
|
DWORD NodeStdAlloc;
|
|
DWORD NodeStdUsed;
|
|
DWORD NodeStdReturn;
|
|
DWORD NodeInFreeList;
|
|
|
|
//
|
|
// Resource Records
|
|
//
|
|
|
|
DWORD RecordAlloc;
|
|
DWORD RecordFree;
|
|
DWORD RecordNetAllocs;
|
|
DWORD RecordMemory;
|
|
|
|
DWORD RecordInUse;
|
|
DWORD RecordUsed;
|
|
DWORD RecordReturn;
|
|
|
|
DWORD RecordStdAlloc;
|
|
DWORD RecordStdUsed;
|
|
DWORD RecordStdReturn;
|
|
DWORD RecordInFreeList;
|
|
|
|
//
|
|
// RR caching
|
|
//
|
|
|
|
DWORD CacheRRTotal;
|
|
DWORD CacheRRCurrent;
|
|
DWORD CacheRRTimeouts;
|
|
|
|
//
|
|
// Packet memory
|
|
//
|
|
|
|
// UDP Packets
|
|
|
|
DWORD UdpAlloc;
|
|
DWORD UdpFree;
|
|
DWORD UdpNetAllocs;
|
|
DWORD UdpMemory;
|
|
|
|
DWORD UdpUsed;
|
|
DWORD UdpReturn;
|
|
DWORD UdpResponseReturn;
|
|
DWORD UdpQueryReturn;
|
|
DWORD UdpInUse;
|
|
DWORD UdpInFreeList;
|
|
|
|
// TCP Packets
|
|
|
|
DWORD TcpAlloc;
|
|
DWORD TcpRealloc;
|
|
DWORD TcpFree;
|
|
DWORD TcpNetAllocs;
|
|
DWORD TcpMemory;
|
|
|
|
//
|
|
// Nbstat Memory
|
|
//
|
|
|
|
DWORD NbstatAlloc;
|
|
DWORD NbstatFree;
|
|
DWORD NbstatNetAllocs;
|
|
DWORD NbstatMemory;
|
|
|
|
DWORD NbstatUsed;
|
|
DWORD NbstatReturn;
|
|
DWORD NbstatInUse;
|
|
DWORD NbstatInFreeList;
|
|
|
|
//
|
|
// stats since when
|
|
//
|
|
|
|
DWORD ServerStartTimeSeconds;
|
|
DWORD LastClearTimeSeconds;
|
|
DWORD SecondsSinceServerStart;
|
|
DWORD SecondsSinceLastClear;
|
|
|
|
DNS_SYSTEMTIME ServerStartTime;
|
|
DNS_SYSTEMTIME LastClearTime;
|
|
|
|
}
|
|
DNS_STATISTICS, *PDNS_STATISTICS;
|
|
|
|
//
|
|
// cover old stat fields
|
|
//
|
|
|
|
#define dwCurrentStartTime CurrentStartTime
|
|
#define dwUdpQueries UdpQueries
|
|
#define dwUdpResponses UdpResponses
|
|
#define dwTcpClientConnections TcpClientConnections
|
|
#define dwTcpQueries TcpQueries
|
|
#define dwTcpResponses TcpResponses
|
|
#define dwRecursiveLookups RecurseLookups
|
|
#define dwRecursiveResponses RecurseResponses
|
|
#define dwWinsForwardLookups WinsLookups
|
|
#define dwWinsForwardResponses WinsResponses
|
|
#define dwWinsReverseLookups WinsReverseLookups
|
|
#define dwWinsReverseResponses WinsReverseResponses
|
|
#define TimeOfLastClear LastClearTime
|
|
|
|
|
|
|
|
//
|
|
// Statistics API
|
|
//
|
|
|
|
DNS_STATUS
|
|
DNS_API_FUNCTION
|
|
DnsGetStatistics(
|
|
IN LPCSTR pszServer,
|
|
OUT PDNS_STATISTICS * ppStatistics
|
|
);
|
|
|
|
VOID
|
|
DNS_API_FUNCTION
|
|
DnsFreeStatistics(
|
|
IN OUT PDNS_STATISTICS pStatistics
|
|
);
|
|
|
|
DNS_STATUS
|
|
DNS_API_FUNCTION
|
|
DnsClearStatistics(
|
|
IN LPCSTR pszServer
|
|
);
|
|
|
|
|
|
|
|
//
|
|
// DNS Zone information
|
|
//
|
|
|
|
#define DNS_ZONE_TYPE_CACHE (0)
|
|
#define DNS_ZONE_TYPE_PRIMARY (1)
|
|
#define DNS_ZONE_TYPE_SECONDARY (2)
|
|
|
|
typedef struct _DNS_ZONE_INFO
|
|
{
|
|
DNS_HANDLE hZone;
|
|
LPSTR pszZoneName;
|
|
DWORD dwZoneType;
|
|
DWORD fReverse;
|
|
DWORD fPaused;
|
|
DWORD fShutdown;
|
|
DWORD fAutoCreated;
|
|
|
|
// Database info
|
|
|
|
DWORD fUseDatabase;
|
|
LPSTR pszDataFile;
|
|
|
|
// Masters
|
|
|
|
PIP_ARRAY aipMasters;
|
|
|
|
// Secondaries
|
|
|
|
PIP_ARRAY aipSecondaries;
|
|
DWORD fSecureSecondaries;
|
|
|
|
// WINS or Nbstat lookup
|
|
|
|
DWORD fUseWins;
|
|
DWORD fUseNbstat;
|
|
|
|
// save some space, just inase
|
|
// avoid versioning issues if possible
|
|
|
|
DWORD pvReserved1;
|
|
DWORD pvReserved2;
|
|
DWORD pvReserved3;
|
|
DWORD pvReserved4;
|
|
DWORD pvReserved5;
|
|
DWORD pvReserved6;
|
|
DWORD pvReserved7;
|
|
DWORD pvReserved8;
|
|
DWORD pvReserved9;
|
|
}
|
|
DNS_ZONE_INFO, *PDNS_ZONE_INFO;
|
|
|
|
|
|
|
|
//
|
|
// Zone configuration API
|
|
//
|
|
|
|
DNS_STATUS
|
|
DNS_API_FUNCTION
|
|
DnsEnumZoneHandles(
|
|
IN LPCSTR pszServer,
|
|
OUT PDWORD pZoneCount,
|
|
IN DWORD dwArrayLength,
|
|
OUT DNS_HANDLE ahZones[]
|
|
);
|
|
|
|
DNS_STATUS
|
|
DNS_API_FUNCTION
|
|
DnsGetZoneInfo(
|
|
IN LPCSTR pszServer,
|
|
IN DNS_HANDLE hZone,
|
|
OUT PDNS_ZONE_INFO * ppZoneInfo
|
|
);
|
|
|
|
VOID
|
|
DNS_API_FUNCTION
|
|
DnsFreeZoneInfo(
|
|
IN OUT PDNS_ZONE_INFO pZoneInfo
|
|
);
|
|
|
|
DNS_STATUS
|
|
DNS_API_FUNCTION
|
|
DnsEnumZoneInfo(
|
|
IN LPCSTR pszServer,
|
|
OUT PDWORD pdwZoneCount,
|
|
IN DWORD dwArrayLength,
|
|
OUT PDNS_ZONE_INFO apZones[]
|
|
);
|
|
|
|
DNS_STATUS
|
|
DNS_API_FUNCTION
|
|
DnsResetZoneType(
|
|
IN LPCSTR pszServer,
|
|
IN DNS_HANDLE hZone,
|
|
IN DWORD dwZoneType,
|
|
IN DWORD cMasters,
|
|
IN PIP_ADDRESS aipMasters
|
|
);
|
|
|
|
DNS_STATUS
|
|
DNS_API_FUNCTION
|
|
DnsResetZoneDatabase(
|
|
IN LPCSTR pszServer,
|
|
IN DNS_HANDLE hZone,
|
|
IN DWORD fUseDatabase,
|
|
IN LPCSTR pszDataFile
|
|
);
|
|
|
|
DNS_STATUS
|
|
DNS_API_FUNCTION
|
|
DnsResetZoneMasters(
|
|
IN LPCSTR pszServer,
|
|
IN DNS_HANDLE hZone,
|
|
IN DWORD cMasters,
|
|
IN PIP_ADDRESS aipMasters
|
|
);
|
|
|
|
DNS_STATUS
|
|
DNS_API_FUNCTION
|
|
DnsResetZoneSecondaries(
|
|
IN LPCSTR pszServer,
|
|
IN DNS_HANDLE hZone,
|
|
IN DWORD fSecureSecondaries,
|
|
IN DWORD cSecondaries,
|
|
IN PIP_ADDRESS aipSecondaries
|
|
);
|
|
|
|
|
|
//
|
|
// Zone management
|
|
//
|
|
|
|
DNS_STATUS
|
|
DNS_API_FUNCTION
|
|
DnsCreateZone(
|
|
IN LPCSTR pszServer,
|
|
OUT PDNS_HANDLE phZone,
|
|
IN LPCSTR pszZoneName,
|
|
IN DWORD dwZoneType,
|
|
IN LPCSTR pszAdminEmailName,
|
|
IN DWORD cMasters,
|
|
IN PIP_ADDRESS aipMasters,
|
|
IN DWORD dwUseDatabase,
|
|
IN LPCSTR pszDataFile
|
|
);
|
|
|
|
DNS_STATUS
|
|
DNS_API_FUNCTION
|
|
DnsDelegateSubZone(
|
|
IN LPCSTR pszServer,
|
|
IN DNS_HANDLE hZone,
|
|
IN LPCSTR pszSubZone,
|
|
IN LPCSTR pszNewServer,
|
|
IN IP_ADDRESS ipNewServerAddr
|
|
);
|
|
|
|
DNS_STATUS
|
|
DNS_API_FUNCTION
|
|
DnsIncrementZoneVersion(
|
|
IN LPCSTR pszServer,
|
|
IN DNS_HANDLE hZone
|
|
);
|
|
|
|
DNS_STATUS
|
|
DNS_API_FUNCTION
|
|
DnsDeleteZone(
|
|
IN LPCSTR pszServer,
|
|
IN DNS_HANDLE hZone
|
|
);
|
|
|
|
DNS_STATUS
|
|
DNS_API_FUNCTION
|
|
DnsPauseZone(
|
|
IN LPCSTR pszServer,
|
|
IN DNS_HANDLE hZone
|
|
);
|
|
|
|
DNS_STATUS
|
|
DNS_API_FUNCTION
|
|
DnsResumeZone(
|
|
IN LPCSTR pszServer,
|
|
IN DNS_HANDLE hZone
|
|
);
|
|
|
|
|
|
|
|
//
|
|
// DNS Resource Records
|
|
//
|
|
|
|
// RFC 1034/1035
|
|
#define DNS_TYPE_A 0x0001 // 1
|
|
#define DNS_TYPE_NS 0x0002 // 2
|
|
#define DNS_TYPE_MD 0x0003 // 3
|
|
#define DNS_TYPE_MF 0x0004 // 4
|
|
#define DNS_TYPE_CNAME 0x0005 // 5
|
|
#define DNS_TYPE_SOA 0x0006 // 6
|
|
#define DNS_TYPE_MB 0x0007 // 7
|
|
#define DNS_TYPE_MG 0x0008 // 8
|
|
#define DNS_TYPE_MR 0x0009 // 9
|
|
#define DNS_TYPE_NULL 0x000a // 10
|
|
#define DNS_TYPE_WKS 0x000b // 11
|
|
#define DNS_TYPE_PTR 0x000c // 12
|
|
#define DNS_TYPE_HINFO 0x000d // 13
|
|
#define DNS_TYPE_MINFO 0x000e // 14
|
|
#define DNS_TYPE_MX 0x000f // 15
|
|
#define DNS_TYPE_TEXT 0x0010 // 16
|
|
|
|
// RFC 1183
|
|
#define DNS_TYPE_RP 0x0011 // 17
|
|
#define DNS_TYPE_AFSDB 0x0012 // 18
|
|
#define DNS_TYPE_X25 0x0013 // 19
|
|
#define DNS_TYPE_ISDN 0x0014 // 20
|
|
#define DNS_TYPE_RT 0x0015 // 21
|
|
|
|
// RFC 1348
|
|
#define DNS_TYPE_NSAP 0x0016 // 22
|
|
#define DNS_TYPE_NSAPPTR 0x0017 // 23
|
|
|
|
// DNS security draft dnssec-secext
|
|
#define DNS_TYPE_SIG 0x0018 // 24
|
|
#define DNS_TYPE_KEY 0x0019 // 25
|
|
|
|
// RFC 1664 (X.400 mail)
|
|
#define DNS_TYPE_PX 0x001a // 26
|
|
|
|
//
|
|
#define DNS_TYPE_GPOS 0x001b // 27
|
|
|
|
// RFC 1886 (IPng Address)
|
|
#define DNS_TYPE_AAAA 0x001c // 28
|
|
|
|
//
|
|
// Query only types (1035, IXFR draft)
|
|
//
|
|
#define DNS_TYPE_IXFR 0x00fb // 251
|
|
#define DNS_TYPE_AXFR 0x00fc // 252
|
|
#define DNS_TYPE_MAILB 0x00fd // 253
|
|
#define DNS_TYPE_MAILA 0x00fe // 254
|
|
#define DNS_TYPE_ALL 0x00ff // 255
|
|
|
|
//
|
|
// Temp Microsoft types -- use until get IANA approval for real type
|
|
//
|
|
#define DNS_TYPE_WINS 0xff01 // 64K - 255
|
|
#define DNS_TYPE_NBSTAT 0xff02 // 64K - 254
|
|
|
|
|
|
|
|
//
|
|
// Node name structure for DNS names on the wire
|
|
//
|
|
|
|
typedef struct _DnsRpcName
|
|
{
|
|
UCHAR cchNameLength;
|
|
CHAR achName[];
|
|
}
|
|
DNS_RPC_NAME, *PDNS_RPC_NAME, DNS_STRING, *PDNS_STRING;
|
|
|
|
|
|
//
|
|
// Node flags
|
|
//
|
|
|
|
#define DNS_RPC_NODE_FLAG_COMPLETE 0x80000000
|
|
#define DNS_RPC_NODE_FLAG_STICKY 0x01000000
|
|
|
|
|
|
//
|
|
// DNS node structure for on the wire
|
|
//
|
|
|
|
typedef struct _DnsRpcNode
|
|
{
|
|
WORD wLength;
|
|
WORD wRecordCount;
|
|
DWORD dwFlags;
|
|
DWORD dwChildCount;
|
|
DNS_RPC_NAME dnsNodeName;
|
|
}
|
|
DNS_RPC_NODE, *PDNS_RPC_NODE;
|
|
|
|
#define SIZEOF_DNS_RPC_NODE_HEADER (3*sizeof(DWORD))
|
|
|
|
|
|
//
|
|
// Resource Record Flags
|
|
//
|
|
|
|
#define DNS_RPC_RECORD_FLAG_CACHE_DATA 0x80000000
|
|
#define DNS_RPC_RECORD_FLAG_ZONE_ROOT 0x40000000
|
|
#define DNS_RPC_RECORD_FLAG_AUTH_ZONE_ROOT 0x20000000
|
|
|
|
#define DNS_RPC_RECORD_FLAG_DEFAULT_TTL 0x08000000
|
|
#define DNS_RPC_RECORD_FLAG_TTL_CHANGE 0x04000000
|
|
#define DNS_RPC_RECORD_FLAG_CREATE_PTR 0x02000000
|
|
#define DNS_RPC_RECORD_FLAG_LOCAL_TYPE 0x01000000
|
|
|
|
|
|
//
|
|
// Resource record structure for passing records on the wire
|
|
//
|
|
// For efficiency, all these fields are aligned.
|
|
// When buffered for transmission, all RR should start on DWORD
|
|
// aligned boundary.
|
|
//
|
|
|
|
typedef struct _DnsRpcRecord
|
|
{
|
|
WORD wRecordLength;
|
|
WORD wType;
|
|
WORD wClass;
|
|
WORD wDataLength;
|
|
|
|
DNS_HANDLE hRecord;
|
|
DWORD dwFlags;
|
|
DWORD dwTtlSeconds;
|
|
|
|
union
|
|
{
|
|
struct
|
|
{
|
|
IP_ADDRESS ipAddress;
|
|
}
|
|
A;
|
|
|
|
struct
|
|
{
|
|
DWORD dwSerialNo;
|
|
DWORD dwRefresh;
|
|
DWORD dwRetry;
|
|
DWORD dwExpire;
|
|
DWORD dwMinimumTtl;
|
|
DNS_RPC_NAME namePrimaryServer;
|
|
|
|
// responsible party follows in buffer
|
|
}
|
|
SOA, Soa;
|
|
|
|
struct
|
|
{
|
|
DNS_RPC_NAME nameNode;
|
|
}
|
|
PTR, Ptr,
|
|
NS, Ns,
|
|
CNAME, Cname,
|
|
MB, Mb,
|
|
MD, Md,
|
|
MF, Mf,
|
|
MG, Mg,
|
|
MR, Mr;
|
|
|
|
struct
|
|
{
|
|
DNS_RPC_NAME nameMailBox;
|
|
|
|
// errors to mailbox follows in buffer
|
|
}
|
|
MINFO, Minfo,
|
|
RP, Rp;
|
|
|
|
struct
|
|
{
|
|
WORD wPreference;
|
|
DNS_RPC_NAME nameExchange;
|
|
}
|
|
MX, Mx,
|
|
AFSDB, Afsdb,
|
|
RT, Rt;
|
|
|
|
struct
|
|
{
|
|
DNS_STRING stringData;
|
|
|
|
// one or more strings may follow
|
|
}
|
|
AAAA,
|
|
HINFO, Hinfo,
|
|
ISDN, Isdn,
|
|
TXT, Txt,
|
|
X25;
|
|
|
|
struct
|
|
{
|
|
BYTE bData[];
|
|
}
|
|
Null;
|
|
|
|
struct
|
|
{
|
|
IP_ADDRESS ipAddress;
|
|
UCHAR chProtocol;
|
|
BYTE bBitMask[1];
|
|
}
|
|
WKS, Wks;
|
|
|
|
//
|
|
// MS types
|
|
//
|
|
|
|
struct
|
|
{
|
|
DWORD dwMappingFlag;
|
|
DWORD dwLookupTimeout;
|
|
DWORD dwCacheTimeout;
|
|
DWORD cWinsServerCount;
|
|
IP_ADDRESS aipWinsServers[];
|
|
}
|
|
WINS, Wins;
|
|
|
|
struct
|
|
{
|
|
DWORD dwMappingFlag;
|
|
DWORD dwLookupTimeout;
|
|
DWORD dwCacheTimeout;
|
|
DNS_RPC_NAME nameResultDomain;
|
|
}
|
|
NBSTAT, Nbstat;
|
|
|
|
} Data;
|
|
}
|
|
DNS_RPC_RECORD, *PDNS_RPC_RECORD;
|
|
|
|
|
|
#define SIZEOF_DNS_RPC_RECORD_HEADER \
|
|
(4*sizeof(WORD) + 2*sizeof(DWORD) + sizeof(DNS_HANDLE))
|
|
|
|
#if 0
|
|
#define SIZEOF_DNS_RPC_RECORD_FIXED_FIELD2 \
|
|
(sizeof(DNS_RPC_RECORD) - sizeof(struct _DnsRpcRecord.Data))
|
|
|
|
#define SIZEOF_DNS_RPC_RECORD_FIXED_FIELD3 \
|
|
(sizeof(DNS_RPC_RECORD) - sizeof(DNS_RPC_RECORD.Data))
|
|
#endif
|
|
|
|
|
|
//
|
|
// WINS + NBSTAT params
|
|
// - flags
|
|
// - default lookup timeout
|
|
// - default cache timeout
|
|
//
|
|
|
|
#define DNS_WINS_FLAG_SCOPE (0x80000000)
|
|
#define DNS_WINS_FLAG_LOCAL (0x00010000)
|
|
|
|
#define DNS_WINS_DEFAULT_LOOKUP_TIMEOUT (5) // 5 secs
|
|
#define DNS_WINS_DEFAULT_CACHE_TIMEOUT (600) // 10 minutes
|
|
|
|
|
|
//
|
|
// Helpful record macros
|
|
// - no side effects in arguments
|
|
//
|
|
|
|
#define DNS_GET_NEXT_NAME(pname) \
|
|
(PDNS_RPC_NAME) (pname->achName + pname->cchNameLength)
|
|
|
|
#define DNS_IS_NAME_IN_RECORD(pRecord, pname) \
|
|
( (PCHAR)pRecord + pRecord->wRecordLength \
|
|
>= \
|
|
pname->achName + pname->cchNameLength )
|
|
|
|
//
|
|
// Note, for simplicity/efficiency ALL structures are DWORD aligned in
|
|
// buffers on the wire.
|
|
//
|
|
// This macro returns DWORD aligned ptr at given ptr our next DWORD
|
|
// aligned postion. Set ptr immediately after record or name structure
|
|
// and this will return starting position of next structure.
|
|
//
|
|
|
|
#define DNS_NEXT_DWORD_PTR(ptr) ((PBYTE) ((DWORD)((PBYTE)ptr + 3) & ~(DWORD)3))
|
|
|
|
#define DNS_IS_DWORD_ALIGNED(p) ( !((DWORD)(p) & (DWORD)3) )
|
|
|
|
|
|
|
|
|
|
//
|
|
// Record viewing API
|
|
//
|
|
|
|
DNS_STATUS
|
|
DNS_API_FUNCTION
|
|
DnsEnumNodeRecords(
|
|
IN LPCSTR pszServer,
|
|
IN LPCSTR pszNodeName,
|
|
IN WORD wRecordType,
|
|
IN DWORD fNoCacheData,
|
|
IN OUT PDWORD pdwBufferLength,
|
|
OUT BYTE abBuffer[]
|
|
);
|
|
|
|
DNS_STATUS
|
|
DNS_API_FUNCTION
|
|
DnsEnumChildNodesAndRecords(
|
|
IN LPCSTR pszServer,
|
|
IN LPCSTR pszNodeName,
|
|
IN LPCSTR pszStartChild,
|
|
IN WORD wRecordType,
|
|
IN DWORD fNoCacheData,
|
|
IN OUT PDWORD pdwBufferLength,
|
|
OUT BYTE abBuffer[]
|
|
);
|
|
|
|
DNS_STATUS
|
|
DNS_API_FUNCTION
|
|
R_DnsGetZoneWinsInfo(
|
|
IN LPCSTR Server,
|
|
IN DNS_HANDLE hZone,
|
|
OUT PDWORD pfUsingWins,
|
|
IN OUT PDWORD pdwBufferLength,
|
|
OUT BYTE abBuffer[]
|
|
);
|
|
|
|
PCHAR
|
|
DNS_API_FUNCTION
|
|
DnsRecordTypeStringForType(
|
|
IN WORD wType
|
|
);
|
|
|
|
//
|
|
// Record management API
|
|
//
|
|
|
|
DNS_STATUS
|
|
DNS_API_FUNCTION
|
|
DnsUpdateRecord(
|
|
IN LPCSTR pszServer,
|
|
IN DNS_HANDLE hZone,
|
|
IN LPCSTR pszNodeName,
|
|
IN OUT PDNS_HANDLE hRecord,
|
|
IN DWORD dwDataLength,
|
|
IN BYTE abData[]
|
|
);
|
|
|
|
DNS_STATUS
|
|
DNS_API_FUNCTION
|
|
DnsDeleteRecord(
|
|
IN LPCSTR pszServer,
|
|
IN LPCSTR pszNodeName,
|
|
IN DNS_HANDLE hRecord
|
|
);
|
|
|
|
DNS_STATUS
|
|
DNS_API_FUNCTION
|
|
DnsDeleteName(
|
|
IN LPCSTR pszServer,
|
|
IN LPCSTR pszNodeName,
|
|
IN DWORD fDeleteSubtree
|
|
);
|
|
|
|
DNS_STATUS
|
|
DNS_API_FUNCTION
|
|
R_DnsUpdateWinsRecord(
|
|
IN LPCSTR Server,
|
|
IN DNS_HANDLE hZone,
|
|
IN DWORD dwDataLength,
|
|
IN BYTE abData[]
|
|
);
|
|
|
|
|
|
//
|
|
// Debug printing utils
|
|
//
|
|
|
|
VOID
|
|
DNS_API_FUNCTION
|
|
DnsInitializeDebug(
|
|
IN BOOL fFromConsole
|
|
);
|
|
|
|
#if 0
|
|
VOID
|
|
DNS_API_FUNCTION
|
|
DnsPrintf(
|
|
IN CHAR *Format,
|
|
...
|
|
);
|
|
|
|
VOID
|
|
DNS_API_FUNCTION
|
|
DnsEndDebug(
|
|
VOID
|
|
);
|
|
|
|
//
|
|
// Server info printing
|
|
//
|
|
|
|
VOID
|
|
DNS_API_FUNCTION
|
|
DnsPrintServerInfo(
|
|
IN VOID PrintRoutine( CHAR * Format, ... ),
|
|
IN LPSTR pszHeader,
|
|
IN PDNS_SERVER_INFO pServerInfo
|
|
);
|
|
|
|
VOID
|
|
DNS_API_FUNCTION
|
|
DnsPrintStatistics(
|
|
IN VOID PrintRoutine( CHAR * Format, ... ),
|
|
IN LPSTR pszHeader,
|
|
IN PDNS_STATISTICS pStatistics
|
|
);
|
|
|
|
//
|
|
// Zone info printing
|
|
//
|
|
|
|
VOID
|
|
DNS_API_FUNCTION
|
|
DnsPrintZoneHandleList(
|
|
IN VOID PrintRoutine( CHAR * Format, ... ),
|
|
IN LPSTR pszHeader,
|
|
IN DWORD dwZoneCount,
|
|
IN DNS_HANDLE ahZones[]
|
|
);
|
|
|
|
VOID
|
|
DNS_API_FUNCTION
|
|
DnsPrintZoneInfo(
|
|
IN VOID PrintRoutine( CHAR * Format, ... ),
|
|
IN LPSTR pszHeader,
|
|
IN PDNS_ZONE_INFO pZoneInfo
|
|
);
|
|
|
|
VOID
|
|
DNS_API_FUNCTION
|
|
DnsPrintZoneInfoList(
|
|
IN VOID PrintRoutine( CHAR * Format, ... ),
|
|
IN LPSTR pszHeader,
|
|
IN DWORD dwZoneCount,
|
|
IN PDNS_ZONE_INFO apZoneInfo[]
|
|
);
|
|
|
|
//
|
|
// Node and record buffer printing
|
|
//
|
|
|
|
VOID
|
|
DNS_API_FUNCTION
|
|
DnsPrintName(
|
|
IN VOID PrintRoutine( CHAR * Format, ... ),
|
|
IN LPSTR pszHeader,
|
|
IN PDNS_RPC_NAME pName,
|
|
IN LPSTR pszTrailer
|
|
);
|
|
|
|
VOID
|
|
DNS_API_FUNCTION
|
|
DnsPrintNode(
|
|
IN VOID PrintRoutine( CHAR * Format, ... ),
|
|
IN LPSTR pszHeader,
|
|
IN PDNS_RPC_NODE pNode
|
|
);
|
|
|
|
VOID
|
|
DNS_API_FUNCTION
|
|
DnsPrintRecord(
|
|
IN VOID PrintRoutine( CHAR * Format, ... ),
|
|
IN LPSTR pszHeader,
|
|
IN PDNS_RPC_RECORD pRecord
|
|
);
|
|
|
|
VOID
|
|
DNS_API_FUNCTION
|
|
DnsPrintRecordsInBuffer(
|
|
IN VOID PrintRoutine( CHAR * Format, ... ),
|
|
IN LPSTR pszHeader,
|
|
IN DWORD dwBufferLength,
|
|
IN BYTE abBuffer[]
|
|
);
|
|
|
|
//
|
|
// General print utility
|
|
//
|
|
|
|
VOID
|
|
DNS_API_FUNCTION
|
|
DnsPrintIpAddressArray(
|
|
IN VOID PrintRoutine( CHAR * Format, ... ),
|
|
IN LPSTR pszHeader,
|
|
IN LPSTR pszName,
|
|
IN DWORD dwIpAddrCount,
|
|
IN PIP_ADDRESS pIpAddrs
|
|
);
|
|
#endif
|
|
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif // __cplusplus
|
|
|
|
#endif // _DNSAPI_INCLUDED_
|
|
|