[SCM] Samba Shared Repository - branch master updated - tevent-0-9-8-534-g46d29fe

Andrew Tridgell tridge at samba.org
Sat Sep 19 10:22:42 MDT 2009


The branch, master has been updated
       via  46d29fe088714fb4dc2c7e3b5ba2c121ac9f951d (commit)
       via  92786aebf1b8aa17612ebaf5dd0ee8cd4abf9616 (commit)
      from  7c542406b192cd72c40778850d92771974d6466c (commit)

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


- Log -----------------------------------------------------------------
commit 46d29fe088714fb4dc2c7e3b5ba2c121ac9f951d
Author: Andrew Tridgell <tridge at samba.org>
Date:   Sat Sep 19 08:25:41 2009 -0700

    s4-netlogon: implement dcesrv_netr_DsRAddressToSitenamesExW
    
    We don't implement sites properly at the moment so we just return
    Default-First-Site-Name

commit 92786aebf1b8aa17612ebaf5dd0ee8cd4abf9616
Author: Andrew Tridgell <tridge at samba.org>
Date:   Sat Sep 19 08:23:03 2009 -0700

    s4-resolve: fixed a crash bug on timeout
    
    We were creating the name resolution context as a child of lp_ctx,
    which meant when we gave up on a connection the timer on name
    resolution kept running, and when it timed out the callback crashed as
    the socket was already removed.

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

Summary of changes:
 source4/lib/socket/connect_multi.c            |    2 +-
 source4/libcli/finddcs.c                      |    2 +-
 source4/libcli/resolve/resolve.c              |    8 ++++--
 source4/libcli/smb2/connect.c                 |    2 +-
 source4/libcli/smb_composite/connect.c        |    2 +-
 source4/libnet/libnet_lookup.c                |    2 +-
 source4/librpc/rpc/dcerpc_sock.c              |    2 +-
 source4/nbt_server/wins/wins_dns_proxy.c      |    2 +-
 source4/rpc_server/netlogon/dcerpc_netlogon.c |   26 +++++++++++++++++++++++-
 source4/winbind/wb_dom_info_trusted.c         |    2 +-
 10 files changed, 37 insertions(+), 13 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source4/lib/socket/connect_multi.c b/source4/lib/socket/connect_multi.c
