Commit graph

109 commits

Author SHA1 Message Date
Dan Williams
7ed2d7a809 supplicant: make NMSupplicantInterface independent of NMSupplicantManager
The Interface held a reference to the manager to listen for the 'available'
signal.  Instead of that, let's make the child unaware of the master to
keep the inheritance cleaner.
2015-03-03 14:56:24 -06:00
Dan Williams
0e8f5b2e57 supplicant: clean up NMSupplicantInterface::dispose() 2015-03-03 14:56:24 -06:00
Dan Winship
3bfb163a74 all: consistently include config.h
config.h should be included from every .c file, and it should be
included before any other include. Fix that.

(As a side effect of how I did this, this also changes us to
consistently use "config.h" rather than <config.h>. To the extent that
it matters [which is not much], quotes are more correct anyway, since
we're talking about a file in our own build tree, not a system
include.)
2014-11-13 17:18:42 -05:00
Geoffrey Thomas
c75d878aa2 supplicant: fix expected return type of AddBlob D-Bus call
Commit fb6cde50 changed from setBlobs in the old wpa_supplicant D-Bus
interface, which returned an integer status code, to AddBlob in the new
one, which doesn't, but didn't account for that change. That caused
error messages of the form "Couldn't set network certificates: Too few
arguments in reply." on valid connection requests.

Signed-off-by: Geoffrey Thomas <gthomas@mokafive.com>
2014-08-20 09:32:12 -05:00
Geoffrey Thomas
5c31ed880d supplicant: fix invalid parameter type in AddBlob D-Bus call
Types passed to dbus-glib need to be GTypes, not D-Bus type. While the
DBUS_TYPE_G_* macros are GTypes from libdbus-glib, the other DBUS_ types
aren't.

Signed-off-by: Geoffrey Thomas <gthomas@mokafive.com>
Signed-off-by: Thomas Haller <thaller@redhat.com>
2014-08-04 14:59:03 +02:00
Thomas Haller
e343c45ebb supplicant: fix crash passing invalid parameter to AddBlob when adding network
The DBUS method 'AddBlob' expects a data argument of type 'ay'.
Instead we passed the hash table 'blobs'.

This must be broken for a long time and surprisingly stayed unnoticed.

https://mail.gnome.org/archives/networkmanager-list/2014-July/msg00001.html

