Commit graph

19103 commits

Author SHA1 Message Date
Thomas Haller
a3074ee911 ifcfg-rh: add and use nm_inotify_helper_clear_watch() helper 2017-12-05 19:57:24 +01:00
Thomas Haller
8e172eb984 ifcfg-rh: move nm-inotify-helper to ifcfg-rh plugin
The helper is only used by ifcfg-rh. Move it to the plugin.
2017-12-05 19:57:24 +01:00
Thomas Haller
31f2a46639 ifcfg-rh: fix path_watch_stop() not to create inotify-helper
Commonly, we don't monitor files and hence don't need the inotify-helper
instance. We already access and construct the instance lazy, by
accessing the singleton getter only when needed.

However, path_watch_stop() would always access the singleton, hence
always create such an instance. In most cases there is nothing to clean,
and no such instance shall be created.
2017-12-05 19:57:24 +01:00
Thomas Haller
8a675f3d13 settings: pass new_connection to commit_changes() and fix ifnet
ifnet shall use the new_connection argument, not NM_CONNECTION(self).
Also, let the caller of the virtual function provide the right new_connection,
not having the virtual function figure that out.
2017-12-05 19:57:24 +01:00
Thomas Haller
141dfd600c settings: unify settings-update API (drop internal _update()) 2017-12-05 19:57:24 +01:00
Thomas Haller
776c5f3893 settings: unify settings-update API (rename and merge) 2017-12-05 19:57:24 +01:00
Thomas Haller
9a4225ac96 settings: unify settings-update API (nm_settings_connection_replace_settings()) 2017-12-05 19:57:24 +01:00
Thomas Haller
1425be0397 settings: unify settings-update API (nm_settings_connection_commit_changes()) 2017-12-05 19:57:24 +01:00
Thomas Haller
8388f4ea1d examples: add python/gi example nm-connection-update-stable-id.py
The example script touches the stable-id of a connection.
It does so blocking autoconnect, and was originally written
to test that functionality.
2017-12-05 19:57:24 +01:00
Thomas Haller
8bb95a8365 settings: add NM_SETTINGS_UPDATE2_FLAG_BLOCK_AUTOCONNECT flag 2017-12-05 19:57:24 +01:00
Thomas Haller
98ff1e291c core: clear autoconnect-blocked-reason USER_REQUEST when activating connection 2017-12-05 19:57:24 +01:00
Thomas Haller
d00eb95c55 libnm: add nm_remote_connection_update2()
- only add an async version. I think sync requests are fundamentally flawed
  because they mess up the order of D-Bus messages. Hence, also don't
  call the function *_async(), like we do for other functions. As there
  is only the async form, it doesn't have a suffix.

- Don't accept a NMConnection as @settings argument, but a GVariant.
  In general, keep the libnm API closer to the D-Bus API and don't hide
  the underlying function with a less powerful form. The user still can
  conveniently call the function with

    nm_remote_connection_update2 (connection,
                                  nm_connection_to_dbus (NM_CONNECTION (connection),
                                                         NM_CONNECTION_SERIALIZE_ALL),
                                  save_to_disk
                                    ? NM_SETTINGS_UPDATE2_FLAG_TO_DISK
                                    : NM_SETTINGS_UPDATE2_FLAG_IN_MEMORY,
                                  NULL,
                                  cancellable,
                                  callback,
                                  user_data);

  I believe the parts of libnm that invoke D-Bus methods, should be
  close to the D-Bus API. Not like nm_remote_connection_commit_changes()
  which has no corresponding D-Bus method.
2017-12-05 19:57:24 +01:00
Thomas Haller
98ee18d888 all: add new D-Bus API org.freedesktop.NetworkManager.Settings.Connection.Update2()
We already have Update(), UpdateUnsaved() and Save(), which serve
similar purposes. We will need a form of update with another argument.

Most notably, to block autoconnect while doing the update.

Other use cases could be to prevent reapplying connection.zone and
connection.metered, to to reapply all changes.

Instead of adding a specific update function that only serves that
new use-case, add a extensible Update2() function. It can be extended
to cope with future variants of update.
2017-12-05 11:50:52 +01:00
Thomas Haller
d26c749ea6 checkpoint: don't bypass settings-connection commit code on rollback
commit involves more then just replacing the setting and writing them
out. What? Dunno. It's complex.

