summaryrefslogtreecommitdiff
path: root/src/core/dns/nm-dns-unbound.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/dns/nm-dns-unbound.c')
-rw-r--r--src/core/dns/nm-dns-unbound.c84
1 files changed, 84 insertions, 0 deletions
diff --git a/src/core/dns/nm-dns-unbound.c b/src/core/dns/nm-dns-unbound.c
new file mode 100644
index 0000000000..ee162c333b
--- /dev/null
+++ b/src/core/dns/nm-dns-unbound.c
@@ -0,0 +1,84 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+/*
+ * Copyright (C) 2014 Red Hat, Inc.
+ * Author: Pavel Šimerda <psimerda@redhat.com>
+ */
+
+#include "nm-default.h"
+
+#include "nm-dns-unbound.h"
+
+#include "NetworkManagerUtils.h"
+
+/*****************************************************************************/
+
+struct _NMDnsUnbound {
+ NMDnsPlugin parent;
+};
+
+struct _NMDnsUnboundClass {
+ NMDnsPluginClass parent;
+};
+
+G_DEFINE_TYPE(NMDnsUnbound, nm_dns_unbound, NM_TYPE_DNS_PLUGIN)
+
+/*****************************************************************************/
+
+static gboolean
+update(NMDnsPlugin * plugin,
+ const NMGlobalDnsConfig *global_config,
+ const CList * ip_config_lst_head,
+ const char * hostname,
+ GError ** error)
+{
+ char * argv[] = {DNSSEC_TRIGGER_PATH, "--async", "--update", NULL};
+ gs_free_error GError *local = NULL;
+ int status;
+
+ /* TODO: We currently call a script installed with the dnssec-trigger
+ * package that queries all information itself. Later, the dependency
+ * on that package will be optional and the only hard dependency will
+ * be unbound.
+ *
+ * Unbound configuration should be later handled by this plugin directly,
+ * without calling custom scripts. The dnssec-trigger functionality
+ * may be eventually merged into NetworkManager.
+ */
+ if (!g_spawn_sync("/", argv, NULL, 0, NULL, NULL, NULL, NULL, &status, &local)) {
+ nm_utils_error_set(error,
+ NM_UTILS_ERROR_UNKNOWN,
+ "error spawning dns-trigger: %s",
+ local->message);
+ return FALSE;
+ }
+ if (status != 0) {
+ nm_utils_error_set(error,
+ NM_UTILS_ERROR_UNKNOWN,
+ "dns-trigger exited with error code %d",
+ status);
+ return FALSE;
+ }
+ return TRUE;
+}
+
+/*****************************************************************************/
+
+static void
+nm_dns_unbound_init(NMDnsUnbound *unbound)
+{}
+
+NMDnsPlugin *
+nm_dns_unbound_new(void)
+{
+ return g_object_new(NM_TYPE_DNS_UNBOUND, NULL);
+}
+
+static void
+nm_dns_unbound_class_init(NMDnsUnboundClass *klass)
+{
+ NMDnsPluginClass *plugin_class = NM_DNS_PLUGIN_CLASS(klass);
+
+ plugin_class->plugin_name = "unbound";
+ plugin_class->is_caching = TRUE;
+ plugin_class->update = update;
+}