aboutsummaryrefslogtreecommitdiffstats
path: root/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/crypto_provider
diff options
context:
space:
mode:
authorDominik Schürmann <dominik@dominikschuermann.de>2013-06-17 16:59:27 +0200
committerDominik Schürmann <dominik@dominikschuermann.de>2013-06-17 16:59:27 +0200
commit0f3e78ebf7d0c71a18fef55e543c5b54a066735b (patch)
treee88750b6b8b8efe0051d67e9b0db49d66d43f37d /OpenPGP-Keychain/src/org/sufficientlysecure/keychain/crypto_provider
parent1b29330f18e2026d15fc6f28ac34624c4abd4b32 (diff)
downloadopen-keychain-0f3e78ebf7d0c71a18fef55e543c5b54a066735b.tar.gz
open-keychain-0f3e78ebf7d0c71a18fef55e543c5b54a066735b.tar.bz2
open-keychain-0f3e78ebf7d0c71a18fef55e543c5b54a066735b.zip
Possible to add allowed packages
Diffstat (limited to 'OpenPGP-Keychain/src/org/sufficientlysecure/keychain/crypto_provider')
-rw-r--r--OpenPGP-Keychain/src/org/sufficientlysecure/keychain/crypto_provider/CryptoService.java45
-rw-r--r--OpenPGP-Keychain/src/org/sufficientlysecure/keychain/crypto_provider/ServiceActivity.java3
2 files changed, 32 insertions, 16 deletions
diff --git a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/crypto_provider/CryptoService.java b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/crypto_provider/CryptoService.java
index 3748ef521..a70641b58 100644
--- a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/crypto_provider/CryptoService.java
+++ b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/crypto_provider/CryptoService.java
@@ -58,8 +58,6 @@ public class CryptoService extends Service {
private ArrayList<String> mAllowedPackages;
- // RemoteCallbackList<IInterface>
-
public static final String ACTION_SERVICE_ACTIVITY = "org.sufficientlysecure.keychain.crypto_provider.IServiceActivityCallback";
@Override
@@ -218,12 +216,13 @@ public class CryptoService extends Service {
@Override
public void register(boolean success, String packageName) throws RemoteException {
+
if (success) {
// reload allowed packages
mAllowedPackages = ProviderHelper.getCryptoConsumers(mContext);
// resume threads
- if (isCallerAllowed()) {
+ if (isPackageAllowed(packageName)) {
mThreadPool.resume();
} else {
// TODO: should not happen?
@@ -248,8 +247,15 @@ public class CryptoService extends Service {
Log.d(Constants.TAG, "Enqueued runnable…");
} else {
- Log.e(Constants.TAG, "Not allowed to use service! Starting register with activity!");
- pauseQueueAndStartServiceActivity(ServiceActivity.ACTION_REGISTER, null);
+ String[] callingPackages = getPackageManager()
+ .getPackagesForUid(Binder.getCallingUid());
+
+ Log.e(Constants.TAG, "Not allowed to use service! Starting activity for registration!");
+ Bundle extras = new Bundle();
+ // TODO: currently simply uses first entry
+ extras.putString(ServiceActivity.EXTRA_PACKAGE_NAME, callingPackages[0]);
+ pauseQueueAndStartServiceActivity(ServiceActivity.ACTION_REGISTER, extras);
+
mThreadPool.execute(r);
Log.d(Constants.TAG, "Enqueued runnable…");
@@ -268,24 +274,33 @@ public class CryptoService extends Service {
// is calling package allowed to use this service?
for (int i = 0; i < callingPackages.length; i++) {
String currentPkg = callingPackages[i];
- Log.d(Constants.TAG, "Caller packageName: " + currentPkg);
-
- // check if package is allowed to use our service
- if (mAllowedPackages.contains(currentPkg)) {
- Log.d(Constants.TAG, "Caller is allowed! packageName: " + currentPkg);
-
- return true;
- } else if (Constants.PACKAGE_NAME.equals(currentPkg)) {
- Log.d(Constants.TAG, "Caller is OpenPGP Keychain! -> allowed!");
+ if (isPackageAllowed(currentPkg)) {
return true;
}
}
-
+
Log.d(Constants.TAG, "Caller is NOT allowed!");
return false;
}
+ private boolean isPackageAllowed(String packageName) {
+ Log.d(Constants.TAG, "packageName: " + packageName);
+
+ // check if package is allowed to use our service
+ if (mAllowedPackages.contains(packageName)) {
+ Log.d(Constants.TAG, "Package is allowed! packageName: " + packageName);
+
+ return true;
+ } else if (Constants.PACKAGE_NAME.equals(packageName)) {
+ Log.d(Constants.TAG, "Package is OpenPGP Keychain! -> allowed!");
+
+ return true;
+ }
+
+ return false;
+ }
+
private void pauseQueueAndStartServiceActivity(String action, Bundle extras) {
mThreadPool.pause();
diff --git a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/crypto_provider/ServiceActivity.java b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/crypto_provider/ServiceActivity.java
index 9f68aab97..7efce85c7 100644
--- a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/crypto_provider/ServiceActivity.java
+++ b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/crypto_provider/ServiceActivity.java
@@ -19,6 +19,7 @@ package org.sufficientlysecure.keychain.crypto_provider;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.helper.PgpMain;
+import org.sufficientlysecure.keychain.provider.ProviderHelper;
import org.sufficientlysecure.keychain.ui.dialog.PassphraseDialogFragment;
import org.sufficientlysecure.keychain.util.Log;
@@ -136,7 +137,7 @@ public class ServiceActivity extends SherlockFragmentActivity {
@Override
public void onClick(View v) {
- // ProviderHelper.addCryptoConsumer(RegisterActivity.this, callingPackageName);
+ ProviderHelper.addCryptoConsumer(ServiceActivity.this, packageName);
// Intent data = new Intent();
setResult(RESULT_OK);