| 1 | #include "idl_types.h"
|
|---|
| 2 |
|
|---|
| 3 | /*
|
|---|
| 4 | IDL structures for DNSP structures
|
|---|
| 5 |
|
|---|
| 6 | See [MS-DNSP].pdf in MCPP for details
|
|---|
| 7 | */
|
|---|
| 8 |
|
|---|
| 9 | import "misc.idl";
|
|---|
| 10 |
|
|---|
| 11 | /*
|
|---|
| 12 | note that this is not a real RPC interface. We are just using PIDL
|
|---|
| 13 | to save us a lot of tedious hand parsing of the dnsRecord
|
|---|
| 14 | attribute. The uuid is randomly generated.
|
|---|
| 15 | */
|
|---|
| 16 | [
|
|---|
| 17 | uuid("bdd66e9e-d45f-4202-85c0-6132edc4f30a"),
|
|---|
| 18 | version(0.0),
|
|---|
| 19 | pointer_default(unique),
|
|---|
| 20 | helper("../librpc/ndr/ndr_dnsp.h"),
|
|---|
| 21 | helpstring("DNSP interfaces")
|
|---|
| 22 | ]
|
|---|
| 23 |
|
|---|
| 24 | interface dnsp
|
|---|
| 25 | {
|
|---|
| 26 | typedef [enum16bit] enum {
|
|---|
| 27 | DNS_TYPE_TOMBSTONE = 0x0,
|
|---|
| 28 | DNS_TYPE_A = 0x1,
|
|---|
| 29 | DNS_TYPE_NS = 0x2,
|
|---|
| 30 | DNS_TYPE_MD = 0x3,
|
|---|
| 31 | DNS_TYPE_MF = 0x4,
|
|---|
| 32 | DNS_TYPE_CNAME = 0x5,
|
|---|
| 33 | DNS_TYPE_SOA = 0x6,
|
|---|
| 34 | DNS_TYPE_MB = 0x7,
|
|---|
| 35 | DNS_TYPE_MG = 0x8,
|
|---|
| 36 | DNS_TYPE_MR = 0x9,
|
|---|
| 37 | DNS_TYPE_NULL = 0xA,
|
|---|
| 38 | DNS_TYPE_WKS = 0xB,
|
|---|
| 39 | DNS_TYPE_PTR = 0xC,
|
|---|
| 40 | DNS_TYPE_HINFO = 0xD,
|
|---|
| 41 | DNS_TYPE_MINFO = 0xE,
|
|---|
| 42 | DNS_TYPE_MX = 0xF,
|
|---|
| 43 | DNS_TYPE_TXT = 0x10,
|
|---|
| 44 | DNS_TYPE_RP = 0x11,
|
|---|
| 45 | DNS_TYPE_AFSDB = 0x12,
|
|---|
| 46 | DNS_TYPE_X25 = 0x13,
|
|---|
| 47 | DNS_TYPE_ISDN = 0x14,
|
|---|
| 48 | DNS_TYPE_RT = 0x15,
|
|---|
| 49 | DNS_TYPE_SIG = 0x18,
|
|---|
| 50 | DNS_TYPE_KEY = 0x19,
|
|---|
| 51 | DNS_TYPE_AAAA = 0x1C,
|
|---|
| 52 | DNS_TYPE_LOC = 0x1D,
|
|---|
| 53 | DNS_TYPE_NXT = 0x1E,
|
|---|
| 54 | DNS_TYPE_SRV = 0x21,
|
|---|
| 55 | DNS_TYPE_ATMA = 0x22,
|
|---|
| 56 | DNS_TYPE_NAPTR = 0x23,
|
|---|
| 57 | DNS_TYPE_DNAME = 0x27,
|
|---|
| 58 | DNS_TYPE_DS = 0x2B,
|
|---|
| 59 | DNS_TYPE_RRSIG = 0x2E,
|
|---|
| 60 | DNS_TYPE_NSEC = 0x2F,
|
|---|
| 61 | DNS_TYPE_DNSKEY= 0x30,
|
|---|
| 62 | DNS_TYPE_DHCID = 0x31,
|
|---|
| 63 | DNS_TYPE_ALL = 0xFF,
|
|---|
| 64 | DNS_TYPE_WINS = 0xFF01,
|
|---|
| 65 | DNS_TYPE_WINSR = 0xFF02
|
|---|
| 66 | } dns_record_type;
|
|---|
| 67 |
|
|---|
| 68 | typedef [enum8bit] enum {
|
|---|
| 69 | DNS_RANK_NONE = 0x00,
|
|---|
| 70 | DNS_RANK_CACHE_BIT = 0x01,
|
|---|
| 71 | DNS_RANK_ROOT_HINT = 0x08,
|
|---|
| 72 | DNS_RANK_OUTSIDE_GLUE = 0x20,
|
|---|
| 73 | DNS_RANK_CACHE_NA_ADDITIONAL = 0x31,
|
|---|
| 74 | DNS_RANK_CACHE_NA_AUTHORITY = 0x41,
|
|---|
| 75 | DNS_RANK_CACHE_A_ADDITIONAL = 0x51,
|
|---|
| 76 | DNS_RANK_CACHE_NA_ANSWER = 0x61,
|
|---|
| 77 | DNS_RANK_CACHE_A_AUTHORITY = 0x71,
|
|---|
| 78 | DNS_RANK_GLUE = 0x80,
|
|---|
| 79 | DNS_RANK_NS_GLUE = 0x82,
|
|---|
| 80 | DNS_RANK_CACHE_A_ANSWER = 0xc1,
|
|---|
| 81 | DNS_RANK_ZONE = 0xf0
|
|---|
| 82 | } dns_record_rank;
|
|---|
| 83 |
|
|---|
| 84 | typedef [public] struct {
|
|---|
| 85 | uint32 serial;
|
|---|
| 86 | uint32 refresh;
|
|---|
| 87 | uint32 retry;
|
|---|
| 88 | uint32 expire;
|
|---|
| 89 | uint32 minimum;
|
|---|
| 90 | dnsp_name mname;
|
|---|
| 91 | dnsp_name rname;
|
|---|
| 92 | } dnsp_soa;
|
|---|
| 93 |
|
|---|
| 94 | typedef [public] struct {
|
|---|
| 95 | uint16 wPriority;
|
|---|
| 96 | dnsp_name nameTarget;
|
|---|
| 97 | } dnsp_mx;
|
|---|
| 98 |
|
|---|
| 99 | typedef [public] struct {
|
|---|
| 100 | dnsp_string cpu;
|
|---|
| 101 | dnsp_string os;
|
|---|
| 102 | } dnsp_hinfo;
|
|---|
| 103 |
|
|---|
| 104 | typedef [public] struct {
|
|---|
| 105 | uint16 wPriority;
|
|---|
| 106 | uint16 wWeight;
|
|---|
| 107 | uint16 wPort;
|
|---|
| 108 | dnsp_name nameTarget;
|
|---|
| 109 | } dnsp_srv;
|
|---|
| 110 |
|
|---|
| 111 | typedef [nodiscriminant,gensize] union {
|
|---|
| 112 | [case(DNS_TYPE_TOMBSTONE)] NTTIME timestamp;
|
|---|
| 113 | [case(DNS_TYPE_A)] [flag(NDR_BIG_ENDIAN)] ipv4address ipv4;
|
|---|
| 114 | [case(DNS_TYPE_NS)] dnsp_name ns;
|
|---|
| 115 | [case(DNS_TYPE_CNAME)] dnsp_name cname;
|
|---|
| 116 | [case(DNS_TYPE_SOA)] [flag(NDR_BIG_ENDIAN)] dnsp_soa soa;
|
|---|
| 117 | [case(DNS_TYPE_MX)] [flag(NDR_BIG_ENDIAN)] dnsp_mx mx;
|
|---|
| 118 | [case(DNS_TYPE_TXT)] dnsp_string txt;
|
|---|
| 119 | [case(DNS_TYPE_PTR)] dnsp_name ptr;
|
|---|
| 120 | [case(DNS_TYPE_HINFO)] dnsp_hinfo hinfo;
|
|---|
| 121 | [case(DNS_TYPE_AAAA)] ipv6address ipv6;
|
|---|
| 122 | [case(DNS_TYPE_SRV)] [flag(NDR_BIG_ENDIAN)] dnsp_srv srv;
|
|---|
| 123 | [default] [flag(NDR_REMAINING)] DATA_BLOB data;
|
|---|
| 124 | } dnsRecordData;
|
|---|
| 125 |
|
|---|
| 126 | /* this is the format for the dnsRecord attribute in the DNS
|
|---|
| 127 | partitions in AD */
|
|---|
| 128 | typedef [public] struct {
|
|---|
| 129 | [value(ndr_size_dnsRecordData(&data,wType,ndr->flags))] uint16 wDataLength;
|
|---|
| 130 | dns_record_type wType;
|
|---|
| 131 | [value(5)] uint8 version;
|
|---|
| 132 | dns_record_rank rank;
|
|---|
| 133 | uint16 flags;
|
|---|
| 134 | uint32 dwSerial;
|
|---|
| 135 | [flag(NDR_BIG_ENDIAN)] uint32 dwTtlSeconds;
|
|---|
| 136 | uint32 dwReserved;
|
|---|
| 137 | uint32 dwTimeStamp;
|
|---|
| 138 | [switch_is(wType)] dnsRecordData data;
|
|---|
| 139 | } dnsp_DnssrvRpcRecord;
|
|---|
| 140 |
|
|---|
| 141 |
|
|---|
| 142 | /*
|
|---|
| 143 | this is a convenience hook for ndrdump
|
|---|
| 144 | */
|
|---|
| 145 | void decode_DnssrvRpcRecord(
|
|---|
| 146 | [in] dnsp_DnssrvRpcRecord blob
|
|---|
| 147 | );
|
|---|
| 148 | }
|
|---|