[SCM] Samba Shared Repository - branch master updated

Stefan Metzmacher metze at samba.org
Tue Apr 27 05:21:54 MDT 2010


The branch, master has been updated
       via  d94c94f... s4:ntvfs: remove socket_address based functions
       via  bb04e90... s4:ntvfs/ipc: pass the already given tsocket_address structures to the named_pipe_auth code
       via  8fb3292... s4:smb_server: pass tsocket_addresses to the ntvfs layer
       via  c04d809... s4:ntvfs: add tsocket based addresses to ntvfs_context
       via  7bbaab8... s4:rpc_server: remove 'socket_address' based functions
       via  32bcc73... s4:rpc_server/srvsvc: pass tsocket_address to the ntvfs layer
       via  772cf15... s4:rpc_server/spoolss: use tsocket_address in dcesrv_spoolss_check_server_name()
       via  606025f... s4:rpc_server/netlogon: use tsocket_address in dcesrv_netr_DsRGetDCNameEx2()
       via  c42bb8e... s4:rpc_server: remember the local and remote address
       via  ba703cb... s4:service_named_pipe: use the passed client and server addresses
       via  cf3c595... s4:cldap_server: allow src_address = NULL in fill_netlogon_samlogon_response()
       via  4d191b6... s4:dsdb/common: if we don't have the ip of the client return the server site as client site
       via  2436ec2... lib/tsocket: add tsocket_address_is_unix() function
       via  e1596bb... lib/tsocket: add tsocket_address_is_inet() function
      from  3dd50b2... s4-test: make spnupdate work without make install

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


- Log -----------------------------------------------------------------
commit d94c94fcb94ae0dfd221b5c807ec310f9c0fd8ed
Author: Stefan Metzmacher <metze at samba.org>
Date:   Mon Apr 26 13:38:00 2010 +0200

    s4:ntvfs: remove socket_address based functions
    
    metze

commit bb04e90259315fd49fe1222b7c8f7fce23f1a2b6
Author: Stefan Metzmacher <metze at samba.org>
Date:   Mon Apr 26 13:37:12 2010 +0200

    s4:ntvfs/ipc: pass the already given tsocket_address structures to the named_pipe_auth code
    
    metze

commit 8fb3292c993302b74247d6fa4795b279b131abcf
Author: Stefan Metzmacher <metze at samba.org>
Date:   Mon Apr 26 13:34:44 2010 +0200

    s4:smb_server: pass tsocket_addresses to the ntvfs layer
    
    metze

commit c04d809ba001ebca17b68eae3a9f7d37454a290c
Author: Stefan Metzmacher <metze at samba.org>
Date:   Mon Apr 26 13:40:15 2010 +0200

    s4:ntvfs: add tsocket based addresses to ntvfs_context
    
    metze

commit 7bbaab8dffcfe55b5da099840ec200be4d098b69
Author: Stefan Metzmacher <metze at samba.org>
Date:   Mon Apr 26 13:39:36 2010 +0200

    s4:rpc_server: remove 'socket_address' based functions
    
    metze

commit 32bcc73cf8b59e2254967d55ebeb2715d4287840
Author: Stefan Metzmacher <metze at samba.org>
Date:   Mon Apr 26 13:27:51 2010 +0200

    s4:rpc_server/srvsvc: pass tsocket_address to the ntvfs layer
    
    metze

commit 772cf15eb969591d65598a03fee24a4e559158ea
Author: Stefan Metzmacher <metze at samba.org>
Date:   Mon Apr 26 13:22:01 2010 +0200

    s4:rpc_server/spoolss: use tsocket_address in dcesrv_spoolss_check_server_name()
    
    metze

commit 606025f11de9e1b9fa7c6d69a6fc346ca984dd93
Author: Stefan Metzmacher <metze at samba.org>
Date:   Mon Apr 26 13:18:41 2010 +0200

    s4:rpc_server/netlogon: use tsocket_address in dcesrv_netr_DsRGetDCNameEx2()
    
    metze

commit c42bb8e49c77517729f9b57a81fd07815b5b493a
Author: Stefan Metzmacher <metze at samba.org>
Date:   Mon Apr 26 13:06:07 2010 +0200

    s4:rpc_server: remember the local and remote address
    
    metze

