s4-irpc: Added internal rpc call DREPL_TAKEFSMOROLE
authorNadezhda Ivanova <nivanova@samba.org>
Tue, 24 Aug 2010 21:26:28 +0000 (00:26 +0300)
committerNadezhda Ivanova <nivanova@samba.org>
Tue, 24 Aug 2010 21:30:22 +0000 (00:30 +0300)
It schedules a getncchanges with extended op 6, to be used when a modify request on
becomeROLEMaster atteibute on rootDSE is received.

source4/dsdb/repl/drepl_service.c

index 652c16fda4a3322f298b104aa25b249799a800eb..191acca4d8b96b3ce66d575fa3dfd7a3055a9440 100644 (file)
@@ -31,6 +31,7 @@
 #include "librpc/gen_ndr/ndr_misc.h"
 #include "librpc/gen_ndr/ndr_drsuapi.h"
 #include "librpc/gen_ndr/ndr_drsblobs.h"
+#include "librpc/gen_ndr/ndr_irpc.h"
 #include "param/param.h"
 
 static WERROR dreplsrv_init_creds(struct dreplsrv_service *service)
@@ -57,7 +58,6 @@ static WERROR dreplsrv_connect_samdb(struct dreplsrv_service *service, struct lo
        if (!ntds_guid) {
                return WERR_DS_UNAVAILABLE;
        }
-
        service->ntds_guid = *ntds_guid;
 
        bind_info28                             = &service->bind_info28;
@@ -127,6 +127,15 @@ static NTSTATUS drepl_replica_sync(struct irpc_message *msg,
        return NT_STATUS_OK;
 }
 
+static NTSTATUS drepl_take_FSMO_role(struct irpc_message *msg,
+                                    struct drepl_takeFSMORole *r)
+{
+       struct dreplsrv_service *service = talloc_get_type(msg->private_data,
+                                                          struct dreplsrv_service);
+       r->out.result = werror_to_ntstatus(dreplsrv_fsmo_role_check(service, r->in.role));
+       return NT_STATUS_OK;
+}
+
 /*
   startup the dsdb replicator service task
 */
@@ -215,6 +224,7 @@ static void dreplsrv_task_init(struct task_server *task)
        irpc_add_name(task->msg_ctx, "dreplsrv");
 
        IRPC_REGISTER(task->msg_ctx, drsuapi, DRSUAPI_DSREPLICASYNC, drepl_replica_sync, service);
+       IRPC_REGISTER(task->msg_ctx, irpc, DREPL_TAKEFSMOROLE, drepl_take_FSMO_role, service);
        messaging_register(task->msg_ctx, service, MSG_DREPL_ALLOCATE_RID, dreplsrv_allocate_rid);
 }