211 lines
9.0 KiB
Diff
211 lines
9.0 KiB
Diff
From 736c6c7930c74c653c61379d7258cc1d93973e0a Mon Sep 17 00:00:00 2001
|
|
From: Beniamino Galvani <bgalvani@redhat.com>
|
|
Date: Wed, 12 Feb 2025 20:54:51 +0100
|
|
Subject: [PATCH 1/3] dnsconfd: fix handling of the update-pending flag
|
|
|
|
After every state change of the plugin there should be an invocation
|
|
of _nm_dns_plugin_update_pending_maybe_changed() to re-evaluate
|
|
whether we are waiting for an update. send_dnsconfd_update() doesn't
|
|
change the state and so there is need to check again afterwards.
|
|
|
|
(cherry picked from commit 8ff1cbf38b53950a6f12239326a1f41eca573915)
|
|
(cherry picked from commit dc0ff10efb2b9ea370fbe98d0a5720e9e9f15173)
|
|
---
|
|
src/core/dns/nm-dns-dnsconfd.c | 10 +++++++---
|
|
1 file changed, 7 insertions(+), 3 deletions(-)
|
|
|
|
diff --git a/src/core/dns/nm-dns-dnsconfd.c b/src/core/dns/nm-dns-dnsconfd.c
|
|
index b356c2f9ca..38b7558a12 100644
|
|
--- a/src/core/dns/nm-dns-dnsconfd.c
|
|
+++ b/src/core/dns/nm-dns-dnsconfd.c
|
|
@@ -61,7 +61,11 @@ G_DEFINE_TYPE(NMDnsDnsconfd, nm_dns_dnsconfd, NM_TYPE_DNS_PLUGIN)
|
|
|
|
#define DNSCONFD_DBUS_SERVICE "com.redhat.dnsconfd"
|
|
|
|
-typedef enum { CONNECTION_FAIL, CONNECTION_SUCCESS, CONNECTION_WAIT } ConnectionState;
|
|
+typedef enum {
|
|
+ CONNECTION_FAIL,
|
|
+ CONNECTION_SUCCESS,
|
|
+ CONNECTION_WAIT,
|
|
+} ConnectionState;
|
|
|
|
/*****************************************************************************/
|
|
|
|
@@ -704,6 +708,8 @@ update(NMDnsPlugin *plugin,
|
|
_LOGT("connected, waiting for update to finish");
|
|
}
|
|
|
|
+ _nm_dns_plugin_update_pending_maybe_changed(plugin);
|
|
+
|
|
if (all_connected == CONNECTION_FAIL) {
|
|
nm_utils_error_set(error,
|
|
NM_UTILS_ERROR_UNKNOWN,
|
|
@@ -717,8 +723,6 @@ update(NMDnsPlugin *plugin,
|
|
|
|
send_dnsconfd_update(self);
|
|
|
|
- _nm_dns_plugin_update_pending_maybe_changed(NM_DNS_PLUGIN(self));
|
|
-
|
|
return TRUE;
|
|
}
|
|
|
|
--
|
|
2.48.1
|
|
|
|
From 3784576e6f967b1c70c7364fe55ee0b73a06dd8b Mon Sep 17 00:00:00 2001
|
|
From: Beniamino Galvani <bgalvani@redhat.com>
|
|
Date: Wed, 12 Feb 2025 20:58:27 +0100
|
|
Subject: [PATCH 2/3] dnsconfd: set the state to idle when connection fails
|
|
|
|
If the plugin can't connect to D-Bus, it is not waiting for an update;
|
|
set the state to idle.
|
|
|
|
(cherry picked from commit 2bfd27f74d869a529a14e478019399075ca37d03)
|
|
(cherry picked from commit e20794989b0bea80a120888a34d4d9915cbd8529)
|
|
---
|
|
src/core/dns/nm-dns-dnsconfd.c | 5 ++++-
|
|
1 file changed, 4 insertions(+), 1 deletion(-)
|
|
|
|
diff --git a/src/core/dns/nm-dns-dnsconfd.c b/src/core/dns/nm-dns-dnsconfd.c
|
|
index 38b7558a12..b4c935db62 100644
|
|
--- a/src/core/dns/nm-dns-dnsconfd.c
|
|
+++ b/src/core/dns/nm-dns-dnsconfd.c
|
|
@@ -700,7 +700,10 @@ update(NMDnsPlugin *plugin,
|
|
|
|
/* We need to consider only whether we are connected, because newer update call
|
|
* overrides the old one */
|
|
- if (all_connected != CONNECTION_SUCCESS) {
|
|
+ if (all_connected == CONNECTION_FAIL) {
|
|
+ priv->plugin_state = DNSCONFD_PLUGIN_IDLE;
|
|
+ _LOGT("failed to connect");
|
|
+ } else if (all_connected == CONNECTION_WAIT) {
|
|
priv->plugin_state = DNSCONFD_PLUGIN_WAIT_CONNECT;
|
|
_LOGT("not connected, waiting to connect");
|
|
} else {
|
|
--
|
|
2.48.1
|
|
|
|
From cc90aa81383d816ff9bb2dcd2080868787d3e776 Mon Sep 17 00:00:00 2001
|
|
From: Beniamino Galvani <bgalvani@redhat.com>
|
|
Date: Thu, 13 Feb 2025 09:54:21 +0100
|
|
Subject: [PATCH 3/3] dnsconfd: drop "connection-*" entries from the update
|
|
method
|
|
|
|
Stop passing "connection-*" entries in the update method to
|
|
dnsconfd. The plugin tries to determine the connection from the
|
|
ifindex, but it's not possible to do it right at the moment because
|
|
the same ifindex can be used at the same time e.g. by a policy-based
|
|
VPN like ipsec and a normal device. Instead, it should be NM that
|
|
explicitly passes the information about the connection to the DNS
|
|
plugin. Anyway, these variables are not used at the moment by
|
|
dnsconfd.
|
|
|
|
Fixes: c6e1925decd8 ('dns: Add dnsconfd DNS plugin')
|
|
(cherry picked from commit 4d84e6cddf38754e04ca112f79b2e8937f60b01e)
|
|
(cherry picked from commit 5e18da31a45971a11fa0c12978f9685cca429862)
|
|
---
|
|
src/core/dns/nm-dns-dnsconfd.c | 65 +++++-----------------------------
|
|
1 file changed, 8 insertions(+), 57 deletions(-)
|
|
|
|
diff --git a/src/core/dns/nm-dns-dnsconfd.c b/src/core/dns/nm-dns-dnsconfd.c
|
|
index b4c935db62..ea23760634 100644
|
|
--- a/src/core/dns/nm-dns-dnsconfd.c
|
|
+++ b/src/core/dns/nm-dns-dnsconfd.c
|
|
@@ -333,29 +333,8 @@ get_networks(NMDnsConfigIPData *ip_data, char ***networks)
|
|
static void
|
|
server_builder_append_interface_info(GVariantBuilder *argument_builder,
|
|
const char *interface,
|
|
- char **networks,
|
|
- const char *connection_id,
|
|
- const char *connection_uuid,
|
|
- const char *dbus_path)
|
|
+ char **networks)
|
|
{
|
|
- if (connection_id) {
|
|
- g_variant_builder_add(argument_builder,
|
|
- "{sv}",
|
|
- "connection-id",
|
|
- g_variant_new("s", connection_id));
|
|
- }
|
|
- if (connection_uuid) {
|
|
- g_variant_builder_add(argument_builder,
|
|
- "{sv}",
|
|
- "connection-uuid",
|
|
- g_variant_new("s", connection_uuid));
|
|
- }
|
|
- if (dbus_path) {
|
|
- g_variant_builder_add(argument_builder,
|
|
- "{sv}",
|
|
- "connection-object",
|
|
- g_variant_new("s", dbus_path));
|
|
- }
|
|
if (interface) {
|
|
g_variant_builder_add(argument_builder, "{sv}", "interface", g_variant_new("s", interface));
|
|
}
|
|
@@ -593,18 +572,11 @@ parse_all_interface_config(GVariantBuilder *argument_builder,
|
|
const CList *ip_data_lst_head,
|
|
const char *ca)
|
|
{
|
|
- NMDnsConfigIPData *ip_data;
|
|
- const char *const *dns_server_strings;
|
|
- guint nameserver_count;
|
|
- const char *ifname;
|
|
- NMDevice *device;
|
|
- NMActiveConnection *active_connection;
|
|
- NMSettingsConnection *settings_connection;
|
|
- NMActRequest *act_request;
|
|
- const char *connection_id;
|
|
- const char *connection_uuid;
|
|
- const char *dbus_path;
|
|
- gboolean explicit_default = is_default_interface_explicit(ip_data_lst_head);
|
|
+ NMDnsConfigIPData *ip_data;
|
|
+ const char *const *dns_server_strings;
|
|
+ guint nameserver_count;
|
|
+ const char *ifname;
|
|
+ gboolean explicit_default = is_default_interface_explicit(ip_data_lst_head);
|
|
|
|
c_list_for_each_entry (ip_data, ip_data_lst_head, ip_data_lst) {
|
|
/* No need to free insides of routing and search domains, as they point to data
|
|
@@ -619,23 +591,7 @@ parse_all_interface_config(GVariantBuilder *argument_builder,
|
|
&nameserver_count);
|
|
if (!nameserver_count)
|
|
continue;
|
|
- ifname = nm_platform_link_get_name(NM_PLATFORM_GET, ip_data->data->ifindex);
|
|
- device = nm_manager_get_device_by_ifindex(NM_MANAGER_GET, ip_data->data->ifindex);
|
|
- act_request = nm_device_get_act_request(device);
|
|
- active_connection = NM_ACTIVE_CONNECTION(act_request);
|
|
-
|
|
- /* Presume that when we have server of this interface then the interface has to have
|
|
- * an active connection */
|
|
- nm_assert(active_connection);
|
|
-
|
|
- settings_connection = nm_active_connection_get_settings_connection(active_connection);
|
|
- connection_id = nm_settings_connection_get_id(settings_connection);
|
|
- connection_uuid = nm_settings_connection_get_uuid(settings_connection);
|
|
- dbus_path = nm_dbus_object_get_path_still_exported(NM_DBUS_OBJECT(act_request));
|
|
-
|
|
- /* dbus_path also should be set, because if we are parsing this connection then we
|
|
- * expect it to be active and exported on dbus */
|
|
- nm_assert(dbus_path && dbus_path[0] != 0);
|
|
+ ifname = nm_platform_link_get_name(NM_PLATFORM_GET, ip_data->data->ifindex);
|
|
|
|
gather_interface_domains(ip_data, explicit_default, &routing_domains, &search_domains);
|
|
get_networks(ip_data, &networks);
|
|
@@ -647,12 +603,7 @@ parse_all_interface_config(GVariantBuilder *argument_builder,
|
|
routing_domains,
|
|
search_domains,
|
|
ca)) {
|
|
- server_builder_append_interface_info(argument_builder,
|
|
- ifname,
|
|
- networks,
|
|
- connection_id,
|
|
- connection_uuid,
|
|
- dbus_path);
|
|
+ server_builder_append_interface_info(argument_builder, ifname, networks);
|
|
}
|
|
}
|
|
}
|
|
--
|
|
2.48.1
|
|
|