diff options
author | Emmanuel VAUTRIN <Emmanuel.VAUTRIN@cpexterne.org> | 2023-02-27 14:50:25 +0100 |
---|---|---|
committer | Daniel Wagner <wagi@monom.org> | 2023-04-11 09:21:25 +0200 |
commit | ab9256f923566dc936076c7c86aa3770e0f4ea65 (patch) | |
tree | b2e96a23c65c38f505157e0d7e6af107c87af6b2 | |
parent | af175c50654bc925a797c282885a13d838fa082f (diff) | |
download | connman-ab9256f923566dc936076c7c86aa3770e0f4ea65.tar.gz |
service: Fix hidden service with wrong passphrase
Two cases need to be fixed during the connection to a hidden service
with a wrong passphrase:
* the invalid key error shall be reported to the user,
* another attempt to connect to this hidden service shall be possible,
and succeed with the right passphrase
-rw-r--r-- | src/service.c | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/src/service.c b/src/service.c index 6f31adb3..06d02322 100644 --- a/src/service.c +++ b/src/service.c @@ -3241,6 +3241,9 @@ int __connman_service_check_passphrase(enum connman_service_security security, return 0; } +static void set_error(struct connman_service *service, + enum connman_service_error error); + int __connman_service_set_passphrase(struct connman_service *service, const char *passphrase) { @@ -3265,6 +3268,10 @@ int __connman_service_set_passphrase(struct connman_service *service, connman_network_set_string(service->network, "WiFi.Passphrase", service->passphrase); + if (service->hidden_service && + service->error == CONNMAN_SERVICE_ERROR_INVALID_KEY) + set_error(service, CONNMAN_SERVICE_ERROR_UNKNOWN); + return 0; } @@ -3617,9 +3624,6 @@ void __connman_service_wispr_start(struct connman_service *service, __connman_wispr_start(service, type); } -static void set_error(struct connman_service *service, - enum connman_service_error error); - static DBusMessage *set_property(DBusConnection *conn, DBusMessage *msg, void *user_data) { @@ -6824,6 +6828,13 @@ int __connman_service_connect(struct connman_service *service, service->pending = NULL; } + if (service->hidden_service && + service->error == CONNMAN_SERVICE_ERROR_INVALID_KEY) { + __connman_service_indicate_error(service, + CONNMAN_SERVICE_ERROR_INVALID_KEY); + return err; + } + err = __connman_agent_request_passphrase_input(service, request_input_cb, dbus_sender, |