diff options
author | Niraj Kumar Goit <niraj.g@samsung.com> | 2020-05-03 03:26:54 +0530 |
---|---|---|
committer | Niraj Kumar Goit <niraj.g@samsung.com> | 2020-05-04 18:19:50 +0530 |
commit | debb2ff1b031db94c925ab30d7fc5004161b45af (patch) | |
tree | c37b049d8f1f058f252babdf6e91d740ede95420 /src | |
parent | 581b2a808687d38a6181808b385a16c5fc2ed526 (diff) | |
download | connman-debb2ff1b031db94c925ab30d7fc5004161b45af.tar.gz connman-debb2ff1b031db94c925ab30d7fc5004161b45af.tar.bz2 connman-debb2ff1b031db94c925ab30d7fc5004161b45af.zip |
Update EAPoL property in connman settings.submit/tizen/20200504.135236
Change-Id: I477a8ec03f791184ce3634f7c2e9903b367a5c89
Signed-off-by: Niraj Kumar Goit <niraj.g@samsung.com>
Signed-off-by: Nishant Chaprana <n.chaprana@samsung.com>
Diffstat (limited to 'src')
-rwxr-xr-x | src/service.c | 313 |
1 files changed, 277 insertions, 36 deletions
diff --git a/src/service.c b/src/service.c index e21f68a0..73938912 100755 --- a/src/service.c +++ b/src/service.c @@ -210,9 +210,15 @@ struct connman_service { int disconnect_reason; int assoc_status_code; /* - * Only for EAP-FAST + * Only for EAP-FAST and EAP-PEAP in EAPoL. */ char *phase1; +#if defined TIZEN_EXT && defined TIZEN_EXT_EAP_ON_ETHERNET + /* + * Only for EAP-FAST + */ + char *pac_file; +#endif /* * Description: To indicate that disconnection triggered by user. */ @@ -641,6 +647,145 @@ int __connman_service_load_modifiable(struct connman_service *service) return 0; } +#if defined TIZEN_EXT && defined TIZEN_EXT_EAP_ON_ETHERNET +static void __connman_service_cleanup_8021x(struct connman_service *service) +{ + if (service == NULL) + return; + + DBG("service %p ", service); + + __connman_service_set_string(service, "EAP", NULL); + __connman_service_set_string(service, "Identity", NULL); + __connman_service_set_string(service, "Passphrase", NULL); + __connman_service_set_string(service, "AnonymousIdentity", NULL); + __connman_service_set_string(service, "CACertFile", NULL); + __connman_service_set_string(service, "ClientCertFile", NULL); + __connman_service_set_string(service, "PrivateKeyFile", NULL); + __connman_service_set_string(service, "PrivateKeyPassphrase", NULL); + __connman_service_set_string(service, "Phase1", NULL); + __connman_service_set_string(service, "Phase2", NULL); + __connman_service_set_string(service, "PacFile", NULL); +} + +static int connman_service_set_eapol_property(struct connman_service *service, + DBusMessageIter *array) +{ + DBusMessageIter dict; + char *str = NULL; + + __connman_service_cleanup_8021x(service); + + if (dbus_message_iter_get_arg_type(array) != DBUS_TYPE_ARRAY) + return -EINVAL; + + dbus_message_iter_recurse(array, &dict); + + while(dbus_message_iter_get_arg_type(&dict) == DBUS_TYPE_DICT_ENTRY) { + DBusMessageIter entry, value; + const char *key; + int type; + + dbus_message_iter_recurse(&dict, &entry); + + if (dbus_message_iter_get_arg_type(&entry) != DBUS_TYPE_STRING) + return -EINVAL; + + dbus_message_iter_get_basic(&entry, &key); + dbus_message_iter_next(&entry); + + if (dbus_message_iter_get_arg_type(&entry) != DBUS_TYPE_VARIANT) + return -EINVAL; + + dbus_message_iter_recurse(&entry, &value); + + type = dbus_message_iter_get_arg_type(&value); + + if (g_str_equal(key, "UseEapol")) { + dbus_bool_t use_eapol; + + if (type != DBUS_TYPE_BOOLEAN) + return -EINVAL; + + dbus_message_iter_get_basic(&value, &use_eapol); + service->use_eapol = use_eapol; + + } else if (g_str_equal(key, "EAP")) { + if (type != DBUS_TYPE_STRING) + return -EINVAL; + + dbus_message_iter_get_basic(&value, &str); + __connman_service_set_string(service, "EAP", str); + + } else if (g_str_equal(key, "Identity")) { + if (type != DBUS_TYPE_STRING) + return -EINVAL; + + dbus_message_iter_get_basic(&value, &str); + __connman_service_set_string(service, "Identity", str); + + } else if (g_str_equal(key, "AnonymousIdentity")) { + if (type != DBUS_TYPE_STRING) + return -EINVAL; + + dbus_message_iter_get_basic(&value, &str); + __connman_service_set_string(service, "AnonymousIdentity", str); + + } else if (g_str_equal(key, "CACertFile")) { + if (type != DBUS_TYPE_STRING) + return -EINVAL; + + dbus_message_iter_get_basic(&value, &str); + __connman_service_set_string(service, "CACertFile", str); + } else if (g_str_equal(key, "ClientCertFile")) { + if (type != DBUS_TYPE_STRING) + return -EINVAL; + + dbus_message_iter_get_basic(&value, &str); + __connman_service_set_string(service, "ClientCertFile", str); + } else if (g_str_equal(key, "PrivateKeyFile")) { + if (type != DBUS_TYPE_STRING) + return -EINVAL; + + dbus_message_iter_get_basic(&value, &str); + __connman_service_set_string(service, "PrivateKeyFile", str); + } else if (g_str_equal(key, "PrivateKeyPassphrase")) { + if (type != DBUS_TYPE_STRING) + return -EINVAL; + + dbus_message_iter_get_basic(&value, &str); + __connman_service_set_string(service, "PrivateKeyPassphrase", str); + } else if (g_str_equal(key, "Phase2")) { + if (type != DBUS_TYPE_STRING) + return -EINVAL; + + dbus_message_iter_get_basic(&value, &str); + __connman_service_set_string(service, "Phase2", str); + } else if (g_str_equal(key, "Phase1")) { + int val; + char phase1[5] = {0,}; + + if (type != DBUS_TYPE_INT32) + return -EINVAL; + + dbus_message_iter_get_basic(&value, &val); + sprintf(phase1, "%d", val); + __connman_service_set_string(service, "Phase1", phase1); + } else if (g_str_equal(key, "PacFile")) { + if (type != DBUS_TYPE_STRING) + return -EINVAL; + + dbus_message_iter_get_basic(&value, &str); + __connman_service_set_string(service, "PacFile", str); + } + + dbus_message_iter_next(&dict); + } + + return 0; +} +#endif + #if defined TIZEN_EXT static void save_assoc_reject(gpointer key, gpointer value, gpointer user_data) { @@ -1134,8 +1279,12 @@ static int service_load(struct connman_service *service) service->identifier, "Hidden", NULL); #if defined TIZEN_EXT - if (service->type == CONNMAN_SERVICE_TYPE_WIFI && - service->security == CONNMAN_SERVICE_SECURITY_8021X) { + if ((service->type == CONNMAN_SERVICE_TYPE_WIFI && + service->security == CONNMAN_SERVICE_SECURITY_8021X) +#if defined TIZEN_EXT_EAP_ON_ETHERNET + || (service->type == CONNMAN_SERVICE_TYPE_ETHERNET && service->use_eapol) +#endif + ) { str = g_key_file_get_string(keyfile, service->identifier, "EAP", NULL); if (str != NULL) { @@ -1157,6 +1306,14 @@ static int service_load(struct connman_service *service) service->identity = str; } +#if defined TIZEN_EXT_EAP_ON_ETHERNET + str = g_key_file_get_string(keyfile, + service->identifier, "AnonymousIdentity", NULL); + if (str != NULL) { + g_free(service->anonymous_identity); + service->anonymous_identity = str; + } +#endif str = g_key_file_get_string(keyfile, service->identifier, "CACertFile", NULL); if (str != NULL) { @@ -1184,6 +1341,22 @@ static int service_load(struct connman_service *service) g_free(service->private_key_passphrase); service->private_key_passphrase = str; } + +#if defined TIZEN_EXT_EAP_ON_ETHERNET + str = g_key_file_get_string(keyfile, + service->identifier, "Phase1", NULL); + if (str != NULL) { + g_free(service->phase1); + service->phase1 = str; + } + + str = g_key_file_get_string(keyfile, + service->identifier, "PacFile", NULL); + if (str != NULL) { + g_free(service->pac_file); + service->pac_file = str; + } +#endif } #endif #if defined TIZEN_EXT @@ -1508,8 +1681,12 @@ static int service_save(struct connman_service *service) "Config.ident", service->config_entry); #if defined TIZEN_EXT - if (service->type == CONNMAN_SERVICE_TYPE_WIFI && - service->security == CONNMAN_SERVICE_SECURITY_8021X) { + if ((service->type == CONNMAN_SERVICE_TYPE_WIFI && + service->security == CONNMAN_SERVICE_SECURITY_8021X) +#if defined TIZEN_EXT_EAP_ON_ETHERNET + || (service->type == CONNMAN_SERVICE_TYPE_ETHERNET) +#endif + ) { if (service->eap != NULL && strlen(service->eap) > 0) g_key_file_set_string(keyfile, service->identifier, "EAP", service->eap); @@ -1530,6 +1707,14 @@ static int service_save(struct connman_service *service) else g_key_file_remove_key(keyfile, service->identifier, "Identity", NULL); +#if defined TIZEN_EXT_EAP_ON_ETHERNET + if (service->anonymous_identity != NULL && strlen(service->anonymous_identity) > 0) + g_key_file_set_string(keyfile, service->identifier, + "AnonymousIdentity", service->anonymous_identity); + else + g_key_file_remove_key(keyfile, service->identifier, + "AnonymousIdentity", NULL); +#endif if (service->ca_cert_file != NULL && strlen(service->ca_cert_file) > 0) g_key_file_set_string(keyfile, service->identifier, @@ -1558,7 +1743,22 @@ static int service_save(struct connman_service *service) else g_key_file_remove_key(keyfile, service->identifier, "PrivateKeyPassphrase", NULL); +#if defined TIZEN_EXT_EAP_ON_ETHERNET + if (service->phase1 != NULL && strlen(service->phase1) > 0) + g_key_file_set_string(keyfile, service->identifier, + "Phase1", service->phase1); + else + g_key_file_remove_key(keyfile, service->identifier, + "Phase1", NULL); + if (service->pac_file != NULL && strlen(service->pac_file) > 0) + g_key_file_set_string(keyfile, service->identifier, + "PacFile", service->pac_file); + else + g_key_file_remove_key(keyfile, service->identifier, + "PacFile", NULL); +#endif } + if (service->type == CONNMAN_SERVICE_TYPE_WIFI && service->security == CONNMAN_SERVICE_SECURITY_DPP) { if (service->connector != NULL && strlen(service->connector) > 0) @@ -2847,26 +3047,6 @@ void connman_service_set_disconnection_requested(struct connman_service *service } #endif -#if defined TIZEN_EXT && defined TIZEN_EXT_EAP_ON_ETHERNET -static void use_eapol_changed(struct connman_service *service) -{ - dbus_bool_t use_eapol; - - if (!service->path) - return; - - if (!allow_property_changed(service)) - return; - - use_eapol = service->use_eapol; - connman_dbus_property_changed_basic(service->path, - CONNMAN_SERVICE_INTERFACE, - "UseEapol", - DBUS_TYPE_BOOLEAN, - &use_eapol); -} -#endif /* defined TIZEN_EXT && defined TIZEN_EXT_EAP_ON_ETHERNET */ - static void strength_changed(struct connman_service *service) { if (service->strength == 0) @@ -3035,6 +3215,57 @@ static void append_ethernet(DBusMessageIter *iter, void *user_data) iter); } +#if defined TIZEN_EXT && defined TIZEN_EXT_EAP_ON_ETHERNET +static void append_eap_over_ethernet(DBusMessageIter *iter, void *user_data) +{ + struct connman_service *service = user_data; + dbus_bool_t val; + + val = service->use_eapol; + connman_dbus_dict_append_basic(iter, "UseEapol", + DBUS_TYPE_BOOLEAN, &val); + if (service->use_eapol) { + if (service->eap) + connman_dbus_dict_append_basic(iter, "EAP", + DBUS_TYPE_STRING, &service->eap); + + if (service->identity) + connman_dbus_dict_append_basic(iter, "Identity", + DBUS_TYPE_STRING, &service->identity); + + if (service->anonymous_identity) + connman_dbus_dict_append_basic(iter, "AnonymousIdentity", + DBUS_TYPE_STRING, &service->anonymous_identity); + + if (service->ca_cert_file) + connman_dbus_dict_append_basic(iter, "CACertFile", + DBUS_TYPE_STRING, &service->ca_cert_file); + + if (service->client_cert_file) + connman_dbus_dict_append_basic(iter, "ClientCertFile", + DBUS_TYPE_STRING, &service->client_cert_file); + + if (service->private_key_file) + connman_dbus_dict_append_basic(iter, "PrivateKeyFile", + DBUS_TYPE_STRING, &service->private_key_file); + + if (service->phase2) + connman_dbus_dict_append_basic(iter, "Phase2", + DBUS_TYPE_STRING, &service->phase2); + + if (service->phase1) + connman_dbus_dict_append_basic(iter, "Phase1", + DBUS_TYPE_STRING, &service->phase1); + + if (service->pac_file) + connman_dbus_dict_append_basic(iter, "PacFile", + DBUS_TYPE_STRING, &service->pac_file); + + /* Should we include passphrase? */ + } +} +#endif /* defined TIZEN_EXT && defined TIZEN_EXT_EAP_ON_ETHERNET */ + static void append_ipv4(DBusMessageIter *iter, void *user_data) { struct connman_service *service = user_data; @@ -4153,9 +4384,9 @@ static void append_properties(DBusMessageIter *dict, dbus_bool_t limited, #endif case CONNMAN_SERVICE_TYPE_ETHERNET: #if defined TIZEN_EXT && defined TIZEN_EXT_EAP_ON_ETHERNET - val = service->use_eapol; - connman_dbus_dict_append_basic(dict, "UseEapol", - DBUS_TYPE_BOOLEAN, &val); + connman_dbus_dict_append_dict(dict, "EapOverEthernet", + append_eap_over_ethernet, service); + #endif /* defined TIZEN_EXT && defined TIZEN_EXT_EAP_ON_ETHERNET */ case CONNMAN_SERVICE_TYPE_BLUETOOTH: case CONNMAN_SERVICE_TYPE_GADGET: @@ -5784,15 +6015,11 @@ static DBusMessage *set_property(DBusConnection *conn, __connman_service_set_passphrase(service, passphrase); #endif #if defined TIZEN_EXT && defined TIZEN_EXT_EAP_ON_ETHERNET - } else if (g_str_equal(name, "UseEapol")) { - dbus_bool_t use_eapol; - - if (type != DBUS_TYPE_BOOLEAN) - return __connman_error_invalid_arguments(msg); - - dbus_message_iter_get_basic(&value, &use_eapol); + } else if (g_str_equal(name, "EapOverEthernet")) { + int err = connman_service_set_eapol_property(service, &value); + if (err < 0) + return __connman_error_failed(msg, -err); - service->use_eapol = use_eapol; service_save(service); #endif /* defined TIZEN_EXT && defined TIZEN_EXT_EAP_ON_ETHERNET */ } else @@ -7137,6 +7364,11 @@ static void service_free(gpointer user_data) g_free(service->phase2); g_free(service->config_file); g_free(service->config_entry); +#if defined TIZEN_EXT && defined TIZEN_EXT_EAP_ON_ETHERNET + g_free(service->pac_file); + g_free(service->phase1); +#endif + #if defined TIZEN_EXT g_free(service->connector); g_free(service->c_sign_key); @@ -7929,6 +8161,15 @@ void __connman_service_set_string(struct connman_service *service, service->phase2 = g_strdup(value); } else if (g_str_equal(key, "Passphrase")) __connman_service_set_passphrase(service, value); +#if defined TIZEN_EXT && defined TIZEN_EXT_EAP_ON_ETHERNET + else if (g_str_equal(key, "Phase1")) { + g_free(service->phase1); + service->phase1 = g_strdup(value); + } else if (g_str_equal(key, "PacFile")) { + g_free(service->pac_file); + service->pac_file = g_strdup(value); + } +#endif #if defined TIZEN_EXT else if (g_str_equal(key, "Connector")) { g_free(service->connector); |