commit ba703cb8e90070447dda46a3356f6a49b2fee537
Author: Stefan Metzmacher <metze at samba.org>
Date:   Mon Apr 26 13:56:06 2010 +0200

    s4:service_named_pipe: use the passed client and server addresses
    
    This gives the rpc server code the correct client and server
    ip addresses for ncacn_np.
    
    metze

commit cf3c595b9c6778ee4dea28176936013bc1f1e876
Author: Stefan Metzmacher <metze at samba.org>
Date:   Tue Apr 27 10:22:25 2010 +0200

    s4:cldap_server: allow src_address = NULL in fill_netlogon_samlogon_response()
    
    If we don't have the client address, we assume it's a local call,
    maybe ncalrpc.
    
    metze

commit 4d191b6fa7b96ed56912bf68e6771ffb8e3cfe12
Author: Stefan Metzmacher <metze at samba.org>
Date:   Tue Apr 27 10:21:28 2010 +0200

    s4:dsdb/common: if we don't have the ip of the client return the server site as client site
    
    metze

commit 2436ec2928d1aac0e6fd885ca1b9cdecef8bf89a
Author: Stefan Metzmacher <metze at samba.org>
Date:   Tue Apr 27 10:41:46 2010 +0200

    lib/tsocket: add tsocket_address_is_unix() function
    
    metze

commit e1596bbf27ee636d8ab47e39eda21c64ef49b671
Author: Stefan Metzmacher <metze at samba.org>
Date:   Tue Apr 27 10:34:15 2010 +0200

    lib/tsocket: add tsocket_address_is_inet() function
    
    metze

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

Summary of changes:
 lib/tsocket/tsocket.h                         |   29 +++++++++++++
 lib/tsocket/tsocket_bsd.c                     |   54 +++++++++++++++++++++++++
 source4/cldap_server/netlogon.c               |   12 +++++-
 source4/dsdb/common/util.c                    |    8 ++++
 source4/ntvfs/ipc/vfs_ipc.c                   |   31 +-------------
 source4/ntvfs/ntvfs.h                         |    5 +-
 source4/ntvfs/ntvfs_interface.c               |   54 +++++++++++-------------
 source4/rpc_server/dcerpc_server.c            |   29 +++++---------
 source4/rpc_server/dcerpc_server.h            |    7 ++-
 source4/rpc_server/netlogon/dcerpc_netlogon.c |   14 ++++--
 source4/rpc_server/service_rpc.c              |    5 +-
 source4/rpc_server/spoolss/dcesrv_spoolss.c   |   11 +++--
 source4/rpc_server/srvsvc/srvsvc_ntvfs.c      |   18 ++------
 source4/smb_server/smb/service.c              |    6 ++-
 source4/smb_server/smb2/tcon.c                |    6 ++-
 source4/smbd/service_named_pipe.c             |   39 +++++++++++++++++-
 16 files changed, 215 insertions(+), 113 deletions(-)


Changeset truncated at 500 lines:

diff --git a/lib/tsocket/tsocket.h b/lib/tsocket/tsocket.h
index d983325..d4f9e87 100644
--- a/lib/tsocket/tsocket.h
+++ b/lib/tsocket/tsocket.h
@@ -101,6 +101,7 @@ struct iovec;
  *
  * @return              The address as a string representation, NULL on error.
  *
+ * @see tsocket_address_is_inet()
  * @see tsocket_address_inet_addr_string()
  * @see tsocket_address_inet_port()
  */
