Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
M
Magisk
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Administrator
Magisk
Commits
315fa9d7
Commit
315fa9d7
authored
Apr 05, 2018
by
topjohnwu
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Optimize magisk database handling
parent
fb5e8ef4
Show whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
70 additions
and
73 deletions
+70
-73
MagiskManager.java
src/main/java/com/topjohnwu/magisk/MagiskManager.java
+10
-10
SettingsActivity.java
src/main/java/com/topjohnwu/magisk/SettingsActivity.java
+1
-1
SuLogFragment.java
src/main/java/com/topjohnwu/magisk/SuLogFragment.java
+2
-2
SuperuserFragment.java
src/main/java/com/topjohnwu/magisk/SuperuserFragment.java
+2
-2
PolicyAdapter.java
...ain/java/com/topjohnwu/magisk/adapters/PolicyAdapter.java
+3
-3
SuLogAdapter.java
...main/java/com/topjohnwu/magisk/adapters/SuLogAdapter.java
+3
-3
HideManager.java
src/main/java/com/topjohnwu/magisk/asyncs/HideManager.java
+1
-1
MagiskDatabaseHelper.java
...a/com/topjohnwu/magisk/database/MagiskDatabaseHelper.java
+37
-40
PackageReceiver.java
.../java/com/topjohnwu/magisk/receivers/PackageReceiver.java
+2
-2
RequestActivity.java
.../java/com/topjohnwu/magisk/superuser/RequestActivity.java
+3
-3
SuReceiver.java
src/main/java/com/topjohnwu/magisk/superuser/SuReceiver.java
+2
-2
magiskdb.sh
src/main/res/raw/magiskdb.sh
+4
-4
No files found.
src/main/java/com/topjohnwu/magisk/MagiskManager.java
View file @
315fa9d7
...
@@ -16,7 +16,7 @@ import android.widget.Toast;
...
@@ -16,7 +16,7 @@ import android.widget.Toast;
import
com.topjohnwu.magisk.container.Module
;
import
com.topjohnwu.magisk.container.Module
;
import
com.topjohnwu.magisk.database.RepoDatabaseHelper
;
import
com.topjohnwu.magisk.database.RepoDatabaseHelper
;
import
com.topjohnwu.magisk.database.
Su
DatabaseHelper
;
import
com.topjohnwu.magisk.database.
Magisk
DatabaseHelper
;
import
com.topjohnwu.magisk.services.UpdateCheckService
;
import
com.topjohnwu.magisk.services.UpdateCheckService
;
import
com.topjohnwu.magisk.utils.Const
;
import
com.topjohnwu.magisk.utils.Const
;
import
com.topjohnwu.magisk.utils.Topic
;
import
com.topjohnwu.magisk.utils.Topic
;
...
@@ -85,7 +85,7 @@ public class MagiskManager extends Shell.ContainerApp {
...
@@ -85,7 +85,7 @@ public class MagiskManager extends Shell.ContainerApp {
// Global resources
// Global resources
public
SharedPreferences
prefs
;
public
SharedPreferences
prefs
;
public
SuDatabaseHelper
su
DB
;
public
MagiskDatabaseHelper
m
DB
;
public
RepoDatabaseHelper
repoDB
;
public
RepoDatabaseHelper
repoDB
;
public
Runnable
permissionGrantCallback
=
null
;
public
Runnable
permissionGrantCallback
=
null
;
...
@@ -106,7 +106,7 @@ public class MagiskManager extends Shell.ContainerApp {
...
@@ -106,7 +106,7 @@ public class MagiskManager extends Shell.ContainerApp {
@Override
@Override
public
void
onRootShellInit
(
@NonNull
Shell
shell
)
{
public
void
onRootShellInit
(
@NonNull
Shell
shell
)
{
try
(
InputStream
utils
=
getAssets
().
open
(
Const
.
UTIL_FUNCTIONS
);
try
(
InputStream
utils
=
getAssets
().
open
(
Const
.
UTIL_FUNCTIONS
);
InputStream
sudb
=
getResources
().
openRawResource
(
R
.
raw
.
su
db
))
{
InputStream
sudb
=
getResources
().
openRawResource
(
R
.
raw
.
magisk
db
))
{
shell
.
loadInputStream
(
null
,
null
,
utils
);
shell
.
loadInputStream
(
null
,
null
,
utils
);
shell
.
loadInputStream
(
null
,
null
,
sudb
);
shell
.
loadInputStream
(
null
,
null
,
sudb
);
}
catch
(
IOException
e
)
{
}
catch
(
IOException
e
)
{
...
@@ -131,13 +131,13 @@ public class MagiskManager extends Shell.ContainerApp {
...
@@ -131,13 +131,13 @@ public class MagiskManager extends Shell.ContainerApp {
}
catch
(
PackageManager
.
NameNotFoundException
ignored
)
{
/* Expected */
}
}
catch
(
PackageManager
.
NameNotFoundException
ignored
)
{
/* Expected */
}
}
}
suDB
=
Su
DatabaseHelper
.
getInstance
(
this
);
mDB
=
Magisk
DatabaseHelper
.
getInstance
(
this
);
String
pkg
=
su
DB
.
getStrings
(
Const
.
Key
.
SU_REQUESTER
,
Const
.
ORIG_PKG_NAME
);
String
pkg
=
m
DB
.
getStrings
(
Const
.
Key
.
SU_REQUESTER
,
Const
.
ORIG_PKG_NAME
);
if
(
getPackageName
().
equals
(
Const
.
ORIG_PKG_NAME
)
&&
!
pkg
.
equals
(
Const
.
ORIG_PKG_NAME
))
{
if
(
getPackageName
().
equals
(
Const
.
ORIG_PKG_NAME
)
&&
!
pkg
.
equals
(
Const
.
ORIG_PKG_NAME
))
{
su
DB
.
setStrings
(
Const
.
Key
.
SU_REQUESTER
,
null
);
m
DB
.
setStrings
(
Const
.
Key
.
SU_REQUESTER
,
null
);
Utils
.
uninstallPkg
(
pkg
);
Utils
.
uninstallPkg
(
pkg
);
suDB
=
Su
DatabaseHelper
.
getInstance
(
this
);
mDB
=
Magisk
DatabaseHelper
.
getInstance
(
this
);
}
}
repoDB
=
new
RepoDatabaseHelper
(
this
);
repoDB
=
new
RepoDatabaseHelper
(
this
);
...
@@ -168,9 +168,9 @@ public class MagiskManager extends Shell.ContainerApp {
...
@@ -168,9 +168,9 @@ public class MagiskManager extends Shell.ContainerApp {
suRequestTimeout
=
Utils
.
getPrefsInt
(
prefs
,
Const
.
Key
.
SU_REQUEST_TIMEOUT
,
Const
.
Value
.
timeoutList
[
2
]);
suRequestTimeout
=
Utils
.
getPrefsInt
(
prefs
,
Const
.
Key
.
SU_REQUEST_TIMEOUT
,
Const
.
Value
.
timeoutList
[
2
]);
suResponseType
=
Utils
.
getPrefsInt
(
prefs
,
Const
.
Key
.
SU_AUTO_RESPONSE
,
Const
.
Value
.
SU_PROMPT
);
suResponseType
=
Utils
.
getPrefsInt
(
prefs
,
Const
.
Key
.
SU_AUTO_RESPONSE
,
Const
.
Value
.
SU_PROMPT
);
suNotificationType
=
Utils
.
getPrefsInt
(
prefs
,
Const
.
Key
.
SU_NOTIFICATION
,
Const
.
Value
.
NOTIFICATION_TOAST
);
suNotificationType
=
Utils
.
getPrefsInt
(
prefs
,
Const
.
Key
.
SU_NOTIFICATION
,
Const
.
Value
.
NOTIFICATION_TOAST
);
suAccessState
=
su
DB
.
getSettings
(
Const
.
Key
.
ROOT_ACCESS
,
Const
.
Value
.
ROOT_ACCESS_APPS_AND_ADB
);
suAccessState
=
m
DB
.
getSettings
(
Const
.
Key
.
ROOT_ACCESS
,
Const
.
Value
.
ROOT_ACCESS_APPS_AND_ADB
);
multiuserMode
=
su
DB
.
getSettings
(
Const
.
Key
.
SU_MULTIUSER_MODE
,
Const
.
Value
.
MULTIUSER_MODE_OWNER_ONLY
);
multiuserMode
=
m
DB
.
getSettings
(
Const
.
Key
.
SU_MULTIUSER_MODE
,
Const
.
Value
.
MULTIUSER_MODE_OWNER_ONLY
);
suNamespaceMode
=
su
DB
.
getSettings
(
Const
.
Key
.
SU_MNT_NS
,
Const
.
Value
.
NAMESPACE_MODE_REQUESTER
);
suNamespaceMode
=
m
DB
.
getSettings
(
Const
.
Key
.
SU_MNT_NS
,
Const
.
Value
.
NAMESPACE_MODE_REQUESTER
);
// config
// config
isDarkTheme
=
prefs
.
getBoolean
(
Const
.
Key
.
DARK_THEME
,
false
);
isDarkTheme
=
prefs
.
getBoolean
(
Const
.
Key
.
DARK_THEME
,
false
);
...
...
src/main/java/com/topjohnwu/magisk/SettingsActivity.java
View file @
315fa9d7
...
@@ -276,7 +276,7 @@ public class SettingsActivity extends Activity implements Topic.Subscriber {
...
@@ -276,7 +276,7 @@ public class SettingsActivity extends Activity implements Topic.Subscriber {
case
Const
.
Key
.
ROOT_ACCESS
:
case
Const
.
Key
.
ROOT_ACCESS
:
case
Const
.
Key
.
SU_MULTIUSER_MODE
:
case
Const
.
Key
.
SU_MULTIUSER_MODE
:
case
Const
.
Key
.
SU_MNT_NS
:
case
Const
.
Key
.
SU_MNT_NS
:
mm
.
su
DB
.
setSettings
(
key
,
Utils
.
getPrefsInt
(
prefs
,
key
));
mm
.
m
DB
.
setSettings
(
key
,
Utils
.
getPrefsInt
(
prefs
,
key
));
break
;
break
;
case
Const
.
Key
.
LOCALE
:
case
Const
.
Key
.
LOCALE
:
mm
.
setLocale
();
mm
.
setLocale
();
...
...
src/main/java/com/topjohnwu/magisk/SuLogFragment.java
View file @
315fa9d7
...
@@ -46,7 +46,7 @@ public class SuLogFragment extends Fragment {
...
@@ -46,7 +46,7 @@ public class SuLogFragment extends Fragment {
View
v
=
inflater
.
inflate
(
R
.
layout
.
fragment_su_log
,
container
,
false
);
View
v
=
inflater
.
inflate
(
R
.
layout
.
fragment_su_log
,
container
,
false
);
unbinder
=
ButterKnife
.
bind
(
this
,
v
);
unbinder
=
ButterKnife
.
bind
(
this
,
v
);
mm
=
getApplication
();
mm
=
getApplication
();
adapter
=
new
SuLogAdapter
(
mm
.
su
DB
);
adapter
=
new
SuLogAdapter
(
mm
.
m
DB
);
recyclerView
.
setAdapter
(
adapter
);
recyclerView
.
setAdapter
(
adapter
);
updateList
();
updateList
();
...
@@ -73,7 +73,7 @@ public class SuLogFragment extends Fragment {
...
@@ -73,7 +73,7 @@ public class SuLogFragment extends Fragment {
updateList
();
updateList
();
return
true
;
return
true
;
case
R
.
id
.
menu_clear
:
case
R
.
id
.
menu_clear
:
mm
.
su
DB
.
clearLogs
();
mm
.
m
DB
.
clearLogs
();
updateList
();
updateList
();
return
true
;
return
true
;
default
:
default
:
...
...
src/main/java/com/topjohnwu/magisk/SuperuserFragment.java
View file @
315fa9d7
...
@@ -34,13 +34,13 @@ public class SuperuserFragment extends Fragment {
...
@@ -34,13 +34,13 @@ public class SuperuserFragment extends Fragment {
PackageManager
pm
=
getActivity
().
getPackageManager
();
PackageManager
pm
=
getActivity
().
getPackageManager
();
MagiskManager
mm
=
getApplication
();
MagiskManager
mm
=
getApplication
();
List
<
Policy
>
policyList
=
mm
.
su
DB
.
getPolicyList
(
pm
);
List
<
Policy
>
policyList
=
mm
.
m
DB
.
getPolicyList
(
pm
);
if
(
policyList
.
size
()
==
0
)
{
if
(
policyList
.
size
()
==
0
)
{
emptyRv
.
setVisibility
(
View
.
VISIBLE
);
emptyRv
.
setVisibility
(
View
.
VISIBLE
);
recyclerView
.
setVisibility
(
View
.
GONE
);
recyclerView
.
setVisibility
(
View
.
GONE
);
}
else
{
}
else
{
recyclerView
.
setAdapter
(
new
PolicyAdapter
(
policyList
,
mm
.
su
DB
,
pm
));
recyclerView
.
setAdapter
(
new
PolicyAdapter
(
policyList
,
mm
.
m
DB
,
pm
));
emptyRv
.
setVisibility
(
View
.
GONE
);
emptyRv
.
setVisibility
(
View
.
GONE
);
recyclerView
.
setVisibility
(
View
.
VISIBLE
);
recyclerView
.
setVisibility
(
View
.
VISIBLE
);
}
}
...
...
src/main/java/com/topjohnwu/magisk/adapters/PolicyAdapter.java
View file @
315fa9d7
...
@@ -16,7 +16,7 @@ import com.topjohnwu.magisk.components.AlertDialogBuilder;
...
@@ -16,7 +16,7 @@ import com.topjohnwu.magisk.components.AlertDialogBuilder;
import
com.topjohnwu.magisk.components.ExpandableView
;
import
com.topjohnwu.magisk.components.ExpandableView
;
import
com.topjohnwu.magisk.components.SnackbarMaker
;
import
com.topjohnwu.magisk.components.SnackbarMaker
;
import
com.topjohnwu.magisk.container.Policy
;
import
com.topjohnwu.magisk.container.Policy
;
import
com.topjohnwu.magisk.database.
Su
DatabaseHelper
;
import
com.topjohnwu.magisk.database.
Magisk
DatabaseHelper
;
import
java.util.HashSet
;
import
java.util.HashSet
;
import
java.util.List
;
import
java.util.List
;
...
@@ -28,11 +28,11 @@ import butterknife.ButterKnife;
...
@@ -28,11 +28,11 @@ import butterknife.ButterKnife;
public
class
PolicyAdapter
extends
RecyclerView
.
Adapter
<
PolicyAdapter
.
ViewHolder
>
{
public
class
PolicyAdapter
extends
RecyclerView
.
Adapter
<
PolicyAdapter
.
ViewHolder
>
{
private
List
<
Policy
>
policyList
;
private
List
<
Policy
>
policyList
;
private
Su
DatabaseHelper
dbHelper
;
private
Magisk
DatabaseHelper
dbHelper
;
private
PackageManager
pm
;
private
PackageManager
pm
;
private
Set
<
Policy
>
expandList
=
new
HashSet
<>();
private
Set
<
Policy
>
expandList
=
new
HashSet
<>();
public
PolicyAdapter
(
List
<
Policy
>
list
,
Su
DatabaseHelper
db
,
PackageManager
pm
)
{
public
PolicyAdapter
(
List
<
Policy
>
list
,
Magisk
DatabaseHelper
db
,
PackageManager
pm
)
{
policyList
=
list
;
policyList
=
list
;
dbHelper
=
db
;
dbHelper
=
db
;
this
.
pm
=
pm
;
this
.
pm
=
pm
;
...
...
src/main/java/com/topjohnwu/magisk/adapters/SuLogAdapter.java
View file @
315fa9d7
...
@@ -13,7 +13,7 @@ import android.widget.TextView;
...
@@ -13,7 +13,7 @@ import android.widget.TextView;
import
com.topjohnwu.magisk.R
;
import
com.topjohnwu.magisk.R
;
import
com.topjohnwu.magisk.components.ExpandableView
;
import
com.topjohnwu.magisk.components.ExpandableView
;
import
com.topjohnwu.magisk.container.SuLogEntry
;
import
com.topjohnwu.magisk.container.SuLogEntry
;
import
com.topjohnwu.magisk.database.
Su
DatabaseHelper
;
import
com.topjohnwu.magisk.database.
Magisk
DatabaseHelper
;
import
java.util.Collections
;
import
java.util.Collections
;
import
java.util.HashSet
;
import
java.util.HashSet
;
...
@@ -27,10 +27,10 @@ public class SuLogAdapter extends SectionedAdapter<SuLogAdapter.SectionHolder, S
...
@@ -27,10 +27,10 @@ public class SuLogAdapter extends SectionedAdapter<SuLogAdapter.SectionHolder, S
private
List
<
List
<
Integer
>>
logEntryList
;
private
List
<
List
<
Integer
>>
logEntryList
;
private
Set
<
Integer
>
itemExpanded
,
sectionExpanded
;
private
Set
<
Integer
>
itemExpanded
,
sectionExpanded
;
private
Su
DatabaseHelper
suDB
;
private
Magisk
DatabaseHelper
suDB
;
private
Cursor
suLogCursor
=
null
;
private
Cursor
suLogCursor
=
null
;
public
SuLogAdapter
(
Su
DatabaseHelper
db
)
{
public
SuLogAdapter
(
Magisk
DatabaseHelper
db
)
{
suDB
=
db
;
suDB
=
db
;
logEntryList
=
Collections
.
emptyList
();
logEntryList
=
Collections
.
emptyList
();
sectionExpanded
=
new
HashSet
<>();
sectionExpanded
=
new
HashSet
<>();
...
...
src/main/java/com/topjohnwu/magisk/asyncs/HideManager.java
View file @
315fa9d7
...
@@ -135,7 +135,7 @@ public class HideManager extends ParallelTask<Void, Void, Boolean> {
...
@@ -135,7 +135,7 @@ public class HideManager extends ParallelTask<Void, Void, Boolean> {
repack
.
delete
();
repack
.
delete
();
mm
.
su
DB
.
setStrings
(
Const
.
Key
.
SU_REQUESTER
,
pkg
);
mm
.
m
DB
.
setStrings
(
Const
.
Key
.
SU_REQUESTER
,
pkg
);
Utils
.
dumpPrefs
();
Utils
.
dumpPrefs
();
Utils
.
uninstallPkg
(
Const
.
ORIG_PKG_NAME
);
Utils
.
uninstallPkg
(
Const
.
ORIG_PKG_NAME
);
...
...
src/main/java/com/topjohnwu/magisk/database/
Su
DatabaseHelper.java
→
src/main/java/com/topjohnwu/magisk/database/
Magisk
DatabaseHelper.java
View file @
315fa9d7
...
@@ -27,7 +27,7 @@ import java.util.Collections;
...
@@ -27,7 +27,7 @@ import java.util.Collections;
import
java.util.Date
;
import
java.util.Date
;
import
java.util.List
;
import
java.util.List
;
public
class
Su
DatabaseHelper
{
public
class
Magisk
DatabaseHelper
{
private
static
final
int
DATABASE_VER
=
5
;
private
static
final
int
DATABASE_VER
=
5
;
private
static
final
String
POLICY_TABLE
=
"policies"
;
private
static
final
String
POLICY_TABLE
=
"policies"
;
...
@@ -36,60 +36,57 @@ public class SuDatabaseHelper {
...
@@ -36,60 +36,57 @@ public class SuDatabaseHelper {
private
static
final
String
STRINGS_TABLE
=
"strings"
;
private
static
final
String
STRINGS_TABLE
=
"strings"
;
private
PackageManager
pm
;
private
PackageManager
pm
;
private
SQLiteDatabase
mDb
;
private
SQLiteDatabase
db
;
private
File
DB_FILE
;
@NonNull
@NonNull
public
static
Su
DatabaseHelper
getInstance
(
MagiskManager
mm
)
{
public
static
Magisk
DatabaseHelper
getInstance
(
MagiskManager
mm
)
{
try
{
try
{
return
new
Su
DatabaseHelper
(
mm
);
return
new
Magisk
DatabaseHelper
(
mm
);
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
// Let's cleanup everything and try again
// Let's cleanup everything and try again
Shell
.
Sync
.
su
(
"
su
db_clean '*'"
);
Shell
.
Sync
.
su
(
"db_clean '*'"
);
return
new
Su
DatabaseHelper
(
mm
);
return
new
Magisk
DatabaseHelper
(
mm
);
}
}
}
}
private
Su
DatabaseHelper
(
MagiskManager
mm
)
{
private
Magisk
DatabaseHelper
(
MagiskManager
mm
)
{
pm
=
mm
.
getPackageManager
();
pm
=
mm
.
getPackageManager
();
mD
b
=
openDatabase
(
mm
);
d
b
=
openDatabase
(
mm
);
mD
b
.
disableWriteAheadLogging
();
d
b
.
disableWriteAheadLogging
();
int
version
=
mD
b
.
getVersion
();
int
version
=
d
b
.
getVersion
();
if
(
version
<
DATABASE_VER
)
{
if
(
version
<
DATABASE_VER
)
{
onUpgrade
(
mD
b
,
version
);
onUpgrade
(
d
b
,
version
);
}
else
if
(
version
>
DATABASE_VER
)
{
}
else
if
(
version
>
DATABASE_VER
)
{
onDowngrade
(
mD
b
);
onDowngrade
(
d
b
);
}
}
mD
b
.
setVersion
(
DATABASE_VER
);
d
b
.
setVersion
(
DATABASE_VER
);
clearOutdated
();
clearOutdated
();
}
}
private
SQLiteDatabase
openDatabase
(
MagiskManager
mm
)
{
private
SQLiteDatabase
openDatabase
(
MagiskManager
mm
)
{
final
SuFile
GLOBAL_DB
=
new
SuFile
(
"/data/adb/magisk.db"
,
true
);
final
File
DB_FILE
=
new
File
(
Utils
.
fmt
(
"/sbin/.core/db-%d/magisk.db"
,
Const
.
USER_ID
));
DB_FILE
=
new
File
(
Utils
.
fmt
(
"/sbin/.core/db-%d/magisk.db"
,
Const
.
USER_ID
));
Context
de
=
Build
.
VERSION
.
SDK_INT
>=
Build
.
VERSION_CODES
.
N
Context
de
=
Build
.
VERSION
.
SDK_INT
>=
Build
.
VERSION_CODES
.
N
?
mm
.
createDeviceProtectedStorageContext
()
:
mm
;
?
mm
.
createDeviceProtectedStorageContext
()
:
mm
;
if
(!
DB_FILE
.
canWrite
())
{
if
(!
DB_FILE
.
canWrite
())
{
if
(!
Shell
.
rootAccess
())
{
if
(!
Shell
.
rootAccess
())
{
// We don't want the app to crash, create a db and return
// 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
);
return
mm
.
openOrCreateDatabase
(
"su.db"
,
Context
.
MODE_PRIVATE
,
null
);
}
}
mm
.
loadMagiskInfo
();
mm
.
loadMagiskInfo
();
// Cleanup
// Cleanup
Shell
.
Sync
.
su
(
"
su
db_clean "
+
Const
.
USER_ID
);
Shell
.
Sync
.
su
(
"db_clean "
+
Const
.
USER_ID
);
if
(
mm
.
magiskVersionCode
<
1410
)
{
if
(
mm
.
magiskVersionCode
<
1410
)
{
// Super old legacy mode
// Super old legacy mode
DB_FILE
=
mm
.
getDatabasePath
(
"su.db"
);
return
mm
.
openOrCreateDatabase
(
"su.db"
,
Context
.
MODE_PRIVATE
,
null
);
return
mm
.
openOrCreateDatabase
(
"su.db"
,
Context
.
MODE_PRIVATE
,
null
);
}
else
if
(
mm
.
magiskVersionCode
<
1450
)
{
}
else
if
(
mm
.
magiskVersionCode
<
1450
)
{
// Legacy mode with FBE aware
// Legacy mode with FBE aware
if
(
Build
.
VERSION
.
SDK_INT
>=
Build
.
VERSION_CODES
.
N
)
{
if
(
Build
.
VERSION
.
SDK_INT
>=
Build
.
VERSION_CODES
.
N
)
{
de
.
moveDatabaseFrom
(
mm
,
"su.db"
);
de
.
moveDatabaseFrom
(
mm
,
"su.db"
);
}
}
DB_FILE
=
de
.
getDatabasePath
(
"su.db"
);
return
de
.
openOrCreateDatabase
(
"su.db"
,
Context
.
MODE_PRIVATE
,
null
);
return
de
.
openOrCreateDatabase
(
"su.db"
,
Context
.
MODE_PRIVATE
,
null
);
}
else
{
}
else
{
// Global database
final
SuFile
GLOBAL_DB
=
new
SuFile
(
"/data/adb/magisk.db"
,
true
);
mm
.
deleteDatabase
(
"su.db"
);
mm
.
deleteDatabase
(
"su.db"
);
de
.
deleteDatabase
(
"su.db"
);
de
.
deleteDatabase
(
"su.db"
);
if
(
mm
.
magiskVersionCode
<
1460
)
{
if
(
mm
.
magiskVersionCode
<
1460
)
{
...
@@ -105,11 +102,11 @@ public class SuDatabaseHelper {
...
@@ -105,11 +102,11 @@ public class SuDatabaseHelper {
"'create su_file' 'allow * su_file file *' 'allow * su_file dir *'"
);
"'create su_file' 'allow * su_file file *' 'allow * su_file dir *'"
);
}
}
if
(!
GLOBAL_DB
.
exists
())
{
if
(!
GLOBAL_DB
.
exists
())
{
Shell
.
Sync
.
su
(
"
su
db_init"
);
Shell
.
Sync
.
su
(
"db_init"
);
SQLiteDatabase
.
openOrCreateDatabase
(
GLOBAL_DB
,
null
).
close
();
SQLiteDatabase
.
openOrCreateDatabase
(
GLOBAL_DB
,
null
).
close
();
Shell
.
Sync
.
su
(
"
su
db_restore"
);
Shell
.
Sync
.
su
(
"db_restore"
);
}
}
Shell
.
Sync
.
su
(
"
su
db_setup "
+
Process
.
myUid
());
Shell
.
Sync
.
su
(
"db_setup "
+
Process
.
myUid
());
}
}
}
}
// Not using legacy mode, open the mounted global DB
// Not using legacy mode, open the mounted global DB
...
@@ -183,9 +180,9 @@ public class SuDatabaseHelper {
...
@@ -183,9 +180,9 @@ public class SuDatabaseHelper {
public
void
clearOutdated
()
{
public
void
clearOutdated
()
{
// Clear outdated policies
// Clear outdated policies
mD
b
.
delete
(
POLICY_TABLE
,
Utils
.
fmt
(
"until > 0 AND until < %d"
,
System
.
currentTimeMillis
()
/
1000
),
null
);
d
b
.
delete
(
POLICY_TABLE
,
Utils
.
fmt
(
"until > 0 AND until < %d"
,
System
.
currentTimeMillis
()
/
1000
),
null
);
// Clear outdated logs
// Clear outdated logs
mD
b
.
delete
(
LOG_TABLE
,
Utils
.
fmt
(
"time < %d"
,
System
.
currentTimeMillis
()
-
MagiskManager
.
get
().
suLogTimeout
*
86400000
),
null
);
d
b
.
delete
(
LOG_TABLE
,
Utils
.
fmt
(
"time < %d"
,
System
.
currentTimeMillis
()
-
MagiskManager
.
get
().
suLogTimeout
*
86400000
),
null
);
}
}
public
void
deletePolicy
(
Policy
policy
)
{
public
void
deletePolicy
(
Policy
policy
)
{
...
@@ -193,16 +190,16 @@ public class SuDatabaseHelper {
...
@@ -193,16 +190,16 @@ public class SuDatabaseHelper {
}
}
public
void
deletePolicy
(
String
pkg
)
{
public
void
deletePolicy
(
String
pkg
)
{
mD
b
.
delete
(
POLICY_TABLE
,
"package_name=?"
,
new
String
[]
{
pkg
});
d
b
.
delete
(
POLICY_TABLE
,
"package_name=?"
,
new
String
[]
{
pkg
});
}
}
public
void
deletePolicy
(
int
uid
)
{
public
void
deletePolicy
(
int
uid
)
{
mD
b
.
delete
(
POLICY_TABLE
,
Utils
.
fmt
(
"uid=%d"
,
uid
),
null
);
d
b
.
delete
(
POLICY_TABLE
,
Utils
.
fmt
(
"uid=%d"
,
uid
),
null
);
}
}
public
Policy
getPolicy
(
int
uid
)
{
public
Policy
getPolicy
(
int
uid
)
{
Policy
policy
=
null
;
Policy
policy
=
null
;
try
(
Cursor
c
=
mD
b
.
query
(
POLICY_TABLE
,
null
,
Utils
.
fmt
(
"uid=%d"
,
uid
),
null
,
null
,
null
,
null
))
{
try
(
Cursor
c
=
d
b
.
query
(
POLICY_TABLE
,
null
,
Utils
.
fmt
(
"uid=%d"
,
uid
),
null
,
null
,
null
,
null
))
{
if
(
c
.
moveToNext
())
{
if
(
c
.
moveToNext
())
{
policy
=
new
Policy
(
c
,
pm
);
policy
=
new
Policy
(
c
,
pm
);
}
}
...
@@ -214,15 +211,15 @@ public class SuDatabaseHelper {
...
@@ -214,15 +211,15 @@ public class SuDatabaseHelper {
}
}
public
void
addPolicy
(
Policy
policy
)
{
public
void
addPolicy
(
Policy
policy
)
{
mD
b
.
replace
(
POLICY_TABLE
,
null
,
policy
.
getContentValues
());
d
b
.
replace
(
POLICY_TABLE
,
null
,
policy
.
getContentValues
());
}
}
public
void
updatePolicy
(
Policy
policy
)
{
public
void
updatePolicy
(
Policy
policy
)
{
mD
b
.
update
(
POLICY_TABLE
,
policy
.
getContentValues
(),
Utils
.
fmt
(
"uid=%d"
,
policy
.
uid
),
null
);
d
b
.
update
(
POLICY_TABLE
,
policy
.
getContentValues
(),
Utils
.
fmt
(
"uid=%d"
,
policy
.
uid
),
null
);
}
}
public
List
<
Policy
>
getPolicyList
(
PackageManager
pm
)
{
public
List
<
Policy
>
getPolicyList
(
PackageManager
pm
)
{
try
(
Cursor
c
=
mD
b
.
query
(
POLICY_TABLE
,
null
,
Utils
.
fmt
(
"uid/100000=%d"
,
Const
.
USER_ID
),
try
(
Cursor
c
=
d
b
.
query
(
POLICY_TABLE
,
null
,
Utils
.
fmt
(
"uid/100000=%d"
,
Const
.
USER_ID
),
null
,
null
,
null
,
null
))
{
null
,
null
,
null
,
null
))
{
List
<
Policy
>
ret
=
new
ArrayList
<>(
c
.
getCount
());
List
<
Policy
>
ret
=
new
ArrayList
<>(
c
.
getCount
());
while
(
c
.
moveToNext
())
{
while
(
c
.
moveToNext
())
{
...
@@ -240,7 +237,7 @@ public class SuDatabaseHelper {
...
@@ -240,7 +237,7 @@ public class SuDatabaseHelper {
}
}
public
List
<
List
<
Integer
>>
getLogStructure
()
{
public
List
<
List
<
Integer
>>
getLogStructure
()
{
try
(
Cursor
c
=
mD
b
.
query
(
LOG_TABLE
,
new
String
[]
{
"time"
},
Utils
.
fmt
(
"from_uid/100000=%d"
,
Const
.
USER_ID
),
try
(
Cursor
c
=
d
b
.
query
(
LOG_TABLE
,
new
String
[]
{
"time"
},
Utils
.
fmt
(
"from_uid/100000=%d"
,
Const
.
USER_ID
),
null
,
null
,
null
,
"time DESC"
))
{
null
,
null
,
null
,
"time DESC"
))
{
List
<
List
<
Integer
>>
ret
=
new
ArrayList
<>();
List
<
List
<
Integer
>>
ret
=
new
ArrayList
<>();
List
<
Integer
>
list
=
null
;
List
<
Integer
>
list
=
null
;
...
@@ -260,28 +257,28 @@ public class SuDatabaseHelper {
...
@@ -260,28 +257,28 @@ public class SuDatabaseHelper {
}
}
public
Cursor
getLogCursor
()
{
public
Cursor
getLogCursor
()
{
return
mD
b
.
query
(
LOG_TABLE
,
null
,
Utils
.
fmt
(
"from_uid/100000=%d"
,
Const
.
USER_ID
),
return
d
b
.
query
(
LOG_TABLE
,
null
,
Utils
.
fmt
(
"from_uid/100000=%d"
,
Const
.
USER_ID
),
null
,
null
,
null
,
"time DESC"
);
null
,
null
,
null
,
"time DESC"
);
}
}
public
void
addLog
(
SuLogEntry
log
)
{
public
void
addLog
(
SuLogEntry
log
)
{
mD
b
.
insert
(
LOG_TABLE
,
null
,
log
.
getContentValues
());
d
b
.
insert
(
LOG_TABLE
,
null
,
log
.
getContentValues
());
}
}
public
void
clearLogs
()
{
public
void
clearLogs
()
{
mD
b
.
delete
(
LOG_TABLE
,
null
,
null
);
d
b
.
delete
(
LOG_TABLE
,
null
,
null
);
}
}
public
void
setSettings
(
String
key
,
int
value
)
{
public
void
setSettings
(
String
key
,
int
value
)
{
ContentValues
data
=
new
ContentValues
();
ContentValues
data
=
new
ContentValues
();
data
.
put
(
"key"
,
key
);
data
.
put
(
"key"
,
key
);
data
.
put
(
"value"
,
value
);
data
.
put
(
"value"
,
value
);
mD
b
.
replace
(
SETTINGS_TABLE
,
null
,
data
);
d
b
.
replace
(
SETTINGS_TABLE
,
null
,
data
);
}
}
public
int
getSettings
(
String
key
,
int
defaultValue
)
{
public
int
getSettings
(
String
key
,
int
defaultValue
)
{
int
value
=
defaultValue
;
int
value
=
defaultValue
;
try
(
Cursor
c
=
mD
b
.
query
(
SETTINGS_TABLE
,
null
,
"key=?"
,
new
String
[]
{
key
},
null
,
null
,
null
))
{
try
(
Cursor
c
=
d
b
.
query
(
SETTINGS_TABLE
,
null
,
"key=?"
,
new
String
[]
{
key
},
null
,
null
,
null
))
{
if
(
c
.
moveToNext
())
{
if
(
c
.
moveToNext
())
{
value
=
c
.
getInt
(
c
.
getColumnIndex
(
"value"
));
value
=
c
.
getInt
(
c
.
getColumnIndex
(
"value"
));
}
}
...
@@ -291,18 +288,18 @@ public class SuDatabaseHelper {
...
@@ -291,18 +288,18 @@ public class SuDatabaseHelper {
public
void
setStrings
(
String
key
,
String
value
)
{
public
void
setStrings
(
String
key
,
String
value
)
{
if
(
value
==
null
)
{
if
(
value
==
null
)
{
mD
b
.
delete
(
STRINGS_TABLE
,
"key=?"
,
new
String
[]
{
key
});
d
b
.
delete
(
STRINGS_TABLE
,
"key=?"
,
new
String
[]
{
key
});
}
else
{
}
else
{
ContentValues
data
=
new
ContentValues
();
ContentValues
data
=
new
ContentValues
();
data
.
put
(
"key"
,
key
);
data
.
put
(
"key"
,
key
);
data
.
put
(
"value"
,
value
);
data
.
put
(
"value"
,
value
);
mD
b
.
replace
(
STRINGS_TABLE
,
null
,
data
);
d
b
.
replace
(
STRINGS_TABLE
,
null
,
data
);
}
}
}
}
public
String
getStrings
(
String
key
,
String
defaultValue
)
{
public
String
getStrings
(
String
key
,
String
defaultValue
)
{
String
value
=
defaultValue
;
String
value
=
defaultValue
;
try
(
Cursor
c
=
mD
b
.
query
(
STRINGS_TABLE
,
null
,
"key=?"
,
new
String
[]
{
key
},
null
,
null
,
null
))
{
try
(
Cursor
c
=
d
b
.
query
(
STRINGS_TABLE
,
null
,
"key=?"
,
new
String
[]
{
key
},
null
,
null
,
null
))
{
if
(
c
.
moveToNext
())
{
if
(
c
.
moveToNext
())
{
value
=
c
.
getString
(
c
.
getColumnIndex
(
"value"
));
value
=
c
.
getString
(
c
.
getColumnIndex
(
"value"
));
}
}
...
...
src/main/java/com/topjohnwu/magisk/receivers/PackageReceiver.java
View file @
315fa9d7
...
@@ -20,11 +20,11 @@ public class PackageReceiver extends BroadcastReceiver {
...
@@ -20,11 +20,11 @@ public class PackageReceiver extends BroadcastReceiver {
case
Intent
.
ACTION_PACKAGE_REPLACED
:
case
Intent
.
ACTION_PACKAGE_REPLACED
:
// This will only work pre-O
// This will only work pre-O
if
(
mm
.
prefs
.
getBoolean
(
Const
.
Key
.
SU_REAUTH
,
false
))
{
if
(
mm
.
prefs
.
getBoolean
(
Const
.
Key
.
SU_REAUTH
,
false
))
{
mm
.
su
DB
.
deletePolicy
(
pkg
);
mm
.
m
DB
.
deletePolicy
(
pkg
);
}
}
break
;
break
;
case
Intent
.
ACTION_PACKAGE_FULLY_REMOVED
:
case
Intent
.
ACTION_PACKAGE_FULLY_REMOVED
:
mm
.
su
DB
.
deletePolicy
(
pkg
);
mm
.
m
DB
.
deletePolicy
(
pkg
);
Shell
.
Async
.
su
(
"magiskhide --rm "
+
pkg
);
Shell
.
Async
.
su
(
"magiskhide --rm "
+
pkg
);
break
;
break
;
}
}
...
...
src/main/java/com/topjohnwu/magisk/superuser/RequestActivity.java
View file @
315fa9d7
...
@@ -68,7 +68,7 @@ public class RequestActivity extends Activity {
...
@@ -68,7 +68,7 @@ public class RequestActivity extends Activity {
pm
=
getPackageManager
();
pm
=
getPackageManager
();
mm
=
Utils
.
getMagiskManager
(
this
);
mm
=
Utils
.
getMagiskManager
(
this
);
mm
.
su
DB
.
clearOutdated
();
mm
.
m
DB
.
clearOutdated
();
Intent
intent
=
getIntent
();
Intent
intent
=
getIntent
();
socketPath
=
intent
.
getStringExtra
(
"socket"
);
socketPath
=
intent
.
getStringExtra
(
"socket"
);
...
@@ -233,7 +233,7 @@ public class RequestActivity extends Activity {
...
@@ -233,7 +233,7 @@ public class RequestActivity extends Activity {
policy
.
policy
=
action
;
policy
.
policy
=
action
;
if
(
time
>=
0
)
{
if
(
time
>=
0
)
{
policy
.
until
=
(
time
==
0
)
?
0
:
(
System
.
currentTimeMillis
()
/
1000
+
time
*
60
);
policy
.
until
=
(
time
==
0
)
?
0
:
(
System
.
currentTimeMillis
()
/
1000
+
time
*
60
);
mm
.
su
DB
.
addPolicy
(
policy
);
mm
.
m
DB
.
addPolicy
(
policy
);
}
}
handleAction
();
handleAction
();
}
}
...
@@ -273,7 +273,7 @@ public class RequestActivity extends Activity {
...
@@ -273,7 +273,7 @@ public class RequestActivity extends Activity {
}
}
int
uid
=
payload
.
getAsInteger
(
"uid"
);
int
uid
=
payload
.
getAsInteger
(
"uid"
);
policy
=
mm
.
su
DB
.
getPolicy
(
uid
);
policy
=
mm
.
m
DB
.
getPolicy
(
uid
);
if
(
policy
==
null
)
{
if
(
policy
==
null
)
{
policy
=
new
Policy
(
uid
,
pm
);
policy
=
new
Policy
(
uid
,
pm
);
}
}
...
...
src/main/java/com/topjohnwu/magisk/superuser/SuReceiver.java
View file @
315fa9d7
...
@@ -43,7 +43,7 @@ public class SuReceiver extends BroadcastReceiver {
...
@@ -43,7 +43,7 @@ public class SuReceiver extends BroadcastReceiver {
action
=
intent
.
getStringExtra
(
"action"
);
action
=
intent
.
getStringExtra
(
"action"
);
if
(
action
==
null
)
return
;
if
(
action
==
null
)
return
;
policy
=
mm
.
su
DB
.
getPolicy
(
fromUid
);
policy
=
mm
.
m
DB
.
getPolicy
(
fromUid
);
if
(
policy
==
null
)
{
if
(
policy
==
null
)
{
try
{
try
{
policy
=
new
Policy
(
fromUid
,
context
.
getPackageManager
());
policy
=
new
Policy
(
fromUid
,
context
.
getPackageManager
());
...
@@ -84,7 +84,7 @@ public class SuReceiver extends BroadcastReceiver {
...
@@ -84,7 +84,7 @@ public class SuReceiver extends BroadcastReceiver {
log
.
fromPid
=
pid
;
log
.
fromPid
=
pid
;
log
.
command
=
command
;
log
.
command
=
command
;
log
.
date
=
new
Date
();
log
.
date
=
new
Date
();
mm
.
su
DB
.
addLog
(
log
);
mm
.
m
DB
.
addLog
(
log
);
}
}
}
}
}
}
src/main/res/raw/
su
db.sh
→
src/main/res/raw/
magisk
db.sh
View file @
315fa9d7
su
db_clean
()
{
db_clean
()
{
local
USERID
=
$1
local
USERID
=
$1
local
DIR
=
"/sbin/.core/db-
${
USERID
}
"
local
DIR
=
"/sbin/.core/db-
${
USERID
}
"
umount
-l
/data/user
*
/
*
/
*
/databases/su.db
$DIR
$DIR
/
*
umount
-l
/data/user
*
/
*
/
*
/databases/su.db
$DIR
$DIR
/
*
...
@@ -6,18 +6,18 @@ sudb_clean() {
...
@@ -6,18 +6,18 @@ sudb_clean() {
[
"
$USERID
"
=
"*"
]
&&
rm
-f
/data/adb/magisk.db
[
"
$USERID
"
=
"*"
]
&&
rm
-f
/data/adb/magisk.db
}
}
su
db_init
()
{
db_init
()
{
ADB_CONTEXT
=
`
/system/bin/ls
-dZ
/data/adb |
awk
'{print $1}'
`
ADB_CONTEXT
=
`
/system/bin/ls
-dZ
/data/adb |
awk
'{print $1}'
`
chcon
u:object_r:su_file:s0 /data/adb
chcon
u:object_r:su_file:s0 /data/adb
chmod
777 /data/adb
chmod
777 /data/adb
}
}
su
db_restore
()
{
db_restore
()
{
chcon
$ADB_CONTEXT
/data/adb
chcon
$ADB_CONTEXT
/data/adb
chmod
700 /data/adb
chmod
700 /data/adb
}
}
su
db_setup
()
{
db_setup
()
{
local
USER
=
$1
local
USER
=
$1
local
USERID
=
$((
$USER
/
100000
))
local
USERID
=
$((
$USER
/
100000
))
local
DIR
=
/sbin/.core/db-
${
USERID
}
local
DIR
=
/sbin/.core/db-
${
USERID
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment