Commit graph

5865 commits

Author SHA1 Message Date
Lubomir Rintel
2e99ddb7a7 device: unschedule ip update if we just scheduled ip configuration
It would subtract the configuration from device confguration that's not yet
applied. This a the race where the loose the address while activating a
connection that has both IPv6 and IPv4 configuration.

Fixes: 557667df12

https://bugzilla.gnome.org/show_bug.cgi?id=746066
2015-03-13 08:21:57 +01:00
Lubomir Rintel
a772fde00d trivial: move nm_device_queued_ip_config_change_clear()
Just move it upwards, we'll need it in
nm_device_activate_schedule_ip4_config_result().
2015-03-13 08:21:45 +01:00
Dan Williams
d2de83e0f7 device: don't assume valid ip4/ip6 config in nm_device_get_ipX_route_metric()
These functions will sometimes get called on updates to the device's IP
config due to external changes, or when addresses get flushed from the
device when activating it.  If the device is a slave device, then at
this point its NMConnection won't have an IP settings.  Suppress the
warning that gets printed when s_ip == NULL, because it's expected.
2015-03-12 15:04:16 -05:00
Dan Williams
1dae47e9cc device: fix handling if DHCP hostname for configure-and-quit
Fixes: 5149fd120d
2015-03-12 14:38:01 -05:00
Thomas Haller
c9a8764ad2 keyfile: support writing certificates as blob inside the keyfile
keyfile should become our main import/export format. It is desirable,
that a keyfile can contain every aspect of a connection.

For blob certificates, the writer in core daemon would always write
them to a file and convert the scheme to path.
This behavior is not great for a (hyptetical) `nmcli connection export`
command because it would have to export them somehow outside of keyfile,
e.g. by writing them to temporary files.

Instead, if the write handler does not handle a certificate, use a
default implementation in nm_keyfile_write() which adds the blob inside
the keyfile.

Interestingly, keyfile reader already supported reading certificate
blobs. But this legacy format accepts the blob as arbitrary
binary without marking the format and without scheme prefix.
Instead of writing the binary data directly, write it with a new
uri scheme "data:;base64," and encode it in base64.

Also go through some lengths to make sure that whatever path
keyfile plugin writes, can be read back again. That is, because
keyfile writer preferably writes relative paths without prefix.
Add nm_keyfile_detect_unqualified_path_scheme() to encapsulate
the detection of pathnames without file:// prefix and use it to
check whether the path name must be fully qualified.
2015-03-12 18:16:58 +01:00
Thomas Haller
57a432fa8a keyfile: refactor to use reading and writing of keyfile from libnm-core 2015-03-12 18:12:26 +01:00
Thomas Haller
e82293ebf6 libnm: move _nm_utils_uuid_generate_from_strings() from src/ to libnm-core/ 2015-03-12 18:12:26 +01:00
Thomas Haller
67510e323a trivial: rename nm_utils_uuid_generate_from_strings() to _nm_utils_uuid_generate_from_strings() 2015-03-12 18:12:26 +01:00
Thomas Haller
c5d23737fd libnm: move _nm_utils_ascii_str_to_int64() from src/ to libnm-core/ 2015-03-12 18:12:26 +01:00
Thomas Haller
093f6d477b trivial: rename nm_utils_ascii_str_to_int64() to _nm_utils_ascii_str_to_int64() 2015-03-12 18:12:26 +01:00
Thomas Haller
b66deb67fa keyfile: remove unused struct member ObjectType.privkey_pw_prop in writer.c 2015-03-12 18:12:26 +01:00
Thomas Haller
f430774ca0 keyfile: handle invalid integer list in keyfile reader get_bytes()
nm_keyfile_plugin_kf_get_integer_list() should always set
@length to zero when returning no integer list. So, this
is probably correct. Still, just to be explicit, anticipate
and handle a missing @tmp_list.
2015-03-12 18:12:26 +01:00
Thomas Haller
7b6759b764 keyfile: make reader more strict in handle_as_path()
When interpreting a blob as filename, ensure that it contains
no NUL character (except the last char).
2015-03-12 18:12:26 +01:00
Thomas Haller
1e4612e476 keyfile: add code comment to cert_writer() and downgrade assertion to g_critical() 2015-03-12 18:12:25 +01:00
Thomas Haller
65729cb740 route-manager: fix memleaks in nm_route_manager_ip4_route_sync()
Fixes: 4c3ba29b40
2015-03-12 13:51:06 +01:00
Dan Williams
a5891299b9 core: quit if manager startup completed before starting the mainloop 2015-03-11 09:17:01 -05:00
Dan Williams
fce2fa57a5 wifi: fix recognition of AP RSN capabilities
Stupid C&P error made everything look like WPA1.

