Commit graph

124 commits

Author SHA1 Message Date
Dan Winship
3be53899fa libnm-core, settings: move NMSettingsError to nm-errors
Move the definition of NMSettingsError to nm-errors, register it with
D-Bus, and verify in the tests that it maps correctly.

Remove a few unused error codes, simplify a few others, and rename
GENERAL to FAILED and HOSTNAME_INVALID to INVALID_HOSTNAME, for
consistency.
2014-10-22 08:29:09 -04:00
Dan Winship
862d4efeac libnm-core, core: move NMManagerError to nm-errors
Move the definition of NMManagerError to nm-errors, register it with
D-Bus, and verify in the tests that it maps correctly.

NM_MANAGER_ERROR_INTERNAL gets renamed to NM_MANAGER_ERROR_FAILED for
consistency. NM_MANAGER_ERROR_UNMANAGED_DEVICE is dropped since that
name doesn't really describe the one place it was previously used in.
NM_MANAGER_ERROR_SYSTEM_CONNECTION is dropped because it was't being
used. NM_MANAGER_ERROR_UNSUPPORTED_CONNECTION_TYPE is dropped because
it can be replaced with an NM_CONNECTION_ERROR.
NM_MANAGER_ERROR_AUTOCONNECT_NOT_ALLOWED is turned into the more
generic NM_MANAGER_ERROR_CONNECTION_NOT_AVAILABLE.

Also, remove the <tp:possible-errors> sections from nm-manager.xml,
since they were completely out of date.
2014-10-22 08:29:09 -04:00
Dan Winship
4f75ff92b4 libnm-core, libnm, devices: merge client and daemon NMDeviceError
Merge libnm's NMDeviceError and the daemon's NMDeviceError into a
single enum (in nm-errors.h). Register the domain with D-Bus, and add
a test that the client side decodes it correctly.

The daemon's NM_DEVICE_ERROR_CONNECTION_INVALID gets absorbed into
libnm's NM_DEVICE_ERROR_INVALID_CONNECTION, and
NM_DEVICE_ERROR_UNSUPPORTED_DEVICE_TYPE gets dropped, since it was
only returned from one place, which is now using
NM_DEVICE_ERROR_FAILED, since (a) it ought to be a "can't happen", and
(b) the only caller of that function just logs error->message and then
frees the error without ever looking at the code.
2014-10-22 08:29:08 -04:00
Dan Winship
69099f3e80 libnm: merge device-type-specific errors into NMDeviceError
As with the settings, each device type was defining its own error
type, containing either redundant or non-useful error codes. Drop all
of the subtype-specific errors, and reduce things to just
NM_DEVICE_ERROR_FAILED, NM_DEVICE_ERROR_INCOMPATIBLE_CONNECTION, and
NM_DEVICE_ERROR_INVALID_CONNECTION.

The device-type-specific errors were only returned from their
nm_device_connection_compatible() implementations, so this is also a
good opportunity to simplify those, by moving duplicated functionality
into the base NMDevice implementation, and then allowing the
subclasses to assume that the connection has already been validated in
their own code. Most of the implementations now just check that the
connection has the correct type for the device (which can't be done at
the NMDevice level since some device types (eg, Ethernet) support
multiple connection types.)

Also, make sure that all of the error messages are localized.
2014-10-22 08:29:08 -04:00
Dan Winship
5632ac6730 libnm: drop unused NMRemoteConnectionError
NMRemoteConnection used to return
NM_REMOTE_CONNECTION_ERROR_DISCONNECTED if you tried to operate on a
connection that had been disconnected from its D-Bus proxy. But this
disappeared in the gdbus port (since gdbus doesn't emit a signal when
it happens, so it's harder to notice. And it's not clear why
NMRemoteConnection did this when no other class did anyway...).
2014-10-22 08:29:08 -04:00
Dan Winship
9c67b6fb08 libnm-core, core: register NMConnectionError with D-Bus
Register NMConnectionError with D-Bus on both sides, so that, eg,
connection validation failures in the daemon will translate to the
correct error codes in the client.
2014-10-22 08:29:08 -04:00
Dan Winship
b1bcfa8fed libnm-core: add nm-errors.[ch]
Add nm-errors.[ch], and move libnm-core's two error domains
(NMConnectionError and NMCryptoError) there.

