Don't listen on random port (#962950)
This commit is contained in:
		
							parent
							
								
									4b70ef00e1
								
							
						
					
					
						commit
						53d20015af
					
				
							
								
								
									
										136
									
								
								dhcp-dhclient-ddns_lazy.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										136
									
								
								dhcp-dhclient-ddns_lazy.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,136 @@ | |||||||
|  | diff --git a/common/dns.c b/common/dns.c
 | ||||||
|  | index 0f8be80..37878bc 100644
 | ||||||
|  | --- a/common/dns.c
 | ||||||
|  | +++ b/common/dns.c
 | ||||||
|  | @@ -2132,6 +2132,41 @@ void ddns_interlude(isc_task_t  *taskp,
 | ||||||
|  |  } | ||||||
|  |   | ||||||
|  |  /* | ||||||
|  | + * Moved here from omapip/isclib.c, function dhcp_context_create.
 | ||||||
|  | + * Create dnsclient only before the first use.
 | ||||||
|  | + */
 | ||||||
|  | +static isc_result_t
 | ||||||
|  | +dns_client_lazy() {
 | ||||||
|  | +	isc_result_t result;
 | ||||||
|  | +	if (dhcp_gbl_ctx.dnsclient == NULL){
 | ||||||
|  | +		result = dns_client_createx2(dhcp_gbl_ctx.mctx,
 | ||||||
|  | +					     dhcp_gbl_ctx.actx,
 | ||||||
|  | +					     dhcp_gbl_ctx.taskmgr,
 | ||||||
|  | +					     dhcp_gbl_ctx.socketmgr,
 | ||||||
|  | +					     dhcp_gbl_ctx.timermgr,
 | ||||||
|  | +					     0,
 | ||||||
|  | +					     &dhcp_gbl_ctx.dnsclient,
 | ||||||
|  | +					     dhcp_gbl_ctx.local4_ptr,
 | ||||||
|  | +					     dhcp_gbl_ctx.local6_ptr);
 | ||||||
|  | +		if (result != ISC_R_SUCCESS)
 | ||||||
|  | +			return result;
 | ||||||
|  | +		/*
 | ||||||
|  | +		 * If we can't set up the servers we may not be able to
 | ||||||
|  | +		 * do DDNS but we should continue to try and perform
 | ||||||
|  | +		 * our basic functions and let the user sort it out.
 | ||||||
|  | +		 */
 | ||||||
|  | +		result = dhcp_dns_client_setservers();
 | ||||||
|  | +		if (result != ISC_R_SUCCESS) {
 | ||||||
|  | +			log_error("Unable to set resolver from resolv.conf; "
 | ||||||
|  | +				  "startup continuing but DDNS support "
 | ||||||
|  | +				  "may be affected");
 | ||||||
|  | +		}
 | ||||||
|  | +	};
 | ||||||
|  | +	return ISC_R_SUCCESS;
 | ||||||
|  | +}
 | ||||||
|  | +
 | ||||||
|  | +
 | ||||||
|  | +/*
 | ||||||
|  |   * This routine does the generic work for sending a ddns message to | ||||||
|  |   * modify the forward record (A or AAAA) and calls one of a set of | ||||||
|  |   * routines to build the specific message. | ||||||
|  | @@ -2154,6 +2189,10 @@ ddns_modify_fwd(dhcp_ddns_cb_t *ddns_cb, const char *file, int line)
 | ||||||
|  |  	/* Get a pointer to the clientname to make things easier. */ | ||||||
|  |  	clientname = (unsigned char *)ddns_cb->fwd_name.data; | ||||||
|  |   | ||||||
|  | +	result = dns_client_lazy();
 | ||||||
|  | +	if (result != ISC_R_SUCCESS)
 | ||||||
|  | +		return result;
 | ||||||
|  | +
 | ||||||