Fixes: 59c8192b22
2015-03-10 13:47:36 -05:00
Dan Williams
e5e0fa566b supplicant: disconnect properties handler on dispose
The supplicant interface's proxy may outlive the interface object
itself, so we must ensure that all signal handlers are disconnected.
Fixes a crash on suspend/resume.

Fixes: 59c8192b22
2015-03-10 08:37:40 -05:00
Lubomir Rintel
7ba2a058f2 nm-device: avoid improper IPv6 MTU configuration
Ensure it's always (before address configuration starts and on updates) >= 1280
and not higher than the device MTU.
2015-03-09 18:21:01 +01:00
Lubomir Rintel
1bc202af02 nm-device: move device MTU setting from IP4Config to NMDevice
Just a refactoring, no functional change. This will make it easier to
coordinate the device MTU with IPv6 MTU.
2015-03-09 18:21:01 +01:00
Lubomir Rintel
4d6bf4eef3 nm-device: set ipv6 mtu at config commit time
Just a refactoring, doesn't make any actual difference. It is consistent with
IPv4 and will make it easier to implement a policy to recover from incorrect
MTUs settings.
2015-03-09 18:21:01 +01:00
Lubomir Rintel
6c5d93b847 route-manager: refactor: a readability improvement 2015-03-09 14:13:02 +01:00
Thomas Haller
02130cc157 supplicant: remove unused variable 2015-03-04 16:42:45 +01:00
Thomas Haller
2e788fac45 dhcp: sd-dhcp6-client: delay setting the DUID and don't fail constructor
reimport systemd dhcp code to bring patch cc22955cfefb4bd6e7a135f1ec95fb5a07ba9ce3.

    sd-dhcp6-client: delay setting the DUID and don't fail constructor

    sd_dhcp6_client_new() tried to set the DUID based on the machine id.
    If the host has no /etc/machine-id, the constructor would fail
    making it impossible to create an sd_dhcp6_client instance.

    Relax this and create a DUID only later as needed. This way a caller
    caller can workaround a missing machine-id file and set a DUID of his
    choosing via sd_dhcp6_client_set_duid().

Conflicts:
	src/dhcp-manager/systemd-dhcp/src/libsystemd-network/sd-dhcp6-client.c
