diff options
author | Stefan Metzmacher <metze@samba.org> | 2008-12-04 11:56:51 +0100 |
---|---|---|
committer | Stefan Metzmacher <metze@samba.org> | 2008-12-04 12:48:39 +0100 |
commit | 885a1be8b932a212b6234a2a0c990975eb16e9e8 (patch) | |
tree | b7355351a464868e1247739651ab8dbf0f588d31 /source4/rpc_server | |
parent | 2b8f3e253d3a56aac996287f5ce265d0c915b3c8 (diff) | |
download | samba-885a1be8b932a212b6234a2a0c990975eb16e9e8.tar.gz samba-885a1be8b932a212b6234a2a0c990975eb16e9e8.tar.bz2 samba-885a1be8b932a212b6234a2a0c990975eb16e9e8.zip |
s4:netlogon: Implement netr_GetDcName() similar to netr_DsGetDCName()
metze
Diffstat (limited to 'source4/rpc_server')
-rw-r--r-- | source4/rpc_server/netlogon/dcerpc_netlogon.c | 35 |
1 files changed, 34 insertions, 1 deletions
diff --git a/source4/rpc_server/netlogon/dcerpc_netlogon.c b/source4/rpc_server/netlogon/dcerpc_netlogon.c index ccc1fc515f..2854980284 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; } |