Skip to content

Commit 8c104d0

Browse files
committed
Add psk length checks in API impl with tests.
1 parent 765fe74 commit 8c104d0

File tree

2 files changed

+91
-1
lines changed

2 files changed

+91
-1
lines changed

src/common/service/NetRemoteService.cxx

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -751,6 +751,12 @@ NetRemoteService::WifiAccessPointSetAuthenticationDataImpl(std::string_view acce
751751
wifiOperationStatus.set_message("No PSK passphrase provided (empty)");
752752
return wifiOperationStatus;
753753
}
754+
const auto pskPassphraseSize = std::size(pskPassphrase);
755+
if (pskPassphraseSize < Ieee80211RsnaPskPassphraseLengthMinimum || pskPassphraseSize > Ieee80211RsnaPskPassphraseLengthMaximum) {
756+
wifiOperationStatus.set_code(WifiAccessPointOperationStatusCode::WifiAccessPointOperationStatusCodeInvalidParameter);
757+
wifiOperationStatus.set_message(std::format("Invalid PSK passphrase size '{}' provided (expected {} to {} characters)", pskPassphraseSize, Ieee80211RsnaPskPassphraseLengthMinimum, Ieee80211RsnaPskPassphraseLengthMaximum));
758+
return wifiOperationStatus;
759+
}
754760
} else if (psk.has_value()) {
755761
const auto& pskValue = psk.value();
756762
if (!pskValue.has_hex() && !pskValue.has_raw()) {
@@ -769,7 +775,7 @@ NetRemoteService::WifiAccessPointSetAuthenticationDataImpl(std::string_view acce
769775
const auto& pskRaw = pskValue.raw();
770776
if (std::size(pskRaw) != Ieee80211RsnaPskLength) {
771777
wifiOperationStatus.set_code(WifiAccessPointOperationStatusCode::WifiAccessPointOperationStatusCodeInvalidParameter);
772-
wifiOperationStatus.set_message(std::format("Invalid PSK raw value provided (not {} bytes)", Ieee80211RsnaPskLength));
778+
wifiOperationStatus.set_message(std::format("Invalid PSK raw value size '{}' provided (expected {} bytes)", std::size(pskRaw), Ieee80211RsnaPskLength));
773779
return wifiOperationStatus;
774780
}
775781
}

tests/unit/TestNetRemoteServiceClient.cxx

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,90 @@ TEST_CASE("WifiAccessPointEnable API", "[basic][rpc][client][remote]")
180180
REQUIRE(result.status().code() == WifiAccessPointOperationStatusCode::WifiAccessPointOperationStatusCodeAccessPointInvalid);
181181
}
182182

183+
SECTION("Fails with psk too short")
184+
{
185+
const auto pskPassphraseTooShort = std::string(Ieee80211RsnaPskPassphraseLengthMinimum - 1, 'a');
186+
187+
Dot11AccessPointConfiguration apConfiguration{};
188+
*apConfiguration.mutable_authenticationdata()->mutable_psk()->mutable_psk()->mutable_passphrase() = pskPassphraseTooShort;
189+
190+
WifiAccessPointEnableRequest request{};
191+
request.set_accesspointid(InterfaceName1);
192+
*request.mutable_configuration() = std::move(apConfiguration);
193+
194+
WifiAccessPointEnableResult result{};
195+
grpc::ClientContext clientContext{};
196+
197+
auto status = client->WifiAccessPointEnable(&clientContext, request, &result);
198+
REQUIRE(status.ok());
199+
REQUIRE(result.accesspointid() == request.accesspointid());
200+
REQUIRE(result.has_status());
201+
REQUIRE(result.status().code() == WifiAccessPointOperationStatusCode::WifiAccessPointOperationStatusCodeInvalidParameter);
202+
}
203+
204+
SECTION("Fails with psk too long")
205+
{
206+
const auto pskPassphraseTooShort = std::string(Ieee80211RsnaPskPassphraseLengthMaximum + 1, 'a');
207+
208+
Dot11AccessPointConfiguration apConfiguration{};
209+
*apConfiguration.mutable_authenticationdata()->mutable_psk()->mutable_psk()->mutable_passphrase() = pskPassphraseTooShort;
210+
211+
WifiAccessPointEnableRequest request{};
212+
request.set_accesspointid(InterfaceName1);
213+
*request.mutable_configuration() = std::move(apConfiguration);
214+
215+
WifiAccessPointEnableResult result{};
216+
grpc::ClientContext clientContext{};
217+
218+
auto status = client->WifiAccessPointEnable(&clientContext, request, &result);
219+
REQUIRE(status.ok());
220+
REQUIRE(result.accesspointid() == request.accesspointid());
221+
REQUIRE(result.has_status());
222+
REQUIRE(result.status().code() == WifiAccessPointOperationStatusCode::WifiAccessPointOperationStatusCodeInvalidParameter);
223+
}
224+
225+
SECTION("Succeeds with psk minimum length")
226+
{
227+
const auto pskPassphraseMinimum = std::string(Ieee80211RsnaPskPassphraseLengthMinimum, 'a');
228+
229+
Dot11AccessPointConfiguration apConfiguration{};
230+
*apConfiguration.mutable_authenticationdata()->mutable_psk()->mutable_psk()->mutable_passphrase() = pskPassphraseMinimum;
231+
232+
WifiAccessPointEnableRequest request{};
233+
request.set_accesspointid(InterfaceName1);
234+
*request.mutable_configuration() = std::move(apConfiguration);
235+
236+
WifiAccessPointEnableResult result{};
237+
grpc::ClientContext clientContext{};
238+
239+
auto status = client->WifiAccessPointEnable(&clientContext, request, &result);
240+
REQUIRE(status.ok());
241+
REQUIRE(result.accesspointid() == request.accesspointid());
242+
REQUIRE(result.has_status());
243+
REQUIRE(result.status().code() == WifiAccessPointOperationStatusCode::WifiAccessPointOperationStatusCodeSucceeded);
244+
}
245+
246+
SECTION("Succeeds with psk maximum length")
247+
{
248+
const auto pskPassphraseMaximum = std::string(Ieee80211RsnaPskPassphraseLengthMaximum, 'a');
249+
250+
Dot11AccessPointConfiguration apConfiguration{};
251+
*apConfiguration.mutable_authenticationdata()->mutable_psk()->mutable_psk()->mutable_passphrase() = pskPassphraseMaximum;
252+
253+
WifiAccessPointEnableRequest request{};
254+
request.set_accesspointid(InterfaceName1);
255+
*request.mutable_configuration() = std::move(apConfiguration);
256+
257+
WifiAccessPointEnableResult result{};
258+
grpc::ClientContext clientContext{};
259+
260+
auto status = client->WifiAccessPointEnable(&clientContext, request, &result);
261+
REQUIRE(status.ok());
262+
REQUIRE(result.accesspointid() == request.accesspointid());
263+
REQUIRE(result.has_status());
264+
REQUIRE(result.status().code() == WifiAccessPointOperationStatusCode::WifiAccessPointOperationStatusCodeSucceeded);
265+
}
266+
183267
SECTION("Succeeds without access point configuration if already configured")
184268
{
185269
Dot11CipherSuiteConfiguration dot11CipherSuiteConfigurationWpa1{};

0 commit comments

Comments
 (0)