2015-03-04 11:52:26 +01:00
Thomas Haller
bd3dc1f7f3 dhcp: update systemd DHCP code
This is a direct dump from systemd git on 2015-03-04, git commit
cc22955cfefb4bd6e7a.  Only relevant files were included.

    SYSTEMD_DIR=../systemd
    COMMIT=cc22955cfefb4bd6e7a135f1ec95fb5a07ba9ce3

    (
       cd "$SYSTEMD_DIR"
       git checkout "$COMMIT"
       git reset --hard
       git clean -fdx
    )
    /bin/cp "$SYSTEMD_DIR"/src/libsystemd/sd-id128/sd-id128.c ./src/dhcp-manager/systemd-dhcp/src/libsystemd/sd-id128/sd-id128.c
    /bin/cp "$SYSTEMD_DIR"/src/libsystemd-network/dhcp-identifier.c ./src/dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp-identifier.c
    /bin/cp "$SYSTEMD_DIR"/src/libsystemd-network/dhcp-identifier.h ./src/dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp-identifier.h
    /bin/cp "$SYSTEMD_DIR"/src/libsystemd-network/dhcp-internal.h ./src/dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp-internal.h
    /bin/cp "$SYSTEMD_DIR"/src/libsystemd-network/dhcp-lease-internal.h ./src/dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp-lease-internal.h
    /bin/cp "$SYSTEMD_DIR"/src/libsystemd-network/dhcp-network.c ./src/dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp-network.c
    /bin/cp "$SYSTEMD_DIR"/src/libsystemd-network/dhcp-option.c ./src/dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp-option.c
    /bin/cp "$SYSTEMD_DIR"/src/libsystemd-network/dhcp-packet.c ./src/dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp-packet.c
    /bin/cp "$SYSTEMD_DIR"/src/libsystemd-network/dhcp-protocol.h ./src/dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp-protocol.h
    /bin/cp "$SYSTEMD_DIR"/src/libsystemd-network/dhcp6-internal.h ./src/dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp6-internal.h
    /bin/cp "$SYSTEMD_DIR"/src/libsystemd-network/dhcp6-lease-internal.h ./src/dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp6-lease-internal.h
    /bin/cp "$SYSTEMD_DIR"/src/libsystemd-network/dhcp6-network.c ./src/dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp6-network.c
    /bin/cp "$SYSTEMD_DIR"/src/libsystemd-network/dhcp6-option.c ./src/dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp6-option.c
    /bin/cp "$SYSTEMD_DIR"/src/libsystemd-network/dhcp6-protocol.h ./src/dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp6-protocol.h
    /bin/cp "$SYSTEMD_DIR"/src/libsystemd-network/network-internal.c ./src/dhcp-manager/systemd-dhcp/src/libsystemd-network/network-internal.c
    /bin/cp "$SYSTEMD_DIR"/src/libsystemd-network/network-internal.h ./src/dhcp-manager/systemd-dhcp/src/libsystemd-network/network-internal.h
    /bin/cp "$SYSTEMD_DIR"/src/libsystemd-network/sd-dhcp-client.c ./src/dhcp-manager/systemd-dhcp/src/libsystemd-network/sd-dhcp-client.c
    /bin/cp "$SYSTEMD_DIR"/src/libsystemd-network/sd-dhcp-lease.c ./src/dhcp-manager/systemd-dhcp/src/libsystemd-network/sd-dhcp-lease.c
    /bin/cp "$SYSTEMD_DIR"/src/libsystemd-network/sd-dhcp6-client.c ./src/dhcp-manager/systemd-dhcp/src/libsystemd-network/sd-dhcp6-client.c
    /bin/cp "$SYSTEMD_DIR"/src/libsystemd-network/sd-dhcp6-lease.c ./src/dhcp-manager/systemd-dhcp/src/libsystemd-network/sd-dhcp6-lease.c
    /bin/cp "$SYSTEMD_DIR"/src/shared/async.h ./src/dhcp-manager/systemd-dhcp/src/shared/async.h
    /bin/cp "$SYSTEMD_DIR"/src/shared/fileio.c ./src/dhcp-manager/systemd-dhcp/src/shared/fileio.c
    /bin/cp "$SYSTEMD_DIR"/src/shared/fileio.h ./src/dhcp-manager/systemd-dhcp/src/shared/fileio.h
    /bin/cp "$SYSTEMD_DIR"/src/shared/list.h ./src/dhcp-manager/systemd-dhcp/src/shared/list.h
    /bin/cp "$SYSTEMD_DIR"/src/shared/log.h ./src/dhcp-manager/systemd-dhcp/src/shared/log.h
    /bin/cp "$SYSTEMD_DIR"/src/shared/macro.h ./src/dhcp-manager/systemd-dhcp/src/shared/macro.h
    /bin/cp "$SYSTEMD_DIR"/src/shared/path-util.c ./src/dhcp-manager/systemd-dhcp/src/shared/path-util.c
    /bin/cp "$SYSTEMD_DIR"/src/shared/path-util.h ./src/dhcp-manager/systemd-dhcp/src/shared/path-util.h
    /bin/cp "$SYSTEMD_DIR"/src/shared/refcnt.h ./src/dhcp-manager/systemd-dhcp/src/shared/refcnt.h
    /bin/cp "$SYSTEMD_DIR"/src/shared/siphash24.c ./src/dhcp-manager/systemd-dhcp/src/shared/siphash24.c
    /bin/cp "$SYSTEMD_DIR"/src/shared/siphash24.h ./src/dhcp-manager/systemd-dhcp/src/shared/siphash24.h
    /bin/cp "$SYSTEMD_DIR"/src/shared/socket-util.h ./src/dhcp-manager/systemd-dhcp/src/shared/socket-util.h
    /bin/cp "$SYSTEMD_DIR"/src/shared/sparse-endian.h ./src/dhcp-manager/systemd-dhcp/src/shared/sparse-endian.h
    /bin/cp "$SYSTEMD_DIR"/src/shared/strv.c ./src/dhcp-manager/systemd-dhcp/src/shared/strv.c
    /bin/cp "$SYSTEMD_DIR"/src/shared/strv.h ./src/dhcp-manager/systemd-dhcp/src/shared/strv.h
    /bin/cp "$SYSTEMD_DIR"/src/shared/time-util.c ./src/dhcp-manager/systemd-dhcp/src/shared/time-util.c
    /bin/cp "$SYSTEMD_DIR"/src/shared/time-util.h ./src/dhcp-manager/systemd-dhcp/src/shared/time-util.h
    /bin/cp "$SYSTEMD_DIR"/src/shared/utf8.c ./src/dhcp-manager/systemd-dhcp/src/shared/utf8.c
    /bin/cp "$SYSTEMD_DIR"/src/shared/utf8.h ./src/dhcp-manager/systemd-dhcp/src/shared/utf8.h
    /bin/cp "$SYSTEMD_DIR"/src/shared/util.c ./src/dhcp-manager/systemd-dhcp/src/shared/util.c
    /bin/cp "$SYSTEMD_DIR"/src/shared/util.h ./src/dhcp-manager/systemd-dhcp/src/shared/util.h
    /bin/cp "$SYSTEMD_DIR"/src/shared/unaligned.h ./src/dhcp-manager/systemd-dhcp/src/shared/unaligned.h
    /bin/cp "$SYSTEMD_DIR"/src/shared/in-addr-util.c ./src/dhcp-manager/systemd-dhcp/src/shared/in-addr-util.c
    /bin/cp "$SYSTEMD_DIR"/src/shared/in-addr-util.h ./src/dhcp-manager/systemd-dhcp/src/shared/in-addr-util.h
    /bin/cp "$SYSTEMD_DIR"/src/systemd/_sd-common.h ./src/dhcp-manager/systemd-dhcp/src/systemd/_sd-common.h
    /bin/cp "$SYSTEMD_DIR"/src/systemd/sd-dhcp-client.h ./src/dhcp-manager/systemd-dhcp/src/systemd/sd-dhcp-client.h
    /bin/cp "$SYSTEMD_DIR"/src/systemd/sd-dhcp-lease.h ./src/dhcp-manager/systemd-dhcp/src/systemd/sd-dhcp-lease.h
    /bin/cp "$SYSTEMD_DIR"/src/systemd/sd-dhcp6-client.h ./src/dhcp-manager/systemd-dhcp/src/systemd/sd-dhcp6-client.h
    /bin/cp "$SYSTEMD_DIR"/src/systemd/sd-dhcp6-lease.h ./src/dhcp-manager/systemd-dhcp/src/systemd/sd-dhcp6-lease.h
    /bin/cp "$SYSTEMD_DIR"/src/systemd/sd-event.h ./src/dhcp-manager/systemd-dhcp/src/systemd/sd-event.h
    /bin/cp "$SYSTEMD_DIR"/src/systemd/sd-id128.h ./src/dhcp-manager/systemd-dhcp/src/systemd/sd-id128.h
