Hi, All good but for some minor glitches:
extra whitespace: Applying: Treat dhcp-option DNS6 and DNS identical /home/selva/openvpn/.git/rebase-apply/patch:83: trailing whitespace. } /home/selva/openvpn/.git/rebase-apply/patch:84: trailing whitespace. else warning: 2 lines add whitespace errors. On Wed, Jan 17, 2018 at 8:49 AM, Arne Schwabe <a...@rfc2549.org> wrote: > OpenVPN3 accepts both IPv4 and IPv6 with option-dhcp DNS but throws > an error for option-dhcp DNS6. > > This patch makes OpenVPN2 accept IPv4/IPv6 for both DNS and DNS6 > > Patch V2: Put IPv6 parsing logic into own function similar as for for IPv4 DNS > --- > doc/openvpn.8 | 8 ++------ > src/openvpn/options.c | 38 ++++++++++++++++++++++++-------------- > 2 files changed, 26 insertions(+), 20 deletions(-) > > diff --git a/doc/openvpn.8 b/doc/openvpn.8 > index 43bbc217..f9ccbb30 100644 > --- a/doc/openvpn.8 > +++ b/doc/openvpn.8 > @@ -5886,14 +5886,10 @@ across the VPN. > Set Connection\-specific DNS Suffix. > > .B DNS addr \-\- > -Set primary domain name server IPv4 address. Repeat > +Set primary domain name server IPv4 or IPv6 address. Repeat > this option to set secondary DNS server addresses. > > -.B DNS6 addr \-\- > -Set primary domain name server IPv6 address. Repeat > -this option to set secondary DNS server IPv6 addresses. > - > -Note: currently this is handled using netsh (the > +Note: DNS IPv6 server are currently handled using netsh (the server -> servers while at it, may be change "handled" to "set" ? (the poor original is my fault). > existing DHCP code can only do IPv4 DHCP, and that protocol only > permits IPv4 addresses anywhere). The option will be put into the > environment, so an Silently removing any reference to DNS6 in docs is good while we continue to accept DNS6 as an alias. Could you please also edit the '--dhcp-option type' description in usage_message[] string? > diff --git a/src/openvpn/options.c b/src/openvpn/options.c > index 7c6528bc..d67044fc 100644 > --- a/src/openvpn/options.c > +++ b/src/openvpn/options.c > @@ -1228,6 +1228,20 @@ show_tuntap_options(const struct tuntap_options *o) > > #if defined(_WIN32) || defined(TARGET_ANDROID) > static void > +dhcp_option_dns6_parse(const char *parm, struct in6_addr *dns6_list, int > *len, int msglevel) > +{ > + struct in6_addr addr; > + if (*len >= N_DHCP_ADDR) > + { > + msg(msglevel, "--dhcp-option DNS: maximum of %d IPv6 dns servers can > be specified", > + N_DHCP_ADDR); > + } > + else if (get_ipv6_addr(parm, &addr, NULL, msglevel)) > + { > + dns6_list[(*len)++] = addr; > + } > +} > +static void > dhcp_option_address_parse(const char *name, const char *parm, in_addr_t > *array, int *len, int msglevel) > { > if (*len >= N_DHCP_ADDR) > @@ -7088,6 +7102,7 @@ add_option(struct options *options, > { > struct tuntap_options *o = &options->tuntap_options; > VERIFY_PERMISSION(OPT_P_IPWIN32); > + bool ipv6dns = false; > > if (streq(p[1], "DOMAIN") && p[2]) > { > @@ -7108,22 +7123,17 @@ add_option(struct options *options, > } > o->netbios_node_type = t; > } > - else if (streq(p[1], "DNS") && p[2]) > + else if ((streq(p[1], "DNS") || streq(p[1], "DNS6")) && p[2] && > (!strstr(p[2], ":") || ipv6_addr_safe(p[2]))) > { > - dhcp_option_address_parse("DNS", p[2], o->dns, &o->dns_len, > msglevel); > - } > - else if (streq(p[1], "DNS6") && p[2] && ipv6_addr_safe(p[2])) > - { > - struct in6_addr addr; > - foreign_option(options, p, 3, es); > - if (o->dns6_len >= N_DHCP_ADDR) > + if (strstr(p[2], ":")) > { > - msg(msglevel, "--dhcp-option DNS6: maximum of %d dns servers > can be specified", > - N_DHCP_ADDR); > - } > - else if (get_ipv6_addr(p[2], &addr, NULL, msglevel)) > + ipv6dns=true; > + foreign_option(options, p, 3, es); > + dhcp_option_dns6_parse(p[2], o->dns6, &o->dns6_len, > msglevel); > + } > + else > { > - o->dns6[o->dns6_len++] = addr; > + dhcp_option_address_parse("DNS", p[2], o->dns, &o->dns_len, > msglevel); > } > } > else if (streq(p[1], "WINS") && p[2]) > @@ -7151,7 +7161,7 @@ add_option(struct options *options, > /* flag that we have options to give to the TAP driver's DHCPv4 > server > * - skipped for "DNS6", as that's not a DHCPv4 option > */ > - if (!streq(p[1], "DNS6")) > + if (!ipv6dns) > { > o->dhcp_options = true; > } Looks good and works well otherwise. Selva ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot _______________________________________________ Openvpn-devel mailing list Openvpn-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/openvpn-devel