NMCryptoError wasn't previously visible, but it can be returned from
some public API, so it should be.
2014-10-22 08:29:08 -04:00
Dan Winship
2d8e7bd247 libnm-core: merge NMSetting*Error into NMConnectionError
Each setting type was defining its own error type, but most of them
had exactly the same three errors ("unknown", "missing property", and
"invalid property"), and none of the other values was of much use
programmatically anyway.

So, this commit merges NMSettingError, NMSettingAdslError, etc, all
into NMConnectionError. (The reason for merging into NMConnectionError
rather than NMSettingError is that we also already have
"NMSettingsError", for errors related to the settings service, so
"NMConnectionError" is a less-confusable name for settings/connection
errors than "NMSettingError".)

Also, make sure that all of the affected error messages are localized,
and (where appropriate) prefix them with the relevant property name.

Renamed error codes:

NM_SETTING_ERROR_PROPERTY_NOT_FOUND -> NM_CONNECTION_ERROR_PROPERTY_NOT_FOUND
NM_SETTING_ERROR_PROPERTY_NOT_SECRET -> NM_CONNECTION_ERROR_PROPERTY_NOT_SECRET

Remapped error codes:

NM_SETTING_*_ERROR_MISSING_PROPERTY -> NM_CONNECTION_ERROR_MISSING_PROPERTY
NM_SETTING_*_ERROR_INVALID_PROPERTY -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_ERROR_PROPERTY_TYPE_MISMATCH -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_BLUETOOTH_ERROR_TYPE_SETTING_NOT_FOUND -> NM_CONNECTION_ERROR_INVALID_SETTING
NM_SETTING_BOND_ERROR_INVALID_OPTION -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_BOND_ERROR_MISSING_OPTION -> NM_CONNECTION_ERROR_MISSING_PROPERTY
NM_SETTING_CONNECTION_ERROR_TYPE_SETTING_NOT_FOUND -> NM_CONNECTION_ERROR_MISSING_SETTING
NM_SETTING_CONNECTION_ERROR_SLAVE_SETTING_NOT_FOUND -> NM_CONNECTION_ERROR_MISSING_SETTING
NM_SETTING_IP4_CONFIG_ERROR_NOT_ALLOWED_FOR_METHOD -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_IP6_CONFIG_ERROR_NOT_ALLOWED_FOR_METHOD -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_VLAN_ERROR_INVALID_PARENT -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_WIRELESS_SECURITY_ERROR_MISSING_802_1X_SETTING -> NM_CONNECTION_ERROR_MISSING_SETTING
NM_SETTING_WIRELESS_SECURITY_ERROR_LEAP_REQUIRES_802_1X -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_WIRELESS_SECURITY_ERROR_LEAP_REQUIRES_USERNAME -> NM_CONNECTION_ERROR_MISSING_PROPERTY
NM_SETTING_WIRELESS_SECURITY_ERROR_SHARED_KEY_REQUIRES_WEP -> NM_CONNECTION_ERROR_INVALID_PROPERTY
NM_SETTING_WIRELESS_ERROR_CHANNEL_REQUIRES_BAND -> NM_CONNECTION_ERROR_MISSING_PROPERTY

Dropped error codes (were previously defined but unused):

