Impossible to load ndr_* as shared objects :-(

View: New views
5 Messages — Rating Filter:   Alert me  

Impossible to load ndr_* as shared objects :-(

by Volker Lendecke :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Hi!

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.

Just in case someone wondered about the revert checkins that
just flew in, they were in preparation and are not pretty
worthless.

On lesson learnt: Never push anything until the feature you
want is 100% done :-((

Sorry for the noise.

Volker


signature.asc (204 bytes) Download Attachment

Re: Impossible to load ndr_* as shared objects :-(

by Volker Lendecke :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

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

 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),


attachment0 (196 bytes) Download Attachment

Re: Impossible to load ndr_* as shared objects :-(

by Andrew Bartlett :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

On Sun, 2009-11-08 at 23:30 +0100, Volker Lendecke wrote:

> 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.
The netr_SamBaseInfo looks out of place.  What makes it need to be
shared with every other part of the system?

Otherwise, most of the definitions look reasonable, and it's good to
have the 'common to most of Samba', but not 'common to all of RPC'
definitions in once place.

Andrew Bartlett

--
Andrew Bartlett                                http://samba.org/~abartlet/
Authentication Developer, Samba Team           http://samba.org
Samba Developer, Cisco Inc.



signature.asc (196 bytes) Download Attachment

Re: Impossible to load ndr_* as shared objects :-(

by Volker Lendecke :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

On Mon, Nov 09, 2009 at 02:59:04PM +1100, Andrew Bartlett wrote:

> > 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.
>
> The netr_SamBaseInfo looks out of place.  What makes it need to be
> shared with every other part of the system?
It is used in both the krb5pac.idl and named_pipe_auth.idl
via the info3 struct.

Volker


attachment0 (196 bytes) Download Attachment

Parent Message unknown Re: Impossible to load ndr_* as shared objects :-(

by Volker Lendecke :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

On Mon, Nov 09, 2009 at 08:11:39AM +0100, Volker Lendecke wrote:
> > The netr_SamBaseInfo looks out of place.  What makes it need to be
> > shared with every other part of the system?
>
> It is used in both the krb5pac.idl and named_pipe_auth.idl
> via the info3 struct.

Ok, I give up. I just don't get s4 to build with that patch.

It *IS* impossible.

Volker


signature.asc (204 bytes) Download Attachment