Commit graph

6734 commits

Author SHA1 Message Date
Thomas Haller
320f454e9f core: use NM_UTILS_ERROR_CANCELLED_DISPOSING error reason 2015-09-25 10:34:02 +02:00
Thomas Haller
44f3f18797 core: add NM_UTILS_ERROR 2015-09-25 10:34:02 +02:00
Jiří Klimeš
eecb4c46cc modem-broadband: update modem's supported-ip-families (rh #1263959)
If SIM in a modem is locked, ModemManager can't initialize SupportedIpFamilies
and NetworkManager will set the property to 0. ModemManager then updates the
property after the modem is unlocked, but NetworkManager did not watch changes
to the property. And that resulted in a connection failure:
(ttyUSB1): Failed to connect 'O2 Internet': Connection requested IPv4 but IPv4 is unsuported by the modem.
(ttyUSB1): device state change: prepare -> failed (reason 'modem-init-failed') [40 120 28]

https://bugzilla.redhat.com/show_bug.cgi?id=1263959
2015-09-25 10:18:38 +02:00
Thomas Haller
401a2eb834 systemd: avoid potential crash due to uncanceled timers in client_receive_advertise()
Got a crash with unknown reason on nm-1-0 branch. It's unclear why,
but the reason could be that a lease in client_receive_advertise()
was cleared, but not its timers.

Backtrace from nm-1-0 branch (note that the systemd code where the crash
happend is different, but similar):

    #0  sd_event_source_unref (s=0xf5c007e8fb894853) at dhcp-manager/systemd-dhcp/nm-sd-adapt.c:53
    #1  0x0000555555682340 in client_timeout_t1 (s=<optimized out>, usec=<optimized out>, userdata=0x5555559f5240)
        at dhcp-manager/systemd-dhcp/src/libsystemd-network/sd-dhcp6-client.c:451
    #2  0x00005555556a078f in time_ready (source=0x5555559f3c20) at dhcp-manager/systemd-dhcp/nm-sd-adapt.c:146
    #3  0x00007ffff4a481b3 in g_timeout_dispatch () from /lib64/libglib-2.0.so.0
    #4  0x00007ffff4a4779a in g_main_context_dispatch () from /lib64/libglib-2.0.so.0
    #5  0x00007ffff4a47ae8 in g_main_context_iterate.isra.24 () from /lib64/libglib-2.0.so.0
    #6  0x00007ffff4a47dba in g_main_loop_run () from /lib64/libglib-2.0.so.0
    #7  0x0000555555597073 in main (argc=1, argv=0x7fffffffe2b8) at main.c:512

Equivalent upstream systemd patch:
  https://github.com/systemd/systemd/pull/1332
  f89087272b

https://bugzilla.redhat.com/show_bug.cgi?id=1260727
2015-09-24 10:50:54 +02:00
Thomas Haller
ca00c146d4 systemd/adapt: update logging prefix for systemd log_internal()
We used to prefix messages from systemd with "sd-dhcp". Since we no
longer use the systemd code only for DHCP, change the prefix to
"libsystemd".
2015-09-23 16:09:43 +02:00
Thomas Haller
2d2d742cf1 systemd/adapt: refactor sd_event_source to use a union for holding mutually exclusive fields
sd_event_source is either used for sd_event_add_io() or sd_event_add_time().
Depending on the use, different fields of the struct are relevant. Refactor
the struct to have a union.

This reduces the size of the struct, but more importantly, it makes it
clear which fields are used in which context.
2015-09-23 16:09:43 +02:00
Thomas Haller
02c51d4231 systemd/adapt: assert that a @source argument is passed to sd_event_add_time()
Systemd supports omitting the output source argument. In this case,
the created event source is floating and the reference count
is handled properly.

We have however no callers that make use of that functionality, so
instead of implementing floating references, assert that we don't
need it.

