From 100155a310fbb5028fc48e359bdfb7c4d3531843 Mon Sep 17 00:00:00 2001 From: Chia-chi Yeh Date: Sun, 3 Jul 2011 16:52:38 -0700 Subject: VPN: convert prepare() into a form which helps solve race conditions. When someone tries to revoke packageA, it is possible that packageA is already revoked by packageB. In this case packageB should not be revoked, and the new prepare() can help solve this problem. Change-Id: Iee056a191dd99467b8ad1b5379a17b02d404bad1 --- .../VpnDialogs/src/com/android/vpndialogs/ConfirmDialog.java | 11 +++++------ .../VpnDialogs/src/com/android/vpndialogs/ManageDialog.java | 2 +- 2 files changed, 6 insertions(+), 7 deletions(-) (limited to 'packages/VpnDialogs/src/com/android/vpndialogs') diff --git a/packages/VpnDialogs/src/com/android/vpndialogs/ConfirmDialog.java b/packages/VpnDialogs/src/com/android/vpndialogs/ConfirmDialog.java index c54e719..c7b4a5f 100644 --- a/packages/VpnDialogs/src/com/android/vpndialogs/ConfirmDialog.java +++ b/packages/VpnDialogs/src/com/android/vpndialogs/ConfirmDialog.java @@ -36,7 +36,7 @@ public class ConfirmDialog extends Activity implements CompoundButton.OnCheckedC DialogInterface.OnClickListener, DialogInterface.OnDismissListener { private static final String TAG = "VpnConfirm"; - private String mPackageName; + private String mPackage; private IConnectivityManager mService; @@ -47,19 +47,19 @@ public class ConfirmDialog extends Activity implements CompoundButton.OnCheckedC protected void onResume() { super.onResume(); try { - mPackageName = getCallingPackage(); + mPackage = getCallingPackage(); mService = IConnectivityManager.Stub.asInterface( ServiceManager.getService(Context.CONNECTIVITY_SERVICE)); - if (mPackageName.equals(mService.prepareVpn(null))) { + if (mService.prepareVpn(mPackage, null)) { setResult(RESULT_OK); finish(); return; } PackageManager pm = getPackageManager(); - ApplicationInfo app = pm.getApplicationInfo(mPackageName, 0); + ApplicationInfo app = pm.getApplicationInfo(mPackage, 0); View view = View.inflate(this, R.layout.confirm, null); ((ImageView) view.findViewById(R.id.icon)).setImageDrawable(app.loadIcon(pm)); @@ -103,8 +103,7 @@ public class ConfirmDialog extends Activity implements CompoundButton.OnCheckedC @Override public void onClick(DialogInterface dialog, int which) { try { - if (which == AlertDialog.BUTTON_POSITIVE && - mPackageName.equals(mService.prepareVpn(mPackageName))) { + if (which == AlertDialog.BUTTON_POSITIVE && mService.prepareVpn(null, mPackage)) { setResult(RESULT_OK); } } catch (Exception e) { diff --git a/packages/VpnDialogs/src/com/android/vpndialogs/ManageDialog.java b/packages/VpnDialogs/src/com/android/vpndialogs/ManageDialog.java index 5559c3d..21e916b 100644 --- a/packages/VpnDialogs/src/com/android/vpndialogs/ManageDialog.java +++ b/packages/VpnDialogs/src/com/android/vpndialogs/ManageDialog.java @@ -125,7 +125,7 @@ public class ManageDialog extends Activity implements Handler.Callback, if (which == AlertDialog.BUTTON_POSITIVE) { mConfig.configureIntent.send(); } else if (which == AlertDialog.BUTTON_NEUTRAL) { - mService.prepareVpn(VpnConfig.LEGACY_VPN); + mService.prepareVpn(mConfig.packagz, VpnConfig.LEGACY_VPN); } } catch (Exception e) { Log.e(TAG, "onClick", e); -- cgit v1.1