Fixes: fb6cde508c
Signed-off-by: Thomas Haller <thaller@redhat.com>
2014-07-02 13:08:23 +02:00
Dan Winship
aa1dce6da2 all: remove remaining GParamSpec name/blurb strings
Remove all remaining GParamSpec name and blurb strings (and fix
indentation while we're there), and add G_PARAM_STATIC_STRINGS to all
paramspecs that were lacking it.
2014-06-19 17:45:03 -04:00
Thomas Haller
f50ca4aed1 core: use nm_utils_get_monotonic_timestamp_s in nm-supplicant-interface
https://bugzilla.gnome.org/show_bug.cgi?id=720833

Signed-off-by: Thomas Haller <thaller@redhat.com>
2014-01-30 19:51:45 +01:00
Dan Williams
44ccf3454b supplicant: suppress more bus activation failure errors
These are expected errors if the supplicant can't be launched
for some reason.  We should only log entirely unexpected errors
like wrong method arguments or types, really odd failures, etc.

NetworkManager[1312]: <error> [1379601146.148818] [supplicant-manager/nm-supplicant-interface.c:853] interface_add_cb(): (wlan0): error adding interface: Did not receive a reply. Possible causes include: the remote application did not send a reply, the message bus security policy blocked the reply, the reply timeout expired, or the network connection was broken.
NetworkManager[1312]: <error> [1379601171.160742] [supplicant-manager/nm-supplicant-interface.c:853] interface_add_cb(): (wlan0): error adding interface: Activation of fi.w1.wpa_supplicant1 timed out
2013-09-19 11:16:47 -05:00
Dan Williams
309ecf4f90 wifi: remove NMSupplicantInfo pending call tracking struct
The sole purpose of this structure was to track in-progress D-Bus
pending calls, so that they could be selectively canceled if the
supplicant got disconnected during assocation (canceling only
assocation-related calls) or if the supplicant went away (canceling
both assocation-related and general calls).  But its only benefit
over NMCallStore alone was knowing which list of pending calls to
remove the current pending call from, and we can just explicitly
do that in the code instead.

Thus, the SupplicantInfo structure is removed and replaced with
explicitly adding and removing the pending calls from the call
store.

(The DBusGProxy is not referenced by dbus_g_proxy_begin_call(),
the caller is expected to hold a reference to the proxy for as long
as necessary, and when the proxy is destroyed, all its pending calls
will be canceled.  Since the supplicant interface owns the proxies,
there's no possibility that the proxy will outlive the supplicant
interface and thus call back into it when its dead.  The old code
referenced the supplicant interface over the life of the pending
call, but that's not necessary.)
2013-06-07 11:33:42 -05:00
Dan Williams
e65c2e6eb4 wifi: simplify NMCallStore
Its only purpose is to track a number of DBusGProxyCalls to let
us cancel them all at the same time, without having to track each
call individually in the supplicant code.  Instead of abstracting
it to the level of GObject and gpointer, just use the types it's
meant for.
2013-06-07 11:33:42 -05:00
Dan Williams
a95c57887c wifi: fix obvious copy & paste bug
The supplicant info object should be passed the DBusGProxy that
we're about to use, not some other proxy.
2013-06-07 11:33:21 -05:00
Dan Williams
2702ea573a Revert "wifi: fix compatibility with wpa_supplicant 0.7.x"
This reverts commit 7902787263.

We'll be requiring wpa_supplicant 1.0+ from now on. wpa_supplicant
1.0 is over a year old a this point, so it's not unrealistic to
bump the requirement.

NOTE: you really do want 1.1 or later anyway if you want to
successfully use WPA-EAP networks, since that version has fixes
to correctly handle PMKSA preauthentication, otherwise you'll
get periodic disconnections on enterprise networks.
2013-06-07 11:33:21 -05:00
Dan Williams
04cb58eacd core: convert the DBus manager to a single-ref object
It's created very, very early and never needs to be unrefed
by anything except the main() function.
2013-05-20 16:38:33 -03:00
Dan Winship
d529580cbb libnm-glib, core: use g_cclosure_marshal_generic
Since we depend on new glib now, we can just use the generic
marshaller rather than generating our own.
2013-05-08 14:59:29 -04:00
Jiří Klimeš
82fb1978a4 all: use G_VALUE_INIT to initialize GValue variables
It makes the initializations more explicit.
G_VALUE_INIT is available since glib 2.30, and NM now require glib >= 2.32
2013-03-25 08:41:18 +01:00
Dan Winship
6f44b7f3c6 all: remove redundant return-if-fail checks
NM_IS_FOO(x) returns FALSE if x is NULL, so we don't need a separate
(x != NULL) check before it.
2013-03-07 07:32:27 -05:00
Dan Winship
08f04466e8 all: remove more pointless NULL checks
GObject creation cannot normally fail, except for types that implement
GInitable and take a GError in their _new() method. Some NM types
override constructor() and return NULL in some cases, but these
generally only happen in the case of programmer error (eg, failing to
set a mandatory property), and so crashing is reasonable (and most
likely inevitable anyway).

So, remove all NULL checks after calls to g_object_new() and its
myriad wrappers.

https://bugzilla.gnome.org/show_bug.cgi?id=693678
2013-02-13 13:38:36 -05:00
Dan Williams
b89990ae2c wifi: detect whether supplicant supports AP mode or not
And return an error when trying to activate an AP mode connection
if the supplicant does not support it.

With wpa_supplicant 1.0 and earlier there is no way to positively detect
whether AP mode is supported, so we simply try to start AP mode
and then fail if it doesn't work.

With more recent versions we can check the Introspection data
(if the supplicant has been built with introspection enabled) or
check the global Capabilities (if the supplicant is recent enough)
for positive indication of AP mode support.
2012-10-17 14:06:51 -05:00
Dan Williams
4cccab61ab supplicant: handle some D-Bus spawn errors better
If D-Bus fails to spawn the supplicant it sometimes returns a method
timeout error instead of a spawn error.  We've seen that happen on
F18 when systemd is used to autolaunch the supplicant.  That causes
NM to assume that the supplicant crashed and thus never try to talk
to it again, on the assumption that (a) it crashed and (b) it will
crash again if we try to use it, and thus we'll be in a spawn loop.

First, (a) is not necessarily the case, and second, the supplicant
doesn't crash like that anymore.  So we're pretty safe to just talk
to the supplicant if it starts later instead of ignoring it if
we detect the timeout error.
2012-10-06 17:08:53 -05:00
Dan Williams
ee22af6961 wifi: handle supplicant's deauthentication disconnect reason
Recent versions of wpa_supplicant have a "DisconnectReason" property
that, upon a deauthentication event, contains an IEEE 802.11
"Reason Code" for why the disconnect may have occurred.  We may
want to use this in the future, so add the infrastructure to pass it
around to supplicant listeners.
2012-09-20 10:11:36 -05:00
Dan Williams
e9457176f5 wifi: use supplicant's last_scan time for on-demand scan checking
And return errors when we refuse an on-demand scan.
2012-06-07 15:06:48 -05:00
Dan Williams
c0131f767f wifi: kill usage of deprecated GTimeVal
We don't care about microsecond precision, so we don't need
GTimeVal anyway.  Just use time(2).
2012-06-07 15:06:48 -05:00
Dan Williams
c3d3a3d16a supplicant: handle interface state 'disabled'
Been around for a while; happens if the interface goes away or is
rfkilled.  Recognize it for now but we don't do anything with it
yet.
2012-05-11 17:15:40 -05:00
Dan Williams
565d1e2557 wifi: don't report supplicant interface is READY until we've read properties
NMDeviceWifi and a few other things expect the interface will
move from STARTING to READY and then on to other states.  But the
state was getting set to the actual supplicant interface state
immediately when the first properties were read (which include
the State property) and thus the READY state got bypassed.  But
we also want to read stuff like the capabilities before letting
the interface be used.

So first, ensure the supplicant interface object actually uses the
READY state like its callers expect, and second, don't set the
READY state until we actually know what we need to know about it.
2012-05-04 13:48:54 -05:00
Dan Williams
62888a13c9 wifi: probe-scan for hidden SSIDs 2012-05-02 17:33:17 -05:00
Dan Williams
1b40d82b74 wifi: cache number of available scan SSIDs
Which we'll use later for better handling of non-broadcasting
networks by probing for them.
2012-05-02 17:33:17 -05:00
Dan Williams
5cd9b1e22f wifi: don't remove APs still known to the supplicant
Because the supplicant doesn't have a BSS property for "last seen"
we have to fake that by listening to PropertiesChanged events for
stuff like signal strength, which usually changes a bit from scan
to scan.  But in case it doesn't change, we'll never get that PC
signal, and thus we'll never update our internal 'last seen'
timestamp, and thus the AP will get removed from the NM scan list
even if it was in the supplicant's last scan results.

So, if the AP if we haven't receieved a BssRemoved signal for the
AP yet don't remove it from the NM scan list.  One caveat is that
if the supplicant's DEFAULT_BSS_EXPIRATION_AGE value is greater
than NM's AP expiration age, NM will by consequence use the
supplicant's value instead.  At the moment the supplicant sets
DEFAULT_BSS_EXPIRATION_AGE to 180 seconds while NM's is 360.
2012-03-02 18:17:34 -06:00
Dan Williams
ca3c39abd3 wifi: let WEXT be disabled with --with-wext=no
It's still enabled by default if you don't pass --with-wext=no.
But now it's possible to build without WEXT entirely.
2012-02-29 23:11:04 -06:00
Jiří Klimeš
23b73b1354 supplicant: fix an error in demarshalling object path
This message was printed:
GLib-GObject-CRITICAL **: g_value_get_string: assertion `G_VALUE_HOLDS_STRING (value)' failed
It showed out it came from g_cclosure_marshal_VOID__STRING() in BSSRemoved signal.
The signal parameter is object path, so use g_cclosure_marshal_VOID__BOXED instead.
2012-02-27 16:17:13 +01:00
Dan Williams
7902787263 wifi: fix compatibility with wpa_supplicant 0.7.x
The standard D-Bus PropertiesChanged signals are only in 1.0 and
later, so we also have to listen to the deprecated signals for
older supplicant versions.  We can revert this commit when we
drop support for wpa_supplicant 0.7.x.
2012-02-22 14:45:19 -06:00
Dan Williams
92412357c3 wifi: ensure APs remain in scan list when supplicant updates them
The port to the new supplicant D-Bus API for NM 0.9 had one unfinished
piece, which was to remove old APs from the scan list when the
supplicant returned no scan results or there was a scan error.  In
this case, the removal code would not be called.  This wasn't much
of a problem until 836f7d177e which
began removing APs from the scan list correctly in this case.

This uncovered a bug in NM's wpa_supplicant management code, which
was that NM only updates its internal AP object 'last seen' timestamp
when the AP is reported by the supplicant as a completely new BSS
(in merge_scanned_ap()).  But the new supplicant D-Bus interface
only reports the BSS as "new" when the supplicant doesn't know about
the BSS, either because it is a new BSS or because it's been removed
from the supplicant's scan list at some point in the past.

Thus for BSSes that are consistently kept in the supplicant's scan
list, because the wifi driver is actually doing its job and reporting
them consistently in scan results, NM would not be updating the
'last seen' value for the corresponding NM AP objects.  Due to
836f7d177e this would cause APs that
should be kept to be removed from the NM scan list.

To fix this, have the NMAccessPoint object track which supplicant
dbus object it came from, and have NMSupplicantInterface listen for
PropertyChanged signals for those APs the supplicant knows about.
When something changes (like signal strength as the result of updated
scan results) update the AP's 'last seen' timestamp since it clearly
still exists in the scan list.  This way we update the timestamp both
when the supplicant finds a new AP and when it updates the properties
of existing APs.
2012-02-20 15:06:05 -06:00
Dan Williams
5581114726 supplicant: early exit if EAP-FAST is not supported by the supplicant
EAP-FAST used to require some patches to OpenSSL which aren't always
applied.  We can't depend on the supplicant supporting EAP-FAST like
we can for EAP methods that don't require any special support from
external libraries.  To ensure the error gets reported correctly and
early, fail the configuration step if EAP-FAST isn't supported by
the supplicant but the connection requests it.
2012-02-07 23:46:12 -06:00
Dan Williams
5f15918817 core: expose supplicant credentials request/reply functionality
Let the NMDevice listen for credentials requests and reply to them.
2011-12-19 19:47:43 -06:00
Dan Williams
2726c23c54 wifi: detect whether supplicant supports credentials requests
We'll use this to request identity and passwords in-band during
the connection attempt instead of sending them all at the
beginning.  This should allow better handling of wrong
passwords (since we'll know we need to request them from the
user interactively) and better error codes when things fail.
2011-12-19 17:21:41 -06:00
Daniel Gnoutcheff
1a98391dc4 supplicant: fix DBus signal signatures
The DBus signatures registered (via dbus_g_proxy_add_signal) for the
fi.w1.wpa_supplicant.Interface.{BSSAdded,ScanDone} signals were
incorrect.  That prevented us from receiving wifi ap scan results, at
least in the case where wpa_supplicant has DBus introspection disabled.
2011-07-29 16:34:03 -05:00
Dan Williams
f742b06304 wifi: handle a few more possible D-Bus activation errors
There's two possibilities for errors from D-Bus when trying to
activate the supplicant; either we ignore the error and wait
for the supplicant to restart or be started, or it's a hard
error and we can't continue without risking worse behavior (ie
out of memory, supplicant spawns but exits immediately, etc).
This adds a few more harmless errors to the first category
which can happen if the supplicant's .service file exists
but the supplicant does not, in which case we just wait for
it to magically show up later.
2011-07-28 09:54:06 -05:00
Dan Williams
a27cd8e5d9 wifi: allow supplicant disconnect request more often
Use a broader range of supplicant interface states to determine
when to tell the supplicant to idle; we want to allow the
disconnect in all of these states, not just some of them.

Second, allow the active network to be removed from the supplicant's
list in most of these states, even when the supplicant interface is
inactive or disconnected.
2011-06-29 18:19:55 -05:00
Dan Williams
11ca4c7a91 supplicant: add 'authenticating' state
Caused a harmless warning, but lets add it anyway.
2011-03-17 13:42:21 -05:00
Kjartan Maraas
c2b4b9c1d7 build: fix return types (bgo #644665)
Some functions were returning FALSE or 0 instead of NULL.
2011-03-14 01:05:51 -05:00
Dan Williams
e3ba9162c2 supplicant: fix state handling after READY has been reached
We only want to prevent regression to > READY after READY has
been reached, since the interface state will track the supplicant
connection state which legitimately jumps around.
2010-12-11 12:33:15 -06:00
Dan Williams
ea16af7c18 supplicant: fix up return arguments for Disconnect and RemoveNetwork 2010-12-11 12:31:10 -06:00
Dan Williams
1cd17ac896 supplicant: fix leak updating BSS properties 2010-12-11 11:59:40 -06:00
Dan Williams
a08dd2c39d supplicant: fix handling when supplicant cannot be service activated
If the supplicant cannot be service activated, wait until it shows up
on the bus instead of sitting around doing nothing.  This fixes a small
regression introduced when the _READY state was added to the supplicant
interface object.
2010-12-07 13:58:49 -06:00
Dan Williams
fb6cde508c supplicant: convert blob handling to new supplicant interface 2010-11-22 22:34:04 -06:00
Dan Williams
f5e084c668 supplicant: convert association paths to new supplicant interface 2010-11-22 09:05:09 -06:00
Dan Williams
6ecb45ddf0 wifi: convert scanning to new supplicant interface 2010-11-22 08:40:21 -06:00
Dan Williams
848f9f4261 wifi: convert parts of association path to new supplicant interface 2010-11-22 08:30:13 -06:00
Dan Williams
8bbbd3edc3 wifi: convert AP handling to new supplicant interface 2010-11-22 08:25:09 -06:00
Dan Williams
02a1da41c6 supplicant: convert add/remove to new supplicant dbus interface 2010-11-18 17:02:04 -06:00