diff options
Diffstat (limited to 'librpc/idl')
-rw-r--r-- | librpc/idl/dfsblobs.idl | 116 |
1 files changed, 116 insertions, 0 deletions
diff --git a/librpc/idl/dfsblobs.idl b/librpc/idl/dfsblobs.idl new file mode 100644 index 0000000000..ffd3e6e3ca --- /dev/null +++ b/librpc/idl/dfsblobs.idl @@ -0,0 +1,116 @@ +#include "idl_types.h" + +import "misc.idl"; +/* +dfs blobs interface definition +*/ + + +[ + pointer_default(unique), + helpstring("dfs referral blobs"), + uuid("12345778-1234-abcd-0001-00000003") +] + + +interface dfsblobs +{ + typedef [bitmap32bit] bitmap { + DFS_HEADER_FLAG_REFERAL_SVR = 0x00000001, + DFS_HEADER_FLAG_STORAGE_SVR = 0x00000002, + DFS_HEADER_FLAG_TARGET_BCK = 0x00000004 + } DFS_HEADER_FLAG; + + typedef [enum16bit] enum { + DFS_SERVER_NON_ROOT = 0x0000, + DFS_SERVER_ROOT = 0x0001 + } DFS_SERVER_TYPE; + + typedef [enum16bit] enum { + DFS_FLAG_REFERRAL_DOMAIN_RESP = 0x0002, + DFS_FLAG_REFERRAL_FIRST_TARGET_SET = 0x0004 + } DFS_FLAGS_REFERRAL; + + typedef struct { + uint16 size; + uint16 server_type; + uint16 entry_flags; + nstring *share_name; + } dfs_referral_v1; + + typedef struct { + uint16 size; + DFS_SERVER_TYPE server_type; + DFS_FLAGS_REFERRAL entry_flags; + uint32 proximity; + uint32 ttl; + [relative_short] nstring *DFS_path; + [relative_short] nstring *DFS_alt_path; + [relative_short] nstring *netw_address; + } dfs_referral_v2; + + typedef struct { + [relative_short] nstring *DFS_path; + [relative_short] nstring *DFS_alt_path; + [relative_short] nstring *netw_address; + /* As stated in MS DFSC 2.2.4.3.1 this array was guid but now MUST be 16 null bytes*/ + uint8 service_site_guid[16]; + } dfs_normal_referral; + + typedef struct { + [relative_short] nstring *special_name; + uint16 nb_expanded_names; + [relative_short] [flag(STR_NOTERM|NDR_REMAINING)] string_array *expanded_names; + /*[relative_short] nstring_array expanded_names2;*/ + /* As stated in MS DFSC 2.2.4.3.1 this array was guid but now MUST be 16 null bytes*/ + uint8 service_site_guid[16]; + } dfs_domain_referral; + + typedef [nodiscriminant] union { + [case(0)] dfs_normal_referral r1; + [case(2)] dfs_domain_referral r2; + [default]; + } dfs_referral; + + typedef [flag(NDR_NOALIGN)] struct { + uint16 size; + DFS_SERVER_TYPE server_type; + DFS_FLAGS_REFERRAL entry_flags; + uint32 ttl; + [switch_is(entry_flags & DFS_FLAG_REFERRAL_DOMAIN_RESP)] dfs_referral referrals; + } dfs_referral_v3; + + typedef struct { + uint16 size; + DFS_SERVER_TYPE server_type; + DFS_FLAGS_REFERRAL entry_flags; + uint32 ttl; + dfs_normal_referral referrals; + } dfs_referral_v4; + + typedef [nodiscriminant] union { + [case(1)] dfs_referral_v1 v1; + [case(2)] dfs_referral_v2 v2; + [case(3)] dfs_referral_v3 v3; + [case(4)] dfs_referral_v4 v4; + [default]; + } dfs_referral_version; + + typedef [flag(NDR_NOALIGN)] [relative_base] struct { + uint16 version; + [switch_is(version)] dfs_referral_version referral; + } dfs_referral_type; + + typedef [public] struct { + uint16 path_consumed; + uint16 nb_referrals; + uint32 header_flags; + dfs_referral_type referral_entries[nb_referrals]; + } dfs_referral_resp; + + [public] void dfs_GetDFSReferral( + [in] uint16 max_referral_level, + [in] nstring servername, + [out,ref] dfs_referral_resp *resp + ); +} |