index 8fcfc0a..68386ba 100644
--- a/source4/lib/socket/connect_multi.c
+++ b/source4/lib/socket/connect_multi.c
@@ -103,7 +103,7 @@ _PUBLIC_ struct composite_context *socket_connect_multi_send(
 		struct nbt_name name;
 		struct composite_context *creq;
 		make_nbt_name_server(&name, server_address);
-		creq = resolve_name_send(resolve_ctx, &name, result->event_ctx);
+		creq = resolve_name_send(resolve_ctx, multi, &name, result->event_ctx);
 		if (composite_nomem(creq, result)) goto failed;
 		composite_continue(result, creq, continue_resolve_name, result);
 		return result;
diff --git a/source4/libcli/finddcs.c b/source4/libcli/finddcs.c
index 2e4fad9..8330042 100644
--- a/source4/libcli/finddcs.c
+++ b/source4/libcli/finddcs.c
@@ -102,7 +102,7 @@ struct composite_context *finddcs_send(TALLOC_CTX *mem_ctx,
 	state->msg_ctx = msg_ctx;
 
 	make_nbt_name(&name, state->domain_name, name_type);
-	creq = resolve_name_send(resolve_ctx, &name, event_ctx);
+	creq = resolve_name_send(resolve_ctx, state, &name, event_ctx);
 	composite_continue(c, creq, finddcs_name_resolved, state);
 	return c;
 }
diff --git a/source4/libcli/resolve/resolve.c b/source4/libcli/resolve/resolve.c
index 6a3d5da..0ad3a75 100644
--- a/source4/libcli/resolve/resolve.c
+++ b/source4/libcli/resolve/resolve.c
@@ -136,6 +136,7 @@ static struct composite_context *setup_next_method(struct composite_context *c)
   general name resolution - async send
  */
 struct composite_context *resolve_name_all_send(struct resolve_context *ctx,
+						TALLOC_CTX *mem_ctx,
 						uint32_t flags,
 						uint16_t port,
 						struct nbt_name *name,
@@ -148,7 +149,7 @@ struct composite_context *resolve_name_all_send(struct resolve_context *ctx,
 		return NULL;
 	}
 
-	c = composite_create(ctx, event_ctx);
+	c = composite_create(mem_ctx, event_ctx);
 	if (c == NULL) return NULL;
 
 	if (composite_nomem(c->event_ctx, c)) return c;
@@ -221,10 +222,11 @@ NTSTATUS resolve_name_all_recv(struct composite_context *c,
 }
 
 struct composite_context *resolve_name_send(struct resolve_context *ctx,
+					    TALLOC_CTX *mem_ctx,
 					    struct nbt_name *name,
 					    struct tevent_context *event_ctx)
 {
-	return resolve_name_all_send(ctx, 0, 0, name, event_ctx);
+	return resolve_name_all_send(ctx, mem_ctx, 0, 0, name, event_ctx);
 }
 
 NTSTATUS resolve_name_recv(struct composite_context *c,
@@ -253,7 +255,7 @@ NTSTATUS resolve_name(struct resolve_context *ctx,
 			  const char **reply_addr,
 			  struct tevent_context *ev)
 {
-	struct composite_context *c = resolve_name_send(ctx, name, ev);
+	struct composite_context *c = resolve_name_send(ctx, mem_ctx, name, ev);
 	return resolve_name_recv(c, mem_ctx, reply_addr);
 }
 
diff --git a/source4/libcli/smb2/connect.c b/source4/libcli/smb2/connect.c
index 8c1a73b..64ed6c3 100644
--- a/source4/libcli/smb2/connect.c
+++ b/source4/libcli/smb2/connect.c
@@ -271,7 +271,7 @@ struct composite_context *smb2_connect_send(TALLOC_CTX *mem_ctx,
 	ZERO_STRUCT(name);
 	name.name = host;
 
-	creq = resolve_name_send(resolve_ctx, &name, c->event_ctx);
+	creq = resolve_name_send(resolve_ctx, state, &name, c->event_ctx);
 	composite_continue(c, creq, continue_resolve, c);
 	return c;
 }
diff --git a/source4/libcli/smb_composite/connect.c b/source4/libcli/smb_composite/connect.c
index 9a19771..3d35018 100644
--- a/source4/libcli/smb_composite/connect.c
+++ b/source4/libcli/smb_composite/connect.c
@@ -480,7 +480,7 @@ struct composite_context *smb_composite_connect_send(struct smb_composite_connec
 
 	state->stage = CONNECT_RESOLVE;
 	make_nbt_name_server(&name, io->in.dest_host);
-	state->creq = resolve_name_send(resolve_ctx, &name, c->event_ctx);
+	state->creq = resolve_name_send(resolve_ctx, state, &name, c->event_ctx);
 
 	if (state->creq == NULL) goto failed;
 	state->creq->async.private_data = c;
diff --git a/source4/libnet/libnet_lookup.c b/source4/libnet/libnet_lookup.c
index ab26814..4548864 100644
--- a/source4/libnet/libnet_lookup.c
+++ b/source4/libnet/libnet_lookup.c
@@ -88,7 +88,7 @@ struct composite_context *libnet_Lookup_send(struct libnet_context *ctx,
 	}
 
 	/* send resolve request */
-	cresolve_req = resolve_name_send(resolve_ctx, &s->hostname, c->event_ctx);
+	cresolve_req = resolve_name_send(resolve_ctx, s, &s->hostname, c->event_ctx);
 	if (composite_nomem(cresolve_req, c)) return c;
 
 	composite_continue(c, cresolve_req, continue_name_resolved, c);
diff --git a/source4/librpc/rpc/dcerpc_sock.c b/source4/librpc/rpc/dcerpc_sock.c
index 64a5b92..d8bd6d2 100644
--- a/source4/librpc/rpc/dcerpc_sock.c
+++ b/source4/librpc/rpc/dcerpc_sock.c
@@ -488,7 +488,7 @@ struct composite_context* dcerpc_pipe_open_tcp_send(struct dcerpc_connection *co
 	s->resolve_ctx     = resolve_ctx;
 
 	make_nbt_name_server(&name, server);
-	resolve_req = resolve_name_send(resolve_ctx, &name, c->event_ctx);
+	resolve_req = resolve_name_send(resolve_ctx, s, &name, c->event_ctx);
 	composite_continue(c, resolve_req, continue_ip_resolve_name, c);
 	return c;
 }
diff --git a/source4/nbt_server/wins/wins_dns_proxy.c b/source4/nbt_server/wins/wins_dns_proxy.c
index cd60590..4ebfc05 100644
--- a/source4/nbt_server/wins/wins_dns_proxy.c
+++ b/source4/nbt_server/wins/wins_dns_proxy.c
@@ -87,7 +87,7 @@ void nbtd_wins_dns_proxy_query(struct nbt_name_socket *nbtsock,
 	if (resolve_ctx == NULL) goto failed;
 	resolve_context_add_host_method(resolve_ctx);
 
-	creq = resolve_name_send(resolve_ctx, name, iface->nbtsrv->task->event_ctx);
+	creq = resolve_name_send(resolve_ctx, s, name, iface->nbtsrv->task->event_ctx);
 	if (!creq) goto failed;
 
 	creq->async.fn		= nbtd_wins_dns_proxy_handler;
diff --git a/source4/rpc_server/netlogon/dcerpc_netlogon.c b/source4/rpc_server/netlogon/dcerpc_netlogon.c
index baba415..ab7cc34 100644
--- a/source4/rpc_server/netlogon/dcerpc_netlogon.c
+++ b/source4/rpc_server/netlogon/dcerpc_netlogon.c
@@ -1529,9 +1529,31 @@ static WERROR dcesrv_netr_NetrEnumerateTrustedDomainsEx(struct dcesrv_call_state
   netr_DsRAddressToSitenamesExW 
 */
 static WERROR dcesrv_netr_DsRAddressToSitenamesExW(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
-		       struct netr_DsRAddressToSitenamesExW *r)
+						   struct netr_DsRAddressToSitenamesExW *r)
 {
-	DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
+	struct netr_DsRAddressToSitenamesExWCtr *ctr;
+	int i;
+
+	/* we should map the provided IPs to site names, once we have
+	 * sites support
+	 */
+	ctr = talloc(mem_ctx, struct netr_DsRAddressToSitenamesExWCtr);
+	W_ERROR_HAVE_NO_MEMORY(ctr);
+
+	*r->out.ctr = ctr;
+
+	ctr->count = r->in.count;
+	ctr->sitename = talloc_array(ctr, struct lsa_String, ctr->count);
+	W_ERROR_HAVE_NO_MEMORY(ctr->sitename);
+	ctr->subnetname = talloc_array(ctr, struct lsa_String, ctr->count);
+	W_ERROR_HAVE_NO_MEMORY(ctr->subnetname);
+
+	for (i=0; i<ctr->count; i++) {
+		ctr->sitename[i].string   = "Default-First-Site-Name";
+		ctr->subnetname[i].string = NULL;
+	}
+
+	return WERR_OK;
 }
 
 
diff --git a/source4/winbind/wb_dom_info_trusted.c b/source4/winbind/wb_dom_info_trusted.c
index 5223b16..c3bc754 100644
--- a/source4/winbind/wb_dom_info_trusted.c
+++ b/source4/winbind/wb_dom_info_trusted.c
@@ -195,7 +195,7 @@ static void trusted_dom_info_recv_dcname(struct rpc_request *req)
 	if (*state->info->dcs[0].name == '\\') state->info->dcs[0].name++;
 	
 	make_nbt_name(&name, state->info->dcs[0].name, 0x20);
-	ctx = resolve_name_send(lp_resolve_context(state->service->task->lp_ctx), 
+	ctx = resolve_name_send(lp_resolve_context(state->service->task->lp_ctx), state,
 				&name, state->service->task->event_ctx);
 
 	composite_continue(state->ctx, ctx, trusted_dom_info_recv_dcaddr,


-- 
Samba Shared Repository


More information about the samba-cvs mailing list