NM_SETTING_CDMA_ERROR_MISSING_SERIAL_SETTING
NM_SETTING_CONNECTION_ERROR_IP_CONFIG_NOT_ALLOWED
NM_SETTING_GSM_ERROR_MISSING_SERIAL_SETTING
NM_SETTING_PPP_ERROR_REQUIRE_MPPE_NOT_ALLOWED
NM_SETTING_PPPOE_ERROR_MISSING_PPP_SETTING
NM_SETTING_SERIAL_ERROR_MISSING_PPP_SETTING
NM_SETTING_WIRELESS_ERROR_MISSING_SECURITY_SETTING
2014-10-22 08:29:07 -04:00
Dan Winship
a7b1ee77db libnm-core: drop nm_setting_lookup_type_by_quark()
nm_setting_lookup_type_by_quark() was only ever used in places that
were still mistakenly assuming the old style of nm_connection_verify()
errors, where the error message would contain only a property name and
no further explanation. Fix those places to assume that the error will
contain a real error message, and include both the setting name and
the property name.

Given that, there's no longer any need for
nm_setting_lookup_type_by_quark(), so drop it.
2014-10-22 08:29:07 -04:00
Dan Winship
1f8ec6122e libnm: fix NMActiveConnection:specific-object-path
NMActiveConnection:specific-object was renamed to
NMActiveConnection:specific-object-path in 677314c5, but it didn't
actually work, because of assumptions NMObject makes. Fix that.
2014-10-21 09:45:20 -04:00
Dan Winship
be8060f42f libnm: add an object-creation-failed test 2014-10-19 09:27:48 -04:00
Dan Winship
f96835b83c libnm: add a virtual device creation-and-activation test
Add a test of creating a (virtual) device and activating a connection
on it at the same time.
2014-10-19 09:27:48 -04:00
Dan Winship
e06bd1ef17 libnm: add an active-connection test to test-nm-client
Test NMClient's handling of active connections, and in particular test
that we can correctly resolve the circular reference between an
NMDevice and an NMActiveConnection, both synchronously and
asynchronously.
2014-10-19 09:27:48 -04:00
Dan Winship
b9c09a2b0d tools: add a bit more activation support to test-networkmanager-service.py
Now test-networkmanager-service.py can create ActiveConnections, though
they don't actually finish activating.
2014-10-19 09:27:47 -04:00
Dan Winship
08a344d723 libnm: abstract out duplicated device-creating code in tests 2014-10-19 09:27:47 -04:00
Dan Winship
d78ea27d36 libnm: postpone activation callback until all objects are ready
In some cases, the nm_client_activate_connection() callback could be
invoked when either the NMActiveConnection or the NMDevice had not
been initialized yet. Fix it to wait for both of them to be fully
initialized before invoking the callback.
2014-10-19 09:26:50 -04:00
Dan Winship
a9e906fcbd libnm: add -added and -removed signals for ACs to NMManager 2014-10-19 09:26:49 -04:00
Dan Winship
2ac83c0e8b libnm: fix async property circular reference handling
3e5b3833 changed various libnm methods to return 0-length arrays
rather than NULL, and changed various other places to assume this
behavior. The guarantee that they didn't return NULL relied on the
assumption that all D-Bus properties would get initialized by NMObject
code before anyone could call their get methods.

However, this assumption was violated in the case where two objects
circularly referenced each other (eg, NMDevice and
NMActiveConnection). f9f9d297 attempted to fix this by slightly
changing the ordering of NMObjectCache operations, but it actually
ended up breaking things and causing infinite loops of object creation
in some cases.

There's no way to guarantee we never return partially-initialized
objects without heavily rewriting the object-creation code, so this
reverts most of f9f9d297 (leaving only the new comment in
_nm_object_create()). The crashes introduced by 3e5b3833 will no
longer happen because we've now fixed the classes to have initialized
their object arrays to non-NULL values even before they get the real
values.
2014-10-19 09:26:49 -04:00
Dan Winship
ab878f7479 libnm: further NULL-vs-empty-array fixes
In some cases, code may look at the value of an array-valued property
during object initialization, before NMObject has set it to its actual
initial value. So ensure that we initialize all such properties to an
empty array, rather than leaving them NULL.

