static void ep_remember_password_keyfile (EPassMsg *msg) { gchar *group, *key, *password; password = g_hash_table_lookup (password_cache, msg->key); if (password == NULL) { g_warning ("Password for key \"%s\" not found", msg->key); return; } group = ep_key_file_get_group (msg->component); key = ep_key_file_normalize_key (msg->key); password = ep_password_encode (password); g_hash_table_remove (password_cache, msg->key); if (check_key_file (G_STRFUNC)) { g_key_file_set_string (key_file, group, key, password); ep_key_file_save (); } g_free (group); g_free (key); g_free (password); }
static void ep_get_password_keyfile (EPassMsg *msg) { gchar *group, *key, *password; GError *error = NULL; if (!check_key_file (G_STRFUNC)) return; group = ep_key_file_get_group (msg->component); key = ep_key_file_normalize_key (msg->key); password = g_key_file_get_string (key_file, group, key, &error); if (password != NULL) { msg->password = ep_password_decode (password); g_free (password); /* Not finding the requested key is acceptable, but we still * want to leave an informational message on the terminal. */ } else if (g_error_matches (error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_KEY_NOT_FOUND)) { g_message ("%s", error->message); g_error_free (error); /* Not finding the requested group is also acceptable. */ } else if (g_error_matches (error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_GROUP_NOT_FOUND)) { g_message ("%s", error->message); g_error_free (error); } else if (error != NULL) g_propagate_error (&msg->error, error); g_free (group); g_free (key); }
static void ep_clear_passwords_keyfile (EPassMsg *msg) { gchar *group; GError *error = NULL; if (!check_key_file (G_STRFUNC)) return; group = ep_key_file_get_group (msg->component); if (g_key_file_remove_group (key_file, group, &error)) ep_key_file_save (); /* Not finding the requested group is acceptable, but we still * want to leave an informational message on the terminal. */ else if (g_error_matches (error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_GROUP_NOT_FOUND)) { g_message ("%s", error->message); g_error_free (error); } else if (error != NULL) g_propagate_error (&msg->error, error); g_free (group); }
static void ep_key_file_save (void) { gchar *contents; gchar *filename; gchar *pathname; gsize length = 0; GError *error = NULL; if (!check_key_file (G_STRFUNC)) return; filename = ep_key_file_get_filename (); contents = g_key_file_to_data (key_file, &length, &error); pathname = g_path_get_dirname (filename); if (!error) { g_mkdir_with_parents (pathname, 0700); g_file_set_contents (filename, contents, length, &error); } g_free (pathname); if (error != NULL) { g_warning ("%s: %s", filename, error->message); g_error_free (error); } g_free (contents); g_free (filename); }
static void ep_key_file_load (void) { gchar *filename; GError *error = NULL; if (!check_key_file (G_STRFUNC)) return; filename = ep_key_file_get_filename (); if (!g_file_test (filename, G_FILE_TEST_EXISTS)) goto exit; g_key_file_load_from_file ( key_file, filename, G_KEY_FILE_KEEP_COMMENTS | G_KEY_FILE_KEEP_TRANSLATIONS, &error); if (error != NULL) { g_warning ("%s: %s", filename, error->message); g_error_free (error); } exit: g_free (filename); }
static void ep_forget_passwords_keyfile (EPassMsg *msg) { gchar **groups; gsize length = 0, ii; if (!check_key_file (G_STRFUNC)) return; groups = g_key_file_get_groups (key_file, &length); if (!groups) return; for (ii = 0; ii < length; ii++) { GError *error = NULL; if (!g_str_has_prefix (groups[ii], KEY_FILE_GROUP_PREFIX)) continue; g_key_file_remove_group (key_file, groups[ii], &error); /* Not finding the requested group is acceptable, but we still * want to leave an informational message on the terminal. */ if (g_error_matches (error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_GROUP_NOT_FOUND)) { g_message ("%s", error->message); g_error_free (error); /* Issue a warning if anything else goes wrong. */ } else if (error != NULL) { g_warning ("%s", error->message); g_error_free (error); } } ep_key_file_save (); g_strfreev (groups); }
int main(void) { SLOGI("[%s] Secure Storage Server Start..\n", __func__); #ifdef USE_KEY_FILE int exist_ret = -1; int make_ret = -1; #endif // USE_KEY_FILE DIR* dp = NULL; // make default directory(if not exist) if((dp = opendir(SS_STORAGE_DEFAULT_PATH)) == NULL) { SLOGI("[%s] directory [%s] is not exist, making now.\n", __func__, SS_STORAGE_DEFAULT_PATH); mkdir(SS_STORAGE_DEFAULT_PATH, 0700); } else closedir(dp); #ifdef USE_KEY_FILE exist_ret = check_key_file(); // if 0, there is not key file. Or 1, exist. if(exist_ret == 0) { make_ret = make_key_file(); if(make_ret == 0) { SLOGE("[%s] Making key file fail. ss-server will be terminated..\n", __func__); return 0; } } #endif // USE_KEY_FILE SsServerComm(); return 0; }