Commit graph

9469 commits

Author SHA1 Message Date
Lubomir Rintel
1a20611f66 bluetooth/trivial: rename the defines 2017-05-31 20:10:30 +02:00
Lubomir Rintel
43c43d5e3a bluetooth: streamline NMBluez5Manager teardown a bit 2017-05-31 20:05:53 +02:00
Lubomir Rintel
0d71c0569f ifcfg: drop an unused variable 2017-05-31 19:50:58 +02:00
Thomas Haller
b8707cba3c platform/tests: minor fix in _wait_for_ipv6_addr_non_tentative()
For better or worse, there is a platform argument. Use it instead
of the singleton.
2017-05-31 11:01:52 +02:00
Thomas Haller
d6aae6af72 platform/tests: reorder wait-loop in test_ip6_route_options()
- no need to call nm_platform_process_events() after
  nmtstp_wait_for_signal(). The latter processes all events
  that are pending.
- with addr_n number of addresses, we still only want to wait
  a maximum time, not for each addresss individually. Basically,
  the for-loop must be inside NMTST_WAIT(), not the other way around.
2017-05-31 10:46:43 +02:00
Thomas Haller
07751b444b platform/tests: make timeout_ms argument for nmtstp_wait_for_signal() signed
Having an unsigned "guint timeout_ms" argument is very inconvenient, because

    nmtstp_wait_for_signal (NM_PLATFORM_GET (), end_time - now_time);

might easily be negative. In such a case, the correct behavior
is to wait not at all.
2017-05-31 10:46:43 +02:00
Thomas Haller
af9c474844 platform/tests: change nmtstp_wait_for_signal() to wait with zero timeout
The previous behavior, of treating timeout_ms as *no timeout*, makes
no sense. At least not for unit tests. If you have a really long timeout,
then set it. "0" should really mean to schedule a zero timeout.
2017-05-31 10:46:43 +02:00
Francesco Giudici
21a941d40b platform/tests: fix test_ip6_route_options
when adding a route with RTA_PREFSRC some kernel versions will reject
the request if the specified source address is still tentative: be sure
that the just added addresses are no more tentative before adding the
routes.
2017-05-30 19:00:54 +02:00
Thomas Haller
84f2d226b5 ifcfg-rh: fix build failure in write_wired_setting()
Fixes: f80d0eb29e
2017-05-30 18:27:37 +02:00
Thomas Haller
f80d0eb29e ifcfg-rh: use svSetValueInt64_cond() to write MTU value 2017-05-30 16:37:28 +02:00
Thomas Haller
80c0a37b47 ifcfg-rh: add svSetValueInt64_cond()
There are a lot of places where we want to either write a number,
or conditionally clear it. Like:

    mtu = nm_setting_wireless_get_mtu (s_wireless);
    if (mtu)
        svSetValueInt64 (ifcfg, "MTU", mtu);
    else
        svUnsetValue (ifcfg, "MTU");
2017-05-30 16:35:13 +02:00
Thomas Haller
263c5b9207 ifcfg-rh: cleanup writer by using numbered_tag() helper 2017-05-30 13:40:34 +02:00
Thomas Haller
afc76d78ed ifcfg-rh: move numbered_tag() util to "nms-ifcfg-rh-utils.h" header 2017-05-30 13:40:34 +02:00
Thomas Haller
844bf3d1a2 ifcfg-rh: fix preserving NETMASK key in write_ip4_setting()
To support legacy scripts, we want to write out the NETMASK
key whenever the ifcfg file has a NETMASK key previously.
Note, that we anyway always write the relevant PREFIX key.
The NETMASK is redundant, only there to help legacy scripts.

That was broken, because we would svUnsetValue("NETMASK") before
checking whether the NETMASK key is present.