@@ -486,6 +487,20 @@ int tstream_disconnect_recv(struct tevent_req *req,
  * @{
  */
 
+/**
+ * @brief Find out if the tsocket_address represents an ipv4 or ipv6 endpoint.
+ *
+ * @param[in]  addr     The tsocket_address pointer
+ *
+ * @param[in]  fam      The family can be can be "ipv4", "ipv6" or "ip". With
+ *                      "ip" is autodetects "ipv4" or "ipv6" based on the
+ *                      addr.
+ *
+ * @return              true if addr represents an address of the given family,
+ *                      otherwise false.
+ */
+bool tsocket_address_is_inet(const struct tsocket_address *addr, const char *fam);
+
 #if DOXYGEN
 /**
  * @brief Create a tsocket_address for ipv4 and ipv6 endpoint addresses.
@@ -533,6 +548,8 @@ int _tsocket_address_inet_from_strings(TALLOC_CTX *mem_ctx,
  *
  * @return              A newly allocated string of the address, NULL on error
  *                      with errno set.
+ *
+ * @see tsocket_address_is_inet()
  */
 char *tsocket_address_inet_addr_string(const struct tsocket_address *addr,
 				       TALLOC_CTX *mem_ctx);
@@ -558,6 +575,16 @@ uint16_t tsocket_address_inet_port(const struct tsocket_address *addr);
 int tsocket_address_inet_set_port(struct tsocket_address *addr,
 				  uint16_t port);
 
+/**
+ * @brief Find out if the tsocket_address represents an unix domain endpoint.
+ *
+ * @param[in]  addr     The tsocket_address pointer
+ *
+ * @return              true if addr represents an unix domain endpoint,
+ *                      otherwise false.
+ */
+bool tsocket_address_is_unix(const struct tsocket_address *addr);
+
 #ifdef DOXYGEN
 /**
  * @brief Create a tsocket_address for a unix domain endpoint addresses.
@@ -569,6 +596,8 @@ int tsocket_address_inet_set_port(struct tsocket_address *addr,
  * @param[in]  _addr    The tsocket_address pointer to store the information.
  *
  * @return              0 on success, -1 on error with errno set.
+ *
+ * @see tsocket_address_is_unix()
  */
 int tsocket_address_unix_from_path(TALLOC_CTX *mem_ctx,
 				   const char *path,
diff --git a/lib/tsocket/tsocket_bsd.c b/lib/tsocket/tsocket_bsd.c
index 43defb3..4a8a63e 100644
--- a/lib/tsocket/tsocket_bsd.c
+++ b/lib/tsocket/tsocket_bsd.c
@@ -294,6 +294,43 @@ ssize_t tsocket_address_bsd_sockaddr(const struct tsocket_address *addr,
 	return sa_socklen;
 }
 
+bool tsocket_address_is_inet(const struct tsocket_address *addr, const char *fam)
+{
+	struct tsocket_address_bsd *bsda = talloc_get_type(addr->private_data,
+					   struct tsocket_address_bsd);
+
+	if (!bsda) {
+		return false;
+	}
+
+	switch (bsda->u.sa.sa_family) {
+	case AF_INET:
+		if (strcasecmp(fam, "ip") == 0) {
+			return true;
+		}
+
+		if (strcasecmp(fam, "ipv4") == 0) {
+			return true;
+		}
+
+		return false;
+#ifdef HAVE_IPV6
+	case AF_INET6:
+		if (strcasecmp(fam, "ip") == 0) {
+			return true;
+		}
+
+		if (strcasecmp(fam, "ipv6") == 0) {
+			return true;
+		}
+
+		return false;
+#endif
+	}
+
+	return false;
+}
+
 int _tsocket_address_inet_from_strings(TALLOC_CTX *mem_ctx,
 				       const char *fam,
 				       const char *addr,
@@ -466,6 +503,23 @@ int tsocket_address_inet_set_port(struct tsocket_address *addr,
 	return 0;
 }
 
+bool tsocket_address_is_unix(const struct tsocket_address *addr)
+{
+	struct tsocket_address_bsd *bsda = talloc_get_type(addr->private_data,
+					   struct tsocket_address_bsd);
+
+	if (!bsda) {
+		return false;
+	}
+
+	switch (bsda->u.sa.sa_family) {
+	case AF_UNIX:
+		return true;
+	}
+
+	return false;
+}
+
 int _tsocket_address_unix_from_path(TALLOC_CTX *mem_ctx,
 				    const char *path,
 				    struct tsocket_address **_addr,
diff --git a/source4/cldap_server/netlogon.c b/source4/cldap_server/netlogon.c
index 1993c1f..e24f1b3 100644
--- a/source4/cldap_server/netlogon.c
+++ b/source4/cldap_server/netlogon.c
@@ -270,8 +270,16 @@ NTSTATUS fill_netlogon_samlogon_response(struct ldb_context *sam_ctx,
 						  src_address, NULL);
 	NT_STATUS_HAVE_NO_MEMORY(client_site);
 	load_interfaces(mem_ctx, lp_interfaces(lp_ctx), &ifaces);
-	pdc_ip           = iface_best_ip(ifaces, src_address);
-
+	/*
+	 * TODO: the caller should pass the address which the client
+	 * used to trigger this call, as the client is able to reach
+	 * this ip.
+	 */
+	if (src_address) {
+		pdc_ip = iface_best_ip(ifaces, src_address);
+	} else {
+		pdc_ip = iface_n_ip(ifaces, 0);
+	}
 	ZERO_STRUCTP(netlogon);
 
 	/* check if either of these bits is present */
diff --git a/source4/dsdb/common/util.c b/source4/dsdb/common/util.c
index 7dd68b8..60bcbe4 100644
--- a/source4/dsdb/common/util.c
+++ b/source4/dsdb/common/util.c
@@ -1609,6 +1609,14 @@ const char *samdb_client_site_name(struct ldb_context *ldb, TALLOC_CTX *mem_ctx,
 	unsigned int i;
 	int cnt, ret;
 
+	/*
+	 * if we don't have a client ip e.g. ncalrpc
+	 * the server site is the client site
+	 */
+	if (ip_address == NULL) {
+		return samdb_server_site_name(ldb, mem_ctx);
+	}
+
 	sites_container_dn = samdb_sites_dn(ldb, mem_ctx);
 	if (sites_container_dn == NULL) {
 		return NULL;
diff --git a/source4/ntvfs/ipc/vfs_ipc.c b/source4/ntvfs/ipc/vfs_ipc.c
index 1a76b97..2d40d1f 100644
--- a/source4/ntvfs/ipc/vfs_ipc.c
+++ b/source4/ntvfs/ipc/vfs_ipc.c
@@ -251,9 +251,7 @@ static NTSTATUS ipc_open(struct ntvfs_module_context *ntvfs,
 	struct tevent_req *subreq;
 	const char *fname;
 	const char *directory;
-	struct socket_address *client_sa;
 	struct tsocket_address *client_addr;
-	struct socket_address *server_sa;
 	struct tsocket_address *server_addr;
 	int ret;
 	DATA_BLOB delegated_creds = data_blob_null;
@@ -316,33 +314,8 @@ static NTSTATUS ipc_open(struct ntvfs_module_context *ntvfs,
 						   &state->info3);
 	NT_STATUS_NOT_OK_RETURN(status);
 
-	client_sa = ntvfs_get_peer_addr(ntvfs, state);
-	if (!client_sa) {
-		return NT_STATUS_INTERNAL_ERROR;
-	}
-
-	server_sa = ntvfs_get_my_addr(ntvfs, state);
-	if (!server_sa) {
-		return NT_STATUS_INTERNAL_ERROR;
-	}
-
-	ret = tsocket_address_inet_from_strings(state, "ip",
-						client_sa->addr,
-						client_sa->port,
-						&client_addr);
-	if (ret == -1) {
-		status = map_nt_error_from_unix(errno);
-		return status;
-	}
-
-	ret = tsocket_address_inet_from_strings(state, "ip",
-						server_sa->addr,
-						server_sa->port,
-						&server_addr);
-	if (ret == -1) {
-		status = map_nt_error_from_unix(errno);
-		return status;
-	}
+	client_addr = ntvfs_get_local_address(ipriv->ntvfs);
+	server_addr = ntvfs_get_remote_address(ipriv->ntvfs);
 
 	if (req->session_info->credentials) {
 		struct gssapi_creds_container *gcc;
diff --git a/source4/ntvfs/ntvfs.h b/source4/ntvfs/ntvfs.h
index 5e9c657..02281e7 100644
--- a/source4/ntvfs/ntvfs.h
+++ b/source4/ntvfs/ntvfs.h
@@ -209,9 +209,8 @@ struct ntvfs_context {
 	} oplock;
 
 	struct {
-		void *private_data;
-		struct socket_address *(*get_my_addr)(void *private_data, TALLOC_CTX *mem_ctx);
-		struct socket_address *(*get_peer_addr)(void *private_data, TALLOC_CTX *mem_ctx);
+		const struct tsocket_address *local_address;
+		const struct tsocket_address *remote_address;
 	} client;
 
 	struct {
diff --git a/source4/ntvfs/ntvfs_interface.c b/source4/ntvfs/ntvfs_interface.c
index 808bd97..608db13 100644
--- a/source4/ntvfs/ntvfs_interface.c
+++ b/source4/ntvfs/ntvfs_interface.c
@@ -20,6 +20,7 @@
 
 #include "includes.h"
 #include "ntvfs/ntvfs.h"
+#include "lib/tsocket/tsocket.h"
 
 /* connect/disconnect */
 NTSTATUS ntvfs_connect(struct ntvfs_request *req, union smb_tcon *tcon)
@@ -666,6 +667,30 @@ NTSTATUS ntvfs_next_exit(struct ntvfs_module_context *ntvfs,
 	return ntvfs->next->ops->exit(ntvfs->next, req);
 }
 
+/* client connection callback */
+NTSTATUS ntvfs_set_addresses(struct ntvfs_context *ntvfs,
+			     const struct tsocket_address *local_address,
+			     const struct tsocket_address *remote_address)
+{
+	ntvfs->client.local_address = tsocket_address_copy(local_address, ntvfs);
+	NT_STATUS_HAVE_NO_MEMORY(ntvfs->client.local_address);
+
+	ntvfs->client.remote_address = tsocket_address_copy(remote_address, ntvfs);
+	NT_STATUS_HAVE_NO_MEMORY(ntvfs->client.remote_address);
+
+	return NT_STATUS_OK;
+}
+
+const struct tsocket_address *ntvfs_get_local_address(struct ntvfs_module_context *ntvfs)
+{
+	return ntvfs->ctx->client.local_address;
+}
+
+const struct tsocket_address *ntvfs_get_remote_address(struct ntvfs_module_context *ntvfs)
+{
+	return ntvfs->ctx->client.remote_address;
+}
+
 /* oplock helpers */
 NTSTATUS ntvfs_set_oplock_handler(struct ntvfs_context *ntvfs,
 					   NTSTATUS (*handler)(void *private_data, struct ntvfs_handle *handle, uint8_t level),
@@ -686,32 +711,3 @@ NTSTATUS ntvfs_send_oplock_break(struct ntvfs_module_context *ntvfs,
 	return ntvfs->ctx->oplock.handler(ntvfs->ctx->oplock.private_data, handle, level);
 }
 
-/* client connection callback */
-NTSTATUS ntvfs_set_addr_callbacks(struct ntvfs_context *ntvfs,
-					   struct socket_address *(*my_addr)(void *private_data, TALLOC_CTX *mem_ctx),
-					   struct socket_address *(*peer_addr)(void *private_data, TALLOC_CTX *mem_ctx),
-					   void *private_data)
-{
-	ntvfs->client.get_peer_addr	= my_addr;
-	ntvfs->client.get_my_addr	= peer_addr;
-	ntvfs->client.private_data	= private_data;
-	return NT_STATUS_OK;
-}
-
-struct socket_address *ntvfs_get_my_addr(struct ntvfs_module_context *ntvfs, TALLOC_CTX *mem_ctx)
-{
-	if (!ntvfs->ctx->client.get_my_addr) {
-		return NULL;
-	}
-
-	return ntvfs->ctx->client.get_my_addr(ntvfs->ctx->client.private_data, mem_ctx);
-}
-
-struct socket_address *ntvfs_get_peer_addr(struct ntvfs_module_context *ntvfs, TALLOC_CTX *mem_ctx)
-{
-	if (!ntvfs->ctx->client.get_peer_addr) {
-		return NULL;
-	}
-
-	return ntvfs->ctx->client.get_peer_addr(ntvfs->ctx->client.private_data, mem_ctx);
-}
diff --git a/source4/rpc_server/dcerpc_server.c b/source4/rpc_server/dcerpc_server.c
index bc06c06..0b0e3f2 100644
--- a/source4/rpc_server/dcerpc_server.c
+++ b/source4/rpc_server/dcerpc_server.c
@@ -1111,25 +1111,6 @@ _PUBLIC_ NTSTATUS dcesrv_reply(struct dcesrv_call_state *call)
 	return NT_STATUS_OK;
 }
 
-_PUBLIC_ struct socket_address *dcesrv_connection_get_my_addr(struct dcesrv_connection *conn, TALLOC_CTX *mem_ctx)
-{
-	if (!conn->transport.get_my_addr) {
-		return NULL;
-	}
-
-	return conn->transport.get_my_addr(conn, mem_ctx);
-}
-
-_PUBLIC_ struct socket_address *dcesrv_connection_get_peer_addr(struct dcesrv_connection *conn, TALLOC_CTX *mem_ctx)
-{
-	if (!conn->transport.get_peer_addr) {
-		return NULL;
-	}
-
-	return conn->transport.get_peer_addr(conn, mem_ctx);
-}
-
-
 /*
   remove the call from the right list when freed
  */
@@ -1139,6 +1120,16 @@ static int dcesrv_call_dequeue(struct dcesrv_call_state *call)
 	return 0;
 }
 
+_PUBLIC_ const struct tsocket_address *dcesrv_connection_get_local_address(struct dcesrv_connection *conn)
+{
+	return conn->local_address;
+}
+
+_PUBLIC_ const struct tsocket_address *dcesrv_connection_get_remote_address(struct dcesrv_connection *conn)
+{
+	return conn->remote_address;
+}
+
 /*
   process some input to a dcerpc endpoint server.
 */
diff --git a/source4/rpc_server/dcerpc_server.h b/source4/rpc_server/dcerpc_server.h
index 0628730..bf93380 100644
--- a/source4/rpc_server/dcerpc_server.h
+++ b/source4/rpc_server/dcerpc_server.h
@@ -218,12 +218,13 @@ struct dcesrv_connection {
 	struct {
 		void *private_data;
 		void (*report_output_data)(struct dcesrv_connection *);
-		struct socket_address *(*get_my_addr)(struct dcesrv_connection *, TALLOC_CTX *mem_ctx);
-		struct socket_address *(*get_peer_addr)(struct dcesrv_connection *, TALLOC_CTX *mem_ctx);
 	} transport;
 
 	struct tstream_context *stream;
 	struct tevent_queue *send_queue;
+
+	const struct tsocket_address *local_address;
+	const struct tsocket_address *remote_address;
 };
 
 
@@ -334,6 +335,8 @@ struct dcesrv_handle *dcesrv_handle_fetch(
 struct socket_address *dcesrv_connection_get_my_addr(struct dcesrv_connection *conn, TALLOC_CTX *mem_ctx);
 
 struct socket_address *dcesrv_connection_get_peer_addr(struct dcesrv_connection *conn, TALLOC_CTX *mem_ctx);
+const struct tsocket_address *dcesrv_connection_get_local_address(struct dcesrv_connection *conn);
+const struct tsocket_address *dcesrv_connection_get_remote_address(struct dcesrv_connection *conn);
 
 NTSTATUS dcesrv_fetch_session_key(struct dcesrv_connection *p, DATA_BLOB *session_key);
 
diff --git a/source4/rpc_server/netlogon/dcerpc_netlogon.c b/source4/rpc_server/netlogon/dcerpc_netlogon.c
index a62a2ac..2650dc7 100644
--- a/source4/rpc_server/netlogon/dcerpc_netlogon.c
+++ b/source4/rpc_server/netlogon/dcerpc_netlogon.c
@@ -33,7 +33,7 @@
 #include "lib/messaging/irpc.h"
 #include "librpc/gen_ndr/ndr_irpc.h"
 #include "cldap_server/cldap_server.h"
-#include "lib/socket/socket.h"
+#include "lib/tsocket/tsocket.h"
 
 struct netlogon_server_pipe_state {
 	struct netr_Credential client_challenge;
@@ -1525,7 +1525,8 @@ static WERROR dcesrv_netr_DsRGetDCNameEx2(struct dcesrv_call_state *dce_call,
 	struct ldb_context *sam_ctx;
 	struct netr_DsRGetDCNameInfo *info;
 	struct loadparm_context *lp_ctx = dce_call->conn->dce_ctx->lp_ctx;
-	struct socket_address *addr;
+	const struct tsocket_address *remote_address;
+	char *addr = NULL;
 	const char *server_site_name;
 	char *guid_str;
 	struct netlogon_samlogon_response response;
@@ -1539,8 +1540,11 @@ static WERROR dcesrv_netr_DsRGetDCNameEx2(struct dcesrv_call_state *dce_call,
 		return WERR_DS_UNAVAILABLE;
 	}
 
-	addr = dce_call->conn->transport.get_peer_addr(dce_call->conn, mem_ctx);
-	W_ERROR_HAVE_NO_MEMORY(addr);
+	remote_address = dcesrv_connection_get_remote_address(dce_call->conn);
+	if (tsocket_address_is_inet(remote_address, "ip")) {
+		addr = tsocket_address_inet_addr_string(remote_address, mem_ctx);
+		W_ERROR_HAVE_NO_MEMORY(addr);
+	}
 
 	/* "server_unc" is ignored by w2k3 */
 
@@ -1562,7 +1566,7 @@ static WERROR dcesrv_netr_DsRGetDCNameEx2(struct dcesrv_call_state *dce_call,
 						 r->in.domain_name,
 						 NULL, guid_str,
 						 r->in.client_account,
-						 r->in.mask, addr->addr,
+						 r->in.mask, addr,
 						 NETLOGON_NT_VERSION_5EX_WITH_IP,
 						 lp_ctx, &response);
 	if (!NT_STATUS_IS_OK(status)) {
diff --git a/source4/rpc_server/service_rpc.c b/source4/rpc_server/service_rpc.c
index 6485d9e..906b02d 100644
--- a/source4/rpc_server/service_rpc.c
+++ b/source4/rpc_server/service_rpc.c
@@ -370,8 +370,6 @@ static void dcesrv_sock_accept(struct stream_connection *srv_conn)
 
 	dcesrv_conn->transport.private_data		= srv_conn;
 	dcesrv_conn->transport.report_output_data	= dcesrv_sock_report_output_data;
-	dcesrv_conn->transport.get_my_addr		= dcesrv_sock_get_my_addr;
-	dcesrv_conn->transport.get_peer_addr		= dcesrv_sock_get_peer_addr;
 
 	TALLOC_FREE(srv_conn->event.fde);
 
@@ -403,6 +401,9 @@ static void dcesrv_sock_accept(struct stream_connection *srv_conn)
 		return;
 	}
 
+	dcesrv_conn->local_address = srv_conn->local_address;
+	dcesrv_conn->remote_address = srv_conn->remote_address;
+
 	srv_conn->private_data = dcesrv_conn;
 
 	irpc_add_name(srv_conn->msg_ctx, "rpc_server");
diff --git a/source4/rpc_server/spoolss/dcesrv_spoolss.c b/source4/rpc_server/spoolss/dcesrv_spoolss.c
index 53e251f..0fe8e0e 100644
--- a/source4/rpc_server/spoolss/dcesrv_spoolss.c
+++ b/source4/rpc_server/spoolss/dcesrv_spoolss.c
@@ -24,7 +24,7 @@
 #include "rpc_server/dcerpc_server.h"
 #include "librpc/gen_ndr/ndr_spoolss.h"
 #include "ntptr/ntptr.h"
-#include "lib/socket/socket.h"
+#include "lib/tsocket/tsocket.h"
 #include "librpc/gen_ndr/ndr_spoolss_c.h"
 #include "auth/credentials/credentials.h"
 #include "param/param.h"
@@ -148,7 +148,8 @@ static WERROR dcesrv_spoolss_check_server_name(struct dcesrv_call_state *dce_cal
 					const char *server_name)
 {
 	bool ret;
-	struct socket_address *myaddr;
+	const struct tsocket_address *local_address;
+	char *myaddr;
 	const char **aliases;
 	const char *dnsdomain;
 	unsigned int i;
@@ -201,10 +202,12 @@ static WERROR dcesrv_spoolss_check_server_name(struct dcesrv_call_state *dce_cal
 		if (ret) return WERR_OK;
 	}
 
-	myaddr = dcesrv_connection_get_my_addr(dce_call->conn, mem_ctx);
+	local_address = dcesrv_connection_get_local_address(dce_call->conn);
+
+	myaddr = tsocket_address_inet_addr_string(local_address, mem_ctx);


-- 
Samba Shared Repository


More information about the samba-cvs mailing list