Method to check for privleged permissions via IPC

This commit is contained in:
Dominik Schürmann 2015-08-26 22:27:31 +02:00
parent 85c8e7035d
commit 976d06ea1a
2 changed files with 28 additions and 8 deletions

View File

@ -19,7 +19,10 @@
package org.fdroid.fdroid.privileged; package org.fdroid.fdroid.privileged;
import android.*;
import android.Manifest;
import android.app.Service; import android.app.Service;
import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.pm.IPackageDeleteObserver; import android.content.pm.IPackageDeleteObserver;
import android.content.pm.IPackageInstallObserver; import android.content.pm.IPackageInstallObserver;
@ -41,6 +44,17 @@ public class PrivilegedService extends Service {
private Method mInstallMethod; private Method mInstallMethod;
private Method mDeleteMethod; 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, private void installPackageImpl(Uri packageURI, int flags, String installerPackageName,
final IPrivilegedCallback callback) { final IPrivilegedCallback callback) {
@ -101,6 +115,11 @@ public class PrivilegedService extends Service {
} }
private final IPrivilegedService.Stub mBinder = new IPrivilegedService.Stub() { private final IPrivilegedService.Stub mBinder = new IPrivilegedService.Stub() {
@Override
public boolean hasPrivilegedPermissions() {
return hasPrivilegedPermissionsImpl();
}
@Override @Override
public void installPackage(Uri packageURI, int flags, String installerPackageName, public void installPackage(Uri packageURI, int flags, String installerPackageName,
IPrivilegedCallback callback) { IPrivilegedCallback callback) {

View File

@ -21,13 +21,13 @@ package org.fdroid.fdroid.privileged;
import org.fdroid.fdroid.privileged.IPrivilegedCallback; import org.fdroid.fdroid.privileged.IPrivilegedCallback;
/** interface IPrivilegedService {
* Asynchronous (oneway) IPC calls!
*/ boolean hasPrivilegedPermissions();
oneway interface IPrivilegedService {
/** /**
* 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 * 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 * 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 * @param callback An callback to get notified when the package installation is
* complete. * 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); 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 * 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 * 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 * @param callback An callback to get notified when the package deletion is
* complete. * complete.
*/ */
void deletePackage(in String packageName, in int flags, in IPrivilegedCallback callback); oneway void deletePackage(in String packageName, in int flags, in IPrivilegedCallback callback);
} }