Commit Graph

8762 Commits

Author SHA1 Message Date
Jiří Klimeš
aa54604f59 examples: update examples for new device types 2013-11-29 09:29:56 +01:00
Jiří Klimeš
888a2618ea trivial: update a comment 2013-11-29 08:42:36 +01:00
Jiří Klimeš
655af71c6d nmcli: fix connecting VLANs without an explicit interface-name (rh #1034908)
nm_connection_get_virtual_iface_name() doesn't work when determining virtual
connections, because for VLANs it can return NULL.

See also commit e1e4740648.

https://bugzilla.redhat.com/show_bug.cgi?id=1034908
2013-11-28 16:50:42 +01:00
Jiří Klimeš
a312aad848 tools: enhance description for the nm-settings manual page 2013-11-28 13:23:53 +01:00
Jiří Klimeš
b26656f003 tools: add team, team-port and dcb settings into generate-settings-spec.c 2013-11-28 11:35:52 +01:00
Jiří Klimeš
0d4a5f0328 Revert "libnm-util: refactor NMSetting construction, assert of setting name"
This reverts commit f43586fc17.

This broke stuff as "name" was set on various places after construction. So we
revert the commit for now, and will rework it.
2013-11-28 11:18:54 +01:00
Dan Williams
e2ecf5b808 dhcp: dhcpcd uses a fixed path for PID files
It always uses RUNDIR and the change to NMRUNDIR was in error.  This
could cause NetworkManager not to be able to kill old dhcpcd processes.
2013-11-27 19:00:14 -06:00
Dan Williams
b11aec3f15 dhcp: force IPv4-only for dhcpcd
dhcpcd v5.99 and later automatically enabled IPv6 behavior unless
specifically disabled.  This is undesirable for two reason:

1) dhcpcd sends IPv4 Router Solicitations, which NetworkManager
handles itself, so there's no need to do it twice.  NetworkManager
knows better than dhcpcd whether IPv6 is supposed to be used for
that interface or not.

2) Some devices don't react well to IPv6 when they aren't expecting
it.  For example, older Qualcomm Gobi-based devices will listen
for Router Solicitations and attempt to set up IPv6, but if other
settings are not done correctly, or the firmware doesn't actually
support it, the firmware will then crash.  So simply upgrading your
dhcpcd from 5.x to 6.x magically stops WWAN working for these
devices.
2013-11-27 17:14:32 -06:00
Thomas Haller
f43586fc17 libnm-util: refactor NMSetting construction, assert of setting name
Make the name property CONSTRUCT_ONLY. With this there is also no more
need to overwrite the constructor().

Signed-off-by: Thomas Haller <thaller@redhat.com>
2013-11-27 23:10:17 +01:00
Thomas Haller
b8b8af38c1 libnm-util: fix minor memory leak in infiniband setting
Signed-off-by: Thomas Haller <thaller@redhat.com>
2013-11-27 21:19:11 +01:00
Thomas Haller
5cdd592457 libnm-util: trivial: rename private field and enum value in NMSettingVlan
The public property is called NM_SETTING_VLAN_INTERFACE_NAME,
so also the internal field and the PROP_* enum should carry
the same name.

Signed-off-by: Thomas Haller <thaller@redhat.com>
2013-11-27 21:01:41 +01:00
Thomas Haller
63c9c399c5 libnm-util: fix minor memory leaks in bond and team setting
Signed-off-by: Thomas Haller <thaller@redhat.com>
2013-11-27 20:55:58 +01:00
Dan Williams
d35cb5b77c cli: add support for DCB settings 2013-11-27 10:05:43 -06:00
Dan Winship
ff93ed672b devices: if IP4 and IP6 config both fail right away, fail the device
Previously, the device activation would stall in this case, because
the code wasn't expecting it to happen. In particular, this happens
when trying to assume a device that is up but has no IP config.