But let's not bypass the commit-changes function. That one is supposed
to get it right.
2017-12-05 11:50:52 +01:00
Thomas Haller
f73e78770e settings/trivial: rename update function in nm-settings-connection.c 2017-12-05 11:50:52 +01:00
Thomas Haller
ad9deb6968 settings: merge _replace_settings_full() into _commit_changes_full()
It's complicated what happens during a commit/replace/update (whatever
you call it).

It doesn't get simpler by spreading it out to various functions.
Let's have one large function (_commit_changes_full()) which does
all the steps necessary. There should be no alternative ways
how to update a connection.
2017-12-05 11:50:52 +01:00
Thomas Haller
7a0900be7c settings: always call _commit_changes_full() instead of _replace_settings_full()
All callers of _replace_settings_full() now use _commit_changes_full().
commit-changes should contain all the logic what to do when updating
a connection. Now, the connection might optionally be written to disk.
2017-12-05 11:50:52 +01:00
Thomas Haller
4fd5e6e1bb settings: in _commit_changes_full() mark the connection as saved before emitting signals
_commit_changes_full() calls _replace_settings_full() which already emits signals
about the changed connection. We should mark the connectin as saved earlier.

In fact, we can tell _replace_settings_full() to mark it as not-unsaved
via the persist-mode parameter.
2017-12-05 11:50:52 +01:00
Thomas Haller
9988f9dbbb settings: call replace-settings also without new settings
_replace_settings_full() does more then just replace the settings.
It at least also sets some flags, like saved/unsaved depending
on @persist_mode.

_replace_settings_full() also emits the "updated" signal. Note that
previously it would just return without signal if nm_connection_compare()
indicates that there is no difference. But the caller probably cares
about whether the user tries to change the connection at all, not
whether the change actually introduced a real difference in the
settings. Like, policy might re-set the autoconnect blocked flags.
But it should do so on every user-update, regardless of whether
a change was actually made.

It makes sense to call _replace_settings_full() with a @new_connection
of %NULL, to mean: just update the flags, but keep the current connection.

Extend _replace_settings_full() to allow for that.

Also, update update_auth_cb() to always call _replace_settings_full(),
even if no new connection is provided. In this case, only update
the connection flags accordingly.
2017-12-05 11:50:52 +01:00
Thomas Haller
3706fd17eb settings: refactor update_auth_cb() and prepare connection once
Note how nm_settings_connection_commit_changes() would call
prepare() a second time. Don't do that.

