Commit Graph

21088 Commits

Author SHA1 Message Date
Beniamino Galvani
a77ed0de97 core: drop root requirement for load_connection(s)/set_logging D-Bus calls
The D-Bus configuration already ensures that only root can do that;
enforcing the permission at policy level seems better than doing it in
the daemon itself because it allows users to change the policy and
also because callers can exit immediately after issuing the request.

(cherry picked from commit 4c7fa8dfdc)
2016-08-20 10:45:53 +02:00
Beniamino Galvani
805925f9ef cli: return sane error message for D-Bus policy permission errors
The error returned to users when a load_connection(s)/set_logging call
fails due to D-Bus policy denial is a bit obscure:

  $ nmcli general logging level debug
  Error: failed to set logging: Rejected send message, 4 matched rules;
  type="method_call", sender=":1.233" (uid=1001 pid=27225 comm="nmcli
  general logging level debug ")
  interface="org.freedesktop.NetworkManager" member="SetLogging" error
  name="(unset)" requested_reply="0" destination=":1.207" (uid=0
  pid=25793 comm="/usr/sbin/NetworkManager --no-daemon ")

Convert it to a more comprehensible:

  $ nmcli general logging level debug
  Error: failed to set logging: access denied

https://bugzilla.redhat.com/show_bug.cgi?id=1362542
2016-08-20 10:35:58 +02:00
Beniamino Galvani
4c7fa8dfdc core: drop root requirement for load_connection(s)/set_logging D-Bus calls
The D-Bus configuration already ensures that only root can do that;
enforcing the permission at policy level seems better than doing it in
the daemon itself because it allows users to change the policy and
also because callers can exit immediately after issuing the request.
2016-08-20 10:35:58 +02:00
Beniamino Galvani
0944a86182 ifcfg-rh: ensure master is cleared when updating a connection
If the connection is not a slave we must clear any existing variable
indicating the connection's master.

https://bugzilla.redhat.com/show_bug.cgi?id=1355656
(cherry picked from commit 2750714802)
2016-08-19 18:56:59 +02:00
Beniamino Galvani
2750714802 ifcfg-rh: ensure master is cleared when updating a connection
If the connection is not a slave we must clear any existing variable
indicating the connection's master.

https://bugzilla.redhat.com/show_bug.cgi?id=1355656
2016-08-19 18:44:13 +02:00
Beniamino Galvani
9364585eeb device: don't flush addresses when unmanaging assumed devices
When a assumed software device is brought down externally, it becomes
UNMANAGED_EXTERNAL_DOWN and its state goes from ACTIVATED directly to
UNMANAGED. In such case, we shouldn't flush the IP configuration
(addresses and routes) present on the device.

To fix this, clean up the device with CLEANUP_TYPE_KEEP and modify
nm_device_cleanup() not to flush addresses and devices with such flag.

https://bugzilla.redhat.com/show_bug.cgi?id=1363995
(cherry picked from commit 45cd3302dc)
2016-08-19 18:19:13 +02:00
Beniamino Galvani
45cd3302dc device: don't flush addresses when unmanaging assumed devices
When a assumed software device is brought down externally, it becomes
UNMANAGED_EXTERNAL_DOWN and its state goes from ACTIVATED directly to
UNMANAGED. In such case, we shouldn't flush the IP configuration
(addresses and routes) present on the device.

To fix this, clean up the device with CLEANUP_TYPE_KEEP and modify
nm_device_cleanup() not to flush addresses and devices with such flag.

https://bugzilla.redhat.com/show_bug.cgi?id=1363995
2016-08-19 14:05:10 +02:00
Thomas Haller
eff2dc63b4 vpn: fix out-of-range access reading route.plen in nm_vpn_connection_ip4_config_get()
Also, skip over routes with plen zero.

Fixes: 44768f0311

https://bugzilla.redhat.com/show_bug.cgi?id=1368355
(cherry picked from commit 87fcbb491d)
2016-08-19 13:42:06 +02:00
Thomas Haller
87fcbb491d vpn: fix out-of-range access reading route.plen in nm_vpn_connection_ip4_config_get()
Also, skip over routes with plen zero.

Fixes: 44768f0311

https://bugzilla.redhat.com/show_bug.cgi?id=1368355
2016-08-19 13:39:34 +02:00
Thomas Haller
4023659ee1 logging: remove unused formatting options
Previously, we logged also the location (file:line func). nm-logging.c
supported format flags to control the timestamp, the location, and alignment
of the timestamp.

We want that all our logging backends log the same messages. That is,
both syslog and journal should have our ~default~ logging format, that
is with timestamp but without location.

Drop the unused code.

(cherry picked from commit cc828431b8)
2016-08-19 12:32:30 +02:00
Thomas Haller
cc828431b8 logging: remove unused formatting options
Previously, we logged also the location (file:line func). nm-logging.c
supported format flags to control the timestamp, the location, and alignment
of the timestamp.

We want that all our logging backends log the same messages. That is,
both syslog and journal should have our ~default~ logging format, that
is with timestamp but without location.

Drop the unused code.
2016-08-19 12:06:23 +02:00
Beniamino Galvani
db14c1b167 policy: always try to update kernel hostname
Even if we know that the new hostname being set is equal to the cached
old one, the user may have manually changed the kernel hostname in the
meanwhile. For example:

 # hostname
 host123

 # hostname localhost
 # nmcli connection up eth1
                    # (now NM receives 'host123' from DHCP, but
                    # believes it's already set and doesn't update it)
 # hostname
 localhost

Let's always try to update the kernel (transient) hostname, unless it
is really already set (as returned by gethostname()).

https://bugzilla.redhat.com/show_bug.cgi?id=1356015
(cherry picked from commit 51b2cef04f)
2016-08-19 10:02:41 +02:00
Beniamino Galvani
51b2cef04f policy: always try to update kernel hostname
Even if we know that the new hostname being set is equal to the cached
old one, the user may have manually changed the kernel hostname in the
meanwhile. For example:

 # hostname
 host123

 # hostname localhost
 # nmcli connection up eth1
                    # (now NM receives 'host123' from DHCP, but
                    # believes it's already set and doesn't update it)
 # hostname
 localhost

Let's always try to update the kernel (transient) hostname, unless it
is really already set (as returned by gethostname()).

https://bugzilla.redhat.com/show_bug.cgi?id=1356015
2016-08-19 09:56:13 +02:00
Thomas Haller
ed20625309 platform/tests: relax condition for test
Got a test failure for /link/software/bond

(cherry picked from commit bdd0f722b8)
2016-08-18 15:26:57 +02:00
Thomas Haller
bdd0f722b8 platform/tests: relax condition for test
Got a test failure for /link/software/bond
2016-08-18 15:20:46 +02:00
Thomas Haller
4cce0b7cf4 contrib/rpm: fix wrong argument to configure script
Fixes: aff491b6f3
(cherry picked from commit 5d09d45b42)
2016-08-18 14:54:04 +02:00
Thomas Haller
5d09d45b42 contrib/rpm: fix wrong argument to configure script
Fixes: aff491b6f3
2016-08-18 14:53:42 +02:00
Thomas Haller
959e151722 contrib/rpm: update spec file to make it more similar to RHEL's version
(cherry picked from commit aff491b6f3)
2016-08-18 12:40:08 +02:00
Thomas Haller
aff491b6f3 contrib/rpm: update spec file to make it more similar to RHEL's version 2016-08-18 12:19:22 +02:00
Thomas Haller
cf50806689 core: don't suppress routes inside the subnet of the interface
It's not clear why a route should be suppressed if it is contained
in the subnet of one of the interface's addresses.

I think it is wrong to do this. For example, imagine an ethernet
and a Wi-Fi device both connected to the same subnet 10.0.0.0/8. By
default, ethernet gets higher priority and a better metric of 100.
If the user wants to configure a route "10.0.0.1/32 metric 99"
to reach a certain host explicitly via Wi-Fi, this check will
forbid that.

This condition was added a long time ago (38dbdae266),
but it's unclear what the original intent was.

See also commit 4f7b1cabc0, which
already relaxed this suppression of routes for non-direct routes.

(cherry picked from commit ac5dc1a951)
2016-08-17 22:42:21 +02:00
Thomas Haller
ac5dc1a951 core: don't suppress routes inside the subnet of the interface
It's not clear why a route should be suppressed if it is contained
in the subnet of one of the interface's addresses.

I think it is wrong to do this. For example, imagine an ethernet
and a Wi-Fi device both connected to the same subnet 10.0.0.0/8. By
default, ethernet gets higher priority and a better metric of 100.
If the user wants to configure a route "10.0.0.1/32 metric 99"
to reach a certain host explicitly via Wi-Fi, this check will
forbid that.

This condition was added a long time ago (38dbdae266),
but it's unclear what the original intent was.

See also commit 4f7b1cabc0, which
already relaxed this suppression of routes for non-direct routes.
2016-08-17 22:31:09 +02:00
Piotr Drąg
3d9a0fda33 po: update Polish (pl) translation (bgo #769463)
https://bugzilla.gnome.org/show_bug.cgi?id=769463
(cherry picked from commit 5e41e1634d)
2016-08-17 20:00:14 +02:00
Piotr Drąg
5e41e1634d po: update Polish (pl) translation (bgo #769463)
https://bugzilla.gnome.org/show_bug.cgi?id=769463
2016-08-17 19:59:31 +02:00
Thomas Haller
0bdcab100c all: cleanup includes in header files
- don't include "nm-default.h" in header files. Every source file must
  include as first header "nm-default.h", thus our headers get the
  default include already implicitly.

- we don't support compiling NetworkManager itself with a C++ compiler. Remove
  G_BEGIN_DECLS/G_END_DECLS from internal headers. We do however support
  users of libnm to use C++, thus they stay in public headers.

(cherry picked from commit f19aff8909)
2016-08-17 19:51:17 +02:00
Thomas Haller
f19aff8909 all: cleanup includes in header files
- don't include "nm-default.h" in header files. Every source file must
  include as first header "nm-default.h", thus our headers get the
  default include already implicitly.

- we don't support compiling NetworkManager itself with a C++ compiler. Remove
  G_BEGIN_DECLS/G_END_DECLS from internal headers. We do however support
  users of libnm to use C++, thus they stay in public headers.
2016-08-17 19:09:50 +02:00
Lubomir Rintel
40d5749ec1 release: bump version to 1.3.91 (1.4-rc1) 2016-08-17 16:21:52 +02:00
Lubomir Rintel
b2eb64a439 release: bump version to 1.5.0 (development) 2016-08-17 16:20:42 +02:00
Lubomir Rintel
cb6f1f5751 release: update NEWS with recently merged features 2016-08-17 16:20:42 +02:00
Thomas Haller
844345eddd all: merge branch 'th/device-statistics'
Add support to expose tx/rx statistics per device

https://mail.gnome.org/archives/networkmanager-list/2016-August/msg00045.html
2016-08-17 16:13:16 +02:00
Thomas Haller
fbbebc2123 device: always expose device statistics information
Instead of updating the device-statistic counters only periodically as
we refresh the link, update them on every link-changed event from
platform.

That means, also for devices that have RefreshRateMs at zero, the values
will be updated at random times when the link information changes.
The difference is, that previously the counters would be zero unless
RefreshRateMs was set. Now, they have some (probably stale) values
which however are not guaranteed to be kept up-to-date.

Also, now we refresh more often then promised by RefreshRateMs. But the API
technically doesn't specify that, so if we find there is a problem with
this, we may revert it later.
2016-08-17 16:08:21 +02:00
Thomas Haller
c16e14c71c device: drop nm-device-statistics.c and refactor tracking device statistics
Originally, "nm-device-statistics.c" contained code to fetch the device
counters via netlink. As now the netlink part is handled by NMPlatform,
the code can be simplified by merging it back to NMDevice.
2016-08-17 16:08:21 +02:00
Thomas Haller
3d9d91b2be platform: print rx/tx counters in nm_platform_link_to_string() 2016-08-17 16:08:21 +02:00
Thomas Haller
02a448e49b device: namespace fields related to statistics in NMDevicePrivate
... by grouping them together in a struct.
2016-08-17 16:08:21 +02:00
Thomas Haller
d9509a2db1 device: don't initalize fields in nm_device_init() to NULL
They are already guaranteed to be 0/NULL.
2016-08-17 16:08:21 +02:00
Thomas Haller
14a7b2a4fe manager: add explicit cast for g_object_set()
Technically, this is not needed because glib requires that
int is at least 32 bits. Thus, uint32 will be safely promoted
to uint.

Just do the cast to be explict about the expected type.
2016-08-17 16:08:21 +02:00
Thomas Haller
36f8ffad9f device: refresh the link before reading the stats 2016-08-17 16:08:21 +02:00
Thomas Haller
fc2f1d9cb8 device: reset device-stats in update_stats() on missing link
First of all, we don't expect missing NMPlatformLink instances.
If that actually happens, just reset the counters to zero.
2016-08-17 16:08:21 +02:00
Thomas Haller
9c5405eba4 platform: drop nm_platform_link_get_stats()
No need to add accessors for fields of NMPlatformLink. Just access
them directly.
2016-08-17 16:08:21 +02:00
Thomas Haller
178bb25a03 platform: let _new_from_nl_link() lookup missing tb[IFLA_STATS64] data from cache 2016-08-17 16:08:21 +02:00
Thomas Haller
b3c376cd29 platform: fix sorting order for nm_platform_link_cmp()
nm_platform_link_cmp() shall first compare the ifindex, otherwise
the sort-order first considers rather unimportant fields instead
of the primary key: the ifindex.

Fixes: a3185f22e55484b819859cb4cef8f54385dac1a9
2016-08-17 16:08:21 +02:00
Alfonso Sanchez-Beato
ce93bd2da7 docs: add device statistics interface 2016-08-17 16:08:21 +02:00
Alfonso Sanchez-Beato
6fb0de0a8b auth: check when setting statistics refresh rate 2016-08-17 16:08:20 +02:00
Thomas Haller
2cb18efaea permissions: properly add checkpoint-rollback permission
Fixes: a52d4654ec
2016-08-17 15:50:20 +02:00
Alfonso Sanchez-Beato
24b193ab64 device: add statistics interface
Add statistics interface to all device instances. When active, the
properties of this interface are refreshed whenever there is network
activity for the device.

Activation is performed by changing RefreshRateMs property. If set to
zero, the interface is deactivated. If set to other value, the rest of
the interface properties are refreshed whenever the related network
metric changes, being RefreshRateMs the minimum time between property
changes, in milliseconds.
2016-08-17 15:50:20 +02:00
Thomas Haller
85834a6675 platform/tests: relax condition in platform test
With device-statistics counters in NMPlatformLink we may get an additional
link-changed event. Relax the assertion in the test.
2016-08-17 15:50:20 +02:00
Alfonso Sanchez-Beato
6ed939e841 platform: add network statistics
Make network traffic statistics data available through the platform.
2016-08-17 15:50:20 +02:00
Alfonso Sanchez-Beato
3bc5c7dbc1 exported-object: allow exporting multiple ifaces
Allow exporting more than one interface per object class.
2016-08-17 15:50:20 +02:00
Thomas Haller
f04baa63c0 device: copy the plink instance before realize_start_setup()
To make sure, we don't end up with a dangling pointer due
to an intermediate platform access which may invalidate the
pointer.
2016-08-17 15:50:20 +02:00
Lubomir Rintel
d070d7f47d act-request: queue failing the slave when master fails
We might be already handling a state change:

Aug 17 05:26:34 dacan.local NetworkManager[618]: (devices/nm-device.c:10982):
_set_state_full: runtime check failed: (priv->in_state_changed == FALSE)

  (gdb) bt
  #0  0x00007fc218dad643 in g_logv (log_domain=0x7fc21c0db3c3 "NetworkManager", log_level=G_LOG_LEVEL_WARNING, format=<optimized out>, args=args@entry=0x7ffe6f0b30d0) at gmessages.c:1086
  #1  0x00007fc218dad7bf in g_log (log_domain=log_domain@entry=0x7fc21c0db3c3 "NetworkManager", log_level=log_level@entry=G_LOG_LEVEL_WARNING, format=format@entry=0x7fc218e1b70f "%s") at gmessages.c:1119
  #2  0x00007fc218dadb16 in g_warn_message (domain=domain@entry=0x7fc21c0db3c3 "NetworkManager", file=file@entry=0x7fc21c0d6597 "devices/nm-device.c", line=line@entry=10982, func=func@entry=0x7fc21c0dabf0 <__FUNCTION__.42233> "_set_state_full", warnexpr=warnexpr@entry=0x7fc21c0d95a0 "priv->in_state_changed == FALSE") at gmessages.c:1152
  #3  0x00007fc21bf79bd6 in _set_state_full (self=0x7fc21ccd88b0 [NMDeviceEthernet], state=NM_DEVICE_STATE_FAILED, reason=NM_DEVICE_STATE_REASON_DEPENDENCY_FAILED, quitting=0) at devices/nm-device.c:10982
  #7  0x00007fc2190bdd9f in <emit signal notify:master on instance 0x7fc21ccd88b0 [NMDeviceEthernet]> (instance=instance@entry=0x7fc21ccd88b0, signal_id=<optimized out>, detail=<optimized out>) at gsignal.c:3439
      #4  0x00007fc2190a3908 in g_closure_invoke (closure=0x7fc21cd009e0, return_value=return_value@entry=0x0, n_param_values=2, param_values=param_values@entry=0x7ffe6f0b34b0, invocation_hint=invocation_hint@entry=0x7ffe6f0b3450) at gclosure.c:801
      #5  0x00007fc2190b5a1d in signal_emit_unlocked_R (node=node@entry=0x7fc21cb66500, detail=detail@entry=588, instance=instance@entry=0x7fc21ccd88b0, emission_return=emission_return@entry=0x0, instance_and_params=instance_and_params@entry=0x7ffe6f0b34b0)
      at gsignal.c:3627
      #6  0x00007fc2190bdab1 in g_signal_emit_valist (instance=<optimized out>, signal_id=<optimized out>, detail=<optimized out>, var_args=var_args@entry=0x7ffe6f0b3640) at gsignal.c:3383
  #8  0x00007fc2190a7fd4 in g_object_dispatch_properties_changed (object=0x7fc21ccd88b0 [NMDeviceEthernet], n_pspecs=<optimized out>, pspecs=<optimized out>) at gobject.c:1061
  #9  0x00007fc2190aa619 in g_object_notify_by_pspec (pspec=<optimized out>, object=0x7fc21ccd88b0 [NMDeviceEthernet]) at gobject.c:1155
  #10 0x00007fc2190aa619 in g_object_notify_by_pspec (object=object@entry=0x7fc21ccd88b0 [NMDeviceEthernet], pspec=<optimized out>) at gobject.c:1264
  #11 0x00007fc21bf7de3f in nm_device_master_enslave_slave (prop=PROP_MASTER, obj=0x7fc21ccd88b0 [NMDeviceEthernet]) at devices/nm-device.c:103
  #12 0x00007fc21bf7de3f in nm_device_master_enslave_slave (success=1, self=0x7fc21ccd88b0 [NMDeviceEthernet]) at devices/nm-device.c:2757
  #13 0x00007fc21bf7de3f in nm_device_master_enslave_slave (self=0x7fc21cd42810 [NMDeviceBond], slave=0x7fc21ccd88b0 [NMDeviceEthernet], connection=<optimized out>) at devices/nm-device.c:1300
  #14 0x00007fc2167c8dcc in ffi_call_unix64 () at ../src/x86/unix64.S:76
  #15 0x00007fc2167c86f5 in ffi_call (cif=cif@entry=0x7ffe6f0b3a10, fn=<optimized out>, rvalue=0x7ffe6f0b3980, avalue=avalue@entry=0x7ffe6f0b3900) at ../src/x86/ffi64.c:522
  #20 0x00007fc2190be2e8 in <emit signal 0x7fc21c0ea3d5 "state-changed" on instance 0x7fc21ccd88b0 [NMDeviceEthernet]> (instance=instance@entry=0x7fc21ccd88b0, detailed_signal=detailed_signal@entry=0x7fc21c0ea3d5 "state-changed") at gsignal.c:3479
      #16 0x00007fc2190a4148 in g_cclosure_marshal_generic (closure=0x7fc21cc84de0, return_gvalue=0x0, n_param_values=<optimized out>, param_values=<optimized out>, invocation_hint=<optimized out>, marshal_data=0x0) at gclosure.c:1487
      #17 0x00007fc2190a3908 in g_closure_invoke (closure=0x7fc21cc84de0, return_value=return_value@entry=0x0, n_param_values=4, param_values=param_values@entry=0x7ffe6f0b3c10, invocation_hint=invocation_hint@entry=0x7ffe6f0b3bb0) at gclosure.c:801
      #18 0x00007fc2190b5a1d in signal_emit_unlocked_R (node=node@entry=0x7fc21cbeef20, detail=detail@entry=0, instance=instance@entry=0x7fc21ccd88b0, emission_return=emission_return@entry=0x0, instance_and_params=instance_and_params@entry=0x7ffe6f0b3c10) at gsignal.c:3627
      #19 0x00007fc2190bdab1 in g_signal_emit_valist (instance=instance@entry=0x7fc21ccd88b0, signal_id=signal_id@entry=112, detail=detail@entry=0, var_args=var_args@entry=0x7ffe6f0b3e48) at gsignal.c:3383
  #21 0x00007fc21bf79e3d in _set_state_full (self=self@entry=0x7fc21ccd88b0 [NMDeviceEthernet], state=state@entry=NM_DEVICE_STATE_IP_CONFIG, reason=reason@entry=NM_DEVICE_STATE_REASON_NONE, quitting=quitting@entry=0) at devices/nm-device.c:11123
  #22 0x00007fc21bf7a707 in nm_device_state_changed (self=self@entry=0x7fc21ccd88b0 [NMDeviceEthernet], state=state@entry=NM_DEVICE_STATE_IP_CONFIG, reason=reason@entry=NM_DEVICE_STATE_REASON_NONE) at devices/nm-device.c:11308
  #23 0x00007fc21bf7e92f in activate_stage3_ip_config_start (self=0x7fc21ccd88b0 [NMDeviceEthernet]) at devices/nm-device.c:6759
  #24 0x00007fc21bf68dac in activation_source_handle_cb (self=0x7fc21ccd88b0 [NMDeviceEthernet], family=family@entry=2) at devices/nm-device.c:3627
  #25 0x00007fc21bf68e6e in activation_source_handle_cb4 (user_data=<optimized out>) at devices/nm-device.c:3564
  #26 0x00007fc218da6d7a in g_main_context_dispatch (context=0x7fc21cb6e000) at gmain.c:3152
  #27 0x00007fc218da6d7a in g_main_context_dispatch (context=context@entry=0x7fc21cb6e000) at gmain.c:3767
  #28 0x00007fc218da70b8 in g_main_context_iterate (context=0x7fc21cb6e000, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at gmain.c:3838
  #29 0x00007fc218da738a in g_main_loop_run (loop=0x7fc21cb6c8c0) at gmain.c:4032
  #30 0x00007fc21bf4a23e in main (argc=1, argv=0x7ffe6f0b43e8) at main.c:411
  (gdb)

https://bugzilla.redhat.com/show_bug.cgi?id=1367702
2016-08-17 15:36:05 +02:00
Jiří Klimeš
c9f6309910 cli: show pre-filled readline input if it is not a real password (rh #1351272)
Example:
$ nmcli -a con up test-conn
Passwords or encryption keys are required to access the wireless network 'kkk'.
Username (802-1x.identity): cimrman
Password (802-1x.password):

https://bugzilla.redhat.com/show_bug.cgi?id=1351272
2016-08-17 15:32:58 +02:00