Also fix another bug in NMClient that could result in
priv->active_connections being NULL during certain signal emissions,
and fix nm_client_get_active_connections() to not return NULL when NM
was not running.
2014-10-19 09:26:49 -04:00
Thomas Haller
e5194fd346 libnm: hide API for generic handling of secrets
The functions nm_setting_clear_secrets(),
nm_setting_clear_secrets_with_flags(), and nm_setting_need_secrets()
are not used outside of libnm-core. Remove them from public API.

Signed-off-by: Thomas Haller <thaller@redhat.com>
2014-10-12 21:17:17 +02:00
Thomas Haller
24a2f9c6cd libnm: add NMSettingConnection:autoconnect-priority setting
The autoconnect priority has only any relevance, if the connection
is autoconnect too.

The priority defaults to zero, with higher numbers meaning preferred.
The valid range is limited to [-999,999].

Signed-off-by: Thomas Haller <thaller@redhat.com>
2014-10-12 20:13:17 +02:00
Dan Winship
60cce40042 libnm: fix crash in nm_client_new_async(), add a test for it
nm_client_new_async() got broken in the NMManager split. Fix it, and
use it from one of the tests in test-nm-client to make sure it's
getting tested in the future.
2014-10-10 13:44:54 -04:00
Dan Winship
677314c540 libnm: fix NMActiveConnection object-path-valued properties
NMActiveConnection:connection was an object path rather than an
NMRemoteConnection because in the past the NMObject property system
wasn't capable of handling NMRemoteConnection-valued properties.
NMActiveConnection:master was an object path rather than an NMDevice
entirely by accident. Fix both.

NMActiveConnection:specific-object can't currently be converted to an
object, because we don't know ahead of time what object type it is,
and NMObject can't deal with that. Instead, we rename it to
:specific-object-path (and likewise for its get function), both to
emphasize that it doesn't behave like other properties, and to leave
the old name open for an actual object-valued property later on.
2014-10-10 13:10:19 -04:00
Dan Winship
8c3d6f734b libnm: add nm-types.h, to avoid include loops
Add nm-types.h defining all the type structs, to avoid future include
loops. Clean up the includes in all of the installed headers.
2014-10-10 13:10:18 -04:00
Dan Winship
6f3d1f9526 libnm: merge NMRemoteSettings into NMClient
Make NMRemoteSettings internal and have NMClient wrap all of its APIs,
just like it does with NMManager.
2014-10-10 12:40:19 -04:00
Dan Winship
90f66ff456 libnm: split "NMManager" out of NMClient
Clone NMClient as NMManager, and make NMClient just be a wrapper
around that new class.
2014-10-10 12:40:14 -04:00
Dan Winship
98bcc51240 libnm: clean up NMClient semantics when NM is not running
Add a single function to check if NM is running and set a GError if
not, then use it as appropriate.

Don't bother to check if NM is running in get_*() functions if
nm_running_changed_cb() would have reset the field anyway (and fix
that up to reset a few more fields).
2014-10-10 12:40:14 -04:00
Dan Winship
66bb00f677 libnm: (trivial) reorder NMClient function declarations/code
Rearrange the NMClient function declarations and the functions
themselves, and group them into "general", "device", and "active
connection" sections.

No code changes, just moving things around.
2014-10-10 12:40:08 -04:00
Dan Winship
c9e0e66a80 libnm, libnm-glib: clarify nm_client_activate_connection() semantics
nm_client_activate_connection() and
nm_client_add_and_activate_connection() return when the activation has
*started*, not when it *finishes*. Clarify this a bit more in the
libnm docs, and copy that clarification to libnm-glib as well.