Also, move the prepare step earlier, and call _replace_settings_full()
without preparing the new connection again.
2017-12-05 11:50:52 +01:00
Thomas Haller
75f787d1da settings: split nm_settings_connection_commit_changes() to call it without preparing the new connection
Will be used next.
2017-12-05 11:50:52 +01:00
Thomas Haller
9531da8b3e settings: add persistent-mode argument for connection-replace
The current behavior of update_unsaved is confusing. Give the argument
an enum with a name that describes better what's happening. Also, it
makes the uses grep-able.
2017-12-05 11:50:52 +01:00
Thomas Haller
c3dd5d8df2 settings: log pretty names for settings-connection flags 2017-12-05 11:50:52 +01:00
Josef Andersson
9b23f97290 po: update Swedish (sv) translation (bgo #791222)
https://bugzilla.gnome.org/show_bug.cgi?id=791222
2017-12-05 11:48:40 +01:00
Beniamino Galvani
16f3946ee7 ifcfg-rh: merge branch 'bg/ifcfg-rh-wep-key-type-rh1518177'
https://bugzilla.redhat.com/show_bug.cgi?id=1518177
2017-12-04 15:56:17 +01:00
Thomas Haller
c3d192b6a3 ifcfg-rh: avoid unnecessary string copies in add_one_wep_key() 2017-12-04 15:53:53 +01:00
Thomas Haller
5a857b3922 ifcfg-rh: use NM_IN_SET() macro in add_one_wep_key()
Evaluate strlen() only once.
2017-12-04 15:53:53 +01:00
Thomas Haller
da6394d572 ifcfg-rh: use NM_STRCHAR_ANY() macro in add_one_wep_key() 2017-12-04 15:53:53 +01:00
Beniamino Galvani
c6eb18ee05 ifcfg-rh: persist the wep key type
The wireless-security setting has a 'wep-key-type' property that is
used to specify the WEP key type and is needed because some keys could
be interpreted both as a passphrase or a hex/ascii key.

The ifcfg-rh plugin currently stores the key type implicitly: if
wep-key-type is 'passphrase' it uses the KEY_PASSPHRASE%d variable, if
it's 'key' the KEY%d variable and when it's 'unknown' it uses either
variables depending on the detected type (preferring 'key' in case
both are compatible).

This means that some connections will be read differently from how
they were written, because once the KEY (or KEY_PASSPHRASE) is read
there is no way to know whether the 'wep-key-type' property was 'key'
(or 'passphrase') or 'unknown'.

Fix this by persisting the key type explicitly in the file. The new
variable is redundant in most cases because the variables used for
keys also determine the key type.

https://bugzilla.redhat.com/show_bug.cgi?id=1518177
2017-12-04 15:53:53 +01:00
Yifan J
797d9c4403 python: make dbus, gi examples, and debug-helper.py python3 ready
https://bugzilla.gnome.org/show_bug.cgi?id=791121
2017-12-04 11:21:40 +01:00
Beniamino Galvani
5e239d2c04 cli: don't print warnings when completing arguments
$ nmcli con add type wifi ifname wlan0 \
     wifi-sec.key-mgmt none \
     wifi-sec.wep-key0 $ascii_key \
     ssid <TAB>

 completes the line with:

  "Info:\ WEP\ key\ is\ guessed\ to\ be\ of\ '2\ \(passphrase\)'"

The environment warning function should not emit warning when
completing arguments.
2017-12-01 14:27:38 +01:00
Beniamino Galvani
6f5f1b2d29 ifcfg-rh: merge branch 'bg/ifcfg-rh-dns-rh1517794'
https://bugzilla.redhat.com/show_bug.cgi?id=1517794
2017-11-30 23:56:00 +01:00
Thomas Haller
9b08f2c61d ifcfg-rh: only open network file once when parsing connection 2017-11-30 23:54:45 +01:00
Beniamino Galvani
8379785560 ifcfg-rh: use different variables for IPv4 and IPv6 DNS options
Until now the ifcfg-rh plugin merged the values of 'ipv4.dns-options'
and 'ipv6.dns-options' and wrote the result to the RES_OPTIONS
variable. This is wrong because writing a connection and reading it
back gives a different connection compared to the original.

This behavior existed since when DNS options were introduced, but it
became more evident now that we reread the connection after write,
because after doing a:

 $ nmcli connection modify ethie ipv4.dns-options ndots:2

the connection has both ipv4.dns-options and ipv6.dns-options set. In
order to delete the option, an user has to delete it from both
settings:

 $ nmcli connection modify ethie ipv4.dns-options "" ipv6.dns-options ""

To improve this let's use different variables for IPv4 and IPv6. To
keep backwards compatibility IPv4 still uses RES_OPTIONS, while IPv6
uses a new IPV6_RES_OPTIONS variable.

https://bugzilla.redhat.com/show_bug.cgi?id=1517794
2017-11-30 23:54:45 +01:00
Beniamino Galvani
ca06f82371 clients: fix display value for dns-options
We must show the default value "(default)" when the list of
dns-options is initialized but empty.
2017-11-30 23:54:45 +01:00
Beniamino Galvani
d74e1bef36 all: replace 'inital' with 'initial'
sed -i -e 's/inital/initial/g' $(git grep -l inital)
2017-11-30 23:54:45 +01:00
Beniamino Galvani
fead82f419 tui: fix creation of open Wi-Fi connections
Commit 6a4af482f0 ("nmtui: always create ethernet settings for VLAN
and wireless security for wifi.") changed nmtui to always add the
wireless security setting to the new connection, but without
initializing it. This leads to a crash that was fixed in 40fcf67a84
("tui: fix crash creating Wi-Fi connection").

There is an additional bug: connections without authentication can't
be saved because the wireless security setting has uninitialized
fields.

To fix this, revert both patches (the first partially) because the
previous code did the right thing as it added the setting only when
needed.

Fixes: 6a4af482f0

https://bugzilla.redhat.com/show_bug.cgi?id=1518167
2017-11-30 17:22:28 +01:00
Thomas Haller
cc74cffe12 device: add "indicated" argument to nm_utils_match_connection()
The matching works fuzzy and is not reliable. That is why we store
which connection should be assumed after restart in the state file
of NetworkManager.

In that case, we don't need to do a full check (with the possibility
of a false-reject). Just check for the minimum required properties:
the type and slave-type.

Yes, if the user modifies the connection while restarting NM, then
we might wrongly assume a connection that no longer would match.
But NM should not read minds, it should do as indicated.
2017-11-30 14:47:49 +01:00
Thomas Haller
15608713c4 libnm: drop now unused helper function _nm_utils_strsplit_set() 2017-11-29 16:26:28 +01:00
Thomas Haller
a81ad3474d ifcfg-rh: replace usage of _nm_utils_strsplit_set() with nm_utils_strsplit_set() 2017-11-29 16:26:28 +01:00
Thomas Haller
d3520813e8 ifcfg-rh: avoid copy of value for "HWADDR_BLACKLIST" 2017-11-29 16:26:28 +01:00
Thomas Haller
de92e88161 shared: fix nm_utils_strsplit_set() to increase buffer size exponentially 2017-11-29 16:26:28 +01:00
Beniamino Galvani
21cfeff777 cli: exit from main loop after 'quit' editor command
When we stop processing the editor command loop (after a 'quit'
command) we must quit the GLib main loop.

https://bugzilla.redhat.com/show_bug.cgi?id=1517401
2017-11-29 11:05:04 +01:00
Thomas Haller
2e974baa15 cli: use nm_clear_g_source() util in quit() functions 2017-11-29 10:19:12 +01:00
Thomas Haller
199525ba52 core: avoid duplicate <info> logging message when sleeping/waking
<debug> [1511941494.1809] manager: Received resuming signal
  <info>  [1511941494.1809] manager: wake requested (sleeping: yes  enabled: yes)
  <info>  [1511941494.1809] manager: waking up...
2017-11-29 10:15:02 +01:00
Thomas Haller
88549b031a policy: don't schedule_activate_all() when going to sleep
This was added by cfb2af1df2, but it's
wrong. Here we reset the autoconnect-blocked-reasons when going to sleep,
not when waking up.
2017-11-29 10:15:02 +01:00
Thomas Haller
249aff6349 core: fix broken autoconnect due to wrong nm_settings_connection_autoconnect_is_blocked()
Fixes: 36ac08c092
2017-11-29 10:14:45 +01:00
Lubomir Rintel
c9db2c17aa policy: fix possible crash on deactivating connection on removal
_deactivate_if_active() takes a NMPolicy instance while the
connection_removed signal handler takes a NMPolicyPrivate pointer.
2017-11-28 13:52:12 +01:00
Thomas Haller
b6efac9ec2 c-list: re-import latest version of c-list.h from upstream
Most notably, it renames
  c_list_unlink_init() -> c_list_unlink()
  c_list_unlink() -> c_list_unlink_stale()

  $ sed -e 's/\<c_list_unlink\>/c_list_unlink_old/g' \
        -e 's/\<c_list_unlink_init\>/c_list_unlink/g' \
        -e 's/\<c_list_unlink_old\>/c_list_unlink_stale/g' \
        $(git grep -l c_list_unlink -- ':(exclude)shared/nm-utils/c-list.h') \
        -i
2017-11-28 11:26:39 +01:00
Thomas Haller
2becc0a0ac device: merge branch 'th/device-carrier-wait-timeout'
https://bugzilla.redhat.com/show_bug.cgi?id=1483343
https://bugzilla.redhat.com/show_bug.cgi?id=1487702
https://bugzilla.redhat.com/show_bug.cgi?id=1515027
https://bugzilla.gnome.org/show_bug.cgi?id=784854
2017-11-28 10:53:40 +01:00