|  |  	/* Extract and validate the type of the address. */ | ||||||
|  |  	if (ddns_cb->address.len == 4) { | ||||||
|  |  		ddns_cb->address_type = dns_rdatatype_a; | ||||||
|  | @@ -2359,6 +2398,10 @@ ddns_modify_ptr(dhcp_ddns_cb_t *ddns_cb, const char *file, int line)
 | ||||||
|  |  	unsigned char buf[256]; | ||||||
|  |  	int buflen; | ||||||
|  |   | ||||||
|  | +	result = dns_client_lazy();
 | ||||||
|  | +	if (result != ISC_R_SUCCESS)
 | ||||||
|  | +		return result;
 | ||||||
|  | +
 | ||||||
|  |  	/* | ||||||
|  |  	 * Try to lookup the zone in the zone cache.  As with the forward | ||||||
|  |  	 * case it's okay if we don't have one, the DNS code will try to | ||||||
|  | diff --git a/includes/omapip/isclib.h b/includes/omapip/isclib.h
 | ||||||
|  | index caa388a..7f2719b 100644
 | ||||||
|  | --- a/includes/omapip/isclib.h
 | ||||||
|  | +++ b/includes/omapip/isclib.h
 | ||||||
|  | @@ -98,6 +98,8 @@ typedef struct dhcp_context {
 | ||||||
|  |  	isc_timermgr_t	*timermgr; | ||||||
|  |  #if defined (NSUPDATE) | ||||||
|  |    	dns_client_t    *dnsclient; | ||||||
|  | +	isc_sockaddr_t  *local4_ptr;
 | ||||||
|  | +	isc_sockaddr_t  *local6_ptr;
 | ||||||
|  |  #endif | ||||||
|  |  } dhcp_context_t; | ||||||
|  |   | ||||||
|  | diff --git a/omapip/isclib.c b/omapip/isclib.c
 | ||||||
|  | index 13f0d3e..36b399d 100644
 | ||||||
|  | --- a/omapip/isclib.c
 | ||||||
|  | +++ b/omapip/isclib.c
 | ||||||
|  | @@ -220,40 +220,22 @@ dhcp_context_create(int flags,
 | ||||||
|  |  	} | ||||||
|  |   | ||||||
|  |  #if defined (NSUPDATE) | ||||||
|  | +        /*
 | ||||||
|  | +        * Setting addresses only.
 | ||||||
|  | +        * All real work will be done later on if needed to avoid listening 
 | ||||||
|  | +        * on ddns port if client/server was compiled with ddns support 
 | ||||||
|  | +        * but not using it.
 | ||||||
|  | +        */
 | ||||||
|  |  	if ((flags & DHCP_CONTEXT_POST_DB) != 0) { | ||||||
|  | -		isc_sockaddr_t localaddr4, *localaddr4_ptr = NULL;
 | ||||||
|  | -		isc_sockaddr_t localaddr6, *localaddr6_ptr = NULL;
 | ||||||
|  | +		isc_sockaddr_t localaddr4;
 | ||||||
|  | +		isc_sockaddr_t localaddr6;
 | ||||||
|  |  		if (local4 != NULL) { | ||||||
|  |  			isc_sockaddr_fromin(&localaddr4, local4, 0); | ||||||
|  | -			localaddr4_ptr = &localaddr4;
 | ||||||
|  | +			dhcp_gbl_ctx.local4_ptr = &localaddr4;
 | ||||||
|  |  		} | ||||||
|  |  		if (local6 != NULL) { | ||||||
|  |  			isc_sockaddr_fromin6(&localaddr6, local6, 0); | ||||||
|  | -			localaddr6_ptr = &localaddr6;
 | ||||||
|  | -		}
 | ||||||
|  | -
 | ||||||
|  | -		result = dns_client_createx2(dhcp_gbl_ctx.mctx,
 | ||||||
|  | -					     dhcp_gbl_ctx.actx,
 | ||||||
|  | -					     dhcp_gbl_ctx.taskmgr,
 | ||||||
|  | -					     dhcp_gbl_ctx.socketmgr,
 | ||||||
|  | -					     dhcp_gbl_ctx.timermgr,
 | ||||||
|  | -					     0,
 | ||||||
|  | -					     &dhcp_gbl_ctx.dnsclient,
 | ||||||
|  | -					     localaddr4_ptr,
 | ||||||
|  | -					     localaddr6_ptr);
 | ||||||
|  | -		if (result != ISC_R_SUCCESS)
 | ||||||
|  | -			goto cleanup;
 | ||||||
|  | -
 | ||||||
|  | -		/*
 | ||||||
|  | -		 * If we can't set up the servers we may not be able to
 | ||||||
|  | -		 * do DDNS but we should continue to try and perform
 | ||||||
|  | -		 * our basic functions and let the user sort it out.
 | ||||||
|  | -		 */
 | ||||||
|  | -		result = dhcp_dns_client_setservers();
 | ||||||
|  | -		if (result != ISC_R_SUCCESS) {
 | ||||||
|  | -			log_error("Unable to set resolver from resolv.conf; "
 | ||||||
|  | -				  "startup continuing but DDNS support "
 | ||||||
|  | -				  "may be affected");
 | ||||||
|  | +			dhcp_gbl_ctx.local6_ptr = &localaddr6;
 | ||||||
|  |  		} | ||||||
|  |  	} | ||||||
|  |  #endif | ||||||
							
								
								
									
										11
									
								
								dhcp.spec
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								dhcp.spec
									
									
									
									
									
								
							| @ -19,7 +19,7 @@ | |||||||
| Summary:  Dynamic host configuration protocol software | Summary:  Dynamic host configuration protocol software | ||||||
| Name:     dhcp | Name:     dhcp | ||||||
| Version:  4.3.5 | Version:  4.3.5 | ||||||
| Release:  5%{?dist} | Release:  7%{?dist} | ||||||
| # NEVER CHANGE THE EPOCH on this package.  The previous maintainer (prior to | # NEVER CHANGE THE EPOCH on this package.  The previous maintainer (prior to | ||||||
| # dcantrell maintaining the package) made incorrect use of the epoch and | # dcantrell maintaining the package) made incorrect use of the epoch and | ||||||
| # that's why it is at 12 now.  It should have never been used, but it was. | # that's why it is at 12 now.  It should have never been used, but it was. | ||||||
| @ -77,6 +77,9 @@ Patch34:  dhcp-sd_notify.patch | |||||||
| Patch36:  dhcp-option97-pxe-client-id.patch | Patch36:  dhcp-option97-pxe-client-id.patch | ||||||
| Patch37:  dhcp-stateless-DUID-LLT.patch | Patch37:  dhcp-stateless-DUID-LLT.patch | ||||||
| Patch38:  dhcp-dhclient-preinit6s.patch | Patch38:  dhcp-dhclient-preinit6s.patch | ||||||
|  | Patch39:  dhcp-dhclient-ddns_lazy.patch | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
| BuildRequires: autoconf | BuildRequires: autoconf | ||||||
| BuildRequires: automake | BuildRequires: automake | ||||||
| @ -343,6 +346,9 @@ rm bind/bind.tar.gz | |||||||
| # dhclient: make sure link-local address is ready in stateless mode (#1263466) | # dhclient: make sure link-local address is ready in stateless mode (#1263466) | ||||||
| %patch38 -p1 -b .preinit6s | %patch38 -p1 -b .preinit6s | ||||||
| 
 | 
 | ||||||
|  | # [ISC-BUGS] #33377. | ||||||
|  | %patch39 -p1 -b .ddnsport | ||||||
|  | 
 | ||||||
| # DHCLIENT_DEFAULT_PREFIX_LEN  64 -> 128 | # DHCLIENT_DEFAULT_PREFIX_LEN  64 -> 128 | ||||||
| # https://bugzilla.gnome.org/show_bug.cgi?id=656610 | # https://bugzilla.gnome.org/show_bug.cgi?id=656610 | ||||||
| sed -i -e 's|DHCLIENT_DEFAULT_PREFIX_LEN 64|DHCLIENT_DEFAULT_PREFIX_LEN 128|g' includes/site.h | sed -i -e 's|DHCLIENT_DEFAULT_PREFIX_LEN 64|DHCLIENT_DEFAULT_PREFIX_LEN 128|g' includes/site.h | ||||||
| @ -670,6 +676,9 @@ done | |||||||
| %endif | %endif | ||||||
| 
 | 
 | ||||||
| %changelog | %changelog | ||||||
|  | * Tue May 23 2017 Pavel Zhukov <pzhukov@redhat.com> - 12:4.3.5-7 | ||||||
|  | - Don't open ddns port until it's needed. Credits to Petr Menšík for the original idea | ||||||
|  | 
 | ||||||
| * Wed Apr 19 2017 Dominika Hodovska <dhodovsk@redhat.com> - 12:4.3.5-5 | * Wed Apr 19 2017 Dominika Hodovska <dhodovsk@redhat.com> - 12:4.3.5-5 | ||||||
| - don't build doxygen documentation during modular build | - don't build doxygen documentation during modular build | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user