[SCM] Samba Shared Repository - branch master updated - 6c9b0298a99ba14d832b30d9396bed64ae4ebd3e

Stefan Metzmacher metze at samba.org
Thu Dec 4 12:03:43 GMT 2008


The branch, master has been updated
       via  6c9b0298a99ba14d832b30d9396bed64ae4ebd3e (commit)
       via  e9d1c3e7eab7cbc14fa54d7df1ae7da52d483a7c (commit)
       via  9d44600470e2f2444a09d91d5d6b36515454c919 (commit)
       via  885a1be8b932a212b6234a2a0c990975eb16e9e8 (commit)
      from  2b8f3e253d3a56aac996287f5ce265d0c915b3c8 (commit)

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 6c9b0298a99ba14d832b30d9396bed64ae4ebd3e
Author: Stefan Metzmacher <metze at samba.org>
Date:   Thu Dec 4 12:47:43 2008 +0100

    s4:selftest: we have netr_GetDcName() and netr_GetAnyDCName() implementations now
    
    metze

commit e9d1c3e7eab7cbc14fa54d7df1ae7da52d483a7c
Author: Stefan Metzmacher <metze at samba.org>
Date:   Thu Dec 4 12:46:30 2008 +0100

    RAW-NETLOGON: check netr_GetAnyDCName() result
    
    metze

commit 9d44600470e2f2444a09d91d5d6b36515454c919
Author: Stefan Metzmacher <metze at samba.org>
Date:   Thu Dec 4 12:03:01 2008 +0100

    s4:netlogon: for now implement netr_GetAnyDCName() as wrapper of netr_GetDcName()
    
    metze

commit 885a1be8b932a212b6234a2a0c990975eb16e9e8
Author: Stefan Metzmacher <metze at samba.org>
Date:   Thu Dec 4 11:56:51 2008 +0100

    s4:netlogon: Implement netr_GetDcName() similar to netr_DsGetDCName()
    
    metze

-----------------------------------------------------------------------

Summary of changes:
 source4/rpc_server/netlogon/dcerpc_netlogon.c |   48 +++++++++++++++++++++++-
 source4/selftest/knownfail                    |    2 -
 source4/torture/rpc/netlogon.c                |    1 +
 3 files changed, 47 insertions(+), 4 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source4/rpc_server/netlogon/dcerpc_netlogon.c b/source4/rpc_server/netlogon/dcerpc_netlogon.c
index ccc1fc5..2806802 100644
--- a/source4/rpc_server/netlogon/dcerpc_netlogon.c
+++ b/source4/rpc_server/netlogon/dcerpc_netlogon.c
@@ -803,7 +803,40 @@ static NTSTATUS dcesrv_netr_AccountSync(struct dcesrv_call_state *dce_call, TALL
 static WERROR dcesrv_netr_GetDcName(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
 		       struct netr_GetDcName *r)
 {
-	DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
+	const char * const attrs[] = { NULL };
+	void *sam_ctx;
+	struct ldb_message **res;
+	struct ldb_dn *domain_dn;
+	int ret;
+	const char *dcname;
+
+	sam_ctx = samdb_connect(mem_ctx, dce_call->event_ctx,
+				dce_call->conn->dce_ctx->lp_ctx,
+				dce_call->conn->auth_state.session_info);
+	if (sam_ctx == NULL) {
+		return WERR_DS_SERVICE_UNAVAILABLE;
+	}
+
+	domain_dn = samdb_domain_to_dn(sam_ctx, mem_ctx,
+				       r->in.domainname);
+	if (domain_dn == NULL) {
+		return WERR_DS_SERVICE_UNAVAILABLE;
+	}
+
+	ret = gendb_search_dn(sam_ctx, mem_ctx, domain_dn, &res, attrs);
+	if (ret != 1) {
+		return WERR_NO_SUCH_DOMAIN;
+	}
+
+	/* TODO: - return real IP address
+	 *       - check all r->in.* parameters (server_unc is ignored by w2k3!)
+	 */
+	dcname = talloc_asprintf(mem_ctx, "\\\\%s",
+				 lp_netbios_name(dce_call->conn->dce_ctx->lp_ctx));
+	W_ERROR_HAVE_NO_MEMORY(dcname);
+
+	*r->out.dcname = dcname;
+	return WERR_OK;
 }
 
 
@@ -823,7 +856,18 @@ static WERROR dcesrv_netr_LogonControl(struct dcesrv_call_state *dce_call, TALLO
 static WERROR dcesrv_netr_GetAnyDCName(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
 		       struct netr_GetAnyDCName *r)
 {
-	DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
+	struct netr_GetDcName r2;
+	WERROR werr;
+
+	ZERO_STRUCT(r2);
+
+	r2.in.logon_server	= r->in.logon_server;
+	r2.in.domainname	= r->in.domainname;
+	r2.out.dcname		= r->out.dcname;
+
+	werr = dcesrv_netr_GetDcName(dce_call, mem_ctx, &r2);
+
+	return werr;
 }
 
 
diff --git a/source4/selftest/knownfail b/source4/selftest/knownfail
index 9649a1f..abc6978 100644
--- a/source4/selftest/knownfail
+++ b/source4/selftest/knownfail
@@ -23,10 +23,8 @@ rpc.netlogon.*.LogonUasLogon
 rpc.netlogon.*.LogonUasLogoff
 rpc.netlogon.*.DatabaseSync
 rpc.netlogon.*.DatabaseSync2
-rpc.netlogon.*.GetDcName
 rpc.netlogon.*.LogonControl
 rpc.netlogon.*.LogonControl2
-rpc.netlogon.*.GetAnyDCName
 rpc.netlogon.*.DsrEnumerateDomainTrusts
 rpc.netlogon.*.NetrEnumerateTrustedDomains
 rpc.netlogon.*.NetrEnumerateTrustedDomainsEx
diff --git a/source4/torture/rpc/netlogon.c b/source4/torture/rpc/netlogon.c
index 953f9d1..5fb3607 100644
--- a/source4/torture/rpc/netlogon.c
+++ b/source4/torture/rpc/netlogon.c
@@ -1523,6 +1523,7 @@ static bool test_GetAnyDCName(struct torture_context *tctx,
 
 	status = dcerpc_netr_GetAnyDCName(p, tctx, &r);
 	torture_assert_ntstatus_ok(tctx, status, "GetAnyDCName");
+	torture_assert_werr_ok(tctx, r.out.result, "GetAnyDCName");
 
 	if (dcname) {
 	    torture_comment(tctx, "\tDC is at '%s'\n", dcname);


-- 
Samba Shared Repository


More information about the samba-cvs mailing list