From 25f96a4058c731e302e2d45bd670e598a7e591b7 Mon Sep 17 00:00:00 2001 From: "Stefan (metze) Metzmacher" Date: Wed, 28 Oct 2009 15:42:47 -0700 Subject: Add in Metze's new code to ndr encode the user.DOSATTRIB blobs. Next I'll change the create timestamp and dos attribute code to use this. --- librpc/idl/xattr.idl | 53 ++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 49 insertions(+), 4 deletions(-) (limited to 'librpc/idl') diff --git a/librpc/idl/xattr.idl b/librpc/idl/xattr.idl index 4485caa48f..1dd98a9588 100644 --- a/librpc/idl/xattr.idl +++ b/librpc/idl/xattr.idl @@ -11,6 +11,9 @@ import "security.idl"; [ + uuid("12345778-1234-abcd-0001-00000002"), + version(0.0), + helper("../librpc/ndr/ndr_xattr.h"), pointer_default(unique) ] interface xattr @@ -22,6 +25,18 @@ interface xattr using a union we can cope with new version of this structure more easily */ + /* + * the FFFF level is never really used, + * it's used to pass the information from + * the old hex string attrib information + * we have a handwritten parser which converts + * the hex string to the xattr_DosInfoFFFFCompat strucure + */ + + typedef struct { + uint32 attrib; + } xattr_DosInfoFFFFCompat; + typedef struct { uint32 attrib; uint32 ea_size; @@ -51,16 +66,46 @@ interface xattr utf8string name; } xattr_DosInfo2Old; - typedef [switch_type(uint16)] union { - [case(1)] xattr_DosInfo1 info1; - [case(2)] xattr_DosInfo2Old oldinfo2; - } xattr_DosInfo; + typedef [bitmap32bit] bitmap { + XATTR_DOSINFO_ATTRIB = 0x00000001, + XATTR_DOSINFO_EA_SIZE = 0x00000002, + XATTR_DOSINFO_SIZE = 0x00000004, + XATTR_DOSINFO_ALLOC_SIZE = 0x00000008, + XATTR_DOSINFO_CREATE_TIME = 0x00000010, + XATTR_DOSINFO_CHANGE_TIME = 0x00000020 + } xattr_DosInfoValidFlags; + + typedef struct { + xattr_DosInfoValidFlags valid_flags; + uint32 attrib; + uint32 ea_size; + udlong size; + udlong alloc_size; + NTTIME create_time; + NTTIME change_time; + } xattr_DosInfo3; + + typedef [public,switch_type(uint16)] union { + [case(0xFFFF)] xattr_DosInfoFFFFCompat compatinfoFFFF; + [case(1)] xattr_DosInfo1 info1; + [case(2)] xattr_DosInfo2Old oldinfo2; + [case(3)] xattr_DosInfo3 info3; + } xattr_DosInfo; typedef [public] struct { uint16 version; [switch_is(version)] xattr_DosInfo info; } xattr_DosAttrib; + typedef [public,nopush,nopull,noprint] struct { + astring attrib_hex; + uint16 version; + [switch_is(version)] xattr_DosInfo info; + } xattr_DOSATTRIB; + + void xattr_parse_DOSATTRIB( + [in] xattr_DOSATTRIB x + ); /* we store DOS style extended attributes in a DosEAs xattr */ const char *XATTR_DOSEAS_NAME = "user.DosEAs"; -- cgit