r4452: the beginnings of a dssetup rpc server.
authorAndrew Tridgell <tridge@samba.org>
Fri, 31 Dec 2004 11:37:26 +0000 (11:37 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 18:07:52 +0000 (13:07 -0500)
(This used to be commit 1c2170ae21d60c22ee3053fbf249dba59de576ba)

source4/librpc/idl/dssetup.idl
source4/param/loadparm.c
source4/rpc_server/config.mk
source4/rpc_server/dssetup/dcesrv_dssetup.c [new file with mode: 0644]

index 17288e5791aafc25d94802a0e9621d1c09e6eb3e..dc57e86a112e0a40076c01e20cfa2878c58db8a0 100644 (file)
        } ds_DomainBasicInformation;
        
        typedef union {
-               [case(1)] ds_DomainBasicInformation info1;
+               [case(1)] ds_DomainBasicInformation basic;
        } ds_DomainInformation;
 
-       NTSTATUS ds_RolerGetPrimaryDomainInformation(
+       WERROR ds_RolerGetPrimaryDomainInformation(
                [in] uint16 level,
                [out,switch_is(level)] ds_DomainInformation *info
                );
 
 
-       NTSTATUS ds_RolerDnsNameToFlatName();
-       NTSTATUS ds_RolerDcAsDc();
-       NTSTATUS ds_RolerDcAsReplica();
-       NTSTATUS ds_RolerDemoteDc();
-       NTSTATUS ds_RolerGetDcOperationProgress();
-       NTSTATUS ds_RolerGetDcOperationResults();
-       NTSTATUS ds_RolerCancel();
-       NTSTATUS ds_RolerServerSaveStateForUpgrade();
-       NTSTATUS ds_RolerUpgradeDownlevelServer();
-       NTSTATUS ds_RolerAbortDownlevelServerUpgrade();
+       WERROR ds_RolerDnsNameToFlatName();
+       WERROR ds_RolerDcAsDc();
+       WERROR ds_RolerDcAsReplica();
+       WERROR ds_RolerDemoteDc();
+       WERROR ds_RolerGetDcOperationProgress();
+       WERROR ds_RolerGetDcOperationResults();
+       WERROR ds_RolerCancel();
+       WERROR ds_RolerServerSaveStateForUpgrade();
+       WERROR ds_RolerUpgradeDownlevelServer();
+       WERROR ds_RolerAbortDownlevelServerUpgrade();
 }
index 405caf6fc4eb547f8e6099594b284cbfcbd906ee..70caf62ff2f03302fbb165f9549dfa5ee92e861f 100644 (file)
@@ -926,7 +926,7 @@ static void init_globals(void)
        do_parameter("ntvfs handler", "unixuid default");
        do_parameter("max connections", "-1");
 
-       do_parameter("dcerpc endpoint servers", "epmapper srvsvc wkssvc rpcecho samr netlogon lsarpc spoolss drsuapi winreg IOXIDResolver IRemoteActivation");
+       do_parameter("dcerpc endpoint servers", "epmapper srvsvc wkssvc rpcecho samr netlogon lsarpc spoolss drsuapi winreg IOXIDResolver IRemoteActivation dssetup");
        do_parameter("server services", "smb rpc");
        do_parameter("auth methods", "anonymous sam_ignoredomain");
        do_parameter("smb passwd file", dyn_SMB_PASSWD_FILE);
index 21c63282fe94a709ffa415cbffbebaceb3648fba..929cc52db60698a4ef247572afd57b7f60d5434d 100644 (file)
@@ -183,6 +183,20 @@ REQUIRED_SUBSYSTEMS = \
 # End MODULE dcerpc_drsuapi
 ################################################
 
+################################################
+# Start MODULE dcerpc_dssetup
+[MODULE::dcerpc_dssetup]
+INIT_FUNCTION = dcerpc_server_dssetup_init
+SUBSYSTEM = DCERPC
+INIT_OBJ_FILES = \
+               rpc_server/dssetup/dcesrv_dssetup.o
+REQUIRED_SUBSYSTEMS = \
+               SAMDB \
+               DCERPC_COMMON \
+               NDR_DSSETUP
+# End MODULE dcerpc_dssetup
+################################################
+
 ################################################
 # Start SUBSYSTEM DCERPC
 [SUBSYSTEM::DCERPC]
