From 976d06ea1aee603e254a0592903716a77d8aa224 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Sch=C3=BCrmann?= Date: Wed, 26 Aug 2015 22:27:31 +0200 Subject: [PATCH] Method to check for privleged permissions via IPC --- .../fdroid/privileged/PrivilegedService.java | 19 +++++++++++++++++++ .../fdroid/privileged/IPrivilegedService.aidl | 17 +++++++++-------- 2 files changed, 28 insertions(+), 8 deletions(-) diff --git a/F-Droid-Privileged/src/main/java/org/fdroid/fdroid/privileged/PrivilegedService.java b/F-Droid-Privileged/src/main/java/org/fdroid/fdroid/privileged/PrivilegedService.java index d717d4b8d..ae5d95e53 100644 --- a/F-Droid-Privileged/src/main/java/org/fdroid/fdroid/privileged/PrivilegedService.java +++ b/F-Droid-Privileged/src/main/java/org/fdroid/fdroid/privileged/PrivilegedService.java @@ -19,7 +19,10 @@ package org.fdroid.fdroid.privileged; +import android.*; +import android.Manifest; import android.app.Service; +import android.content.Context; import android.content.Intent; import android.content.pm.IPackageDeleteObserver; import android.content.pm.IPackageInstallObserver; @@ -41,6 +44,17 @@ public class PrivilegedService extends Service { private Method mInstallMethod; private Method mDeleteMethod; + private boolean hasPrivilegedPermissionsImpl() { + boolean hasInstallPermission = + (getPackageManager().checkPermission(Manifest.permission.INSTALL_PACKAGES, getPackageName()) + == PackageManager.PERMISSION_GRANTED); + boolean hasDeletePermission = + (getPackageManager().checkPermission(Manifest.permission.DELETE_PACKAGES, getPackageName()) + == PackageManager.PERMISSION_GRANTED); + + return (hasInstallPermission && hasDeletePermission); + } + private void installPackageImpl(Uri packageURI, int flags, String installerPackageName, final IPrivilegedCallback callback) { @@ -101,6 +115,11 @@ public class PrivilegedService extends Service { } private final IPrivilegedService.Stub mBinder = new IPrivilegedService.Stub() { + @Override + public boolean hasPrivilegedPermissions() { + return hasPrivilegedPermissionsImpl(); + } + @Override public void installPackage(Uri packageURI, int flags, String installerPackageName, IPrivilegedCallback callback) { diff --git a/privileged-api-lib/src/main/aidl/org/fdroid/fdroid/privileged/IPrivilegedService.aidl b/privileged-api-lib/src/main/aidl/org/fdroid/fdroid/privileged/IPrivilegedService.aidl index b5b74ff4b..5c1724b1d 100644 --- a/privileged-api-lib/src/main/aidl/org/fdroid/fdroid/privileged/IPrivilegedService.aidl +++ b/privileged-api-lib/src/main/aidl/org/fdroid/fdroid/privileged/IPrivilegedService.aidl @@ -21,13 +21,13 @@ package org.fdroid.fdroid.privileged; import org.fdroid.fdroid.privileged.IPrivilegedCallback; -/** - * Asynchronous (oneway) IPC calls! - */ -oneway interface IPrivilegedService { +interface IPrivilegedService { + + boolean hasPrivilegedPermissions(); /** - * Docs based on PackageManager.installPackage() + * - Docs based on PackageManager.installPackage() + * - Asynchronous (oneway) IPC calls! * * Install a package. Since this may take a little while, the result will * be posted back to the given callback. An installation will fail if the @@ -43,12 +43,13 @@ oneway interface IPrivilegedService { * @param callback An callback to get notified when the package installation is * complete. */ - void installPackage(in Uri packageURI, in int flags, in String installerPackageName, + oneway void installPackage(in Uri packageURI, in int flags, in String installerPackageName, in IPrivilegedCallback callback); /** - * Docs based on PackageManager.deletePackage() + * - Docs based on PackageManager.deletePackage() + * - Asynchronous (oneway) IPC calls! * * Attempts to delete a package. Since this may take a little while, the result will * be posted back to the given observer. A deletion will fail if the @@ -60,6 +61,6 @@ oneway interface IPrivilegedService { * @param callback An callback to get notified when the package deletion is * complete. */ - void deletePackage(in String packageName, in int flags, in IPrivilegedCallback callback); + oneway void deletePackage(in String packageName, in int flags, in IPrivilegedCallback callback); } \ No newline at end of file