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. > > Signed-off-by: Matthias Fischer > --- >  lfs/dnsmasq                                        |   39 +- >  ...TL_parameter_to_--host-record_and_--cname.patch |  265 +++ >  ...01-include_0_0_0_0_8_in_DNS_rebind_checks.patch |   41 - >  .../dnsmasq/002-Add_--dhcp-ttl_option.patch        |  117 ++ >  ...subnet_to_allow_arbitary_subnet_addresses.patch |  271 --- >  src/patches/dnsmasq/003-Update_CHANGELOG.patch     |   17 + >  ...h_zones_locally_when_localise_queries_set.patch |   34 - >  .../dnsmasq/004-Add_--tftp-mtu_option.patch        |  136 ++ >  .../004-fix_behaviour_of_empty_dhcp-option.patch   |   38 - >  ...ution_to_ENOMEM_error_with_IPv6_multicast.patch |   50 - >  ...page_on_RDNSS_set_in_router_advertisement.patch |   35 - >  ...gned_dangling_CNAME_replies_to_DS_queries.patch |   30 - >  ...6_option_56_does_not_hold_an_address_list.patch |   25 - >  ...pect_the_--no_resolv_flag_in_inotify_code.patch |   47 - >  ..._5e3e464ac4022ee0b3794513abe510817e2cf3ca.patch |   26 - >  ...11-Catch_errors_from_sendmsg_in_DHCP_code.patch |   32 - >  ...12-Update_list_of_subnet_for_--bogus-priv.patch |   48 - >  ...y_address_from_DNS_overlays_A_record_from.patch |   43 - >  ...14-Handle_unknown_DS_hash_algos_correctly.patch |   39 - >  .../015-Fix_crash_at_start_up_with_conf-dir.patch  |   38 - >  ...ajor_rationalisation_of_DNSSEC_validation.patch | 2209 ---------- > ---------- >  ...hing_RRSIGs_and_returning_them_from_cache.patch |  612 ------ >  ...caches_DS_records_to_a_more_logical_place.patch |  269 --- >  ...lise_RR-filtering_code_for_use_with_EDNS0.patch |  755 ------- >  .../dnsmasq/020-DNSSEC_validation_tweak.patch      |  134 -- >  ...1-Tweaks_to_EDNS0_handling_in_DNS_replies.patch |  133 -- >  ..._code_Check_zone_status_is_NSEC_proof_bad.patch |  409 ---- >  ...023-Fix_brace_botch_in_dnssec_validate_ds.patch |   98 - >  ...ning_which_DNSSEC_sig_algos_are_supported.patch |  145 -- >  ...EDNS0_handling_and_computation_use_of_udp.patch |  643 ------ >  ...aks_in_handling_unknown_DNSSEC_algorithms.patch |  262 --- >  ...obscure_off-by-one_in_DNSSEC_hostname_cmp.patch |   27 - >  .../028-Minor_tweak_to_previous_commit.patch       |   39 - >  .../dnsmasq/029-NSEC3_check_RFC5155_para_8_2.patch |   39 - >  34 files changed, 542 insertions(+), 6603 deletions(-) >  create mode 100644 src/patches/dnsmasq/001-Add_TTL_parameter_to_ > --host-record_and_--cname.patch >  delete mode 100644 src/patches/dnsmasq/001- > include_0_0_0_0_8_in_DNS_rebind_checks.patch >  create mode 100644 src/patches/dnsmasq/002-Add_--dhcp- > ttl_option.patch >  delete mode 100644 src/patches/dnsmasq/002- > enhance_add_subnet_to_allow_arbitary_subnet_addresses.patch >  create mode 100644 src/patches/dnsmasq/003-Update_CHANGELOG.patch >  delete mode 100644 src/patches/dnsmasq/003- > dont_answer_non_auth_queries_for_auth_zones_locally_when_localise_que > ries_set.patch >  create mode 100644 src/patches/dnsmasq/004-Add_--tftp- > mtu_option.patch >  delete mode 100644 src/patches/dnsmasq/004- > fix_behaviour_of_empty_dhcp-option.patch >  delete mode 100644 src/patches/dnsmasq/005- > suggest_solution_to_ENOMEM_error_with_IPv6_multicast.patch >  delete mode 100644 src/patches/dnsmasq/006- > clarify_man_page_on_RDNSS_set_in_router_advertisement.patch >  delete mode 100644 src/patches/dnsmasq/007- > handle_signed_dangling_CNAME_replies_to_DS_queries.patch >  delete mode 100644 src/patches/dnsmasq/008- > DHCPv6_option_56_does_not_hold_an_address_list.patch >  delete mode 100644 src/patches/dnsmasq/009-Respect_the_ > --no_resolv_flag_in_inotify_code.patch >  delete mode 100644 src/patches/dnsmasq/010- > Rationalise_5e3e464ac4022ee0b3794513abe510817e2cf3ca.patch >  delete mode 100644 src/patches/dnsmasq/011- > Catch_errors_from_sendmsg_in_DHCP_code.patch >  delete mode 100644 src/patches/dnsmasq/012- > Update_list_of_subnet_for_--bogus-priv.patch >  delete mode 100644 src/patches/dnsmasq/013- > Fix_crash_when_empty_address_from_DNS_overlays_A_record_from.patch >  delete mode 100644 src/patches/dnsmasq/014- > Handle_unknown_DS_hash_algos_correctly.patch >  delete mode 100644 src/patches/dnsmasq/015- > Fix_crash_at_start_up_with_conf-dir.patch >  delete mode 100644 src/patches/dnsmasq/016- > Major_rationalisation_of_DNSSEC_validation.patch >  delete mode 100644 src/patches/dnsmasq/017- > Abandon_caching_RRSIGs_and_returning_them_from_cache.patch >  delete mode 100644 src/patches/dnsmasq/018- > Move_code_which_caches_DS_records_to_a_more_logical_place.patch >  delete mode 100644 src/patches/dnsmasq/019-Generalise_RR- > filtering_code_for_use_with_EDNS0.patch >  delete mode 100644 src/patches/dnsmasq/020- > DNSSEC_validation_tweak.patch >  delete mode 100644 src/patches/dnsmasq/021- > Tweaks_to_EDNS0_handling_in_DNS_replies.patch >  delete mode 100644 src/patches/dnsmasq/022-Tidy_up_DNSSEC_non- > existence_code_Check_zone_status_is_NSEC_proof_bad.patch >  delete mode 100644 src/patches/dnsmasq/023- > Fix_brace_botch_in_dnssec_validate_ds.patch >  delete mode 100644 src/patches/dnsmasq/024- > Do_a_better_job_of_determining_which_DNSSEC_sig_algos_are_supported.p > atch >  delete mode 100644 src/patches/dnsmasq/025- > Major_tidy_up_of_EDNS0_handling_and_computation_use_of_udp.patch >  delete mode 100644 src/patches/dnsmasq/026- > More_tweaks_in_handling_unknown_DNSSEC_algorithms.patch >  delete mode 100644 src/patches/dnsmasq/027- > Nasty_rare_and_obscure_off-by-one_in_DNSSEC_hostname_cmp.patch >  delete mode 100644 src/patches/dnsmasq/028- > Minor_tweak_to_previous_commit.patch >  delete mode 100644 src/patches/dnsmasq/029- > NSEC3_check_RFC5155_para_8_2.patch > > diff --git a/lfs/dnsmasq b/lfs/dnsmasq > index 8058663..29d7895 100644 > --- a/lfs/dnsmasq > +++ b/lfs/dnsmasq > @@ -1,7 +1,7 @@ >  #################################################################### > ########### >  #                                                                    >           # >  # IPFire.org - A linux based > firewall                                         # > -# Copyright (C) 2015  Michael Tremer & Christian > Schmidt                      # > +# Copyright (C) 2016  Michael Tremer & Christian > Schmidt                      # >  #                                                                    >           # >  # This program is free software: you can redistribute it and/or > modify        # >  # it under the terms of the GNU General Public License as published > by        # > @@ -24,7 +24,7 @@ >   >  include Config >   > -VER        = 2.75 > +VER        = 2.76test10 >   >  THISAPP    = dnsmasq-$(VER) >  DL_FILE    = $(THISAPP).tar.xz > @@ -43,7 +43,7 @@ objects = $(DL_FILE) >   >  $(DL_FILE) = $(DL_FROM)/$(DL_FILE) >   > -$(DL_FILE)_MD5 = 887236f1ddde6eb57cdb9d01916c9f72 > +$(DL_FILE)_MD5 = 4b51474ed6081b18c61407077f254cf7 >   >  install : $(TARGET) >   > @@ -73,35 +73,10 @@ $(subst %,%_MD5,$(objects)) : >  $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) >   @$(PREBUILD) >   @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 >   cd $(DIR_APP) && patch -Np1 -i > $(DIR_SRC)/src/patches/dnsmasq-Add-support-to-read-ISC-DHCP-lease- > file.patch >   >   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 |   12 ++++++++++-- > + src/cache.c   |    7 +++++++ > + src/dnsmasq.h |    2 ++ > + src/option.c  |   46 ++++++++++++++++++++++++++++++++++++++-------- > + src/rfc1035.c |    6 +++++- > + 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=[,....],[],[ address>] > ++.B --host-record=[,....],[],[ 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  > +@@ -546,6 +546,10 @@ is in effect. Short and long names may appear > in the same > + .B host-record, > + eg.  > + .B --host-record=laptop,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  > ++the time-to-live in seconds. > + .TP > + .B \-Y, --txt-record=[[,],] > + 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=,,,,,[, cement>] > + Return an NAPTR DNS record, as specified in RFC3403. > + .TP > +-.B --cname=, > ++.B --cname=,[,] > + 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  > ++the time-to-live in seconds. > + .TP > + .B --dns-rr=,,[] > + 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) > +  (crec = whine_malloc(sizeof(struct crec)))) > +       { > +  crec->flags = F_FORWARD | F_IMMORTAL | F_NAMEP | F_CONFIG | > F_CNAME; > ++ crec->ttd = a->ttl; > +  crec->name.namep = a->alias; > +  crec->addr.cname.target.cache = target; > +  crec->addr.cname.uid = target->uid; > +@@ -981,6 +982,7 @@ int read_hostsfile(char *filename, unsigned int > index, int cache_size, struct cr > +    strcat(cache->name.sname, "."); > +    strcat(cache->name.sname, domain_suffix); > +    cache->flags = flags; > ++   cache->ttd = daemon->local_ttl; > +    add_hosts_entry(cache, &addr, addrlen, index, > rhash, hashsz); > +    name_count++; > +  } > +@@ -988,6 +990,7 @@ int read_hostsfile(char *filename, unsigned int > index, int cache_size, struct cr > +  { > +    strcpy(cache->name.sname, canon); > +    cache->flags = flags; > ++   cache->ttd = daemon->local_ttl; > +    add_hosts_entry(cache, &addr, addrlen, index, > rhash, hashsz); > +    name_count++; > +  } > +@@ -1057,6 +1060,7 @@ void cache_reload(void) > +    ((cache = whine_malloc(sizeof(struct crec))))) > +  { > +    cache->flags = F_FORWARD | F_NAMEP | F_CNAME | F_IMMORTAL > | F_CONFIG; > ++   cache->ttd = a->ttl; > +    cache->name.namep = a->alias; > +    cache->addr.cname.target.int_name = intr; > +    cache->addr.cname.uid = SRC_INTERFACE; > +@@ -1071,6 +1075,7 @@ void cache_reload(void) > +  (cache->addr.ds.keydata = blockdata_alloc(ds->digest, ds- > >digestlen))) > +       { > +  cache->flags = F_FORWARD | F_IMMORTAL | F_DS | F_CONFIG | > F_NAMEP; > ++ cache->ttd = daemon->local_ttl; > +  cache->name.namep = ds->name; > +  cache->addr.ds.keylen = ds->digestlen; > +  cache->addr.ds.algo = ds->algo; > +@@ -1095,6 +1100,7 @@ void cache_reload(void) > +      (cache = whine_malloc(sizeof(struct crec)))) > +    { > +      cache->name.namep = nl->name; > ++     cache->ttd = hr->ttl; > +      cache->flags = F_HOSTS | F_IMMORTAL | F_FORWARD | > F_REVERSE | F_IPV4 | F_NAMEP | F_CONFIG; > +      add_hosts_entry(cache, (struct all_addr *)&hr->addr, > INADDRSZ, SRC_CONFIG, (struct crec **)daemon->packet, revhashsz); > +    } > +@@ -1103,6 +1109,7 @@ void cache_reload(void) > +      (cache = whine_malloc(sizeof(struct crec)))) > +    { > +      cache->name.namep = nl->name; > ++     cache->ttd = hr->ttl; > +      cache->flags = F_HOSTS | F_IMMORTAL | F_FORWARD | > F_REVERSE | F_IPV6 | F_NAMEP | F_CONFIG; > +      add_hosts_entry(cache, (struct all_addr *)&hr->addr6, > IN6ADDRSZ, SRC_CONFIG, (struct crec **)daemon->packet, revhashsz); > +    } > +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 { > + }; > +  > + struct cname { > ++  int ttl; > +   char *alias, *target; > +   struct cname *next; > + };  > +@@ -344,6 +345,7 @@ struct auth_zone { > +  > +  > + struct host_record { > ++  int ttl; > +   struct name_list { > +     char *name; > +     struct 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 { > +   { LOPT_GEN_NAMES, ARG_DUP, "[=tag:]", gettext_noop("Generate > hostnames based on MAC address for nameless clients."), NULL}, > +   { LOPT_PROXY, ARG_DUP, "[=]...", gettext_noop("Use these > DHCP relays as full proxies."), NULL }, > +   { LOPT_RELAY, ARG_DUP, ",[,]", > gettext_noop("Relay DHCP requests to a remote server"), NULL}, > +-  { LOPT_CNAME, ARG_DUP, ",", gettext_noop("Specify > alias name for LOCAL DNS name."), NULL }, > ++  { LOPT_CNAME, ARG_DUP, ",[,]", > gettext_noop("Specify alias name for LOCAL DNS name."), NULL }, > +   { LOPT_PXE_PROMT, ARG_DUP, ",[]", > gettext_noop("Prompt to send to PXE clients."), NULL }, > +   { LOPT_PXE_SERV, ARG_DUP, "", gettext_noop("Boot service > for PXE menu."), NULL }, > +   { LOPT_TEST, 0, NULL, gettext_noop("Check configuration > syntax."), NULL }, > +   { LOPT_ADD_MAC, ARG_DUP, "[=base64|text]", gettext_noop("Add > requestor's MAC address to forwarded DNS queries."), NULL }, > +   { LOPT_ADD_SBNET, ARG_ONE, "[,]", > gettext_noop("Add specified IP subnet to forwarded DNS queries."), > NULL }, > +-   { LOPT_CPE_ID, ARG_ONE, "", gettext_noop("Add client > identification to forwarded DNS queries."), NULL }, > ++  { LOPT_CPE_ID, ARG_ONE, "", gettext_noop("Add client > identification to forwarded DNS queries."), NULL }, > +   { LOPT_DNSSEC, OPT_DNSSEC_PROXY, NULL, gettext_noop("Proxy DNSSEC > validation results from upstream nameservers."), NULL }, > +   { LOPT_INCR_ADDR, OPT_CONSEC_ADDR, NULL, gettext_noop("Attempt to > allocate sequential IP addresses to DHCP clients."), NULL }, > +   { LOPT_CONNTRACK, OPT_CONNTRACK, NULL, gettext_noop("Copy > connection-track mark from queries to upstream connections."), NULL > }, > +   { LOPT_FQDN, OPT_FQDN_UPDATE, NULL, gettext_noop("Allow DHCP > clients to do their own DDNS updates."), NULL }, > +   { LOPT_RA, OPT_RA, NULL, gettext_noop("Send router-advertisements > for interfaces doing DHCPv6"), NULL }, > +   { LOPT_DUID, ARG_ONE, ",", > gettext_noop("Specify DUID_EN-type DHCPv6 server DUID"), NULL }, > +-  { LOPT_HOST_REC, ARG_DUP, ",
", > gettext_noop("Specify host (A/AAAA and PTR) records"), NULL }, > ++  { LOPT_HOST_REC, ARG_DUP, ",
[,]", > gettext_noop("Specify host (A/AAAA and PTR) records"), NULL }, > +   { LOPT_RR, ARG_DUP, ",,[]", > gettext_noop("Specify arbitrary DNS resource record"), NULL }, > +   { LOPT_CLVERBIND, OPT_CLEVERBIND, NULL, gettext_noop("Bind to > interfaces in use - check for new interfaces"), NULL }, > +   { 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 > +     case LOPT_CNAME: /* --cname */ > +       { > +  struct cname *new; > +- char *alias; > +- char *target; > ++ char *alias, *target, *ttls; > ++ int ttl = -1; > +  > +  if (!(comma = split(arg))) > +    ret_err(gen_err); > +  > ++ if ((ttls = split(comma)) && !atoi_check(ttls, &ttl)) > ++   ret_err(_("bad TTL")); > ++ > +  alias = canonicalise_opt(arg); > +  target = canonicalise_opt(comma); > +       > +@@ -3713,6 +3716,7 @@ static int one_opt(int option, char *arg, char > *errstr, char *gen_err, int comma > +      daemon->cnames = new; > +      new->alias = alias; > +      new->target = target; > ++     new->ttl = ttl; > +    } > +        > +  break; > +@@ -3913,14 +3917,22 @@ static int one_opt(int option, char *arg, > char *errstr, char *gen_err, int comma > +       { > +  struct host_record *new = opt_malloc(sizeof(struct > host_record)); > +  memset(new, 0, sizeof(struct host_record)); > +- > ++ new->ttl = -1; > ++ > +  if (!arg || !(comma = split(arg))) > +    ret_err(_("Bad host-record")); > +  > +  while (arg) > +    { > +      struct all_addr addr; > +-     if (inet_pton(AF_INET, arg, &addr)) > ++     char *dig; > ++ > ++     for (dig = arg; *dig != 0; dig++) > ++       if (*dig < '0' || *dig > '9') > ++ break; > ++     if (*dig == 0) > ++       new->ttl = atoi(arg); > ++     else if (inet_pton(AF_INET, arg, &addr)) > +        new->addr = addr.addr.addr4; > + #ifdef HAVE_IPV6 > +      else if (inet_pton(AF_INET6, arg, &addr)) > +@@ -4601,7 +4613,25 @@ void read_opts(int argc, char **argv, char > *compile_opts) > +      } > +  }  > +     } > +-   > ++ > ++  if (daemon->host_records) > ++    { > ++      struct host_record *hr; > ++       > ++      for (hr = daemon->host_records; hr; hr = hr->next) > ++ if (hr->ttl == -1) > ++   hr->ttl = daemon->local_ttl; > ++    } > ++ > ++  if (daemon->cnames) > ++    { > ++      struct cname *cn; > ++       > ++      for (cn = daemon->cnames; cn; cn = cn->next) > ++ if (cn->ttl == -1) > ++   cn->ttl = daemon->local_ttl; > ++    } > ++ > +   if (daemon->if_addrs) > +     {   > +       struct 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) > +   /* Return 0 ttl for DHCP entries, which might change > +      before the lease expires. */ > +  > +-  if  (crecp->flags & (F_IMMORTAL | F_DHCP)) > ++  if (crecp->flags & F_DHCP) > +     return daemon->local_ttl; > +    > ++  /* Immortal entries other than DHCP are local, and hold TTL in > TTD field. */ > ++  if (crecp->flags & F_IMMORTAL) > ++    return crecp->ttd; > ++ > +   /* Return the Max TTL value if it is lower then the actual TTL */ > +   if (daemon->max_ttl == 0 || ((unsigned)(crecp->ttd - now) < > daemon->max_ttl)) > +     return crecp->ttd - now; > +--  > +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     |    7 +++++++ > - src/rfc1035.c |    3 ++- > - 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 > -+            Include 0.0.0.0/8 in DNS rebind checks. This range  > -+     translates to hosts on  the local network, or, at  > -+     least, 0.0.0.0 accesses the local host, so could > -+     be targets for DNS rebinding. See RFC 5735 section 3  > -+     for details. Thanks to Stephen Röttger for the bug > report. > -+      > - version 2.75 > -             Fix reversion on 2.74 which caused 100% CPU use when a  > -      dhcp-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) > -   in_addr_t ip_addr = ntohl(addr.s_addr); > -  > -   return > --    (((ip_addr & 0xFF000000) == 0x7F000000) && ban_localhost)  /* > 127.0.0.0/8    (loopback) */ ||  > -+    (((ip_addr & 0xFF000000) == 0x7F000000) && ban_localhost)  /* > 127.0.0.0/8    (loopback) */ || > -+    ((ip_addr & 0xFF000000) == 0x00000000)  /* RFC 5735 section 3. > "here" network */ || > -     ((ip_addr & 0xFFFF0000) == 0xC0A80000)  /* 192.168.0.0/16 > (private)  */ || > -     ((ip_addr & 0xFF000000) == 0x0A000000)  /* > 10.0.0.0/8     (private)  */ || > -     ((ip_addr & 0xFFF00000) == 0xAC100000)  /* > 172.16.0.0/12  (private)  */ || > ---  > -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 |    5 ++++- > + src/dnsmasq.h |    2 +- > + src/option.c  |   13 +++++++++++-- > + src/rfc1035.c |    2 +- > + 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=