// Copyright (c) 1997-1999 Microsoft Corporation // // DNS API wrappers // // 12-16-97 sburns #ifndef DNS_HPP_INCLUDED #define DNS_HPP_INCLUDED // A collection of DNS related names. namespace Dns { // the number of bytes in a full DNS name to reserve for stuff // netlogon pre-/appends to DNS names when registering them const size_t SRV_RECORD_RESERVE = 100; // the max lengths, in bytes, of strings when represented in the UTF-8 // character set. These are the limits we expose to the user const size_t MAX_NAME_LENGTH = DNS_MAX_NAME_LENGTH - SRV_RECORD_RESERVE; const size_t MAX_LABEL_LENGTH = DNS_MAX_LABEL_LENGTH; // Compares DNS names with DnsNameCompareEx (see private\inc\dnsapi.h), // returning the result. DNS_NAME_COMPARE_STATUS CompareNames(const String& dnsNameLeft, const String& dnsNameRight); // Returns the name of the parent DNS domain. E.g. if "foo.bar.com" is // passed, then "bar.com" is the result. If "com" is passed, then "." // (the root zone) is the result. // // domainName - the name of the domain String GetParentDomainName(const String& domainName); // Returns corresponding NetBIOS name, or empty string if mapping failed. // Not for domain names -- just computer names! // // hostname - the name to be mapped to a NetBIOS name. This name must be a // valid DNS name. // // err - ptr to a variable that will accept the win error code returned if // the conversion fails. If the conversion fails, the return value is // the empty string. String HostnameToNetbiosName(const String& hostname, HRESULT* err=0); // returns true if the DNS client is configured, false if not. bool IsClientConfigured(); // returns true if the Microsoft DNS server is installed on this computer, // false if not. bool IsServiceInstalled(); // returns true if the Microsoft DNS server is currently running on this // computer, false if not. bool IsServiceRunning(); enum ValidateResult { VALID, INVALID, NON_RFC, TOO_LONG, NUMERIC, BAD_CHARS }; // Validates a single DNS label for proper length (in the UTF-8 // character set) and syntax. // // candidateDNSLabel - the label to be validated ValidateResult ValidateDnsLabelSyntax(const String& candidateDNSLabel); // Validates the format, not the existence, of a DNS name. Checks for // proper length in the UTF-8 character set, and proper syntax. // // candidateDNSName - in, the DNS name to verify. // // maxUnicodeCharacters - in, maximum number of uncode characters to // allow in the name. If the name contains more characters than this, // TOO_LONG is returned. // // maxUTF8Bytes - in, maximum number of bytes allowed to represent the name // in the UTF-8 character set. Since a unicode character requires at // least one byte in UTF-8, this value must be >= maxUnicodeCharacters. ValidateResult ValidateDnsNameSyntax( const String& candidateDNSName, size_t maxUnicodeCharacters = Dns::MAX_NAME_LENGTH, size_t maxUTF8Bytes = Dns::MAX_NAME_LENGTH); } DNS_STATUS MyDnsValidateName(const String& name, DNS_NAME_FORMAT format); String MyDnsStatusString(DNS_STATUS status); // caller must free the result with MyDnsRecordListFree DNS_STATUS MyDnsQuery( const String& name, WORD type, DWORD options, DNS_RECORD*& result); void MyDnsRecordListFree(DNS_RECORD* rl); #endif // DNS_HPP_INCLUDED