[Openvpn-devel,v1] Preserve --dhcp-option values from local config

Message ID 20250912132235.44304-1-frank@lichtenheld.com
State New
Headers show
Series [Openvpn-devel,v1] Preserve --dhcp-option values from local config | expand

Commit Message

Frank Lichtenheld Sept. 12, 2025, 1:22 p.m. UTC
From: Lev Stipakov <lev@openvpn.net>

Commit

  2dfc4f8 ("dns: deal with --dhcp-options when --dns is active")

has changed the way how --dhcp-option values are stored. Instead of
storing them directly in tuntap_options, they are now stored in
dns_options->from_dhcp.

Before connect, we save options before --pull is applied, for that
we call clone_dns_options(). However, this routing was missing cloning
of from_dhcp struct, and as a result, the values of --dhcp-option from'
the local config have been lost.

Fix by adding shallow-copying of dhcp_options to clone_dns_options(). It
is safe to do because it only contains fixed-size arrays, scalar types
and pointers to the strings which this struct doesn't own.

GitHub: https://github.com/OpenVPN/openvpn/issues/839

Change-Id: I815e68dd5d365743faff2b80783b776d9e8a645c
Signed-off-by: Lev Stipakov <lev@openvpn.net>
Acked-by: Frank Lichtenheld <frank@lichtenheld.com>
---

This change was reviewed on Gerrit and approved by at least one
developer. I request to merge it to master.

Gerrit URL: https://gerrit.openvpn.net/c/openvpn/+/1181
This mail reflects revision 1 of this Change.

Acked-by according to Gerrit (reflected above):
Frank Lichtenheld <frank@lichtenheld.com>

Patch

diff --git a/src/openvpn/dns.c b/src/openvpn/dns.c
index 8554089..5421004 100644
--- a/src/openvpn/dns.c
+++ b/src/openvpn/dns.c
@@ -264,6 +264,7 @@ 
     clone.servers_prepull = clone_dns_servers(o->servers_prepull, gc);
     clone.updown = o->updown;
     clone.updown_flags = o->updown_flags;
+    clone.from_dhcp = o->from_dhcp;
 
     return clone;
 }