Commit Graph

21088 Commits

Author SHA1 Message Date
Francesco Giudici
378cbca6f7 build/trivial: normalize configure.ac formatting/spacing 2017-05-05 12:39:43 +02:00
Francesco Giudici
7a2c31a54a connectivity: fix typo in error message 2017-05-05 12:39:43 +02:00
Thomas Haller
4c0a377a7a device/firewall: merge branch 'th/firewall-apply-early-rh1445242'
https://bugzilla.redhat.com/show_bug.cgi?id=1445242
2017-05-05 12:15:15 +02:00
Thomas Haller
20ccbb97d5 device: track firewall state and reset zone during activation
nm_device_update_firewall_zone() would only reconfigure the firewall
zone when the device is fully activated. That means, while the device
is activating, changing the firewall zone is not working. Activation
might take a long time with DHCP, or with master devices waiting
for their slaves.

For example:

  nmcli connection add type team con-name t-team ifname i-team autoconnect no
  nmcli connection up t-team

Note how t-team/i-team is waiting for a slave device. During stage3,
we already set firewall.zone to default.

  nmcli connection modify t-team connection.zone external

Note how changing the firewall zone does not immidiately take
effect. Only later, during IP_CHECK state the firewall zone
is reset -- but only for devices with differing ip_ifindex.

https://bugzilla.redhat.com/show_bug.cgi?id=1445242
2017-05-05 12:14:14 +02:00
Thomas Haller
baa8b4029c device: fix changing firewall zone during _set_state_full()
For regular devices that don't have a separate ip_iface/ip_ifindex,
the ip_ifindex is left at zero. Hence, the condition is always
true and does not work as intended, resulting in setting the
firewall zone twice.

Fixes: 7cf5c326bc
2017-05-05 12:14:14 +02:00
Francesco Giudici
74dac5f516 nm-manager: try assuming connections on managed devices
Commit 850c97795 ("device: track system interface state in NMDevice")
introduced interface states for devices and prevented checking if a
connection should be assumed on already managed devices.
This prevented to properly manage the event of an ip configuration added
externally to NM to a managed but not (yet) activated device.

Fixes: 850c977953
(cherry picked from commit acf1067a45)
2017-05-04 17:12:03 +02:00
Francesco Giudici
acf1067a45 nm-manager: try assuming connections on managed devices
Commit 850c97795 ("device: track system interface state in NMDevice")
introduced interface states for devices and prevented checking if a
connection should be assumed on already managed devices.
This prevented to properly manage the event of an ip configuration added
externally to NM to a managed but not (yet) activated device.

Fixes: 850c977953
2017-05-04 16:30:51 +02:00
Beniamino Galvani
31e063fcb2 dhcp: merge branch 'bg/dhcp-full-hostname-rh1443437'
https://bugzilla.redhat.com/show_bug.cgi?id=1443437
2017-05-04 16:26:37 +02:00
Beniamino Galvani
cf5fab8f55 dhcp: allow FQDNs in ipv4.dhcp-hostname
If users wrote a FQDN in ipv4.dhcp-hostname presumably it's because
they really want to send the full value, not only the host part, so
let's send it as-is.

This obviously is a change in behavior, but only for users that have a
FQDN in ipv4.dhcp-hostname, where it's not clear if they really want the
domain to be stripped.

When the property is unset, we keep sending only the host part of the
system hostname to maintain backwards compatibility.

This commit aligns NM behavior to initscripts.
2017-05-04 16:25:06 +02:00
Beniamino Galvani
d286aa9dfa dhcp: simplify how hostname and FQDN are passed down to backends
Since they are mutually exclusive, pass a string and a boolean to
indicate whether we want to use the hostname or the FQDN option.
2017-05-04 16:19:45 +02:00
Beniamino Galvani
40dadc7ac4 device: fix behavior for assumed DHCP connections
When a DHCP connection is active and the DHCP server is temporarily
unreachable, we restart DHCP for some times before failing the
connection. From the user point of view, restarting NM (and thus
assuming the existing connection) should not change this behavior.

However, if NM is restarted while the server is temporarily down, at
the moment we immediately fail because we consider the DHCP
transaction our first try. Fix this by restoring the multiple tries
when we detect that DHCP was active before because the connection is
assumed.

(cherry picked from commit e3113fdc4b)
2017-05-04 11:26:19 +02:00
Beniamino Galvani
e3113fdc4b device: fix behavior for assumed DHCP connections
When a DHCP connection is active and the DHCP server is temporarily
unreachable, we restart DHCP for some times before failing the
connection. From the user point of view, restarting NM (and thus
assuming the existing connection) should not change this behavior.

