summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEmmanuel VAUTRIN <Emmanuel.VAUTRIN@cpexterne.org>2023-02-27 14:50:25 +0100
committerDaniel Wagner <wagi@monom.org>2023-04-11 09:21:25 +0200
commitab9256f923566dc936076c7c86aa3770e0f4ea65 (patch)
treeb2e96a23c65c38f505157e0d7e6af107c87af6b2
parentaf175c50654bc925a797c282885a13d838fa082f (diff)
downloadconnman-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.c17
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,