"Invalid home directory path", error, FALSE);
}
- if (g_access (home_dir, F_OK) != 0) {
- GumConfig *config = gum_config_new (NULL);
- const gchar *skel_dir = NULL;
+ if (g_access (home_dir, F_OK) == 0) {
+ if (!gum_file_delete_home_dir(home_dir, NULL)) {
+ gchar *backup_dir = NULL;
+ size_t len = strlen(home_dir) + strlen("_bak") + 1;
+
+ backup_dir = g_malloc0(len);
+ snprintf(backup_dir, len, "%s_bak", home_dir);
+
+ if (0 != g_rename(home_dir, backup_dir)) {
+ g_free(backup_dir);
+ WARN ("Error: Skipped to copy files. Home directory(%s) already exists.", home_dir);
+ return retval;
+ } else
+ DBG("Rename existing home directory(%s) to backup directory(%s)", home_dir, backup_dir);
+
+ g_free(backup_dir);
+ } else
+ DBG("Delete existing home directory(%s)", home_dir);
+ }
- skel_dir = gum_config_get_string (config, GUM_CONFIG_GENERAL_SKEL_DIR);
- g_object_unref (config);
+ GumConfig *config = gum_config_new (NULL);
+ const gchar *skel_dir = NULL;
- if (!g_file_test (home_dir, G_FILE_TEST_EXISTS)) {
- g_mkdir_with_parents (home_dir, mode);
- }
+ skel_dir = gum_config_get_string (config, GUM_CONFIG_GENERAL_SKEL_DIR);
+ g_object_unref (config);
- if (!g_file_test (home_dir, G_FILE_TEST_IS_DIR)) {
- GUM_RETURN_WITH_ERROR (GUM_ERROR_HOME_DIR_CREATE_FAILURE,
- "Home directory creation failure", error, FALSE);
- }
+ if (!g_file_test (home_dir, G_FILE_TEST_EXISTS)) {
+ g_mkdir_with_parents (home_dir, mode);
+ }
- if (!_copy_file_attributes (skel_dir, home_dir)) {
- GUM_RETURN_WITH_ERROR (GUM_ERROR_FILE_ATTRIBUTE,
- "Unable to get/set dir attributes", error, FALSE);
- }
+ if (!g_file_test (home_dir, G_FILE_TEST_IS_DIR)) {
+ GUM_RETURN_WITH_ERROR (GUM_ERROR_HOME_DIR_CREATE_FAILURE,
+ "Home directory creation failure", error, FALSE);
+ }
- if (!_set_smack64_attr (home_dir,
- GUM_CONFIG_GENERAL_SMACK64_USER_FILES, TRUE)) {
- GUM_RETURN_WITH_ERROR (GUM_ERROR_FILE_ATTRIBUTE,
- "Unable to set smack64 home dir attr", error, FALSE);
- }
+ if (!_copy_file_attributes (skel_dir, home_dir)) {
+ GUM_RETURN_WITH_ERROR (GUM_ERROR_FILE_ATTRIBUTE,
+ "Unable to get/set dir attributes", error, FALSE);
+ }
- /* when run in test mode, user may not exist */
+ if (!_set_smack64_attr (home_dir,
+ GUM_CONFIG_GENERAL_SMACK64_USER_FILES, TRUE)) {
+ GUM_RETURN_WITH_ERROR (GUM_ERROR_FILE_ATTRIBUTE,
+ "Unable to set smack64 home dir attr", error, FALSE);
+ }
+
+ /* when run in test mode, user may not exist */
#ifdef ENABLE_TESTS
- uid = getuid ();
- gid = getgid ();
+ uid = getuid ();
+ gid = getgid ();
#endif
- if (lchown (home_dir, uid, gid) < 0) {
- GUM_RETURN_WITH_ERROR (GUM_ERROR_HOME_DIR_CREATE_FAILURE,
- "Home directory chown failure", error, FALSE);
- }
-
- retval = _copy_dir_recursively (skel_dir, home_dir, uid, gid, umask,
- error);
- } else {
- WARN ("Error: Failed to copy files. Home directory(%s) already exists.", home_dir);
+ if (lchown (home_dir, uid, gid) < 0) {
+ GUM_RETURN_WITH_ERROR (GUM_ERROR_HOME_DIR_CREATE_FAILURE,
+ "Home directory chown failure", error, FALSE);
}
+ retval = _copy_dir_recursively (skel_dir, home_dir, uid, gid, umask,
+ error);
+
return retval;
}