Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 519b5893 authored by Todd Kennedy's avatar Todd Kennedy
Browse files

resolve merge conflicts of d22603eb to master

Test: I solemnly swear I tested this conflict resolution.
Change-Id: Iab4443f6a8b996ea9f28f4e68c6ec3bb708526e6
parents fcd086e5 d22603eb
Loading
Loading
Loading
Loading
+20 −0
Original line number Original line Diff line number Diff line
@@ -141,6 +141,7 @@ public class SystemConfig {




    final ArrayMap<String, ArraySet<String>> mPrivAppPermissions = new ArrayMap<>();
    final ArrayMap<String, ArraySet<String>> mPrivAppPermissions = new ArrayMap<>();
    final ArrayMap<String, ArraySet<String>> mPrivAppDenyPermissions = new ArrayMap<>();


    public static SystemConfig getInstance() {
    public static SystemConfig getInstance() {
        synchronized (SystemConfig.class) {
        synchronized (SystemConfig.class) {
@@ -219,6 +220,10 @@ public class SystemConfig {
        return mPrivAppPermissions.get(packageName);
        return mPrivAppPermissions.get(packageName);
    }
    }


    public ArraySet<String> getPrivAppDenyPermissions(String packageName) {
        return mPrivAppDenyPermissions.get(packageName);
    }

    SystemConfig() {
    SystemConfig() {
        // Read configuration from system
        // Read configuration from system
        readPermissions(Environment.buildPath(
        readPermissions(Environment.buildPath(
@@ -660,6 +665,7 @@ public class SystemConfig {
        if (permissions == null) {
        if (permissions == null) {
            permissions = new ArraySet<>();
            permissions = new ArraySet<>();
        }
        }
        ArraySet<String> denyPermissions = mPrivAppDenyPermissions.get(packageName);
        int depth = parser.getDepth();
        int depth = parser.getDepth();
        while (XmlUtils.nextElementWithin(parser, depth)) {
        while (XmlUtils.nextElementWithin(parser, depth)) {
            String name = parser.getName();
            String name = parser.getName();
@@ -671,8 +677,22 @@ public class SystemConfig {
                    continue;
                    continue;
                }
                }
                permissions.add(permName);
                permissions.add(permName);
            } else if ("deny-permission".equals(name)) {
                String permName = parser.getAttributeValue(null, "name");
                if (TextUtils.isEmpty(permName)) {
                    Slog.w(TAG, "name is required for <deny-permission> in "
                            + parser.getPositionDescription());
                    continue;
                }
                if (denyPermissions == null) {
                    denyPermissions = new ArraySet<>();
                }
                denyPermissions.add(permName);
            }
            }
        }
        }
        mPrivAppPermissions.put(packageName, permissions);
        mPrivAppPermissions.put(packageName, permissions);
        if (denyPermissions != null) {
            mPrivAppDenyPermissions.put(packageName, denyPermissions);
        }
    }
    }
}
}
+12 −3
Original line number Original line Diff line number Diff line
@@ -13213,10 +13213,19 @@ public class PackageManagerService extends IPackageManager.Stub
                        + pkg.packageName + " - not in privapp-permissions whitelist");
                        + pkg.packageName + " - not in privapp-permissions whitelist");
                // Only report violations for apps on system image
                // Only report violations for apps on system image
                if (!mSystemReady && !pkg.isUpdatedSystemApp()) {
                if (!mSystemReady && !pkg.isUpdatedSystemApp()) {
                    // it's only a reportable violation if the permission isn't explicitly denied
                    final ArraySet<String> deniedPermissions = SystemConfig.getInstance()
                            .getPrivAppDenyPermissions(pkg.packageName);
                    final boolean permissionViolation =
                            deniedPermissions == null || !deniedPermissions.contains(perm);
                    if (permissionViolation) {
                        if (mPrivappPermissionsViolations == null) {
                        if (mPrivappPermissionsViolations == null) {
                            mPrivappPermissionsViolations = new ArraySet<>();
                            mPrivappPermissionsViolations = new ArraySet<>();
                        }
                        }
                        mPrivappPermissionsViolations.add(pkg.packageName + ": " + perm);
                        mPrivappPermissionsViolations.add(pkg.packageName + ": " + perm);
                    } else {
                        return false;
                    }
                }
                }
                if (RoSystemProperties.CONTROL_PRIVAPP_PERMISSIONS_ENFORCE) {
                if (RoSystemProperties.CONTROL_PRIVAPP_PERMISSIONS_ENFORCE) {
                    return false;
                    return false;
+15 −0
Original line number Original line Diff line number Diff line
@@ -148,6 +148,8 @@ class PackageManagerShellCommand extends ShellCommand {
                    return runSetHomeActivity();
                    return runSetHomeActivity();
                case "get-privapp-permissions":
                case "get-privapp-permissions":
                    return runGetPrivappPermissions();
                    return runGetPrivappPermissions();
                case "get-privapp-deny-permissions":
                    return runGetPrivappDenyPermissions();
                case "get-instantapp-resolver":
                case "get-instantapp-resolver":
                    return runGetInstantAppResolver();
                    return runGetInstantAppResolver();
                case "has-feature":
                case "has-feature":
@@ -1293,6 +1295,19 @@ class PackageManagerShellCommand extends ShellCommand {
        return 0;
        return 0;
    }
    }


    private int runGetPrivappDenyPermissions() {
        final String pkg = getNextArg();
        if (pkg == null) {
            System.err.println("Error: no package specified.");
            return 1;
        }
        ArraySet<String> privAppDenyPermissions =
                SystemConfig.getInstance().getPrivAppDenyPermissions(pkg);
        getOutPrintWriter().println(privAppDenyPermissions == null
                ? "{}" : privAppDenyPermissions.toString());
        return 0;
    }

    private int runGetInstantAppResolver() {
    private int runGetInstantAppResolver() {
        final PrintWriter pw = getOutPrintWriter();
        final PrintWriter pw = getOutPrintWriter();
        try {
        try {