2
Unix SMB/CIFS mplementation.
3
DSDB replication service
5
Copyright (C) Stefan Metzmacher 2007
7
This program is free software; you can redistribute it and/or modify
8
it under the terms of the GNU General Public License as published by
9
the Free Software Foundation; either version 3 of the License, or
10
(at your option) any later version.
12
This program is distributed in the hope that it will be useful,
13
but WITHOUT ANY WARRANTY; without even the implied warranty of
14
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
GNU General Public License for more details.
17
You should have received a copy of the GNU General Public License
18
along with this program. If not, see <http://www.gnu.org/licenses/>.
22
#ifndef _DSDB_REPL_DREPL_SERVICE_H_
23
#define _DSDB_REPL_DREPL_SERVICE_H_
25
#include "librpc/gen_ndr/ndr_drsuapi_c.h"
27
struct dreplsrv_service;
28
struct dreplsrv_partition;
30
struct dreplsrv_drsuapi_connection {
32
* this pipe pointer is also the indicator
33
* for a valid connection
35
struct dcerpc_pipe *pipe;
37
DATA_BLOB gensec_skey;
38
struct drsuapi_DsBindInfo28 remote_info28;
39
struct policy_handle bind_handle;
42
struct dreplsrv_out_connection {
43
struct dreplsrv_out_connection *prev, *next;
45
struct dreplsrv_service *service;
48
* the binding for the outgoing connection
50
struct dcerpc_binding *binding;
52
/* the out going connection to the source dsa */
53
struct dreplsrv_drsuapi_connection *drsuapi;
56
struct dreplsrv_partition_source_dsa {
57
struct dreplsrv_partition_source_dsa *prev, *next;
59
struct dreplsrv_partition *partition;
62
* the cached repsFrom value for this source dsa
64
* it needs to be updated after each DsGetNCChanges() call
67
* repsFrom1 == &_repsFromBlob.ctr.ctr1
69
struct repsFromToBlob _repsFromBlob;
70
struct repsFromTo1 *repsFrom1;
72
/* the reference to the source_dsa and its outgoing connection */
73
struct dreplsrv_out_connection *conn;
76
struct dreplsrv_partition {
77
struct dreplsrv_partition *prev, *next;
79
struct dreplsrv_service *service;
81
/* the dn of the partition */
83
struct drsuapi_DsReplicaObjectIdentifier nc;
86
* uptodate vector needs to be updated before and after each DsGetNCChanges() call
88
* - before: we need to use our own invocationId together with our highestCommitedUsn
89
* - after: we need to merge in the remote uptodatevector, to avoid reading it again
91
struct replUpToDateVectorCtr2 uptodatevector;
92
struct drsuapi_DsReplicaCursorCtrEx uptodatevector_ex;
95
* a linked list of all source dsa's we replicate from
97
struct dreplsrv_partition_source_dsa *sources;
100
struct dreplsrv_out_operation {
101
struct dreplsrv_out_operation *prev, *next;
103
struct dreplsrv_service *service;
105
struct dreplsrv_partition_source_dsa *source_dsa;
107
struct composite_context *creq;
110
struct dreplsrv_service {
111
/* the whole drepl service is in one task */
112
struct task_server *task;
114
/* the time the service was started */
115
struct timeval startup_time;
118
* system session info
119
* with machine account credentials
121
struct auth_session_info *system_session_info;
124
* a connection to the local samdb
126
struct ldb_context *samdb;
128
/* the guid of our NTDS Settings object, which never changes! */
129
struct GUID ntds_guid;
131
* the struct holds the values used for outgoing DsBind() calls,
132
* so that we need to set them up only once
134
struct drsuapi_DsBindInfo28 bind_info28;
136
/* some stuff for periodic processing */
139
* the interval between to periodic runs
144
* the timestamp for the next event,
145
* this is the timstamp passed to event_add_timed()
147
struct timeval next_event;
149
/* here we have a reference to the timed event the schedules the periodic stuff */
150
struct tevent_timer *te;
154
* the list of partitions we need to replicate
156
struct dreplsrv_partition *partitions;
159
* the list of cached connections
161
struct dreplsrv_out_connection *connections;
164
/* the pointer to the current active operation */
165
struct dreplsrv_out_operation *current;
167
/* the list of pending operations */
168
struct dreplsrv_out_operation *pending;
172
#include "dsdb/repl/drepl_out_helpers.h"
173
#include "dsdb/repl/drepl_service_proto.h"
175
#endif /* _DSDB_REPL_DREPL_SERVICE_H_ */