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.cc b/wifi_service.cc
index fdb6964..7c1748c 100644
--- a/wifi_service.cc
+++ b/wifi_service.cc
@@ -20,6 +20,7 @@
#include "shill/error.h"
#include "shill/event_dispatcher.h"
#include "shill/ieee80211.h"
+#include "shill/property_accessor.h"
#include "shill/store_interface.h"
#include "shill/wifi.h"
#include "shill/wifi_endpoint.h"
@@ -50,7 +51,10 @@
ssid_(ssid) {
PropertyStore *store = this->mutable_store();
store->RegisterConstString(flimflam::kModeProperty, &mode_);
- store->RegisterWriteOnlyString(flimflam::kPassphraseProperty, &passphrase_);
+ HelpRegisterDerivedString(store,
+ flimflam::kPassphraseProperty,
+ NULL,
+ &WiFiService::SetPassphrase);
store->RegisterBool(flimflam::kPassphraseRequiredProperty, &need_passphrase_);
store->RegisterConstString(flimflam::kSecurityProperty, &security_);
store->RegisterConstUint8(flimflam::kSignalStrengthProperty, &strength_);
@@ -208,6 +212,16 @@
}
// private methods
+void WiFiService::HelpRegisterDerivedString(
+ PropertyStore *store,
+ const std::string &name,
+ std::string(WiFiService::*get)(Error *),
+ void(WiFiService::*set)(const std::string&, Error *)) {
+ store->RegisterDerivedString(
+ name,
+ StringAccessor(new CustomAccessor<WiFiService, string>(this, get, set)));
+}
+
void WiFiService::ConnectTask() {
std::map<string, DBus::Variant> params;
DBus::MessageIter writer;