about summary refs log tree commit diff
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 00000000..15df3acf
--- /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 "src/core/nm-default-daemon.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;
+}