diff options
Diffstat (limited to 'librpc/idl/dfsblobs.idl')
-rw-r--r-- | librpc/idl/dfsblobs.idl | 115 |
1 files changed, 115 insertions, 0 deletions
diff --git a/librpc/idl/dfsblobs.idl b/librpc/idl/dfsblobs.idl new file mode 100644 index 0000000..7b8795d --- /dev/null +++ b/librpc/idl/dfsblobs.idl @@ -0,0 +1,115 @@ +#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; + } dfs_normal_referral; + + typedef struct { + [relative_short] nstring *special_name; + uint16 nb_expanded_names; + [relative_short,subcontext(0),flag(NDR_REMAINING|STR_NULLTERM)] string_array *expanded_names; + } dfs_domain_referral; + + typedef [nodiscriminant] union { + [case(0)] dfs_normal_referral r1; + [case(2)] dfs_domain_referral r2; + [default]; + } dfs_referral; + + typedef [nodiscriminant] union { + [case(16)] uint8 value[16]; + [default]; + } dfs_padding; + + 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; + /* this is either 0 or 16 bytes */ + [switch_is(size - 18)] dfs_padding service_site_guid; + } dfs_referral_v3; + + 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_v3 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; + DFS_HEADER_FLAG header_flags; + dfs_referral_type referral_entries[nb_referrals]; + } dfs_referral_resp; + + typedef [public] struct { + uint16 max_referral_level; + nstring servername; + } dfs_GetDFSReferral_in; + + [public] void dfs_GetDFSReferral( + [in] dfs_GetDFSReferral_in req, + [out,ref] dfs_referral_resp *resp + ); + +} |