root/source4/dsdb/repl/drepl_service.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   1 /* 
   2    Unix SMB/CIFS mplementation.
   3    DSDB replication service
   4    
   5    Copyright (C) Stefan Metzmacher 2007
   6     
   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.
  11    
  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.
  16    
  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/>.
  19    
  20 */
  21 
  22 #ifndef _DSDB_REPL_DREPL_SERVICE_H_
  23 #define _DSDB_REPL_DREPL_SERVICE_H_
  24 
  25 #include "librpc/gen_ndr/ndr_drsuapi_c.h"
  26 
  27 struct dreplsrv_service;
  28 struct dreplsrv_partition;
  29 
  30 struct dreplsrv_drsuapi_connection {
  31         /*
  32          * this pipe pointer is also the indicator
  33          * for a valid connection
  34          */
  35         struct dcerpc_pipe *pipe;
  36 
  37         DATA_BLOB gensec_skey;
  38         struct drsuapi_DsBindInfo28 remote_info28;
  39         struct policy_handle bind_handle;
  40 };
  41 
  42 struct dreplsrv_out_connection {
  43         struct dreplsrv_out_connection *prev, *next;
  44 
  45         struct dreplsrv_service *service;
  46 
  47         /*
  48          * the binding for the outgoing connection
  49          */
  50         struct dcerpc_binding *binding;
  51 
  52         /* the out going connection to the source dsa */
  53         struct dreplsrv_drsuapi_connection *drsuapi;
  54 };
  55 
  56 struct dreplsrv_partition_source_dsa {
  57         struct dreplsrv_partition_source_dsa *prev, *next;
  58 
  59         struct dreplsrv_partition *partition;
  60 
  61         /*
  62          * the cached repsFrom value for this source dsa
  63          *
  64          * it needs to be updated after each DsGetNCChanges() call
  65          * to the source dsa
  66          *
  67          * repsFrom1 == &_repsFromBlob.ctr.ctr1
  68          */
  69         struct repsFromToBlob _repsFromBlob;
  70         struct repsFromTo1 *repsFrom1;
  71 
  72         /* the reference to the source_dsa and its outgoing connection */
  73         struct dreplsrv_out_connection *conn;
  74 };
  75 
  76 struct dreplsrv_partition {
  77         struct dreplsrv_partition *prev, *next;
  78 
  79         struct dreplsrv_service *service;
  80 
  81         /* the dn of the partition */
  82         struct ldb_dn *dn;
  83         struct drsuapi_DsReplicaObjectIdentifier nc;
  84 
  85         /* 
  86          * uptodate vector needs to be updated before and after each DsGetNCChanges() call
  87          *
  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
  90          */
  91         struct replUpToDateVectorCtr2 uptodatevector;
  92         struct drsuapi_DsReplicaCursorCtrEx uptodatevector_ex;
  93 
  94         /*
  95          * a linked list of all source dsa's we replicate from
  96          */
  97         struct dreplsrv_partition_source_dsa *sources;
  98 };
  99 
 100 struct dreplsrv_out_operation {
 101         struct dreplsrv_out_operation *prev, *next;
 102 
 103         struct dreplsrv_service *service;
 104 
 105         struct dreplsrv_partition_source_dsa *source_dsa;
 106 
 107         struct composite_context *creq;
 108 };
 109 
 110 struct dreplsrv_service {
 111         /* the whole drepl service is in one task */
 112         struct task_server *task;
 113 
 114         /* the time the service was started */
 115         struct timeval startup_time;
 116 
 117         /* 
 118          * system session info
 119          * with machine account credentials
 120          */
 121         struct auth_session_info *system_session_info;
 122 
 123         /*
 124          * a connection to the local samdb
 125          */
 126         struct ldb_context *samdb;
 127 
 128         /* the guid of our NTDS Settings object, which never changes! */
 129         struct GUID ntds_guid;
 130         /*
 131          * the struct holds the values used for outgoing DsBind() calls,
 132          * so that we need to set them up only once
 133          */
 134         struct drsuapi_DsBindInfo28 bind_info28;
 135 
 136         /* some stuff for periodic processing */
 137         struct {
 138                 /*
 139                  * the interval between to periodic runs
 140                  */
 141                 uint32_t interval;
 142 
 143                 /*
 144                  * the timestamp for the next event,
 145                  * this is the timstamp passed to event_add_timed()
 146                  */
 147                 struct timeval next_event;
 148 
 149                 /* here we have a reference to the timed event the schedules the periodic stuff */
 150                 struct tevent_timer *te;
 151         } periodic;
 152 
 153         /*
 154          * the list of partitions we need to replicate
 155          */
 156         struct dreplsrv_partition *partitions;
 157 
 158         /*
 159          * the list of cached connections
 160          */
 161         struct dreplsrv_out_connection *connections;
 162 
 163         struct {        
 164                 /* the pointer to the current active operation */
 165                 struct dreplsrv_out_operation *current;
 166 
 167                 /* the list of pending operations */
 168                 struct dreplsrv_out_operation *pending;
 169         } ops;
 170 };
 171 
 172 #include "dsdb/repl/drepl_out_helpers.h"
 173 #include "dsdb/repl/drepl_service_proto.h"
 174 
 175 #endif /* _DSDB_REPL_DREPL_SERVICE_H_ */

/* [<][>][^][v][top][bottom][index][help] */