<div dir="ltr"><span style="font-size:12.8px">Hi Nathan,</span><div style="font-size:12.8px">thanks for sharing your patch. I'm the author of patch #<span class="">3828</span>, but I haven't been able to access it at:</div><div style="font-size:12.8px"><a href="http://patchwork.openwrt.org/patch/3828/" target="_blank">http://patchwork.<span class="">openwrt</span>.org/patch/<span class="">3828</span>/</a><br></div><div style="font-size:12.8px">and I don't have a local copy of it.</div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">So I relied on your patch and it seems to work flawlessly.</div><div style="font-size:12.8px">Also, you said:</div><div style="font-size:12.8px"><br></div><blockquote class="gmail_quote" style="font-size:12.8px;margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><span style="font-size:12.8px">The patch (#</span><span style="font-size:12.8px"><span class="">3828</span></span><span style="font-size:12.8px">) works well for a single hostname; however, if multiple<br></span><span style="font-size:12.8px">names are specified, dhcp_host_add generates an invalid "dhcp-host" option.</span></blockquote><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">I'm not sure what you mean, but I recall my original patch worked for more than one name (ie. more than one host on my LAN network: computerA.lan, computerB.lan, etc.), and it generated the same output that your patch generates. That is:</div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px"><div>address=/computerA/computerA.lan/<a href="http://10.0.0.2/" target="_blank">10.0.0.2</a></div><div>address=/computerB/computerB.lan/<a href="http://10.0.0.3/" target="_blank">10.0.0.3</a></div></div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">Thanks again.</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Sun, Sep 8, 2013 at 9:21 PM, Nathan Hintz <span dir="ltr"><<a href="mailto:nlhintz@hotmail.com" target="_blank">nlhintz@hotmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="HOEnZb"><div class="h5">On Wed, 28 Aug 2013 15:05:35 -0600<br>
"Philip A. Prindeville" <<a href="mailto:philipp_subx@redfish-solutions.com">philipp_subx@redfish-solutions.com</a>> wrote:<br>
<br>
> I should have sent this AFTER trying out patch 3828.<br>
><br>
> Julian's patch is even simpler than my suggestion.<br>
><br>
> On 08/28/2013 02:42 PM, Philip A. Prindeville wrote:<br>
> > Sorry if it's a little after-the-fact, but I've been wondering<br>
> > about the need to have a separate "config domain" section at all.<br>
> ><br>
> > Why not just have something like:<br>
> ><br>
> > config host<br>
> >     ...<br>
> >     option wants-dns-rr on<br>
> ><br>
> > Yes, "config domain" is still useful for external sites or for<br>
> > resources with static addresses that aren't served by dnsmasq, buy<br>
> > why not reduce the amount of configuration for a host to have a<br>
> > A/PTR pair to a single line?<br>
> ><br>
> > For that matter, in the "config dnsmasq" section, why not have an<br>
> > option like "option publish-dns-rr on" and enable it globally for<br>
> > all host blocks?<br>
> ><br>
> > Am I missing something?<br>
> ><br>
> > -Philip<br>
> ><br>
> ><br>
> > On 06/04/2013 10:44 PM, Adam Gensler wrote:<br>
> >> Hi all,<br>
> >><br>
> >> TL;DR - using "--address" for individual host A records is broken,<br>
> >> use "--host-record" instead.<br>
> >><br>
> >> The following patch changes dnsmasq.init to build individual host<br>
> >> records using "--host-record" instead of "--address". Using<br>
> >> "--address" in this context is incorrect. For example, the current<br>
> >> init script will create the following two entries<br>
> >> in /var/etc/dnsmasq.conf:<br>
> >><br>
> >> address=/OpenWrt.lan/<a href="http://192.168.1.1" rel="noreferrer" target="_blank">192.168.1.1</a><br>
> >> ptr-record=1.1.168.192.in-addr.arpa,OpenWrt.lan<br>
> >><br>
> >> At first glance this has the desired effect, "OpenWrt.lan"<br>
> >> resolves to 192.168.1.1. However, what it really says is "for<br>
> >> anything that ends with "OpenWrt.lan," that I don't have a record<br>
> >> for, return 192.168.1.1". For example:<br>
> >><br>
> >> fakeaddress.OpenWrt.lan would return 192.168.1.1.<br>
> >> adsfasdfsdfsd.OpenWrt.lan would return 192.168.1.1.<br>
> >><br>
> >> That's wrong and it causes problems when using a real domain name,<br>
> >> such as <a href="http://domain.com" rel="noreferrer" target="_blank">domain.com</a>. Often it's desirable to have "<a href="http://domain.com" rel="noreferrer" target="_blank">domain.com</a>"<br>
> >> resolve to an address so users can hit the http service at<br>
> >> <a href="http://domain.com" rel="noreferrer" target="_blank">http://domain.com</a>. By using the existing "config domain" option,<br>
> >> you would configure this as follows:<br>
> >><br>
> >> config domain<br>
> >>    option name '<a href="http://domain.com" rel="noreferrer" target="_blank">domain.com</a>'<br>
> >>    option ip '192.168.1.100'<br>
> >><br>
> >> This would create these config items:<br>
> >><br>
> >> address=/<a href="http://domain.com/192.168.1.100" rel="noreferrer" target="_blank">domain.com/192.168.1.100</a><br>
> >> ptr-record=100.1.168.192.in-addr.arpa,<a href="http://domain.com" rel="noreferrer" target="_blank">domain.com</a><br>
> >><br>
> >> Now, as a result, anything that doesn't have its own, preexisting<br>
> >> record, will also resolve to 192.168.1.100. That's no good because<br>
> >> things like Windows do proxy requests by default for<br>
> >> <a href="http://wpad.domain.com" rel="noreferrer" target="_blank">wpad.domain.com</a> and instead of getting back an NXDOMAIN, it gets<br>
> >> 192.168.1.100 and goes hunting for a pac file that doesn't exist.<br>
> >><br>
> >> The solution for this is to use "--host-record". This is actually<br>
> >> a lot easier to configure because dnsmasq will create the PTR<br>
> >> records automatically, so there's no need to manual calculate it<br>
> >> like is done today. This means that IPv6 addresses can be<br>
> >> supported as well. The attached patch makes this adjustment and<br>
> >> accomplishes the following:<br>
> >><br>
> >> 1. By default, the router's hostname is now added to the<br>
> >> configuration using "--host-record" instead of "--address". If<br>
> >> there's a domain configured, the default host-record entry looks<br>
> >> like this:<br>
> >><br>
> >> host-record=OpenWrt.lan,OpenWrt,192.168.1.1<br>
> >><br>
> >> With this, now both "OpenWrt.lan" and "OpenWrt" will both resolve<br>
> >> to 192.168.1.1. In the reverse, 192.168.1.1 will resolve to only<br>
> >> "OpenWrt.lan".<br>
> >><br>
> >> 2. It introduces a new configuration structure to define<br>
> >> additional host records. For example:<br>
> >><br>
> >> config hostrecord<br>
> >>    list name '<a href="http://mail.domain.com" rel="noreferrer" target="_blank">mail.domain.com</a>'<br>
> >>    list name '<a href="http://www.domain.com" rel="noreferrer" target="_blank">www.domain.com</a>'<br>
> >>    list name '<a href="http://domain.com" rel="noreferrer" target="_blank">domain.com</a>'<br>
> >>    list ip '192.168.1.100'<br>
> >><br>
> >> It uses lists here because dnsmasq can accept multiple hostnames<br>
> >> and IP addresses in a single host-record. This generates the<br>
> >> following config:<br>
> >><br>
> >> host-record=<a href="http://mail.domain.com" rel="noreferrer" target="_blank">mail.domain.com</a>,<a href="http://www.domain.com" rel="noreferrer" target="_blank">www.domain.com</a>,<a href="http://domain.com" rel="noreferrer" target="_blank">domain.com</a>,192.168.1.100<br>
> >><br>
> >> All of those hostnames will resolve to 192.168.1.100 in the<br>
> >> forward direction. 192.168.1.100 will resolve to "<a href="http://mail.domain.com" rel="noreferrer" target="_blank">mail.domain.com</a>"<br>
> >> in the reverse.<br>
> >><br>
> >> 3. It restructures "dhcp_domain_add()" to remove the manual PTR<br>
> >> record calculation and configuration. This only supported IPv4 and<br>
> >> isn't the proper use of the "--address" option. Now it will build<br>
> >> a proper "--address" config that can support multiple domain names<br>
> >> to a single IP address as per the dnsmasq MAN page.<br>
> >><br>
> >> Note, the domain name is no longer automatically appended to the<br>
> >> end of either "config hostrecord" or "config domain" entries as<br>
> >> was previously the case. To define a specific fqdn, one needs to<br>
> >> manually configure it as such. This makes the configuration more<br>
> >> consistent; only what's configured is what is generated for<br>
> >> dnsmasq.<br>
> >><br>
> >> Sorry for the long email. I hope it all made sense. If not, please<br>
> >> let me know.<br>
> >><br>
> >> Thanks,<br>
> >> Adam<br>
> >><br>
> >><br>
> >> Signed-off-by: Adam Gensler <openwrt at <a href="http://gnslr.us" rel="noreferrer" target="_blank">gnslr.us</a>><br>
> >> ---<br>
> >> [snip]<br>
> > _______________________________________________<br>
> > openwrt-devel mailing list<br>
> > <a href="mailto:openwrt-devel@lists.openwrt.org">openwrt-devel@lists.openwrt.org</a><br>
> > <a href="https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel" rel="noreferrer" target="_blank">https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel</a><br>
> _______________________________________________<br>
> openwrt-devel mailing list<br>
> <a href="mailto:openwrt-devel@lists.openwrt.org">openwrt-devel@lists.openwrt.org</a><br>
> <a href="https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel" rel="noreferrer" target="_blank">https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel</a><br>
><br>
<br>
</div></div>Hi:<br>
<br>
The patch (#3828) works well for a single hostname; however, if multiple<br>
names are specified, dhcp_host_add generates an invalid "dhcp-host" option.<br>
<br>
dhcp_host_add could be modified to only use the first name encountered (see below).<br>
<br>
Nathan<br>
<br>
Index: package/network/services/dnsmasq/files/dnsmasq.init<br>
===================================================================<br>
--- package/network/services/dnsmasq/files/dnsmasq.init (revision 37919)<br>
+++ package/network/services/dnsmasq/files/dnsmasq.init (working copy)<br>
@@ -254,6 +254,7 @@<br>
        [ -n "$networkid" ] && dhcp_option_add "$cfg" "$networkid" "$force"<br>
<br>
        config_get name "$cfg" name<br>
+       name="${name/ */}"<br>
        config_get ip "$cfg" ip<br>
        [ -n "$ip" -o -n "$name" ] || return 0<br>
<br>
@@ -408,6 +409,24 @@<br>
        xappend "--address=/$record/$ip"<br>
 }<br>