However, if NM is restarted while the server is temporarily down, at
the moment we immediately fail because we consider the DHCP
transaction our first try. Fix this by restoring the multiple tries
when we detect that DHCP was active before because the connection is
assumed.
2017-05-04 11:18:55 +02:00
Francesco Giudici
5651f0cef6 device: add default route penalty only if concheck is enabled
If we don't have connection checking functionality just avoid adding
a penalty to the defaut route of newly activated connections.

(cherry picked from commit 2524a6f852)
2017-05-04 11:18:28 +02:00
Francesco Giudici
2524a6f852 device: add default route penalty only if concheck is enabled
If we don't have connection checking functionality just avoid adding
a penalty to the defaut route of newly activated connections.
2017-05-04 11:07:40 +02:00
Beniamino Galvani
aaaa35a89e device: let slaves wait in IP_CONFIG until master is ready
We call nm_device_activate_stage3_ipX_start() in various places,
e.g. after a carrier change or when a master enslaves a new device to
configure IP for the device. If the device is a slave in state
IP_CONFIG, this makes it transition to IP_CHECK, while it should stay
in IP_CONFIG until the master becomes ready. When the master is ready,
it will move slaves directly to SECONDARIES, skipping IP configuration
entirely.

(cherry picked from commit 41f6540afd)
2017-05-04 10:29:48 +02:00
Beniamino Galvani
41f6540afd device: let slaves wait in IP_CONFIG until master is ready
We call nm_device_activate_stage3_ipX_start() in various places,
e.g. after a carrier change or when a master enslaves a new device to
configure IP for the device. If the device is a slave in state
IP_CONFIG, this makes it transition to IP_CHECK, while it should stay
in IP_CONFIG until the master becomes ready. When the master is ready,
it will move slaves directly to SECONDARIES, skipping IP configuration
entirely.
2017-05-04 10:28:27 +02:00
Jonas Jonsson
f5d29e6f61 dhcp: dhclient: Allow unqualified fqdn.fqdn for DHCPv6
ISC dhclient will always append the zero label to the fqdn.fqdn option.

The dhcp-options(5) suggest that it's perfectly fine to have an
unqualified name.

"... This can be a fully-qualified domain name, or a single label. ..."

The ISC dhcpd will ignore this trailing zero label and do DDNS
regardless.

https://bugzilla.gnome.org/show_bug.cgi?id=761467
2017-05-03 09:46:45 +02:00
Thomas Haller
9573d60023 device: avoid integer overflow with route-metric penalty
(cherry picked from commit bd805b7e49)
2017-05-02 18:39:45 +02:00
Thomas Haller
bd805b7e49 device: avoid integer overflow with route-metric penalty 2017-05-02 18:37:48 +02:00
Thomas Haller
f1469558c0 policy: fix memleak in lookup_callback() and cancelling
When the operation is cancelled, we must not touch user_data. Note that
NM_POLICY_GET_PRIVATE() theoretically doesn't dereference the pointer
(does it?) but doing pointer arithmetic on a dangling pointer is a very
ugly thing to do.

And of course, the memleak.

Fixes: 5c716c8af8
Fixes: a2cdf63204
(cherry picked from commit 3215508293)
2017-05-02 18:24:53 +02:00
Thomas Haller
3215508293 policy: fix memleak in lookup_callback() and cancelling
When the operation is cancelled, we must not touch user_data. Note that
NM_POLICY_GET_PRIVATE() theoretically doesn't dereference the pointer
(does it?) but doing pointer arithmetic on a dangling pointer is a very
ugly thing to do.

And of course, the memleak.

Fixes: 5c716c8af8
Fixes: a2cdf63204
2017-05-02 18:24:16 +02:00
Beniamino Galvani
c030bd3049 dhcp: dhclient: fix timeout greater than 60 seconds
The default timeout in dhclient is 60 seconds; if a lease can't be
obtained during such interval, dhclient sends to NM a FAIL event and
then the IP method fails.

Thus, even if user specified a greater dhcp-timeout, NM terminated
DHCP after 60 seconds. Fix this by passing an explicit timeout to
dhclient.

(cherry picked from commit 82ef497cc9)
2017-05-02 15:31:48 +02:00
Beniamino Galvani
82ef497cc9 dhcp: dhclient: fix timeout greater than 60 seconds
The default timeout in dhclient is 60 seconds; if a lease can't be
obtained during such interval, dhclient sends to NM a FAIL event and
then the IP method fails.

Thus, even if user specified a greater dhcp-timeout, NM terminated
DHCP after 60 seconds. Fix this by passing an explicit timeout to
dhclient.
2017-05-02 15:30:53 +02:00
Thomas Haller
d67d12ebe1 libnm: fix comparison of pfm enum against zero
Fixes compiler warning

  comparison of unsigned enum expression < 0 is always false [-Werror,-Wtautological-compare]

