Merge "Use android as packageName instead of null for methods used by system to fetch accounts." into tm-qpr-dev

This commit is contained in:
TreeHugger Robot
2022-11-15 00:52:04 +00:00
committed by Android (Google) Code Review
2 changed files with 29 additions and 17 deletions

View File

@@ -528,7 +528,7 @@ public class AccountManagerService
private Map<Account, Integer> getAccountsAndVisibilityForPackage(String packageName, private Map<Account, Integer> getAccountsAndVisibilityForPackage(String packageName,
List<String> accountTypes, Integer callingUid, UserAccounts accounts) { List<String> accountTypes, Integer callingUid, UserAccounts accounts) {
if (!packageExistsForUser(packageName, accounts.userId)) { if (!packageExistsForUser(packageName, accounts.userId)) {
Log.d(TAG, "Package not found " + packageName); Log.w(TAG, "getAccountsAndVisibilityForPackage#Package not found " + packageName);
return new LinkedHashMap<>(); return new LinkedHashMap<>();
} }
@@ -677,7 +677,7 @@ public class AccountManagerService
restoreCallingIdentity(identityToken); restoreCallingIdentity(identityToken);
} }
} catch (NameNotFoundException e) { } catch (NameNotFoundException e) {
Log.d(TAG, "Package not found " + e.getMessage()); Log.w(TAG, "resolveAccountVisibility#Package not found " + e.getMessage());
return AccountManager.VISIBILITY_NOT_VISIBLE; return AccountManager.VISIBILITY_NOT_VISIBLE;
} }
@@ -756,7 +756,7 @@ public class AccountManagerService
} }
return true; return true;
} catch (NameNotFoundException e) { } catch (NameNotFoundException e) {
Log.d(TAG, "Package not found " + e.getMessage()); Log.w(TAG, "isPreOApplication#Package not found " + e.getMessage());
return true; return true;
} }
} }
@@ -4063,7 +4063,7 @@ public class AccountManagerService
int uid = mPackageManager.getPackageUidAsUser(packageName, userId); int uid = mPackageManager.getPackageUidAsUser(packageName, userId);
return hasAccountAccess(account, packageName, uid); return hasAccountAccess(account, packageName, uid);
} catch (NameNotFoundException e) { } catch (NameNotFoundException e) {
Log.d(TAG, "Package not found " + e.getMessage()); Log.w(TAG, "hasAccountAccess#Package not found " + e.getMessage());
return false; return false;
} }
} }
@@ -4195,7 +4195,7 @@ public class AccountManagerService
} }
final long token = Binder.clearCallingIdentity(); final long token = Binder.clearCallingIdentity();
try { try {
AccountAndUser[] allAccounts = getAllAccounts(); AccountAndUser[] allAccounts = getAllAccountsForSystemProcess();
for (int i = allAccounts.length - 1; i >= 0; i--) { for (int i = allAccounts.length - 1; i >= 0; i--) {
if (allAccounts[i].account.equals(account)) { if (allAccounts[i].account.equals(account)) {
return true; return true;
@@ -4345,10 +4345,11 @@ public class AccountManagerService
/** /**
* Returns accounts for all running users, ignores visibility values. * Returns accounts for all running users, ignores visibility values.
* *
* Should only be called by System process.
* @hide * @hide
*/ */
@NonNull @NonNull
public AccountAndUser[] getRunningAccounts() { public AccountAndUser[] getRunningAccountsForSystem() {
final int[] runningUserIds; final int[] runningUserIds;
try { try {
runningUserIds = ActivityManager.getService().getRunningUserIds(); runningUserIds = ActivityManager.getService().getRunningUserIds();
@@ -4356,26 +4357,34 @@ public class AccountManagerService
// Running in system_server; should never happen // Running in system_server; should never happen
throw new RuntimeException(e); throw new RuntimeException(e);
} }
return getAccounts(runningUserIds); return getAccountsForSystem(runningUserIds);
} }
/** /**
* Returns accounts for all users, ignores visibility values. * Returns accounts for all users, ignores visibility values.
* *
* Should only be called by system process
*
* @hide * @hide
*/ */
@NonNull @NonNull
public AccountAndUser[] getAllAccounts() { public AccountAndUser[] getAllAccountsForSystemProcess() {
final List<UserInfo> users = getUserManager().getAliveUsers(); final List<UserInfo> users = getUserManager().getAliveUsers();
final int[] userIds = new int[users.size()]; final int[] userIds = new int[users.size()];
for (int i = 0; i < userIds.length; i++) { for (int i = 0; i < userIds.length; i++) {
userIds[i] = users.get(i).id; userIds[i] = users.get(i).id;
} }
return getAccounts(userIds); return getAccountsForSystem(userIds);
} }
/**
* Returns all accounts for the given user, ignores all visibility checks.
* This should only be called by system process.
*
* @hide
*/
@NonNull @NonNull
private AccountAndUser[] getAccounts(int[] userIds) { private AccountAndUser[] getAccountsForSystem(int[] userIds) {
final ArrayList<AccountAndUser> runningAccounts = Lists.newArrayList(); final ArrayList<AccountAndUser> runningAccounts = Lists.newArrayList();
for (int userId : userIds) { for (int userId : userIds) {
UserAccounts userAccounts = getUserAccounts(userId); UserAccounts userAccounts = getUserAccounts(userId);
@@ -4384,7 +4393,7 @@ public class AccountManagerService
userAccounts, userAccounts,
null /* type */, null /* type */,
Binder.getCallingUid(), Binder.getCallingUid(),
null /* packageName */, "android"/* packageName */,
false /* include managed not visible*/); false /* include managed not visible*/);
for (Account account : accounts) { for (Account account : accounts) {
runningAccounts.add(new AccountAndUser(account, userId)); runningAccounts.add(new AccountAndUser(account, userId));
@@ -5355,7 +5364,7 @@ public class AccountManagerService
} }
} else { } else {
Account[] accounts = getAccountsFromCache(userAccounts, null /* type */, Account[] accounts = getAccountsFromCache(userAccounts, null /* type */,
Process.SYSTEM_UID, null /* packageName */, false); Process.SYSTEM_UID, "android" /* packageName */, false);
fout.println("Accounts: " + accounts.length); fout.println("Accounts: " + accounts.length);
for (Account account : accounts) { for (Account account : accounts) {
fout.println(" " + account.toString()); fout.println(" " + account.toString());
@@ -5550,7 +5559,7 @@ public class AccountManagerService
return true; return true;
} }
} catch (PackageManager.NameNotFoundException e) { } catch (PackageManager.NameNotFoundException e) {
Log.d(TAG, "Package not found " + e.getMessage()); Log.w(TAG, "isPrivileged#Package not found " + e.getMessage());
} }
} }
} finally { } finally {
@@ -6074,7 +6083,7 @@ public class AccountManagerService
} }
} }
} catch (NameNotFoundException e) { } catch (NameNotFoundException e) {
Log.d(TAG, "Package not found " + e.getMessage()); Log.w(TAG, "filterSharedAccounts#Package not found " + e.getMessage());
} }
Map<Account, Integer> filtered = new LinkedHashMap<>(); Map<Account, Integer> filtered = new LinkedHashMap<>();
for (Map.Entry<Account, Integer> entry : unfiltered.entrySet()) { for (Map.Entry<Account, Integer> entry : unfiltered.entrySet()) {

View File

@@ -2215,7 +2215,8 @@ public class SyncManager {
pw.print("Storage low: "); pw.println(storageLowIntent != null); pw.print("Storage low: "); pw.println(storageLowIntent != null);
pw.print("Clock valid: "); pw.println(mSyncStorageEngine.isClockValid()); pw.print("Clock valid: "); pw.println(mSyncStorageEngine.isClockValid());
final AccountAndUser[] accounts = AccountManagerService.getSingleton().getAllAccounts(); final AccountAndUser[] accounts =
AccountManagerService.getSingleton().getAllAccountsForSystemProcess();
pw.print("Accounts: "); pw.print("Accounts: ");
if (accounts != INITIAL_ACCOUNTS_ARRAY) { if (accounts != INITIAL_ACCOUNTS_ARRAY) {
@@ -3274,7 +3275,8 @@ public class SyncManager {
private void updateRunningAccountsH(EndPoint syncTargets) { private void updateRunningAccountsH(EndPoint syncTargets) {
synchronized (mAccountsLock) { synchronized (mAccountsLock) {
AccountAndUser[] oldAccounts = mRunningAccounts; AccountAndUser[] oldAccounts = mRunningAccounts;
mRunningAccounts = AccountManagerService.getSingleton().getRunningAccounts(); mRunningAccounts =
AccountManagerService.getSingleton().getRunningAccountsForSystem();
if (Log.isLoggable(TAG, Log.VERBOSE)) { if (Log.isLoggable(TAG, Log.VERBOSE)) {
Slog.v(TAG, "Accounts list: "); Slog.v(TAG, "Accounts list: ");
for (AccountAndUser acc : mRunningAccounts) { for (AccountAndUser acc : mRunningAccounts) {
@@ -3316,7 +3318,8 @@ public class SyncManager {
} }
// Cancel all jobs from non-existent accounts. // Cancel all jobs from non-existent accounts.
AccountAndUser[] allAccounts = AccountManagerService.getSingleton().getAllAccounts(); AccountAndUser[] allAccounts =
AccountManagerService.getSingleton().getAllAccountsForSystemProcess();
List<SyncOperation> ops = getAllPendingSyncs(); List<SyncOperation> ops = getAllPendingSyncs();
for (int i = 0, opsSize = ops.size(); i < opsSize; i++) { for (int i = 0, opsSize = ops.size(); i < opsSize; i++) {
SyncOperation op = ops.get(i); SyncOperation op = ops.get(i);