Also, when saving a connection to ifcfg-rh file that was created
by other tools, we might mix up the numbering. E.g. we never
write out IPADDR0. Hence, turn on legacy mode whenever the ifcfg-rh
file has any key starting with "NETMASK".
2017-05-30 13:39:15 +02:00
Thomas Haller
ba05819c89 ifcfg-rh/tests: add test for reading NETMASK property 2017-05-30 11:10:19 +02:00
Thomas Haller
e9d960740a ifcfg-rh: add svFindFirstKeyWithPrefix() function 2017-05-30 11:10:19 +02:00
Thomas Haller
bdd7d858f3 ifcfg-rh: return from svSetValue*() functions whether anything changed 2017-05-30 11:10:19 +02:00
Thomas Haller
efd462d946 ifcfg-rh: fix writing NETMASK in write_ip4_setting() 2017-05-30 11:10:19 +02:00
Thomas Haller
d512ed9f1f dnsmasq: fix generating shared IPv4 address range
Change behavior for the network-address and broadcast-address.
Users should not specify such addresses, but if they do, generate
something more sensible.

Also, if the address was in network larger then /24, the
generated address range was rather unexpected. Change behavior
here.

There are no particularly strong reasons for the chosen range.
It just seems suitable. The decision to hand out at most a /24
is because it is likely to be plenty, and because that is what
the previous code did -- at least, if the address was in the
first /24 of the subnet. See how the result for 192.168.0.1/20
is unchanged, but 192.168.1.1/20 changes.
2017-05-29 11:10:36 +02:00
Thomas Haller
e4ae34584b dnsmasq/tests: add more tests for test_address_ranges() 2017-05-29 11:10:36 +02:00
Thomas Haller
76492632b9 device: cleanup generating shared-IP in shared4_new_config()
Changes:

- merge reserve_shared_ip() into shared4_new_config().
  shared4_new_config() needs to register release_shared_ip(). However, it
  wrongly would always register release_shared_ip(), even for user-supplied
  addresses. To fix that, we would need yet another argument to
  reserve_shared_ip() and coupling it even more with shared4_new_config().
  At that point, it's cleaner to just merge the two functions.

- only create the shared_ips hash when needed, and delete it when
  it's empty. The idea is, that NetworkManager possibly runs for a long
  time, and most of the time no shared connection is active. Just clean
  up the empty hash while we don't need it.
2017-05-29 11:10:36 +02:00
Yuri Chornoivan
0050e8bd34 all: fix typos in documentation, translated strings and comments
https://bugzilla.gnome.org/show_bug.cgi?id=783173
2017-05-28 17:33:37 +02:00
Thomas Haller
d3c71ce4da platform/tests: use nm_platform_link_veth_add() to create veth pair in test 2017-05-27 23:16:56 +02:00
Thomas Haller
6ab2288c28 platform: add nm_platform_link_veth_add() to create VETH links 2017-05-27 23:16:56 +02:00
Thomas Haller
b14c07f70e device: remove unused private data for NMDeviceVeth 2017-05-27 23:16:56 +02:00
Thomas Haller
2c4d9f66ae platform/tests: recreate test environment for each route test
Use nmtstp_env1_add_test_func*() to setup and teardown a new
interface for each test.
2017-05-27 23:16:56 +02:00
Thomas Haller
a367361bc8 platform/tests: refactor test_ip6_route_options() to make it extendable
Have it suitable for multiple scenarios.
2017-05-27 23:16:56 +02:00
Thomas Haller
0f905a0b88 platform/tests: move test fixture "env1" from test-address.c to test-common.h
nmtstp_env1_add_test_func() allows to register test functions in a
particular test environment ("env1", for lack of a better name).

