Blame libnm/nm-dns-manager.c

Packit Service 87a54e
/* SPDX-License-Identifier: LGPL-2.1-or-later */
Packit 5756e2
/*
Packit 5756e2
 * Copyright (C) 2016 Red Hat, Inc.
Packit 5756e2
 */
Packit 5756e2
Packit 5756e2
#include "nm-default.h"
Packit 5756e2
Packit 5756e2
#include "nm-dns-manager.h"
Packit 5756e2
Packit 5756e2
#include "nm-dbus-interface.h"
Packit 5756e2
#include "nm-connection.h"
Packit 5756e2
#include "nm-client.h"
Packit 5756e2
#include "nm-object-private.h"
Packit 5756e2
#include "nm-dbus-helpers.h"
Packit 5756e2
#include "nm-core-internal.h"
Packit 5756e2
Packit 5756e2
/*****************************************************************************
Packit 5756e2
 * NMDnsEntry
Packit 5756e2
 *****************************************************************************/
Packit 5756e2
Packit Service a1bd4f
G_DEFINE_BOXED_TYPE(NMDnsEntry, nm_dns_entry, nm_dns_entry_dup, nm_dns_entry_unref)
Packit 5756e2
Packit 5756e2
struct NMDnsEntry {
Packit Service a1bd4f
    guint refcount;
Packit 5756e2
Packit Service a1bd4f
    char *   interface;
Packit Service a1bd4f
    char **  nameservers;
Packit Service a1bd4f
    char **  domains;
Packit Service a1bd4f
    int      priority;
Packit Service a1bd4f
    gboolean vpn;
Packit 5756e2
};
Packit 5756e2
Packit 5756e2
/**
Packit 5756e2
 * nm_dns_entry_new:
Packit 5756e2
 *
Packit 5756e2
 * Creates a new #NMDnsEntry object.
Packit 5756e2
 *
Packit 5756e2
 * Returns: (transfer full): the new #NMDnsEntry object, or %NULL on error
Packit 5756e2
 **/
Packit 5756e2
NMDnsEntry *
Packit Service a1bd4f
nm_dns_entry_new(const char *       interface,
Packit Service a1bd4f
                 const char *const *nameservers,
Packit Service a1bd4f
                 const char *const *domains,
Packit Service a1bd4f
                 int                priority,
Packit Service a1bd4f
                 gboolean           vpn)
Packit 5756e2
{
Packit Service a1bd4f
    NMDnsEntry *entry;
Packit Service a1bd4f
    guint       i, len;
Packit 5756e2
Packit Service a1bd4f
    entry           = g_slice_new0(NMDnsEntry);
Packit Service a1bd4f
    entry->refcount = 1;
Packit 5756e2
Packit Service a1bd4f
    entry->interface = g_strdup(interface);
Packit 5756e2
Packit Service a1bd4f
    if (nameservers) {
Packit Service a1bd4f
        len                = g_strv_length((char **) nameservers);
Packit Service a1bd4f
        entry->nameservers = g_new(char *, len + 1);
Packit Service a1bd4f
        for (i = 0; i < len + 1; i++)
Packit Service a1bd4f
            entry->nameservers[i] = g_strdup(nameservers[i]);
Packit Service a1bd4f
    }
Packit 5756e2
Packit Service a1bd4f
    if (domains) {
Packit Service a1bd4f
        len            = g_strv_length((char **) domains);
Packit Service a1bd4f
        entry->domains = g_new(char *, len + 1);
Packit Service a1bd4f
        for (i = 0; i < len + 1; i++)
Packit Service a1bd4f
            entry->domains[i] = g_strdup(domains[i]);
Packit Service a1bd4f
    }
Packit 5756e2
Packit Service a1bd4f
    entry->priority = priority;
Packit Service a1bd4f
    entry->vpn      = vpn;
Packit 5756e2
Packit Service a1bd4f
    return entry;
Packit 5756e2
}
Packit 5756e2
Packit 5756e2
/**
Packit 5756e2
 * nm_dns_entry_dup:
Packit 5756e2
 * @entry: the #NMDnsEntry
Packit 5756e2
 *
Packit 5756e2
 * Creates a copy of @entry
Packit 5756e2
 *
Packit 5756e2
 * Returns: (transfer full): a copy of @entry
Packit 5756e2
 **/
Packit 5756e2
NMDnsEntry *
Packit Service a1bd4f
nm_dns_entry_dup(NMDnsEntry *entry)
Packit 5756e2
{
Packit Service a1bd4f
    NMDnsEntry *copy;
Packit 5756e2
Packit Service a1bd4f
    g_return_val_if_fail(entry != NULL, NULL);
Packit Service a1bd4f
    g_return_val_if_fail(entry->refcount > 0, NULL);
Packit 5756e2
Packit Service a1bd4f
    copy = nm_dns_entry_new(entry->interface,
Packit Service a1bd4f
                            (const char *const *) entry->nameservers,
Packit Service a1bd4f
                            (const char *const *) entry->domains,
Packit Service a1bd4f
                            entry->priority,
Packit Service a1bd4f
                            entry->vpn);
Packit 5756e2
Packit Service a1bd4f
    return copy;
Packit 5756e2
}
Packit 5756e2
Packit 5756e2
/**
Packit 5756e2
 * nm_dns_entry_unref:
Packit 5756e2
 * @entry: the #NMDnsEntry
Packit 5756e2
 *
Packit 5756e2
 * Decreases the reference count of the object.  If the reference count
Packit 5756e2
 * reaches zero, the object will be destroyed.
Packit 5756e2
 *
Packit 5756e2
 * Since: 1.6
Packit 5756e2
 **/
