diff options
4 files changed, 42 insertions, 0 deletions
diff --git a/cmds/bmgr/src/com/android/commands/bmgr/Bmgr.java b/cmds/bmgr/src/com/android/commands/bmgr/Bmgr.java index 69b5a17300de..5bf80765a7de 100644 --- a/cmds/bmgr/src/com/android/commands/bmgr/Bmgr.java +++ b/cmds/bmgr/src/com/android/commands/bmgr/Bmgr.java @@ -122,6 +122,11 @@ public final class Bmgr { return; } + if ("whitelist".equals(op)) { + doPrintWhitelist(); + return; + } + System.err.println("Unknown command"); showUsage(); } @@ -604,6 +609,20 @@ public final class Bmgr { } } + private void doPrintWhitelist() { + try { + final String[] whitelist = mBmgr.getTransportWhitelist(); + if (whitelist != null) { + for (String transport : whitelist) { + System.out.println(transport); + } + } + } catch (RemoteException e) { + System.err.println(e.toString()); + System.err.println(BMGR_NOT_RUNNING_ERR); + } + } + private String nextArg() { if (mNextArg >= mArgs.length) { return null; diff --git a/core/java/android/app/backup/IBackupManager.aidl b/core/java/android/app/backup/IBackupManager.aidl index 5d4cc6fe2dc9..a320bbf9d178 100644 --- a/core/java/android/app/backup/IBackupManager.aidl +++ b/core/java/android/app/backup/IBackupManager.aidl @@ -218,6 +218,14 @@ interface IBackupManager { String[] listAllTransports(); /** + * Retrieve the list of whitelisted transport components. Callers do </i>not</i> need + * any special permission. + * + * @return The names of all whitelisted transport components defined by the system. + */ + String[] getTransportWhitelist(); + + /** * Specify the current backup transport. Callers must hold the * android.permission.BACKUP permission to use this method. * diff --git a/services/backup/java/com/android/server/backup/BackupManagerService.java b/services/backup/java/com/android/server/backup/BackupManagerService.java index 334b228a4ab7..9243f65fa9d4 100644 --- a/services/backup/java/com/android/server/backup/BackupManagerService.java +++ b/services/backup/java/com/android/server/backup/BackupManagerService.java @@ -9597,6 +9597,15 @@ if (MORE_DEBUG) Slog.v(TAG, " + got " + nRead + "; now wanting " + (size - soF return list; } + public String[] getTransportWhitelist() { + // No permission check, intentionally. + String[] whitelist = new String[mTransportWhitelist.size()]; + for (int i = mTransportWhitelist.size() - 1; i >= 0; i--) { + whitelist[i] = mTransportWhitelist.valueAt(i).flattenToShortString(); + } + return whitelist; + } + // Select which transport to use for the next backup operation. public String selectBackupTransport(String transport) { mContext.enforceCallingOrSelfPermission(android.Manifest.permission.BACKUP, diff --git a/services/backup/java/com/android/server/backup/Trampoline.java b/services/backup/java/com/android/server/backup/Trampoline.java index e74526338a8f..312b878b284c 100644 --- a/services/backup/java/com/android/server/backup/Trampoline.java +++ b/services/backup/java/com/android/server/backup/Trampoline.java @@ -275,6 +275,12 @@ public class Trampoline extends IBackupManager.Stub { } @Override + public String[] getTransportWhitelist() { + BackupManagerService svc = mService; + return (svc != null) ? svc.getTransportWhitelist() : null; + } + + @Override public String selectBackupTransport(String transport) throws RemoteException { BackupManagerService svc = mService; return (svc != null) ? svc.selectBackupTransport(transport) : null; |