From c3bd7971f644428549418576641070346dd10d52 Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Thu, 27 Feb 2014 10:18:35 +0100 Subject: [PATCH 1/2] s4:lib/socket: use the same logic in iface_list_wildcard() as in smbd If we have ipv6 support we should listen on "::" too. Bug: https://bugzilla.samba.org/show_bug.cgi?id=10464 Signed-off-by: Stefan Metzmacher Change-Id: I8ce185d5070280149bee9fd33010443be9031089 Reviewed-by: Andrew Bartlett (cherry picked from commit a571fe520d09a00273a58b1fb0fa9aab8e0aefce) --- source4/lib/socket/interface.c | 26 +++++--------------------- 1 file changed, 5 insertions(+), 21 deletions(-) diff --git a/source4/lib/socket/interface.c b/source4/lib/socket/interface.c index 7a4733f..cdfadc9 100644 --- a/source4/lib/socket/interface.c +++ b/source4/lib/socket/interface.c @@ -505,27 +505,11 @@ bool iface_list_same_net(const char *ip1, const char *ip2, const char *netmask) */ const char **iface_list_wildcard(TALLOC_CTX *mem_ctx, struct loadparm_context *lp_ctx) { - const char **ret; - ret = (const char **)str_list_make(mem_ctx, "0.0.0.0", NULL); - if (ret == NULL) return NULL; - + char **ret; #ifdef HAVE_IPV6 - if (lpcfg_parm_bool(lp_ctx, NULL, "ipv6", "enable", true)) { - struct interface *local_interfaces = NULL; - - load_interface_list(ret, lp_ctx, &local_interfaces); - - if (iface_list_first_v6(local_interfaces)) { - TALLOC_FREE(local_interfaces); - /* - * only add "::" if we have at least - * one ipv6 interface - */ - return str_list_add(ret, "::"); - } - TALLOC_FREE(local_interfaces); - } + ret = str_list_make(mem_ctx, "::,0.0.0.0", NULL); +#else + ret = str_list_make(mem_ctx, "0.0.0.0", NULL); #endif - - return ret; + return discard_const_p(const char *, ret); } -- 1.7.9.5 From 3b9de671442802720c05455f2901407d2363f189 Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Thu, 27 Feb 2014 10:28:23 +0100 Subject: [PATCH 2/2] s4:lib/socket: simplify iface_list_wildcard() and its callers Bug: https://bugzilla.samba.org/show_bug.cgi?id=10464 Signed-off-by: Stefan Metzmacher Change-Id: Ib317d71dea01fc8ef6b6a26455f15a8a175d59f6 Reviewed-by: Andrew Bartlett Autobuild-User(master): Andrew Bartlett Autobuild-Date(master): Fri Mar 7 02:18:17 CET 2014 on sn-devel-104 (cherry picked from commit f7883ae02a4e8935a44396f776712cebfd411e52) --- source4/cldap_server/cldap_server.c | 2 +- source4/dns_server/dns_server.c | 8 ++++---- source4/kdc/kdc.c | 2 +- source4/ldap_server/ldap_server.c | 4 ++-- source4/lib/socket/interface.c | 4 ++-- source4/rpc_server/dcerpc_server.c | 4 ++-- source4/smb_server/service_smb.c | 4 ++-- source4/web_server/web_server.c | 4 ++-- 8 files changed, 16 insertions(+), 16 deletions(-) diff --git a/source4/cldap_server/cldap_server.c b/source4/cldap_server/cldap_server.c index a6248d4..ff8fe13 100644 --- a/source4/cldap_server/cldap_server.c +++ b/source4/cldap_server/cldap_server.c @@ -158,7 +158,7 @@ static NTSTATUS cldapd_startup_interfaces(struct cldapd_server *cldapd, struct l /* if we are allowing incoming packets from any address, then we need to bind to the wildcard address */ if (!lpcfg_bind_interfaces_only(lp_ctx)) { - const char **wcard = iface_list_wildcard(cldapd, lp_ctx); + char **wcard = iface_list_wildcard(cldapd); NT_STATUS_HAVE_NO_MEMORY(wcard); for (i=0; wcard[i]; i++) { status = cldapd_add_socket(cldapd, lp_ctx, wcard[i]); diff --git a/source4/dns_server/dns_server.c b/source4/dns_server/dns_server.c index 7ad4aca..976774d 100644 --- a/source4/dns_server/dns_server.c +++ b/source4/dns_server/dns_server.c @@ -657,7 +657,7 @@ static NTSTATUS dns_add_socket(struct dns_server *dns, /* setup our listening sockets on the configured network interfaces */ -static NTSTATUS dns_startup_interfaces(struct dns_server *dns, struct loadparm_context *lp_ctx, +static NTSTATUS dns_startup_interfaces(struct dns_server *dns, struct interface *ifaces) { const struct model_ops *model_ops; @@ -687,8 +687,8 @@ static NTSTATUS dns_startup_interfaces(struct dns_server *dns, struct loadparm_c NT_STATUS_NOT_OK_RETURN(status); } } else { - const char **wcard; - wcard = iface_list_wildcard(tmp_ctx, lp_ctx); + char **wcard; + wcard = iface_list_wildcard(tmp_ctx); if (wcard == NULL) { DEBUG(0, ("No wildcard address available\n")); return NT_STATUS_INTERNAL_ERROR; @@ -891,7 +891,7 @@ static void dns_task_init(struct task_server *task) DLIST_ADD_END(dns->zones, z, NULL); } - status = dns_startup_interfaces(dns, task->lp_ctx, ifaces); + status = dns_startup_interfaces(dns, ifaces); if (!NT_STATUS_IS_OK(status)) { task_server_terminate(task, "dns failed to setup interfaces", true); return; diff --git a/source4/kdc/kdc.c b/source4/kdc/kdc.c index a893906..2fa1755 100644 --- a/source4/kdc/kdc.c +++ b/source4/kdc/kdc.c @@ -734,7 +734,7 @@ static NTSTATUS kdc_startup_interfaces(struct kdc_server *kdc, struct loadparm_c /* if we are allowing incoming packets from any address, then we need to bind to the wildcard address */ if (!lpcfg_bind_interfaces_only(lp_ctx)) { - const char **wcard = iface_list_wildcard(kdc, lp_ctx); + char **wcard = iface_list_wildcard(kdc); NT_STATUS_HAVE_NO_MEMORY(wcard); for (i=0; wcard[i]; i++) { if (kdc_port) { diff --git a/source4/ldap_server/ldap_server.c b/source4/ldap_server/ldap_server.c index 0c0beca..99595eb 100644 --- a/source4/ldap_server/ldap_server.c +++ b/source4/ldap_server/ldap_server.c @@ -962,9 +962,9 @@ static void ldapsrv_task_init(struct task_server *task) if (!NT_STATUS_IS_OK(status)) goto failed; } } else { - const char **wcard; + char **wcard; int i; - wcard = iface_list_wildcard(task, task->lp_ctx); + wcard = iface_list_wildcard(task); if (wcard == NULL) { DEBUG(0,("No wildcard addresses available\n")); goto failed; diff --git a/source4/lib/socket/interface.c b/source4/lib/socket/interface.c index cdfadc9..504a727 100644 --- a/source4/lib/socket/interface.c +++ b/source4/lib/socket/interface.c @@ -503,7 +503,7 @@ bool iface_list_same_net(const char *ip1, const char *ip2, const char *netmask) return the list of wildcard interfaces this will include the IPv4 0.0.0.0, and may include IPv6 :: */ -const char **iface_list_wildcard(TALLOC_CTX *mem_ctx, struct loadparm_context *lp_ctx) +char **iface_list_wildcard(TALLOC_CTX *mem_ctx) { char **ret; #ifdef HAVE_IPV6 @@ -511,5 +511,5 @@ const char **iface_list_wildcard(TALLOC_CTX *mem_ctx, struct loadparm_context *l #else ret = str_list_make(mem_ctx, "0.0.0.0", NULL); #endif - return discard_const_p(const char *, ret); + return ret; } diff --git a/source4/rpc_server/dcerpc_server.c b/source4/rpc_server/dcerpc_server.c index 10e711b..e41c055 100644 --- a/source4/rpc_server/dcerpc_server.c +++ b/source4/rpc_server/dcerpc_server.c @@ -1739,9 +1739,9 @@ static NTSTATUS dcesrv_add_ep_tcp(struct dcesrv_context *dce_ctx, NT_STATUS_NOT_OK_RETURN(status); } } else { - const char **wcard; + char **wcard; int i; - wcard = iface_list_wildcard(dce_ctx, lp_ctx); + wcard = iface_list_wildcard(dce_ctx); NT_STATUS_HAVE_NO_MEMORY(wcard); for (i=0; wcard[i]; i++) { status = add_socket_rpc_tcp_iface(dce_ctx, e, event_ctx, model_ops, wcard[i]); diff --git a/source4/smb_server/service_smb.c b/source4/smb_server/service_smb.c index 958792e..0e4897c 100644 --- a/source4/smb_server/service_smb.c +++ b/source4/smb_server/service_smb.c @@ -63,9 +63,9 @@ static void smbsrv_task_init(struct task_server *task) if (!NT_STATUS_IS_OK(status)) goto failed; } } else { - const char **wcard; + char **wcard; int i; - wcard = iface_list_wildcard(task, task->lp_ctx); + wcard = iface_list_wildcard(task); if (wcard == NULL) { DEBUG(0,("No wildcard addresses available\n")); goto failed; diff --git a/source4/web_server/web_server.c b/source4/web_server/web_server.c index 239612a..0339b55 100644 --- a/source4/web_server/web_server.c +++ b/source4/web_server/web_server.c @@ -336,9 +336,9 @@ static void websrv_task_init(struct task_server *task) talloc_free(ifaces); } else { - const char **wcard; + char **wcard; int i; - wcard = iface_list_wildcard(task, task->lp_ctx); + wcard = iface_list_wildcard(task); if (wcard == NULL) { DEBUG(0,("No wildcard addresses available\n")); goto failed; -- 1.7.9.5