mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2026-04-19 21:50:39 +02:00
dns,config: merge branch 'th/dns-reload-bgo766996'
https://bugzilla.gnome.org/show_bug.cgi?id=766996
This commit is contained in:
commit
431c70832d
40 changed files with 523 additions and 199 deletions
|
|
@ -25,6 +25,7 @@
|
|||
#include "polkit-agent.h"
|
||||
#include "utils.h"
|
||||
#include "general.h"
|
||||
#include "nm-common-macros.h"
|
||||
|
||||
#include "devices.h"
|
||||
#include "connections.h"
|
||||
|
|
@ -387,18 +388,6 @@ show_nm_status (NmCli *nmc, const char *pretty_header_name, const char *print_fl
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
#define NM_AUTH_PERMISSION_ENABLE_DISABLE_NETWORK "org.freedesktop.NetworkManager.enable-disable-network"
|
||||
#define NM_AUTH_PERMISSION_ENABLE_DISABLE_WIFI "org.freedesktop.NetworkManager.enable-disable-wifi"
|
||||
#define NM_AUTH_PERMISSION_ENABLE_DISABLE_WWAN "org.freedesktop.NetworkManager.enable-disable-wwan"
|
||||
#define NM_AUTH_PERMISSION_ENABLE_DISABLE_WIMAX "org.freedesktop.NetworkManager.enable-disable-wimax"
|
||||
#define NM_AUTH_PERMISSION_SLEEP_WAKE "org.freedesktop.NetworkManager.sleep-wake"
|
||||
#define NM_AUTH_PERMISSION_NETWORK_CONTROL "org.freedesktop.NetworkManager.network-control"
|
||||
#define NM_AUTH_PERMISSION_WIFI_SHARE_PROTECTED "org.freedesktop.NetworkManager.wifi.share.protected"
|
||||
#define NM_AUTH_PERMISSION_WIFI_SHARE_OPEN "org.freedesktop.NetworkManager.wifi.share.open"
|
||||
#define NM_AUTH_PERMISSION_SETTINGS_MODIFY_SYSTEM "org.freedesktop.NetworkManager.settings.modify.system"
|
||||
#define NM_AUTH_PERMISSION_SETTINGS_MODIFY_OWN "org.freedesktop.NetworkManager.settings.modify.own"
|
||||
#define NM_AUTH_PERMISSION_SETTINGS_MODIFY_HOSTNAME "org.freedesktop.NetworkManager.settings.modify.hostname"
|
||||
|
||||
static const char *
|
||||
permission_to_string (NMClientPermission perm)
|
||||
{
|
||||
|
|
@ -425,6 +414,10 @@ permission_to_string (NMClientPermission perm)
|
|||
return NM_AUTH_PERMISSION_SETTINGS_MODIFY_OWN;
|
||||
case NM_CLIENT_PERMISSION_SETTINGS_MODIFY_HOSTNAME:
|
||||
return NM_AUTH_PERMISSION_SETTINGS_MODIFY_HOSTNAME;
|
||||
case NM_CLIENT_PERMISSION_SETTINGS_MODIFY_GLOBAL_DNS:
|
||||
return NM_AUTH_PERMISSION_SETTINGS_MODIFY_GLOBAL_DNS;
|
||||
case NM_CLIENT_PERMISSION_RELOAD:
|
||||
return NM_AUTH_PERMISSION_RELOAD;
|
||||
default:
|
||||
return _("unknown");
|
||||
}
|
||||
|
|
@ -433,7 +426,6 @@ permission_to_string (NMClientPermission perm)
|
|||
static const char *
|
||||
permission_result_to_string (NMClientPermissionResult perm_result)
|
||||
{
|
||||
|
||||
switch (perm_result) {
|
||||
case NM_CLIENT_PERMISSION_RESULT_YES:
|
||||
return _("yes");
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@ Before=network.target @DISTRO_NETWORK_SERVICE@
|
|||
[Service]
|
||||
Type=dbus
|
||||
BusName=org.freedesktop.NetworkManager
|
||||
#ExecReload=/usr/bin/dbus-send --print-reply --system --type=method_call --dest=org.freedesktop.NetworkManager /org/freedesktop/NetworkManager org.freedesktop.NetworkManager.Reload uint32:0
|
||||
ExecReload=/bin/kill -HUP $MAINPID
|
||||
ExecStart=@sbindir@/NetworkManager --no-daemon
|
||||
Restart=on-failure
|
||||
|
|
|
|||
|
|
@ -3,6 +3,34 @@
|
|||
<interface name="org.freedesktop.NetworkManager">
|
||||
<annotation name="org.gtk.GDBus.C.Name" value="Manager"/>
|
||||
|
||||
<!--
|
||||
Reload:
|
||||
@flags: optional flags to specify which parts shall be reloaded.
|
||||
|
||||
Reload NetworkManager's configuration and perform certain updates, like flushing a cache or
|
||||
rewriting external state to disk. This is similar to sending SIGHUP to NetworkManager but it
|
||||
allows for more fine-grained control over what to reload (see @flags). It also allows
|
||||
non-root access via PolicyKit and contrary to signals it is synchronous.
|
||||
|
||||
No flags (0x00) means to reload everything that is supported which is identical to
|
||||
sending a SIGHUP.
|
||||
(0x01) means to reload the NetworkManager.conf configuration from disk. Note that this
|
||||
does not include connections, which can be reloaded via Setting's ReloadConnections.
|
||||
(0x02) means to update DNS configuration, which usually involves writing /etc/resolv.conf
|
||||
anew.
|
||||
(0x04) means to restart the DNS plugin. This is for example useful when using
|
||||
dnsmasq plugin, which uses additional configuration in /etc/NetworkManager/dnsmasq.d.
|
||||
If you edit those files, you can restart the DNS plugin. This action shortly interrupts
|
||||
rename resolution.
|
||||
Note that flags may affect each other. For example, restarting the DNS plugin (0x04)
|
||||
implicitly updates DNS too (0x02). Or when reloading the configuration (0x01), changes
|
||||
to DNS setting also cause a DNS update (0x02). However, (0x01) does not involve restarting
|
||||
the DNS plugin (0x02), unless an entirely different plugin is selected.
|
||||
-->
|
||||
<method name="Reload">
|
||||
<arg name="flags" type="u" direction="in"/>
|
||||
</method>
|
||||
|
||||
<!--
|
||||
GetDevices:
|
||||
@devices: List of object paths of network devices known to the system. This list does not include device placeholders (see GetAllDevices()).
|
||||
|
|
|
|||
|
|
@ -185,6 +185,7 @@ GQuark nm_device_error_quark (void);
|
|||
* enabled/disabled.
|
||||
* @NM_MANAGER_ERROR_UNKNOWN_LOG_LEVEL: Unknown log level in SetLogging
|
||||
* @NM_MANAGER_ERROR_UNKNOWN_LOG_DOMAIN: Unknown log domain in SetLogging
|
||||
* @NM_MANAGER_ERROR_INVALID_ARGUMENTS: Invalid arguments for D-Bus request
|
||||
*
|
||||
* Errors related to the main "network management" interface of NetworkManager.
|
||||
* These may be returned from #NMClient methods that invoke D-Bus operations on
|
||||
|
|
@ -204,6 +205,7 @@ typedef enum {
|
|||
NM_MANAGER_ERROR_ALREADY_ENABLED_OR_DISABLED, /*< nick=AlreadyEnabledOrDisabled >*/
|
||||
NM_MANAGER_ERROR_UNKNOWN_LOG_LEVEL, /*< nick=UnknownLogLevel >*/
|
||||
NM_MANAGER_ERROR_UNKNOWN_LOG_DOMAIN, /*< nick=UnknownLogDomain >*/
|
||||
NM_MANAGER_ERROR_INVALID_ARGUMENTS, /*< nick=InvalidArguments >*/
|
||||
} NMManagerError;
|
||||
|
||||
GQuark nm_manager_error_quark (void);
|
||||
|
|
|
|||
|
|
@ -27,6 +27,7 @@
|
|||
#include <string.h>
|
||||
|
||||
#include "nm-utils.h"
|
||||
#include "nm-common-macros.h"
|
||||
|
||||
#include "nm-device-ethernet.h"
|
||||
#include "nm-device-wifi.h"
|
||||
|
|
@ -208,18 +209,6 @@ register_properties (NMClient *client)
|
|||
property_info);
|
||||
}
|
||||
|
||||
#define NM_AUTH_PERMISSION_ENABLE_DISABLE_NETWORK "org.freedesktop.NetworkManager.enable-disable-network"
|
||||
#define NM_AUTH_PERMISSION_ENABLE_DISABLE_WIFI "org.freedesktop.NetworkManager.enable-disable-wifi"
|
||||
#define NM_AUTH_PERMISSION_ENABLE_DISABLE_WWAN "org.freedesktop.NetworkManager.enable-disable-wwan"
|
||||
#define NM_AUTH_PERMISSION_ENABLE_DISABLE_WIMAX "org.freedesktop.NetworkManager.enable-disable-wimax"
|
||||
#define NM_AUTH_PERMISSION_SLEEP_WAKE "org.freedesktop.NetworkManager.sleep-wake"
|
||||
#define NM_AUTH_PERMISSION_NETWORK_CONTROL "org.freedesktop.NetworkManager.network-control"
|
||||
#define NM_AUTH_PERMISSION_WIFI_SHARE_PROTECTED "org.freedesktop.NetworkManager.wifi.share.protected"
|
||||
#define NM_AUTH_PERMISSION_WIFI_SHARE_OPEN "org.freedesktop.NetworkManager.wifi.share.open"
|
||||
#define NM_AUTH_PERMISSION_SETTINGS_MODIFY_SYSTEM "org.freedesktop.NetworkManager.settings.modify.system"
|
||||
#define NM_AUTH_PERMISSION_SETTINGS_MODIFY_OWN "org.freedesktop.NetworkManager.settings.modify.own"
|
||||
#define NM_AUTH_PERMISSION_SETTINGS_MODIFY_HOSTNAME "org.freedesktop.NetworkManager.settings.modify.hostname"
|
||||
|
||||
static NMClientPermission
|
||||
nm_permission_to_client (const char *nm)
|
||||
{
|
||||
|
|
@ -245,6 +234,10 @@ nm_permission_to_client (const char *nm)
|
|||
return NM_CLIENT_PERMISSION_SETTINGS_MODIFY_OWN;
|
||||
else if (!strcmp (nm, NM_AUTH_PERMISSION_SETTINGS_MODIFY_HOSTNAME))
|
||||
return NM_CLIENT_PERMISSION_SETTINGS_MODIFY_HOSTNAME;
|
||||
else if (!strcmp (nm, NM_AUTH_PERMISSION_SETTINGS_MODIFY_GLOBAL_DNS))
|
||||
return NM_CLIENT_PERMISSION_SETTINGS_MODIFY_GLOBAL_DNS;
|
||||
else if (!strcmp (nm, NM_AUTH_PERMISSION_RELOAD))
|
||||
return NM_CLIENT_PERMISSION_RELOAD;
|
||||
|
||||
return NM_CLIENT_PERMISSION_NONE;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -84,6 +84,10 @@ G_BEGIN_DECLS
|
|||
* owned by the current user can be modified
|
||||
* @NM_CLIENT_PERMISSION_SETTINGS_MODIFY_HOSTNAME: controls whether the
|
||||
* persistent hostname can be changed
|
||||
* @NM_CLIENT_PERMISSION_SETTINGS_MODIFY_GLOBAL_DNS: modify persistent global
|
||||
* DNS configuration
|
||||
* @NM_CLIENT_PERMISSION_RELOAD: controls access to Reload.
|
||||
* persistent hostname can be changed
|
||||
* @NM_CLIENT_PERMISSION_LAST: a reserved boundary value
|
||||
*
|
||||
* #NMClientPermission values indicate various permissions that NetworkManager
|
||||
|
|
@ -102,8 +106,10 @@ typedef enum {
|
|||
NM_CLIENT_PERMISSION_SETTINGS_MODIFY_SYSTEM = 9,
|
||||
NM_CLIENT_PERMISSION_SETTINGS_MODIFY_OWN = 10,
|
||||
NM_CLIENT_PERMISSION_SETTINGS_MODIFY_HOSTNAME = 11,
|
||||
NM_CLIENT_PERMISSION_SETTINGS_MODIFY_GLOBAL_DNS = 12,
|
||||
NM_CLIENT_PERMISSION_RELOAD = 13,
|
||||
|
||||
NM_CLIENT_PERMISSION_LAST = NM_CLIENT_PERMISSION_SETTINGS_MODIFY_HOSTNAME
|
||||
NM_CLIENT_PERMISSION_LAST = 13,
|
||||
} NMClientPermission;
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -92,6 +92,9 @@ G_BEGIN_DECLS
|
|||
* owned by the current user can be modified
|
||||
* @NM_CLIENT_PERMISSION_SETTINGS_MODIFY_HOSTNAME: controls whether the
|
||||
* persistent hostname can be changed
|
||||
* @NM_CLIENT_PERMISSION_SETTINGS_MODIFY_GLOBAL_DNS: modify persistent global
|
||||
* DNS configuration
|
||||
* @NM_CLIENT_PERMISSION_RELOAD: controls access to Reload.
|
||||
* @NM_CLIENT_PERMISSION_LAST: a reserved boundary value
|
||||
*
|
||||
* #NMClientPermission values indicate various permissions that NetworkManager
|
||||
|
|
@ -110,8 +113,10 @@ typedef enum {
|
|||
NM_CLIENT_PERMISSION_SETTINGS_MODIFY_SYSTEM = 9,
|
||||
NM_CLIENT_PERMISSION_SETTINGS_MODIFY_OWN = 10,
|
||||
NM_CLIENT_PERMISSION_SETTINGS_MODIFY_HOSTNAME = 11,
|
||||
NM_CLIENT_PERMISSION_SETTINGS_MODIFY_GLOBAL_DNS = 12,
|
||||
NM_CLIENT_PERMISSION_RELOAD = 13,
|
||||
|
||||
NM_CLIENT_PERMISSION_LAST = NM_CLIENT_PERMISSION_SETTINGS_MODIFY_HOSTNAME
|
||||
NM_CLIENT_PERMISSION_LAST = 13,
|
||||
} NMClientPermission;
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -26,6 +26,7 @@
|
|||
#include <string.h>
|
||||
|
||||
#include "nm-utils.h"
|
||||
#include "nm-common-macros.h"
|
||||
#include "nm-device-ethernet.h"
|
||||
#include "nm-device-wifi.h"
|
||||
#include "nm-device-private.h"
|
||||
|
|
@ -202,18 +203,6 @@ init_dbus (NMObject *object)
|
|||
G_CALLBACK (manager_recheck_permissions), object);
|
||||
}
|
||||
|
||||
#define NM_AUTH_PERMISSION_ENABLE_DISABLE_NETWORK "org.freedesktop.NetworkManager.enable-disable-network"
|
||||
#define NM_AUTH_PERMISSION_ENABLE_DISABLE_WIFI "org.freedesktop.NetworkManager.enable-disable-wifi"
|
||||
#define NM_AUTH_PERMISSION_ENABLE_DISABLE_WWAN "org.freedesktop.NetworkManager.enable-disable-wwan"
|
||||
#define NM_AUTH_PERMISSION_ENABLE_DISABLE_WIMAX "org.freedesktop.NetworkManager.enable-disable-wimax"
|
||||
#define NM_AUTH_PERMISSION_SLEEP_WAKE "org.freedesktop.NetworkManager.sleep-wake"
|
||||
#define NM_AUTH_PERMISSION_NETWORK_CONTROL "org.freedesktop.NetworkManager.network-control"
|
||||
#define NM_AUTH_PERMISSION_WIFI_SHARE_PROTECTED "org.freedesktop.NetworkManager.wifi.share.protected"
|
||||
#define NM_AUTH_PERMISSION_WIFI_SHARE_OPEN "org.freedesktop.NetworkManager.wifi.share.open"
|
||||
#define NM_AUTH_PERMISSION_SETTINGS_MODIFY_SYSTEM "org.freedesktop.NetworkManager.settings.modify.system"
|
||||
#define NM_AUTH_PERMISSION_SETTINGS_MODIFY_OWN "org.freedesktop.NetworkManager.settings.modify.own"
|
||||
#define NM_AUTH_PERMISSION_SETTINGS_MODIFY_HOSTNAME "org.freedesktop.NetworkManager.settings.modify.hostname"
|
||||
|
||||
static NMClientPermission
|
||||
nm_permission_to_client (const char *nm)
|
||||
{
|
||||
|
|
@ -239,6 +228,10 @@ nm_permission_to_client (const char *nm)
|
|||
return NM_CLIENT_PERMISSION_SETTINGS_MODIFY_OWN;
|
||||
else if (!strcmp (nm, NM_AUTH_PERMISSION_SETTINGS_MODIFY_HOSTNAME))
|
||||
return NM_CLIENT_PERMISSION_SETTINGS_MODIFY_HOSTNAME;
|
||||
else if (!strcmp (nm, NM_AUTH_PERMISSION_SETTINGS_MODIFY_GLOBAL_DNS))
|
||||
return NM_CLIENT_PERMISSION_SETTINGS_MODIFY_GLOBAL_DNS;
|
||||
else if (!strcmp (nm, NM_AUTH_PERMISSION_RELOAD))
|
||||
return NM_CLIENT_PERMISSION_RELOAD;
|
||||
|
||||
return NM_CLIENT_PERMISSION_NONE;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -78,6 +78,10 @@
|
|||
This file is not intended to be modified by the user, but it is read last and can shadow
|
||||
user configuration from <literal>NetworkManager.conf</literal>.
|
||||
</para>
|
||||
<para>
|
||||
Certain settings from the configuration can be reloaded at runtime either by sending SIGHUP signal or via
|
||||
D-Bus' Reload call.
|
||||
</para>
|
||||
|
||||
</refsect1>
|
||||
|
||||
|
|
|
|||
|
|
@ -428,24 +428,45 @@
|
|||
The signal causes a reload of NetworkManager's configuration.
|
||||
Note that not all configuration parameters can be changed at
|
||||
runtime and therefore some changes may be applied only after
|
||||
the next restart of the daemon. The signal also forces a
|
||||
rewrite of DNS configuration.
|
||||
the next restart of the daemon.
|
||||
A SIGHUP also involves further reloading actions, like doing
|
||||
a DNS update and restarting the DNS plugin. The latter can be
|
||||
useful for example when using the dnsmasq plugin and changing
|
||||
its configuration in /etc/NetworkManager/dnsmasq.d. However,
|
||||
it also means this will shortly interrupt name resolution.
|
||||
In the future, there may be further actions added.
|
||||
A SIGHUP means to update NetworkManager configuration and reload
|
||||
everything that is supported. Note that this does not reload
|
||||
connections from disk. For that there is a D-Bus API and
|
||||
nmcli's reload action
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><varname>SIGUSR1</varname></term>
|
||||
<listitem><para>
|
||||
The signal forces a rewrite of DNS configuration.
|
||||
The signal forces a rewrite of DNS configuration. Contrary to
|
||||
SIGHUP, this does not restart the DNS plugin and will not interrupt
|
||||
name resolution.
|
||||
In the future, further actions may be added. A SIGUSR1
|
||||
means to write out data like resolv.conf, or refresh a cache.
|
||||
It is a subset of what is done for SIGHUP without reloading
|
||||
configuration from disk.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><varname>SIGUSR2</varname></term>
|
||||
<listitem><para>
|
||||
The signal has no effect at the moment.
|
||||
The signal has no effect at the moment but is reserved for future
|
||||
use.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</para>
|
||||
<para>
|
||||
An alternative to a signal to reload configuration is the Reload D-Bus call.
|
||||
It allows for more fine-grained selection of what to reload, it only returns
|
||||
after the reload is complete, and it is guarded by PolicyKit.
|
||||
</para>
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
|
|
|
|||
|
|
@ -140,7 +140,8 @@ org.freedesktop.NetworkManager.wifi.share.protected yes
|
|||
org.freedesktop.NetworkManager.wifi.share.open yes
|
||||
org.freedesktop.NetworkManager.settings.modify.system yes
|
||||
org.freedesktop.NetworkManager.settings.modify.own yes
|
||||
org.freedesktop.NetworkManager.settings.modify.hostname auth</screen>
|
||||
org.freedesktop.NetworkManager.settings.modify.hostname auth
|
||||
org.freedesktop.NetworkManager.reload no</screen>
|
||||
<para>
|
||||
This command shows configured polkit permissions for various NetworkManager
|
||||
operations. These permissions or actions (using polkit language) are configured
|
||||
|
|
|
|||
|
|
@ -1,3 +1,4 @@
|
|||
data/NetworkManager.service.in
|
||||
examples/python/NetworkManager.py
|
||||
examples/python/systray/eggtrayicon.c
|
||||
policy/org.freedesktop.NetworkManager.policy.in
|
||||
|
|
|
|||
|
|
@ -18,6 +18,16 @@
|
|||
</defaults>
|
||||
</action>
|
||||
|
||||
<action id="org.freedesktop.NetworkManager.reload">
|
||||
<_description>Reload NetworkManager configuration</_description>
|
||||
<_message>System policy prevents reloading NetworkManager</_message>
|
||||
<defaults>
|
||||
<allow_any>auth_admin_keep</allow_any>
|
||||
<allow_inactive>auth_admin_keep</allow_inactive>
|
||||
<allow_active>auth_admin_keep</allow_active>
|
||||
</defaults>
|
||||
</action>
|
||||
|
||||
<action id="org.freedesktop.NetworkManager.sleep-wake">
|
||||
<_description>Put NetworkManager to sleep or wake it up (should only be used by system power management)</_description>
|
||||
<_message>System policy prevents putting NetworkManager to sleep or waking it up</_message>
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
EXTRA_DIST = \
|
||||
gsystem-local-alloc.h \
|
||||
nm-common-macros.h \
|
||||
nm-dbus-compat.h \
|
||||
nm-default.h \
|
||||
nm-glib.h \
|
||||
|
|
|
|||
43
shared/nm-common-macros.h
Normal file
43
shared/nm-common-macros.h
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
|
||||
/* NetworkManager -- Network link manager
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
||||
* Boston, MA 02110-1301 USA.
|
||||
*
|
||||
* (C) Copyright 2016 Red Hat, Inc.
|
||||
*/
|
||||
|
||||
#ifndef __NM_COMMON_MACROS_H__
|
||||
#define __NM_COMMON_MACROS_H__
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
#define NM_AUTH_PERMISSION_ENABLE_DISABLE_NETWORK "org.freedesktop.NetworkManager.enable-disable-network"
|
||||
#define NM_AUTH_PERMISSION_SLEEP_WAKE "org.freedesktop.NetworkManager.sleep-wake"
|
||||
#define NM_AUTH_PERMISSION_ENABLE_DISABLE_WIFI "org.freedesktop.NetworkManager.enable-disable-wifi"
|
||||
#define NM_AUTH_PERMISSION_ENABLE_DISABLE_WWAN "org.freedesktop.NetworkManager.enable-disable-wwan"
|
||||
#define NM_AUTH_PERMISSION_ENABLE_DISABLE_WIMAX "org.freedesktop.NetworkManager.enable-disable-wimax"
|
||||
#define NM_AUTH_PERMISSION_NETWORK_CONTROL "org.freedesktop.NetworkManager.network-control"
|
||||
#define NM_AUTH_PERMISSION_WIFI_SHARE_PROTECTED "org.freedesktop.NetworkManager.wifi.share.protected"
|
||||
#define NM_AUTH_PERMISSION_WIFI_SHARE_OPEN "org.freedesktop.NetworkManager.wifi.share.open"
|
||||
#define NM_AUTH_PERMISSION_SETTINGS_MODIFY_SYSTEM "org.freedesktop.NetworkManager.settings.modify.system"
|
||||
#define NM_AUTH_PERMISSION_SETTINGS_MODIFY_OWN "org.freedesktop.NetworkManager.settings.modify.own"
|
||||
#define NM_AUTH_PERMISSION_SETTINGS_MODIFY_HOSTNAME "org.freedesktop.NetworkManager.settings.modify.hostname"
|
||||
#define NM_AUTH_PERMISSION_SETTINGS_MODIFY_GLOBAL_DNS "org.freedesktop.NetworkManager.settings.modify.global-dns"
|
||||
#define NM_AUTH_PERMISSION_RELOAD "org.freedesktop.NetworkManager.reload"
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
#endif /* __NM_COMMON_MACROS_H__ */
|
||||
|
|
@ -23,6 +23,7 @@
|
|||
|
||||
#include "NetworkManagerUtils.h"
|
||||
|
||||
#include "nm-common-macros.h"
|
||||
#include "nm-utils.h"
|
||||
#include "nm-setting-connection.h"
|
||||
#include "nm-setting-ip4-config.h"
|
||||
|
|
|
|||
|
|
@ -36,6 +36,7 @@
|
|||
#include <netlink/route/addr.h>
|
||||
#include <linux/if_addr.h>
|
||||
|
||||
#include "nm-common-macros.h"
|
||||
#include "nm-device-private.h"
|
||||
#include "NetworkManagerUtils.h"
|
||||
#include "nm-manager.h"
|
||||
|
|
|
|||
|
|
@ -28,6 +28,7 @@
|
|||
#include <unistd.h>
|
||||
#include <errno.h>
|
||||
|
||||
#include "nm-common-macros.h"
|
||||
#include "nm-device.h"
|
||||
#include "nm-device-private.h"
|
||||
#include "nm-utils.h"
|
||||
|
|
|
|||
|
|
@ -431,11 +431,16 @@ start_dnsmasq (NMDnsDnsmasq *self)
|
|||
NMBusManager *dbus_mgr;
|
||||
GDBusConnection *connection;
|
||||
|
||||
|
||||
if ( priv->running
|
||||
|| priv->dnsmasq
|
||||
|| priv->dnsmasq_cancellable)
|
||||
if (priv->running) {
|
||||
/* the dnsmasq process is running. Nothing to do. */
|
||||
return;
|
||||
}
|
||||
|
||||
if (nm_dns_plugin_child_pid ((NMDnsPlugin *) self) > 0) {
|
||||
/* if we already have a child process spawned, don't do
|
||||
* it again. */
|
||||
return;
|
||||
}
|
||||
|
||||
dm_binary = nm_utils_find_helper ("dnsmasq", DNSMASQ_PATH, NULL);
|
||||
if (!dm_binary) {
|
||||
|
|
@ -467,6 +472,13 @@ start_dnsmasq (NMDnsDnsmasq *self)
|
|||
if (!pid)
|
||||
return;
|
||||
|
||||
if ( priv->dnsmasq
|
||||
|| priv->dnsmasq_cancellable) {
|
||||
/* we already have a proxy or are about to create it.
|
||||
* We are done. */
|
||||
return;
|
||||
}
|
||||
|
||||
dbus_mgr = nm_bus_manager_get ();
|
||||
g_return_if_fail (dbus_mgr);
|
||||
|
||||
|
|
@ -522,6 +534,7 @@ static void
|
|||
child_quit (NMDnsPlugin *plugin, gint status)
|
||||
{
|
||||
NMDnsDnsmasq *self = NM_DNS_DNSMASQ (plugin);
|
||||
NMDnsDnsmasqPrivate *priv = NM_DNS_DNSMASQ_GET_PRIVATE (self);
|
||||
gboolean failed = TRUE;
|
||||
int err;
|
||||
|
||||
|
|
@ -530,8 +543,10 @@ child_quit (NMDnsPlugin *plugin, gint status)
|
|||
if (err) {
|
||||
_LOGW ("dnsmasq exited with error: %s",
|
||||
nm_utils_dnsmasq_status_to_string (err, NULL, 0));
|
||||
} else
|
||||
} else {
|
||||
_LOGD ("dnsmasq exited normally");
|
||||
failed = FALSE;
|
||||
}
|
||||
} else if (WIFSTOPPED (status))
|
||||
_LOGW ("dnsmasq stopped unexpectedly with signal %d", WSTOPSIG (status));
|
||||
else if (WIFSIGNALED (status))
|
||||
|
|
@ -539,6 +554,8 @@ child_quit (NMDnsPlugin *plugin, gint status)
|
|||
else
|
||||
_LOGW ("dnsmasq died from an unknown cause");
|
||||
|
||||
priv->running = FALSE;
|
||||
|
||||
if (failed)
|
||||
g_signal_emit_by_name (self, NM_DNS_PLUGIN_FAILED);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -61,10 +61,6 @@
|
|||
#define DOMAIN_IS_VALID(domain) (*(domain))
|
||||
#endif
|
||||
|
||||
G_DEFINE_TYPE (NMDnsManager, nm_dns_manager, G_TYPE_OBJECT)
|
||||
|
||||
#define NM_DNS_MANAGER_GET_PRIVATE(o) ((o)->priv)
|
||||
|
||||
#define HASH_LEN 20
|
||||
|
||||
#ifndef RESOLVCONF_PATH
|
||||
|
|
@ -79,7 +75,19 @@ G_DEFINE_TYPE (NMDnsManager, nm_dns_manager, G_TYPE_OBJECT)
|
|||
#define PLUGIN_RATELIMIT_BURST 5
|
||||
#define PLUGIN_RATELIMIT_DELAY 300
|
||||
|
||||
NM_DEFINE_SINGLETON_INSTANCE (NMDnsManager);
|
||||
enum {
|
||||
CONFIG_CHANGED,
|
||||
|
||||
LAST_SIGNAL
|
||||
};
|
||||
|
||||
static guint signals[LAST_SIGNAL] = { 0 };
|
||||
|
||||
typedef enum {
|
||||
SR_SUCCESS,
|
||||
SR_NOTFOUND,
|
||||
SR_ERROR
|
||||
} SpawnResult;
|
||||
|
||||
/*********************************************************************************************/
|
||||
|
||||
|
|
@ -105,7 +113,7 @@ NM_DEFINE_SINGLETON_INSTANCE (NMDnsManager);
|
|||
|
||||
/*********************************************************************************************/
|
||||
|
||||
typedef struct _NMDnsManagerPrivate {
|
||||
typedef struct {
|
||||
GPtrArray *configs;
|
||||
NMDnsIPConfigData *best_conf4, *best_conf6;
|
||||
gboolean need_sort;
|
||||
|
|
@ -130,20 +138,33 @@ typedef struct _NMDnsManagerPrivate {
|
|||
} plugin_ratelimit;
|
||||
} NMDnsManagerPrivate;
|
||||
|
||||
enum {
|
||||
CONFIG_CHANGED,
|
||||
|
||||
LAST_SIGNAL
|
||||
struct _NMDnsManager {
|
||||
GObject parent;
|
||||
NMDnsManagerPrivate _priv;
|
||||
};
|
||||
|
||||
typedef enum {
|
||||
SR_SUCCESS,
|
||||
SR_NOTFOUND,
|
||||
SR_ERROR
|
||||
} SpawnResult;
|
||||
struct _NMDnsManagerClass {
|
||||
GObjectClass parent;
|
||||
};
|
||||
|
||||
static guint signals[LAST_SIGNAL] = { 0 };
|
||||
G_DEFINE_TYPE (NMDnsManager, nm_dns_manager, G_TYPE_OBJECT)
|
||||
|
||||
NM_DEFINE_SINGLETON_INSTANCE (NMDnsManager);
|
||||
|
||||
#define NM_DNS_MANAGER_GET_PRIVATE(self) \
|
||||
({ \
|
||||
/* preserve the const-ness of self. Unfortunately, that
|
||||
* way, @self cannot be a void pointer */ \
|
||||
typeof (self) _self = (self); \
|
||||
\
|
||||
/* Get compiler error if variable is of wrong type */ \
|
||||
_nm_unused const NMDnsManager *_self2 = (_self); \
|
||||
\
|
||||
nm_assert (NM_IS_DNS_MANAGER (_self)); \
|
||||
&_self->_priv; \
|
||||
})
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
typedef struct {
|
||||
GPtrArray *nameservers;
|
||||
|
|
@ -1472,9 +1493,12 @@ _clear_plugin (NMDnsManager *self)
|
|||
if (priv->plugin) {
|
||||
g_signal_handlers_disconnect_by_func (priv->plugin, plugin_failed, self);
|
||||
g_signal_handlers_disconnect_by_func (priv->plugin, plugin_child_quit, self);
|
||||
nm_dns_plugin_stop (priv->plugin);
|
||||
g_clear_object (&priv->plugin);
|
||||
return TRUE;
|
||||
}
|
||||
priv->plugin_ratelimit.ts = 0;
|
||||
nm_clear_g_source (&priv->plugin_ratelimit.timer);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
|
@ -1496,7 +1520,7 @@ _get_resconf_immutable (void)
|
|||
NM_DEFINE_SINGLETON_GETTER (NMDnsManager, nm_dns_manager_get, NM_TYPE_DNS_MANAGER);
|
||||
|
||||
static void
|
||||
init_resolv_conf_mode (NMDnsManager *self)
|
||||
init_resolv_conf_mode (NMDnsManager *self, gboolean force_reload_plugin)
|
||||
{
|
||||
NMDnsManagerPrivate *priv = NM_DNS_MANAGER_GET_PRIVATE (self);
|
||||
NMDnsManagerResolvConfManager rc_manager;
|
||||
|
|
@ -1541,13 +1565,13 @@ again:
|
|||
}
|
||||
|
||||
if (nm_streq0 (mode, "dnsmasq")) {
|
||||
if (!NM_IS_DNS_DNSMASQ (priv->plugin)) {
|
||||
if (force_reload_plugin || !NM_IS_DNS_DNSMASQ (priv->plugin)) {
|
||||
_clear_plugin (self);
|
||||
priv->plugin = nm_dns_dnsmasq_new ();
|
||||
plugin_changed = TRUE;
|
||||
}
|
||||
} else if (nm_streq0 (mode, "unbound")) {
|
||||
if (!NM_IS_DNS_UNBOUND (priv->plugin)) {
|
||||
if (force_reload_plugin || !NM_IS_DNS_UNBOUND (priv->plugin)) {
|
||||
_clear_plugin (self);
|
||||
priv->plugin = nm_dns_unbound_new ();
|
||||
plugin_changed = TRUE;
|
||||
|
|
@ -1586,16 +1610,21 @@ config_changed_cb (NMConfig *config,
|
|||
|
||||
if (NM_FLAGS_ANY (changes, NM_CONFIG_CHANGE_DNS_MODE |
|
||||
NM_CONFIG_CHANGE_RC_MANAGER |
|
||||
NM_CONFIG_CHANGE_SIGHUP)) {
|
||||
NM_CONFIG_CHANGE_CAUSE_SIGHUP |
|
||||
NM_CONFIG_CHANGE_CAUSE_DNS_FULL)) {
|
||||
/* reload the resolv-conf mode also on SIGHUP (when DNS_MODE didn't change).
|
||||
* The reason is, that the configuration also depends on whether resolv.conf
|
||||
* is immutable, thus, without the configuration changing, we always want to
|
||||
* re-configure the mode. */
|
||||
init_resolv_conf_mode (self);
|
||||
init_resolv_conf_mode (self,
|
||||
NM_FLAGS_ANY (changes, NM_CONFIG_CHANGE_CAUSE_SIGHUP
|
||||
| NM_CONFIG_CHANGE_CAUSE_DNS_FULL));
|
||||
}
|
||||
|
||||
if (NM_FLAGS_ANY (changes, NM_CONFIG_CHANGE_SIGHUP |
|
||||
NM_CONFIG_CHANGE_SIGUSR1 |
|
||||
if (NM_FLAGS_ANY (changes, NM_CONFIG_CHANGE_CAUSE_SIGHUP |
|
||||
NM_CONFIG_CHANGE_CAUSE_SIGUSR1 |
|
||||
NM_CONFIG_CHANGE_CAUSE_DNS_RC |
|
||||
NM_CONFIG_CHANGE_CAUSE_DNS_FULL |
|
||||
NM_CONFIG_CHANGE_DNS_MODE |
|
||||
NM_CONFIG_CHANGE_RC_MANAGER |
|
||||
NM_CONFIG_CHANGE_GLOBAL_DNS_CONFIG)) {
|
||||
|
|
@ -1609,9 +1638,7 @@ config_changed_cb (NMConfig *config,
|
|||
static void
|
||||
nm_dns_manager_init (NMDnsManager *self)
|
||||
{
|
||||
NMDnsManagerPrivate *priv = G_TYPE_INSTANCE_GET_PRIVATE (self, NM_TYPE_DNS_MANAGER, NMDnsManagerPrivate);
|
||||
|
||||
self->priv = priv;
|
||||
NMDnsManagerPrivate *priv = NM_DNS_MANAGER_GET_PRIVATE (self);
|
||||
|
||||
_LOGT ("creating...");
|
||||
|
||||
|
|
@ -1625,7 +1652,7 @@ nm_dns_manager_init (NMDnsManager *self)
|
|||
NM_CONFIG_SIGNAL_CONFIG_CHANGED,
|
||||
G_CALLBACK (config_changed_cb),
|
||||
self);
|
||||
init_resolv_conf_mode (self);
|
||||
init_resolv_conf_mode (self, TRUE);
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
@ -1666,6 +1693,8 @@ dispose (GObject *object)
|
|||
priv->configs = NULL;
|
||||
}
|
||||
|
||||
nm_clear_g_source (&priv->plugin_ratelimit.timer);
|
||||
|
||||
G_OBJECT_CLASS (nm_dns_manager_parent_class)->dispose (object);
|
||||
}
|
||||
|
||||
|
|
@ -1685,8 +1714,6 @@ nm_dns_manager_class_init (NMDnsManagerClass *klass)
|
|||
{
|
||||
GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
||||
|
||||
g_type_class_add_private (object_class, sizeof (NMDnsManagerPrivate));
|
||||
|
||||
/* virtual methods */
|
||||
object_class->dispose = dispose;
|
||||
object_class->finalize = finalize;
|
||||
|
|
@ -1696,8 +1723,7 @@ nm_dns_manager_class_init (NMDnsManagerClass *klass)
|
|||
g_signal_new (NM_DNS_MANAGER_CONFIG_CHANGED,
|
||||
G_OBJECT_CLASS_TYPE (object_class),
|
||||
G_SIGNAL_RUN_FIRST,
|
||||
G_STRUCT_OFFSET (NMDnsManagerClass, config_changed),
|
||||
NULL, NULL,
|
||||
0, NULL, NULL,
|
||||
g_cclosure_marshal_VOID__VOID,
|
||||
G_TYPE_NONE, 0);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -56,20 +56,8 @@ typedef struct {
|
|||
|
||||
#define NM_DNS_MANAGER_CONFIG_CHANGED "config-changed"
|
||||
|
||||
struct _NMDnsManagerPrivate;
|
||||
|
||||
typedef struct {
|
||||
GObject parent;
|
||||
/* private */
|
||||
struct _NMDnsManagerPrivate *priv;
|
||||
} NMDnsManager;
|
||||
|
||||
typedef struct {
|
||||
GObjectClass parent;
|
||||
|
||||
/* Signals */
|
||||
void (*config_changed) (NMDnsManager *mgr);
|
||||
} NMDnsManagerClass;
|
||||
typedef struct _NMDnsManager NMDnsManager;
|
||||
typedef struct _NMDnsManagerClass NMDnsManagerClass;
|
||||
|
||||
GType nm_dns_manager_get_type (void);
|
||||
|
||||
|
|
|
|||
|
|
@ -177,6 +177,17 @@ watch_cb (GPid pid, gint status, gpointer user_data)
|
|||
g_signal_emit (self, signals[CHILD_QUIT], 0, status);
|
||||
}
|
||||
|
||||
GPid
|
||||
nm_dns_plugin_child_pid (NMDnsPlugin *self)
|
||||
{
|
||||
NMDnsPluginPrivate *priv;
|
||||
|
||||
g_return_val_if_fail (NM_IS_DNS_PLUGIN (self), 0);
|
||||
|
||||
priv = NM_DNS_PLUGIN_GET_PRIVATE (self);
|
||||
return priv->pid;
|
||||
}
|
||||
|
||||
GPid
|
||||
nm_dns_plugin_child_spawn (NMDnsPlugin *self,
|
||||
const char **argv,
|
||||
|
|
@ -243,6 +254,12 @@ nm_dns_plugin_child_kill (NMDnsPlugin *self)
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
void
|
||||
nm_dns_plugin_stop (NMDnsPlugin *self)
|
||||
{
|
||||
nm_dns_plugin_child_kill (self);
|
||||
}
|
||||
|
||||
/********************************************/
|
||||
|
||||
static void
|
||||
|
|
@ -255,7 +272,7 @@ dispose (GObject *object)
|
|||
{
|
||||
NMDnsPlugin *self = NM_DNS_PLUGIN (object);
|
||||
|
||||
nm_dns_plugin_child_kill (self);
|
||||
nm_dns_plugin_stop (self);
|
||||
|
||||
G_OBJECT_CLASS (nm_dns_plugin_parent_class)->dispose (object);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -90,6 +90,8 @@ gboolean nm_dns_plugin_update (NMDnsPlugin *self,
|
|||
const NMGlobalDnsConfig *global_config,
|
||||
const char *hostname);
|
||||
|
||||
void nm_dns_plugin_stop (NMDnsPlugin *self);
|
||||
|
||||
/* For subclasses/plugins */
|
||||
|
||||
/* Spawn a child process and watch for it to quit. 'argv' is the NULL-terminated
|
||||
|
|
@ -103,6 +105,8 @@ GPid nm_dns_plugin_child_spawn (NMDnsPlugin *self,
|
|||
const char *pidfile,
|
||||
const char *kill_match);
|
||||
|
||||
GPid nm_dns_plugin_child_pid (NMDnsPlugin *self);
|
||||
|
||||
gboolean nm_dns_plugin_child_kill (NMDnsPlugin *self);
|
||||
|
||||
#endif /* __NETWORKMANAGER_DNS_PLUGIN_H__ */
|
||||
|
|
|
|||
19
src/main.c
19
src/main.c
|
|
@ -116,14 +116,31 @@ _init_nm_debug (const char *debug)
|
|||
void
|
||||
nm_main_config_reload (int signal)
|
||||
{
|
||||
NMConfigChangeFlags reload_flags;
|
||||
|
||||
switch (signal) {
|
||||
case SIGHUP:
|
||||
reload_flags = NM_CONFIG_CHANGE_CAUSE_SIGHUP;
|
||||
break;
|
||||
case SIGUSR1:
|
||||
reload_flags = NM_CONFIG_CHANGE_CAUSE_SIGUSR1;
|
||||
break;
|
||||
case SIGUSR2:
|
||||
reload_flags = NM_CONFIG_CHANGE_CAUSE_SIGUSR2;
|
||||
break;
|
||||
default:
|
||||
g_return_if_reached ();
|
||||
}
|
||||
|
||||
nm_log_info (LOGD_CORE, "reload configuration (signal %s)...", strsignal (signal));
|
||||
|
||||
/* The signal handler thread is only installed after
|
||||
* creating NMConfig instance, and on shut down we
|
||||
* no longer run the mainloop (to reach this point).
|
||||
*
|
||||
* Hence, a NMConfig singleton instance must always be
|
||||
* available. */
|
||||
nm_config_reload (nm_config_get (), signal);
|
||||
nm_config_reload (nm_config_get (), reload_flags);
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
|||
|
|
@ -21,6 +21,8 @@
|
|||
#include "nm-default.h"
|
||||
|
||||
#include "nm-active-connection.h"
|
||||
|
||||
#include "nm-common-macros.h"
|
||||
#include "nm-dbus-interface.h"
|
||||
#include "nm-device.h"
|
||||
#include "nm-settings-connection.h"
|
||||
|
|
|
|||
|
|
@ -53,6 +53,7 @@ typedef struct {
|
|||
#define NM_AUDIT_OP_CONN_DEACTIVATE "connection-deactivate"
|
||||
#define NM_AUDIT_OP_CONN_CLEAR_SECRETS "connection-clear-secrets"
|
||||
|
||||
#define NM_AUDIT_OP_RELOAD "reload"
|
||||
#define NM_AUDIT_OP_SLEEP_CONTROL "sleep-control"
|
||||
#define NM_AUDIT_OP_NET_CONTROL "networking-control"
|
||||
#define NM_AUDIT_OP_RADIO_CONTROL "radio-control"
|
||||
|
|
|
|||
|
|
@ -20,10 +20,11 @@
|
|||
|
||||
#include "nm-default.h"
|
||||
|
||||
#include "nm-auth-utils.h"
|
||||
|
||||
#include <string.h>
|
||||
|
||||
#include "nm-setting-connection.h"
|
||||
#include "nm-auth-utils.h"
|
||||
#include "nm-auth-subject.h"
|
||||
#include "nm-auth-manager.h"
|
||||
#include "nm-session-monitor.h"
|
||||
|
|
|
|||
|
|
@ -21,22 +21,7 @@
|
|||
#ifndef __NETWORKMANAGER_MANAGER_AUTH_H__
|
||||
#define __NETWORKMANAGER_MANAGER_AUTH_H__
|
||||
|
||||
#include <nm-connection.h>
|
||||
#include "nm-default.h"
|
||||
|
||||
#define NM_AUTH_PERMISSION_ENABLE_DISABLE_NETWORK "org.freedesktop.NetworkManager.enable-disable-network"
|
||||
#define NM_AUTH_PERMISSION_SLEEP_WAKE "org.freedesktop.NetworkManager.sleep-wake"
|
||||
#define NM_AUTH_PERMISSION_ENABLE_DISABLE_WIFI "org.freedesktop.NetworkManager.enable-disable-wifi"
|
||||
#define NM_AUTH_PERMISSION_ENABLE_DISABLE_WWAN "org.freedesktop.NetworkManager.enable-disable-wwan"
|
||||
#define NM_AUTH_PERMISSION_ENABLE_DISABLE_WIMAX "org.freedesktop.NetworkManager.enable-disable-wimax"
|
||||
#define NM_AUTH_PERMISSION_NETWORK_CONTROL "org.freedesktop.NetworkManager.network-control"
|
||||
#define NM_AUTH_PERMISSION_WIFI_SHARE_PROTECTED "org.freedesktop.NetworkManager.wifi.share.protected"
|
||||
#define NM_AUTH_PERMISSION_WIFI_SHARE_OPEN "org.freedesktop.NetworkManager.wifi.share.open"
|
||||
#define NM_AUTH_PERMISSION_SETTINGS_MODIFY_SYSTEM "org.freedesktop.NetworkManager.settings.modify.system"
|
||||
#define NM_AUTH_PERMISSION_SETTINGS_MODIFY_OWN "org.freedesktop.NetworkManager.settings.modify.own"
|
||||
#define NM_AUTH_PERMISSION_SETTINGS_MODIFY_HOSTNAME "org.freedesktop.NetworkManager.settings.modify.hostname"
|
||||
#define NM_AUTH_PERMISSION_SETTINGS_MODIFY_GLOBAL_DNS "org.freedesktop.NetworkManager.settings.modify.global-dns"
|
||||
|
||||
#include "nm-connection.h"
|
||||
|
||||
typedef struct NMAuthChain NMAuthChain;
|
||||
|
||||
|
|
|
|||
|
|
@ -1201,6 +1201,8 @@ nm_config_data_diff (NMConfigData *old_data, NMConfigData *new_data)
|
|||
if (!global_dns_equal (priv_old->global_dns, priv_new->global_dns))
|
||||
changes |= NM_CONFIG_CHANGE_GLOBAL_DNS_CONFIG;
|
||||
|
||||
nm_assert (!NM_FLAGS_ANY (changes, NM_CONFIG_CHANGE_CAUSES));
|
||||
|
||||
return changes;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -21,11 +21,6 @@
|
|||
#ifndef NM_CONFIG_DATA_H
|
||||
#define NM_CONFIG_DATA_H
|
||||
|
||||
|
||||
#include "nm-default.h"
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
#define NM_TYPE_CONFIG_DATA (nm_config_data_get_type ())
|
||||
#define NM_CONFIG_DATA(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_CONFIG_DATA, NMConfigData))
|
||||
#define NM_CONFIG_DATA_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_CONFIG_DATA, NMConfigDataClass))
|
||||
|
|
@ -44,7 +39,26 @@ G_BEGIN_DECLS
|
|||
#define NM_CONFIG_DATA_NO_AUTO_DEFAULT "no-auto-default"
|
||||
#define NM_CONFIG_DATA_DNS_MODE "dns"
|
||||
|
||||
typedef enum { /*<flags >*/
|
||||
/* The flags for Reload. Currently these are internal defines,
|
||||
* only their numeric value matters and must be stable as
|
||||
* they are public API! Also, the enum must fit in uint32. */
|
||||
enum { /*< skip >*/
|
||||
NM_MANAGER_RELOAD_FLAGS_NONE = 0,
|
||||
|
||||
/* reload the configuration from disk */
|
||||
NM_MANAGER_RELOAD_FLAGS_CONF = (1LL << 0),
|
||||
|
||||
/* write DNS configuration to resolv.conf */
|
||||
NM_MANAGER_RELOAD_FLAGS_DNS_RC = (1LL << 1),
|
||||
|
||||
/* restart the DNS plugin (includes DNS_RC) */
|
||||
NM_MANAGER_RELOAD_FLAGS_DNS_FULL = (1LL << 2),
|
||||
|
||||
_NM_MANAGER_RELOAD_FLAGS_ALL,
|
||||
NM_MANAGER_RELOAD_FLAGS_ALL = ((_NM_MANAGER_RELOAD_FLAGS_ALL - 1) << 1) - 1,
|
||||
};
|
||||
|
||||
typedef enum { /*< flags >*/
|
||||
NM_CONFIG_GET_VALUE_NONE = 0,
|
||||
|
||||
/* use g_key_file_get_value() instead of g_key_file_get_string(). */
|
||||
|
|
@ -64,22 +78,54 @@ typedef enum { /*<flags >*/
|
|||
typedef enum { /*< flags >*/
|
||||
NM_CONFIG_CHANGE_NONE = 0,
|
||||
|
||||
NM_CONFIG_CHANGE_SIGHUP = (1L << 0),
|
||||
NM_CONFIG_CHANGE_SIGUSR1 = (1L << 1),
|
||||
NM_CONFIG_CHANGE_SIGUSR2 = (1L << 2),
|
||||
/**************************************************************************
|
||||
* The external cause which triggered the reload/configuration-change
|
||||
*************************************************************************/
|
||||
|
||||
NM_CONFIG_CHANGE_CONFIG_FILES = (1L << 3),
|
||||
NM_CONFIG_CHANGE_VALUES = (1L << 4),
|
||||
NM_CONFIG_CHANGE_VALUES_USER = (1L << 5),
|
||||
NM_CONFIG_CHANGE_VALUES_INTERN = (1L << 6),
|
||||
NM_CONFIG_CHANGE_CONNECTIVITY = (1L << 7),
|
||||
NM_CONFIG_CHANGE_NO_AUTO_DEFAULT = (1L << 8),
|
||||
NM_CONFIG_CHANGE_DNS_MODE = (1L << 9),
|
||||
NM_CONFIG_CHANGE_RC_MANAGER = (1L << 10),
|
||||
NM_CONFIG_CHANGE_GLOBAL_DNS_CONFIG = (1L << 11),
|
||||
NM_CONFIG_CHANGE_CAUSE_SIGHUP = (1L << 0),
|
||||
NM_CONFIG_CHANGE_CAUSE_SIGUSR1 = (1L << 1),
|
||||
NM_CONFIG_CHANGE_CAUSE_SIGUSR2 = (1L << 2),
|
||||
NM_CONFIG_CHANGE_CAUSE_NO_AUTO_DEFAULT = (1L << 3),
|
||||
NM_CONFIG_CHANGE_CAUSE_SET_VALUES = (1L << 4),
|
||||
NM_CONFIG_CHANGE_CAUSE_CONF = (1L << 5),
|
||||
NM_CONFIG_CHANGE_CAUSE_DNS_RC = (1L << 6),
|
||||
NM_CONFIG_CHANGE_CAUSE_DNS_FULL = (1L << 7),
|
||||
|
||||
NM_CONFIG_CHANGE_CAUSES = ((1L << 8) - 1),
|
||||
|
||||
/**************************************************************************
|
||||
* Following flags describe which property of the configuration changed:
|
||||
*************************************************************************/
|
||||
|
||||
/* main-file or config-description changed */
|
||||
NM_CONFIG_CHANGE_CONFIG_FILES = (1L << 10),
|
||||
|
||||
|
||||
/* any configuration on disk changed */
|
||||
NM_CONFIG_CHANGE_VALUES = (1L << 11),
|
||||
|
||||
/* any user configuration on disk changed (NetworkManager.conf) */
|
||||
NM_CONFIG_CHANGE_VALUES_USER = (1L << 12),
|
||||
|
||||
/* any internal configuration on disk changed (NetworkManager-intern.conf) */
|
||||
NM_CONFIG_CHANGE_VALUES_INTERN = (1L << 13),
|
||||
|
||||
|
||||
/* configuration regarding connectivity changed */
|
||||
NM_CONFIG_CHANGE_CONNECTIVITY = (1L << 14),
|
||||
|
||||
/* configuration regarding no-auto-default changed */
|
||||
NM_CONFIG_CHANGE_NO_AUTO_DEFAULT = (1L << 15),
|
||||
|
||||
/* configuration regarding dns-mode changed */
|
||||
NM_CONFIG_CHANGE_DNS_MODE = (1L << 16),
|
||||
|
||||
/* configuration regarding rc-manager changed */
|
||||
NM_CONFIG_CHANGE_RC_MANAGER = (1L << 17),
|
||||
|
||||
/* configuration regarding global dns-config changed */
|
||||
NM_CONFIG_CHANGE_GLOBAL_DNS_CONFIG = (1L << 18),
|
||||
|
||||
_NM_CONFIG_CHANGE_LAST,
|
||||
NM_CONFIG_CHANGE_ALL = ((_NM_CONFIG_CHANGE_LAST - 1) << 1) - 1,
|
||||
} NMConfigChangeFlags;
|
||||
|
||||
struct _NMConfigData {
|
||||
|
|
@ -164,7 +210,5 @@ GKeyFile *_nm_config_data_get_keyfile (const NMConfigData *self);
|
|||
GKeyFile *_nm_config_data_get_keyfile_user (const NMConfigData *self);
|
||||
GKeyFile *_nm_config_data_get_keyfile_intern (const NMConfigData *self);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* NM_CONFIG_DATA_H */
|
||||
|
||||
|
|
|
|||
|
|
@ -21,10 +21,11 @@
|
|||
|
||||
#include "nm-default.h"
|
||||
|
||||
#include "nm-config.h"
|
||||
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#include "nm-config.h"
|
||||
#include "nm-utils.h"
|
||||
#include "nm-device.h"
|
||||
#include "NetworkManagerUtils.h"
|
||||
|
|
@ -141,7 +142,7 @@ G_DEFINE_TYPE_WITH_CODE (NMConfig, nm_config, G_TYPE_OBJECT,
|
|||
|
||||
/************************************************************************/
|
||||
|
||||
static void _set_config_data (NMConfig *self, NMConfigData *new_data, int signal);
|
||||
static void _set_config_data (NMConfig *self, NMConfigData *new_data, NMConfigChangeFlags reload_flags);
|
||||
|
||||
/************************************************************************/
|
||||
|
||||
|
|
@ -425,7 +426,7 @@ nm_config_set_no_auto_default_for_device (NMConfig *self, NMDevice *device)
|
|||
/* unref no_auto_default_set here. Note that _set_config_data() probably invalidates the content of the array. */
|
||||
g_ptr_array_unref (no_auto_default_new);
|
||||
|
||||
_set_config_data (self, new_data, 0);
|
||||
_set_config_data (self, new_data, NM_CONFIG_CHANGE_CAUSE_NO_AUTO_DEFAULT);
|
||||
}
|
||||
|
||||
/************************************************************************/
|
||||
|
|
@ -682,7 +683,7 @@ read_config (GKeyFile *keyfile, gboolean is_base_config, const char *dirname, co
|
|||
/* the config-group is internal to every configuration snippets. It doesn't make sense
|
||||
* to merge the into the global configuration, and it doesn't make sense to preserve the
|
||||
* group beyond this point. */
|
||||
g_key_file_remove_group (keyfile, NM_CONFIG_KEYFILE_GROUP_CONFIG, NULL);
|
||||
g_key_file_remove_group (kf, NM_CONFIG_KEYFILE_GROUP_CONFIG, NULL);
|
||||
|
||||
/* Override the current settings with the new ones */
|
||||
groups = g_key_file_get_groups (kf, &ngroups);
|
||||
|
|
@ -1674,7 +1675,7 @@ nm_config_set_values (NMConfig *self,
|
|||
nm_log_dbg (LOGD_CORE, "don't persistate internal configuration (no file set, use --intern-config?)");
|
||||
}
|
||||
if (new_data)
|
||||
_set_config_data (self, new_data, 0);
|
||||
_set_config_data (self, new_data, NM_CONFIG_CHANGE_CAUSE_SET_VALUES);
|
||||
|
||||
g_key_file_unref (keyfile_new);
|
||||
}
|
||||
|
|
@ -1865,7 +1866,7 @@ _nm_config_state_set (NMConfig *self,
|
|||
/*****************************************************************************/
|
||||
|
||||
void
|
||||
nm_config_reload (NMConfig *self, int signal)
|
||||
nm_config_reload (NMConfig *self, NMConfigChangeFlags reload_flags)
|
||||
{
|
||||
NMConfigPrivate *priv;
|
||||
GError *error = NULL;
|
||||
|
|
@ -1877,11 +1878,16 @@ nm_config_reload (NMConfig *self, int signal)
|
|||
gboolean intern_config_needs_rewrite;
|
||||
|
||||
g_return_if_fail (NM_IS_CONFIG (self));
|
||||
g_return_if_fail ( reload_flags
|
||||
&& !NM_FLAGS_ANY (reload_flags, ~NM_CONFIG_CHANGE_CAUSES)
|
||||
&& !NM_FLAGS_ANY (reload_flags, NM_CONFIG_CHANGE_CAUSE_NO_AUTO_DEFAULT
|
||||
| NM_CONFIG_CHANGE_CAUSE_SET_VALUES));
|
||||
|
||||
priv = NM_CONFIG_GET_PRIVATE (self);
|
||||
|
||||
if (signal != SIGHUP) {
|
||||
_set_config_data (self, NULL, signal);
|
||||
if (!NM_FLAGS_ANY (reload_flags, NM_CONFIG_CHANGE_CAUSE_SIGHUP | NM_CONFIG_CHANGE_CAUSE_CONF)) {
|
||||
/* unless SIGHUP is specified, we don't reload the configuration from disc. */
|
||||
_set_config_data (self, NULL, reload_flags);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -1898,7 +1904,7 @@ nm_config_reload (NMConfig *self, int signal)
|
|||
if (!keyfile) {
|
||||
nm_log_err (LOGD_CORE, "Failed to reload the configuration: %s", error->message);
|
||||
g_clear_error (&error);
|
||||
_set_config_data (self, NULL, signal);
|
||||
_set_config_data (self, NULL, reload_flags);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -1920,13 +1926,20 @@ nm_config_reload (NMConfig *self, int signal)
|
|||
if (keyfile_intern)
|
||||
g_key_file_unref (keyfile_intern);
|
||||
|
||||
_set_config_data (self, new_data, signal);
|
||||
_set_config_data (self, new_data, reload_flags);
|
||||
}
|
||||
|
||||
NM_UTILS_FLAGS2STR_DEFINE (nm_config_change_flags_to_string, NMConfigChangeFlags,
|
||||
NM_UTILS_FLAGS2STR (NM_CONFIG_CHANGE_SIGHUP, "SIGHUP"),
|
||||
NM_UTILS_FLAGS2STR (NM_CONFIG_CHANGE_SIGUSR1, "SIGUSR1"),
|
||||
NM_UTILS_FLAGS2STR (NM_CONFIG_CHANGE_SIGUSR2, "SIGUSR2"),
|
||||
|
||||
NM_UTILS_FLAGS2STR (NM_CONFIG_CHANGE_CAUSE_CONF, "CONF"),
|
||||
NM_UTILS_FLAGS2STR (NM_CONFIG_CHANGE_CAUSE_DNS_RC, "DNS_RC"),
|
||||
NM_UTILS_FLAGS2STR (NM_CONFIG_CHANGE_CAUSE_DNS_FULL, "DNS_FULL"),
|
||||
NM_UTILS_FLAGS2STR (NM_CONFIG_CHANGE_CAUSE_SIGHUP, "SIGHUP"),
|
||||
NM_UTILS_FLAGS2STR (NM_CONFIG_CHANGE_CAUSE_SIGUSR1, "SIGUSR1"),
|
||||
NM_UTILS_FLAGS2STR (NM_CONFIG_CHANGE_CAUSE_SIGUSR2, "SIGUSR2"),
|
||||
NM_UTILS_FLAGS2STR (NM_CONFIG_CHANGE_CAUSE_NO_AUTO_DEFAULT, "NO_AUTO_DEFAULT"),
|
||||
NM_UTILS_FLAGS2STR (NM_CONFIG_CHANGE_CAUSE_SET_VALUES, "SET_VALUES"),
|
||||
|
||||
NM_UTILS_FLAGS2STR (NM_CONFIG_CHANGE_CONFIG_FILES, "config-files"),
|
||||
NM_UTILS_FLAGS2STR (NM_CONFIG_CHANGE_VALUES, "values"),
|
||||
NM_UTILS_FLAGS2STR (NM_CONFIG_CHANGE_VALUES_USER, "values-user"),
|
||||
|
|
@ -1939,27 +1952,19 @@ NM_UTILS_FLAGS2STR_DEFINE (nm_config_change_flags_to_string, NMConfigChangeFlags
|
|||
);
|
||||
|
||||
static void
|
||||
_set_config_data (NMConfig *self, NMConfigData *new_data, int signal)
|
||||
_set_config_data (NMConfig *self, NMConfigData *new_data, NMConfigChangeFlags reload_flags)
|
||||
{
|
||||
NMConfigPrivate *priv = NM_CONFIG_GET_PRIVATE (self);
|
||||
NMConfigData *old_data = priv->config_data;
|
||||
NMConfigChangeFlags changes, changes_diff;
|
||||
gboolean had_new_data = !!new_data;
|
||||
|
||||
switch (signal) {
|
||||
case SIGHUP:
|
||||
changes = NM_CONFIG_CHANGE_SIGHUP;
|
||||
break;
|
||||
case SIGUSR1:
|
||||
changes = NM_CONFIG_CHANGE_SIGUSR1;
|
||||
break;
|
||||
case SIGUSR2:
|
||||
changes = NM_CONFIG_CHANGE_SIGUSR2;
|
||||
break;
|
||||
default:
|
||||
changes = NM_CONFIG_CHANGE_NONE;
|
||||
break;
|
||||
}
|
||||
nm_assert (reload_flags);
|
||||
nm_assert (!NM_FLAGS_ANY (reload_flags, ~NM_CONFIG_CHANGE_CAUSES));
|
||||
nm_assert ( NM_IN_SET (reload_flags, NM_CONFIG_CHANGE_CAUSE_NO_AUTO_DEFAULT, NM_CONFIG_CHANGE_CAUSE_SET_VALUES)
|
||||
|| !NM_FLAGS_ANY (reload_flags, NM_CONFIG_CHANGE_CAUSE_NO_AUTO_DEFAULT | NM_CONFIG_CHANGE_CAUSE_SET_VALUES));
|
||||
|
||||
changes = reload_flags;
|
||||
|
||||
if (new_data) {
|
||||
changes_diff = nm_config_data_diff (old_data, new_data);
|
||||
|
|
@ -1969,12 +1974,19 @@ _set_config_data (NMConfig *self, NMConfigData *new_data, int signal)
|
|||
changes |= changes_diff;
|
||||
}
|
||||
|
||||
if (changes == NM_CONFIG_CHANGE_NONE)
|
||||
if ( NM_IN_SET (reload_flags,
|
||||
NM_CONFIG_CHANGE_CAUSE_NO_AUTO_DEFAULT,
|
||||
NM_CONFIG_CHANGE_CAUSE_SET_VALUES,
|
||||
NM_CONFIG_CHANGE_CAUSE_CONF)
|
||||
&& !new_data) {
|
||||
/* no relevant changes that should be propagated. Return silently. */
|
||||
return;
|
||||
}
|
||||
|
||||
if (new_data) {
|
||||
nm_log_info (LOGD_CORE, "config: update %s (%s)", nm_config_data_get_config_description (new_data),
|
||||
nm_config_change_flags_to_string (changes, NULL, 0));
|
||||
nm_log_info (LOGD_CORE, "config: signal %s (%s)",
|
||||
nm_config_change_flags_to_string (changes, NULL, 0),
|
||||
nm_config_data_get_config_description (new_data));
|
||||
nm_config_data_log (new_data, "CONFIG: ", " ", NULL);
|
||||
priv->config_data = new_data;
|
||||
} else if (had_new_data)
|
||||
|
|
|
|||
|
|
@ -22,12 +22,8 @@
|
|||
#ifndef __NETWORKMANAGER_CONFIG_H__
|
||||
#define __NETWORKMANAGER_CONFIG_H__
|
||||
|
||||
|
||||
#include "nm-default.h"
|
||||
#include "nm-config-data.h"
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
#define NM_TYPE_CONFIG (nm_config_get_type ())
|
||||
#define NM_CONFIG(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_CONFIG, NMConfig))
|
||||
#define NM_CONFIG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_CONFIG, NMConfigClass))
|
||||
|
|
@ -147,7 +143,7 @@ void nm_config_set_no_auto_default_for_device (NMConfig *config, NMDevice *devi
|
|||
|
||||
NMConfig *nm_config_new (const NMConfigCmdLineOptions *cli, char **atomic_section_prefixes, GError **error);
|
||||
NMConfig *nm_config_setup (const NMConfigCmdLineOptions *cli, char **atomic_section_prefixes, GError **error);
|
||||
void nm_config_reload (NMConfig *config, int signal);
|
||||
void nm_config_reload (NMConfig *config, NMConfigChangeFlags reload_flags);
|
||||
|
||||
const NMConfigState *nm_config_state_get (NMConfig *config);
|
||||
|
||||
|
|
@ -186,7 +182,5 @@ gboolean nm_config_set_global_dns (NMConfig *self, NMGlobalDnsConfig *global_dns
|
|||
extern guint _nm_config_match_nm_version;
|
||||
extern char *_nm_config_match_env;
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* __NETWORKMANAGER_CONFIG_H__ */
|
||||
|
||||
|
|
|
|||
102
src/nm-manager.c
102
src/nm-manager.c
|
|
@ -29,6 +29,7 @@
|
|||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include "nm-common-macros.h"
|
||||
#include "nm-bus-manager.h"
|
||||
#include "nm-vpn-manager.h"
|
||||
#include "nm-device.h"
|
||||
|
|
@ -464,6 +465,104 @@ _config_changed_cb (NMConfig *config, NMConfigData *config_data, NMConfigChangeF
|
|||
_notify (self, PROP_GLOBAL_DNS_CONFIGURATION);
|
||||
}
|
||||
|
||||
static void
|
||||
_reload_auth_cb (NMAuthChain *chain,
|
||||
GError *error,
|
||||
GDBusMethodInvocation *context,
|
||||
gpointer user_data)
|
||||
{
|
||||
NMManager *self = NM_MANAGER (user_data);
|
||||
NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
|
||||
GError *ret_error = NULL;
|
||||
NMAuthCallResult result;
|
||||
guint32 flags;
|
||||
NMAuthSubject *subject;
|
||||
char s_buf[60];
|
||||
NMConfigChangeFlags reload_type = NM_CONFIG_CHANGE_NONE;
|
||||
|
||||
g_assert (context);
|
||||
|
||||
priv->auth_chains = g_slist_remove (priv->auth_chains, chain);
|
||||
flags = GPOINTER_TO_UINT (nm_auth_chain_get_data (chain, "flags"));
|
||||
|
||||
subject = nm_auth_chain_get_subject (chain);
|
||||
|
||||
result = nm_auth_chain_get_result (chain, NM_AUTH_PERMISSION_RELOAD);
|
||||
if (error) {
|
||||
_LOGD (LOGD_CORE, "Reload request failed: %s", error->message);
|
||||
ret_error = g_error_new (NM_MANAGER_ERROR,
|
||||
NM_MANAGER_ERROR_PERMISSION_DENIED,
|
||||
"Reload request failed: %s",
|
||||
error->message);
|
||||
} else if (result != NM_AUTH_CALL_RESULT_YES) {
|
||||
ret_error = g_error_new_literal (NM_MANAGER_ERROR,
|
||||
NM_MANAGER_ERROR_PERMISSION_DENIED,
|
||||
"Not authorized to reload configuration");
|
||||
} else {
|
||||
if (NM_FLAGS_ANY (flags, ~NM_MANAGER_RELOAD_FLAGS_ALL)) {
|
||||
/* invalid flags */
|
||||
} else if (flags == 0)
|
||||
reload_type = NM_CONFIG_CHANGE_CAUSE_SIGHUP;
|
||||
else {
|
||||
if (NM_FLAGS_HAS (flags, NM_MANAGER_RELOAD_FLAGS_CONF))
|
||||
reload_type |= NM_CONFIG_CHANGE_CAUSE_CONF;
|
||||
if (NM_FLAGS_HAS (flags, NM_MANAGER_RELOAD_FLAGS_DNS_RC))
|
||||
reload_type |= NM_CONFIG_CHANGE_CAUSE_DNS_RC;
|
||||
if (NM_FLAGS_HAS (flags, NM_MANAGER_RELOAD_FLAGS_DNS_FULL))
|
||||
reload_type |= NM_CONFIG_CHANGE_CAUSE_DNS_FULL;
|
||||
}
|
||||
|
||||
if (reload_type == NM_CONFIG_CHANGE_NONE) {
|
||||
ret_error = g_error_new_literal (NM_MANAGER_ERROR,
|
||||
NM_MANAGER_ERROR_INVALID_ARGUMENTS,
|
||||
"Invalid flags for reload");
|
||||
}
|
||||
}
|
||||
|
||||
nm_audit_log_control_op (NM_AUDIT_OP_RELOAD,
|
||||
nm_sprintf_buf (s_buf, "%u", flags),
|
||||
ret_error == NULL, subject,
|
||||
ret_error ? ret_error->message : NULL);
|
||||
|
||||
if (ret_error) {
|
||||
g_dbus_method_invocation_take_error (context, ret_error);
|
||||
goto out;
|
||||
}
|
||||
|
||||
nm_config_reload (priv->config, reload_type);
|
||||
g_dbus_method_invocation_return_value (context, NULL);
|
||||
|
||||
out:
|
||||
nm_auth_chain_unref (chain);
|
||||
}
|
||||
|
||||
static void
|
||||
impl_manager_reload (NMManager *self,
|
||||
GDBusMethodInvocation *context,
|
||||
guint32 flags)
|
||||
{
|
||||
NMManagerPrivate *priv;
|
||||
NMAuthChain *chain;
|
||||
GError *error = NULL;
|
||||
|
||||
g_return_if_fail (NM_IS_MANAGER (self));
|
||||
|
||||
priv = NM_MANAGER_GET_PRIVATE (self);
|
||||
|
||||
chain = nm_auth_chain_new_context (context, _reload_auth_cb, self);
|
||||
if (!chain) {
|
||||
error = g_error_new_literal (NM_MANAGER_ERROR,
|
||||
NM_MANAGER_ERROR_PERMISSION_DENIED,
|
||||
"Unable to authenticate request");
|
||||
g_dbus_method_invocation_take_error (context, error);
|
||||
return;
|
||||
}
|
||||
|
||||
priv->auth_chains = g_slist_append (priv->auth_chains, chain);
|
||||
nm_auth_chain_set_data (chain, "flags", GUINT_TO_POINTER (flags), NULL);
|
||||
nm_auth_chain_add_call (chain, NM_AUTH_PERMISSION_RELOAD, TRUE);
|
||||
}
|
||||
|
||||
/************************************************************************/
|
||||
|
||||
static NMDevice *
|
||||
|
|
@ -4312,6 +4411,7 @@ get_permissions_done_cb (NMAuthChain *chain,
|
|||
get_perm_add_result (self, chain, &results, NM_AUTH_PERMISSION_SETTINGS_MODIFY_SYSTEM);
|
||||
get_perm_add_result (self, chain, &results, NM_AUTH_PERMISSION_SETTINGS_MODIFY_OWN);
|
||||
get_perm_add_result (self, chain, &results, NM_AUTH_PERMISSION_SETTINGS_MODIFY_HOSTNAME);
|
||||
get_perm_add_result (self, chain, &results, NM_AUTH_PERMISSION_RELOAD);
|
||||
|
||||
g_dbus_method_invocation_return_value (context,
|
||||
g_variant_new ("(a{ss})", &results));
|
||||
|
|
@ -4349,6 +4449,7 @@ impl_manager_get_permissions (NMManager *self,
|
|||
nm_auth_chain_add_call (chain, NM_AUTH_PERMISSION_SETTINGS_MODIFY_SYSTEM, FALSE);
|
||||
nm_auth_chain_add_call (chain, NM_AUTH_PERMISSION_SETTINGS_MODIFY_OWN, FALSE);
|
||||
nm_auth_chain_add_call (chain, NM_AUTH_PERMISSION_SETTINGS_MODIFY_HOSTNAME, FALSE);
|
||||
nm_auth_chain_add_call (chain, NM_AUTH_PERMISSION_RELOAD, FALSE);
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
@ -5818,6 +5919,7 @@ nm_manager_class_init (NMManagerClass *manager_class)
|
|||
|
||||
nm_exported_object_class_add_interface (NM_EXPORTED_OBJECT_CLASS (manager_class),
|
||||
NMDBUS_TYPE_MANAGER_SKELETON,
|
||||
"Reload", impl_manager_reload,
|
||||
"GetDevices", impl_manager_get_devices,
|
||||
"GetAllDevices", impl_manager_get_all_devices,
|
||||
"GetDeviceByIpIface", impl_manager_get_device_by_ip_iface,
|
||||
|
|
|
|||
|
|
@ -20,11 +20,13 @@
|
|||
|
||||
#include "nm-default.h"
|
||||
|
||||
#include "nm-agent-manager.h"
|
||||
|
||||
#include <string.h>
|
||||
#include <pwd.h>
|
||||
|
||||
#include "nm-common-macros.h"
|
||||
#include "nm-dbus-interface.h"
|
||||
#include "nm-agent-manager.h"
|
||||
#include "nm-secret-agent.h"
|
||||
#include "nm-auth-utils.h"
|
||||
#include "nm-setting-vpn.h"
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@
|
|||
#ifndef __NETWORKMANAGER_AGENT_MANAGER_H__
|
||||
#define __NETWORKMANAGER_AGENT_MANAGER_H__
|
||||
|
||||
#include <nm-connection.h>
|
||||
#include "nm-connection.h"
|
||||
|
||||
#include "nm-exported-object.h"
|
||||
#include "nm-secret-agent.h"
|
||||
|
|
|
|||
|
|
@ -21,10 +21,12 @@
|
|||
|
||||
#include "nm-default.h"
|
||||
|
||||
#include "nm-settings-connection.h"
|
||||
|
||||
#include <string.h>
|
||||
|
||||
#include "nm-common-macros.h"
|
||||
#include "nm-dbus-interface.h"
|
||||
#include "nm-settings-connection.h"
|
||||
#include "nm-session-monitor.h"
|
||||
#include "nm-auth-utils.h"
|
||||
#include "nm-auth-subject.h"
|
||||
|
|
|
|||
|
|
@ -38,6 +38,7 @@
|
|||
#include <selinux/selinux.h>
|
||||
#endif
|
||||
|
||||
#include "nm-common-macros.h"
|
||||
#include "nm-dbus-interface.h"
|
||||
#include "nm-connection.h"
|
||||
#include "nm-setting-8021x.h"
|
||||
|
|
|
|||
|
|
@ -942,8 +942,8 @@ config_changed_cb (NMConfig *config,
|
|||
* On SIGHUP and SIGUSR1 try to re-connect to D-Bus. So in the unlikely
|
||||
* event that the D-Bus conneciton is broken, that allows for recovery
|
||||
* without need for restarting NetworkManager. */
|
||||
if ( NM_FLAGS_HAS (changes, NM_CONFIG_CHANGE_SIGHUP)
|
||||
|| NM_FLAGS_HAS (changes, NM_CONFIG_CHANGE_SIGUSR1)) {
|
||||
if (NM_FLAGS_ANY (changes, NM_CONFIG_CHANGE_CAUSE_SIGHUP
|
||||
| NM_CONFIG_CHANGE_CAUSE_SIGUSR1)) {
|
||||
if (!SETTINGS_PLUGIN_IFCFG_GET_PRIVATE (self)->dbus.connection)
|
||||
_dbus_setup (self);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -343,7 +343,7 @@ test_config_no_auto_default (void)
|
|||
g_assert (!nm_config_get_no_auto_default_for_device (config, dev3));
|
||||
g_assert (nm_config_get_no_auto_default_for_device (config, dev4));
|
||||
|
||||
g_test_expect_message ("NetworkManager", G_LOG_LEVEL_INFO, "*config: update * (no-auto-default)*");
|
||||
g_test_expect_message ("NetworkManager", G_LOG_LEVEL_INFO, "*config: signal NO_AUTO_DEFAULT,no-auto-default *");
|
||||
nm_config_set_no_auto_default_for_device (config, dev3);
|
||||
g_test_assert_expected_messages ();
|
||||
|
||||
|
|
@ -511,9 +511,9 @@ _set_values_config_changed_cb (NMConfig *config,
|
|||
g_assert (config_changed_data);
|
||||
g_assert (config_changed_data->changes == NM_CONFIG_CHANGE_NONE);
|
||||
|
||||
if (changes == NM_CONFIG_CHANGE_SIGHUP)
|
||||
if (changes == NM_CONFIG_CHANGE_CAUSE_SIGHUP)
|
||||
return;
|
||||
changes &= ~NM_CONFIG_CHANGE_SIGHUP;
|
||||
changes &= ~NM_CONFIG_CHANGE_CAUSE_SIGHUP;
|
||||
|
||||
config_changed_data->changes = changes;
|
||||
|
||||
|
|
@ -556,11 +556,11 @@ _set_values_user (NMConfig *config,
|
|||
config_data_before = g_object_ref (nm_config_get_data (config));
|
||||
|
||||
if (expected_changes != NM_CONFIG_CHANGE_NONE)
|
||||
g_test_expect_message ("NetworkManager", G_LOG_LEVEL_INFO, "*config: update *");
|
||||
g_test_expect_message ("NetworkManager", G_LOG_LEVEL_INFO, "*config: signal *");
|
||||
else
|
||||
g_test_expect_message ("NetworkManager", G_LOG_LEVEL_INFO, "*config: signal SIGHUP (no changes from disk)*");
|
||||
|
||||
nm_config_reload (config, SIGHUP);
|
||||
nm_config_reload (config, NM_CONFIG_CHANGE_CAUSE_SIGHUP);
|
||||
|
||||
g_test_assert_expected_messages ();
|
||||
|
||||
|
|
@ -600,7 +600,7 @@ _set_values_intern (NMConfig *config,
|
|||
&config_changed_data);
|
||||
|
||||
if (expected_changes != NM_CONFIG_CHANGE_NONE)
|
||||
g_test_expect_message ("NetworkManager", G_LOG_LEVEL_INFO, "*config: update *");
|
||||
g_test_expect_message ("NetworkManager", G_LOG_LEVEL_INFO, "*config: signal *");
|
||||
|
||||
nm_config_set_values (config, keyfile_intern, TRUE, FALSE);
|
||||
|
||||
|
|
@ -649,14 +649,14 @@ static void
|
|||
_set_values_intern_internal_set (NMConfig *config, gboolean set_user, GKeyFile *keyfile, NMConfigChangeFlags *out_expected_changes)
|
||||
{
|
||||
g_key_file_set_string (keyfile, NM_CONFIG_KEYFILE_GROUPPREFIX_INTERN"section1", "key", "internal-section");
|
||||
*out_expected_changes = NM_CONFIG_CHANGE_VALUES | NM_CONFIG_CHANGE_VALUES_INTERN;
|
||||
*out_expected_changes = NM_CONFIG_CHANGE_CAUSE_SET_VALUES | NM_CONFIG_CHANGE_VALUES | NM_CONFIG_CHANGE_VALUES_INTERN;
|
||||
}
|
||||
|
||||
static void
|
||||
_set_values_intern_internal_check (NMConfig *config, NMConfigData *config_data, gboolean is_change_event, NMConfigChangeFlags changes, NMConfigData *old_data)
|
||||
{
|
||||
if (is_change_event)
|
||||
g_assert (changes == (NM_CONFIG_CHANGE_VALUES | NM_CONFIG_CHANGE_VALUES_INTERN));
|
||||
g_assert (changes == (NM_CONFIG_CHANGE_CAUSE_SET_VALUES | NM_CONFIG_CHANGE_VALUES | NM_CONFIG_CHANGE_VALUES_INTERN));
|
||||
assert_config_value (config_data, NM_CONFIG_KEYFILE_GROUPPREFIX_INTERN"section1", "key", "internal-section");
|
||||
}
|
||||
|
||||
|
|
@ -690,14 +690,14 @@ _set_values_intern_atomic_section_1_set (NMConfig *config, gboolean set_user, GK
|
|||
g_key_file_set_string (keyfile, "atomic-prefix-1.section-a", "key3", "intern-value3");
|
||||
g_key_file_set_string (keyfile, "non-atomic-prefix-1.section-a", "nap1-key1", "intern-value1");
|
||||
g_key_file_set_string (keyfile, "non-atomic-prefix-1.section-a", "nap1-key3", "intern-value3");
|
||||
*out_expected_changes = NM_CONFIG_CHANGE_VALUES | NM_CONFIG_CHANGE_VALUES_INTERN;
|
||||
*out_expected_changes = NM_CONFIG_CHANGE_CAUSE_SET_VALUES | NM_CONFIG_CHANGE_VALUES | NM_CONFIG_CHANGE_VALUES_INTERN;
|
||||
}
|
||||
|
||||
static void
|
||||
_set_values_intern_atomic_section_1_check (NMConfig *config, NMConfigData *config_data, gboolean is_change_event, NMConfigChangeFlags changes, NMConfigData *old_data)
|
||||
{
|
||||
if (is_change_event)
|
||||
g_assert (changes == (NM_CONFIG_CHANGE_VALUES | NM_CONFIG_CHANGE_VALUES_INTERN));
|
||||
g_assert (changes == (NM_CONFIG_CHANGE_CAUSE_SET_VALUES | NM_CONFIG_CHANGE_VALUES | NM_CONFIG_CHANGE_VALUES_INTERN));
|
||||
assert_config_value (config_data, "atomic-prefix-1.section-a", "key1", "intern-value1");
|
||||
assert_config_value (config_data, "atomic-prefix-1.section-a", "key2", NULL);
|
||||
assert_config_value (config_data, "atomic-prefix-1.section-a", "key3", "intern-value3");
|
||||
|
|
@ -744,14 +744,14 @@ _set_values_intern_atomic_section_2_set (NMConfig *config, gboolean set_user, GK
|
|||
g_key_file_set_string (keyfile, "non-atomic-prefix-1.section-a", "nap1-key3", "intern-value3");
|
||||
g_key_file_set_string (keyfile, NM_CONFIG_KEYFILE_GROUPPREFIX_INTERN"with-whitespace", "key1", " b c\\, d ");
|
||||
g_key_file_set_value (keyfile, NM_CONFIG_KEYFILE_GROUPPREFIX_INTERN"with-whitespace", "key2", " b c\\, d ");
|
||||
*out_expected_changes = NM_CONFIG_CHANGE_VALUES | NM_CONFIG_CHANGE_VALUES_INTERN;
|
||||
*out_expected_changes = NM_CONFIG_CHANGE_CAUSE_SET_VALUES | NM_CONFIG_CHANGE_VALUES | NM_CONFIG_CHANGE_VALUES_INTERN;
|
||||
}
|
||||
|
||||
static void
|
||||
_set_values_intern_atomic_section_2_check (NMConfig *config, NMConfigData *config_data, gboolean is_change_event, NMConfigChangeFlags changes, NMConfigData *old_data)
|
||||
{
|
||||
if (is_change_event)
|
||||
g_assert (changes == (NM_CONFIG_CHANGE_VALUES | NM_CONFIG_CHANGE_VALUES_INTERN));
|
||||
g_assert (changes == (NM_CONFIG_CHANGE_CAUSE_SET_VALUES | NM_CONFIG_CHANGE_VALUES | NM_CONFIG_CHANGE_VALUES_INTERN));
|
||||
g_assert (!nm_config_data_has_group (config_data, "atomic-prefix-1.section-a"));
|
||||
assert_config_value (config_data, "atomic-prefix-1.section-b", "key1", "user-value1");
|
||||
assert_config_value (config_data, "non-atomic-prefix-1.section-a", "nap1-key1", NULL);
|
||||
|
|
@ -862,17 +862,17 @@ test_config_signal (void)
|
|||
G_CALLBACK (_test_signal_config_changed_cb),
|
||||
&expected);
|
||||
|
||||
expected = NM_CONFIG_CHANGE_SIGUSR1;
|
||||
expected = NM_CONFIG_CHANGE_CAUSE_SIGUSR1;
|
||||
g_test_expect_message ("NetworkManager", G_LOG_LEVEL_INFO, "*config: signal SIGUSR1");
|
||||
nm_config_reload (config, SIGUSR1);
|
||||
nm_config_reload (config, expected);
|
||||
|
||||
expected = NM_CONFIG_CHANGE_SIGUSR2;
|
||||
expected = NM_CONFIG_CHANGE_CAUSE_SIGUSR2;
|
||||
g_test_expect_message ("NetworkManager", G_LOG_LEVEL_INFO, "*config: signal SIGUSR2");
|
||||
nm_config_reload (config, SIGUSR2);
|
||||
nm_config_reload (config, expected);
|
||||
|
||||
expected = NM_CONFIG_CHANGE_SIGHUP;
|
||||
expected = NM_CONFIG_CHANGE_CAUSE_SIGHUP;
|
||||
g_test_expect_message ("NetworkManager", G_LOG_LEVEL_INFO, "*config: signal SIGHUP (no changes from disk)*");
|
||||
nm_config_reload (config, SIGHUP);
|
||||
nm_config_reload (config, expected);
|
||||
|
||||
|
||||
/* test with subscribing two signals...
|
||||
|
|
@ -883,9 +883,9 @@ test_config_signal (void)
|
|||
NM_CONFIG_SIGNAL_CONFIG_CHANGED,
|
||||
G_CALLBACK (_test_signal_config_changed_cb2),
|
||||
&expected);
|
||||
expected = NM_CONFIG_CHANGE_SIGUSR2;
|
||||
expected = NM_CONFIG_CHANGE_CAUSE_SIGUSR2;
|
||||
g_test_expect_message ("NetworkManager", G_LOG_LEVEL_INFO, "*config: signal SIGUSR2");
|
||||
nm_config_reload (config, SIGUSR2);
|
||||
nm_config_reload (config, NM_CONFIG_CHANGE_CAUSE_SIGUSR2);
|
||||
g_signal_handlers_disconnect_by_func (config, _test_signal_config_changed_cb2, &expected);
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -783,7 +783,10 @@ class NetworkManager(ExportedObj):
|
|||
"org.freedesktop.NetworkManager.wifi.share.open": "yes",
|
||||
"org.freedesktop.NetworkManager.settings.modify.own": "yes",
|
||||
"org.freedesktop.NetworkManager.settings.modify.system": "yes",
|
||||
"org.freedesktop.NetworkManager.settings.modify.hostname": "yes" }
|
||||
"org.freedesktop.NetworkManager.settings.modify.hostname": "yes",
|
||||
"org.freedesktop.NetworkManager.settings.modify.global-dns": "no",
|
||||
"org.freedesktop.NetworkManager.reload": "no",
|
||||
}
|
||||
|
||||
@dbus.service.method(dbus_interface=IFACE_NM, in_signature='ss', out_signature='')
|
||||
def SetLogging(self, level, domains):
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue