From mboxrd@z Thu Jan 1 00:00:00 1970 From: Michael Tremer To: development@lists.ipfire.org Subject: Re: [PATCH] dnsmasq: 2.76test10 with latest patches (001-004) Date: Sun, 28 Feb 2016 12:19:25 -0800 Message-ID: <1456690765.2371.10.camel@ipfire.org> In-Reply-To: <1456507768-1796-1-git-send-email-matthias.fischer@ipfire.org> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============2142730740329272608==" List-Id: --===============2142730740329272608== Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Hi, I merged this patch and the one after. Please give this version a good test as it is a pre-release version. You can maintain a branch where you integrate all new changes, but I think it is not required to send every single one to the mailing list. It creates a bit of noise and I think that unfortunately nobody is testing every single one any ways. Which is sad. Can we have maybe one aggregated patch after every release of a Core Update? So we always have the latest version of dnsmasq in the updates? Best, -Michael On Fri, 2016-02-26 at 18:29 +0100, Matthias Fischer wrote: > This is 'dnsmasq 2.76test10', based on current 'next', containing > latest patches. >=20 > Signed-off-by: Matthias Fischer > --- > =C2=A0lfs/dnsmasq=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0|=C2=A0=C2=A0=C2=A039 +- > =C2=A0...TL_parameter_to_--host-record_and_--cname.patch |=C2=A0=C2=A0265 += ++ > =C2=A0...01-include_0_0_0_0_8_in_DNS_rebind_checks.patch |=C2=A0=C2=A0=C2= =A041 - > =C2=A0.../dnsmasq/002-Add_--dhcp-ttl_option.patch=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0|=C2=A0=C2=A0117 ++ > =C2=A0...subnet_to_allow_arbitary_subnet_addresses.patch |=C2=A0=C2=A0271 -= -- > =C2=A0src/patches/dnsmasq/003-Update_CHANGELOG.patch=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0|=C2=A0=C2=A0=C2=A017 + > =C2=A0...h_zones_locally_when_localise_queries_set.patch |=C2=A0=C2=A0=C2= =A034 - > =C2=A0.../dnsmasq/004-Add_--tftp-mtu_option.patch=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0|=C2=A0=C2=A0136 ++ > =C2=A0.../004-fix_behaviour_of_empty_dhcp-option.patch=C2=A0=C2=A0=C2=A0|= =C2=A0=C2=A0=C2=A038 - > =C2=A0...ution_to_ENOMEM_error_with_IPv6_multicast.patch |=C2=A0=C2=A0=C2= =A050 - > =C2=A0...page_on_RDNSS_set_in_router_advertisement.patch |=C2=A0=C2=A0=C2= =A035 - > =C2=A0...gned_dangling_CNAME_replies_to_DS_queries.patch |=C2=A0=C2=A0=C2= =A030 - > =C2=A0...6_option_56_does_not_hold_an_address_list.patch |=C2=A0=C2=A0=C2= =A025 - > =C2=A0...pect_the_--no_resolv_flag_in_inotify_code.patch |=C2=A0=C2=A0=C2= =A047 - > =C2=A0..._5e3e464ac4022ee0b3794513abe510817e2cf3ca.patch |=C2=A0=C2=A0=C2= =A026 - > =C2=A0...11-Catch_errors_from_sendmsg_in_DHCP_code.patch |=C2=A0=C2=A0=C2= =A032 - > =C2=A0...12-Update_list_of_subnet_for_--bogus-priv.patch |=C2=A0=C2=A0=C2= =A048 - > =C2=A0...y_address_from_DNS_overlays_A_record_from.patch |=C2=A0=C2=A0=C2= =A043 - > =C2=A0...14-Handle_unknown_DS_hash_algos_correctly.patch |=C2=A0=C2=A0=C2= =A039 - > =C2=A0.../015-Fix_crash_at_start_up_with_conf-dir.patch=C2=A0=C2=A0|=C2=A0= =C2=A0=C2=A038 - > =C2=A0...ajor_rationalisation_of_DNSSEC_validation.patch | 2209 ---------- > ---------- > =C2=A0...hing_RRSIGs_and_returning_them_from_cache.patch |=C2=A0=C2=A0612 -= ----- > =C2=A0...caches_DS_records_to_a_more_logical_place.patch |=C2=A0=C2=A0269 -= -- > =C2=A0...lise_RR-filtering_code_for_use_with_EDNS0.patch |=C2=A0=C2=A0755 -= ------ > =C2=A0.../dnsmasq/020-DNSSEC_validation_tweak.patch=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0|=C2=A0=C2=A0134 -- > =C2=A0...1-Tweaks_to_EDNS0_handling_in_DNS_replies.patch |=C2=A0=C2=A0133 -- > =C2=A0..._code_Check_zone_status_is_NSEC_proof_bad.patch |=C2=A0=C2=A0409 -= --- > =C2=A0...023-Fix_brace_botch_in_dnssec_validate_ds.patch |=C2=A0=C2=A0=C2= =A098 - > =C2=A0...ning_which_DNSSEC_sig_algos_are_supported.patch |=C2=A0=C2=A0145 -- > =C2=A0...EDNS0_handling_and_computation_use_of_udp.patch |=C2=A0=C2=A0643 -= ----- > =C2=A0...aks_in_handling_unknown_DNSSEC_algorithms.patch |=C2=A0=C2=A0262 -= -- > =C2=A0...obscure_off-by-one_in_DNSSEC_hostname_cmp.patch |=C2=A0=C2=A0=C2= =A027 - > =C2=A0.../028-Minor_tweak_to_previous_commit.patch=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0|=C2=A0=C2=A0=C2=A039 - > =C2=A0.../dnsmasq/029-NSEC3_check_RFC5155_para_8_2.patch |=C2=A0=C2=A0=C2= =A039 - > =C2=A034 files changed, 542 insertions(+), 6603 deletions(-) > =C2=A0create mode 100644 src/patches/dnsmasq/001-Add_TTL_parameter_to_ > --host-record_and_--cname.patch > =C2=A0delete mode 100644 src/patches/dnsmasq/001- > include_0_0_0_0_8_in_DNS_rebind_checks.patch > =C2=A0create mode 100644 src/patches/dnsmasq/002-Add_--dhcp- > ttl_option.patch > =C2=A0delete mode 100644 src/patches/dnsmasq/002- > enhance_add_subnet_to_allow_arbitary_subnet_addresses.patch > =C2=A0create mode 100644 src/patches/dnsmasq/003-Update_CHANGELOG.patch > =C2=A0delete mode 100644 src/patches/dnsmasq/003- > dont_answer_non_auth_queries_for_auth_zones_locally_when_localise_que > ries_set.patch > =C2=A0create mode 100644 src/patches/dnsmasq/004-Add_--tftp- > mtu_option.patch > =C2=A0delete mode 100644 src/patches/dnsmasq/004- > fix_behaviour_of_empty_dhcp-option.patch > =C2=A0delete mode 100644 src/patches/dnsmasq/005- > suggest_solution_to_ENOMEM_error_with_IPv6_multicast.patch > =C2=A0delete mode 100644 src/patches/dnsmasq/006- > clarify_man_page_on_RDNSS_set_in_router_advertisement.patch > =C2=A0delete mode 100644 src/patches/dnsmasq/007- > handle_signed_dangling_CNAME_replies_to_DS_queries.patch > =C2=A0delete mode 100644 src/patches/dnsmasq/008- > DHCPv6_option_56_does_not_hold_an_address_list.patch > =C2=A0delete mode 100644 src/patches/dnsmasq/009-Respect_the_ > --no_resolv_flag_in_inotify_code.patch > =C2=A0delete mode 100644 src/patches/dnsmasq/010- > Rationalise_5e3e464ac4022ee0b3794513abe510817e2cf3ca.patch > =C2=A0delete mode 100644 src/patches/dnsmasq/011- > Catch_errors_from_sendmsg_in_DHCP_code.patch > =C2=A0delete mode 100644 src/patches/dnsmasq/012- > Update_list_of_subnet_for_--bogus-priv.patch > =C2=A0delete mode 100644 src/patches/dnsmasq/013- > Fix_crash_when_empty_address_from_DNS_overlays_A_record_from.patch > =C2=A0delete mode 100644 src/patches/dnsmasq/014- > Handle_unknown_DS_hash_algos_correctly.patch > =C2=A0delete mode 100644 src/patches/dnsmasq/015- > Fix_crash_at_start_up_with_conf-dir.patch > =C2=A0delete mode 100644 src/patches/dnsmasq/016- > Major_rationalisation_of_DNSSEC_validation.patch > =C2=A0delete mode 100644 src/patches/dnsmasq/017- > Abandon_caching_RRSIGs_and_returning_them_from_cache.patch > =C2=A0delete mode 100644 src/patches/dnsmasq/018- > Move_code_which_caches_DS_records_to_a_more_logical_place.patch > =C2=A0delete mode 100644 src/patches/dnsmasq/019-Generalise_RR- > filtering_code_for_use_with_EDNS0.patch > =C2=A0delete mode 100644 src/patches/dnsmasq/020- > DNSSEC_validation_tweak.patch > =C2=A0delete mode 100644 src/patches/dnsmasq/021- > Tweaks_to_EDNS0_handling_in_DNS_replies.patch > =C2=A0delete mode 100644 src/patches/dnsmasq/022-Tidy_up_DNSSEC_non- > existence_code_Check_zone_status_is_NSEC_proof_bad.patch > =C2=A0delete mode 100644 src/patches/dnsmasq/023- > Fix_brace_botch_in_dnssec_validate_ds.patch > =C2=A0delete mode 100644 src/patches/dnsmasq/024- > Do_a_better_job_of_determining_which_DNSSEC_sig_algos_are_supported.p > atch > =C2=A0delete mode 100644 src/patches/dnsmasq/025- > Major_tidy_up_of_EDNS0_handling_and_computation_use_of_udp.patch > =C2=A0delete mode 100644 src/patches/dnsmasq/026- > More_tweaks_in_handling_unknown_DNSSEC_algorithms.patch > =C2=A0delete mode 100644 src/patches/dnsmasq/027- > Nasty_rare_and_obscure_off-by-one_in_DNSSEC_hostname_cmp.patch > =C2=A0delete mode 100644 src/patches/dnsmasq/028- > Minor_tweak_to_previous_commit.patch > =C2=A0delete mode 100644 src/patches/dnsmasq/029- > NSEC3_check_RFC5155_para_8_2.patch >=20 > diff --git a/lfs/dnsmasq b/lfs/dnsmasq > index 8058663..29d7895 100644 > --- a/lfs/dnsmasq > +++ b/lfs/dnsmasq > @@ -1,7 +1,7 @@ > =C2=A0#################################################################### > ########### > =C2=A0#=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0# > =C2=A0# IPFire.org - A linux based > firewall=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0# > -# Copyright (C) 2015=C2=A0=C2=A0Michael Tremer & Christian > Schmidt=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0# > +# Copyright (C) 2016=C2=A0=C2=A0Michael Tremer & Christian > Schmidt=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0# > =C2=A0#=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0# > =C2=A0# This program is free software: you can redistribute it and/or > modify=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0# > =C2=A0# it under the terms of the GNU General Public License as published > by=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0# > @@ -24,7 +24,7 @@ > =C2=A0 > =C2=A0include Config > =C2=A0 > -VER=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=3D 2.75 > +VER=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=3D 2.76test10 > =C2=A0 > =C2=A0THISAPP=C2=A0=C2=A0=C2=A0=C2=A0=3D dnsmasq-$(VER) > =C2=A0DL_FILE=C2=A0=C2=A0=C2=A0=C2=A0=3D $(THISAPP).tar.xz > @@ -43,7 +43,7 @@ objects =3D $(DL_FILE) > =C2=A0 > =C2=A0$(DL_FILE) =3D $(DL_FROM)/$(DL_FILE) > =C2=A0 > -$(DL_FILE)_MD5 =3D 887236f1ddde6eb57cdb9d01916c9f72 > +$(DL_FILE)_MD5 =3D 4b51474ed6081b18c61407077f254cf7 > =C2=A0 > =C2=A0install : $(TARGET) > =C2=A0 > @@ -73,35 +73,10 @@ $(subst %,%_MD5,$(objects)) : > =C2=A0$(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) > =C2=A0 @$(PREBUILD) > =C2=A0 @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar axf > $(DIR_DL)/$(DL_FILE) > - cd $(DIR_APP) && patch -Np1 -i > $(DIR_SRC)/src/patches/dnsmasq/001- > include_0_0_0_0_8_in_DNS_rebind_checks.patch > - cd $(DIR_APP) && patch -Np1 -i > $(DIR_SRC)/src/patches/dnsmasq/002- > enhance_add_subnet_to_allow_arbitary_subnet_addresses.patch > - cd $(DIR_APP) && patch -Np1 -i > $(DIR_SRC)/src/patches/dnsmasq/003- > dont_answer_non_auth_queries_for_auth_zones_locally_when_localise_que > ries_set.patch > - cd $(DIR_APP) && patch -Np1 -i > $(DIR_SRC)/src/patches/dnsmasq/004-fix_behaviour_of_empty_dhcp- > option.patch > - cd $(DIR_APP) && patch -Np1 -i > $(DIR_SRC)/src/patches/dnsmasq/005- > suggest_solution_to_ENOMEM_error_with_IPv6_multicast.patch > - cd $(DIR_APP) && patch -Np1 -i > $(DIR_SRC)/src/patches/dnsmasq/006- > clarify_man_page_on_RDNSS_set_in_router_advertisement.patch > - cd $(DIR_APP) && patch -Np1 -i > $(DIR_SRC)/src/patches/dnsmasq/007- > handle_signed_dangling_CNAME_replies_to_DS_queries.patch > - cd $(DIR_APP) && patch -Np1 -i > $(DIR_SRC)/src/patches/dnsmasq/008- > DHCPv6_option_56_does_not_hold_an_address_list.patch > - cd $(DIR_APP) && patch -Np1 -i > $(DIR_SRC)/src/patches/dnsmasq/009-Respect_the_ > --no_resolv_flag_in_inotify_code.patch > - cd $(DIR_APP) && patch -Np1 -i > $(DIR_SRC)/src/patches/dnsmasq/010- > Rationalise_5e3e464ac4022ee0b3794513abe510817e2cf3ca.patch > - cd $(DIR_APP) && patch -Np1 -i > $(DIR_SRC)/src/patches/dnsmasq/011- > Catch_errors_from_sendmsg_in_DHCP_code.patch > - cd $(DIR_APP) && patch -Np1 -i > $(DIR_SRC)/src/patches/dnsmasq/012-Update_list_of_subnet_for_--bogus- > priv.patch > - cd $(DIR_APP) && patch -Np1 -i > $(DIR_SRC)/src/patches/dnsmasq/013- > Fix_crash_when_empty_address_from_DNS_overlays_A_record_from.patch > - cd $(DIR_APP) && patch -Np1 -i > $(DIR_SRC)/src/patches/dnsmasq/014- > Handle_unknown_DS_hash_algos_correctly.patch > - cd $(DIR_APP) && patch -Np1 -i > $(DIR_SRC)/src/patches/dnsmasq/015-Fix_crash_at_start_up_with_conf- > dir.patch > - cd $(DIR_APP) && patch -Np1 -i > $(DIR_SRC)/src/patches/dnsmasq/016- > Major_rationalisation_of_DNSSEC_validation.patch > - cd $(DIR_APP) && patch -Np1 -i > $(DIR_SRC)/src/patches/dnsmasq/017- > Abandon_caching_RRSIGs_and_returning_them_from_cache.patch > - cd $(DIR_APP) && patch -Np1 -i > $(DIR_SRC)/src/patches/dnsmasq/018- > Move_code_which_caches_DS_records_to_a_more_logical_place.patch > - cd $(DIR_APP) && patch -Np1 -i > $(DIR_SRC)/src/patches/dnsmasq/019-Generalise_RR- > filtering_code_for_use_with_EDNS0.patch > - cd $(DIR_APP) && patch -Np1 -i > $(DIR_SRC)/src/patches/dnsmasq/020-DNSSEC_validation_tweak.patch > - cd $(DIR_APP) && patch -Np1 -i > $(DIR_SRC)/src/patches/dnsmasq/021- > Tweaks_to_EDNS0_handling_in_DNS_replies.patch > - cd $(DIR_APP) && patch -Np1 -i > $(DIR_SRC)/src/patches/dnsmasq/022-Tidy_up_DNSSEC_non- > existence_code_Check_zone_status_is_NSEC_proof_bad.patch > - cd $(DIR_APP) && patch -Np1 -i > $(DIR_SRC)/src/patches/dnsmasq/023- > Fix_brace_botch_in_dnssec_validate_ds.patch > - cd $(DIR_APP) && patch -Np1 -i > $(DIR_SRC)/src/patches/dnsmasq/024- > Do_a_better_job_of_determining_which_DNSSEC_sig_algos_are_supported.p > atch > - cd $(DIR_APP) && patch -Np1 -i > $(DIR_SRC)/src/patches/dnsmasq/025- > Major_tidy_up_of_EDNS0_handling_and_computation_use_of_udp.patch > - cd $(DIR_APP) && patch -Np1 -i > $(DIR_SRC)/src/patches/dnsmasq/026- > More_tweaks_in_handling_unknown_DNSSEC_algorithms.patch > - cd $(DIR_APP) && patch -Np1 -i > $(DIR_SRC)/src/patches/dnsmasq/027-Nasty_rare_and_obscure_off-by- > one_in_DNSSEC_hostname_cmp.patch > - cd $(DIR_APP) && patch -Np1 -i > $(DIR_SRC)/src/patches/dnsmasq/028- > Minor_tweak_to_previous_commit.patch > - cd $(DIR_APP) && patch -Np1 -i > $(DIR_SRC)/src/patches/dnsmasq/029-NSEC3_check_RFC5155_para_8_2.patch > + cd $(DIR_APP) && patch -Np1 -i > $(DIR_SRC)/src/patches/dnsmasq/001-Add_TTL_parameter_to_--host- > record_and_--cname.patch > + cd $(DIR_APP) && patch -Np1 -i > $(DIR_SRC)/src/patches/dnsmasq/002-Add_--dhcp-ttl_option.patch > + cd $(DIR_APP) && patch -Np1 -i > $(DIR_SRC)/src/patches/dnsmasq/003-Update_CHANGELOG.patch > + cd $(DIR_APP) && patch -Np1 -i > $(DIR_SRC)/src/patches/dnsmasq/004-Add_--tftp-mtu_option.patch > =C2=A0 cd $(DIR_APP) && patch -Np1 -i > $(DIR_SRC)/src/patches/dnsmasq-Add-support-to-read-ISC-DHCP-lease- > file.patch > =C2=A0 > =C2=A0 cd $(DIR_APP) && sed -i src/config.h \ > diff --git a/src/patches/dnsmasq/001-Add_TTL_parameter_to_--host- > record_and_--cname.patch b/src/patches/dnsmasq/001- > Add_TTL_parameter_to_--host-record_and_--cname.patch > new file mode 100644 > index 0000000..86fbc9c > --- /dev/null > +++ b/src/patches/dnsmasq/001-Add_TTL_parameter_to_--host- > record_and_--cname.patch > @@ -0,0 +1,265 @@ > +From df3d54f776a3c9b60735b45c0b7fd88b66a2d5c4 Mon Sep 17 00:00:00 > 2001 > +From: Simon Kelley > +Date: Wed, 24 Feb 2016 21:03:38 +0000 > +Subject: [PATCH] Add TTL parameter to --host-record and --cname. > + > +--- > + man/dnsmasq.8 |=C2=A0=C2=A0=C2=A012 ++++++++++-- > + src/cache.c=C2=A0=C2=A0=C2=A0|=C2=A0=C2=A0=C2=A0=C2=A07 +++++++ > + src/dnsmasq.h |=C2=A0=C2=A0=C2=A0=C2=A02 ++ > + src/option.c=C2=A0=C2=A0|=C2=A0=C2=A0=C2=A046 +++++++++++++++++++++++++++= +++++++++++-------- > + src/rfc1035.c |=C2=A0=C2=A0=C2=A0=C2=A06 +++++- > + 5 files changed, 62 insertions(+), 11 deletions(-) > + > +diff --git a/man/dnsmasq.8 b/man/dnsmasq.8 > +index b782eaf..7bc1394 100644 > +--- a/man/dnsmasq.8 > ++++ b/man/dnsmasq.8 > +@@ -529,7 +529,7 @@ zone files: the port, weight and priority > numbers are in a different > + order. More than one SRV record for a given service/domain is > allowed, > + all that match are returned. > + .TP > +-.B --host-record=3D[,....],[],[ address>] > ++.B --host-record=3D[,....],[],[ address>][,] > + Add A, AAAA and PTR records to the DNS. This adds one or more names > to > + the DNS with associated IPv4 (A) and IPv6 (AAAA) records. A name > may > + appear in more than one=C2=A0 > +@@ -546,6 +546,10 @@ is in effect. Short and long names may appear > in the same > + .B host-record, > + eg.=C2=A0 > + .B --host-record=3Dlaptop,laptop.thekelleys.org,192.168.0.1,1234::100 > ++ > ++If the time-to-live is given, it overrides the default, which is > zero > ++or the value of --local-ttl. The value is a positive integer and > gives=C2=A0 > ++the time-to-live in seconds. > + .TP > + .B \-Y, --txt-record=3D[[,],] > + Return a TXT DNS record. The value of TXT record is a set of > strings, > +@@ -559,7 +563,7 @@ Return a PTR DNS record. > + .B --naptr- > record=3D,,,,,[, cement>] > + Return an NAPTR DNS record, as specified in RFC3403. > + .TP > +-.B --cname=3D, > ++.B --cname=3D,[,] > + Return a CNAME record which indicates that is really > + . There are significant limitations on the target; it must > be a > + DNS name which is known to dnsmasq from /etc/hosts (or additional > +@@ -568,6 +572,10 @@ hosts files), from DHCP, from --interface-name > or from another > + If the target does not satisfy this > + criteria, the whole cname is ignored. The cname must be unique, but > it > + is permissable to have more than one cname pointing to the same > target. > ++ > ++If the time-to-live is given, it overrides the default, which is > zero > ++or the value of -local-ttl. The value is a positive integer and > gives=C2=A0 > ++the time-to-live in seconds. > + .TP > + .B --dns-rr=3D,,[] > + Return an arbitrary DNS Resource Record. The number is the type of > the > +diff --git a/src/cache.c b/src/cache.c > +index a9eaa65..4ecd535 100644 > +--- a/src/cache.c > ++++ b/src/cache.c > +@@ -778,6 +778,7 @@ static void add_hosts_cname(struct crec *target) > +=C2=A0 (crec =3D whine_malloc(sizeof(struct crec)))) > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0{ > +=C2=A0 crec->flags =3D F_FORWARD | F_IMMORTAL | F_NAMEP | F_CONFIG | > F_CNAME; > ++ crec->ttd =3D a->ttl; > +=C2=A0 crec->name.namep =3D a->alias; > +=C2=A0 crec->addr.cname.target.cache =3D target; > +=C2=A0 crec->addr.cname.uid =3D target->uid; > +@@ -981,6 +982,7 @@ int read_hostsfile(char *filename, unsigned int > index, int cache_size, struct cr > +=C2=A0 =C2=A0=C2=A0strcat(cache->name.sname, "."); > +=C2=A0 =C2=A0=C2=A0strcat(cache->name.sname, domain_suffix); > +=C2=A0 =C2=A0=C2=A0cache->flags =3D flags; > ++ =C2=A0=C2=A0cache->ttd =3D daemon->local_ttl; > +=C2=A0 =C2=A0=C2=A0add_hosts_entry(cache, &addr, addrlen, index, > rhash, hashsz); > +=C2=A0 =C2=A0=C2=A0name_count++; > +=C2=A0 } > +@@ -988,6 +990,7 @@ int read_hostsfile(char *filename, unsigned int > index, int cache_size, struct cr > +=C2=A0 { > +=C2=A0 =C2=A0=C2=A0strcpy(cache->name.sname, canon); > +=C2=A0 =C2=A0=C2=A0cache->flags =3D flags; > ++ =C2=A0=C2=A0cache->ttd =3D daemon->local_ttl; > +=C2=A0 =C2=A0=C2=A0add_hosts_entry(cache, &addr, addrlen, index, > rhash, hashsz); > +=C2=A0 =C2=A0=C2=A0name_count++; > +=C2=A0 } > +@@ -1057,6 +1060,7 @@ void cache_reload(void) > +=C2=A0 =C2=A0=C2=A0((cache =3D whine_malloc(sizeof(struct crec))))) > +=C2=A0 { > +=C2=A0 =C2=A0=C2=A0cache->flags =3D F_FORWARD | F_NAMEP | F_CNAME | F_IMMO= RTAL > | F_CONFIG; > ++ =C2=A0=C2=A0cache->ttd =3D a->ttl; > +=C2=A0 =C2=A0=C2=A0cache->name.namep =3D a->alias; > +=C2=A0 =C2=A0=C2=A0cache->addr.cname.target.int_name =3D intr; > +=C2=A0 =C2=A0=C2=A0cache->addr.cname.uid =3D SRC_INTERFACE; > +@@ -1071,6 +1075,7 @@ void cache_reload(void) > +=C2=A0 (cache->addr.ds.keydata =3D blockdata_alloc(ds->digest, ds- > >digestlen))) > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0{ > +=C2=A0 cache->flags =3D F_FORWARD | F_IMMORTAL | F_DS | F_CONFIG | > F_NAMEP; > ++ cache->ttd =3D daemon->local_ttl; > +=C2=A0 cache->name.namep =3D ds->name; > +=C2=A0 cache->addr.ds.keylen =3D ds->digestlen; > +=C2=A0 cache->addr.ds.algo =3D ds->algo; > +@@ -1095,6 +1100,7 @@ void cache_reload(void) > +=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0(cache =3D whine_malloc(sizeof(struct crec)= ))) > +=C2=A0 =C2=A0=C2=A0{ > +=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0cache->name.namep =3D nl->name; > ++ =C2=A0=C2=A0=C2=A0=C2=A0cache->ttd =3D hr->ttl; > +=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0cache->flags =3D F_HOSTS | F_IMMORTAL | F_F= ORWARD | > F_REVERSE | F_IPV4 | F_NAMEP | F_CONFIG; > +=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0add_hosts_entry(cache, (struct all_addr *)&= hr->addr, > INADDRSZ, SRC_CONFIG, (struct crec **)daemon->packet, revhashsz); > +=C2=A0 =C2=A0=C2=A0} > +@@ -1103,6 +1109,7 @@ void cache_reload(void) > +=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0(cache =3D whine_malloc(sizeof(struct crec)= ))) > +=C2=A0 =C2=A0=C2=A0{ > +=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0cache->name.namep =3D nl->name; > ++ =C2=A0=C2=A0=C2=A0=C2=A0cache->ttd =3D hr->ttl; > +=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0cache->flags =3D F_HOSTS | F_IMMORTAL | F_F= ORWARD | > F_REVERSE | F_IPV6 | F_NAMEP | F_CONFIG; > +=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0add_hosts_entry(cache, (struct all_addr *)&= hr->addr6, > IN6ADDRSZ, SRC_CONFIG, (struct crec **)daemon->packet, revhashsz); > +=C2=A0 =C2=A0=C2=A0} > +diff --git a/src/dnsmasq.h b/src/dnsmasq.h > +index 6d1c5ae..6344df5 100644 > +--- a/src/dnsmasq.h > ++++ b/src/dnsmasq.h > +@@ -308,6 +308,7 @@ struct ptr_record { > + }; > +=C2=A0 > + struct cname { > ++=C2=A0=C2=A0int ttl; > +=C2=A0=C2=A0=C2=A0char *alias, *target; > +=C2=A0=C2=A0=C2=A0struct cname *next; > + };=C2=A0 > +@@ -344,6 +345,7 @@ struct auth_zone { > +=C2=A0 > +=C2=A0 > + struct host_record { > ++=C2=A0=C2=A0int ttl; > +=C2=A0=C2=A0=C2=A0struct name_list { > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0char *name; > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0struct name_list *next; > +diff --git a/src/option.c b/src/option.c > +index c98bdc9..7c5e6bc 100644 > +--- a/src/option.c > ++++ b/src/option.c > +@@ -448,20 +448,20 @@ static struct { > +=C2=A0=C2=A0=C2=A0{ LOPT_GEN_NAMES, ARG_DUP, "[=3Dtag:]", gettext_noo= p("Generate > hostnames based on MAC address for nameless clients."), NULL}, > +=C2=A0=C2=A0=C2=A0{ LOPT_PROXY, ARG_DUP, "[=3D]...", gettext_noop(= "Use these > DHCP relays as full proxies."), NULL }, > +=C2=A0=C2=A0=C2=A0{ LOPT_RELAY, ARG_DUP, ",[,]", > gettext_noop("Relay DHCP requests to a remote server"), NULL}, > +-=C2=A0=C2=A0{ LOPT_CNAME, ARG_DUP, ",", gettext_noop("Spec= ify > alias name for LOCAL DNS name."), NULL }, > ++=C2=A0=C2=A0{ LOPT_CNAME, ARG_DUP, ",[,]", > gettext_noop("Specify alias name for LOCAL DNS name."), NULL }, > +=C2=A0=C2=A0=C2=A0{ LOPT_PXE_PROMT, ARG_DUP, ",[]", > gettext_noop("Prompt to send to PXE clients."), NULL }, > +=C2=A0=C2=A0=C2=A0{ LOPT_PXE_SERV, ARG_DUP, "", gettext_noop("Boo= t service > for PXE menu."), NULL }, > +=C2=A0=C2=A0=C2=A0{ LOPT_TEST, 0, NULL, gettext_noop("Check configuration > syntax."), NULL }, > +=C2=A0=C2=A0=C2=A0{ LOPT_ADD_MAC, ARG_DUP, "[=3Dbase64|text]", gettext_noo= p("Add > requestor's MAC address to forwarded DNS queries."), NULL }, > +=C2=A0=C2=A0=C2=A0{ LOPT_ADD_SBNET, ARG_ONE, "[,]", > gettext_noop("Add specified IP subnet to forwarded DNS queries."), > NULL }, > +-=C2=A0=C2=A0=C2=A0{ LOPT_CPE_ID, ARG_ONE, "", gettext_noop("Add cli= ent > identification to forwarded DNS queries."), NULL }, > ++=C2=A0=C2=A0{ LOPT_CPE_ID, ARG_ONE, "", gettext_noop("Add client > identification to forwarded DNS queries."), NULL }, > +=C2=A0=C2=A0=C2=A0{ LOPT_DNSSEC, OPT_DNSSEC_PROXY, NULL, gettext_noop("Pro= xy DNSSEC > validation results from upstream nameservers."), NULL }, > +=C2=A0=C2=A0=C2=A0{ LOPT_INCR_ADDR, OPT_CONSEC_ADDR, NULL, gettext_noop("A= ttempt to > allocate sequential IP addresses to DHCP clients."), NULL }, > +=C2=A0=C2=A0=C2=A0{ LOPT_CONNTRACK, OPT_CONNTRACK, NULL, gettext_noop("Copy > connection-track mark from queries to upstream connections."), NULL > }, > +=C2=A0=C2=A0=C2=A0{ LOPT_FQDN, OPT_FQDN_UPDATE, NULL, gettext_noop("Allow = DHCP > clients to do their own DDNS updates."), NULL }, > +=C2=A0=C2=A0=C2=A0{ LOPT_RA, OPT_RA, NULL, gettext_noop("Send router-adver= tisements=20 > for interfaces doing DHCPv6"), NULL }, > +=C2=A0=C2=A0=C2=A0{ LOPT_DUID, ARG_ONE, ",", > gettext_noop("Specify DUID_EN-type DHCPv6 server DUID"), NULL }, > +-=C2=A0=C2=A0{ LOPT_HOST_REC, ARG_DUP, ",
", > gettext_noop("Specify host (A/AAAA and PTR) records"), NULL }, > ++=C2=A0=C2=A0{ LOPT_HOST_REC, ARG_DUP, ",
[,]", > gettext_noop("Specify host (A/AAAA and PTR) records"), NULL }, > +=C2=A0=C2=A0=C2=A0{ LOPT_RR, ARG_DUP, ",,[]", > gettext_noop("Specify arbitrary DNS resource record"), NULL }, > +=C2=A0=C2=A0=C2=A0{ LOPT_CLVERBIND, OPT_CLEVERBIND, NULL, gettext_noop("Bi= nd to > interfaces in use - check for new interfaces"), NULL }, > +=C2=A0=C2=A0=C2=A0{ LOPT_AUTHSERV, ARG_ONE, ",", > gettext_noop("Export local names to global DNS"), NULL }, > +@@ -3692,12 +3692,15 @@ static int one_opt(int option, char *arg, > char *errstr, char *gen_err, int comma > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0case LOPT_CNAME: /* --cname */ > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0{ > +=C2=A0 struct cname *new; > +- char *alias; > +- char *target; > ++ char *alias, *target, *ttls; > ++ int ttl =3D -1; > +=C2=A0 > +=C2=A0 if (!(comma =3D split(arg))) > +=C2=A0 =C2=A0=C2=A0ret_err(gen_err); > +=C2=A0=09 > ++ if ((ttls =3D split(comma)) && !atoi_check(ttls, &ttl)) > ++ =C2=A0=C2=A0ret_err(_("bad TTL")); > ++=09 > +=C2=A0 alias =3D canonicalise_opt(arg); > +=C2=A0 target =3D canonicalise_opt(comma); > +=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0 > +@@ -3713,6 +3716,7 @@ static int one_opt(int option, char *arg, char > *errstr, char *gen_err, int comma > +=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0daemon->cnames =3D new; > +=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0new->alias =3D alias; > +=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0new->target =3D target; > ++ =C2=A0=C2=A0=C2=A0=C2=A0new->ttl =3D ttl; > +=C2=A0 =C2=A0=C2=A0} > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 > +=C2=A0 break; > +@@ -3913,14 +3917,22 @@ static int one_opt(int option, char *arg, > char *errstr, char *gen_err, int comma > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0{ > +=C2=A0 struct host_record *new =3D opt_malloc(sizeof(struct > host_record)); > +=C2=A0 memset(new, 0, sizeof(struct host_record)); > +-=09 > ++ new->ttl =3D -1; > ++ > +=C2=A0 if (!arg || !(comma =3D split(arg))) > +=C2=A0 =C2=A0=C2=A0ret_err(_("Bad host-record")); > +=C2=A0=09 > +=C2=A0 while (arg) > +=C2=A0 =C2=A0=C2=A0{ > +=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0struct all_addr addr; > +- =C2=A0=C2=A0=C2=A0=C2=A0if (inet_pton(AF_INET, arg, &addr)) > ++ =C2=A0=C2=A0=C2=A0=C2=A0char *dig; > ++ > ++ =C2=A0=C2=A0=C2=A0=C2=A0for (dig =3D arg; *dig !=3D 0; dig++) > ++ =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0if (*dig < '0' || *dig > '9') > ++ break; > ++ =C2=A0=C2=A0=C2=A0=C2=A0if (*dig =3D=3D 0) > ++ =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0new->ttl =3D atoi(arg); > ++ =C2=A0=C2=A0=C2=A0=C2=A0else if (inet_pton(AF_INET, arg, &addr)) > +=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0new->addr =3D addr.addr.addr4; > + #ifdef HAVE_IPV6 > +=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0else if (inet_pton(AF_INET6, arg, &addr)) > +@@ -4601,7 +4613,25 @@ void read_opts(int argc, char **argv, char > *compile_opts) > +=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0} > +=C2=A0 }=C2=A0 > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0} > +-=C2=A0=C2=A0 > ++ > ++=C2=A0=C2=A0if (daemon->host_records) > ++=C2=A0=C2=A0=C2=A0=C2=A0{ > ++=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0struct host_record *hr; > ++=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 > ++=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0for (hr =3D daemon->host_records; hr;= hr =3D hr->next) > ++ if (hr->ttl =3D=3D -1) > ++ =C2=A0=C2=A0hr->ttl =3D daemon->local_ttl; > ++=C2=A0=C2=A0=C2=A0=C2=A0} > ++ > ++=C2=A0=C2=A0if (daemon->cnames) > ++=C2=A0=C2=A0=C2=A0=C2=A0{ > ++=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0struct cname *cn; > ++=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 > ++=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0for (cn =3D daemon->cnames; cn; cn = =3D cn->next) > ++ if (cn->ttl =3D=3D -1) > ++ =C2=A0=C2=A0cn->ttl =3D daemon->local_ttl; > ++=C2=A0=C2=A0=C2=A0=C2=A0} > ++ > +=C2=A0=C2=A0=C2=A0if (daemon->if_addrs) > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0{=C2=A0=C2=A0 > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0struct iname *tmp; > +diff --git a/src/rfc1035.c b/src/rfc1035.c > +index 9c0ddb5..3535a71 100644 > +--- a/src/rfc1035.c > ++++ b/src/rfc1035.c > +@@ -1169,9 +1169,13 @@ static unsigned long crec_ttl(struct crec > *crecp, time_t now) > +=C2=A0=C2=A0=C2=A0/* Return 0 ttl for DHCP entries, which might change > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0before the lease expires. */ > +=C2=A0 > +-=C2=A0=C2=A0if=C2=A0=C2=A0(crecp->flags & (F_IMMORTAL | F_DHCP)) > ++=C2=A0=C2=A0if (crecp->flags & F_DHCP) > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0return daemon->local_ttl; > +=C2=A0=C2=A0=C2=A0 > ++=C2=A0=C2=A0/* Immortal entries other than DHCP are local, and hold TTL in > TTD field. */ > ++=C2=A0=C2=A0if (crecp->flags & F_IMMORTAL) > ++=C2=A0=C2=A0=C2=A0=C2=A0return crecp->ttd; > ++ > +=C2=A0=C2=A0=C2=A0/* Return the Max TTL value if it is lower then the actu= al TTL */ > +=C2=A0=C2=A0=C2=A0if (daemon->max_ttl =3D=3D 0 || ((unsigned)(crecp->ttd -= now) < > daemon->max_ttl)) > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0return crecp->ttd - now; > +--=C2=A0 > +1.7.10.4 > + > diff --git a/src/patches/dnsmasq/001- > include_0_0_0_0_8_in_DNS_rebind_checks.patch > b/src/patches/dnsmasq/001- > include_0_0_0_0_8_in_DNS_rebind_checks.patch > deleted file mode 100644 > index 8a2557a..0000000 > --- a/src/patches/dnsmasq/001- > include_0_0_0_0_8_in_DNS_rebind_checks.patch > +++ /dev/null > @@ -1,41 +0,0 @@ > -From d2aa7dfbb6d1088dcbea9fecc61b9293b320eb95 Mon Sep 17 00:00:00 > 2001 > -From: Simon Kelley > -Date: Mon, 3 Aug 2015 21:52:12 +0100 > -Subject: [PATCH] Include 0.0.0.0/8 in DNS rebind checks. > - > ---- > - CHANGELOG=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0|=C2=A0=C2=A0=C2=A0=C2=A07 +++++++ > - src/rfc1035.c |=C2=A0=C2=A0=C2=A0=C2=A03 ++- > - 2 files changed, 9 insertions(+), 1 deletion(-) > - > -diff --git a/CHANGELOG b/CHANGELOG > -index 901da47..3f4026d 100644 > ---- a/CHANGELOG > -+++ b/CHANGELOG > -@@ -1,3 +1,10 @@ > -+version 2.76 > -+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0I= nclude 0.0.0.0/8 in DNS rebind checks. This range=C2=A0 > -+ =C2=A0=C2=A0=C2=A0=C2=A0translates to hosts on=C2=A0=C2=A0the local netw= ork, or, at=C2=A0 > -+ =C2=A0=C2=A0=C2=A0=C2=A0least, 0.0.0.0 accesses the local host, so could > -+ =C2=A0=C2=A0=C2=A0=C2=A0be targets for DNS rebinding. See RFC 5735 secti= on 3=C2=A0 > -+ =C2=A0=C2=A0=C2=A0=C2=A0for details. Thanks to Stephen R=C3=83=C2=B6ttge= r for the bug > report. > -+ =C2=A0=C2=A0=C2=A0=C2=A0 > - version 2.75 > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0Fix reversion on 2.74 which caused 100% CPU use when a=C2=A0 > -=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0dhcp-script is configured. Thanks to Adrian= Davey for > -diff --git a/src/rfc1035.c b/src/rfc1035.c > -index 56647b0..29e9e65 100644 > ---- a/src/rfc1035.c > -+++ b/src/rfc1035.c > -@@ -728,7 +728,8 @@ int private_net(struct in_addr addr, int > ban_localhost) > -=C2=A0=C2=A0=C2=A0in_addr_t ip_addr =3D ntohl(addr.s_addr); > -=C2=A0 > -=C2=A0=C2=A0=C2=A0return > --=C2=A0=C2=A0=C2=A0=C2=A0(((ip_addr & 0xFF000000) =3D=3D 0x7F000000) && ba= n_localhost)=C2=A0=C2=A0/* > 127.0.0.0/8=C2=A0=C2=A0=C2=A0=C2=A0(loopback) */ ||=C2=A0 > -+=C2=A0=C2=A0=C2=A0=C2=A0(((ip_addr & 0xFF000000) =3D=3D 0x7F000000) && ba= n_localhost)=C2=A0=C2=A0/* > 127.0.0.0/8=C2=A0=C2=A0=C2=A0=C2=A0(loopback) */ || > -+=C2=A0=C2=A0=C2=A0=C2=A0((ip_addr & 0xFF000000) =3D=3D 0x00000000)=C2=A0= =C2=A0/* RFC 5735 section 3. > "here" network */ || > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0((ip_addr & 0xFFFF0000) =3D=3D 0xC0A80000)= =C2=A0=C2=A0/* 192.168.0.0/16 > (private)=C2=A0=C2=A0*/ || > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0((ip_addr & 0xFF000000) =3D=3D 0x0A000000)= =C2=A0=C2=A0/* > 10.0.0.0/8=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0(private)=C2=A0=C2=A0*/ || > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0((ip_addr & 0xFFF00000) =3D=3D 0xAC100000)= =C2=A0=C2=A0/* > 172.16.0.0/12=C2=A0=C2=A0(private)=C2=A0=C2=A0*/ || > ---=C2=A0 > -1.7.10.4 > diff --git a/src/patches/dnsmasq/002-Add_--dhcp-ttl_option.patch > b/src/patches/dnsmasq/002-Add_--dhcp-ttl_option.patch > new file mode 100644 > index 0000000..45e3b9b > --- /dev/null > +++ b/src/patches/dnsmasq/002-Add_--dhcp-ttl_option.patch > @@ -0,0 +1,117 @@ > +From 832e47beab95c2918b5264f0504f2fe6fe523e4c Mon Sep 17 00:00:00 > 2001 > +From: Simon Kelley > +Date: Wed, 24 Feb 2016 21:24:45 +0000 > +Subject: [PATCH] Add --dhcp-ttl option. > + > +--- > + man/dnsmasq.8 |=C2=A0=C2=A0=C2=A0=C2=A05 ++++- > + src/dnsmasq.h |=C2=A0=C2=A0=C2=A0=C2=A02 +- > + src/option.c=C2=A0=C2=A0|=C2=A0=C2=A0=C2=A013 +++++++++++-- > + src/rfc1035.c |=C2=A0=C2=A0=C2=A0=C2=A02 +- > + 4 files changed, 17 insertions(+), 5 deletions(-) > + > +diff --git a/man/dnsmasq.8 b/man/dnsmasq.8 > +index 7bc1394..2bcce20 100644 > +--- a/man/dnsmasq.8 > ++++ b/man/dnsmasq.8 > +@@ -60,7 +60,7 @@ in the same way as for DHCP-derived names. Note > that this does not > + apply to domain names in cnames, PTR records, TXT records etc. > + .TP > + .B \-T, --local-ttl=3D