Dispatch "dns-changed" event
Resolves: RHEL-10195 Additionally, add a missing "epoch" in a version number that was triggering an OSCI warning.
This commit is contained in:
parent
e9658e42ed
commit
87b7f3eb23
299
1011-dispatch-dns-change-event-rhel-10195.patch
Normal file
299
1011-dispatch-dns-change-event-rhel-10195.patch
Normal file
@ -0,0 +1,299 @@
|
||||
From 818352a0342358f4c62465aa5b3590b8e5fb924d Mon Sep 17 00:00:00 2001
|
||||
From: Gris Ge <fge@redhat.com>
|
||||
Date: Tue, 26 Sep 2023 15:00:32 +0800
|
||||
Subject: [PATCH 1/2] emit DNS CONFIG_CHANGED signal even dns=none
|
||||
|
||||
Instruct the `NMDnsManager` to emit `CONFIG_CHANGED` signal even
|
||||
`dns=none` or failed to modify `/etc/resolv.conf`.
|
||||
|
||||
The `NMPolicy` will only update hostname when DNS is managed.
|
||||
|
||||
Signed-off-by: Gris Ge <fge@redhat.com>
|
||||
(cherry picked from commit a847ba807572c3ef3682e833432f2f93e9d519a0)
|
||||
(cherry picked from commit d10f20fd01a7bb3225c7e38ed80449e19156344b)
|
||||
(cherry picked from commit e0f3a91a95d45f729bd42956617aafb84e26a47b)
|
||||
(cherry picked from commit cd9ebfd2bb76b99b861af1272f5ef9bb0d279008)
|
||||
---
|
||||
src/core/dns/nm-dns-manager.c | 12 +++++++++++-
|
||||
src/core/dns/nm-dns-manager.h | 2 ++
|
||||
src/core/nm-policy.c | 10 ++++++----
|
||||
3 files changed, 19 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/src/core/dns/nm-dns-manager.c b/src/core/dns/nm-dns-manager.c
|
||||
index 416a9bf915..2d5f1245b3 100644
|
||||
--- a/src/core/dns/nm-dns-manager.c
|
||||
+++ b/src/core/dns/nm-dns-manager.c
|
||||
@@ -1907,7 +1907,7 @@ plugin_skip:;
|
||||
}
|
||||
|
||||
/* signal that DNS resolution configs were changed */
|
||||
- if ((do_update || caching || force_emit) && result == SR_SUCCESS)
|
||||
+ if ((caching || force_emit) && result == SR_SUCCESS)
|
||||
g_signal_emit(self, signals[CONFIG_CHANGED], 0);
|
||||
|
||||
nm_clear_pointer(&priv->config_variant, g_variant_unref);
|
||||
@@ -1923,6 +1923,16 @@ plugin_skip:;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
+gboolean
|
||||
+nm_dns_manager_is_unmanaged(NMDnsManager *self)
|
||||
+{
|
||||
+ NMDnsManagerPrivate *priv = NM_DNS_MANAGER_GET_PRIVATE(self);
|
||||
+
|
||||
+ return NM_IN_SET(priv->rc_manager,
|
||||
+ NM_DNS_MANAGER_RESOLV_CONF_MAN_UNMANAGED,
|
||||
+ NM_DNS_MANAGER_RESOLV_CONF_MAN_IMMUTABLE);
|
||||
+}
|
||||
+
|
||||
/*****************************************************************************/
|
||||
|
||||
gboolean
|
||||
diff --git a/src/core/dns/nm-dns-manager.h b/src/core/dns/nm-dns-manager.h
|
||||
index b41bf1ccf2..b697b3e380 100644
|
||||
--- a/src/core/dns/nm-dns-manager.h
|
||||
+++ b/src/core/dns/nm-dns-manager.h
|
||||
@@ -148,4 +148,6 @@ char *nmtst_dns_create_resolv_conf(const char *const *searches,
|
||||
const char *const *nameservers,
|
||||
const char *const *options);
|
||||
|
||||
+gboolean nm_dns_manager_is_unmanaged(NMDnsManager *self);
|
||||
+
|
||||
#endif /* __NETWORKMANAGER_DNS_MANAGER_H__ */
|
||||
diff --git a/src/core/nm-policy.c b/src/core/nm-policy.c
|
||||
index 0b7c9eddca..d9e7643fa2 100644
|
||||
--- a/src/core/nm-policy.c
|
||||
+++ b/src/core/nm-policy.c
|
||||
@@ -2563,11 +2563,13 @@ dns_config_changed(NMDnsManager *dns_manager, gpointer user_data)
|
||||
if (priv->updating_dns)
|
||||
return;
|
||||
|
||||
- nm_manager_for_each_device (priv->manager, device, tmp_lst) {
|
||||
- nm_device_clear_dns_lookup_data(device, "DNS configuration changed");
|
||||
- }
|
||||
+ if (!nm_dns_manager_is_unmanaged(dns_manager)) {
|
||||
+ nm_manager_for_each_device (priv->manager, device, tmp_lst) {
|
||||
+ nm_device_clear_dns_lookup_data(device, "DNS configuration changed");
|
||||
+ }
|
||||
|
||||
- update_system_hostname(self, "DNS configuration changed");
|
||||
+ update_system_hostname(self, "DNS configuration changed");
|
||||
+ }
|
||||
}
|
||||
|
||||
static void
|
||||
--
|
||||
2.41.0
|
||||
|
||||
|
||||
From 206d974bfbd3f0496d2263ec8a12ee58ce085b0e Mon Sep 17 00:00:00 2001
|
||||
From: Gris Ge <fge@redhat.com>
|
||||
Date: Wed, 18 Oct 2023 15:03:13 +0800
|
||||
Subject: [PATCH 2/2] dispatch `dns-change` dispatcher event
|
||||
|
||||
Introducing new dispatcher event -- `dns-change` which will be emitted when
|
||||
DNS configuration changed(even in `dns=none` mode). This is to solve two
|
||||
use cases:
|
||||
* Invoke dispatch script for DNS changes triggered by the global DNS
|
||||
API.
|
||||
|
||||
* Do not invoke [OpenShift resolv-prepender][1] for non-DNS changes.
|
||||
|
||||
Bug reference: https://issues.redhat.com/browse/RHEL-1671
|
||||
|
||||
[1]: https://github.com/openshift/machine-config-operator/blob/master/templates/common/on-prem/files/resolv-prepender.yaml
|
||||
|
||||
Signed-off-by: Gris Ge <fge@redhat.com>
|
||||
(cherry picked from commit a1db61ebc9712d1faf2ef8f1b2cb14cd819346d3)
|
||||
(cherry picked from commit 3cdce71b95cea11bf409d9353c35a4dea6f33984)
|
||||
(cherry picked from commit 9ae535c61a5116179ba2f775458427b93518ac49)
|
||||
(cherry picked from commit e74a349e1e88e06436a6809b92faa249910daabd)
|
||||
---
|
||||
man/NetworkManager-dispatcher.xml | 5 +-
|
||||
src/core/nm-dispatcher.c | 51 ++++++++++++++++---
|
||||
src/core/nm-dispatcher.h | 5 +-
|
||||
src/core/nm-policy.c | 2 +
|
||||
src/libnm-core-aux-extern/nm-dispatcher-api.h | 1 +
|
||||
src/nm-dispatcher/nm-dispatcher-utils.c | 8 ++-
|
||||
6 files changed, 60 insertions(+), 12 deletions(-)
|
||||
|
||||
diff --git a/man/NetworkManager-dispatcher.xml b/man/NetworkManager-dispatcher.xml
|
||||
index 4a603b1566..8a3c0b46ed 100644
|
||||
--- a/man/NetworkManager-dispatcher.xml
|
||||
+++ b/man/NetworkManager-dispatcher.xml
|
||||
@@ -68,8 +68,9 @@
|
||||
device an operation just happened on, and second the action. For device actions,
|
||||
the interface is the name of the kernel interface suitable for IP configuration.
|
||||
Thus it is either VPN_IP_IFACE, DEVICE_IP_IFACE, or DEVICE_IFACE, as applicable.
|
||||
- For the <varname>hostname</varname> action the device name is always <literal>"none"</literal>
|
||||
- and for <varname>connectivity-change</varname> it is empty.
|
||||
+ For the <varname>hostname</varname> action the device name is always <literal>"none"</literal>.
|
||||
+ For <varname>connectivity-change</varname> it is empty.
|
||||
+ For <varname>dns-change</varname> it is empty.
|
||||
</para>
|
||||
<para>The actions are:</para>
|
||||
<variablelist class="dispatcher-options">
|
||||
diff --git a/src/core/nm-dispatcher.c b/src/core/nm-dispatcher.c
|
||||
index d3529ee4de..a0ce4de80d 100644
|
||||
--- a/src/core/nm-dispatcher.c
|
||||
+++ b/src/core/nm-dispatcher.c
|
||||
@@ -49,6 +49,8 @@
|
||||
} \
|
||||
G_STMT_END
|
||||
|
||||
+static gboolean nm_dispatcher_need_device(NMDispatcherAction action);
|
||||
+
|
||||
/*****************************************************************************/
|
||||
|
||||
struct NMDispatcherCallId {
|
||||
@@ -465,7 +467,8 @@ static const char *action_table[] = {[NM_DISPATCHER_ACTION_HOSTNAME] = NMD_
|
||||
[NM_DISPATCHER_ACTION_DHCP_CHANGE_4] = NMD_ACTION_DHCP4_CHANGE,
|
||||
[NM_DISPATCHER_ACTION_DHCP_CHANGE_6] = NMD_ACTION_DHCP6_CHANGE,
|
||||
[NM_DISPATCHER_ACTION_CONNECTIVITY_CHANGE] =
|
||||
- NMD_ACTION_CONNECTIVITY_CHANGE};
|
||||
+ NMD_ACTION_CONNECTIVITY_CHANGE,
|
||||
+ [NM_DISPATCHER_ACTION_DNS_CHANGE] = NMD_ACTION_DNS_CHANGE};
|
||||
|
||||
static const char *
|
||||
action_to_string(NMDispatcherAction action)
|
||||
@@ -526,9 +529,7 @@ _dispatcher_call(NMDispatcherAction action,
|
||||
if (G_UNLIKELY(!request_id))
|
||||
request_id = ++gl.request_id_counter;
|
||||
|
||||
- /* All actions except 'hostname' and 'connectivity-change' require a device */
|
||||
- if (action == NM_DISPATCHER_ACTION_HOSTNAME
|
||||
- || action == NM_DISPATCHER_ACTION_CONNECTIVITY_CHANGE) {
|
||||
+ if (!nm_dispatcher_need_device(action)) {
|
||||
_LOG2D(request_id,
|
||||
log_ifname,
|
||||
log_con_uuid,
|
||||
@@ -588,9 +589,8 @@ _dispatcher_call(NMDispatcherAction action,
|
||||
g_variant_builder_init(&vpn_ip4_props, G_VARIANT_TYPE_VARDICT);
|
||||
g_variant_builder_init(&vpn_ip6_props, G_VARIANT_TYPE_VARDICT);
|
||||
|
||||
- /* hostname and connectivity-change actions don't send device data */
|
||||
- if (action != NM_DISPATCHER_ACTION_HOSTNAME
|
||||
- && action != NM_DISPATCHER_ACTION_CONNECTIVITY_CHANGE) {
|
||||
+ /* hostname, DNS and connectivity-change actions don't send device data */
|
||||
+ if (nm_dispatcher_need_device(action)) {
|
||||
fill_device_props(device,
|
||||
&device_props,
|
||||
&device_proxy_props,
|
||||
@@ -921,6 +921,30 @@ nm_dispatcher_call_connectivity(NMConnectivityState connectivity_state,
|
||||
out_call_id);
|
||||
}
|
||||
|
||||
+/**
|
||||
+ * nm_dispatcher_call_dns_change():
|
||||
+ *
|
||||
+ * This method does not block the caller.
|
||||
+ *
|
||||
+ * Returns: %TRUE if the action was dispatched, %FALSE on failure
|
||||
+ */
|
||||
+gboolean
|
||||
+nm_dispatcher_call_dns_change(void)
|
||||
+{
|
||||
+ return _dispatcher_call(NM_DISPATCHER_ACTION_DNS_CHANGE,
|
||||
+ FALSE,
|
||||
+ NULL,
|
||||
+ NULL,
|
||||
+ NULL,
|
||||
+ FALSE,
|
||||
+ NM_CONNECTIVITY_UNKNOWN,
|
||||
+ NULL,
|
||||
+ NULL,
|
||||
+ NULL,
|
||||
+ NULL,
|
||||
+ NULL);
|
||||
+}
|
||||
+
|
||||
void
|
||||
nm_dispatcher_call_cancel(NMDispatcherCallId *call_id)
|
||||
{
|
||||
@@ -933,3 +957,16 @@ nm_dispatcher_call_cancel(NMDispatcherCallId *call_id)
|
||||
_LOG3D(call_id, "cancelling dispatcher callback action");
|
||||
call_id->callback = NULL;
|
||||
}
|
||||
+
|
||||
+/* All actions except 'hostname', 'connectivity-change' and 'dns-change' require
|
||||
+ * a device */
|
||||
+static gboolean
|
||||
+nm_dispatcher_need_device(NMDispatcherAction action)
|
||||
+{
|
||||
+ if (action == NM_DISPATCHER_ACTION_HOSTNAME
|
||||
+ || action == NM_DISPATCHER_ACTION_CONNECTIVITY_CHANGE
|
||||
+ || action == NM_DISPATCHER_ACTION_DNS_CHANGE) {
|
||||
+ return FALSE;
|
||||
+ }
|
||||
+ return TRUE;
|
||||
+}
|
||||
diff --git a/src/core/nm-dispatcher.h b/src/core/nm-dispatcher.h
|
||||
index 73e0599a75..50d50e9a6a 100644
|
||||
--- a/src/core/nm-dispatcher.h
|
||||
+++ b/src/core/nm-dispatcher.h
|
||||
@@ -21,7 +21,8 @@ typedef enum {
|
||||
NM_DISPATCHER_ACTION_VPN_DOWN,
|
||||
NM_DISPATCHER_ACTION_DHCP_CHANGE_4,
|
||||
NM_DISPATCHER_ACTION_DHCP_CHANGE_6,
|
||||
- NM_DISPATCHER_ACTION_CONNECTIVITY_CHANGE
|
||||
+ NM_DISPATCHER_ACTION_CONNECTIVITY_CHANGE,
|
||||
+ NM_DISPATCHER_ACTION_DNS_CHANGE,
|
||||
} NMDispatcherAction;
|
||||
|
||||
#define NM_DISPATCHER_ACTION_DHCP_CHANGE_X(IS_IPv4) \
|
||||
@@ -68,6 +69,8 @@ gboolean nm_dispatcher_call_connectivity(NMConnectivityState state,
|
||||
gpointer user_data,
|
||||
NMDispatcherCallId **out_call_id);
|
||||
|
||||
+gboolean nm_dispatcher_call_dns_change(void);
|
||||
+
|
||||
void nm_dispatcher_call_cancel(NMDispatcherCallId *call_id);
|
||||
|
||||
#endif /* __NM_DISPATCHER_H__ */
|
||||
diff --git a/src/core/nm-policy.c b/src/core/nm-policy.c
|
||||
index d9e7643fa2..9316325c68 100644
|
||||
--- a/src/core/nm-policy.c
|
||||
+++ b/src/core/nm-policy.c
|
||||
@@ -2570,6 +2570,8 @@ dns_config_changed(NMDnsManager *dns_manager, gpointer user_data)
|
||||
|
||||
update_system_hostname(self, "DNS configuration changed");
|
||||
}
|
||||
+
|
||||
+ nm_dispatcher_call_dns_change();
|
||||
}
|
||||
|
||||
static void
|
||||
diff --git a/src/libnm-core-aux-extern/nm-dispatcher-api.h b/src/libnm-core-aux-extern/nm-dispatcher-api.h
|
||||
index 7776c84f9a..d19caa0bb5 100644
|
||||
--- a/src/libnm-core-aux-extern/nm-dispatcher-api.h
|
||||
+++ b/src/libnm-core-aux-extern/nm-dispatcher-api.h
|
||||
@@ -33,6 +33,7 @@
|
||||
#define NMD_ACTION_DHCP4_CHANGE "dhcp4-change"
|
||||
#define NMD_ACTION_DHCP6_CHANGE "dhcp6-change"
|
||||
#define NMD_ACTION_CONNECTIVITY_CHANGE "connectivity-change"
|
||||
+#define NMD_ACTION_DNS_CHANGE "dns-change"
|
||||
|
||||
typedef enum {
|
||||
DISPATCH_RESULT_UNKNOWN = 0,
|
||||
diff --git a/src/nm-dispatcher/nm-dispatcher-utils.c b/src/nm-dispatcher/nm-dispatcher-utils.c
|
||||
index 74ea4e4001..f8a4c28000 100644
|
||||
--- a/src/nm-dispatcher/nm-dispatcher-utils.c
|
||||
+++ b/src/nm-dispatcher/nm-dispatcher-utils.c
|
||||
@@ -453,8 +453,12 @@ nm_dispatcher_utils_construct_envp(const char *action,
|
||||
|
||||
items = g_ptr_array_new_with_free_func(g_free);
|
||||
|
||||
- /* Hostname and connectivity changes don't require a device nor contain a connection */
|
||||
- if (NM_IN_STRSET(action, NMD_ACTION_HOSTNAME, NMD_ACTION_CONNECTIVITY_CHANGE))
|
||||
+ /* Hostname, dns and connectivity changes don't require a device nor contain
|
||||
+ * a connection */
|
||||
+ if (NM_IN_STRSET(action,
|
||||
+ NMD_ACTION_HOSTNAME,
|
||||
+ NMD_ACTION_CONNECTIVITY_CHANGE,
|
||||
+ NMD_ACTION_DNS_CHANGE))
|
||||
goto done;
|
||||
|
||||
/* Connection properties */
|
||||
--
|
||||
2.41.0
|
||||
|
@ -6,7 +6,7 @@
|
||||
%global epoch_version 1
|
||||
%global real_version 1.40.16
|
||||
%global rpm_version %{real_version}
|
||||
%global release_version 11
|
||||
%global release_version 12
|
||||
%global snapshot %{nil}
|
||||
%global git_sha %{nil}
|
||||
%global bcond_default_debug 0
|
||||
@ -206,6 +206,7 @@ Patch1007: 1007-unblock-autoconnect-on-reapply-rh2207690.patch
|
||||
Patch1008: 1008-cloud-setup-fix-terminating-in-reconfig-rh2221903.patch
|
||||
Patch1009: 1009-manager-allow-controller-activation-if-device-is-dea-rhel-5119.patch
|
||||
Patch1010: 1010-fix-l3cd-comparison-rhel-8423.patch
|
||||
Patch1011: 1011-dispatch-dns-change-event-rhel-10195.patch
|
||||
|
||||
Requires(post): systemd
|
||||
%if 0%{?fedora} || 0%{?rhel} >= 8
|
||||
@ -389,7 +390,7 @@ Obsoletes: NetworkManager < %{obsoletes_device_plugins}
|
||||
# Team was split from main NM binary between 0.9.10 and 1.0
|
||||
# We need this Obsoletes in addition to the one above
|
||||
# (git:3aede801521ef7bff039e6e3f1b3c7b566b4338d).
|
||||
Obsoletes: NetworkManager < 1.0.0
|
||||
Obsoletes: NetworkManager < 1:1.0.0
|
||||
%endif
|
||||
|
||||
%description team
|
||||
@ -1241,6 +1242,9 @@ fi
|
||||
|
||||
|
||||
%changelog
|
||||
* Thu Oct 19 2023 Íñigo Huguet <ihuguet@redhat.com> - 1:1.40.16-12
|
||||
- Dispatch "dns-changed" event (RHEL-10195)
|
||||
|
||||
* Wed Oct 18 2023 Íñigo Huguet <ihuguet@redhat.com> - 1:1.40.16-11
|
||||
- Correctly update DNS changes retrieved from DHCPv4 (RHEL-8423)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user