Commit graph

532 commits

Author SHA1 Message Date
Dan Winship
c22e3f327a core, dispatcher: drop unnecessary setpgid() calls
There's no point in calling setpgid() on short-lived processes, so
remove the setpgid() calls when spawning dispatcher scripts, iptables,
iscsiadmin, and netconf.
2015-01-19 11:29:13 -05:00
Dan Winship
c5b3e93792 core: use GUnixSignalWatchSource to simplify signal handling
Replace the pthread_sigwait()-based signal handling with
g_unix_signal_add()-based handling, and get rid of all the
now-unnecessary calls to nm_unblock_posix_signals() when spawning
subprocesses.

As a bonus, this also fixes the "^C in gdb kills NM too" bug.
2015-01-19 11:29:13 -05:00
Jiří Klimeš
233498e0a4 ifcfg-rh: update test files not to use obsolete GATEWAY<n> variables
But add a dedicated test reading GATEWAY1 to ensure we are still backwards
compatible.
2015-01-15 13:03:13 +01:00
Jiří Klimeš
c8fe3bbabc ifcfg-rh: read custom IP address for shared connections (rh #1174632)
Custom IP ranges for shared connection were implemeted in bgo #6759732
(commit 32a001f526). The first IP address
is used and a range is calculated.
However, the commit missed to update ifcfg-rh plugin to read the address.

Test case:
* use ifcfg-rh plugin for NetworkManager
$ nmcli con add type eth con-name shared-ip ifname eth0
$ nmcli con mod shared-ip ipv4.addresses 9.8.7.6/24 ipv4.method shared
$ nmcli con show shared-ip
$ nmcli con show shared-ip  <--- ip address 9.8.7.6 was missing

https://bugzilla.redhat.com/show_bug.cgi?id=1174632
2015-01-15 13:03:13 +01:00
Thomas Haller
4475f59bce settings: update year in copyright text of plugin-info for keyfile and ifcfg-rh 2015-01-13 16:41:31 +01:00
Thomas Haller
236226a590 ifcfg-rh: don't reload connection in connection_ifcfg_changed() if monitoring is not enabled
This was not really an error, because NMIfcfgConnection would not
watch the files if monitoring is not enabled. Still do it, because
it feels more correct.
2015-01-13 16:41:31 +01:00
Thomas Haller
0c6349c627 ifcfg-rh: refactor update_connection()
Make update_connection() analogous to keyfiles implementation.
Effectively merge _internal_new_connection() and update_connection()
-- previously connection_new_or_changed().

https://bugzilla.redhat.com/show_bug.cgi?id=1171751
2015-01-13 16:41:31 +01:00
Thomas Haller
0cf00ff3aa ifcfg-rh: sort paths in read_connections()
Presort the files in read_connections() as we do it
for keyfile.

This alone has not much consequences. Do this patch first, to
keep the next patches more self-contained.
2015-01-13 16:41:30 +01:00
Thomas Haller
a609dd12d3 ifcfg-rh/trivial: rename connection_new_or_changed() and variable
The ifcfg-rh implementation should be similar to the one from keyfile.
Rename the variables and function that have the same meaning.
Do this trivial commit first, before starting refactoring.
2015-01-13 16:41:30 +01:00
Thomas Haller
bbaa243e31 ifcfg-rh: add logging macros _LOGX() to plugin.c 2015-01-13 16:41:30 +01:00
Thomas Haller
7b807b11cc settings: avoid duplicate UUID in settings
When adding a connection to NMSettings we did not check for
duplicate connection UUIDs (which could for example happen
if two different plugins report a conflicting UUID).
Also, we would not check that an already added connection
changes it's UUID.

Both could lead to have duplicate connections (by UUID).

Avoid that two ways:
- when adding a connection to NMSettings, ensure that we don't add
  a conflicting UUID. Otherwise just bail out and do nothing.
- when modifying a connection that is already added to NMSettings,
  enforce that the UUID cannot change. Otherwise fail with error.

For ifcfg-rh plugin this situation still can happen during reload.
In this case error out and refuse to update the connection. After
all, the user configured invalid UUIDs.

https://bugzilla.redhat.com/show_bug.cgi?id=1171751
2015-01-13 16:41:30 +01:00
Thomas Haller
8ba8a55cfa keyfile: ignore GFileMonitor change flags in dir_changed()
When writing a file (for example with `sed -i`) a temporary file
might be created and removed quickly. This causes spurious events
in dir_changed().
2015-01-13 16:41:30 +01:00
Thomas Haller
db5c4ce64f keyfile: reuse duplicate check from update_connection() in add_connection()
Also during add_connection() we must take special care of not "adding" a
connection with a conflicting UUID. In that case we want to fallback to
"update".

update_connection() already does all the checks, so call
update_connection() from add_connection().
2015-01-13 16:41:30 +01:00
Thomas Haller
5c2fa92099 keyfile: cleanup logging
Log lines with a "keyfile:" prefix and show more information about
the loaded connection. Especially printing the UUID is interesting.
2015-01-13 16:41:30 +01:00
Thomas Haller
8a4e64c6aa keyfile: read_connections() must skip duplicate connections
If there are keyfiles with duplicate UUIDs, read_connections()
would iterate over the files, loading them as they appear and
overwriting duplicate connections that were just loaded.

For example, have keyfiles 'A' and 'B' with the same UUID.
On start, NM might first load 'A', then 'B'. 'B' would replace the
content of 'A' which was just loaded.
On reload, NM would first overwrite 'B' with 'A', and then again
overwriting 'A' with 'B'.

Fix that by accept the first found connection and don't overwrite
it during the same read_connections() run.

Also sort the files by file modification timestamp so that we
get a reproducible and sensible behavior.
2015-01-13 16:41:30 +01:00
Thomas Haller
c2fcb680f8 keyfile: merge update_connection() and new_connection()
new_connection() and update_connection() are very similar as both
must anticipate collisions of UUIDs.

When reloading a connection (update_connection(), previously), the loaded
connection for a certain path might actually replace another existing
connection. In this case, the old connection must be removed, and
the existing one updated instead.
If reloading a connection changes the UUID to a new value, the old
connection must be removed likewise and a new connection added.

Merge both functions into update_connection().
2015-01-13 12:14:37 +01:00
Thomas Haller
f41586f00c keyfile/trival: move code 2015-01-13 11:46:06 +01:00
Thomas Haller
fbd30c7dd2 keyfile: simplify g_return() checks for _internal_write_connection() 2015-01-13 11:44:05 +01:00
Thomas Haller
e14ea6818a settings: log connection diffs in replace_settings only where appropriate
Only log connection diffs when we update a connection that we actually
care about.

Note that most plugin specific connections use
nm_settings_connection_replace_settings() in their constructor
to initialize themselves. These occurrences are not interesting
and spam the logfile.
2015-01-13 11:44:05 +01:00
Thomas Haller
c2dc5d3b0f settings: fix wrong assertions for calling nm_settings_connection_replace_settings() 2015-01-13 11:23:22 +01:00
Jiří Klimeš
91fd36e166 ifnet: fix a crash in ifnet settings plugin (bgo #737645)
conn_name can be NULL now as the connections are tracked by UUID
(see commit 689dadaffb)

Sep 29 21:20:34 Jdeapad NetworkManager[1339]: <info> getting unmanaged specs...
Sep 29 21:20:34 Jdeapad NetworkManager[1339]: <info> Checking unmanaged: (null)
Sep 29 21:20:38 Jdeapad kernel: NetworkManager[1339]: segfault at 0 ip
00007f1bfffbedd0 sp 00007fff98daa628 error 4 in
libglib-2.0.so.0.4002.0[7f1bfff86000+130000]

https://bugzilla.gnome.org/show_bug.cgi?id=737645
2015-01-13 10:27:52 +01:00
Jiří Klimeš
c743670251 ifcfg-rh: add a testcase for numeric bonding mode values in BONDING_OPTS 2015-01-13 09:35:49 +01:00
Lubomir Rintel
c9002c041d settings: fix up bad merge
Fixes: 24a464a7da
2015-01-12 16:44:17 +01:00
Dan Winship
f79d62692e ifcfg-rh: allow handling complex routing rules via dispatcher (rh #1160013)
If a connection has an associated "rule-NAME" or "rule6-NAME" file,
don't try to read in the routes, since NetworkManager won't be able to
parse them correctly. Instead, log a warning that they will need to be
applied via a dispatcher script, and provide a script that would do
that in examples/dispatcher/.
2015-01-12 09:53:24 -05:00
Dan Winship
24a464a7da settings: add NMSettingsConnection:filename
Add a "filename" property to NMSettingsConnection, and set it from
keyfile and ifcfg-rh (replacing the existing priv->path variables in
those connection types). (The other plugins either don't use files, or
don't use per-connection files.)
2015-01-12 09:44:20 -05:00
Thomas Haller
3b1c5ee0fd keyfile: retry harder finding a suitable filename in writer()
Try harder to find a suitable filename by appending a counter
to the name.

https://bugzilla.gnome.org/show_bug.cgi?id=740738
2015-01-12 12:21:46 +01:00
Thomas Haller
3e33a5a6c5 ifcfg-rh: support ipvx.route-metric property as IPVX_ROUTE_METRIC
Write ipv4.route-metric and ipv6.route-metric property of
NMSettingConnection as IPV4_ROUTE_METRIC and IPV6_ROUTE_METRIC,
respectively.
2015-01-10 21:10:52 +01:00
Thomas Haller
207ab013a1 ifcfg-rh: fix invalid g_return_val_if_fail() argument in devtimeout_from_file()
Fixes: 62d870e1a6
2015-01-10 14:21:25 +01:00
Dan Winship
d746103d75 keyfile: fix an uninitialized variable
read_field() was supposed to set *error to NULL if there was no error,
but it missed one case. (If **current was '\0'.)
2015-01-09 11:56:39 -05:00
Dan Winship
62d870e1a6 ifcfg-rh: handle DEVTIMEOUT property (rh #1171917)
If an ifcfg file has a DEVTIMEOUT property (and a DEVICE, and is
ONBOOT=yes), and the device is not present at startup, then wait up to
DEVTIMEOUT seconds for it to appear before declaring the connection
ready.

This allows for a hacky workaround to devices that take a bizarrely
long time to be probed.
2015-01-09 09:45:25 -05:00
Lubomir Rintel
c27074bf43 keyfile: another cur at fixing the bridge test
Fixes: 2f82bf537b
2015-01-09 15:14:18 +01:00
Lubomir Rintel
7d58177590 keyfile: fix bridge test
Fixes: 2f82bf537b
2015-01-09 14:37:36 +01:00
Thomas Haller
2ef8f6edfe ifcfg: refactor utils_get_ifcfg_name()
No need to allocate a temporary "base" variable. Just
search for the last '/' ourselves.
All the special handling that g_path_get_basename() does,
for example handling empty filenames and removing trailing
slashes, is not needed.

Thereby fix not to return empty names such as from "ifcfg-".
2015-01-07 12:31:49 -05:00
Thomas Haller
e4f32abfec Revert "ifcfg-rh: avoid passing NULL error to connection_from_file_full()"
This reverts commit 35988ec633.

Since commit ffe0fde235,
wireless_connection_from_ifcfg() accepts a missing @error argument.
Revert this commit because the caller then can control whether to
log the error by providing @error.
2015-01-06 15:54:54 +01:00
Thomas Haller
2243461df4 ifcfg-rh: refactor g_return statements in reader.c 2015-01-02 20:40:39 +01:00
Thomas Haller
ffe0fde235 ifcfg-rh: fix wireless_connection_from_ifcfg() to accept missing @error argument
wireless_connection_from_ifcfg() did not support being called without
error argument.

    #0  0x00007fe4fa2204e9 in g_logv (log_domain=0x7fe4f0597060 "NetworkManager-ifcfg-rh", log_level=G_LOG_LEVEL_CRITICAL, format=<optimized out>, args=args@entry=0x7fff1c7aaf00) at gmessages.c:989
    #1  0x00007fe4fa22063f in g_log (log_domain=<optimized out>, log_level=<optimized out>, format=<optimized out>) at gmessages.c:1025
    #2  0x00007fe4f057eec3 in wireless_connection_from_ifcfg (file=0x7fe4fec7c800 "/etc/sysconfig/network-scripts/ifcfg-Wi-Fi-1", ifcfg=0x7fe4fec6f730, error=0x0) at reader.c:3431
    #3  0x00007fe4f057e2b6 in connection_from_file_full (filename=0x7fe4fec7c800 "/etc/sysconfig/network-scripts/ifcfg-Wi-Fi-1", network_file=0x7fe4f05976aa "/etc/sysconfig/network", test_type=0x0, out_unhandled=0x7fff1c7ab1f8,
        error=0x0, out_ignore_error=0x7fff1c7ab174) at reader.c:4750
    #4  0x00007fe4f057db80 in connection_from_file (filename=0x7fe4fec7c800 "/etc/sysconfig/network-scripts/ifcfg-Wi-Fi-1", out_unhandled=0x7fff1c7ab1f8, error=0x0) at reader.c:4834
    #5  0x00007fe4f057b4a6 in nm_ifcfg_connection_new (source=0x0, full_path=0x7fe4fec7c800 "/etc/sysconfig/network-scripts/ifcfg-Wi-Fi-1", error=0x0) at nm-ifcfg-connection.c:119
    #6  0x00007fe4f0579c1d in _internal_new_connection (self=0x7fe4fec6cd00, path=0x7fe4fec7c800 "/etc/sysconfig/network-scripts/ifcfg-Wi-Fi-1", source=0x0, error=0x0) at plugin.c:136
    #7  0x00007fe4f0579256 in connection_new_or_changed (self=0x7fe4fec6cd00, path=0x7fe4fec7c800 "/etc/sysconfig/network-scripts/ifcfg-Wi-Fi-1", existing=0x0, out_old_path=0x7fff1c7ab458) at plugin.c:265
    #8  0x00007fe4f0578f61 in read_connections (plugin=0x7fe4fec6cd00) at plugin.c:462
    #9  0x00007fe4f0578839 in get_connections (config=0x7fe4fec6cd00) at plugin.c:497
    #10 0x00007fe4fdc9affb in nm_system_config_interface_get_connections (config=0x7fe4fec6cd00) at settings/nm-system-config-interface.c:143
    #11 0x00007fe4fdc9764f in load_connections (self=0x7fe4fec6ca40) at settings/nm-settings.c:201
    #12 0x00007fe4fdc96d74 in nm_settings_new (error=0x7fff1c7abb18) at settings/nm-settings.c:1802
    #13 0x00007fe4fdc37146 in main (argc=1, argv=0x7fff1c7abcd8) at main.c:415

Fixes: 356849f70c
Fixes: 12bfaf5a8d
2015-01-02 20:40:39 +01:00
Lubomir Rintel
35988ec633 ifcfg-rh: avoid passing NULL error to connection_from_file_full()
It causes an assertion failure:

  (NetworkManager:20800): NetworkManager-ifcfg-rh-CRITICAL **: wireless_connection_from_ifcfg: assertion 'error != NULL' failed

Fixes: 12bfaf5a8d
2015-01-02 20:18:04 +01:00
Thomas Haller
e823c59512 ifcfg-rh/tests: remove unused variable 2014-12-18 19:03:06 +01:00
Thomas Haller
ce032e6e14 ifcfg-rh/tests: remove test artifact 'route6-Test_Write_Wired_Static'
This left-over file breaks `make distcheck`.

Fixes: 1600ed9c68
2014-12-18 19:03:06 +01:00
Dan Winship
335dbda16b ifcfg-rh/tests: drop out_*file args from connection_from_file_test()
The out_keyfile, out_routefile, and out_route6file args were just
based on trivial calls to utils.h functions, and could just as easily
be done by the caller directly. So do that.
2014-12-18 11:33:28 -05:00
Dan Winship
a564dafc35 ifcfg-rh/tests: removed unused connection_from_file_test() args
Don't pass &keyfile, &routefile, and &route6file if we aren't going to
use the return value.

Don't pass &unmanaged if we aren't going to check it. (And when we do
check it, don't g_free() it if we've asserted that it's NULL.)
2014-12-18 11:33:28 -05:00
Dan Winship
1600ed9c68 ifcfg-rh/tests: remove gratuituous checks
A bunch of tests appear to have copy-and-pasted the same unnecessary
check for route6file having been created. Remove them.
2014-12-18 11:33:28 -05:00
Dan Winship
12bfaf5a8d ifcfg-rh: remove "ignore_error" arg from connection_from_file()
Instead of having connection_from_file() return a flag telling its
caller whether to log a warning or not, just have it log the warning
(or not) itself.
2014-12-18 11:33:28 -05:00
Dan Winship
356849f70c ifcfg-rh: split connection_from_file() / connection_from_file_test()
Rather than having the "real" users of connection_from_file() have to
pass a dozen NULL arguments, add a separate
connection_from_file_test() for use by test-ifcfg-rh. (Likewise, since
no test cases care about ignore_error, remove that argument from
connection_from_file_test().)
2014-12-18 11:33:28 -05:00
Jiří Klimeš
405d198e7c ifcfg-rh: coverity complained about not checking stat() return value
Error: CHECKED_RETURN (CWE-252): [#def21]
NetworkManager-0.9.11.0/src/settings/plugins/ifcfg-rh/plugin.c:676: check_return: Calling "stat("/etc/hostname", &file_stat)" without checking return value. This library function may fail and return an error code. [Note: The source code implementation of the function has been overridden by a builtin model.]
2014-12-15 16:25:11 +01:00
Thomas Haller
b159946798 settings: change algorithm for UUID generation based on strings
In several cases, connection uuids are generated based on
some strings. Change the algorithm, to prefix the hashed
identifier differently for each setting type. This makes
collisions very unlikely.

Also, change the algorithm, to create proper Variant3 UUIDs.

This is a behavioral change, but it only affects code places
that were added since nm-0-9-10 and were not yet part of
a stable release.
2014-12-04 17:02:22 +01:00
Thomas Haller
1e313e000d libnm: add a type argument to nm_utils_uuid_generate_from_string()
There are different types (variants) of UUIDs defined.
Especially variants 3 and 5 are name based variants (rfc4122).

The way we create our UUIDs in nm_utils_uuid_generate_from_string()
however does not create them according to RFC and does not set
the flags to indicate the variant.

Modify the signature of nm_utils_uuid_generate_from_string() to accept
a "uuid_type" argument, so that we later can add other algorithms without
breaking API.
2014-12-04 17:02:22 +01:00
Thomas Haller
21eb6b5d0d libnm: accept additional length argument in nm_utils_uuid_generate_from_string()
This makes the function also useful for non C-strings,
non UTF-8-strings, and generic blobs.
2014-12-04 17:02:22 +01:00
Dan Winship
3b86cc047e libnm: remove nm_utils_init() from the public API
Remove nm_utils_init() from the public API, and just do it as a
constructor instead.
2014-12-04 08:39:54 -05:00
Thomas Haller
6d6c433bab ifcfg-rh: don't include nm-utils-private.h outside of libnm-core/ 2014-12-03 17:36:08 +01:00