https://bugzilla.gnome.org/show_bug.cgi?id=715181
2013-11-27 08:54:18 -05:00
Jiří Klimeš
91a95dd916 agents: fix crash in nm_secret_agent_cancel_secrets() (rh #922855)
When request for getting secrets is being freed in request_free(),
cancel_callback is get_cancel_cb(). It uses parent->current as a secret agent
object. However, this object can be already freed and thus there is a problem
getting priv in nm_secret_agent_cancel_secrets:

g_return_if_fail (self != NULL);
priv = NM_SECRET_AGENT_GET_PRIVATE (self);
(gdb) p self
$66 = (NMSecretAgent *) 0x7fae9afd42e0
(gdb) p *self
$67 = {parent = {g_type_instance = {g_class = 0x0}, ref_count = 0, qdata = 0x0}}

 #0  nm_secret_agent_cancel_secrets (self=0x7fae9afd42e0, call=0x1) at settings/nm-secret-agent.c:325
 #1  0x00007fae9a774882 in request_free (req=0x7fae9afc48f0) at settings/nm-agent-manager.c:496
 #2  0x00007fae967b251a in g_hash_table_remove_internal (hash_table=0x7fae9aefdf00, key=0x2, notify=1) at ghash.c:1276
 #3  0x00007fae9a72b340 in dispose (object=0x7fae9af77200) at nm-activation-request.c:446
 #4  0x00007fae96cbeee8 in g_object_unref (_object=0x7fae9af77200) at gobject.c:3160
 #5  0x00007fae9a73d87c in _active_connection_cleanup (user_data=<optimized out>) at nm-manager.c:359
 #6  0x00007fae967c32a6 in g_main_dispatch (context=0x7fae9aedb180) at gmain.c:3066
 #7  g_main_context_dispatch (context=context@entry=0x7fae9aedb180) at gmain.c:3642
 #8  0x00007fae967c3628 in g_main_context_iterate (context=0x7fae9aedb180, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at gmain.c:3713
 #9  0x00007fae967c3a3a in g_main_loop_run (loop=0x7fae9aedb860) at gmain.c:3907

So we need to ref() 'agent' when adding it to pending list, so that the object
is not freed if the secret agent unregisters and is removed.

Test case:
1. run NM and nm-applet
2. activate a Wi-Fi network
3. nm-applet will ask for a password; ignore the popup window and kill nm-applet
4. start nm-applet again
5. click the same Wi-Fi network in nm-applet
6. NM will experience problems in nm_secret_agent_cancel_secrets() or crashes
(the procedure may not be 100%, but reproduces most of the time)

https://bugzilla.redhat.com/show_bug.cgi?id=922855
2013-11-26 14:43:11 +01:00
Jiří Klimeš
593f1aadec agents: fix removing requests from hash table while iterating it
GLib-CRITICAL **: g_hash_table_iter_next: assertion 'ri->version == ri->hash_table->version' failed

It is not allowed to modify hash table while it is iterated. Unfortunately,
request_remove_agent() may remove the request from the 'requests' hash table,
making it not usable in the loop hash table looping.

We need to store the request into a temporary list and call request_next_agent()
on them later (after the hash loop).

Test case:
1. start NM and nm-applet
2. activate a Wi-Fi WPA connection
3. nm-applet displays a dialog asking for a password
4. kill nm-applet
5. NetworkManager removes the nm-applet's secret agent
   and runs into removing the request from hash table in the
   iterating loop (via get_complete_cb)

 #0  get_complete_cb (parent=0x7f3f250f2970, secrets=0x0, agent_dbus_owner=0x0, agent_username=0x0, error=0x7f3f250f7830, user_data=0x7f3f25020e10)
     at settings/nm-agent-manager.c:1111
 #1  0x00007f3f23b46ea5 in req_complete_error (error=0x7f3f250f7830, req=0x7f3f250f2970) at settings/nm-agent-manager.c:509
 #2  request_next_agent (req=0x7f3f250f2970) at settings/nm-agent-manager.c:615
 #3  0x00007f3f23b48596 in request_remove_agent (agent=0x7f3f250f4a20, req=0x7f3f250f2970) at settings/nm-agent-manager.c:631
 #4  remove_agent (self=<optimized out>, owner=0x7f3f250dbff0 ":1.275") at settings/nm-agent-manager.c:130
 #5  0x00007f3f23b4868d in impl_agent_manager_unregister (self=0x7f3f25020e10, context=0x7f3f250f5480) at settings/nm-agent-manager.c:374

 #0  0x00007f3f1fb9c4e9 in g_logv (log_domain=0x7f3f1fbfef4e "GLib", log_level=G_LOG_LEVEL_CRITICAL, format=<optimized out>, args=args@entry=0x7fff156b77c0) at gmessages.c:989
 #1  0x00007f3f1fb9c63f in g_log (log_domain=log_domain@entry=0x7f3f1fbfef4e "GLib", log_level=log_level@entry=G_LOG_LEVEL_CRITICAL,
     format=format@entry=0x7f3f1fc0889a "%s: assertion '%s' failed") at gmessages.c:1025
 #2  0x00007f3f1fb9c679 in g_return_if_fail_warning (log_domain=log_domain@entry=0x7f3f1fbfef4e "GLib",
     pretty_function=pretty_function@entry=0x7f3f1fc03c30 <__PRETTY_FUNCTION__.4571> "g_hash_table_iter_next",
     expression=expression@entry=0x7f3f1fc038f0 "ri->version == ri->hash_table->version") at gmessages.c:1034
 #3  0x00007f3f1fb849c0 in g_hash_table_iter_next (iter=<optimized out>, key=<optimized out>, value=<optimized out>) at ghash.c:733
 #4  0x00007f3f23b484e5 in remove_agent (self=<optimized out>, owner=0x7f3f250dbff0 ":1.275") at settings/nm-agent-manager.c:129
 #5  0x00007f3f23b4868d in impl_agent_manager_unregister (self=0x7f3f25020e10, context=0x7f3f250f5480) at settings/nm-agent-manager.c:374