https://bugzilla.gnome.org/show_bug.cgi?id=736233
2014-10-05 11:21:16 -04:00
Dan Winship
a91e60902e libnm-core: make NMSettingSerial:parity an enum
NMSettingSerial:parity was defined as a char-typed property that could
have the (case-sensitive!) values 'n', 'E', or 'o'. This is zany. Add
an NMSettingSerialParity enum, and use that instead.
2014-10-03 09:36:28 -04:00
Dan Winship
fcfb4b40ba libnm: make use of GParamSpecFlags and GParamSpecEnum
Make enum- and flags-valued properties use GParamSpecEnum and
GParamSpecFlags, for better introspectability/bindability.

This requires no changes outside libnm-core/libnm since the expected
data size is still the same with g_object_get()/g_object_set(), and
GLib will internally convert between int/uint and enum/flags GValues
when using g_object_get_property()/g_object_set_property().
2014-10-03 09:36:28 -04:00
Dan Winship
ad25e5c970 libnm: reorganize demarshal_generic(), make unrecognized type a warning
Redo the HANDLE_TYPE macro in demarshal_generic() in a more
syntactically-sane way (both to help the editor with indentation and
to make it not look so weird).

Also, if demarshal_generic() is asked to handle a property of a type
that it doesn't know how to handle, that's a programmer error, so do a
g_warning() in that case (as opposed to being asked to demarshal a
value of the wrong D-Bus type, which could just be a bug in the peer
that sent the data, so that stays as a debug message).
2014-10-03 09:36:28 -04:00
Dan Winship
5c2d2eed30 libnm: fix properties-changed debug logging
The code was mistakenly still using G_VALUE_TYPE_NAME() instead of
g_variant_get_type_string().

Also, refer to the properties with standard gtk-doc punctuation:
"TypeName:property-name".
2014-10-03 09:36:27 -04:00
Thomas Haller
97b2c1b0d1 libnm: share private DBUS connection
Cache the private DBUS connection and reuse it. Otherwise we end up
creating several private connnections, as an NMObject instance creates
a new connection (unless it is passed in as NMObject:dbus-connection
property).

We already pass the existing "parent" DBUS connection when creating
the proxy objects. However, when creating two independent objects
(e.g. nm_client_new() and nm_remote_settings_new()), their private
DBUS connections were not shared.

Implement this sharing inside nm-dbus-helpers.c

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

Signed-off-by: Thomas Haller <thaller@redhat.com>
2014-10-03 11:21:40 +02:00
Thomas Haller
df57b6b4d1 libnm: add NMObject:dbus-connection property to inject DBUS connection
Commit b732380d1e removed the gobject
property "NMObject:connection". However, this property is still needed
to inject the DBUS connection when creating new proxy objects. Without it,
we call _nm_dbus_new_connection() in the constructor for every proxy NMObject.

In case of non-private connections, g_bus_get_sync() already returns the same
connection. However for private connections, g_dbus_connection_new_for_address_sync()
would create a separate DBUS connection.

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

Signed-off-by: Thomas Haller <thaller@redhat.com>
2014-10-03 11:21:17 +02:00
Thomas Haller
284a14d62f libnm: assert for interface name in _nm_object_class_add_interface()
Signed-off-by: Thomas Haller <thaller@redhat.com>
2014-10-03 11:21:17 +02:00
Thomas Haller
94331184d8 libnm: remove unused variable NMObjectPrivate:private_connection
Signed-off-by: Thomas Haller <thaller@redhat.com>
2014-10-03 11:21:17 +02:00
Jiří Klimeš
7e67fd2b24 libnm: return errors in nm_client_networking_set_enabled()
and do not print an error in the library. The caller can decide what to do
on an error.
2014-10-01 11:53:07 +02:00
Jiří Klimeš
cf72286421 libnm: fix argument type passed to RequestScan() D-Bus call
GLib-ERROR **: g_variant_new: expected GVariant of type `a{sv}' but received value has type `aa{sv}'
2014-10-01 11:53:07 +02:00
Jiří Klimeš
687f319201 libnm: g_variant_new() for strings does not allow NULLs
So pass "" instead of NULL.

