shill: Add passphrase validation
Validate passphrase when set via Service.SetProperty D-Bus API.
BUG=chromium-os:21195
TEST=Unit tests, WiFiManager/021CheckWPA_BadPassphraseLength,
WiFiManager/035CheckWEPKeySyntax
Change-Id: I5f8b92314e2fc341bc6b0f6c5f03ce2523d6e63c
Reviewed-on: https://gerrit.chromium.org/gerrit/11677
Commit-Ready: Thieu Le <thieule@chromium.org>
Reviewed-by: Thieu Le <thieule@chromium.org>
Tested-by: Thieu Le <thieule@chromium.org>
diff --git a/wifi_service_unittest.cc b/wifi_service_unittest.cc
index 4d618bd..25803a0 100644
--- a/wifi_service_unittest.cc
+++ b/wifi_service_unittest.cc
@@ -167,6 +167,45 @@
EXPECT_NE(it.Key(), flimflam::kPassphraseProperty);
}
+// Make sure setting the passphrase via D-Bus Service.SetProperty validates
+// the passphrase.
+TEST_F(WiFiServiceTest, PassphraseSetPropertyValidation) {
+ // We only spot check two password cases here to make sure the
+ // SetProperty code path does validation. We're not going to exhaustively
+ // test for all types of passwords.
+ vector<uint8_t> ssid(5);
+ WiFiServiceRefPtr wifi_service = new WiFiService(control_interface(),
+ dispatcher(),
+ manager(),
+ wifi(),
+ ssid,
+ flimflam::kModeManaged,
+ flimflam::kSecurityWep,
+ false);
+ Error error;
+ EXPECT_TRUE(wifi_service->mutable_store()->SetStringProperty(
+ flimflam::kPassphraseProperty, "0:abcde", &error));
+ EXPECT_FALSE(wifi_service->mutable_store()->SetStringProperty(
+ flimflam::kPassphraseProperty, "invalid", &error));
+ EXPECT_EQ(Error::kInvalidPassphrase, error.type());
+}
+
+TEST_F(WiFiServiceTest, PassphraseSetPropertyOpenNetwork) {
+ vector<uint8_t> ssid(5);
+ WiFiServiceRefPtr wifi_service = new WiFiService(control_interface(),
+ dispatcher(),
+ manager(),
+ wifi(),
+ ssid,
+ flimflam::kModeManaged,
+ flimflam::kSecurityNone,
+ false);
+ Error error;
+ EXPECT_FALSE(wifi_service->mutable_store()->SetStringProperty(
+ flimflam::kPassphraseProperty, "invalid", &error));
+ EXPECT_EQ(Error::kNotSupported, error.type());
+}
+
TEST_F(WiFiServiceTest, NonUTF8SSID) {
vector<uint8_t> ssid;