This isn't a change in behavior, because previously the could would just
SEGFAULT if a caller didn't want to take ownership of the created event.
2015-09-23 16:09:43 +02:00
Thomas Haller
9901047ae3 systemd/adapt: fix potential crash invoking sd_event_source callbacks
It is common that the callbacks unref the event source. Hence we must
ensure that the @source stays alive until the callback returns.
2015-09-23 16:09:43 +02:00
Thomas Haller
fb0e87be39 systemd/adapt: use slice-allocator for struct sd_event_source 2015-09-23 16:09:43 +02:00
Thomas Haller
41917a52c0 systemd/adapt: refactor creation of struct sd_event_source 2015-09-23 16:09:43 +02:00
Thomas Haller
d6370d09e6 logging: coerce negative error values to positive errno
Especially systemd, which makes use of the error argument for logging, likes
to represent errors as negative numbers. We hence must invert a negative error
code to get the real errno.
2015-09-23 16:09:43 +02:00
Jiří Klimeš
94bbe7465f supplicant: adjust fragment_size according to MTU (bgo #755145)
NetworkManager set wpa_supplicant's fragment_size option to 1300. But if MTU
was lower, wpa_supplicant failed with "l2_packet_send - sendto: Message too
long" due to fragmentation of EAP-TLS or EAP-PEAP packets.

Actually, MTU has to be 14 bytes bigger than the "fragment_size" parameter.

Ideally, wpa_supplicant would take MTU in the account and adjust the
fragmentation limit accordingly. See discussion in
http://lists.shmoo.com/pipermail/hostap/2015-August/033546.html

https://bugzilla.gnome.org/show_bug.cgi?id=755145
2015-09-23 12:41:11 +02:00
Beniamino Galvani
d7b72b2a3e dns-manager: fix DNS options syntax in resolv.conf
Fixes: e7ff906f91
2015-09-22 20:43:08 +02:00
Jiří Klimeš
85d7dc1a0f manager: cleanup NMRfkillManager in dispose()
Fixes: b15fb8641e
2015-09-22 08:21:54 +02:00
Jiří Klimeš
dd8c3ef3a0 manager: disconnect signal handlers on 'settings' in dispose() (rh #1264676)
Otherwise a crash can occur when shutting down.

https://bugzilla.redhat.com/show_bug.cgi?id=1264676
2015-09-22 08:21:54 +02:00
Thomas Haller
f0ea0cd402 device: refactor beginning of _set_state_full()
- Reorder statements, to first g_return_if_fail() and log state-change.

- Also log a message when leaving _set_state_full() early due to missing firmware.
2015-09-21 18:25:50 +02:00
Jiří Klimeš
bbc7725218 vpn: use vpn.timeout property as timeout value for IP config (bgo #754754)
Some VPN services may take their time when establishing a connection. Let's
make our timeout configurable to be able to give such services a chance.

https://mail.gnome.org/archives/networkmanager-list/2015-April/msg00007.html

https://bugzilla.gnome.org/show_bug.cgi?id=754754
2015-09-21 16:59:04 +02:00
Thomas Haller
5d36910d16 device: log the flags that are set/cleared in _set_unmanaged_flags()
Don't show only the flags that are set/cleared *in addition*.
2015-09-21 16:24:41 +02:00
Beniamino Galvani
5221180a20 core: fix crash in NMManager message filter
g_dbus_message_get_interface() can return NULL in the message filter,
for example when the client does:

  #!/usr/bin/env python
  import dbus
  bus = dbus.SystemBus()
  proxy = bus.get_object("org.freedesktop.NetworkManager",
                         "/org/freedesktop/NetworkManager")
  proxy.foobar()

Use g_strcmp0() to compare the interface and member names.

Fixes: 34ba4e14b8
2015-09-21 14:49:03 +02:00
Jiří Klimeš
73d2bd53c5 device: remove unused ip_iface 2015-09-21 09:09:36 +02:00
Jiří Klimeš
3b11b85753 wifi: remove unused variables 2015-09-21 09:04:35 +02:00
Thomas Haller
45f682e222 exported-object: explicitly disconnect bindings and signal handlers to GDBusInterfaceSkeleton interfaces
While an NMExportedObject is exported (i.e. registered at NMBusManager),
it has a list of GDBusInterfaceSkeleton interfaces. The properties of
the nm-object are bound to the interfaces and the signals connected.

Previously, when unexporting the NMExportedObject, we would only unref
the interfaces, but not explicitly disconnect. As there is no guarantee
that the lifetime of the interfaces is shorter then the lifetime of the
nm-object, hence, explicitly disconnect.
2015-09-18 18:01:55 +02:00
Lubomir Rintel
06da353242 core: separate active and applied connection
Clone the connection upon activation. This makes it safe for the user
to modify the original connection while it is activated.

This involves several changes:

- NMActiveConnection gets @settings_connection and @applied_connection.
  To support add-and-activate, we constructing a NMActiveConnection with
  no connection set. Previously, we would set the "connection" field to
  a temporary NMConnection. Now NMManager piggybacks this temporary
  connection as object-data (TAG_ACTIVE_CONNETION_ADD_AND_ACTIVATE).

- get rid of the functions nm_active_connection_get_connection_type()
  and nm_active_connection_get_connection_uuid(). From their names
  it is unclear whether this returns the settings or applied connection.
  The (few) callers should figure that out themselves.

- rename nm_active_connection_get_id() to
  nm_active_connection_get_settings_connection_id(). This function
  is only used internally for logging.

- dispatcher calls now get two connections as well. The
  applied-connection is used for the connection data, while
  the settings-connection is used for the connection path.

- needs special handling for properties that apply immediately
  when changed (nm_device_reapply_settings_immediately()).

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

https://bugzilla.gnome.org/show_bug.cgi?id=724041
2015-09-18 17:32:11 +02:00
Thomas Haller
d5716eed59 secrets: make agent-manager independent from NMSettingsConnection
NMSecretAgent (and in turn NMAgentManager) used the @connection argument both
for the connection data, but also for the connection path. Detangle these, and
accept the path separate from the connection.

This makes NMSecretAgent and NMAgentManager truly operate on a plain
NMConnection, without the non-obvious requirement, that the path of the
connection must be set.
2015-09-18 16:12:36 +02:00
Thomas Haller
80a7b41613 vpn-connection: refactor cancellation of secrets 2015-09-18 16:12:36 +02:00
Thomas Haller
674f778c41 settings: use nm_settings_connection_get_id/uuid() utils 2015-09-18 16:12:36 +02:00
Thomas Haller
1036cab5b4 settings: add nm_settings_connection_get_id/uuid() utils 2015-09-18 16:12:36 +02:00
Lubomir Rintel
f589c66b12 audit-manager: don't log connection whose addition fails
In AddAndActivate the uuid and id make no sense until authorization succeeds
and the connection is saved.
2015-09-18 16:12:36 +02:00
Thomas Haller
b5a6883c10 vpn-connection: use logging macros _LOG*()
This now gives every logging line of a NMVpnConnection
a fully descriptive prefix.

Especially for non-debug logging, this looks a bit verbose
and repetitive, so we could suppress the prefix in that case.
I still add it because I think the verbose information does help
during debugging.
2015-09-18 16:12:36 +02:00
Thomas Haller
72c85c29a7 vpn-connection: add logging macros _LOG*() 2015-09-18 16:12:36 +02:00
Thomas Haller
d48ed98eb3 vpn-connection/trivial: consistently rename @connection argument to @self 2015-09-18 16:12:36 +02:00
Thomas Haller
6006a0b134 core/manager: use active_connection_get_by_path() in impl_manager_deactivate_connection() 2015-09-18 16:12:36 +02:00
Thomas Haller
1b5664fed4 agent-manager: always invoke complete function for asynchronous nm_agent_manager_get_secrets()
Refactor agent-manager to always invoke the complete function for
nm_agent_manager_get_secrets().

In general, the complete function is always invoked asnychronously
when starting the operation. On the other hand, when cancelling the
operation or disposing the manager with pending operations, we now
(always) synchronously invoke the callback.

This makes it simpler for the user to reliably cancel the request
and perform potential cleanup.

This behavior bubbles up through NMSettingsConnection and NMActRequest,
and other callers that make directly or indicrectly make use of
nm_agent_manager_get_secrets().
2015-09-18 14:31:31 +02:00
Thomas Haller
afb37d706f secret-agent/trivial: add code comment 2015-09-18 14:31:31 +02:00
Thomas Haller
21fd5fa0ab settings: refactor call_id type of async functions for NMAgentManager, NMSettingsConnection and NMActRequest
Instead of having the call_id of type guint32, make it an (opaque)
pointer type.

This has the advantage of strong typing and avoids the possiblity
of reusing an invalid integer (or overflow of the call-id counter).

OTOH, it has the disadvantage, that after a call_id is disposed,
it might be reused for future invocations (because malloc might
reuse the memory).

In fact, it is always an error to use a call_id that is already
completed. This commit also adds assertions to the cancel() calls
that the provided call_id is a pending call. Hence, such a bug
will be uncovered by assertions (that only might not tigger in
certain unlikely cases where a call-id got reused).

Note that for NMAgentManager, save_secrets() and delete_secrets()
both returned a call_id. But they didn't also provide a callback when
the operation completes. So the user trying to cancel such a call,
cannot know whether the operation is still in process and he cannot
avoid triggering an assertion.
Fix that by not returning a call-id for these operations. No caller
cared about it anyway.

For NMSettingsConnection, also track the internally scheduled requests
for so that we can cancel them on dispose.
2015-09-18 14:31:31 +02:00
Thomas Haller
40eda71dc6 agent-manager: fix type of idle_id in Request structure 2015-09-18 14:31:31 +02:00
Thomas Haller
7a8eee99ff agent-manager/refact: return early from _con_get_try_complete_early() instead of if-else-if 2015-09-18 14:31:31 +02:00
Thomas Haller
0205dc9f5a agent-manager/trivial: rename functions 2015-09-18 14:31:31 +02:00
Thomas Haller
4ccae95802 agent-manager/refact: replace get_start() by request_start()
Let all implementations call request_start(), instead of
getting-secrets doing something special and call get_start().
2015-09-18 14:31:31 +02:00
Thomas Haller
ea57ecc8ee agent-manager/refact: replace function callbacks by direct calls or inline
Drop the function pointers. Instead either inline them or
call them explicitly (possibly after switching on the request_type).
2015-09-18 14:31:31 +02:00
Thomas Haller
745d501859 agent-manager/refact: merge the subclasses into Request
Merge ConnectionRequest structure into Request.
2015-09-18 14:31:31 +02:00
Thomas Haller
55d672347f core/trivial: add code comment to nm_utils_get_shared_wifi_permission() 2015-09-18 14:31:31 +02:00
Thomas Haller
9e3d3083d2 auth-utils: some refactoring in nm-auth-utils.c
- move nm_auth_chain_check_done() and nm_auth_chain_remove_call()
  into the only caller auth_call_complete().

- take a ref of the "context" argument.

- in nm_auth_chain_add_call(), assert that we didn't yet invoke the
  done-callback. The auth-chain should not be reusued.

- use slice allocator for ChainData, AuthCall and NMAuthChain
2015-09-18 14:31:31 +02:00
Thomas Haller
2733aacd64 platform: don't accept 00:00:00:00:00:00 as valid permanent address
In nmp_utils_ethtool_get_permanent_address(), don' accept a permanent
address of all zeros.

https://bugzilla.redhat.com/show_bug.cgi?id=1264024
2015-09-18 13:29:34 +02:00
Thomas Haller
2e66aea123 platform: stack-allocate request data for nmp_utils_ethtool_get_permanent_address() 2015-09-18 13:29:34 +02:00
Thomas Haller
aeaf31b7a8 device/trivial: rename nm_device_get_unmanaged_flag() to nm_device_get_unmanaged()
This way, the function matches the other names like nm_device_set_unmanaged().
Arguably, the name currently makes some sense. But future commits will make
nm_device_get_unmanaged() more to be a counterpart of nm_device_set_unmanaged().
2015-09-18 13:18:05 +02:00
Thomas Haller
ef4aa6c555 device/trivial: rename nm_device_set_initial_unmanaged_flag() to nm_device_set_unmanaged_initial()
That way, the name matches better with related functions named
nm_device_set_unmanaged*()
2015-09-18 13:14:44 +02:00
Thomas Haller
0eebf580c1 device: allow modifying Managed property
https://bugzilla.redhat.com/show_bug.cgi?id=1114685
https://bugzilla.gnome.org/show_bug.cgi?id=746566
Related: https://bugzilla.gnome.org/show_bug.cgi?id=680909
Related: https://bugzilla.gnome.org/show_bug.cgi?id=731014

Based-on-patch-by: Lubomir Rintel <lkundrak@v3.sk>
2015-09-18 13:14:23 +02:00
Beniamino Galvani
2562a993c4 policy: react to firewall/metered changes on UPDATED_BY_USER signal
Subscribe to the UPDATED_BY_USER signal (instead of UPDATED) to listen
for changes to the firewall zone and metered properties of a
connection since these modifications are supposed to come from user
intervention.
2015-09-18 11:48:37 +02:00
Beniamino Galvani
d910c94beb policy: update device's metered property when connection changes
If the metered property of a connection is changed, an activated
device associated to the connection must be updated immediately with
the new metered value.

https://bugzilla.gnome.org/show_bug.cgi?id=754409
2015-09-18 11:48:37 +02:00