Fixes: 6ef59b5b77
2017-04-28 19:28:03 +02:00
Thomas Haller
59805d8c59 ifcfg: merge branch 'th/ifcfg-enum' 2017-04-28 17:21:58 +02:00
Thomas Haller
6ef59b5b77 libnm: make NMSettingWirelessSecurity's PMF property signed
The PMF property is an GEnum, not GFlags. We only have the GObject
property NM_SETTING_WIRELESS_SECURITY_PMF as plain integer type
to allow for future extensions.

But commonly, enums are signed int, while flags are unsigned. Change
the property to be signed for consistency.
2017-04-28 17:20:02 +02:00
Thomas Haller
2c46b65923 ifcfg-rh: use cleanup attribute for error handling in reader
Drop some uses of "goto error". Instead, have the memory owned
by an auto variable and automatically release it via the cleanup
attribute.
2017-04-28 12:42:18 +02:00
Thomas Haller
f16ec61a01 ifcfg-rh: use svGetValueEnum() in reader 2017-04-28 12:31:45 +02:00
Thomas Haller
606497a4e9 ifcfg-rh: use svSetValueEnum() in writer 2017-04-28 12:21:17 +02:00
Thomas Haller
7298798a64 ifcfg-rh: add svGetValueEnum() 2017-04-28 12:21:17 +02:00
Thomas Haller
e81bdf19fa ifcfg-rh: add svSetValueEnum() 2017-04-28 12:21:10 +02:00
Beniamino Galvani
a7fdf09848 wifi: merge branch 'bg/wifi-pmf-bgo748367-pt2'
Per-connection configurable PMF (802.11w) support.

https://bugzilla.gnome.org/show_bug.cgi?id=748367
2017-04-28 09:59:34 +02:00
Beniamino Galvani
acb70d84f9 supplicant: configure PMF for each connection
Now that we have a PMF connection property, get rid of the previous
code to globally enable/disable PMF and use the 'ieee80211w'
configuration option for each configured network when the supplicant
supports it.
2017-04-28 09:46:06 +02:00
Beniamino Galvani
53f3113389 ifcfg-rh: support the wifi.pmf property 2017-04-28 09:46:06 +02:00
Beniamino Galvani
6181f41d8d cli: support for wifi-sec.pmf property 2017-04-28 09:46:06 +02:00
Beniamino Galvani
60a3809815 libnm-core: add pmf property to wireless-security setting
Add a 'pmf' property to enable or disable Protected Management Frames
(802.11w) for the connection.
2017-04-28 09:46:05 +02:00
Thomas Haller
1f40bb13cf shared: cast from/to argument to unsigned for GFlags in _nm_utils_enum_get_values() 2017-04-27 18:01:58 +02:00
Thomas Haller
da5a6534bc cli: fix _values_fcn_gobject_enum() for flag types
For flags, the integer is cast to "unsigned", hence, the min/max
range must be different.

Fixes: f53218ed7c
2017-04-27 17:59:51 +02:00
Thomas Haller
20ef91879c ifcfg-rh/tests: fix test_write_unknown() after change svGetValue() for invalid values
Fixes: daaa741a3d
(cherry picked from commit 43c3501f97)
2017-04-27 17:56:07 +02:00
Thomas Haller
43c3501f97 ifcfg-rh/tests: fix test_write_unknown() after change svGetValue() for invalid values
Fixes: daaa741a3d
2017-04-27 17:52:25 +02:00
Lubomir Rintel
d21b21eba1 ifcfg-rh: preserve the archaic NETMASK key
py-kickstart writes this out and there apparently are users using this.
Let them have one less problem.

Co-Authored-By: Thomas Haller <thaller@redhat.com>

https://bugzilla.redhat.com/show_bug.cgi?id=1445414
(cherry picked from commit dbe0659ba419a77ad5ff2340bfc93c71a1bec61a)
2017-04-27 17:26:26 +02:00
Lubomir Rintel
40b39844fa ifcfg-rh: preserve the archaic BOOTPROTO=static form
py-kickstart writes this out. Okay -- we don't care on read and it makes
sense when there actually are addresses.

https://bugzilla.redhat.com/show_bug.cgi?id=1445414
(cherry picked from commit aa50dfc236b3806c6d7161cdea450655a1268f0d)
2017-04-27 17:26:26 +02:00
Thomas Haller
8d2ceac897 ifcfg-rh: treat a wrongly quoted value like empty string
For example, if you want to test whether a value is present and
reset it to a different value (only if it is present), it would
be reasonable to do

    if (svGetValue (s, key, &tmp)) {
        svSetValue (s, key, "new-value");
        g_free (tmp);
    }

