Skip to content

Commit

Permalink
dns: clone options via pointer instead of copy
Browse files Browse the repository at this point in the history
Change-Id: I12b8bb26c0cb70e50b2d42b1c69018894e9f080c
Signed-off-by: Heiko Hund <[email protected]>
Acked-by: Frank Lichtenheld <[email protected]>
Message-Id: <[email protected]>
URL: https://www.mail-archive.com/[email protected]/msg30112.html
Signed-off-by: Gert Doering <[email protected]>
  • Loading branch information
d12fk authored and cron2 committed Dec 21, 2024
1 parent 6f2d222 commit db46d4d
Show file tree
Hide file tree
Showing 3 changed files with 10 additions and 7 deletions.
10 changes: 6 additions & 4 deletions src/openvpn/dns.c
Original file line number Diff line number Diff line change
Expand Up @@ -248,13 +248,15 @@ clone_dns_servers(const struct dns_server *server, struct gc_arena *gc)
}

struct dns_options
clone_dns_options(const struct dns_options o, struct gc_arena *gc)
clone_dns_options(const struct dns_options *o, struct gc_arena *gc)
{
struct dns_options clone;

memset(&clone, 0, sizeof(clone));
clone.search_domains = clone_dns_domains(o.search_domains, gc);
clone.servers = clone_dns_servers(o.servers, gc);
clone.servers_prepull = clone_dns_servers(o.servers_prepull, gc);
clone.search_domains = clone_dns_domains(o->search_domains, gc);
clone.servers = clone_dns_servers(o->servers, gc);
clone.servers_prepull = clone_dns_servers(o->servers_prepull, gc);

return clone;
}

Expand Down
3 changes: 2 additions & 1 deletion src/openvpn/dns.h
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,8 @@ bool dns_options_verify(int msglevel, const struct dns_options *o);
* @param gc Pointer to the gc_arena to use for the clone
* @return The dns_options clone
*/
struct dns_options clone_dns_options(const struct dns_options o, struct gc_arena *gc);
struct dns_options clone_dns_options(const struct dns_options *o,
struct gc_arena *gc);

/**
* Saves and resets the server options, so that pulled ones don't mix in.
Expand Down
4 changes: 2 additions & 2 deletions src/openvpn/options.c
Original file line number Diff line number Diff line change
Expand Up @@ -3311,7 +3311,7 @@ pre_connect_save(struct options *o)
o->pre_connect->route_default_gateway = o->route_default_gateway;
o->pre_connect->route_ipv6_default_gateway = o->route_ipv6_default_gateway;

o->pre_connect->dns_options = clone_dns_options(o->dns_options, &o->gc);
o->pre_connect->dns_options = clone_dns_options(&o->dns_options, &o->gc);

/* NCP related options that can be overwritten by a push */
o->pre_connect->ciphername = o->ciphername;
Expand Down Expand Up @@ -3364,7 +3364,7 @@ pre_connect_restore(struct options *o, struct gc_arena *gc)
/* Free DNS options and reset them to pre-pull state */
gc_free(&o->dns_options.gc);
struct gc_arena dns_gc = gc_new();
o->dns_options = clone_dns_options(pp->dns_options, &dns_gc);
o->dns_options = clone_dns_options(&pp->dns_options, &dns_gc);
o->dns_options.gc = dns_gc;

if (pp->client_nat_defined)
Expand Down

0 comments on commit db46d4d

Please sign in to comment.