Only return password for account session flow if the caller is signed
with system key and have get_password permission.
Bug: 30455516
Change-Id: I78484c59e4de1dff685ab91a0a8e7a756fffd9bf
diff --git a/services/core/java/com/android/server/accounts/AccountManagerService.java b/services/core/java/com/android/server/accounts/AccountManagerService.java
index 31f14e7..53e6a55 100644
--- a/services/core/java/com/android/server/accounts/AccountManagerService.java
+++ b/services/core/java/com/android/server/accounts/AccountManagerService.java
@@ -3142,10 +3142,9 @@
boolean isPasswordForwardingAllowed = isPermitted(
callerPkg, uid, Manifest.permission.GET_PASSWORD);
- int usrId = UserHandle.getCallingUserId();
long identityToken = clearCallingIdentity();
try {
- UserAccounts accounts = getUserAccounts(usrId);
+ UserAccounts accounts = getUserAccounts(userId);
logRecordWithUid(accounts, DebugDbHelper.ACTION_CALLED_START_ACCOUNT_ADD,
TABLE_ACCOUNTS, uid);
new StartAccountSession(
@@ -3206,10 +3205,6 @@
checkKeyIntent(
Binder.getCallingUid(),
intent);
- // Omit passwords if the caller isn't permitted to see them.
- if (!mIsPasswordForwardingAllowed) {
- result.remove(AccountManager.KEY_PASSWORD);
- }
}
IAccountManagerResponse response;
if (mExpectActivityLaunch && result != null
@@ -3239,6 +3234,11 @@
return;
}
+ // Omit passwords if the caller isn't permitted to see them.
+ if (!mIsPasswordForwardingAllowed) {
+ result.remove(AccountManager.KEY_PASSWORD);
+ }
+
// Strip auth token from result.
result.remove(AccountManager.KEY_AUTHTOKEN);