shill: Clear PMKSA cached credentials on unload

When an 802.1x WiFi service Unload()s, ask wpa_supplicant to clear
all cached credentials.  This is a workaround for dropping PMKSA
cache entries in wpa_supplicant when the user logs ouut.  Newer
versions of wpa_supplicant will support dropping cache entries
automatically when netblocks are changed.  This will allow more
granular key clearing.

BUG=chromium-os:23367
TEST=New unit test

Change-Id: I94d69b6943d69c7f5f31ed7846d908b38ce8e6c8
Reviewed-on: https://gerrit.chromium.org/gerrit/15163
Commit-Ready: Paul Stewart <pstew@chromium.org>
Reviewed-by: Paul Stewart <pstew@chromium.org>
Tested-by: Paul Stewart <pstew@chromium.org>
diff --git a/wifi.h b/wifi.h
index a113d84..cdfb30c 100644
--- a/wifi.h
+++ b/wifi.h
@@ -59,6 +59,7 @@
       std::map<std::string, ::DBus::Variant> service_params);
   virtual void DisconnectFrom(WiFiService *service);
   virtual bool IsIdle() const;
+  virtual void ClearCachedCredentials();
 
   // Called by Manager.
   virtual WiFiServiceRefPtr GetService(const KeyValueStore &args, Error *error);
@@ -115,6 +116,7 @@
   void BSSAddedTask(const ::DBus::Path &BSS,
                     const std::map<std::string, ::DBus::Variant> &properties);
   void BSSRemovedTask(const ::DBus::Path &BSS);
+  void ClearCachedCredentialsTask();
   void PropertiesChangedTask(
       const std::map<std::string, ::DBus::Variant> &properties);
   void ScanDoneTask();
@@ -160,6 +162,8 @@
   WiFiServiceRefPtr pending_service_;
   std::string supplicant_state_;
   std::string supplicant_bss_;
+  // Signifies that ClearCachedCredentialsTask() is pending.
+  bool clear_cached_credentials_pending_;
 
   // Properties
   std::string bgscan_method_;