2015-03-04 11:45:01 +01:00
Dan Williams
231b0390a5 vpn: convert NMVpnConnection <-> VPN service communication to GDBus (bgo #745307)
Of special note is the new D-Bus rule to allow root to talk to
org.freedesktop.NetworkManager.VPN.Plugin, without which NetworkManager
would not hear signals from the VPN plugins.  Oddly, this worked
fine with dbus-glib...

https://bugzilla.gnome.org/show_bug.cgi?id=745307
2015-03-03 15:04:46 -06:00
Dan Williams
9adbc05e1b supplicant: remove unused nm-call-store.c/.h 2015-03-03 14:56:26 -06:00
Dan Williams
59c8192b22 supplicant: convert interface/config to GDBus 2015-03-03 14:56:25 -06:00
Dan Williams
47fe1b3196 supplicant: clean up some whitespace 2015-03-03 14:56:24 -06:00
Dan Williams
7ed2d7a809 supplicant: make NMSupplicantInterface independent of NMSupplicantManager
The Interface held a reference to the manager to listen for the 'available'
signal.  Instead of that, let's make the child unaware of the master to
keep the inheritance cleaner.
2015-03-03 14:56:24 -06:00
Dan Williams
0e8f5b2e57 supplicant: clean up NMSupplicantInterface::dispose() 2015-03-03 14:56:24 -06:00
Dan Williams
9f5f141100 supplicant: convert NMSupplicantManager to GDBus 2015-03-03 14:56:24 -06:00
Dan Williams
742b28fb1f supplicant: clean up NMSupplicantManager::dispose() 2015-03-03 14:56:23 -06:00
Thomas Haller
0681b625fb dhcp: revert "remove local modifications initializing cleanup variables"
rpmbuild buils NM with -fexceptions, which causes -Wmaybe-uninitialized
warnings for auto variables that have a cleanup function.

Maybe we should not build RPM packages with -fexceptions,
but anyway, for now just fix the build.

This reverts partly commit 4a58425dbf
and adds more fixes of uninitialized variables.
2015-03-03 14:09:32 +01:00
Thomas Haller
117cb022b1 dhcp: add prefix to logging lines from systemd library 2015-03-03 11:19:22 +01:00
Thomas Haller
1391bdfa61 dhcp: avoid compilation error in macro.h due to undefined __STDC_VERSION__ variable for -std=gnu99
systemd compiles with -std=gnu99, while we compile our sources with
-std=gnu89. Hence __STDC_VERSION__ is not defined.

As we define -std=gnu98 as CFLAGS with --enable-more-warnings, we cannot
overwrite it via libsystemd_dhcp_la_CFLAGS because the (user provided)
CFLAGS takes precedence.
2015-03-03 11:19:22 +01:00
Thomas Haller
2dcb097e99 dhcp: include sys/resource.h in nm-sd-adapt.h
As we don't provide "missing.h" header from systemd,
we lack some includes. Include <sys/resource.h> in nm-sd-adapt.h
for struct rlimit.
2015-03-03 11:19:22 +01:00
Thomas Haller
fd31714121 dhcp: include net/if_arp.h in nm-sd-adapt.h
sd-dhcp6-client.c uses ARPHRD_ETHER and more from net/if_arp.h.
In upstream systemd code, that header is included indirectly via
udev.h. As we don't include udev.h, include net/if_arp.h
directly in the adapter.
2015-03-03 11:19:22 +01:00
Thomas Haller
974546d9c9 dhcp: remove sd_dhcp6_client_set_ifname() function
This function was added to inject the ifname to the dhcp6 client.
As dhcp_identifier_set_iaid() now looks up the name itself by calling
if_indextoname(), this is no longer needed.
2015-03-03 11:19:22 +01:00
Thomas Haller
9f2f751349 dhcp: add systemd's dhcp-identifier.c for dhcp_identifier_set_duid_en()
Also patch dhcp_identifier_set_iaid() to get the ifname via
if_indextoname(), instead of udev.

This also makes our local modification sd_dhcp6_client_set_ifname()
obsolete, which will be removed next.
2015-03-03 11:18:12 +01:00
Thomas Haller
c140f4599d dhcp: add systemd's sd-id128.c for sd_id128_get_machine() 2015-03-03 11:13:51 +01:00
Thomas Haller
887a1ab397 dhcp: add systemd's path-util.c for path_kill_slashes()
tempfn_xxxxxx() now uses path_kill_slashes(). Add path-util.c
from systemd source to provide it.
2015-03-03 11:13:51 +01:00
Thomas Haller
7d440b7006 dhcp: add systemd's 'log.h' to provide logging macros
The 'log.h' header from systemd implements most logging commands based on a
few fundamental logging commands. Reuse 'log.h' for most parts and let the
adapter only redefine the necessary commands.
2015-03-03 11:13:51 +01:00
Thomas Haller
2d860b3f05 dhcp: comment-out unused systemd utility functions 2015-03-03 11:13:51 +01:00
Thomas Haller
22afaab1c5 dhcp: comment-in now needed string_table_lookup() function in util.c 2015-03-03 11:13:51 +01:00
Thomas Haller
cdd71569b0 dhcp: comment-in now needed filename_is_valid() function in util.c 2015-03-03 11:13:51 +01:00
Thomas Haller
4a58425dbf dhcp: remove local modifications initializing cleanup variables
I cannot reproduce any compiler warnings with these changes.
I think it is desirable, that our version of the code is
as similar as possible to the upstream systemd code.
Undo these local modifications.
2015-03-03 11:13:51 +01:00
Thomas Haller
746d0f544c dhcp/trivial: remove unused fixes to our copy of the systemd code
Make our copy more similar to what systemd has by removing
local changes that are unnecessary.

These changes don't affect the build, because the code is excluded
with #if 0.
2015-03-03 11:13:50 +01:00
Thomas Haller
d568e539a6 dhcp/trivial: remove code comment
dcbw added a comment line and submitted the patch to systemd.
The patch was merged without the comment. Remove it also from our
version, to make the file more similar to what systemd has.
2015-03-03 11:13:50 +01:00
Thomas Haller
7afb63ca34 dhcp: merge branch 'master' into th/systemd-dhcp-integration
Only basic merging. The result does not yet compile.

https://bugzilla.gnome.org/show_bug.cgi?id=742719

Conflicts:
	src/dhcp-manager/systemd-dhcp/src/libsystemd-network/dhcp-packet.c
	src/dhcp-manager/systemd-dhcp/src/libsystemd-network/network-internal.c
	src/dhcp-manager/systemd-dhcp/src/libsystemd-network/network-internal.h
	src/dhcp-manager/systemd-dhcp/src/libsystemd-network/sd-dhcp-lease.c
	src/dhcp-manager/systemd-dhcp/src/libsystemd-network/sd-dhcp6-client.c
	src/dhcp-manager/systemd-dhcp/src/shared/macro.h
	src/dhcp-manager/systemd-dhcp/src/shared/strv.c
	src/dhcp-manager/systemd-dhcp/src/shared/util.c
	src/dhcp-manager/systemd-dhcp/src/shared/util.h
	src/dhcp-manager/systemd-dhcp/src/systemd/sd-dhcp6-client.h
2015-03-03 11:13:41 +01:00