diff --git a/source4/rpc_server/dssetup/dcesrv_dssetup.c b/source4/rpc_server/dssetup/dcesrv_dssetup.c
new file mode 100644 (file)
index 0000000..4bc28bc
--- /dev/null
@@ -0,0 +1,177 @@
+/* 
+   Unix SMB/CIFS implementation.
+
+   endpoint server for the dssetup pipe
+
+   Copyright (C) Andrew Tridgell 2004
+   
+   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 2 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.
+*/
+
+#include "includes.h"
+#include "rpc_server/dcerpc_server.h"
+#include "librpc/gen_ndr/ndr_dssetup.h"
+#include "rpc_server/common/common.h"
+
+
+/* 
+  ds_RolerGetPrimaryDomainInformation 
+*/
+static WERROR ds_RolerGetPrimaryDomainInformation(struct dcesrv_call_state *dce_call, 
+                                                 TALLOC_CTX *mem_ctx,
+                                                 struct ds_RolerGetPrimaryDomainInformation *r)
+{
+       WERROR err = WERR_OK;
+       void *sam_ctx;
+       const char * const attrs[] = { "dnsDomain", "objectGUID", "name", NULL };
+       int ret;
+       struct ldb_message **res;
+
+       sam_ctx = samdb_connect(mem_ctx);
+       if (sam_ctx == NULL) {
+               return WERR_SERVER_UNAVAILABLE;
+       }
+
+       ret = samdb_search(sam_ctx, mem_ctx, NULL, &res, attrs,
+                          "(&(objectClass=domainDNS)(!(objectClass=builtinDomain)))");
+       if (ret != 1) {
+               return WERR_SERVER_UNAVAILABLE;
+       }
+
+       switch (r->in.level) {
+       case 1:
+               r->out.info = talloc_p(mem_ctx, union ds_DomainInformation);
+               if (r->out.info == NULL) {
+                       return WERR_NOMEM;
+               }
+               r->out.info->basic.role = 5;
+               r->out.info->basic.flags = 0x01000003;
+               r->out.info->basic.domain = samdb_result_string(res[0], "name", NULL);
+               r->out.info->basic.dns_domain = samdb_result_string(res[0], "dnsDomain", NULL);
+               r->out.info->basic.forest = samdb_result_string(res[0], "dnsDomain", NULL);
+               r->out.info->basic.domain_guid = samdb_result_guid(res[0], "objectGUID");
+               break;
+
+       default:
+               err = WERR_INVALID_PARAM;
+               break;
+       }
+
+       return err;
+}
+
+
+/* 
+  ds_RolerDnsNameToFlatName 
+*/
+static WERROR ds_RolerDnsNameToFlatName(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
+                      struct ds_RolerDnsNameToFlatName *r)
+{
+       DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
+}
+
+
+/* 
+  ds_RolerDcAsDc 
+*/
+static WERROR ds_RolerDcAsDc(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
+                      struct ds_RolerDcAsDc *r)
+{
+       DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
+}
+
+
+/* 
+  ds_RolerDcAsReplica 
+*/
+static WERROR ds_RolerDcAsReplica(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
+                      struct ds_RolerDcAsReplica *r)
+{
+       DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
+}
+
+
+/* 
+  ds_RolerDemoteDc 
+*/
+static WERROR ds_RolerDemoteDc(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
+                      struct ds_RolerDemoteDc *r)
+{
+       DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
+}
+
+
+/* 
+  ds_RolerGetDcOperationProgress 
+*/
+static WERROR ds_RolerGetDcOperationProgress(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
+                      struct ds_RolerGetDcOperationProgress *r)
+{
+       DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
+}
+
+
+/* 
+  ds_RolerGetDcOperationResults 
+*/
+static WERROR ds_RolerGetDcOperationResults(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
+                      struct ds_RolerGetDcOperationResults *r)
+{
+       DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
+}
+
+
+/* 
+  ds_RolerCancel 
+*/
+static WERROR ds_RolerCancel(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
+                      struct ds_RolerCancel *r)
+{
+       DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
+}
+
+
+/* 
+  ds_RolerServerSaveStateForUpgrade 
+*/
+static WERROR ds_RolerServerSaveStateForUpgrade(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
+                      struct ds_RolerServerSaveStateForUpgrade *r)
+{
+       DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
+}
+
+
+/* 
+  ds_RolerUpgradeDownlevelServer 
+*/
+static WERROR ds_RolerUpgradeDownlevelServer(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
+                      struct ds_RolerUpgradeDownlevelServer *r)
+{
+       DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
+}
+
+
+/* 
+  ds_RolerAbortDownlevelServerUpgrade 
+*/
+static WERROR ds_RolerAbortDownlevelServerUpgrade(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
+                      struct ds_RolerAbortDownlevelServerUpgrade *r)
+{
+       DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
+}
+
+
+/* include the generated boilerplate */
+#include "librpc/gen_ndr/ndr_dssetup_s.c"