<br>
+dhcp_address_add() {<br>
+       local cfg="$1"<br>
+       local ip name names record<br>
+<br>
+       config_get names "$cfg" name "$2"<br>
+       [ -n "$names" ] || return 0<br>
+<br>
+       config_get ip "$cfg" ip "$3"<br>
+       [ -n "$ip" ] || return 0<br>
+<br>
+       for name in $names; do<br>
+               fqdn="$name${DOMAIN:+.$DOMAIN}"<br>
+               record="${record:+$record/}$name/$fqdn"<br>
+       done<br>
+<br>
+       xappend "--address=/$record/$ip"<br>
+}<br>
+<br>
 dhcp_srv_add() {<br>
        local cfg="$1"<br>
<br>
@@ -512,6 +531,7 @@<br>
        config_foreach dhcp_subscrid_add subscrid<br>
        config_foreach dhcp_domain_add domain<br>
        config_foreach dhcp_hostrecord_add hostrecord<br>
+       config_foreach dhcp_address_add host<br>
<br>
        # add own hostname<br>
        [ $ADD_LOCAL_HOSTNAME -eq 1 ] && [ -n "$lanaddr" ] && {<br>
<span class="HOEnZb"><font color="#888888">--<br>
Nathan<br>
</font></span><div class="HOEnZb"><div class="h5">_______________________________________________<br>
openwrt-devel mailing list<br>
<a href="mailto:openwrt-devel@lists.openwrt.org">openwrt-devel@lists.openwrt.org</a><br>
<a href="https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel" rel="noreferrer" target="_blank">https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel</a><br>
</div></div></blockquote></div><br></div>