X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Fwifi-config.c;h=84a64a6a10c6f5e6069bd6aaa6463da2c0035eac;hb=e9c8d09e55f577800288ccfd60ae189bfb51c417;hp=751c3b534c7704fd34d6cae69be7bf406b54e649;hpb=070b142a3a51889e6ab02bf764cb592a608e91a2;p=platform%2Fcore%2Fconnectivity%2Fnet-config.git diff --git a/src/wifi-config.c b/src/wifi-config.c index 751c3b5..84a64a6 100755 --- a/src/wifi-config.c +++ b/src/wifi-config.c @@ -18,6 +18,7 @@ */ #include +#include #include #include #include @@ -31,6 +32,7 @@ #include "util.h" #include "neterror.h" #include "wifi-config.h" +#include "netsupplicant.h" #define CONNMAN_STORAGE "/var/lib/connman" @@ -41,8 +43,8 @@ #define WIFI_CONFIG_PREFIX "wifi_" #define MAC_ADDRESS_LENGTH 12 -#define WIFI_PREFIX_LENGTH MAC_ADDRESS_LENGTH + 6 // wifi_485a3f2f506a_ -#define PROFILE_PREFIX_LENGTH WIFI_PREFIX_LENGTH + 21 // /net/connman/service/wifi_485a3f2f506a_ +#define WIFI_PREFIX_LENGTH MAC_ADDRESS_LENGTH + 6 /* wifi_485a3f2f506a_ */ +#define PROFILE_PREFIX_LENGTH WIFI_PREFIX_LENGTH + 21 /* /net/connman/service/wifi_485a3f2f506a_ */ #define WIFI_MAC_ADD_LENGTH 17 #define WIFI_MAC_ADD_PATH "/sys/class/net/wlan0/address" @@ -82,6 +84,7 @@ static void __free_wifi_configuration(struct wifi_config *conf) g_free(conf->security_type); g_free(conf->is_hidden); g_free(conf->proxy_address); + g_free(conf->last_error); if (conf->eap_config) { g_free(conf->eap_config->anonymous_identity); g_free(conf->eap_config->ca_cert); @@ -102,47 +105,48 @@ static gboolean __get_mac_address(gchar **mac_address) gchar *tmp = NULL; gchar mac[13] = { 0, }; gint i = 0, j = 0; -#if defined TIZEN_TV - FILE *fp = NULL; - char buf[WIFI_MAC_ADD_LENGTH + 1]; - if (0 == access(WIFI_MAC_ADD_PATH, F_OK)) - fp = fopen(WIFI_MAC_ADD_PATH, "r"); - - if (fp == NULL) { - ERR("Failed to open file %s\n", WIFI_MAC_ADD_PATH); - *mac_address = NULL; - return FALSE; - } - if (fgets(buf, sizeof(buf), fp) == NULL) { - ERR("Failed to get MAC info from %s\n", WIFI_MAC_ADD_PATH); - *mac_address = NULL; - fclose(fp); - return FALSE; - } - tmp_mac = (char *)g_try_malloc0(WIFI_MAC_ADD_LENGTH + 1); - if (tmp_mac == NULL) { - ERR("malloc() failed"); - *mac_address = NULL; + if (TIZEN_TV) { + FILE *fp = NULL; + char buf[WIFI_MAC_ADD_LENGTH + 1]; + if (0 == access(WIFI_MAC_ADD_PATH, F_OK)) + fp = fopen(WIFI_MAC_ADD_PATH, "r"); + + if (fp == NULL) { + ERR("Failed to open file %s\n", WIFI_MAC_ADD_PATH); + *mac_address = NULL; + return FALSE; + } + + if (fgets(buf, sizeof(buf), fp) == NULL) { + ERR("Failed to get MAC info from %s\n", WIFI_MAC_ADD_PATH); + *mac_address = NULL; + fclose(fp); + return FALSE; + } + tmp_mac = (gchar *)malloc(WIFI_MAC_ADD_LENGTH + 1); + if (tmp_mac == NULL) { + ERR("malloc() failed"); + *mac_address = NULL; + fclose(fp); + return FALSE; + } + memset(tmp_mac, 0, WIFI_MAC_ADD_LENGTH + 1); + g_strlcpy(tmp_mac, buf, WIFI_MAC_ADD_LENGTH + 1); fclose(fp); - return FALSE; - } - g_strlcpy(tmp_mac, buf, WIFI_MAC_ADD_LENGTH + 1); - fclose(fp); -#else - tmp_mac = vconf_get_str(VCONFKEY_WIFI_BSSID_ADDRESS); - if (tmp_mac == NULL) { - ERR("vconf_get_str(WIFI_BSSID_ADDRESS) Failed"); - *mac_address = NULL; - return FALSE; + } else { + tmp_mac = vconf_get_str(VCONFKEY_WIFI_BSSID_ADDRESS); + if (tmp_mac == NULL) { + ERR("vconf_get_str(WIFI_BSSID_ADDRESS) Failed"); + *mac_address = NULL; + return FALSE; + } } -#endif tmp = g_ascii_strdown(tmp_mac, (gssize)strlen(tmp_mac)); - g_free(tmp_mac); - while (tmp[i]) { - if (tmp[i] != ':') { + free(tmp_mac); + while (tmp && tmp[i]) { + if (tmp[i] != ':') mac[j++] = tmp[i]; - } i++; } mac[12] = '\0'; @@ -215,10 +219,10 @@ static GKeyFile *__get_configuration_keyfile(const gchar *group_name) path = g_strdup_printf(CONNMAN_STORAGE "/%s/settings", group_name); keyfile = netconfig_keyfile_load(path); - if (keyfile == NULL) { + if (keyfile == NULL) ERR("keyfile[%s] is NULL", path); - g_free(path); - } + + g_free(path); return keyfile; } @@ -283,20 +287,27 @@ static gboolean _load_configuration(const gchar *config_id, struct wifi_config * } config->name = g_key_file_get_string(keyfile, group_name, WIFI_CONFIG_NAME, NULL); - ret = __get_security_type(config_id, &config->security_type); - if (ret != TRUE) { + DBG("name [%s]", config->name); + + __get_security_type(config_id, &config->security_type); + if (config->security_type == NULL) { ERR("Fail to _get_security_type"); g_key_file_free(keyfile); g_free(group_name); return FALSE; } + DBG("security_type [%s]", config->security_type); + config->proxy_address = g_key_file_get_string(keyfile, group_name, WIFI_CONFIG_PROXY_SERVER, NULL); + if (config->proxy_address) + DBG("proxy_address [%s]", config->proxy_address); + hidden = g_key_file_get_boolean(keyfile, group_name, WIFI_CONFIG_HIDDEN, NULL); - if (hidden) { + if (hidden) config->is_hidden = g_strdup("TRUE"); - } else { + else config->is_hidden = g_strdup("FALSE"); - } + DBG("is_hidden [%s]", config->is_hidden); if (g_strcmp0(config->security_type, WIFI_SECURITY_EAP) == 0) { config->eap_config->anonymous_identity = g_key_file_get_string(keyfile, group_name, WIFI_CONFIG_EAP_ANONYMOUS_IDENTITY, NULL); @@ -307,9 +318,28 @@ static gboolean _load_configuration(const gchar *config_id, struct wifi_config * config->eap_config->eap_type = g_key_file_get_string(keyfile, group_name, WIFI_CONFIG_EAP_TYPE, NULL); config->eap_config->eap_auth_type = g_key_file_get_string(keyfile, group_name, WIFI_CONFIG_EAP_AUTH_TYPE, NULL); config->eap_config->subject_match = g_key_file_get_string(keyfile, group_name, WIFI_CONFIG_EAP_SUBJECT_MATCH, NULL); + + if (config->eap_config->anonymous_identity) + DBG("anonymous_identity [%s]", config->eap_config->anonymous_identity); + if (config->eap_config->ca_cert) + DBG("ca_cert [%s]", config->eap_config->ca_cert); + if (config->eap_config->client_cert) + DBG("client_cert [%s]", config->eap_config->client_cert); + if (config->eap_config->private_key) + DBG("private_key [%s]", config->eap_config->private_key); + if (config->eap_config->identity) + DBG("identity [%s]", config->eap_config->identity); + if (config->eap_config->eap_type) + DBG("eap_type [%s]", config->eap_config->eap_type); + if (config->eap_config->eap_auth_type) + DBG("eap_auth_type [%s]", config->eap_config->eap_auth_type); + if (config->eap_config->subject_match) + DBG("subject_match [%s]", config->eap_config->subject_match); } config->last_error = g_key_file_get_string(keyfile, group_name, WIFI_CONFIG_FAILURE, NULL); + if (config->last_error) + DBG("last_error [%s]", config->last_error); g_key_file_free(keyfile); g_free(group_name); @@ -404,18 +434,18 @@ static gboolean _set_field(const gchar *config_id, const gchar *key, const gchar keyfile = __get_configuration_keyfile(group_name); if (keyfile == NULL) { ERR("Fail to __get_configuration_keyfile"); + g_free(group_name); return FALSE; } if (g_strcmp0(key, WIFI_CONFIG_PROXY_METHOD) == 0) { g_key_file_set_string(keyfile, group_name, key, value); - }else if (g_strcmp0(key, WIFI_CONFIG_PROXY_SERVER) == 0) { + } else if (g_strcmp0(key, WIFI_CONFIG_PROXY_SERVER) == 0) { g_key_file_set_string(keyfile, group_name, key, value); } else if (g_strcmp0(key, WIFI_CONFIG_HIDDEN) == 0) { gboolean hidden = FALSE; - if (g_strcmp0(value, "TRUE") == 0) { + if (g_strcmp0(value, "TRUE") == 0) hidden = TRUE; - } g_key_file_set_boolean(keyfile, group_name, key, hidden); } else if (g_strcmp0(key, WIFI_CONFIG_EAP_ANONYMOUS_IDENTITY) == 0) { g_key_file_set_string(keyfile, group_name, key, value); @@ -464,6 +494,7 @@ static gboolean _get_field(const gchar *config_id, const gchar *key, gchar **val keyfile = __get_configuration_keyfile(group_name); if (keyfile == NULL) { ERR("Fail to __get_configuration_keyfile"); + g_free(group_name); return FALSE; } @@ -475,11 +506,10 @@ static gboolean _get_field(const gchar *config_id, const gchar *key, gchar **val val = g_key_file_get_string(keyfile, group_name, WIFI_CONFIG_PROXY_SERVER, NULL); } else if (g_strcmp0(key, WIFI_CONFIG_HIDDEN) == 0) { hidden = g_key_file_get_boolean(keyfile, group_name, WIFI_CONFIG_HIDDEN, NULL); - if (hidden) { + if (hidden) val = g_strdup("TRUE"); - } else { + else val = g_strdup("FALSE"); - } } else if (g_strcmp0(key, WIFI_CONFIG_EAP_ANONYMOUS_IDENTITY) == 0) { val = g_key_file_get_string(keyfile, group_name, WIFI_CONFIG_EAP_ANONYMOUS_IDENTITY, NULL); } else if (g_strcmp0(key, WIFI_CONFIG_EAP_CACERT) == 0) { @@ -515,7 +545,6 @@ static gboolean _get_field(const gchar *config_id, const gchar *key, gchar **val static GSList *_get_list(void) { GSList *list = NULL; - struct dirent ent_struct; struct dirent *dp = NULL; DIR *dir; @@ -525,7 +554,7 @@ static GSList *_get_list(void) return NULL; } - while ((readdir_r(dir, &ent_struct, &dp) == 0) && dp) { + while ((dp = readdir(dir)) != NULL) { if (g_strcmp0(dp->d_name, ".") == 0 || g_strcmp0(dp->d_name, "..") == 0 || strncmp(dp->d_name, WIFI_CONFIG_PREFIX, strlen(WIFI_CONFIG_PREFIX)) != 0) { continue; @@ -565,7 +594,316 @@ gboolean wifi_config_remove_configuration(const gchar *config_id) return ret; } -// dbus method +static int __netconfig_hex_char_to_num(char c) +{ + if (c >= '0' && c <= '9') + return c - '0'; + + if (c >= 'a' && c <= 'f') + return c - 'a' + 10; + + if (c >= 'A' && c <= 'F') + return c - 'A' + 10; + + return -1; +} + +static int __netconfig_hex_to_byte(const char *hex) +{ + int a, b; + + a = __netconfig_hex_char_to_num(*hex++); + if (a < 0) + return -1; + + b = __netconfig_hex_char_to_num(*hex++); + if (b < 0) + return -1; + + return (a << 4) | b; +} + +static int __netconfig_hex_str_to_bin(const char *hex, unsigned char *buf, size_t len) +{ + size_t i; + int a; + const char *ipos = hex; + unsigned char *opos = buf; + + for (i = 0; i < len; i++) { + a = __netconfig_hex_to_byte(ipos); + if (a < 0) + return -1; + + *opos++ = a; + ipos += 2; + } + + return 0; +} + +static int __netconfig_byte_to_txt(const unsigned char *src, char **dst, int src_len) +{ + int dst_length = 0; + int i = 0; + char *buf = NULL; + + if (src_len <= 0) { + ERR("Invalid parameter."); + return -1; + } + + *dst = (char *) g_try_malloc0((2*src_len)+1); + if (!(*dst)) { + ERR("failed to allocate memory to buffer."); + return -1; + } + + buf = (*dst); + + for (i = 0; i < src_len; i++) { + snprintf(buf, 3, "%02x", src[i]); + buf += 2; + dst_length += 2; + } + + return dst_length; +} + +static int __netconfig_unpack_ay_malloc(unsigned char **dst, GVariantIter *iter) +{ + GVariantIter *iter_copy = NULL; + int length = 0; + char tmp = 0; + unsigned char *tmp_dst = NULL; + + if (!dst || *dst || !iter) { + ERR("Invalid parameter"); + return 0; + } + + iter_copy = g_variant_iter_copy(iter); + + while (g_variant_iter_loop(iter, "y", &tmp)) + length++; + g_variant_iter_free(iter); + + tmp_dst = (unsigned char *)g_try_malloc0(length + 1); + if (!tmp_dst) { + ERR("failed to allocate memory"); + return 0; + } + + length = 0; + while (g_variant_iter_loop(iter_copy, "y", &tmp_dst[length])) + length++; + g_variant_iter_free(iter_copy); + + if (length == 0) { + g_free(tmp_dst); + tmp_dst = NULL; + } else { + tmp_dst[length] = '\0'; + } + + *dst = tmp_dst; + DBG("Length [%d]", length); + return length; +} + +gboolean _add_vsie(int frame_id, const char* vsie) +{ + GVariant *params = NULL; + GVariant *message = NULL; + GVariantBuilder *bytearray_builder = NULL; + const char *if_path; + int i = 0; + size_t vsie_len = 0; + + unsigned char *bytearray = NULL; + size_t bytearray_len = 0; + + if (frame_id >= NETCONFIG_VSIE_FRAME_MAX) { + DBG("Invalid parameter, frame-id: %d", frame_id); + return FALSE; + } + + vsie_len = strlen(vsie); + if (vsie_len == 0) { + DBG("vsie length is zero"); + return FALSE; + } + + bytearray_len = (vsie_len % 2) ? ((vsie_len / 2) + 1) : (vsie_len / 2); + + bytearray = (unsigned char *) g_try_malloc0(bytearray_len); + if (bytearray == NULL) { + DBG("Failed to allocate memory to bytearray"); + return FALSE; + } + + if (__netconfig_hex_str_to_bin(vsie, bytearray, bytearray_len) < 0) { + DBG("invalid vsie string"); + g_free(bytearray); + return FALSE; + } + + bytearray_builder = g_variant_builder_new(G_VARIANT_TYPE("ay")); + for (i = 0; i < bytearray_len; i++) + g_variant_builder_add(bytearray_builder, "y", bytearray[i]); + + params = g_variant_new("(iay)", frame_id, bytearray_builder); + g_variant_builder_unref(bytearray_builder); + + if_path = netconfig_wifi_get_supplicant_interface(); + + if (if_path == NULL) { + ERR("Fail to get wpa_supplicant DBus path"); + g_free(bytearray); + return FALSE; + } + + message = netconfig_supplicant_invoke_dbus_method(SUPPLICANT_SERVICE, + if_path, SUPPLICANT_INTERFACE ".Interface", "VendorElemAdd", params); + + if (message == NULL) { + ERR("Failed to send command to wpa_supplicant"); + g_free(bytearray); + return FALSE; + } + + DBG("Succeeded to add vsie: Frame ID[%d], VSIE[%s]", frame_id, vsie); + + g_free(bytearray); + return TRUE; +} + +gboolean _get_vsie(int frame_id, char **vsie) +{ + GVariant *params = NULL; + GVariant *message = NULL; + const char *if_path; + + if (frame_id >= NETCONFIG_VSIE_FRAME_MAX) { + DBG("Invalid parameter, frame-id: %d", frame_id); + return FALSE; + } + + if_path = netconfig_wifi_get_supplicant_interface(); + if (if_path == NULL) { + ERR("Fail to get wpa_supplicant DBus path"); + return FALSE; + } + + params = g_variant_new("(i)", frame_id); + + message = netconfig_supplicant_invoke_dbus_method(SUPPLICANT_SERVICE, + if_path, SUPPLICANT_INTERFACE ".Interface", "VendorElemGet", params); + + if (message == NULL) { + ERR("Failed to send command to wpa_supplicant"); + return FALSE; + } else { + GVariantIter *iter = NULL; + unsigned char *vsie_bytes = NULL; + int vsie_len = 0; + int ret = 0; + + g_variant_get(message, "(ay)", &iter); + if (iter == NULL) { + ERR("vsie is not present"); + return FALSE; + } + + vsie_len = __netconfig_unpack_ay_malloc(&vsie_bytes, iter); + if (vsie_bytes == NULL) { + ERR("vsie_bytes not allocated"); + return FALSE; + } + + ret = __netconfig_byte_to_txt(vsie_bytes, vsie, vsie_len); + if (ret < 0) { + g_free(vsie_bytes); + ERR("vsie not allocated."); + return FALSE; + } + + g_free(vsie_bytes); + } + + ERR("Succeeded to get vsie: Frame ID[%d], VSIE[%s]", frame_id, *vsie); + + return TRUE; + +} + +gboolean _remove_vsie(int frame_id, const char *vsie) +{ + GVariant *params = NULL; + GVariant *message = NULL; + GVariantBuilder *bytearray_builder = NULL; + const char *if_path; + int i = 0; + size_t vsie_len = 0; + + unsigned char *bytearray = NULL; + size_t bytearray_len = 0; + + if (frame_id >= NETCONFIG_VSIE_FRAME_MAX) { + DBG("Invalid parameter, frame-id: %d", frame_id); + return FALSE; + } + + vsie_len = strlen(vsie); + if (vsie_len == 0) { + DBG("vsie length is zero"); + return FALSE; + } + + bytearray_len = (vsie_len % 2) ? ((vsie_len / 2) + 1) : (vsie_len / 2); + + bytearray = (unsigned char *) g_try_malloc0(bytearray_len); + if (bytearray == NULL) { + DBG("Failed to allocate memory to bytearray"); + return FALSE; + } + + if (__netconfig_hex_str_to_bin(vsie, bytearray, bytearray_len) < 0) { + DBG("invalid vsie string"); + g_free(bytearray); + return FALSE; + } + + bytearray_builder = g_variant_builder_new(G_VARIANT_TYPE("ay")); + for (i = 0; i < bytearray_len; i++) + g_variant_builder_add(bytearray_builder, "y", bytearray[i]); + + params = g_variant_new("(iay)", frame_id, bytearray_builder); + g_variant_builder_unref(bytearray_builder); + + if_path = netconfig_wifi_get_supplicant_interface(); + if (if_path == NULL) { + ERR("Fail to get wpa_supplicant DBus path"); + g_free(bytearray); + return FALSE; + } + + message = netconfig_supplicant_invoke_dbus_method(SUPPLICANT_SERVICE, + if_path, SUPPLICANT_INTERFACE ".Interface", "VendorElemRem", params); + + if (message == NULL) { + ERR("Failed to send command to wpa_supplicant"); + g_free(bytearray); + return FALSE; + } + + DBG("Succeeded to remove vsie: Frame ID[%d], VSIE[%s]", frame_id, vsie); + + g_free(bytearray); + return TRUE; +} + +/* dbus method */ gboolean handle_get_config_ids(Wifi *wifi, GDBusMethodInvocation *context) { guint i = 0; @@ -592,7 +930,11 @@ gboolean handle_get_config_ids(Wifi *wifi, GDBusMethodInvocation *context) config_ids = g_slist_nth(config_ids, 0); g_slist_free_full(config_ids, g_free); - wifi_complete_get_config_ids(wifi, context, (const gchar * const*)result); + wifi_complete_get_config_ids(wifi, context, (const gchar * const *)result); + + for (i = 0; i < length; i++) + if (result[i]) + g_free(result[i]); if (result) g_free(result); @@ -623,19 +965,19 @@ gboolean handle_load_configuration(Wifi *wifi, GDBusMethodInvocation *context, g_variant_builder_add(b, "{sv}", WIFI_CONFIG_NAME, g_variant_new_string(conf->name)); g_variant_builder_add(b, "{sv}", WIFI_CONFIG_SECURITY_TYPE, g_variant_new_string(conf->security_type)); g_variant_builder_add(b, "{sv}", WIFI_CONFIG_HIDDEN, g_variant_new_string(conf->is_hidden)); - if (conf->proxy_address != NULL) { + + if (conf->proxy_address != NULL) g_variant_builder_add(b, "{sv}", WIFI_CONFIG_PROXYADDRESS, g_variant_new_string(conf->proxy_address)); - g_free(conf->proxy_address); - } else { + else g_variant_builder_add(b, "{sv}", WIFI_CONFIG_PROXYADDRESS, g_variant_new_string("NONE")); - } - if (conf->last_error != NULL) { + + if (conf->last_error != NULL) g_variant_builder_add(b, "{sv}", WIFI_CONFIG_FAILURE, g_variant_new_string(conf->last_error)); - g_free(conf->last_error); - } else { + else g_variant_builder_add(b, "{sv}", WIFI_CONFIG_FAILURE, g_variant_new_string("ERROR_NONE")); - } + g_free(conf->proxy_address); + g_free(conf->last_error); g_free(conf->name); g_free(conf->security_type); g_free(conf->is_hidden); @@ -660,12 +1002,9 @@ gboolean handle_save_configuration(Wifi *wifi, GDBusMethodInvocation *context, if ((wifi == NULL) || (config_id == NULL) || (configuration == NULL)) { ERR("Invalid parameter"); netconfig_error_invalid_parameter(context); - SLOG(LOG_INFO, "MDM_LOG_USER", "Object=wifi-profile, AccessType=Create, Result=Failed"); return FALSE; } - ERR("save_configuration [%s]", config_id); - conf = g_new0(struct wifi_config, 1); g_variant_get(configuration, "a{sv}", &iter); @@ -673,35 +1012,35 @@ gboolean handle_save_configuration(Wifi *wifi, GDBusMethodInvocation *context, if (g_strcmp0(field, WIFI_CONFIG_NAME) == 0) { if (g_variant_is_of_type(value, G_VARIANT_TYPE_STRING)) { conf->name = g_strdup(g_variant_get_string(value, NULL)); - ERR("name [%s]", conf->name); + DBG("name [%s]", conf->name); } else { conf->name = NULL; } } else if (g_strcmp0(field, WIFI_CONFIG_SSID) == 0) { if (g_variant_is_of_type(value, G_VARIANT_TYPE_STRING)) { conf->ssid = g_strdup(g_variant_get_string(value, NULL)); - ERR("ssid [%s]", conf->ssid); + DBG("ssid [%s]", conf->ssid); } else { conf->ssid = NULL; } } else if (g_strcmp0(field, WIFI_CONFIG_PASSPHRASE) == 0) { if (g_variant_is_of_type(value, G_VARIANT_TYPE_STRING)) { conf->passphrase = g_strdup(g_variant_get_string(value, NULL)); - ERR("passphrase []"); + DBG("passphrase []"); } else { conf->passphrase = NULL; } } else if (g_strcmp0(field, WIFI_CONFIG_HIDDEN) == 0) { if (g_variant_is_of_type(value, G_VARIANT_TYPE_STRING)) { conf->is_hidden = g_strdup(g_variant_get_string(value, NULL)); - ERR("is_hidden [%s]", conf->is_hidden); + DBG("is_hidden [%s]", conf->is_hidden); } else { conf->is_hidden = NULL; } } else if (g_strcmp0(field, WIFI_CONFIG_PROXYADDRESS) == 0) { if (g_variant_is_of_type(value, G_VARIANT_TYPE_STRING)) { conf->proxy_address = g_strdup(g_variant_get_string(value, NULL)); - ERR("proxy_address [%s]", conf->proxy_address); + DBG("proxy_address [%s]", conf->proxy_address); } else { conf->proxy_address = NULL; } @@ -712,6 +1051,12 @@ gboolean handle_save_configuration(Wifi *wifi, GDBusMethodInvocation *context, ret = __get_group_name(WIFI_CONFIG_PREFIX, config_id, &group_name); if (ret != TRUE) { + g_free(conf->name); + g_free(conf->ssid); + g_free(conf->passphrase); + g_free(conf->is_hidden); + g_free(conf->proxy_address); + g_free(conf); ERR("Fail to get_wifi_config_group_name"); return FALSE; } @@ -726,7 +1071,7 @@ gboolean handle_save_configuration(Wifi *wifi, GDBusMethodInvocation *context, g_key_file_set_boolean(keyfile, group_name, WIFI_CONFIG_FAVORITE, conf->favorite); g_key_file_set_boolean(keyfile, group_name, WIFI_CONFIG_AUTOCONNECT, conf->autoconnect); - // Optional field + /* Optional field */ if (conf->proxy_address != NULL) { g_key_file_set_string(keyfile, group_name, WIFI_CONFIG_PROXY_METHOD, "manual"); g_key_file_set_string(keyfile, group_name, WIFI_CONFIG_PROXY_SERVER, conf->proxy_address); @@ -734,22 +1079,22 @@ gboolean handle_save_configuration(Wifi *wifi, GDBusMethodInvocation *context, if (conf->is_hidden != NULL) { gboolean hidden = FALSE; - if (g_strcmp0(conf->is_hidden, "TRUE") == 0) { + if (g_strcmp0(conf->is_hidden, "TRUE") == 0) hidden = TRUE; - } g_key_file_set_boolean(keyfile, group_name, WIFI_CONFIG_HIDDEN, hidden); } ret = _save_configuration(config_id, keyfile); if (ret == TRUE) { - SLOG(LOG_INFO, "MDM_LOG_USER", "Object=wifi-profile, AccessType=Create, Result=Succeed"); + INFO("Success to save configuration [%s]", config_id); wifi_complete_save_configuration(wifi, context); } else { - SLOG(LOG_INFO, "MDM_LOG_USER", "Object=wifi-profile, AccessType=Create, Result=Failed"); + INFO("Fail to save configuration [%s]", config_id); netconfig_error_dbus_method_return(context, NETCONFIG_ERROR_INTERNAL, "FailSaveConfiguration"); } g_key_file_free(keyfile); + g_free(group_name); g_free(conf->name); g_free(conf->ssid); g_free(conf->passphrase); @@ -787,59 +1132,56 @@ gboolean handle_load_eap_configuration(Wifi *wifi, GDBusMethodInvocation *contex g_variant_builder_add(b, "{sv}", WIFI_CONFIG_NAME, g_variant_new_string(conf->name)); g_variant_builder_add(b, "{sv}", WIFI_CONFIG_SECURITY_TYPE, g_variant_new_string(conf->security_type)); g_variant_builder_add(b, "{sv}", WIFI_CONFIG_HIDDEN, g_variant_new_string(conf->is_hidden)); - if (conf->proxy_address != NULL) { + if (conf->proxy_address != NULL) g_variant_builder_add(b, "{sv}", WIFI_CONFIG_PROXYADDRESS, g_variant_new_string(conf->proxy_address)); - g_free(conf->proxy_address); - } else { + else g_variant_builder_add(b, "{sv}", WIFI_CONFIG_PROXYADDRESS, g_variant_new_string("NONE")); - } - if (conf->last_error != NULL) { + + if (conf->last_error != NULL) g_variant_builder_add(b, "{sv}", WIFI_CONFIG_FAILURE, g_variant_new_string(conf->last_error)); - g_free(conf->last_error); - } else { + else g_variant_builder_add(b, "{sv}", WIFI_CONFIG_FAILURE, g_variant_new_string("ERROR_NONE")); - } + if (conf->eap_config != NULL) { - if (conf->eap_config->anonymous_identity != NULL) { + if (conf->eap_config->anonymous_identity != NULL) g_variant_builder_add(b, "{sv}", WIFI_CONFIG_EAP_ANONYMOUS_IDENTITY, g_variant_new_string(conf->eap_config->anonymous_identity)); - } else { + else g_variant_builder_add(b, "{sv}", WIFI_CONFIG_EAP_ANONYMOUS_IDENTITY, g_variant_new_string("NONE")); - } - if (conf->eap_config->ca_cert != NULL) { + + if (conf->eap_config->ca_cert != NULL) g_variant_builder_add(b, "{sv}", WIFI_CONFIG_EAP_CACERT, g_variant_new_string(conf->eap_config->ca_cert)); - } else { + else g_variant_builder_add(b, "{sv}", WIFI_CONFIG_EAP_CACERT, g_variant_new_string("NONE")); - } - if (conf->eap_config->client_cert != NULL) { + + if (conf->eap_config->client_cert != NULL) g_variant_builder_add(b, "{sv}", WIFI_CONFIG_EAP_CLIENTCERT, g_variant_new_string(conf->eap_config->client_cert)); - } else { + else g_variant_builder_add(b, "{sv}", WIFI_CONFIG_EAP_CLIENTCERT, g_variant_new_string("NONE")); - } - if (conf->eap_config->private_key != NULL) { + + if (conf->eap_config->private_key != NULL) g_variant_builder_add(b, "{sv}", WIFI_CONFIG_EAP_PRIVATEKEY, g_variant_new_string(conf->eap_config->private_key)); - } else { + else g_variant_builder_add(b, "{sv}", WIFI_CONFIG_EAP_PRIVATEKEY, g_variant_new_string("NONE")); - } - if (conf->eap_config->identity != NULL) { + + if (conf->eap_config->identity != NULL) g_variant_builder_add(b, "{sv}", WIFI_CONFIG_EAP_IDENTITY, g_variant_new_string(conf->eap_config->identity)); - } else { + else g_variant_builder_add(b, "{sv}", WIFI_CONFIG_EAP_IDENTITY, g_variant_new_string("NONE")); - } - if (conf->eap_config->eap_type != NULL) { + + if (conf->eap_config->eap_type != NULL) g_variant_builder_add(b, "{sv}", WIFI_CONFIG_EAP_TYPE, g_variant_new_string(conf->eap_config->eap_type)); - } else { + else g_variant_builder_add(b, "{sv}", WIFI_CONFIG_EAP_TYPE, g_variant_new_string("NONE")); - } - if (conf->eap_config->eap_auth_type != NULL) { + + if (conf->eap_config->eap_auth_type != NULL) g_variant_builder_add(b, "{sv}", WIFI_CONFIG_EAP_AUTH_TYPE, g_variant_new_string(conf->eap_config->eap_auth_type)); - } else { + else g_variant_builder_add(b, "{sv}", WIFI_CONFIG_EAP_AUTH_TYPE, g_variant_new_string("NONE")); - } - if (conf->eap_config->subject_match != NULL) { + + if (conf->eap_config->subject_match != NULL) g_variant_builder_add(b, "{sv}", WIFI_CONFIG_EAP_SUBJECT_MATCH, g_variant_new_string(conf->eap_config->subject_match)); - } else { + else g_variant_builder_add(b, "{sv}", WIFI_CONFIG_EAP_SUBJECT_MATCH, g_variant_new_string("NONE")); - } } __free_wifi_configuration(conf); @@ -863,12 +1205,9 @@ gboolean handle_save_eap_configuration(Wifi *wifi, GDBusMethodInvocation *contex if ((wifi == NULL) || (config_id == NULL) || (configuration == NULL)) { ERR("Invalid parameter"); netconfig_error_invalid_parameter(context); - SLOG(LOG_INFO, "MDM_LOG_USER", "Object=wifi-profile, AccessType=Create, Result=Failed"); return FALSE; } - INFO("save [%s]", config_id); - conf = g_new0(struct wifi_config, 1); conf->eap_config = g_new0(struct wifi_eap_config, 1); @@ -877,91 +1216,91 @@ gboolean handle_save_eap_configuration(Wifi *wifi, GDBusMethodInvocation *contex if (g_strcmp0(field, WIFI_CONFIG_NAME) == 0) { if (g_variant_is_of_type(value, G_VARIANT_TYPE_STRING)) { conf->name = g_strdup(g_variant_get_string(value, NULL)); - ERR("name [%s]", conf->name); + DBG("name [%s]", conf->name); } else { conf->name = NULL; } } else if (g_strcmp0(field, WIFI_CONFIG_SSID) == 0) { if (g_variant_is_of_type(value, G_VARIANT_TYPE_STRING)) { conf->ssid = g_strdup(g_variant_get_string(value, NULL)); - ERR("ssid [%s]", conf->ssid); + DBG("ssid [%s]", conf->ssid); } else { conf->ssid = NULL; } } else if (g_strcmp0(field, WIFI_CONFIG_PASSPHRASE) == 0) { if (g_variant_is_of_type(value, G_VARIANT_TYPE_STRING)) { conf->passphrase = g_strdup(g_variant_get_string(value, NULL)); - ERR("passphrase [%s]", conf->passphrase); + DBG("passphrase [%s]", conf->passphrase); } else { conf->passphrase = NULL; } } else if (g_strcmp0(field, WIFI_CONFIG_HIDDEN) == 0) { if (g_variant_is_of_type(value, G_VARIANT_TYPE_STRING)) { conf->is_hidden = g_strdup(g_variant_get_string(value, NULL)); - ERR("is_hidden [%s]", conf->is_hidden); + DBG("is_hidden [%s]", conf->is_hidden); } else { conf->is_hidden = NULL; } } else if (g_strcmp0(field, WIFI_CONFIG_PROXYADDRESS) == 0) { if (g_variant_is_of_type(value, G_VARIANT_TYPE_STRING)) { conf->proxy_address = g_strdup(g_variant_get_string(value, NULL)); - ERR("proxy_address [%s]", conf->proxy_address); + DBG("proxy_address [%s]", conf->proxy_address); } else { conf->proxy_address = NULL; } } else if (g_strcmp0(field, WIFI_CONFIG_EAP_ANONYMOUS_IDENTITY) == 0) { if (g_variant_is_of_type(value, G_VARIANT_TYPE_STRING)) { conf->eap_config->anonymous_identity = g_strdup(g_variant_get_string(value, NULL)); - ERR("anonymous_identity [%s]", conf->eap_config->anonymous_identity); + DBG("anonymous_identity [%s]", conf->eap_config->anonymous_identity); } else { conf->eap_config->anonymous_identity = NULL; } } else if (g_strcmp0(field, WIFI_CONFIG_EAP_CACERT) == 0) { if (g_variant_is_of_type(value, G_VARIANT_TYPE_STRING)) { conf->eap_config->ca_cert = g_strdup(g_variant_get_string(value, NULL)); - ERR("ca_cert [%s]", conf->eap_config->ca_cert); + DBG("ca_cert [%s]", conf->eap_config->ca_cert); } else { conf->eap_config->ca_cert = NULL; } } else if (g_strcmp0(field, WIFI_CONFIG_EAP_CLIENTCERT) == 0) { if (g_variant_is_of_type(value, G_VARIANT_TYPE_STRING)) { conf->eap_config->client_cert = g_strdup(g_variant_get_string(value, NULL)); - ERR("client_cert [%s]", conf->eap_config->client_cert); + DBG("client_cert [%s]", conf->eap_config->client_cert); } else { conf->eap_config->client_cert = NULL; } } else if (g_strcmp0(field, WIFI_CONFIG_EAP_PRIVATEKEY) == 0) { if (g_variant_is_of_type(value, G_VARIANT_TYPE_STRING)) { conf->eap_config->private_key = g_strdup(g_variant_get_string(value, NULL)); - ERR("private_key [%s]", conf->eap_config->private_key); + DBG("private_key [%s]", conf->eap_config->private_key); } else { conf->eap_config->private_key = NULL; } } else if (g_strcmp0(field, WIFI_CONFIG_EAP_IDENTITY) == 0) { if (g_variant_is_of_type(value, G_VARIANT_TYPE_STRING)) { conf->eap_config->identity = g_strdup(g_variant_get_string(value, NULL)); - ERR("identity [%s]", conf->eap_config->identity); + DBG("identity [%s]", conf->eap_config->identity); } else { conf->eap_config->identity = NULL; } } else if (g_strcmp0(field, WIFI_CONFIG_EAP_TYPE) == 0) { if (g_variant_is_of_type(value, G_VARIANT_TYPE_STRING)) { conf->eap_config->eap_type = g_strdup(g_variant_get_string(value, NULL)); - ERR("eap_type [%s]", conf->eap_config->eap_type); + DBG("eap_type [%s]", conf->eap_config->eap_type); } else { conf->eap_config->eap_type = NULL; } } else if (g_strcmp0(field, WIFI_CONFIG_EAP_AUTH_TYPE) == 0) { if (g_variant_is_of_type(value, G_VARIANT_TYPE_STRING)) { conf->eap_config->eap_auth_type = g_strdup(g_variant_get_string(value, NULL)); - ERR("eap_auth_type [%s]", conf->eap_config->eap_auth_type); + DBG("eap_auth_type [%s]", conf->eap_config->eap_auth_type); } else { conf->eap_config->eap_auth_type = NULL; } } else if (g_strcmp0(field, WIFI_CONFIG_EAP_SUBJECT_MATCH) == 0) { if (g_variant_is_of_type(value, G_VARIANT_TYPE_STRING)) { conf->eap_config->subject_match = g_strdup(g_variant_get_string(value, NULL)); - ERR("subject_match [%s]", conf->eap_config->subject_match); + DBG("subject_match [%s]", conf->eap_config->subject_match); } else { conf->eap_config->subject_match = NULL; } @@ -987,7 +1326,7 @@ gboolean handle_save_eap_configuration(Wifi *wifi, GDBusMethodInvocation *contex g_key_file_set_boolean(keyfile, group_name, WIFI_CONFIG_FAVORITE, conf->favorite); g_key_file_set_boolean(keyfile, group_name, WIFI_CONFIG_AUTOCONNECT, conf->autoconnect); - // Optional field + /* Optional field */ if (conf->proxy_address != NULL) { g_key_file_set_string(keyfile, group_name, WIFI_CONFIG_PROXY_METHOD, "manual"); g_key_file_set_string(keyfile, group_name, WIFI_CONFIG_PROXY_SERVER, conf->proxy_address); @@ -995,22 +1334,54 @@ gboolean handle_save_eap_configuration(Wifi *wifi, GDBusMethodInvocation *contex if (conf->is_hidden != NULL) { gboolean hidden = FALSE; - if (g_strcmp0(conf->is_hidden, "TRUE") == 0) { + if (g_strcmp0(conf->is_hidden, "TRUE") == 0) hidden = TRUE; - } g_key_file_set_boolean(keyfile, group_name, WIFI_CONFIG_HIDDEN, hidden); } + if (conf->eap_config->anonymous_identity != NULL) + g_key_file_set_string(keyfile, group_name, + WIFI_CONFIG_EAP_ANONYMOUS_IDENTITY, conf->eap_config->anonymous_identity); + + if (conf->eap_config->ca_cert != NULL) + g_key_file_set_string(keyfile, group_name, + WIFI_CONFIG_EAP_CACERT, conf->eap_config->ca_cert); + + if (conf->eap_config->client_cert != NULL) + g_key_file_set_string(keyfile, group_name, + WIFI_CONFIG_EAP_CLIENTCERT, conf->eap_config->client_cert); + + if (conf->eap_config->private_key != NULL) + g_key_file_set_string(keyfile, group_name, + WIFI_CONFIG_EAP_PRIVATEKEY, conf->eap_config->private_key); + + if (conf->eap_config->identity != NULL) + g_key_file_set_string(keyfile, group_name, + WIFI_CONFIG_EAP_IDENTITY, conf->eap_config->identity); + + if (conf->eap_config->eap_type != NULL) + g_key_file_set_string(keyfile, group_name, + WIFI_CONFIG_EAP_TYPE, conf->eap_config->eap_type); + + if (conf->eap_config->eap_auth_type != NULL) + g_key_file_set_string(keyfile, group_name, + WIFI_CONFIG_EAP_AUTH_TYPE, conf->eap_config->eap_auth_type); + + if (conf->eap_config->subject_match != NULL) + g_key_file_set_string(keyfile, group_name, + WIFI_CONFIG_EAP_SUBJECT_MATCH, conf->eap_config->subject_match); + ret = _save_configuration(config_id, keyfile); if (ret == TRUE) { - SLOG(LOG_INFO, "MDM_LOG_USER", "Object=wifi-profile, AccessType=Create, Result=Succeed"); + INFO("Success to save eap configuration [%s]", config_id); wifi_complete_save_eap_configuration(wifi, context); } else { - SLOG(LOG_INFO, "MDM_LOG_USER", "Object=wifi-profile, AccessType=Create, Result=Failed"); + INFO("Fail to save eap configuration [%s]", config_id); netconfig_error_dbus_method_return(context, NETCONFIG_ERROR_INTERNAL, "FailSaveEapConfiguration"); } g_key_file_free(keyfile); + g_free(group_name); __free_wifi_configuration(conf); g_variant_iter_free(iter); @@ -1030,7 +1401,7 @@ gboolean handle_remove_configuration(Wifi *wifi, GDBusMethodInvocation *context, ret = _remove_configuration(config_id); if (ret != TRUE) { - // no configuration or error + /* no configuration or error */ ERR("No [%s] configuration", config_id); netconfig_error_no_profile(context); return FALSE; @@ -1040,7 +1411,7 @@ gboolean handle_remove_configuration(Wifi *wifi, GDBusMethodInvocation *context, return ret; } -// config field key / value +/* config field key / value */ /* * [wifi_macaddress_config_id] * Name=name (mandatory) @@ -1113,7 +1484,7 @@ gboolean handle_set_config_field(Wifi *wifi, GDBusMethodInvocation *context, if (keyfile_key != NULL) g_free(keyfile_key); - wifi_complete_set_config_field(wifi,context); + wifi_complete_set_config_field(wifi, context); return ret; } @@ -1140,3 +1511,68 @@ gboolean handle_get_config_passphrase(Wifi *wifi, GDBusMethodInvocation *context return ret; } + +gboolean handle_add_vsie(Wifi *wifi, GDBusMethodInvocation *context, + int frame_id, const gchar *vsie) +{ + DBG("Frame ID: [%d] VSIE: [%s]", frame_id, vsie); + + g_return_val_if_fail(wifi != NULL, FALSE); + g_return_val_if_fail(vsie != NULL, FALSE); + + gboolean ret = FALSE; + + ret = _add_vsie(frame_id, vsie); + if (!ret) { + DBG("Failed to add vsie: %s", vsie); + netconfig_error_dbus_method_return(context, NETCONFIG_ERROR_INTERNAL, "OperationFailed"); + return ret; + } + + wifi_complete_add_vsie(wifi, context); + return ret; +} + +gboolean handle_get_vsie(Wifi *wifi, GDBusMethodInvocation *context, + int frame_id) +{ + DBG("Frame ID: [%d]", frame_id); + + g_return_val_if_fail(wifi != NULL, FALSE); + + gboolean ret = FALSE; + gchar *vsie = NULL; + + ret = _get_vsie(frame_id, &vsie); + if (!ret) { + DBG("Failed to get vsie for frame:[%d]", frame_id); + netconfig_error_dbus_method_return(context, NETCONFIG_ERROR_INTERNAL, "OperationFailed"); + return ret; + } + + DBG("Received vsie: %s", vsie); + wifi_complete_get_vsie(wifi, context, vsie); + + return ret; +} + +gboolean handle_remove_vsie(Wifi *wifi, GDBusMethodInvocation *context, + int frame_id, const gchar *vsie) +{ + DBG("Frame ID: [%d] VSIE: [%s]", frame_id, vsie); + + g_return_val_if_fail(wifi != NULL, FALSE); + g_return_val_if_fail(vsie != NULL, FALSE); + + gboolean ret = FALSE; + + ret = _remove_vsie(frame_id, vsie); + if (!ret) { + DBG("Failed to remove vsie: %s", vsie); + netconfig_error_dbus_method_return(context, NETCONFIG_ERROR_INTERNAL, "OperationFailed"); + return ret; + } + + wifi_complete_remove_vsie(wifi, context); + return ret; +}