GLib-CRITICAL **: g_variant_new_string: assertion `string != NULL' failed
2014-09-30 14:13:49 +02:00
Dan Winship
e684f36365 libnm-core: add nm_utils_wifi_strength_bars(), use it in nmcli and nmtui
Add nm_utils_wifi_strength_bars(), which figures out whether the
terminal can display graphical wifi strength bars, and converts a
numerical value to the appropriate Unicode or ASCII characters.

This also now takes into consideration the fact that the console font
doesn't contain all of the necessary characters, so we can't display
the graphical bars there. (rh #1131491)
2014-09-27 11:49:15 -04:00
Thomas Haller
6d65f1d56f libnm: fix compilation for wrong g_return call on void/non-void function
Fixes: 41eca3ea49
Signed-off-by: Thomas Haller <thaller@redhat.com>
2014-09-25 17:39:56 +02:00
Dan Winship
41eca3ea49 libnm: add some missing sync/async method variants
Add the missing variant in most places in the API where previously
there was either only a synchronous version or only an asynchronous
version.

There is not yet a synchronous nm_client_activate_connection(),
nm_client_add_and_activate_connection(), or
nm_remote_settings_add_connection(), because the existing async code
depends on waiting for other asynchronous events, so making them run
synchronously is slightly more complicated. But these APIs can be
added later.
2014-09-25 09:29:21 -04:00
Dan Winship
2237ea3ddb libnm: make sync/async APIs more GLib-like
Make synchronous APIs take GCancellables, and make asynchronous APIs
use GAsyncReadyCallbacks and have names ending in "_async", with
"_finish" functions to retrieve the results.

Also, make nm_client_activate_connection_finish(),
nm_client_add_and_activate_finish(), and
nm_remote_settings_add_connection_finish() be (transfer full) rather
than (transfer none), because the refcounting semantics become
slightly confusing in some edge cases otherwise.
2014-09-25 09:29:20 -04:00
Dan Winship
6ca10677d6 libnm: merge saved and unsaved connection methods
Merge nm_remote_settings_add_connection() and
nm_remote_settings_add_connection_unsaved(), and likewise
nm_remote_connection_commit_changes() and
nm_remote_connection_commit_changes_unsaved(), by adding a boolean
flag to each saying whether to save to disk.
2014-09-25 09:29:20 -04:00
Thomas Haller
351cf9b328 libnm: fix warning about returning zero instead of %NULL in _nm_object_create()
clang warns:
    make[4]: Entering directory `./NetworkManager/libnm'
      CC       nm-object.lo
    nm-object.c:640:11: error: expression which evaluates to zero treated as a null pointer constant of type 'GObject *' (aka 'struct _GObject *') [-Werror,-Wnon-literal-null-conversion]
                            return G_TYPE_INVALID;
                                   ^~~~~~~~~~~~~~
    /usr/include/glib-2.0/gobject/gtype.h:57:26: note: expanded from macro 'G_TYPE_INVALID'
    #define G_TYPE_INVALID                  G_TYPE_MAKE_FUNDAMENTAL (0)
                                            ^~~~~~~~~~~~~~~~~~~~~~~~~~~
    /usr/include/glib-2.0/gobject/gtype.h:221:36: note: expanded from macro 'G_TYPE_MAKE_FUNDAMENTAL'
    #define G_TYPE_MAKE_FUNDAMENTAL(x)      ((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
                                            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    nm-object.c:655:11: error: expression which evaluates to zero treated as a null pointer constant of type 'GObject *' (aka 'struct _GObject *') [-Werror,-Wnon-literal-null-conversion]
                            return G_TYPE_INVALID;
                                   ^~~~~~~~~~~~~~
    /usr/include/glib-2.0/gobject/gtype.h:57:26: note: expanded from macro 'G_TYPE_INVALID'
    #define G_TYPE_INVALID                  G_TYPE_MAKE_FUNDAMENTAL (0)
                                            ^~~~~~~~~~~~~~~~~~~~~~~~~~~
    /usr/include/glib-2.0/gobject/gtype.h:221:36: note: expanded from macro 'G_TYPE_MAKE_FUNDAMENTAL'
    #define G_TYPE_MAKE_FUNDAMENTAL(x)      ((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
                                            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    2 errors generated.

