diff options
4 files changed, 8 insertions, 5 deletions
diff --git a/cmds/pm/src/com/android/commands/pm/Pm.java b/cmds/pm/src/com/android/commands/pm/Pm.java index 7015381dc4fb..b336472666bd 100644 --- a/cmds/pm/src/com/android/commands/pm/Pm.java +++ b/cmds/pm/src/com/android/commands/pm/Pm.java @@ -53,6 +53,7 @@ import android.os.Handler; import android.os.HandlerThread; import android.os.IUserManager; import android.os.ParcelFileDescriptor; +import android.os.Process; import android.os.RemoteException; import android.os.ResultReceiver; import android.os.SELinux; @@ -1004,7 +1005,8 @@ public final class Pm { // In non-split user mode, userId can only be SYSTEM int parentUserId = userId >= 0 ? userId : UserHandle.USER_SYSTEM; info = mUm.createRestrictedProfile(name, parentUserId); - mAm.addSharedAccountsFromParentUser(parentUserId, userId); + mAm.addSharedAccountsFromParentUser(parentUserId, userId, + (Process.myUid() == Process.ROOT_UID) ? "root" : "com.android.shell"); } else if (userId < 0) { info = mUm.createUser(name, flags); } else { diff --git a/core/java/android/accounts/AccountManager.java b/core/java/android/accounts/AccountManager.java index 02636819781a..7d039ef221d7 100644 --- a/core/java/android/accounts/AccountManager.java +++ b/core/java/android/accounts/AccountManager.java @@ -1802,7 +1802,7 @@ public class AccountManager { public void addSharedAccountsFromParentUser(UserHandle parentUser, UserHandle user) { try { mService.addSharedAccountsFromParentUser(parentUser.getIdentifier(), - user.getIdentifier()); + user.getIdentifier(), mContext.getOpPackageName()); } catch (RemoteException re) { throw re.rethrowFromSystemServer(); } diff --git a/core/java/android/accounts/IAccountManager.aidl b/core/java/android/accounts/IAccountManager.aidl index e0fdac146f68..49cd2c6a3953 100644 --- a/core/java/android/accounts/IAccountManager.aidl +++ b/core/java/android/accounts/IAccountManager.aidl @@ -80,7 +80,7 @@ interface IAccountManager { /* Shared accounts */ Account[] getSharedAccountsAsUser(int userId); boolean removeSharedAccountAsUser(in Account account, int userId); - void addSharedAccountsFromParentUser(int parentUserId, int userId); + void addSharedAccountsFromParentUser(int parentUserId, int userId, String opPackageName); /* Account renaming. */ void renameAccount(in IAccountManagerResponse response, in Account accountToRename, String newName); diff --git a/services/core/java/com/android/server/accounts/AccountManagerService.java b/services/core/java/com/android/server/accounts/AccountManagerService.java index fbc444026539..5c8024ac3170 100644 --- a/services/core/java/com/android/server/accounts/AccountManagerService.java +++ b/services/core/java/com/android/server/accounts/AccountManagerService.java @@ -4087,9 +4087,10 @@ public class AccountManagerService } @Override - public void addSharedAccountsFromParentUser(int parentUserId, int userId) { + public void addSharedAccountsFromParentUser(int parentUserId, int userId, + String opPackageName) { checkManageOrCreateUsersPermission("addSharedAccountsFromParentUser"); - Account[] accounts = getAccountsAsUser(null, parentUserId, mContext.getOpPackageName()); + Account[] accounts = getAccountsAsUser(null, parentUserId, opPackageName); for (Account account : accounts) { addSharedAccountAsUser(account, userId); } |