diff options
Diffstat (limited to 'librpc/idl/dnsp.idl')
-rw-r--r-- | librpc/idl/dnsp.idl | 293 |
1 files changed, 293 insertions, 0 deletions
diff --git a/librpc/idl/dnsp.idl b/librpc/idl/dnsp.idl new file mode 100644 index 0000000..0cb18bf --- /dev/null +++ b/librpc/idl/dnsp.idl @@ -0,0 +1,293 @@ +#include "idl_types.h" + +/* + IDL structures for DNSP structures + + See [MS-DNSP].pdf in MCPP for details +*/ + +import "misc.idl"; + +/* + note that this is not a real RPC interface. We are just using PIDL + to save us a lot of tedious hand parsing of the dnsRecord + attribute. The uuid is randomly generated. + */ +[ + uuid("bdd66e9e-d45f-4202-85c0-6132edc4f30a"), + version(0.0), + pointer_default(unique), + helper("../librpc/ndr/ndr_dnsp.h"), + helpstring("DNSP interfaces") +] + +interface dnsp +{ + typedef [enum16bit,public] enum { + DNS_TYPE_TOMBSTONE = 0x0, + DNS_TYPE_A = 0x1, + DNS_TYPE_NS = 0x2, + DNS_TYPE_MD = 0x3, + DNS_TYPE_MF = 0x4, + DNS_TYPE_CNAME = 0x5, + DNS_TYPE_SOA = 0x6, + DNS_TYPE_MB = 0x7, + DNS_TYPE_MG = 0x8, + DNS_TYPE_MR = 0x9, + DNS_TYPE_NULL = 0xA, + DNS_TYPE_WKS = 0xB, + DNS_TYPE_PTR = 0xC, + DNS_TYPE_HINFO = 0xD, + DNS_TYPE_MINFO = 0xE, + DNS_TYPE_MX = 0xF, + DNS_TYPE_TXT = 0x10, + DNS_TYPE_RP = 0x11, + DNS_TYPE_AFSDB = 0x12, + DNS_TYPE_X25 = 0x13, + DNS_TYPE_ISDN = 0x14, + DNS_TYPE_RT = 0x15, + DNS_TYPE_SIG = 0x18, + DNS_TYPE_KEY = 0x19, + DNS_TYPE_AAAA = 0x1C, + DNS_TYPE_LOC = 0x1D, + DNS_TYPE_NXT = 0x1E, + DNS_TYPE_SRV = 0x21, + DNS_TYPE_ATMA = 0x22, + DNS_TYPE_NAPTR = 0x23, + DNS_TYPE_CERT = 0x25, + DNS_TYPE_DNAME = 0x27, + DNS_TYPE_DS = 0x2B, + DNS_TYPE_SSHFP = 0x2C, + DNS_TYPE_IPSECKEY = 0x2D, + DNS_TYPE_RRSIG = 0x2E, + DNS_TYPE_NSEC = 0x2F, + DNS_TYPE_DNSKEY= 0x30, + DNS_TYPE_DHCID = 0x31, + DNS_TYPE_NSEC3 = 0x32, + DNS_TYPE_NSEC3PARAM = 0x33, + DNS_TYPE_TLSA = 0x34, + DNS_TYPE_CDS = 0x3B, + DNS_TYPE_CDNSKEY = 0x3C, + DNS_TYPE_SVCB = 0x40, + DNS_TYPE_HTTPS = 0x41, + DNS_TYPE_ALL = 0xFF, + DNS_TYPE_URI = 0x100, + DNS_TYPE_CAA = 0x101, + DNS_TYPE_WINS = 0xFF01, + DNS_TYPE_WINSR = 0xFF02 + } dns_record_type; + + typedef [bitmap32bit] bitmap { + DNS_RPC_FLAG_SUPPRESS_NOTIFY = 0x00010000, + DNS_RPC_FLAG_AGING_ON = 0x00020000, + DNS_RPC_FLAG_OPEN_ACL = 0x00040000, + DNS_RPC_FLAG_RECORD_WIRE_FORMAT = 0x00100000, + DNS_RPC_FLAG_SUPPRESS_RECORD_UPDATE_PTR = 0x00200000, + DNS_RPC_FLAG_NODE_COMPLETE = 0x00800000, + DNS_RPC_FLAG_NODE_STICKY = 0x01000000, + DNS_RPC_FLAG_RECORD_CREATE_PTR = 0x02000000, + DNS_RPC_FLAG_RECORD_TTL_CHANGE = 0x04000000, + DNS_RPC_FLAG_RECORD_DEFAULT_TTL = 0x08000000, + DNS_RPC_FLAG_ZONE_DELEGATION = 0x10000000, + DNS_RPC_FLAG_AUTH_ZONE_ROOT = 0x20000000, + DNS_RPC_FLAG_ZONE_ROOT = 0x40000000, + DNS_RPC_FLAG_CACHE_DATA = 0x80000000 + } + dns_rpc_node_flags; + + + typedef [enum8bit] enum { + DNS_RANK_NONE = 0x00, + DNS_RANK_CACHE_BIT = 0x01, + DNS_RANK_ROOT_HINT = 0x08, + DNS_RANK_OUTSIDE_GLUE = 0x20, + DNS_RANK_CACHE_NA_ADDITIONAL = 0x31, + DNS_RANK_CACHE_NA_AUTHORITY = 0x41, + DNS_RANK_CACHE_A_ADDITIONAL = 0x51, + DNS_RANK_CACHE_NA_ANSWER = 0x61, + DNS_RANK_CACHE_A_AUTHORITY = 0x71, + DNS_RANK_GLUE = 0x80, + DNS_RANK_NS_GLUE = 0x82, + DNS_RANK_CACHE_A_ANSWER = 0xc1, + DNS_RANK_ZONE = 0xf0 + } dns_record_rank; + + typedef [v1_enum] enum { + DNS_ZONE_TYPE_CACHE = 0x00, + DNS_ZONE_TYPE_PRIMARY = 0x01, + DNS_ZONE_TYPE_SECONDARY = 0x02, + DNS_ZONE_TYPE_STUB = 0x03, + DNS_ZONE_TYPE_FORWARDER = 0x04, + DNS_ZONE_TYPE_SECONDARY_CACHE = 0x05 + } dns_zone_type; + + typedef [public,enum8bit] enum { + DNS_ZONE_UPDATE_OFF = 0x00, + DNS_ZONE_UPDATE_UNSECURE = 0x01, + DNS_ZONE_UPDATE_SECURE = 0x02 + } dns_zone_update; + + typedef [v1_enum] enum { + DSPROPERTY_ZONE_EMPTY = 0x00, + DSPROPERTY_ZONE_TYPE = 0x01, + DSPROPERTY_ZONE_ALLOW_UPDATE = 0x02, + DSPROPERTY_ZONE_SECURE_TIME = 0x08, + DSPROPERTY_ZONE_NOREFRESH_INTERVAL = 0x10, + DSPROPERTY_ZONE_SCAVENGING_SERVERS = 0x11, + DSPROPERTY_ZONE_AGING_ENABLED_TIME = 0x12, + DSPROPERTY_ZONE_REFRESH_INTERVAL = 0x20, + DSPROPERTY_ZONE_AGING_STATE = 0x40, + DSPROPERTY_ZONE_DELETED_FROM_HOSTNAME = 0x80, + DSPROPERTY_ZONE_MASTER_SERVERS = 0x81, + DSPROPERTY_ZONE_AUTO_NS_SERVERS = 0x82, + DSPROPERTY_ZONE_DCPROMO_CONVERT = 0x83, + DSPROPERTY_ZONE_SCAVENGING_SERVERS_DA = 0x90, + DSPROPERTY_ZONE_MASTER_SERVERS_DA = 0x91, + DSPROPERTY_ZONE_NS_SERVERS_DA = 0x92, + DSPROPERTY_ZONE_NODE_DBFLAGS = 0x100 + + } dns_property_id; + + typedef [enum8bit] enum { + DCPROMO_CONVERT_NONE = 0x00, + DCPROMO_CONVERT_DOMAIN = 0x01, + DCPROMO_CONVERT_FOREST = 0x02 + } dns_dcpromo_flag; + + typedef [public] struct { + uint32 serial; + uint32 refresh; + uint32 retry; + uint32 expire; + uint32 minimum; + dnsp_name mname; + dnsp_name rname; + } dnsp_soa; + + typedef [public] struct { + uint16 wPriority; + dnsp_name nameTarget; + } dnsp_mx; + + typedef [public] struct { + dnsp_string cpu; + dnsp_string os; + } dnsp_hinfo; + + typedef [public] struct { + uint16 wPriority; + uint16 wWeight; + uint16 wPort; + dnsp_name nameTarget; + } dnsp_srv; + + typedef struct { + uint32 addrCount; + uint32 addrArray[addrCount]; + } dnsp_ip4_array; + + typedef struct { + uint16 family; + [flag(NDR_BIG_ENDIAN)] uint16 port; + [flag(NDR_BIG_ENDIAN)] ipv4address ipv4; + ipv6address ipv6; + uint8 pad[8]; + uint32 unused[8]; + } dnsp_dns_addr; + + typedef [public] struct { + uint32 MaxCount; + uint32 AddrCount; + uint32 Tag; + uint16 Family; + uint16 Reserved0; + uint32 Flags; + uint32 MatchFlag; + uint32 Reserved1; + uint32 Reserved2; + dnsp_dns_addr AddrArray[AddrCount]; + } dnsp_dns_addr_array; + + typedef [public,nopull,nopush,noprint,gensize] struct { + uint8 count; + dnsp_string str[count]; + } dnsp_string_list; + + typedef [nodiscriminant,gensize] union { + [case(DNS_TYPE_TOMBSTONE)] NTTIME EntombedTime; + [case(DNS_TYPE_A)] [flag(NDR_BIG_ENDIAN)] ipv4address ipv4; + [case(DNS_TYPE_NS)] dnsp_name ns; + [case(DNS_TYPE_CNAME)] dnsp_name cname; + [case(DNS_TYPE_SOA)] [flag(NDR_BIG_ENDIAN)] dnsp_soa soa; + [case(DNS_TYPE_MX)] [flag(NDR_BIG_ENDIAN)] dnsp_mx mx; + [case(DNS_TYPE_TXT)] dnsp_string_list txt; + [case(DNS_TYPE_PTR)] dnsp_name ptr; + [case(DNS_TYPE_HINFO)] dnsp_hinfo hinfo; + [case(DNS_TYPE_AAAA)] ipv6address ipv6; + [case(DNS_TYPE_SRV)] [flag(NDR_BIG_ENDIAN)] dnsp_srv srv; + [default] [flag(NDR_REMAINING)] DATA_BLOB data; + } dnsRecordData; + + /* this is the format for the dnsRecord attribute in the DNS + partitions in AD */ + typedef [public] struct { + [value(ndr_size_dnsRecordData(&data,wType,ndr->flags))] uint16 wDataLength; + dns_record_type wType; + [value(5)] uint8 version; + dns_record_rank rank; + uint16 flags; + uint32 dwSerial; + [flag(NDR_BIG_ENDIAN)] uint32 dwTtlSeconds; + uint32 dwReserved; + uint32 dwTimeStamp; + [switch_is(wType)] dnsRecordData data; + } dnsp_DnssrvRpcRecord; + + typedef [nodiscriminant,gensize] union { + [case(DSPROPERTY_ZONE_EMPTY)] ; + [case(DSPROPERTY_ZONE_TYPE)] dns_zone_type zone_type; + [case(DSPROPERTY_ZONE_ALLOW_UPDATE)] dns_zone_update allow_update_flag; + [case(DSPROPERTY_ZONE_SECURE_TIME)] NTTIME zone_secure_time; + [case(DSPROPERTY_ZONE_NOREFRESH_INTERVAL)] uint32 norefresh_hours; + [case(DSPROPERTY_ZONE_REFRESH_INTERVAL)] uint32 refresh_hours; + [case(DSPROPERTY_ZONE_AGING_STATE)] uint32 aging_enabled; + [case(DSPROPERTY_ZONE_SCAVENGING_SERVERS)] dnsp_ip4_array servers; + [case(DSPROPERTY_ZONE_AGING_ENABLED_TIME)] uint32 next_scavenging_cycle_hours; + [case(DSPROPERTY_ZONE_DELETED_FROM_HOSTNAME)] nstring deleted_by_hostname; + [case(DSPROPERTY_ZONE_MASTER_SERVERS)] dnsp_ip4_array master_servers; + [case(DSPROPERTY_ZONE_AUTO_NS_SERVERS)] dnsp_ip4_array ns_servers; + [case(DSPROPERTY_ZONE_DCPROMO_CONVERT)] dns_dcpromo_flag dcpromo_flag; + [case(DSPROPERTY_ZONE_SCAVENGING_SERVERS_DA)] dnsp_dns_addr_array s_ns_servers; + [case(DSPROPERTY_ZONE_MASTER_SERVERS_DA)] dnsp_dns_addr_array z_master_servers; + [case(DSPROPERTY_ZONE_NS_SERVERS_DA)] dnsp_dns_addr_array d_ns_servers; + [case(DSPROPERTY_ZONE_NODE_DBFLAGS)] dns_rpc_node_flags flags; + } dnsPropertyData; + + /* this is the format for the dnsProperty attribute in the DNS + partitions in AD */ + typedef [flag(NDR_NOALIGN),public] struct { + [value(ndr_size_dnsPropertyData(&data,id,ndr->flags))] uint32 wDataLength; + uint32 namelength; + [value(0)] uint32 flag; + [value(1)] uint32 version; + dns_property_id id; + [switch_is(id)] dnsPropertyData data; + uint32 name; + } dnsp_DnsProperty; + + /* + * this is the format for the dnsProperty attribute in the DNS + * partitions in AD when the wDataLength is 0. This is an + * invalid format seen from some Windows servers in the same + * domain. + */ + typedef [flag(NDR_NOALIGN),public] struct { + [range(0, 0), value(0)] uint32 wDataLength; + uint32 namelength; + [value(0)] uint32 flag; + [value(1)] uint32 version; + dns_property_id id; + [switch_is(DSPROPERTY_ZONE_EMPTY)] dnsPropertyData data; + uint32 name; + } dnsp_DnsProperty_short; +} |