[core] Grant manager permission

This commit is contained in:
LoveSy 2021-02-18 04:40:30 +08:00 committed by tehcneko
parent aae69dcf5c
commit 4d334e9d52
5 changed files with 29 additions and 1 deletions

View File

@ -36,7 +36,7 @@ public class ModuleLogger {
public static void initLogger(ParcelFileDescriptor fileDescriptor) { public static void initLogger(ParcelFileDescriptor fileDescriptor) {
if (fd == -1 && fileDescriptor!= null) { if (fd == -1 && fileDescriptor!= null) {
fd = fileDescriptor.getFd(); fd = fileDescriptor.detachFd();
} }
} }

View File

@ -126,6 +126,7 @@ public class ConfigManager {
public synchronized void updateManager(@NonNull String packageName) { public synchronized void updateManager(@NonNull String packageName) {
writeText(managerPath, packageName); writeText(managerPath, packageName);
manager = packageName;
updateManager(); updateManager();
} }
@ -411,4 +412,12 @@ public class ConfigManager {
public String getPrefsPath(String fileName) { public String getPrefsPath(String fileName) {
return miscPath + File.separator + "prefs" + File.separator + fileName; return miscPath + File.separator + "prefs" + File.separator + fileName;
} }
public void grantManagerPermission() {
try {
PackageService.grantRuntimePermission(manager, "android.permission.INTERACT_ACROSS_USERS", 0);
} catch (RemoteException e) {
Log.e(TAG, Log.getStackTraceString(e));
}
}
} }

View File

@ -37,6 +37,7 @@ public class LSPosedService extends ILSPosedService.Stub {
String packageName = (uri != null) ? uri.getSchemeSpecificPart() : null; String packageName = (uri != null) ? uri.getSchemeSpecificPart() : null;
if (packageName == null) { if (packageName == null) {
Log.e(TAG, "Package name is null"); Log.e(TAG, "Package name is null");
return;
} }
int uid = intent.getIntExtra(Intent.EXTRA_UID, -1); int uid = intent.getIntExtra(Intent.EXTRA_UID, -1);
boolean replacing = intent.getBooleanExtra(Intent.EXTRA_REPLACING, false); boolean replacing = intent.getBooleanExtra(Intent.EXTRA_REPLACING, false);
@ -51,6 +52,13 @@ public class LSPosedService extends ILSPosedService.Stub {
if (isXposedModule) { if (isXposedModule) {
ConfigManager.getInstance().updateModuleApkPath(packageName, pkgInfo.applicationInfo.sourceDir); ConfigManager.getInstance().updateModuleApkPath(packageName, pkgInfo.applicationInfo.sourceDir);
} }
if (!intent.getAction().equals(Intent.ACTION_PACKAGE_REMOVED) && uid > 0 && ConfigManager.getInstance().isManager(packageName)) {
try {
ConfigManager.getInstance().grantManagerPermission();
} catch (Throwable e) {
Log.e(TAG, Log.getStackTraceString(e));
}
}
} }
} }

View File

@ -43,4 +43,9 @@ public class PackageService {
} }
return new ParceledListSlice<>(res); return new ParceledListSlice<>(res);
} }
public static void grantRuntimePermission(String packageName, String permissionName, int userId) throws RemoteException {
IPackageManager pm = getPackageManager();
pm.grantRuntimePermission(packageName, permissionName, userId);
}
} }

View File

@ -55,6 +55,12 @@ public class ServiceManager {
} }
}); });
try {
ConfigManager.getInstance().grantManagerPermission();
} catch (Throwable e) {
Log.e(TAG, Log.getStackTraceString(e));
}
Looper.loop(); Looper.loop();
Log.i(TAG, "server exited"); Log.i(TAG, "server exited");