Impossible to load ndr_* as shared objects :-(

Volker Lendecke Volker.Lendecke at SerNet.DE
Sun Nov 8 15:30:33 MST 2009


On Sun, Nov 08, 2009 at 07:47:02PM +0100, Volker Lendecke wrote:
> After some weekends of work disentangling the ndr tables
> from the rest of the code I had to figure out that it is
> impossible to load them as shared objects: lsa_String and
> other datatypes are everywhere.

Attached find a patch that introduces "shared.idl" with all
shared stuff. Not good for a late night checkin, but that is
needed for making the large ndr_*.o shared objects.

I'll check it in together with the required build fixes once
make test has finished. But that's probably not going to be
before tomorrow.

Volker
-------------- next part --------------
 librpc/idl/browser.idl         |    2 +-
 librpc/idl/drsblobs.idl        |    2 +-
 librpc/idl/drsuapi.idl         |    2 +-
 librpc/idl/eventlog.idl        |    2 +-
 librpc/idl/initshutdown.idl    |    2 +-
 librpc/idl/krb5pac.idl         |    2 +-
 librpc/idl/lsa.idl             |   90 +------------
 librpc/idl/misc.idl            |    1 -
 librpc/idl/named_pipe_auth.idl |    2 +-
 librpc/idl/nbt.idl             |    2 +-
 librpc/idl/netlogon.idl        |   97 +-------------
 librpc/idl/samr.idl            |   63 +--------
 librpc/idl/schannel.idl        |    2 +-
 librpc/idl/shared.idl          |  307 ++++++++++++++++++++++++++++++++++++++++
 librpc/idl/spoolss.idl         |    2 +-
 librpc/idl/srvsvc.idl          |   24 +---
 librpc/idl/svcctl.idl          |   31 ----
 librpc/idl/winreg.idl          |    2 +-
 librpc/idl/wkssvc.idl          |    2 +-
 19 files changed, 323 insertions(+), 314 deletions(-)

diff --git a/librpc/idl/browser.idl b/librpc/idl/browser.idl
index 94d4ce6..8284fae 100644
--- a/librpc/idl/browser.idl
+++ b/librpc/idl/browser.idl
@@ -1,4 +1,4 @@
-import "srvsvc.idl";
+import "shared.idl";
 
 [
   uuid("6bffd098-a112-3610-9833-012892020162"),
diff --git a/librpc/idl/drsblobs.idl b/librpc/idl/drsblobs.idl
index 97f3b2d..5d093d8 100644
--- a/librpc/idl/drsblobs.idl
+++ b/librpc/idl/drsblobs.idl
@@ -1,6 +1,6 @@
 #include "idl_types.h"
 
-import "drsuapi.idl", "misc.idl", "samr.idl", "lsa.idl";
+import "drsuapi.idl", "misc.idl", "shared.idl";
 
 [
   uuid("12345778-1234-abcd-0001-00000001"),
diff --git a/librpc/idl/drsuapi.idl b/librpc/idl/drsuapi.idl
index f53db00..d4f140d 100644
--- a/librpc/idl/drsuapi.idl
+++ b/librpc/idl/drsuapi.idl
@@ -1,6 +1,6 @@
 #include "idl_types.h"
 
-import "security.idl", "misc.idl", "samr.idl";
+import "security.idl", "misc.idl", "shared.idl";
 
 [
   uuid("e3514235-4b06-11d1-ab04-00c04fc2dcd2"),
diff --git a/librpc/idl/eventlog.idl b/librpc/idl/eventlog.idl
index e269467..4d6fd3d 100644
--- a/librpc/idl/eventlog.idl
+++ b/librpc/idl/eventlog.idl
@@ -4,7 +4,7 @@
   eventlog interface definition
 */
 
-import "lsa.idl", "security.idl";
+import "shared.idl", "security.idl";
 
 [ uuid("82273fdc-e32a-18c3-3f78-827929dc23ea"),
   version(0.0),
diff --git a/librpc/idl/initshutdown.idl b/librpc/idl/initshutdown.idl
index 13a1362..75265a8 100644
--- a/librpc/idl/initshutdown.idl
+++ b/librpc/idl/initshutdown.idl
@@ -4,7 +4,7 @@
   initshutdown interface definition
 */
 
-import "lsa.idl";
+import "misc.idl", "shared.idl";
 
 [ 
   uuid("894de0c0-0d55-11d3-a322-00c04fa321a1"),
diff --git a/librpc/idl/krb5pac.idl b/librpc/idl/krb5pac.idl
index 24c55b8..3a5dba3 100644
--- a/librpc/idl/krb5pac.idl
+++ b/librpc/idl/krb5pac.idl
@@ -4,7 +4,7 @@
 
 #include "idl_types.h"
 
-import "security.idl", "netlogon.idl", "samr.idl";
+import "security.idl", "shared.idl";
 
 [
   uuid("12345778-1234-abcd-0000-00000000"),
diff --git a/librpc/idl/lsa.idl b/librpc/idl/lsa.idl
index a893786..d903a57 100644
--- a/librpc/idl/lsa.idl
+++ b/librpc/idl/lsa.idl
@@ -4,7 +4,7 @@
   lsa interface definition
 */
 
-import "misc.idl", "security.idl";
+import "misc.idl", "security.idl", "shared.idl";
 
 [ uuid("12345778-1234-abcd-ef00-0123456789ab"),
   version(0.0),
@@ -16,41 +16,6 @@ import "misc.idl", "security.idl";
 	typedef bitmap security_secinfo security_secinfo;
 	typedef bitmap kerb_EncTypes kerb_EncTypes;
 
-	typedef [public] struct {
-		[value(2*strlen_m(string))] uint16 length;
-		[value(2*strlen_m(string))] uint16 size;
-		[charset(UTF16),size_is(size/2),length_is(length/2)] uint16 *string;
-	} lsa_String;
-
-	typedef [public] struct {
-		[value(2*strlen_m(string))] uint16 length;
-		[value(2*strlen_m_term(string))] uint16 size;
-		[charset(UTF16),size_is(size/2),length_is(length/2)] uint16 *string;
-	} lsa_StringLarge;
-
-	typedef [public] struct {
-		uint32 count;
-		[size_is(count)] lsa_String *names;
-	} lsa_Strings;
-
-	typedef [public] struct {
-		[value(strlen_m(string))] uint16 length;
-		[value(strlen_m(string))] uint16 size;
-		[charset(DOS),size_is(size),length_is(length)] uint8 *string;
-	} lsa_AsciiString;
-
-	typedef [public] struct {
-		[value(strlen_m(string))] uint16 length;
-		[value(strlen_m_term(string))] uint16 size;
-		[charset(DOS),size_is(size),length_is(length)] uint8 *string;
-	} lsa_AsciiStringLarge;
-
-	typedef [public] struct {
-		uint16 length;
-		uint16 size;
-		[size_is(size/2),length_is(length/2)] uint16 *array;
-	} lsa_BinaryString;
-
 	/******************/
 	/* Function: 0x00 */
 	NTSTATUS lsa_Close (
@@ -446,15 +411,6 @@ import "misc.idl", "security.idl";
 	   one privilege set
 	*/
 	/* Function: 0x0b */
-	typedef struct {
-		dom_sid2 *sid;
-	} lsa_SidPtr;
-
-	typedef [public] struct {
-		[range(0,1000)] uint32 num_sids;
-		[size_is(num_sids)] lsa_SidPtr *sids;
-	} lsa_SidArray;
-
 	[public] NTSTATUS lsa_EnumAccounts(
 		[in]         policy_handle *handle,
 		[in,out,ref] uint32 *resume_handle,
@@ -757,13 +713,6 @@ import "misc.idl", "security.idl";
 		lsa_TrustAttributes trust_attributes;
 	} lsa_TrustDomainInfoInfoEx;
 
-	typedef [public,v1_enum] enum {
-		TRUST_AUTH_TYPE_NONE = 0,
-		TRUST_AUTH_TYPE_NT4OWF = 1,
-		TRUST_AUTH_TYPE_CLEAR = 2,
-		TRUST_AUTH_TYPE_VERSION = 3
-	} lsa_TrustAuthType;
-
 	typedef struct {
 		NTTIME_hyper   last_update_time;
 		lsa_TrustAuthType AuthType;
@@ -1267,43 +1216,6 @@ import "misc.idl", "security.idl";
 	[todo] NTSTATUS lsa_LSARUNREGISTERAUDITEVENT();
 
 	/* Function 0x49 */
-	typedef struct {
-		[range(0,131072)] uint3264 length;
-		[size_is(length)] uint8 *data;
-	} lsa_ForestTrustBinaryData;
-
-	typedef struct {
-		dom_sid2 *domain_sid;
-		lsa_StringLarge dns_domain_name;
-		lsa_StringLarge netbios_domain_name;
-	} lsa_ForestTrustDomainInfo;
-
-	typedef [switch_type(uint32)] union {
-		[case(LSA_FOREST_TRUST_TOP_LEVEL_NAME)] lsa_String top_level_name;
-		[case(LSA_FOREST_TRUST_TOP_LEVEL_NAME_EX)] lsa_StringLarge top_level_name_ex;
-		[case(LSA_FOREST_TRUST_DOMAIN_INFO)] lsa_ForestTrustDomainInfo domain_info;
-		[default] lsa_ForestTrustBinaryData data;
-	} lsa_ForestTrustData;
-
-	typedef [v1_enum] enum {
-		LSA_FOREST_TRUST_TOP_LEVEL_NAME = 0,
-		LSA_FOREST_TRUST_TOP_LEVEL_NAME_EX = 1,
-		LSA_FOREST_TRUST_DOMAIN_INFO = 2,
-		LSA_FOREST_TRUST_RECORD_TYPE_LAST = 3
-	} lsa_ForestTrustRecordType;
-
-	typedef struct {
-		uint32 flags;
-		lsa_ForestTrustRecordType level;
-		hyper unknown;
-		[switch_is(level)] lsa_ForestTrustData forest_trust_data;
-	} lsa_ForestTrustRecord;
-
-	typedef [public] struct {
-		[range(0,4000)] uint32 count;
-		[size_is(count)] lsa_ForestTrustRecord **entries;
-	} lsa_ForestTrustInformation;
-
 	NTSTATUS lsa_lsaRQueryForestTrustInformation(
 		[in] policy_handle *handle,
 		[in,ref] lsa_String *trusted_domain_name,
diff --git a/librpc/idl/misc.idl b/librpc/idl/misc.idl
index 5a2bf75..ce44e86 100644
--- a/librpc/idl/misc.idl
+++ b/librpc/idl/misc.idl
@@ -4,7 +4,6 @@
   miscellaneous IDL structures
 */
 
-
 [
 	pyhelper("librpc/ndr/py_misc.c"),
 	pointer_default(unique)
diff --git a/librpc/idl/named_pipe_auth.idl b/librpc/idl/named_pipe_auth.idl
index 43db989..5a61dec 100644
--- a/librpc/idl/named_pipe_auth.idl
+++ b/librpc/idl/named_pipe_auth.idl
@@ -3,7 +3,7 @@
   miscellaneous IDL structures
 */
 
-import "netlogon.idl";
+import "shared.idl";
 
 [
 	pointer_default(unique)
diff --git a/librpc/idl/nbt.idl b/librpc/idl/nbt.idl
index a51132c..ccd1a5c 100644
--- a/librpc/idl/nbt.idl
+++ b/librpc/idl/nbt.idl
@@ -8,7 +8,7 @@
    encoding if it doesn't work out
 */
 
-import "misc.idl", "security.idl", "svcctl.idl", "samr.idl";
+import "misc.idl", "security.idl", "shared.idl";
 [
 	helper("../libcli/netlogon.h", "../libcli/nbt/libnbt.h")
 ]
diff --git a/librpc/idl/netlogon.idl b/librpc/idl/netlogon.idl
index 82a60c7..316a0f1 100644
--- a/librpc/idl/netlogon.idl
+++ b/librpc/idl/netlogon.idl
@@ -4,7 +4,7 @@
   who contributed!
 */
 
-import "misc.idl", "lsa.idl", "samr.idl", "security.idl", "nbt.idl";
+import "misc.idl", "shared.idl", "security.idl", "nbt.idl";
 
 #include "idl_types.h"
 
@@ -181,73 +181,11 @@ interface netlogon
 		[case(NetlogonServiceTransitiveInformation)]     netr_PasswordInfo *password;
 	} netr_LogonLevel;
 
-	typedef [public,flag(NDR_PAHEX)] struct {
-		uint8 key[16];
-	} netr_UserSessionKey;
-
-	typedef [public,flag(NDR_PAHEX)] struct {
-		uint8 key[8];
-	} netr_LMSessionKey;
-
-	/* Flags for user_flags below */
-	typedef [public,bitmap32bit] bitmap {
-		NETLOGON_GUEST			= 0x00000001,
-		NETLOGON_NOENCRYPTION		= 0x00000002,
-		NETLOGON_CACHED_ACCOUNT		= 0x00000004,
-		NETLOGON_USED_LM_PASSWORD	= 0x00000008,
-		NETLOGON_EXTRA_SIDS 		= 0x00000020,
-		NETLOGON_SUBAUTH_SESSION_KEY	= 0x00000040,
-		NETLOGON_SERVER_TRUST_ACCOUNT	= 0x00000080,
-		NETLOGON_NTLMV2_ENABLED		= 0x00000100,
-		NETLOGON_RESOURCE_GROUPS	= 0x00000200,
-		NETLOGON_PROFILE_PATH_RETURNED	= 0x00000400,
-		NETLOGON_GRACE_LOGON		= 0x01000000
-	} netr_UserFlags;
-
-	typedef struct {
-		NTTIME last_logon;
-		NTTIME last_logoff;
-		NTTIME acct_expiry;
-		NTTIME last_password_change;
-		NTTIME allow_password_change;
-		NTTIME force_password_change;
-		lsa_String account_name;
-		lsa_String full_name;
-		lsa_String logon_script;
-		lsa_String profile_path;
-		lsa_String home_directory;
-		lsa_String home_drive;
-		uint16 logon_count;
-		uint16 bad_password_count;
-		uint32 rid;
-		uint32 primary_gid;
-		samr_RidWithAttributeArray groups;
-		netr_UserFlags user_flags;
-		netr_UserSessionKey key;
-		lsa_StringLarge logon_server;
-		lsa_StringLarge domain;
-		dom_sid2 *domain_sid;
-		netr_LMSessionKey LMSessKey;
-		samr_AcctFlags acct_flags;
-		uint32 unknown[7];
-	} netr_SamBaseInfo;
-
 	typedef struct {
 		netr_SamBaseInfo base;
 	} netr_SamInfo2;
 
 	typedef struct {
-		dom_sid2 *sid;
-		samr_GroupAttrs attributes;
-	} netr_SidAttr;
-
-	typedef [public] struct {
-		netr_SamBaseInfo base;
-		uint32 sidcount;
-		[size_is(sidcount)] netr_SidAttr *sids;
-	} netr_SamInfo3;
-
-	typedef struct {
 		netr_SamBaseInfo base;
 		uint32 sidcount;
 		[size_is(sidcount)] netr_SidAttr *sids;
@@ -293,10 +231,6 @@ interface netlogon
 		[case(NetlogonValidationSamInfo4)] netr_SamInfo6 *sam6;
 	} netr_Validation;
 
-	typedef [public, flag(NDR_PAHEX)] struct {
-		uint8 data[8];
-	} netr_Credential;
-
 	typedef [public] struct {
 		netr_Credential cred;
 		time_t timestamp;
@@ -944,35 +878,6 @@ interface netlogon
 	/*****************/
 	/* Function 0x0F */
 
-	typedef [public,bitmap32bit] bitmap {
-		NETLOGON_NEG_ACCOUNT_LOCKOUT		= 0x00000001,
-		NETLOGON_NEG_PERSISTENT_SAMREPL		= 0x00000002,
-		NETLOGON_NEG_ARCFOUR			= 0x00000004,
-		NETLOGON_NEG_PROMOTION_COUNT		= 0x00000008,
-		NETLOGON_NEG_CHANGELOG_BDC		= 0x00000010,
-		NETLOGON_NEG_FULL_SYNC_REPL		= 0x00000020,
-		NETLOGON_NEG_MULTIPLE_SIDS		= 0x00000040,
-		NETLOGON_NEG_REDO			= 0x00000080,
-		NETLOGON_NEG_PASSWORD_CHANGE_REFUSAL	= 0x00000100,
-		NETLOGON_NEG_SEND_PASSWORD_INFO_PDC	= 0x00000200,
-		NETLOGON_NEG_GENERIC_PASSTHROUGH	= 0x00000400,
-		NETLOGON_NEG_CONCURRENT_RPC		= 0x00000800,
-		NETLOGON_NEG_AVOID_ACCOUNT_DB_REPL	= 0x00001000,
-		NETLOGON_NEG_AVOID_SECURITYAUTH_DB_REPL	= 0x00002000,
-		NETLOGON_NEG_STRONG_KEYS		= 0x00004000,
-		NETLOGON_NEG_TRANSITIVE_TRUSTS		= 0x00008000,
-		NETLOGON_NEG_DNS_DOMAIN_TRUSTS		= 0x00010000,
-		NETLOGON_NEG_PASSWORD_SET2		= 0x00020000,
-		NETLOGON_NEG_GETDOMAININFO		= 0x00040000,
-		NETLOGON_NEG_CROSS_FOREST_TRUSTS	= 0x00080000,
-		NETLOGON_NEG_NEUTRALIZE_NT4_EMULATION	= 0x00100000,
-		NETLOGON_NEG_RODC_PASSTHROUGH		= 0x00200000,
-		NETLOGON_NEG_SUPPORTS_AES_SHA2		= 0x00400000,
-		NETLOGON_NEG_SUPPORTS_AES		= 0x01000000,
-		NETLOGON_NEG_AUTHENTICATED_RPC_LSASS	= 0x20000000,
-		NETLOGON_NEG_AUTHENTICATED_RPC		= 0x40000000
-	} netr_NegotiateFlags;
-
 	const uint32 NETLOGON_NEG_128BIT = NETLOGON_NEG_STRONG_KEYS;
 	const uint32 NETLOGON_NEG_SCHANNEL = NETLOGON_NEG_AUTHENTICATED_RPC;
 
diff --git a/librpc/idl/samr.idl b/librpc/idl/samr.idl
index da7b1aa..0400c31 100644
--- a/librpc/idl/samr.idl
+++ b/librpc/idl/samr.idl
@@ -3,7 +3,7 @@
 /*
   samr interface definition
 */
-import "misc.idl", "lsa.idl", "security.idl";
+import "misc.idl", "security.idl", "shared.idl";
 
 /*
   Thanks to Todd Sabin for some information from his samr.idl in acltools
@@ -17,36 +17,6 @@ import "misc.idl", "lsa.idl", "security.idl";
 {
 	typedef bitmap security_secinfo security_secinfo;
 
-	/* SAM database types */
-	typedef [public,v1_enum] enum {
-		SAM_DATABASE_DOMAIN  = 0, /* Domain users and groups */
-		SAM_DATABASE_BUILTIN = 1, /* BUILTIN users and groups */
-		SAM_DATABASE_PRIVS   = 2 /* Privileges */
-	} netr_SamDatabaseID;
-
-	/* account control (acct_flags) bits */
-	typedef [public,bitmap32bit] bitmap {
-		ACB_DISABLED			= 0x00000001,  /* 1 = User account disabled */
-		ACB_HOMDIRREQ			= 0x00000002,  /* 1 = Home directory required */
-		ACB_PWNOTREQ			= 0x00000004,  /* 1 = User password not required */
-		ACB_TEMPDUP			= 0x00000008,  /* 1 = Temporary duplicate account */
-		ACB_NORMAL			= 0x00000010,  /* 1 = Normal user account */
-		ACB_MNS				= 0x00000020,  /* 1 = MNS logon user account */
-		ACB_DOMTRUST			= 0x00000040,  /* 1 = Interdomain trust account */
-		ACB_WSTRUST			= 0x00000080,  /* 1 = Workstation trust account */
-		ACB_SVRTRUST			= 0x00000100,  /* 1 = Server trust account */
-		ACB_PWNOEXP			= 0x00000200,  /* 1 = User password does not expire */
-		ACB_AUTOLOCK			= 0x00000400,  /* 1 = Account auto locked */
-		ACB_ENC_TXT_PWD_ALLOWED		= 0x00000800,  /* 1 = Encryped text password is allowed */
-		ACB_SMARTCARD_REQUIRED		= 0x00001000,  /* 1 = Smart Card required */
-		ACB_TRUSTED_FOR_DELEGATION	= 0x00002000,  /* 1 = Trusted for Delegation */
-		ACB_NOT_DELEGATED		= 0x00004000,  /* 1 = Not delegated */
-		ACB_USE_DES_KEY_ONLY		= 0x00008000,  /* 1 = Use DES key only */
-		ACB_DONT_REQUIRE_PREAUTH	= 0x00010000,  /* 1 = Preauth not required */
-		ACB_PW_EXPIRED                  = 0x00020000,  /* 1 = Password Expired */
-		ACB_NO_AUTH_DATA_REQD		= 0x00080000   /* 1 = No authorization data required */
-	} samr_AcctFlags;
-
 	/* SAM server specific access rights */
 
 	typedef [bitmap32bit] bitmap {
@@ -569,17 +539,6 @@ import "misc.idl", "lsa.idl", "security.idl";
 		[out,ref]     policy_handle *group_handle
 		);
 
-	/* Group attributes */
-	typedef [public,bitmap32bit] bitmap {
-		SE_GROUP_MANDATORY		= 0x00000001,
-		SE_GROUP_ENABLED_BY_DEFAULT 	= 0x00000002,
-		SE_GROUP_ENABLED 		= 0x00000004,
-		SE_GROUP_OWNER 			= 0x00000008,
-		SE_GROUP_USE_FOR_DENY_ONLY 	= 0x00000010,
-		SE_GROUP_RESOURCE 		= 0x20000000,
-		SE_GROUP_LOGON_ID 		= 0xC0000000
-	} samr_GroupAttrs;
-
 	/************************/
 	/* Function    0x14     */
 
@@ -811,12 +770,6 @@ import "misc.idl", "lsa.idl", "security.idl";
 		uint16 code_page;
 	} samr_UserInfo2;
 
-	/* this is also used in samr and netlogon */
-	typedef [public, flag(NDR_PAHEX)] struct {
-		uint16 units_per_week;
-		[size_is(1260), length_is(units_per_week/8)] uint8 *bits;
-	} samr_LogonHours;
-
 	typedef struct {
 		lsa_String account_name;
 		lsa_String full_name;
@@ -909,10 +862,6 @@ import "misc.idl", "lsa.idl", "security.idl";
 		NTTIME acct_expiry;
 	} samr_UserInfo17;
 
-	typedef [public, flag(NDR_PAHEX)] struct {
-		uint8 hash[16];
-	} samr_Password;
-
 	typedef struct {
 		samr_Password nt_pwd;
 		samr_Password lm_pwd;
@@ -1092,16 +1041,6 @@ import "misc.idl", "lsa.idl", "security.idl";
 	/************************/
 	/* Function    0x27     */
 
-	typedef [public] struct {
-		uint32 rid;
-		samr_GroupAttrs attributes;
-	} samr_RidWithAttribute;
-
-	typedef [public] struct {
-		uint32     count;
-		[size_is(count)] samr_RidWithAttribute *rids;
-	} samr_RidWithAttributeArray;
-
 	NTSTATUS samr_GetGroupsForUser(
 		[in,ref]   policy_handle *user_handle,
 		[out,ref]  samr_RidWithAttributeArray  **rids
diff --git a/librpc/idl/schannel.idl b/librpc/idl/schannel.idl
index a30e292..55fedef 100644
--- a/librpc/idl/schannel.idl
+++ b/librpc/idl/schannel.idl
@@ -4,7 +4,7 @@
   schannel structures
 */
 
-import "netlogon.idl", "nbt.idl";
+import "shared.idl", "nbt.idl";
 
 [
 	pointer_default(unique),
diff --git a/librpc/idl/shared.idl b/librpc/idl/shared.idl
new file mode 100644
index 0000000..0ecbf6b
--- /dev/null
+++ b/librpc/idl/shared.idl
@@ -0,0 +1,307 @@
+#include "idl_types.h"
+
+import "misc.idl", "security.idl";
+
+[
+    pointer_default(unique)
+]
+interface shared
+{
+	/* SAM database types */
+
+	typedef [public] struct {
+		[value(2*strlen_m(string))] uint16 length;
+		[value(2*strlen_m(string))] uint16 size;
+		[charset(UTF16),size_is(size/2),length_is(length/2)] uint16 *string;
+	} lsa_String;
+
+	typedef [public] struct {
+		[value(2*strlen_m(string))] uint16 length;
+		[value(2*strlen_m_term(string))] uint16 size;
+		[charset(UTF16),size_is(size/2),length_is(length/2)] uint16 *string;
+	} lsa_StringLarge;
+
+	typedef [public] struct {
+		uint16 length;
+		uint16 size;
+		[size_is(size/2),length_is(length/2)] uint16 *array;
+	} lsa_BinaryString;
+
+	typedef [public] struct {
+		[value(strlen_m(string))] uint16 length;
+		[value(strlen_m(string))] uint16 size;
+		[charset(DOS),size_is(size),length_is(length)] uint8 *string;
+	} lsa_AsciiString;
+
+	typedef [public] struct {
+		[value(strlen_m(string))] uint16 length;
+		[value(strlen_m_term(string))] uint16 size;
+		[charset(DOS),size_is(size),length_is(length)] uint8 *string;
+	} lsa_AsciiStringLarge;
+
+	typedef struct {
+		dom_sid2 *sid;
+	} lsa_SidPtr;
+
+	typedef [public] struct {
+		[range(0,1000)] uint32 num_sids;
+		[size_is(num_sids)] lsa_SidPtr *sids;
+	} lsa_SidArray;
+
+	typedef [public] struct {
+		uint32 count;
+		[size_is(count)] lsa_String *names;
+	} lsa_Strings;
+
+	/* account control (acct_flags) bits */
+	typedef [public,bitmap32bit] bitmap {
+		ACB_DISABLED			= 0x00000001,  /* 1 = User account disabled */
+		ACB_HOMDIRREQ			= 0x00000002,  /* 1 = Home directory required */
+		ACB_PWNOTREQ			= 0x00000004,  /* 1 = User password not required */
+		ACB_TEMPDUP			= 0x00000008,  /* 1 = Temporary duplicate account */
+		ACB_NORMAL			= 0x00000010,  /* 1 = Normal user account */
+		ACB_MNS				= 0x00000020,  /* 1 = MNS logon user account */
+		ACB_DOMTRUST			= 0x00000040,  /* 1 = Interdomain trust account */
+		ACB_WSTRUST			= 0x00000080,  /* 1 = Workstation trust account */
+		ACB_SVRTRUST			= 0x00000100,  /* 1 = Server trust account */
+		ACB_PWNOEXP			= 0x00000200,  /* 1 = User password does not expire */
+		ACB_AUTOLOCK			= 0x00000400,  /* 1 = Account auto locked */
+		ACB_ENC_TXT_PWD_ALLOWED		= 0x00000800,  /* 1 = Encryped text password is allowed */
+		ACB_SMARTCARD_REQUIRED		= 0x00001000,  /* 1 = Smart Card required */
+		ACB_TRUSTED_FOR_DELEGATION	= 0x00002000,  /* 1 = Trusted for Delegation */
+		ACB_NOT_DELEGATED		= 0x00004000,  /* 1 = Not delegated */
+		ACB_USE_DES_KEY_ONLY		= 0x00008000,  /* 1 = Use DES key only */
+		ACB_DONT_REQUIRE_PREAUTH	= 0x00010000,  /* 1 = Preauth not required */
+		ACB_PW_EXPIRED                  = 0x00020000,  /* 1 = Password Expired */
+		ACB_NO_AUTH_DATA_REQD		= 0x00080000   /* 1 = No authorization data required */
+	} samr_AcctFlags;
+
+	/* Group attributes */
+	typedef [public,bitmap32bit] bitmap {
+		SE_GROUP_MANDATORY		= 0x00000001,
+		SE_GROUP_ENABLED_BY_DEFAULT 	= 0x00000002,
+		SE_GROUP_ENABLED 		= 0x00000004,
+		SE_GROUP_OWNER 			= 0x00000008,
+		SE_GROUP_USE_FOR_DENY_ONLY 	= 0x00000010,
+		SE_GROUP_RESOURCE 		= 0x20000000,
+		SE_GROUP_LOGON_ID 		= 0xC0000000
+	} samr_GroupAttrs;
+
+	typedef [public, flag(NDR_PAHEX)] struct {
+		uint8 hash[16];
+	} samr_Password;
+
+	typedef [public] struct {
+		uint32 rid;
+		samr_GroupAttrs attributes;
+	} samr_RidWithAttribute;
+
+	typedef [public] struct {
+		uint32     count;
+		[size_is(count)] samr_RidWithAttribute *rids;
+	} samr_RidWithAttributeArray;
+
+	/* this is also used in samr and netlogon */
+	typedef [public, flag(NDR_PAHEX)] struct {
+		uint16 units_per_week;
+		[size_is(1260), length_is(units_per_week/8)] uint8 *bits;
+	} samr_LogonHours;
+
+	typedef struct {
+		[range(0,131072)] uint3264 length;
+		[size_is(length)] uint8 *data;
+	} lsa_ForestTrustBinaryData;
+
+	typedef struct {
+		dom_sid2 *domain_sid;
+		lsa_StringLarge dns_domain_name;
+		lsa_StringLarge netbios_domain_name;
+	} lsa_ForestTrustDomainInfo;
+
+	typedef [switch_type(uint32)] union {
+		[case(LSA_FOREST_TRUST_TOP_LEVEL_NAME)] lsa_String top_level_name;
+		[case(LSA_FOREST_TRUST_TOP_LEVEL_NAME_EX)] lsa_StringLarge top_level_name_ex;
+		[case(LSA_FOREST_TRUST_DOMAIN_INFO)] lsa_ForestTrustDomainInfo domain_info;
+		[default] lsa_ForestTrustBinaryData data;
+	} lsa_ForestTrustData;
+
+	typedef [v1_enum] enum {
+		LSA_FOREST_TRUST_TOP_LEVEL_NAME = 0,
+		LSA_FOREST_TRUST_TOP_LEVEL_NAME_EX = 1,
+		LSA_FOREST_TRUST_DOMAIN_INFO = 2,
+		LSA_FOREST_TRUST_RECORD_TYPE_LAST = 3
+	} lsa_ForestTrustRecordType;
+
+	typedef struct {
+		uint32 flags;
+		lsa_ForestTrustRecordType level;
+		hyper unknown;
+		[switch_is(level)] lsa_ForestTrustData forest_trust_data;
+	} lsa_ForestTrustRecord;
+
+	typedef [public] struct {
+		[range(0,4000)] uint32 count;
+		[size_is(count)] lsa_ForestTrustRecord **entries;
+	} lsa_ForestTrustInformation;
+
+	typedef [public,v1_enum] enum {
+		TRUST_AUTH_TYPE_NONE = 0,
+		TRUST_AUTH_TYPE_NT4OWF = 1,
+		TRUST_AUTH_TYPE_CLEAR = 2,
+		TRUST_AUTH_TYPE_VERSION = 3
+	} lsa_TrustAuthType;
+
+	typedef [public,v1_enum] enum {
+		SAM_DATABASE_DOMAIN  = 0, /* Domain users and groups */
+		SAM_DATABASE_BUILTIN = 1, /* BUILTIN users and groups */
+		SAM_DATABASE_PRIVS   = 2 /* Privileges */
+	} netr_SamDatabaseID;
+
+	typedef [public,flag(NDR_PAHEX)] struct {
+		uint8 key[16];
+	} netr_UserSessionKey;
+
+	typedef [public,flag(NDR_PAHEX)] struct {
+		uint8 key[8];
+	} netr_LMSessionKey;
+
+	/* Flags for user_flags below */
+	typedef [public,bitmap32bit] bitmap {
+		NETLOGON_GUEST			= 0x00000001,
+		NETLOGON_NOENCRYPTION		= 0x00000002,
+		NETLOGON_CACHED_ACCOUNT		= 0x00000004,
+		NETLOGON_USED_LM_PASSWORD	= 0x00000008,
+		NETLOGON_EXTRA_SIDS 		= 0x00000020,
+		NETLOGON_SUBAUTH_SESSION_KEY	= 0x00000040,
+		NETLOGON_SERVER_TRUST_ACCOUNT	= 0x00000080,
+		NETLOGON_NTLMV2_ENABLED		= 0x00000100,
+		NETLOGON_RESOURCE_GROUPS	= 0x00000200,
+		NETLOGON_PROFILE_PATH_RETURNED	= 0x00000400,
+		NETLOGON_GRACE_LOGON		= 0x01000000
+	} netr_UserFlags;
+
+	typedef [public] struct {
+		NTTIME last_logon;
+		NTTIME last_logoff;
+		NTTIME acct_expiry;
+		NTTIME last_password_change;
+		NTTIME allow_password_change;
+		NTTIME force_password_change;
+		lsa_String account_name;
+		lsa_String full_name;
+		lsa_String logon_script;
+		lsa_String profile_path;
+		lsa_String home_directory;
+		lsa_String home_drive;
+		uint16 logon_count;
+		uint16 bad_password_count;
+		uint32 rid;
+		uint32 primary_gid;
+		samr_RidWithAttributeArray groups;
+		netr_UserFlags user_flags;
+		netr_UserSessionKey key;
+		lsa_StringLarge logon_server;
+		lsa_StringLarge domain;
+		dom_sid2 *domain_sid;
+		netr_LMSessionKey LMSessKey;
+		samr_AcctFlags acct_flags;
+		uint32 unknown[7];
+	} netr_SamBaseInfo;
+
+	typedef [public] struct {
+		dom_sid2 *sid;
+		samr_GroupAttrs attributes;
+	} netr_SidAttr;
+
+	typedef [public] struct {
+		netr_SamBaseInfo base;
+		uint32 sidcount;
+		[size_is(sidcount)] netr_SidAttr *sids;
+	} netr_SamInfo3;
+
+	typedef [public,v1_enum] enum {
+		PLATFORM_ID_DOS = 300,
+		PLATFORM_ID_OS2 = 400,
+		PLATFORM_ID_NT	= 500,
+		PLATFORM_ID_OSF = 600,
+		PLATFORM_ID_VMS = 700
+	} srvsvc_PlatformId;
+
+	typedef [public,bitmap32bit] bitmap {
+		SV_TYPE_WORKSTATION       = 0x00000001,
+		SV_TYPE_SERVER            = 0x00000002,
+		SV_TYPE_SQLSERVER         = 0x00000004,
+		SV_TYPE_DOMAIN_CTRL       = 0x00000008,
+		SV_TYPE_DOMAIN_BAKCTRL    = 0x00000010,
+		SV_TYPE_TIME_SOURCE       = 0x00000020,
+		SV_TYPE_AFP               = 0x00000040,
+		SV_TYPE_NOVELL            = 0x00000080,
+
+		SV_TYPE_DOMAIN_MEMBER     = 0x00000100,
+		SV_TYPE_PRINTQ_SERVER     = 0x00000200,
+		SV_TYPE_DIALIN_SERVER     = 0x00000400,
+		SV_TYPE_SERVER_UNIX       = 0x00000800,
+		SV_TYPE_NT                = 0x00001000,
+		SV_TYPE_WFW               = 0x00002000,
+		SV_TYPE_SERVER_MFPN       = 0x00004000,
+		SV_TYPE_SERVER_NT         = 0x00008000,
+		SV_TYPE_POTENTIAL_BROWSER = 0x00010000,
+		SV_TYPE_BACKUP_BROWSER    = 0x00020000,
+		SV_TYPE_MASTER_BROWSER    = 0x00040000,
+		SV_TYPE_DOMAIN_MASTER     = 0x00080000,
+		SV_TYPE_SERVER_OSF        = 0x00100000,
+		SV_TYPE_SERVER_VMS        = 0x00200000,
+		SV_TYPE_WIN95_PLUS        = 0x00400000,
+		SV_TYPE_DFS_SERVER        = 0x00800000,
+		SV_TYPE_ALTERNATE_XPORT   = 0x20000000,
+		SV_TYPE_LOCAL_LIST_ONLY   = 0x40000000,
+		SV_TYPE_DOMAIN_ENUM       = 0x80000000
+	} svcctl_ServerType;
+
+	typedef [public,bitmap32bit] bitmap {
+		NETLOGON_NEG_ACCOUNT_LOCKOUT		= 0x00000001,
+		NETLOGON_NEG_PERSISTENT_SAMREPL		= 0x00000002,
+		NETLOGON_NEG_ARCFOUR			= 0x00000004,
+		NETLOGON_NEG_PROMOTION_COUNT		= 0x00000008,
+		NETLOGON_NEG_CHANGELOG_BDC		= 0x00000010,
+		NETLOGON_NEG_FULL_SYNC_REPL		= 0x00000020,
+		NETLOGON_NEG_MULTIPLE_SIDS		= 0x00000040,
+		NETLOGON_NEG_REDO			= 0x00000080,
+		NETLOGON_NEG_PASSWORD_CHANGE_REFUSAL	= 0x00000100,
+		NETLOGON_NEG_SEND_PASSWORD_INFO_PDC	= 0x00000200,
+		NETLOGON_NEG_GENERIC_PASSTHROUGH	= 0x00000400,
+		NETLOGON_NEG_CONCURRENT_RPC		= 0x00000800,
+		NETLOGON_NEG_AVOID_ACCOUNT_DB_REPL	= 0x00001000,
+		NETLOGON_NEG_AVOID_SECURITYAUTH_DB_REPL	= 0x00002000,
+		NETLOGON_NEG_STRONG_KEYS		= 0x00004000,
+		NETLOGON_NEG_TRANSITIVE_TRUSTS		= 0x00008000,
+		NETLOGON_NEG_DNS_DOMAIN_TRUSTS		= 0x00010000,
+		NETLOGON_NEG_PASSWORD_SET2		= 0x00020000,
+		NETLOGON_NEG_GETDOMAININFO		= 0x00040000,
+		NETLOGON_NEG_CROSS_FOREST_TRUSTS	= 0x00080000,
+		NETLOGON_NEG_NEUTRALIZE_NT4_EMULATION	= 0x00100000,
+		NETLOGON_NEG_RODC_PASSTHROUGH		= 0x00200000,
+		NETLOGON_NEG_SUPPORTS_AES_SHA2		= 0x00400000,
+		NETLOGON_NEG_SUPPORTS_AES		= 0x01000000,
+		NETLOGON_NEG_AUTHENTICATED_RPC_LSASS	= 0x20000000,
+		NETLOGON_NEG_AUTHENTICATED_RPC		= 0x40000000
+	} netr_NegotiateFlags;
+
+	typedef [public, flag(NDR_PAHEX)] struct {
+		uint8 data[8];
+	} netr_Credential;
+
+	typedef [public] struct {
+		srvsvc_PlatformId platform_id;
+		[string,charset(UTF16)] uint16 *server_name;
+	} srvsvc_NetSrvInfo100;
+
+	typedef [public] struct {
+		srvsvc_PlatformId platform_id;
+		[string,charset(UTF16)] uint16 *server_name;
+		uint32 version_major;
+		uint32 version_minor;
+		svcctl_ServerType server_type;
+		[string,charset(UTF16)] uint16 *comment;
+	} srvsvc_NetSrvInfo101;
+}
\ No newline at end of file
diff --git a/librpc/idl/spoolss.idl b/librpc/idl/spoolss.idl
index 04681bf..5a66673 100644
--- a/librpc/idl/spoolss.idl
+++ b/librpc/idl/spoolss.idl
@@ -3,7 +3,7 @@
 /*
   spoolss interface definitions
 */
-import "misc.idl", "security.idl", "winreg.idl";
+import "misc.idl", "security.idl";
 
 [ uuid("12345678-1234-abcd-ef00-0123456789ab"),
   version(1.0),
diff --git a/librpc/idl/srvsvc.idl b/librpc/idl/srvsvc.idl
index 153d8cf..9e91fce 100644
--- a/librpc/idl/srvsvc.idl
+++ b/librpc/idl/srvsvc.idl
@@ -3,7 +3,7 @@
 /*
   srvsvc interface definitions
 */
-import "security.idl", "svcctl.idl";
+import "security.idl", "shared.idl";
 
 [ uuid("4b324fc8-1670-01d3-1278-5a47bf6ee188"),
   version(3.0),
@@ -630,28 +630,6 @@ import "security.idl", "svcctl.idl";
 /**************************/
 /* srvsvc_NetSrv          */
 /**************************/
-	typedef [public,v1_enum] enum {
-		PLATFORM_ID_DOS = 300,
-		PLATFORM_ID_OS2 = 400,
-		PLATFORM_ID_NT	= 500,
-		PLATFORM_ID_OSF = 600,
-		PLATFORM_ID_VMS = 700
-	} srvsvc_PlatformId;
-
-	typedef [public] struct {
-		srvsvc_PlatformId platform_id;
-		[string,charset(UTF16)] uint16 *server_name;
-	} srvsvc_NetSrvInfo100;
-
-	typedef [public] struct {
-		srvsvc_PlatformId platform_id;
-		[string,charset(UTF16)] uint16 *server_name;
-		uint32 version_major;
-		uint32 version_minor;
-		svcctl_ServerType server_type;
-		[string,charset(UTF16)] uint16 *comment;
-	} srvsvc_NetSrvInfo101;
-
 	typedef struct {
 		srvsvc_PlatformId platform_id;
 		[string,charset(UTF16)] uint16 *server_name;
diff --git a/librpc/idl/svcctl.idl b/librpc/idl/svcctl.idl
index 19866d2..44723d1 100644
--- a/librpc/idl/svcctl.idl
+++ b/librpc/idl/svcctl.idl
@@ -80,37 +80,6 @@ import "misc.idl", "security.idl";
 	const int SERVICE_TYPE_WIN32=SERVICE_TYPE_WIN32_OWN_PROCESS|SERVICE_TYPE_WIN32_SHARE_PROCESS;
 	const int SERVICE_TYPE_INTERACTIVE_PROCESS = 0x100;
 
-	typedef [public,bitmap32bit] bitmap {
-		SV_TYPE_WORKSTATION       = 0x00000001,
-		SV_TYPE_SERVER            = 0x00000002,
-		SV_TYPE_SQLSERVER         = 0x00000004,
-		SV_TYPE_DOMAIN_CTRL       = 0x00000008,
-		SV_TYPE_DOMAIN_BAKCTRL    = 0x00000010,
-		SV_TYPE_TIME_SOURCE       = 0x00000020,
-		SV_TYPE_AFP               = 0x00000040,
-		SV_TYPE_NOVELL            = 0x00000080,
-
-		SV_TYPE_DOMAIN_MEMBER     = 0x00000100,
-		SV_TYPE_PRINTQ_SERVER     = 0x00000200,
-		SV_TYPE_DIALIN_SERVER     = 0x00000400,
-		SV_TYPE_SERVER_UNIX       = 0x00000800,
-		SV_TYPE_NT                = 0x00001000,
-		SV_TYPE_WFW               = 0x00002000,
-		SV_TYPE_SERVER_MFPN       = 0x00004000,
-		SV_TYPE_SERVER_NT         = 0x00008000,
-		SV_TYPE_POTENTIAL_BROWSER = 0x00010000,
-		SV_TYPE_BACKUP_BROWSER    = 0x00020000,
-		SV_TYPE_MASTER_BROWSER    = 0x00040000,
-		SV_TYPE_DOMAIN_MASTER     = 0x00080000,
-		SV_TYPE_SERVER_OSF        = 0x00100000,
-		SV_TYPE_SERVER_VMS        = 0x00200000,
-		SV_TYPE_WIN95_PLUS        = 0x00400000,
-		SV_TYPE_DFS_SERVER        = 0x00800000,
-		SV_TYPE_ALTERNATE_XPORT   = 0x20000000,
-		SV_TYPE_LOCAL_LIST_ONLY   = 0x40000000,
-		SV_TYPE_DOMAIN_ENUM       = 0x80000000
-	} svcctl_ServerType;
-
 	const uint32 SV_TYPE_ALL	= 0xFFFFFFFF;
 
 	/*****************/
diff --git a/librpc/idl/winreg.idl b/librpc/idl/winreg.idl
index f1f4dfb..c2dbccc 100644
--- a/librpc/idl/winreg.idl
+++ b/librpc/idl/winreg.idl
@@ -2,7 +2,7 @@
   winreg interface definition
 */
 
-import "lsa.idl", "security.idl", "misc.idl";
+import "security.idl", "misc.idl", "shared.idl";
 
 [ 
   uuid("338cd001-2244-31f1-aaaa-900038001003"),
diff --git a/librpc/idl/wkssvc.idl b/librpc/idl/wkssvc.idl
index 9e92ed7..9c8694d 100644
--- a/librpc/idl/wkssvc.idl
+++ b/librpc/idl/wkssvc.idl
@@ -4,7 +4,7 @@
   wkssvc interface definitions
 */
 
-import "srvsvc.idl", "lsa.idl";
+import "misc.idl", "shared.idl";
 
 [ uuid("6bffd098-a112-3610-9833-46c3f87e345a"),
   version(1.0),
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: not available
URL: <http://lists.samba.org/pipermail/samba-technical/attachments/20091108/2650f945/attachment.pgp>


More information about the samba-technical mailing list