It will be reused for "test-route.c"
2017-05-27 23:16:56 +02:00
Thomas Haller
1b046039d1 device: minor cleanup replacing g_slist_for_each() by iteration
Iterating a list is so easy, it's easier to just do it by
hand, then splitting the functionality accross multiple lines.
2017-05-27 11:38:38 +02:00
Thomas Haller
d1b951a7e5 platform: remove plen argument for IPv6 address ID
The prefix length is not part of the ID for IPv6 address. Remove
it from nmp_object_stackinit_id_ip6_address().
2017-05-27 11:38:38 +02:00
Francesco Giudici
adbf383628 device: when setting back a device to managed, update internal sys state
Otherwise a device which was set as unmanaged (updated to the REMOVED
internal sys-state) will never update its own sys-state if later set
back as managed.
Manage either when setting explictly the device to managed either when
just upping a connection on an unmanaged device.
2017-05-26 15:47:25 +02:00
Francesco Giudici
55b8ba4ddc device: add the internal interface state to the state change log message 2017-05-26 15:47:18 +02:00
Beniamino Galvani
31656a066b core: add configuration flag to choose slaves activation order
Commits 39d0559d9a ("platform: sort links by name instead of
ifindex") and 529a0a1a7f ("manager: sort slaves to be autoconnected
by device name") changed the order of activation of slaves. Introduce
a system-wide configuration property to preserve the old behavior.

https://bugzilla.redhat.com/show_bug.cgi?id=1452585
2017-05-24 15:56:15 +02:00
Thomas Haller
44df6d7938 core: don't enable setrlimit(RLIMIT_CORE) when running with address sanitizer
With address sanitizer, the call to setrlimit() fails by default,
because the core dump would be huge. That could be overwritten via

  ASAN_OPTIONS=disable_core=0

But just don't try to enable core-dumps with asan.
2017-05-24 13:56:12 +02:00
Beniamino Galvani
3355a2823b device: release removed devices from master on cleanup
On cleanup, unconditionally release a device from its master if the
link is missing or it doesn't have a master, otherwise the master
would later try to release the slave, hitting the following assertion:

 "nm_platform_link_release: assertion 'slave > 0' failed"
  #0  g_logv
  #1  g_log
  #2  g_return_if_fail_warning
  #3  nm_platform_link_release
  #4  release_slave
  #5  nm_device_master_release_one_slave
  #6  slave_state_changed
  #7  ffi_call_unix64
  #8  ffi_call
  #9  g_cclosure_marshal_generic
  #10 g_closure_invoke
  #11 signal_emit_unlocked_R
  #12 g_signal_emit_valist
  #14 _set_state_full
  #15 nm_device_state_changed
  #16 nm_device_unrealize
  #17 _platform_link_cb_idle
  #18 g_main_context_dispatch
  #19 g_main_context_dispatch
  #20 g_main_context_iterate
  #21 g_main_loop_run
  #22 main

Fixes: 9e8218f99a

https://bugzilla.redhat.com/show_bug.cgi?id=1448907
2017-05-24 13:39:27 +02:00
Lubomir Rintel
0aa2e0bad3 bluetooth: unhook adapter properties callback when the adapter vanishes
https://bugzilla.redhat.com/show_bug.cgi?id=1454654
2017-05-23 11:33:15 +02:00
Lubomir Rintel
30d06b2253 device: capture the IP6 configuration on the IP interface
Fixes a crash with Bluetooth devices where the device is the BlueZ
device and iface stays 0 while the IP interface is the actual BNEP link.

https://bugzilla.gnome.org/show_bug.cgi?id=782545
2017-05-22 17:14:06 +02:00
Beniamino Galvani
6389d637a7 device: fix capture of device config in ipX_config_merge_and_apply()
Use nm_device_get_ip_ifindex() to obtain the right ifindex for the
device. Fixes the following:

 nm_platform_ip4_address_get_all: assertion 'ifindex > 0' failed
 #0  _g_log_abort () from target:/lib64/libglib-2.0.so.0
 #1  g_logv () from target:/lib64/libglib-2.0.so.0
 #2  g_log () from target:/lib64/libglib-2.0.so.0
 #3  nm_platform_ip4_address_get_all (self=self@entry=0x1181020, ifindex=ifindex@entry=0) at src/platform/nm-platform.c:2640
 #4  nm_ip4_config_capture (platform=0x1181020, ifindex=ifindex@entry=0, capture_resolv_conf=capture_resolv_conf@entry=0) at src/nm-ip4-config.c:271
 #5  ip4_config_merge_and_apply (self=self@entry=0x1254a70, config=config@entry=0x0, commit=commit@entry=1) at src/devices/nm-device.c:5447
 #6  activate_stage5_ip4_config_commit (self=0x1254a70) at src/devices/nm-device.c:8299
 #7  activation_source_handle_cb (self=0x1254a70, family=family@entry=2) at src/devices/nm-device.c:4421
 #8  activation_source_handle_cb4 (user_data=<optimized out>) at src/devices/nm-device.c:4358
 #9  g_idle_dispatch () from target:/lib64/libglib-2.0.so.0
 #10 g_main_context_dispatch () from target:/lib64/libglib-2.0.so.0
 #11 g_main_context_iterate.isra () from target:/lib64/libglib-2.0.so.0
 #12 g_main_loop_run () from target:/lib64/libglib-2.0.so.0
 #13  main (argc=<optimized out>, argv=<optimized out>) at src/main.c:435

Fixes: a21b8882cc
2017-05-21 15:51:27 +02:00
Thomas Haller
5b4cf8f762 wifi: reject WPS PSK secret with non-UTF-8 characters (part 2)
We must reject '\0' characters inside the PSK as well.

Fixes: ac436dc2c4
2017-05-20 13:05:07 +02:00
Thomas Haller
d5c857307e wifi: properly handle floating GVariant in supplicant_iface_wps_credentials_cb()
g_variant_new_parsed() returns a floating reference. Later, we pass
the floating reference to nm_settings_connection_new_secrets(),
but don't transfer ownership.

That might not be a bug (I didn't check), but it requires that
nm_settings_connection_new_secrets() does not take a reference
to the secrets variant.

Convert the floating reference to a real reference to avoid
this dangerous pattern.

Fixes: 0eb7617504
2017-05-19 19:36:26 +02:00
Thomas Haller
ac436dc2c4 wifi: reject WPS PSK secret with non-UTF-8 characters
We pack the PSK byte array in a GVariant of type string,
hence all characters must be valid UTF-8.

Maybe we should do something more sophisticated but let's
just ignore such pass phrases.

Fixes: 0eb7617504
2017-05-19 19:36:10 +02:00
Beniamino Galvani
af8aac9b54 ifcfg-rh: omit empty next hop for routes in legacy format
Don't add "via (null)" if the next hop is missing.

https://bugzilla.redhat.com/show_bug.cgi?id=1452648
2017-05-19 17:44:09 +02:00
Francesco Giudici
f867f20ab8 device: remove useless check and var
with the rework in commit #87a3df2e572ed47b5f76f6d1cad63ce622296e21
the check of the return value of _device_activate () is no more needed.
Remove useless check and var.
2017-05-19 10:08:56 +02:00
Thomas Haller
0870906540 device: sanitze UTF-8 values for D-Bus
ip link add name $'d\xccf\\c' type dummy

Use nm_utils_str_utf8safe_escape() to sanitize non UTF-8 sequences
before exposing them on D-Bus. The operation can be reverted client
side via nm_utils_str_utf8safe_unescape() or simply g_strcompress().

Note that this preserves all valid UTF-8 sequences as-is, with exception
of the backslash escape character and ASCII control characters. Thus, this
is a change in behavior for strings that contain such characters.

Note that nmcli is not changed to somehow unescape the string before
printing. As the string is not valid UTF-8 (or contains ASCII characters
that need escaping), they are not printable as-is, so unescaping before
printing makes little sense.
2017-05-19 09:46:08 +02:00
Thomas Haller
e216d5eac0 device: make UDI property construct-only 2017-05-19 09:46:08 +02:00
Thomas Haller
5eac18b58d device: fix setting device's UDI property
Fixes: e8139f56c2
2017-05-19 09:46:08 +02:00
Thomas Haller
aaefa2b07f wifi: fix check for PSK for new WPS credentials
src/devices/wifi/nm-device-wifi.c:1855:20: error: logical ‘or’ of collectively exhaustive tests is always true [-Werror=logical-op]
      if (psk_len >= 8 || psk_len <= 63) {
                       ^~

Fixes: 0eb7617504
2017-05-18 18:21:27 +02:00
Beniamino Galvani
1e78f50b8e device: fix crash in ip6_config_merge_and_apply()
nm_ip6_config_capture() returns NULL for slaves. Fixes the following:

 nm_ip6_config_new_cloned: assertion 'NM_IS_IP6_CONFIG (src)' failed

 #0 g_logv () at /lib64/libglib-2.0.so.0
 #1 g_log () at /lib64/libglib-2.0.so.0
 #2 nm_ip6_config_new_cloned (src=0x0) at src/nm-ip6-config.c:2272
 #3 ip6_config_merge_and_apply (self=self@entry=0x200d8f0, commit=commit@entry=1) at src/devices/nm-device.c:6192
 #4 nm_device_bring_up (self=self@entry=0x200d8f0, block=block@entry=1, no_firmware=no_firmware@entry=0x0) at src/devices/nm-device.c:10369
 #5 _hw_addr_set (self=self@entry=0x200d8f0, addr=addr@entry=0x2095ea0 "6A:1C:00:2A:68:7C", operation=operation@entry=0x64f8ba "set", detail=detail@entry=0x67369d "restore") at src/devices/nm-device.c:13225
 #6 nm_device_hw_addr_set (self=self@entry=0x200d8f0, addr=addr@entry=0x2095ea0 "6A:1C:00:2A:68:7C", detail=detail@entry=0x67369d "restore", set_permanent=set_permanent@entry=0) at src/devices/nm-device.c:13255
 #7 release_slave (device=0x200d8f0, slave=0x1ef2990, configure=<optimized out>) at src/devices/nm-device-bond.c:463
 #8 nm_device_master_release_one_slave (self=self@entry=0x200d8f0, slave=slave@entry=0x1ef2990, configure=1, reason=reason@entry=NM_DEVICE_STATE_REASON_CONNECTION_REMOVED) at src/devices/nm-device.c:2041
 #9 slave_state_changed (slave=0x1ef2990, slave_new_state=NM_DEVICE_STATE_DEACTIVATING, slave_old_state=NM_DEVICE_STATE_ACTIVATED, reason=NM_DEVICE_STATE_REASON_CONNECTION_REMOVED, self=0x200d8f0)
     at src/devices/nm-device.c:3366
 ...

Fixes: a21b8882cc
2017-05-17 09:46:22 +02:00
Beniamino Galvani
a21b8882cc device: update external configuration before commit
If the platform signaled that the external configuration changed (and
thus update_ipX_config() is scheduled) and we are doing a commit of
the new configuration, update priv->ext_ipX_config. Without this, the
commit will remove addresses added externally but not yet captured in
the external configuration.

https://bugzilla.redhat.com/show_bug.cgi?id=1449873
2017-05-16 11:37:41 +02:00
Beniamino Galvani
36e97f5d7b dhcp: don't add route to DHCP4 server
This basically reverts commit 31fe84e467 "core: Add host route for
DHCP4 server if outside assigned subnet (bgo #721767)" because the
additional route added by NM does more harm than good.

First, the code does not consider routes pushed by the server and thus
it can add a route conflicting with the ones from the network
administrator.

Second, there is no specification on what a DHCP client should do when
the server is not reachable via unicast, and adding arbitrary logic
into the client is likely to break things in specific cases. If
network administrators want to make the DHCP server reachable from a
client in a different subnet, they should push proper routes with the
lease.

In any case, if the DHCP server is not reachable through unicast,
before the lease expiration (after timeout T2) the client will resort
to broadcast and so there won't be any network disruption; the renewal
will only happen at a later time.

Fixes: 31fe84e467

https://bugzilla.redhat.com/show_bug.cgi?id=1448987
2017-05-16 11:37:11 +02:00