2013-11-26 14:42:56 +01:00
Dan Williams
308f2c08dd Revert "core: add Devices property to Manager"
This reverts commit c1768154c4.

Not supposed to be committed yet, see dcbw/dbus-properties for the
real patch.
2013-11-25 15:19:09 -06:00
Dan Williams
b82dd151b2 trivial: fix leak in hostname reverse-lookup code
g_inet_address_to_string() returns an allocated value.
2013-11-25 15:18:02 -06:00
Dan Williams
c1768154c4 core: add Devices property to Manager
Helps other bindings.
2013-11-25 11:59:13 -06:00
Dan Williams
0c8b27eff0 core: capture DNS configuration from resolv.conf when generating connections (rh #1031763)
Ensures that resolv.conf is valid when assuming an already-configured device
that may have DNS information already written to resolv.conf.

https://bugzilla.redhat.com/show_bug.cgi?id=1031763
2013-11-22 15:04:54 -06:00
Dan Williams
da016d91f5 core: don't leave additional default routes in captured IP config
There can be multiple default routes for an interface with different
metrics.  Grab the gateway of the default route with the lowest
metric as the overall gateway of the IP config.  Otherwise the rest
could get left in the config and applied at random times.
2013-11-22 15:02:58 -06:00
Dan Williams
12d96c30f2 core: capture DNS configuration from resolv.conf when generating connections
If the interface who's IP configuration is being captured has the default
route, then read DNS servers from resolv.conf into the NMIP[4|6]Config.

This allows NetworkManager to repopulate resolv.conf if anything changes.
For example, if the system does not define a persistent hostname, then
when a device which has generated a connection activates, a hostname
lookup will be performed.  The results of that lookup may change resolv.conf,
and thus NetworkManager must rewrite resolv.conf.  Without capturing
DNS information at startup when generating connections, an empty
resolv.conf would be written.
2013-11-22 15:01:10 -06:00
Dan Williams
fab6260bfa policy: ignore nameservers when starting lookup thread (rh #1031763)
When generating connections at startup for active interfaces, the
generation code may not always be able to read DNS information for
the connection.  Thus, the device's IP4Config won't have any
nameservers and the device won't be considered for reverse-address
lookup.  However, since any device that gets this far is already
the "best" device and has the default route, and thus should be the
one used for reverse-address lookup.

Second, reorganize the code better handle dual-stack in the
future by checking the IP configs directly, instead of the
devices.  Since 'best4' and 'best6' may be different devices,
we want to operate on the IP configs, not devices, to handle
situations where the best IP4Config may not be suitable for
reverse lookup, but the best IP6Config is.

https://bugzilla.redhat.com/show_bug.cgi?id=1031763
2013-11-22 14:37:37 -06:00
Thomas Haller
77c02f1802 core: fix crash in nm-manager-auth
When doing nm_auth_chain_unref(), the code iterated over the ->calls and
cancelled them. However, some of these calls might not have passed on to
polkit_authority_check_authorization(), but instead being scheduled with
g_idle_add(). These calls have to be canceled too because the NMAuthChain
will already be destroyed when auth_call_complete() calls.

Now, we g_source_remove() these calls and free them immediatly. Before
these calls leaked and led to use after free crash.

Also fix a memory leak by always get the results with
polkit_authority_check_authorization_finish(), even when being
cancelled.

This is the backtrace of the crash:

  #0  0x00007f166efda359 in g_slist_remove () from /lib64/libglib-2.0.so.0
  #1  0x00007f167311bcc1 in auth_call_complete ()
  #2  0x00007f166efbde06 in g_main_context_dispatch ()
     from /lib64/libglib-2.0.so.0
  #3  0x00007f166efbe158 in g_main_context_iterate.isra.22 ()
     from /lib64/libglib-2.0.so.0
  #4  0x00007f166efbe55a in g_main_loop_run () from /lib64/libglib-2.0.so.0
  #5  0x00007f16730d3c0d in main ()

Co-Authored-By: Dan Williams <dcbw@redhat.com>
Signed-off-by: Thomas Haller <thaller@redhat.com>
2013-11-22 20:03:14 +01:00
Dan Winship
461920bb96 cli: add NMC_RESULT_ERROR_NOT_FOUND and use as appropriate
This will allow callers to distinguish "no such connection" from
"connection failed to activate", etc.

https://bugzilla.redhat.com/show_bug.cgi?id=1022256
2013-11-22 13:51:25 -05:00
Jiří Klimeš
472ee8104d cli: initialize interface-name for new team connections in editor 2013-11-22 14:28:08 +01:00
Thomas Haller
7698d5dfc0 cli: bash completion completes filenames for team "config" property
Signed-off-by: Thomas Haller <thaller@redhat.com>
2013-11-22 14:10:34 +01:00
Jiří Klimeš
cdec23d314 cli: complete file names for properties whose value is a file name
Note:
Tilde expansion is enabled, so ~/abc<TAB> expands the string to /home/joe/abc.
However, when user did not use the completion and typed "~/myfile" manually,
the path could not be opened.

nmcli 802-1x.ca-cert> set ~/newca.crt
Error: failed to set 'ca-cert' property: Failed to open file '~/newca.crt': No such file or directory
2013-11-22 14:09:10 +01:00
Jiří Klimeš
a3c06afc12 cli: support file names for 'config' argument when creating team connections
nmcli con add type team config /home/cimrman/team-config.json

libteam (and in turn NetworkManager) configures team devices via plain config
data in JSON format. However, it is useful and more user-friendly for nmcli to
accept also a file name that contains the config data, and read it. Thus the
user is not forced to type whole (possibly long) config on the command line.
2013-11-22 14:09:10 +01:00
Dan Williams
7994778723 core: ignore RA-provided default routes (rh #1029213)
The router has no idea what the local configuration or user preferences are,
so sending routes with a prefix length of 0 is at best misinformed and at
worst breaks things.  The kernel also ignores plen=0 routes in its in-kernel
RA processing code in net/ipv6/ndisc.c.

https://bugzilla.redhat.com/show_bug.cgi?id=1029213
2013-11-20 14:24:38 -06:00
Jiří Klimeš
46a7760ead core: do not generate a connection for loopback interface (rh #1032594)
Else loopback is managed, and could be easily disconnected, which causes various
issues with applications. So do not manage it for now, to be on the safer side.

https://bugzilla.redhat.com/show_bug.cgi?id=1032594
2013-11-20 19:07:48 +01:00
Thomas Haller
073cc01f52 dispatcher: fix crash while logging from signal handler
Bug rh#1017884 describes a crash, where dbus_init() failed, which causes
a g_warning(). While writing the warning, a SIGTERM hit, and the
signal_handler() tries to call again g_message().

The logging functions of glib are not reentrant and call abort() when
invoked recursivly. The solution, is to use g_unix_signal_add, which
will dispatch the handler on the mainloop asynchronously.

This bug is not that serious, because the dispatcher was about to
terminate anyway. However, it gets registered as a crash by the system
(ABRT).

https://bugzilla.redhat.com/show_bug.cgi?id=1017884

Signed-off-by: Thomas Haller <thaller@redhat.com>
2013-11-19 00:20:12 +01:00
Thomas Haller
fbcabeb7f7 libnm-glib: fix crash by taking additional ref in nm-remote-connection/result_cb
result_cb invokes a function pointer provided by the user. Nothing prevents
the user from destroying the NMRemoteConnection in the callback, which leads
to a crash. Take an additional ref of NMRemoteConnection to keep it
alive.

This probably caused a crash for nm-applet:
https://bugzilla.redhat.com/show_bug.cgi?id=1030403

Signed-off-by: Thomas Haller <thaller@redhat.com>
2013-11-18 23:01:35 +01:00
Jiří Klimeš
f93c154161 device: remove invalid assertion in slave_state_changed()
When activating a team slave and 'teamd' binary is not installed, the
priv->state of master device will be NM_DEVICE_STATE_FAILED, which is greater
than NM_DEVICE_STATE_ACTIVATED.

<info> Activation (nm-team) Stage 1 of 5 (Device Prepare) started...
<warn> Activation (nm-team) to start teamd: not found
<info> (nm-team): device state change: prepare -> failed (reason 'none') [40 120 0]
...
<debug> master_state_cb(): (0x81d6968): master ActiveConnection [0x91d69d0] 'team0' failed
<info> (eth1): device state change: config -> failed (reason 'dependency-failed') [50 120 50]
...
<debug> slave_state_changed(): (nm-team): slave eth1 state change 50 (config) -> 120 (failed)
--- ASSERTION ---
2013-11-18 14:24:10 -06:00
Thomas Haller
044cebade4 build: fix for make distcheck without enable-gtk-doc
Without this patch, the following fails with a rather obscure message
about missing make target.

  ./autogen.sh && make && make distcheck
  ...
  *** No rule to make target `NetworkManager.8', needed by `distdir'. Stop.

Swap the order of the subdirectories 'docs' and 'man' to build
'docs' earlier. This way, `make distcheck` fails in the directory 'docs'
with a better error message:
  *** gtk-doc must be installed and enabled in order to make dist

Also, add 'man/nmcli-examples.5' to the list of files, to determine
whether to use the pre generated doc files.

Signed-off-by: Thomas Haller <thaller@redhat.com>
2013-11-18 19:19:13 +01:00
Dan Williams
63d486b4de trivial: fix some prototypes 2013-11-18 12:06:10 -06:00
Thomas Haller
32b67cd1be cli: bash completion must not suggest IP options for adding slave types
Signed-off-by: Thomas Haller <thaller@redhat.com>
2013-11-18 16:38:07 +01:00
Thomas Haller
6dc4065eb4 trivial: ifcfg-rh: remove unused code/variables 2013-11-18 16:38:07 +01:00
Jiří Klimeš
160d6f073e cli: add missing reason-to-string mappings for NMDeviceStateReason 2013-11-18 16:17:23 +01:00
Jiří Klimeš
0f02392123 doc: fix description of nm_setting_set_secret_flags() 2013-11-18 15:59:05 +01:00
Jiří Klimeš
1a74629a3f team: correct the message telling the teamd binary is missing 2013-11-18 13:18:17 +01:00
Thomas Haller
df7406fcf2 cli: add 'config' option to bash completion when adding team-slave connection
Like 'team', 'team-slave' also understands the property 'config'.
Add it to bash completion for the 'connection add' command.

Signed-off-by: Thomas Haller <thaller@redhat.com>
2013-11-18 12:12:20 +01:00
Jiří Klimeš
3e7ad0c439 settings: fix return value in nm_system_config_interface_load_connection()
when g_return_val_if_fail fails.
2013-11-18 09:13:50 +01:00
Jiří Klimeš
de36db0af1 libnm-glib: fix return value in nm_remote_settings_load_connections()
when g_return_val_if_fail() fails.
2013-11-18 09:06:23 +01:00
Thomas Haller
6241366f30 cli: adjust bash completion for nmcli connection load <file>...
Signed-off-by: Thomas Haller <thaller@redhat.com>
2013-11-15 13:39:42 -05:00
Dan Winship
9a532db182 cli: add "nmcli con load file..."
https://bugzilla.gnome.org/show_bug.cgi?id=709830
2013-11-15 13:39:40 -05:00
Dan Winship
a52ebc74b5 libnm-glib: add nm_remote_settings_load_connections()
https://bugzilla.gnome.org/show_bug.cgi?id=709830
2013-11-15 13:38:48 -05:00
Dan Winship
51c6269d46 core: add o.fd.NM.Settings.LoadConnections
Add a D-Bus method to reload connection files specified by
filename, and implement it in the ifcfg-rh and keyfile backends.

https://bugzilla.gnome.org/show_bug.cgi?id=709830
2013-11-15 13:30:13 -05:00
Dan Winship
65737d9e48 devices: use disable_ipv6 as appropriate
Set and clear disable_ipv6 on devices as needed to ensure that:

  1) devices never get IPv6 link local addresses until they are
     actually activated

  2) devices always lose their IPv6 link local addresses when they are
     deactivated

  3) slaves never get IPv6 link local addresses at all

https://bugzilla.gnome.org/show_bug.cgi?id=700414
https://bugzilla.redhat.com/show_bug.cgi?id=1004255
2013-11-15 10:50:45 -05:00
Dan Winship
7496cc3db2 devices: enable/disable kernel IPv6 autoconf at the appropriate times
Set accept_ra and use_tempaddr to "0" when managing a device (and
restore them to their original values after unmanaging it) to ensure
that calling nm_device_bring_up() on a managed device won't ever cause
kernel IPv6 autoconf to happen. Remove some other redundant accept_ra
setting.

Fix up the deconfigure case of dispose() to clear the device's IP6
config as well as its IP4 config.

https://bugzilla.gnome.org/show_bug.cgi?id=700414
2013-11-15 10:49:43 -05:00