From c6b0f99bb31405902b40a96f6491a9adcaaac169 Mon Sep 17 00:00:00 2001 From: Marc Blank Date: Sun, 18 Mar 2012 19:16:41 -0700 Subject: [PATCH] Use renameTo safely when creating the user 0 account database * Because the user directory probably won't exist, the renameTo in previous code fails silently Bug: 6188815 Change-Id: I6afd1bad9bbd1a36de7e93d9e02ed7172b1ed370 --- core/java/android/accounts/AccountManagerService.java | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/core/java/android/accounts/AccountManagerService.java b/core/java/android/accounts/AccountManagerService.java index adc7d3572002d..28b7dd3c9c615 100644 --- a/core/java/android/accounts/AccountManagerService.java +++ b/core/java/android/accounts/AccountManagerService.java @@ -1817,7 +1817,16 @@ public class AccountManagerService // Migrate old file, if it exists, to the new location File oldFile = new File(systemDir, DATABASE_NAME); if (oldFile.exists()) { - oldFile.renameTo(databaseFile); + // Check for use directory; create if it doesn't exist, else renameTo will fail + File userDir = new File(systemDir, "users/" + userId); + if (!userDir.exists()) { + if (!userDir.mkdirs()) { + throw new IllegalStateException("User dir cannot be created: " + userDir); + } + } + if (!oldFile.renameTo(databaseFile)) { + throw new IllegalStateException("User dir cannot be migrated: " + databaseFile); + } } } return databaseFile.getPath();