cleaned up the lsa_enum_acct_rights function and added a
[garming/samba-autobuild/.git] / source3 / include / rpc_misc.h
index 786aad32d2dd039dd018d5271ad18ff46b94bd5f..771048943512892ab3618e84ad2417677d49b34b 100644 (file)
@@ -1,6 +1,5 @@
 /* 
-   Unix SMB/Netbios implementation.
-   Version 1.9.
+   Unix SMB/CIFS implementation.
    SMB parameters and setup
    Copyright (C) Andrew Tridgell 1992-1997
    Copyright (C) Luke Kenneth Casson Leighton 1996-1997
    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
+#include "ntdomain.h"
+#include "rpc_dce.h"
+
 #ifndef _RPC_MISC_H /* _RPC_MISC_H */
 #define _RPC_MISC_H 
 
 
-#include "rpc_dce.h"
 
 /* well-known RIDs - Relative IDs */
 
 /* RIDs - Well-known users ... */
 #define DOMAIN_USER_RID_ADMIN          (0x000001F4L)
 #define DOMAIN_USER_RID_GUEST          (0x000001F5L)
+#define DOMAIN_USER_RID_KRBTGT         (0x000001F6L)
 
 /* RIDs - well-known groups ... */
 #define DOMAIN_GROUP_RID_ADMINS        (0x00000200L)
 #define DOMAIN_GROUP_RID_USERS         (0x00000201L)
 #define DOMAIN_GROUP_RID_GUESTS        (0x00000202L)
+#define DOMAIN_GROUP_RID_COMPUTERS     (0x00000203L)
+
+#define DOMAIN_GROUP_RID_CONTROLLERS   (0x00000204L)
+#define DOMAIN_GROUP_RID_CERT_ADMINS   (0x00000205L)
+#define DOMAIN_GROUP_RID_SCHEMA_ADMINS (0x00000206L)
+#define DOMAIN_GROUP_RID_ENTERPRISE_ADMINS (0x00000207L)
+
+/* is the following the right number? I bet it is  --simo
+#define DOMAIN_GROUP_RID_POLICY_ADMINS (0x00000208L)
+*/
 
 /* RIDs - well-known aliases ... */
 #define BUILTIN_ALIAS_RID_ADMINS        (0x00000220L)
 #define BUILTIN_ALIAS_RID_BACKUP_OPS    (0x00000227L)
 
 #define BUILTIN_ALIAS_RID_REPLICATOR    (0x00000228L)
+#define BUILTIN_ALIAS_RID_RAS_SERVERS   (0x00000229L)
 
 /*
  * Masks for mappings between unix uid and gid types and
  * NT RIDS.
  */
 
-/* Take the bottom bits. */
-#define RID_TYPE_MASK 2
-#define RID_MULTIPLIER 4
 
-/* The three common types. */
-#define RID_TYPE_USER 0
-#define RID_TYPE_GROUP 1
-#define RID_TYPE_ALIAS 2
+#define BASE_RID (0x000003E8L)
+
+/* Take the bottom bit. */
+#define RID_TYPE_MASK 1
+#define RID_MULTIPLIER 2
+
+/* The two common types. */
+#define USER_RID_TYPE 0
+#define GROUP_RID_TYPE 1
 
 /* ENUM_HND */
 typedef struct enum_hnd_info
@@ -123,8 +138,8 @@ typedef struct unihdr2_info
 /* UNISTR - unicode string size and buffer */
 typedef struct unistr_info
 {
-  uint16 buffer[MAX_UNISTRLEN]; /* unicode characters. ***MUST*** be null-terminated */
-
+  /* unicode characters. ***MUST*** be little-endian. ***MUST*** be null-terminated */
+  uint16 *buffer;
 } UNISTR;
 
 /* BUFHDR - buffer header */
@@ -143,7 +158,8 @@ typedef struct buffer2_info
   uint32 buf_max_len;
   uint32 undoc;
   uint32 buf_len;
-  uint16 buffer[MAX_UNISTRLEN]; /* unicode characters. **NOT** necessarily null-terminated */
+  /* unicode characters. ***MUST*** be little-endian. **NOT** necessarily null-terminated */
+  uint16 *buffer;
 
 } BUFFER2;
 
@@ -151,18 +167,28 @@ typedef struct buffer2_info
 typedef struct buffer3_info
 {
   uint32 buf_max_len;
-  uint8  buffer[MAX_BUFFERLEN]; /* data */
+  uint8  *buffer; /* Data */
   uint32 buf_len;
 
 } BUFFER3;
 
