idl: introduce new file: dfsblobs.idl
authorMatthieu Patou <mat@matws.net>
Sun, 13 Dec 2009 02:03:03 +0000 (05:03 +0300)
committerStefan Metzmacher <metze@samba.org>
Mon, 14 Dec 2009 09:58:32 +0000 (10:58 +0100)
Signed-off-by: Stefan Metzmacher <metze@samba.org>
librpc/idl/dfsblobs.idl [new file with mode: 0644]

diff --git a/librpc/idl/dfsblobs.idl b/librpc/idl/dfsblobs.idl
new file mode 100644 (file)
index 0000000..ffd3e6e
--- /dev/null
@@ -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
+               );
+}