diff --git a/src/main/java/com/topjohnwu/magisk/MagiskManager.java b/src/main/java/com/topjohnwu/magisk/MagiskManager.java index bf6af5725..e27dafdac 100644 --- a/src/main/java/com/topjohnwu/magisk/MagiskManager.java +++ b/src/main/java/com/topjohnwu/magisk/MagiskManager.java @@ -96,6 +96,7 @@ public class MagiskManager extends Shell.ContainerApp { super.onCreate(); Shell.setFlags(Shell.FLAG_MOUNT_MASTER); + Shell.verboseLogging(BuildConfig.DEBUG); BusyBox.BB_PATH = new File(Const.BUSYBOX_PATH); Shell.setInitializer(new Shell.Initializer() { @Override @@ -125,6 +126,14 @@ public class MagiskManager extends Shell.ContainerApp { } suDB = SuDatabaseHelper.getInstance(this); + + String pkg = suDB.getStrings(Const.Key.SU_REQUESTER, Const.ORIG_PKG_NAME); + if (getPackageName().equals(Const.ORIG_PKG_NAME) && !pkg.equals(Const.ORIG_PKG_NAME)) { + suDB.setStrings(Const.Key.SU_REQUESTER, null); + Utils.uninstallPkg(pkg); + suDB = SuDatabaseHelper.getInstance(this); + } + repoDB = new RepoDatabaseHelper(this); defaultLocale = Locale.getDefault(); setLocale(); diff --git a/src/main/java/com/topjohnwu/magisk/asyncs/HideManager.java b/src/main/java/com/topjohnwu/magisk/asyncs/HideManager.java index 5ac8939d0..0eac84702 100644 --- a/src/main/java/com/topjohnwu/magisk/asyncs/HideManager.java +++ b/src/main/java/com/topjohnwu/magisk/asyncs/HideManager.java @@ -130,12 +130,13 @@ public class HideManager extends ParallelTask { } // Install the application - if (ShellUtils.fastCmdResult(Shell.getShell(), "pm install " + repack)) + if (!ShellUtils.fastCmdResult(Shell.getShell(), "pm install " + repack)) return false; repack.delete(); mm.suDB.setStrings(Const.Key.SU_REQUESTER, pkg); + mm.suDB.flush(); Utils.dumpPrefs(); Utils.uninstallPkg(Const.ORIG_PKG_NAME); diff --git a/src/main/java/com/topjohnwu/magisk/database/SuDatabaseHelper.java b/src/main/java/com/topjohnwu/magisk/database/SuDatabaseHelper.java index 67d4ca449..90f98a5d2 100644 --- a/src/main/java/com/topjohnwu/magisk/database/SuDatabaseHelper.java +++ b/src/main/java/com/topjohnwu/magisk/database/SuDatabaseHelper.java @@ -35,6 +35,7 @@ public class SuDatabaseHelper { private PackageManager pm; private SQLiteDatabase mDb; + private File DB_FILE; public static SuDatabaseHelper getInstance(MagiskManager mm) { try { @@ -66,14 +67,14 @@ public class SuDatabaseHelper { } private SQLiteDatabase openDatabase(MagiskManager mm) { - SQLiteDatabase db = null; String GLOBAL_DB = "/data/adb/magisk.db"; - File dbFile = new File(Utils.fmt("/sbin/.core/db-%s/magisk.db", mm.getPackageName())); + DB_FILE = new File(Utils.fmt("/sbin/.core/db-%s/magisk.db", mm.getPackageName())); Context de = Build.VERSION.SDK_INT >= Build.VERSION_CODES.N ? mm.createDeviceProtectedStorageContext() : mm; - if (!dbFile.exists()) { + if (!DB_FILE.exists()) { if (!Shell.rootAccess()) { // We don't want the app to crash, create a db and return + DB_FILE = mm.getDatabasePath("su.db"); return mm.openOrCreateDatabase("su.db", Context.MODE_PRIVATE, null); } mm.loadMagiskInfo(); @@ -81,13 +82,15 @@ public class SuDatabaseHelper { cleanup(); if (mm.magiskVersionCode < 1410) { // Super old legacy mode - db = mm.openOrCreateDatabase("su.db", Context.MODE_PRIVATE, null); + DB_FILE = mm.getDatabasePath("su.db"); + return mm.openOrCreateDatabase("su.db", Context.MODE_PRIVATE, null); } else if (mm.magiskVersionCode < 1450) { // Legacy mode with FBE aware if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { de.moveDatabaseFrom(mm, "su.db"); } - db = de.openOrCreateDatabase("su.db", Context.MODE_PRIVATE, null); + DB_FILE = de.getDatabasePath("su.db"); + return de.openOrCreateDatabase("su.db", Context.MODE_PRIVATE, null); } else { mm.deleteDatabase("su.db"); de.deleteDatabase("su.db"); @@ -103,18 +106,15 @@ public class SuDatabaseHelper { "mount -o bind %s %s;" + "chcon u:object_r:su_file:s0 %s/*; chown %d.%d %s;" + "chmod 666 %s/*; chmod 700 %s;", - GLOBAL_DB, dbFile.getParent(), dbFile, dbFile, - GLOBAL_DB, dbFile, - dbFile.getParent(), Process.myUid(), Process.myUid(), dbFile.getParent(), - dbFile.getParent(), dbFile.getParent() + GLOBAL_DB, DB_FILE.getParent(), DB_FILE, DB_FILE, + GLOBAL_DB, DB_FILE, + DB_FILE.getParent(), Process.myUid(), Process.myUid(), DB_FILE.getParent(), + DB_FILE.getParent(), DB_FILE.getParent() )); } } - if (db == null) { - // Not using legacy mode, open the mounted global DB - db = SQLiteDatabase.openOrCreateDatabase(dbFile, null); - } - return db; + // Not using legacy mode, open the mounted global DB + return SQLiteDatabase.openOrCreateDatabase(DB_FILE, null); } public void onUpgrade(SQLiteDatabase db, int oldVersion) { @@ -315,4 +315,9 @@ public class SuDatabaseHelper { } return value; } + + public void flush() { + mDb.close(); + mDb = SQLiteDatabase.openOrCreateDatabase(DB_FILE, null); + } }