X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Fconfig.c;h=ba463668d8b1a109f40a8c566a9388f2e5559640;hb=729e062d89d4ead006fa837675ed2d0d2b803ae2;hp=90a2180b3a8bb9cab8b94ce419b860f6547b1b6a;hpb=cf412a3fd135c0ccf15cea917d38800cce5a4d66;p=framework%2Fconnectivity%2Fconnman.git diff --git a/src/config.c b/src/config.c index 90a2180..ba46366 100644 --- a/src/config.c +++ b/src/config.c @@ -2,7 +2,7 @@ * * Connection Manager * - * Copyright (C) 2007-2010 Intel Corporation. All rights reserved. + * Copyright (C) 2007-2012 Intel Corporation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as @@ -258,7 +258,13 @@ static int load_service(GKeyFile *keyfile, const char *group, } for (i = 0; i < hex_ssid_len; i += 2) { - sscanf(hex_ssid + i, "%02x", &hex); + if (sscanf(hex_ssid + i, "%02x", &hex) <= 0) { + connman_warn("Invalid SSID %s", hex_ssid); + g_free(ssid); + g_free(hex_ssid); + err = -EILSEQ; + goto err; + } ssid[j++] = hex; } @@ -378,12 +384,12 @@ static int load_config(struct connman_config *config) gsize length; char **groups; char *str; - gboolean protected; + gboolean protected, found = FALSE; int i; DBG("config %p", config); - keyfile = __connman_storage_open_config(config->ident); + keyfile = __connman_storage_load_config(config->ident); if (keyfile == NULL) return -EIO; @@ -412,13 +418,20 @@ static int load_config(struct connman_config *config) groups = g_key_file_get_groups(keyfile, &length); for (i = 0; groups[i] != NULL; i++) { - if (g_str_has_prefix(groups[i], "service_") == TRUE) - load_service(keyfile, groups[i], config); + if (g_str_has_prefix(groups[i], "service_") == TRUE) { + if (load_service(keyfile, groups[i], config) == 0) + found = TRUE; + } } + if (found == FALSE) + connman_warn("Config file %s/%s.config does not contain any " + "configuration that can be provisioned!", + STORAGEDIR, config->ident); + g_strfreev(groups); - __connman_storage_close_config(config->ident, keyfile, FALSE); + g_key_file_free(keyfile); return 0; } @@ -448,73 +461,6 @@ static struct connman_config *create_config(const char *ident) return config; } -int __connman_config_load_service(GKeyFile *keyfile, const char *group, - connman_bool_t persistent) -{ - struct connman_config *config; - const char *service_name; - char *ident, *filename = NULL, *content = NULL; - gsize content_length; - int err; - - service_name = group + strlen("service_"); - ident = g_strdup_printf("%s_%s", INTERNAL_CONFIG_PREFIX, service_name); - if (ident == NULL) - return -ENOMEM; - - DBG("ident %s", ident); - - config = g_hash_table_lookup(config_table, ident); - if (config == NULL) { - config = create_config(ident); - if (config == NULL) { - err = -ENOMEM; - goto out; - } - - config->protected = FALSE; - } - - err = load_service(keyfile, group, config); - if (persistent == FALSE || err < 0) - goto out; - - g_key_file_set_string(keyfile, "global", CONFIG_KEY_NAME, - service_name); - g_key_file_set_string(keyfile, "global", CONFIG_KEY_DESC, - "Internal Config File"); - g_key_file_set_boolean(keyfile, "global", CONFIG_KEY_PROT, FALSE); - - content = g_key_file_to_data(keyfile, &content_length, NULL); - if (content == NULL) { - err = -EIO; - goto out; - } - - filename = g_strdup_printf("%s/%s.config", STORAGEDIR, ident); - if (filename == NULL) { - err = -ENOMEM; - goto out; - } - - DBG("Saving %zu bytes to %s", content_length, service_name); - - if (g_file_set_contents(filename, content, - content_length, NULL) == FALSE) { - err = -EIO; - goto out; - } - - return 0; - -out: - g_free(ident); - g_free(content); - g_free(filename); - - return err; -} - static connman_bool_t validate_ident(const char *ident) { unsigned int i;