summaryrefslogtreecommitdiff
path: root/source3/include/rpc_ds.h
blob: 6701b68bfaecfc468b8b16f95b6ab5d5b61bb8dc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
/* 
   Unix SMB/CIFS implementation.
   SMB parameters and setup
   Copyright (C) Gerald Carter			2002
      
   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 3 of the License, or
   (at your option) any later version.
   
   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.
   
   You should have received a copy of the GNU General Public License
   along with this program; if not, write to the Free Software
   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/

#ifndef _RPC_DS_H /* _RPC_LSA_H */
#define _RPC_DS_H 

/* Opcodes available on PIPE_LSARPC_DS */

#define DS_GETPRIMDOMINFO      0x00
#define DS_NOP                 0xFF	/* no op -- placeholder */

/* Opcodes available on PIPE_NETLOGON */

#define DS_ENUM_DOM_TRUSTS      0x28

/* macros for RPC's */

/* DSROLE_PRIMARY_DOMAIN_INFO_BASIC */

/* flags */

#define DSROLE_PRIMARY_DS_RUNNING           0x00000001
#define DSROLE_PRIMARY_DS_MIXED_MODE        0x00000002
#define DSROLE_UPGRADE_IN_PROGRESS          0x00000004
#define DSROLE_PRIMARY_DOMAIN_GUID_PRESENT  0x01000000

/* machine role */

#define DSROLE_DOMAIN_MEMBER_WKS	1
#define DSROLE_STANDALONE_SRV		2	
#define DSROLE_DOMAIN_MEMBER_SRV	3
#define DSROLE_BDC			4
#define DSROLE_PDC			5

/* Settings for the domainFunctionality attribute in the rootDSE */

#define DS_DOMAIN_FUNCTION_2000		0
#define DS_DOMAIN_FUCNTION_2003_MIXED	1
#define DS_DOMAIN_FUNCTION_2003		2

typedef struct
{
	uint16		machine_role;
	uint32		flags;	
	uint32		netbios_ptr;
	uint32		dnsname_ptr;
	uint32		forestname_ptr;
	
	struct GUID	domain_guid;	
	UNISTR2	netbios_domain;
	UNISTR2	dns_domain;	/* our dns domain */
	UNISTR2	forest_domain;	/* root domain of the forest to which we belong */
} DSROLE_PRIMARY_DOMAIN_INFO_BASIC;

typedef struct
{
	DSROLE_PRIMARY_DOMAIN_INFO_BASIC	*basic;
} DS_DOMINFO_CTR;

/* info levels for ds_getprimdominfo() */

#define DsRolePrimaryDomainInfoBasic		1

/* DS_Q_GETPRIMDOMINFO - DsGetPrimaryDomainInformation() request */
typedef struct 
{
	uint16	level;
} DS_Q_GETPRIMDOMINFO;

/* DS_R_GETPRIMDOMINFO - DsGetPrimaryDomainInformation() response */
typedef struct 
{
	uint32		ptr;
		
	uint16		level;
	uint16		unknown0;	/* 0x455c -- maybe just alignment? */

	DS_DOMINFO_CTR	info;
	
	NTSTATUS status;
} DS_R_GETPRIMDOMINFO;

typedef struct {
	/* static portion of structure */
	uint32		netbios_ptr;
	uint32		dns_ptr;
	uint32		flags;
	uint32		parent_index;
	uint32		trust_type;
	uint32		trust_attributes;
	uint32		sid_ptr;
	struct GUID	guid;
	
	UNISTR2		netbios_domain;
	UNISTR2		dns_domain;
	DOM_SID2	sid;

} DS_DOMAIN_TRUSTS;

struct ds_domain_trust {
	/* static portion of structure */
	uint32		flags;
	uint32		parent_index;
	uint32		trust_type;
	uint32		trust_attributes;
	struct GUID	guid;
	
	DOM_SID	sid;
	char *netbios_domain;
	char *dns_domain;
};

typedef struct {

	uint32			ptr;
	uint32			max_count;
	DS_DOMAIN_TRUSTS 	*trusts;
	
} DS_DOMAIN_TRUSTS_CTR;

/* Trust flags */

#define DS_DOMAIN_IN_FOREST           0x0001 	/* domains in the forest to which 
						   we belong; even different domain trees */
#define DS_DOMAIN_DIRECT_OUTBOUND     0x0002  	/* trusted domains */
#define DS_DOMAIN_TREE_ROOT           0x0004  	/* root of a forest */
#define DS_DOMAIN_PRIMARY             0x0008  	/* our domain */
#define DS_DOMAIN_NATIVE_MODE         0x0010  	/* native mode AD servers */
#define DS_DOMAIN_DIRECT_INBOUND      0x0020 	/* trusting domains */

/* Trust types */

#define DS_DOMAIN_TRUST_TYPE_DOWNLEVEL   0x00000001
#define DS_DOMAIN_TRUST_TYPE_UPLEVEL     0x00000002

/* Trust attributes */

#define DS_DOMAIN_TRUST_ATTRIB_NON_TRANSITIVE         0x00000001
#define DS_DOMAIN_TRUST_ATTRIB_UPLEVEL_ONLY           0x00000002            
#define DS_DOMAIN_TRUST_ATTRIB_QUARANTINED_DOMAIN     0x00000004            
#define DS_DOMAIN_TRUST_ATTRIB_FOREST_TRANSITIVE      0x00000008            
#define DS_DOMAIN_TRUST_ATTRIB_CROSS_ORG              0x00000010            
#define DS_DOMAIN_TRUST_ATTRIB_IN_FOREST              0x00000020            
#define DS_DOMAIN_TRUST_ATTRIB_EXTERNAL               0x00000040            



/* DS_Q_ENUM_DOM_TRUSTS - DsEnumerateDomainTrusts() request */
typedef struct 
{
	uint32		server_ptr;
	UNISTR2		server;
	uint32		flags;
	
} DS_Q_ENUM_DOM_TRUSTS;

/* DS_R_ENUM_DOM_TRUSTS - DsEnumerateDomainTrusts() response */
typedef struct 
{
	uint32			num_domains;
	DS_DOMAIN_TRUSTS_CTR	domains;
		
	NTSTATUS status;

} DS_R_ENUM_DOM_TRUSTS;


#endif /* _RPC_DS_H */