+/* BUFFER5 */
+typedef struct buffer5_info
+{
+  uint32 buf_len;
+  uint16 *buffer; /* data */
+} BUFFER5;
+
 /* UNISTR2 - unicode string size (in uint16 unicode chars) and buffer */
 typedef struct unistr2_info
 {
   uint32 uni_max_len;
   uint32 undoc;
   uint32 uni_str_len;
-  uint16 buffer[MAX_UNISTRLEN]; /* unicode characters. **NOT** necessarily null-terminated */
+  /* unicode characters. ***MUST*** be little-endian. 
+     **must** be null-terminated and the uni_str_len should include
+     the NULL character */
+  uint16 *buffer;
 
 } UNISTR2;
 
@@ -172,7 +198,7 @@ typedef struct string2_info
   uint32 str_max_len;
   uint32 undoc;
   uint32 str_str_len;
-  uint8  buffer[MAX_STRINGLEN]; /* uint8 characters. **NOT** necessarily null-terminated */
+  uint8  *buffer; /* uint8 characters. **NOT** necessarily null-terminated */
 
 } STRING2;
 
@@ -184,6 +210,22 @@ typedef struct unistr3_info
 
 } UNISTR3;
 
+/* an element in a unicode string array */
+typedef struct
+{
+       uint16 length;
+       uint16 size;
+       uint32 ref_id;
+       UNISTR2 string;
+} UNISTR2_ARRAY_EL;
+
+/* an array of unicode strings */
+typedef struct 
+{
+       uint32 ref_id;
+       uint32 count;
+       UNISTR2_ARRAY_EL *strings;
+} UNISTR2_ARRAY;
 
 /* DOM_RID2 - domain RID structure for ntlsa pipe */
 typedef struct domrid2_info
@@ -201,15 +243,16 @@ typedef struct domrid3_info
        uint32 type1;      /* value is 0x1 */
        uint32 ptr_type;   /* undocumented pointer */
        uint32 type2;      /* value is 0x1 */
+       uint32 unk; /* value is 0x2 */
 
 } DOM_RID3;
 
 /* DOM_RID4 - rid + user attributes */
 typedef struct domrid4_info
 {
-       uint32 unknown;      
-       uint16 attr;
-       uint32 rid;  /* user RID */
+  uint32 unknown;
+  uint16 attr;
+  uint32 rid;  /* user RID */
 
 } DOM_RID4;
 
@@ -234,6 +277,19 @@ typedef struct log_info
 
 } DOM_LOG_INFO;
 
+/* DOM_CHAL - challenge info */
+typedef struct chal_info
+{
+    uchar data[8]; /* credentials */
+} DOM_CHAL;
+/* DOM_CREDs - timestamped client or server credentials */
+typedef struct cred_info
+{
+    DOM_CHAL challenge; /* credentials */
+    UTIME timestamp;    /* credential time-stamp */
+} DOM_CRED;
+
 /* DOM_CLNT_INFO - client info */
 typedef struct clnt_info
 {
@@ -275,14 +331,83 @@ typedef struct gid_info
 
 } DOM_GID;
 
-#define POL_HND_SIZE 20
-
 /* POLICY_HND */
 typedef struct lsa_policy_info
 {
-  uint8 data[POL_HND_SIZE]; /* policy handle */
+       uint32 data1;
+       uint32 data2;
+       uint16 data3;
+       uint16 data4;
+       uint8 data5[8];
+
+#ifdef __INSURE__
+
+       /* To prevent the leakage of policy handles mallocate a bit of
+          memory when a policy handle is created and free it when the
+          handle is closed.  This should cause Insure to flag an error
+          when policy handles are overwritten or fall out of scope without
+          being freed. */
+
+       char *marker;
+#endif
 
 } POLICY_HND;
 
-#endif /* _RPC_MISC_H */
+/*
+ * A client connection's state, pipe name, 
+ * user credentials, etc...
+ */
+typedef struct _cli_auth_fns cli_auth_fns;
+struct user_creds;
+struct cli_connection {
+
+        char                    *srv_name;
+        char                    *pipe_name;
+        struct user_creds       usr_creds;
+
+        struct cli_state        *pCli_state;
+
+        cli_auth_fns            *auth;
+
+        void                    *auth_info;
+        void                    *auth_creds;
+};
+
+
+/* 
+ * Associate a POLICY_HND with a cli_connection
+ */
+typedef struct rpc_hnd_node {
+
+       POLICY_HND              hnd;
+       struct cli_connection   *cli;
 
+} RPC_HND_NODE;
+
+typedef struct uint64_s
+{
+       uint32 low;
+       uint32 high;
+} UINT64_S;
+
+/* BUFHDR2 - another buffer header, with info level */
+typedef struct bufhdr2_info
+{
+       uint32 info_level;
+       uint32 length;          /* uint8 chars */
+       uint32 buffer;
+
+}
+BUFHDR2;
+
+/* BUFFER4 - simple length and buffer */
+typedef struct buffer4_info
+{
+       uint32 buf_len;
+       uint8 buffer[MAX_BUFFERLEN];
+
+}
+BUFFER4;
+
+
+#endif /* _RPC_MISC_H */