shill: Add support for connecting to PSK networks

BUG=chromium-os:21293
TEST=unittest + 2 new autotests to network_WiFiSecMat (021WPAasPSK and 022RSNasPSK)

Change-Id: Id727ca761f4457b134504fd05d5692915ab3c9eb
Reviewed-on: https://gerrit.chromium.org/gerrit/11030
Commit-Ready: Gaurav Shah <gauravsh@chromium.org>
Reviewed-by: Gaurav Shah <gauravsh@chromium.org>
Tested-by: Gaurav Shah <gauravsh@chromium.org>
diff --git a/wifi_service.cc b/wifi_service.cc
index 6b6f095..618f40a 100644
--- a/wifi_service.cc
+++ b/wifi_service.cc
@@ -200,7 +200,13 @@
   if (security_ == flimflam::kSecurity8021x) {
     NOTIMPLEMENTED();
   } else if (security_ == flimflam::kSecurityPsk) {
-    NOTIMPLEMENTED();
+    const string psk_proto = StringPrintf("%s %s",
+                                          wpa_supplicant::kSecurityModeWPA,
+                                          wpa_supplicant::kSecurityModeRSN);
+    params[wpa_supplicant::kPropertySecurityProtocol].writer().
+        append_string(psk_proto.c_str());
+    params[wpa_supplicant::kPropertyPreSharedKey].writer().
+        append_string(passphrase_.c_str());
   } else if (security_ == flimflam::kSecurityRsn) {
     params[wpa_supplicant::kPropertySecurityProtocol].writer().
         append_string(wpa_supplicant::kSecurityModeRSN);
@@ -214,9 +220,9 @@
   } else if (security_ == flimflam::kSecurityWep) {
     NOTIMPLEMENTED();
   } else if (security_ == flimflam::kSecurityNone) {
-    // nothing special to do here
+    // Nothing special to do here.
   } else {
-    LOG(ERROR) << "can't connect. unsupported security method " << security_;
+    LOG(ERROR) << "Can't connect. Unsupported security method " << security_;
   }
 
   params[wpa_supplicant::kPropertyKeyManagement].writer().