Without this patch, you could not be sure that key is not
set to some inparsable value, which svWriteFile() would then
write out as empty string.

Have invalid values returned by svGetValue() as empty string.
That is how svWriteFile() treats them.

(cherry picked from commit 6470bed5f1ad25e20df14b333f1b083c9b390ece)
2017-04-27 17:26:26 +02:00
Lubomir Rintel
9e668595fe ifcfg-rh: preserve the archaic NETMASK key
py-kickstart writes this out and there apparently are users using this.
Let them have one less problem.

Co-Authored-By: Thomas Haller <thaller@redhat.com>

https://bugzilla.redhat.com/show_bug.cgi?id=1445414
2017-04-27 17:24:23 +02:00
Lubomir Rintel
38fbcdf0e5 ifcfg-rh: preserve the archaic BOOTPROTO=static form
py-kickstart writes this out. Okay -- we don't care on read and it makes
sense when there actually are addresses.

https://bugzilla.redhat.com/show_bug.cgi?id=1445414
2017-04-27 17:24:23 +02:00
Lubomir Rintel
67fab76bf3 ifcfg: use svSetValueInt64() wherever appropriate
With a little help from coccinelle:

  @@
  identifier string;
  expression value, ifcfg, key;
  @@
  (
  - string = g_strdup_printf ("%u", value);
  |
  - string = g_strdup_printf ("%d", value);
  )
  - svSetValueStr (ifcfg, key, string);
  - g_free (string);
  + svSetValueInt64 (ifcfg, key, value);

Applied with:

  spatch --sp-file nm_platform_get.cocci --in-place --smpl-spacing --dir src

Manually fixed up style issues & dropped unused variables.
2017-04-27 17:24:23 +02:00
Thomas Haller
daaa741a3d ifcfg-rh: treat a wrongly quoted value like empty string
For example, if you want to test whether a value is present and
reset it to a different value (only if it is present), it would
be reasonable to do

    if (svGetValue (s, key, &tmp)) {
        svSetValue (s, key, "new-value");
        g_free (tmp);
    }

Without this patch, you could not be sure that key is not
set to some inparsable value, which svWriteFile() would then
write out as empty string.

Have invalid values returned by svGetValue() as empty string.
That is how svWriteFile() treats them.
2017-04-27 17:24:23 +02:00
Lubomir Rintel
39594852ba ifcfg: remove dead code
Unused since 0c6349c62.
2017-04-27 17:24:19 +02:00
Thomas Haller
cfd8cf54df core: make dad_counter argument guint32 type
The dad_counter is hashed into the resulting address. Since we
want the hashing to be independent of the architecture, we always
hash 32 bit of dad_counter. Make the dad_counter argument of
type guint32 for consistency.

In practice this has no effect because:
  - for all our (current!) architectues, guint is the same as
    guint32.
  - all callers of nm_utils_ipv6_addr_set_stable_privacy() keep
    their dad-counter argument as guint8, so they never even pass
    numbers larger then 255.
  - nm_utils_ipv6_addr_set_stable_privacy() limits dad_counter
    further against RFC7217_IDGEN_RETRIES.

(cherry picked from commit 951e5f5bf8)
2017-04-27 17:21:36 +02:00
Thomas Haller
9f7433f869 core: avoid generating reserved IPv6 interface identifiers
https://tools.ietf.org/html/rfc7217 says:

  The resulting Interface Identifier SHOULD be compared against the
  reserved IPv6 Interface Identifiers [RFC5453] [IANA-RESERVED-IID]
  and against those Interface Identifiers already employed in an
  address of the same network interface and the same network
  prefix.  In the event that an unacceptable identifier has been
  generated, this situation SHOULD be handled in the same way as
  the case of duplicate addresses (see Section 6).

In case of conflict, this suggests to create a new address incrementing
the DAD counter, etc. Don't do that. If we generate an address of the
reserved region, just rehash it right away. Note that the actual address
anyway appears random, so this re-hashing is just as good as incrementing
the DAD counter and going through the entire process again.

Note that now we no longer generate certain addresses like we did
previously. But realize that we now merely reject (1 + 16777216 + 128)
addresses out of 2^64. So, the likelyhood of of a user accidentally
generating an address that is suddenly rejected is in the order of
10e-13 (1 / 1,099,503,173,697). Which is not astronomically, but still
extreeeemely unlikely.

Also, the whole process is anyway build on the idea that somebody else
might generate conflicting addresses (DAD). It means, there was always
the extremely tiny chance that the address you generated last time is
suddenly taken by somebody else. So, this change appears to a user
like these reserved addresses are now claimed by another (non existing)
host and a different address gets generated -- business as usual, as
far as SLAAC is concerned.

(cherry picked from commit f15c4961ad)
2017-04-27 17:21:35 +02:00