Packit 5756e2
void
Packit Service a1bd4f
nm_dns_entry_unref(NMDnsEntry *entry)
Packit 5756e2
{
Packit Service a1bd4f
    g_return_if_fail(entry != NULL);
Packit Service a1bd4f
    g_return_if_fail(entry->refcount > 0);
Packit Service a1bd4f
Packit Service a1bd4f
    entry->refcount--;
Packit Service a1bd4f
    if (entry->refcount == 0) {
Packit Service a1bd4f
        g_free(entry->interface);
Packit Service a1bd4f
        g_strfreev(entry->nameservers);
Packit Service a1bd4f
        g_strfreev(entry->domains);
Packit Service a1bd4f
        g_slice_free(NMDnsEntry, entry);
Packit Service a1bd4f
    }
Packit 5756e2
}
Packit 5756e2
Packit 5756e2
/**
Packit 5756e2
 * nm_dns_entry_get_interface:
Packit 5756e2
 * @entry: the #NMDnsEntry
Packit 5756e2
 *
Packit 5756e2
 * Gets the interface on which name servers are contacted.
Packit 5756e2
 *
Packit 5756e2
 * Returns: (transfer none): the interface name
Packit 5756e2
 *
Packit 5756e2
 * Since: 1.6
Packit 5756e2
 **/
Packit 5756e2
const char *
Packit Service a1bd4f
nm_dns_entry_get_interface(NMDnsEntry *entry)
Packit 5756e2
{
Packit Service a1bd4f
    g_return_val_if_fail(entry, 0);
Packit Service a1bd4f
    g_return_val_if_fail(entry->refcount > 0, 0);
Packit 5756e2
Packit Service a1bd4f
    return entry->interface;
Packit 5756e2
}
Packit 5756e2
Packit 5756e2
/**
Packit 5756e2
 * nm_dns_entry_get_nameservers:
Packit 5756e2
 * @entry: the #NMDnsEntry
Packit 5756e2
 *
Packit 5756e2
 * Gets the list of name servers for this entry.
Packit 5756e2
 *
Packit 5756e2
 * Returns: (transfer none): the list of name servers
Packit 5756e2
 *
Packit 5756e2
 * Since: 1.6
Packit 5756e2
 **/
Packit Service a1bd4f
const char *const *
Packit Service a1bd4f
nm_dns_entry_get_nameservers(NMDnsEntry *entry)
Packit 5756e2
{
Packit Service a1bd4f
    g_return_val_if_fail(entry, 0);
Packit Service a1bd4f
    g_return_val_if_fail(entry->refcount > 0, 0);
Packit 5756e2
Packit Service a1bd4f
    return (const char *const *) entry->nameservers;
Packit 5756e2
}
Packit 5756e2
Packit 5756e2
/**
Packit 5756e2
 * nm_dns_entry_get_domains:
Packit 5756e2
 * @entry: the #NMDnsEntry
Packit 5756e2
 *
Packit 5756e2
 * Gets the list of DNS domains.
Packit 5756e2
 *
Packit 5756e2
 * Returns: (transfer none): the list of DNS domains
Packit 5756e2
 *
Packit 5756e2
 * Since: 1.6
Packit 5756e2
 **/
Packit Service a1bd4f
const char *const *
Packit Service a1bd4f
nm_dns_entry_get_domains(NMDnsEntry *entry)
Packit 5756e2
{
Packit Service a1bd4f
    g_return_val_if_fail(entry, 0);
Packit Service a1bd4f
    g_return_val_if_fail(entry->refcount > 0, 0);
Packit 5756e2
Packit Service a1bd4f
    return (const char *const *) entry->domains;
Packit 5756e2
}
Packit 5756e2
Packit 5756e2
/**
Packit 5756e2
 * nm_dns_entry_get_vpn:
Packit 5756e2
 * @entry: the #NMDnsEntry
Packit 5756e2
 *
Packit 5756e2
 * Gets whether the entry refers to VPN name servers.
Packit 5756e2
 *
Packit 5756e2
 * Returns: %TRUE if the entry refers to VPN name servers
Packit 5756e2
 *
Packit 5756e2
 * Since: 1.6
Packit 5756e2
 **/
Packit 5756e2
gboolean
Packit Service a1bd4f
nm_dns_entry_get_vpn(NMDnsEntry *entry)
Packit 5756e2
{
Packit Service a1bd4f
    g_return_val_if_fail(entry, 0);
Packit Service a1bd4f
    g_return_val_if_fail(entry->refcount > 0, 0);
Packit 5756e2
Packit Service a1bd4f
    return entry->vpn;
Packit 5756e2
}
Packit 5756e2
Packit 5756e2
/**
Packit 5756e2
 * nm_dns_entry_get_priority:
Packit 5756e2
 * @entry: the #NMDnsEntry
Packit 5756e2
 *
Packit 5756e2
 * Gets the priority of the entry
Packit 5756e2
 *
Packit 5756e2
 * Returns: the priority of the entry
Packit 5756e2
 *
Packit 5756e2
 * Since: 1.6
Packit 5756e2
 **/
Packit 5756e2
int
Packit Service a1bd4f
nm_dns_entry_get_priority(NMDnsEntry *entry)
Packit 5756e2
{
Packit Service a1bd4f
    g_return_val_if_fail(entry, 0);
Packit Service a1bd4f
    g_return_val_if_fail(entry->refcount > 0, 0);
Packit 5756e2
Packit Service a1bd4f
    return entry->priority;
Packit 5756e2
}