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