Fixes: b3c4917b0f
Signed-off-by: Thomas Haller <thaller@redhat.com>
2014-09-22 16:32:01 +02:00
Dan Winship
f6f79aa433 libnm: simplify private D-Bus connection tracking
dcbw points out that g_dbus_connection_get_unique_name() can be used
to distinguish private from bus connections without us needing to keep
track ourselves.
2014-09-19 10:45:12 -04:00
Dan Winship
8f7b1e87c2 libnm: fix private bus async codepaths
_nm_dbus_new_connection_async() wasn't marking the connection as
private when it was private, causing
_nm_dbus_new_proxy_for_connection*() to pass the wrong args. Fix that.
2014-09-19 10:35:04 -04:00
Dan Winship
8f6d056b31 libnm: fix nm_access_point_get_ssid() return value
nm_access_point_get_ssid() used to return NULL if the AP didn't have a
visible SSID. This got broken in the NM_TYPE_SSID -> G_TYPE_BYTES
change. Fix that. (Fixes a crash in nmtui and nmcli with SSID-less
APs.)

https://bugzilla.gnome.org/show_bug.cgi?id=736802
2014-09-19 09:06:20 -04:00
Lubomir Rintel
5f54ed3a27 libnm: avoid init_async NULL dereference on cancellable=0x0
(gdb) run c add type bond
  Starting program: /usr/bin/nmcli c add type bond
  Got object file from memory but can't read symbols: File truncated.
  [Thread debugging using libthread_db enabled]
  Using host libthread_db library "/lib64/libthread_db.so.1".
  [New Thread 0x7ffff39b2700 (LWP 13042)]
  [New Thread 0x7fffec4bc700 (LWP 13043)]

  (process:13038): GLib-GObject-CRITICAL **: g_object_ref: assertion 'G_IS_OBJECT (object)' failed

  Program received signal SIGTRAP, Trace/breakpoint trap.
  g_logv (log_domain=0x7ffff5cda224 "GLib-GObject", log_level=G_LOG_LEVEL_CRITICAL, format=<optimized out>, args=args@entry=0x7fffffffd290) at gmessages.c:1046
  1046              g_private_set (&g_log_depth, GUINT_TO_POINTER (depth));
  (gdb) bt
  #0  0x00007ffff59b6c70 in g_logv (log_domain=0x7ffff5cda224 "GLib-GObject", log_level=G_LOG_LEVEL_CRITICAL, format=<optimized out>, args=args@entry=0x7fffffffd290) at gmessages.c:1046
  #1  0x00007ffff59b6eaf in g_log (log_domain=log_domain@entry=0x7ffff5cda224 "GLib-GObject", log_level=log_level@entry=G_LOG_LEVEL_CRITICAL, format=format@entry=0x7ffff5a25a9d "%s: assertion '%s' failed")
      at gmessages.c:1079
  #2  0x00007ffff59b6ee9 in g_return_if_fail_warning (log_domain=log_domain@entry=0x7ffff5cda224 "GLib-GObject", pretty_function=pretty_function@entry=0x7ffff5cdd6b3 <__FUNCTION__.13314> "g_object_ref", expression=expression@entry=0x7ffff5cdc388 "G_IS_OBJECT (object)") at gmessages.c:1088
  #3  0x00007ffff5cb39aa in g_object_ref (_object=_object@entry=0x0) at gobject.c:3041
  #4  0x00007ffff7ad5418 in _nm_dbus_new_connection_async (cancellable=0x0, callback=<optimized out>, user_data=<optimized out>) at nm-dbus-helpers.c:131
  #5  0x00007ffff7ae58f1 in handle_property_changed (synchronously=0, pi=0x5555558a9610, value=0x7fffe40138a0, property_name=<optimized out>, self=0x555555831980 [NMRemoteSettings]) at nm-object.c:1115
  #6  0x00007ffff7ae58f1 in handle_property_changed (self=self@entry=0x555555831980 [NMRemoteSettings], dbus_name=<optimized out>, value=<optimized out>, synchronously=synchronously@entry=0) at nm-object.c:1186
  #7  0x00007ffff7ae59cb in process_properties_changed (self=0x555555831980 [NMRemoteSettings], properties=<optimized out>, synchronously=0) at nm-object.c:1218
  #8  0x00007ffff7ae5a7a in property_proxy_signal (proxy=<optimized out>, sender_name=<optimized out>, signal_name=<optimized out>, parameters=<optimized out>, user_data=0x555555831980) at nm-object.c:1234
  #9  0x00007ffff4d34d60 in ffi_call_unix64 () at ../src/x86/unix64.S:76
  #10 0x00007ffff4d347d1 in ffi_call (cif=cif@entry=0x7fffffffd7e0, fn=<optimized out>, rvalue=0x7fffffffd740, avalue=avalue@entry=0x7fffffffd6c0) at ../src/x86/ffi64.c:525
  #15 0x00007ffff5cca2ef in <emit signal ??? on instance 0x555555881c10 [NMDBusSettingsProxy]> (instance=instance@entry=0x555555881c10, signal_id=<optimized out>, detail=detail@entry=0) at gsignal.c:3365
      #11 0x00007ffff5caf6f4 in g_cclosure_marshal_generic (closure=0x5555558aa400, return_gvalue=0x0, n_param_values=<optimized out>, param_values=<optimized out>, invocation_hint=<optimized out>, marshal_data=0x0) at gclosure.c:1448
      #12 0x00007ffff5caeed5 in g_closure_invoke (closure=0x5555558aa400, return_value=return_value@entry=0x0, n_param_values=4, param_values=param_values@entry=0x7fffffffda10, invocation_hint=invocation_hint@entry=0x7fffffffd9b0) at gclosure.c:768
      #13 0x00007ffff5cc1202 in signal_emit_unlocked_R (node=node@entry=0x555555819270, detail=detail@entry=0, instance=instance@entry=0x555555881c10, emission_return=emission_return@entry=0x0, instance_and_params=instance_and_params@entry=0x7fffffffda10) at gsignal.c:3553
      #14 0x00007ffff5cca0c1 in g_signal_emit_valist (instance=<optimized out>, signal_id=<optimized out>, detail=<optimized out>, var_args=var_args@entry=0x7fffffffdbd0) at gsignal.c:3309
  #16 0x00007ffff63d8bcc in on_signal_received (connection=<optimized out>, sender_name=0x0, object_path=<optimized out>, interface_name=<optimized out>, signal_name=0x7fffe40195b0 "PropertiesChanged", parameters=0x7fffe4031000, user_data=0x5555558a3f30) at gdbusproxy.c:917
  #17 0x00007ffff63c83b4 in emit_signal_instance_in_idle_cb (data=0x7fffe403a6d0) at gdbusconnection.c:3753
  #18 0x00007ffff59afb6b in g_main_context_dispatch (context=0x5555557eb530) at gmain.c:3064
  #19 0x00007ffff59afb6b in g_main_context_dispatch (context=context@entry=0x5555557eb530) at gmain.c:3663
  #20 0x00007ffff59aff08 in g_main_context_iterate (context=0x5555557eb530, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at gmain.c:3734
  #21 0x00007ffff59b0232 in g_main_loop_run (loop=0x5555557e3440) at gmain.c:3928
  #22 0x000055555556fd57 in main (argc=<optimized out>, argv=<optimized out>) at nmcli.c:587
  (gdb)

https://bugzilla.gnome.org/show_bug.cgi?id=736962
2014-09-19 08:33:15 -04:00