summaryrefslogtreecommitdiff
path: root/source4/libnet/libnet_become_dc.h
blob: b3b08bd9b9b457e4f7928ad9151e120dbda2c72c (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
/*
   Unix SMB/CIFS implementation.

   Copyright (C) Stefan Metzmacher <metze@samba.org> 2006

   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, see <http://www.gnu.org/licenses/>.
*/

#ifndef _LIBNET_BECOME_DC_H
#define _LIBNET_BECOME_DC_H

#include "librpc/gen_ndr/drsuapi.h"

struct libnet_BecomeDC_Domain {
	/* input */
	const char *dns_name;
	const char *netbios_name;
	const struct dom_sid *sid;

	/* constructed */
	struct GUID guid;
	const char *dn_str;
	uint32_t behavior_version;
	uint32_t w2k3_update_revision;
};

struct libnet_BecomeDC_Forest {
	/* constructed */
	const char *dns_name;
	const char *root_dn_str;
	const char *config_dn_str;
	uint32_t crossref_behavior_version;
	const char *schema_dn_str;
	uint32_t schema_object_version;
};

struct libnet_BecomeDC_SourceDSA {
	/* input */
	const char *address;

	/* constructed */
	const char *dns_name;
	const char *netbios_name;
	const char *site_name;
	const char *server_dn_str;
	const char *ntds_dn_str;
};

struct libnet_BecomeDC_CheckOptions {
	const struct libnet_BecomeDC_Domain *domain;
	const struct libnet_BecomeDC_Forest *forest;
	const struct libnet_BecomeDC_SourceDSA *source_dsa;
};

struct libnet_BecomeDC_DestDSA {
	/* input */
	const char *netbios_name;

	/* constructed */
	const char *dns_name;
	const char *site_name;
	struct GUID site_guid;
	const char *computer_dn_str;
	const char *server_dn_str;
	const char *ntds_dn_str;
	struct GUID ntds_guid;
	struct GUID invocation_id;
	uint32_t user_account_control;
};

struct libnet_BecomeDC_PrepareDB {
	const struct libnet_BecomeDC_Domain *domain;
	const struct libnet_BecomeDC_Forest *forest;
	const struct libnet_BecomeDC_SourceDSA *source_dsa;
	const struct libnet_BecomeDC_DestDSA *dest_dsa;
};

struct libnet_BecomeDC_StoreChunk;

struct libnet_BecomeDC_Partition {
	struct drsuapi_DsReplicaObjectIdentifier nc;
	struct GUID destination_dsa_guid;
	struct GUID source_dsa_guid;
	struct GUID source_dsa_invocation_id;
	struct drsuapi_DsReplicaHighWaterMark highwatermark;
	bool more_data;
	uint32_t replica_flags;

	NTSTATUS (*store_chunk)(void *private_data,
				const struct libnet_BecomeDC_StoreChunk *info);
};

struct libnet_BecomeDC_StoreChunk {
	const struct libnet_BecomeDC_Domain *domain;
	const struct libnet_BecomeDC_Forest *forest;
	const struct libnet_BecomeDC_SourceDSA *source_dsa;
	const struct libnet_BecomeDC_DestDSA *dest_dsa;
	const struct libnet_BecomeDC_Partition *partition;
	uint32_t req_level;
	const struct drsuapi_DsGetNCChangesRequest5 *req5;
	const struct drsuapi_DsGetNCChangesRequest8 *req8;
	const struct drsuapi_DsGetNCChangesRequest10 *req10;
	uint32_t ctr_level;
	const struct drsuapi_DsGetNCChangesCtr1 *ctr1;
	const struct drsuapi_DsGetNCChangesCtr6 *ctr6;
	const DATA_BLOB *gensec_skey;
};

struct libnet_BecomeDC_Callbacks {
	void *private_data;
	NTSTATUS (*check_options)(void *private_data,
				  const struct libnet_BecomeDC_CheckOptions *info);
	NTSTATUS (*prepare_db)(void *private_data,
			       const struct libnet_BecomeDC_PrepareDB *info);
	NTSTATUS (*schema_chunk)(void *private_data,
				 const struct libnet_BecomeDC_StoreChunk *info);
	NTSTATUS (*config_chunk)(void *private_data,
				 const struct libnet_BecomeDC_StoreChunk *info);
	NTSTATUS (*domain_chunk)(void *private_data,
				 const struct libnet_BecomeDC_StoreChunk *info);
};

struct libnet_BecomeDC {
	struct {
		const char *domain_dns_name;
		const char *domain_netbios_name;
		const struct dom_sid *domain_sid;
		const char *source_dsa_address;
		const char *dest_dsa_netbios_name;

		struct libnet_BecomeDC_Callbacks callbacks;

                bool rodc_join;
        } in;

	struct {
		const char *error_string;
	} out;
};

#endif /* _LIBNET_BECOME_DC_H */