Loading services/core/java/com/android/server/adb/AdbKeyStore.java +18 −16 Original line number Original line Diff line number Diff line Loading @@ -43,6 +43,8 @@ import java.util.Set; * <li>Removing unused keys from the adb_keys file * <li>Removing unused keys from the adb_keys file * <li>Managing authorized WiFi access points for ADB over WiFi * <li>Managing authorized WiFi access points for ADB over WiFi * </ol> * </ol> * * This class is thread safe. All of the API methods are synchronized. */ */ class AdbKeyStore { class AdbKeyStore { private static final String TAG = AdbKeyStore.class.getSimpleName(); private static final String TAG = AdbKeyStore.class.getSimpleName(); Loading Loading @@ -115,20 +117,20 @@ class AdbKeyStore { copyUserKeysToTempAuthorizationStore(); copyUserKeysToTempAuthorizationStore(); } } void reloadKeyMap() { synchronized void reloadKeyMap() { mAuthEntries = mAuthStore.load(); mAuthEntries = mAuthStore.load(); } } void addTrustedNetwork(String bssid) { synchronized void addTrustedNetwork(String bssid) { mAuthEntries.trustedNetworks().add(bssid); mAuthEntries.trustedNetworks().add(bssid); mKeyStorePersistAction.requestPersist(); mKeyStorePersistAction.requestPersist(); } } Set<String> getKeys() { synchronized Set<String> getKeys() { return new HashSet<>(mAuthEntries.keys().keySet()); return new HashSet<>(mAuthEntries.keys().keySet()); } } String findKeyFromFingerprint(String fingerprint) { synchronized String findKeyFromFingerprint(String fingerprint) { for (Map.Entry<String, Long> entry : mAuthEntries.keys().entrySet()) { for (Map.Entry<String, Long> entry : mAuthEntries.keys().entrySet()) { String f = AdbDebuggingManager.getFingerprints(entry.getKey()); String f = AdbDebuggingManager.getFingerprints(entry.getKey()); if (fingerprint.equals(f)) { if (fingerprint.equals(f)) { Loading @@ -138,7 +140,7 @@ class AdbKeyStore { return null; return null; } } void removeKey(String key) { synchronized void removeKey(String key) { if (mAuthEntries.keys().containsKey(key)) { if (mAuthEntries.keys().containsKey(key)) { mAuthEntries.keys().remove(key); mAuthEntries.keys().remove(key); mKeyStorePersistAction.requestPersist(); mKeyStorePersistAction.requestPersist(); Loading @@ -146,7 +148,7 @@ class AdbKeyStore { } } /** Returns whether there are any 'always allowed' keys in the keystore. */ /** Returns whether there are any 'always allowed' keys in the keystore. */ boolean isEmpty() { synchronized boolean isEmpty() { return mAuthEntries.keys().isEmpty(); return mAuthEntries.keys().isEmpty(); } } Loading @@ -154,7 +156,7 @@ class AdbKeyStore { * Iterates through the keys in the keystore and removes any that are beyond the window within * Iterates through the keys in the keystore and removes any that are beyond the window within * which connections are automatically allowed without user interaction. * which connections are automatically allowed without user interaction. */ */ void updateKeyStore() { synchronized void updateKeyStore() { if (filterOutOldKeys()) { if (filterOutOldKeys()) { mKeyStorePersistAction.requestPersist(); mKeyStorePersistAction.requestPersist(); } } Loading Loading @@ -182,7 +184,7 @@ class AdbKeyStore { } } /** Writes the key map to the key file. */ /** Writes the key map to the key file. */ void persistKeyStore() { synchronized void persistKeyStore() { // if there is nothing in the key map then ensure any keys left in the keystore files // if there is nothing in the key map then ensure any keys left in the keystore files // are deleted as well. // are deleted as well. filterOutOldKeys(); filterOutOldKeys(); Loading Loading @@ -223,7 +225,7 @@ class AdbKeyStore { * Returns the time in ms that the next key will expire or -1 if there are no keys or the keys * Returns the time in ms that the next key will expire or -1 if there are no keys or the keys * will not expire. * will not expire. */ */ long getNextExpirationTime() { synchronized long getNextExpirationTime() { long minExpiration = -1; long minExpiration = -1; long allowedTime = getAllowedConnectionTime(); long allowedTime = getAllowedConnectionTime(); // if the allowedTime is 0 then keys never expire; return -1 to indicate this // if the allowedTime is 0 then keys never expire; return -1 to indicate this Loading @@ -247,7 +249,7 @@ class AdbKeyStore { } } /** Removes all of the entries in the key map and deletes the key file. */ /** Removes all of the entries in the key map and deletes the key file. */ void deleteKeyStore() { synchronized void deleteKeyStore() { mAuthEntries.clear(); mAuthEntries.clear(); mAuthStore.delete(); mAuthStore.delete(); mAdbKeyUser.delete(); mAdbKeyUser.delete(); Loading @@ -257,12 +259,12 @@ class AdbKeyStore { * Returns the time of the last connection from the specified key, or {@code * Returns the time of the last connection from the specified key, or {@code * NO_PREVIOUS_CONNECTION} if the specified key does not have an active adb grant. * NO_PREVIOUS_CONNECTION} if the specified key does not have an active adb grant. */ */ long getLastConnectionTime(String key) { synchronized long getLastConnectionTime(String key) { return mAuthEntries.keys().getOrDefault(key, NO_PREVIOUS_CONNECTION); return mAuthEntries.keys().getOrDefault(key, NO_PREVIOUS_CONNECTION); } } /** Sets the time of the last connection for the specified key to the provided time. */ /** Sets the time of the last connection for the specified key to the provided time. */ void setLastConnectionTime(String key, long connectionTime) { synchronized void setLastConnectionTime(String key, long connectionTime) { setLastConnectionTime(key, connectionTime, false); setLastConnectionTime(key, connectionTime, false); } } Loading @@ -272,7 +274,7 @@ class AdbKeyStore { * time. * time. */ */ @VisibleForTesting @VisibleForTesting void setLastConnectionTime(String key, long connectionTime, boolean force) { synchronized void setLastConnectionTime(String key, long connectionTime, boolean force) { // Do not set the connection time to a value that is earlier than what was previously // Do not set the connection time to a value that is earlier than what was previously // stored as the last connection time unless force is set. // stored as the last connection time unless force is set. if (mAuthEntries.keys().containsKey(key) if (mAuthEntries.keys().containsKey(key) Loading @@ -292,7 +294,7 @@ class AdbKeyStore { * Returns the connection time within which a connection from an allowed key is automatically * Returns the connection time within which a connection from an allowed key is automatically * allowed without user interaction. * allowed without user interaction. */ */ long getAllowedConnectionTime() { synchronized long getAllowedConnectionTime() { return Settings.Global.getLong( return Settings.Global.getLong( mContext.getContentResolver(), mContext.getContentResolver(), Settings.Global.ADB_ALLOWED_CONNECTION_TIME, Settings.Global.ADB_ALLOWED_CONNECTION_TIME, Loading @@ -304,7 +306,7 @@ class AdbKeyStore { * This requires that the user previously connected this device and selected the option to * This requires that the user previously connected this device and selected the option to * 'Always allow', and the time since the last connection is within the allowed window. * 'Always allow', and the time since the last connection is within the allowed window. */ */ boolean isKeyAuthorized(String key) { synchronized boolean isKeyAuthorized(String key) { // A system key is always authorized to connect. // A system key is always authorized to connect. if (mSystemKeys.contains(key)) { if (mSystemKeys.contains(key)) { return true; return true; Loading @@ -325,7 +327,7 @@ class AdbKeyStore { * the user previously allowed wireless debugging on this network and selected the option to * the user previously allowed wireless debugging on this network and selected the option to * 'Always allow'. * 'Always allow'. */ */ boolean isTrustedNetwork(String bssid) { synchronized boolean isTrustedNetwork(String bssid) { return mAuthEntries.trustedNetworks().contains(bssid); return mAuthEntries.trustedNetworks().contains(bssid); } } Loading Loading
services/core/java/com/android/server/adb/AdbKeyStore.java +18 −16 Original line number Original line Diff line number Diff line Loading @@ -43,6 +43,8 @@ import java.util.Set; * <li>Removing unused keys from the adb_keys file * <li>Removing unused keys from the adb_keys file * <li>Managing authorized WiFi access points for ADB over WiFi * <li>Managing authorized WiFi access points for ADB over WiFi * </ol> * </ol> * * This class is thread safe. All of the API methods are synchronized. */ */ class AdbKeyStore { class AdbKeyStore { private static final String TAG = AdbKeyStore.class.getSimpleName(); private static final String TAG = AdbKeyStore.class.getSimpleName(); Loading Loading @@ -115,20 +117,20 @@ class AdbKeyStore { copyUserKeysToTempAuthorizationStore(); copyUserKeysToTempAuthorizationStore(); } } void reloadKeyMap() { synchronized void reloadKeyMap() { mAuthEntries = mAuthStore.load(); mAuthEntries = mAuthStore.load(); } } void addTrustedNetwork(String bssid) { synchronized void addTrustedNetwork(String bssid) { mAuthEntries.trustedNetworks().add(bssid); mAuthEntries.trustedNetworks().add(bssid); mKeyStorePersistAction.requestPersist(); mKeyStorePersistAction.requestPersist(); } } Set<String> getKeys() { synchronized Set<String> getKeys() { return new HashSet<>(mAuthEntries.keys().keySet()); return new HashSet<>(mAuthEntries.keys().keySet()); } } String findKeyFromFingerprint(String fingerprint) { synchronized String findKeyFromFingerprint(String fingerprint) { for (Map.Entry<String, Long> entry : mAuthEntries.keys().entrySet()) { for (Map.Entry<String, Long> entry : mAuthEntries.keys().entrySet()) { String f = AdbDebuggingManager.getFingerprints(entry.getKey()); String f = AdbDebuggingManager.getFingerprints(entry.getKey()); if (fingerprint.equals(f)) { if (fingerprint.equals(f)) { Loading @@ -138,7 +140,7 @@ class AdbKeyStore { return null; return null; } } void removeKey(String key) { synchronized void removeKey(String key) { if (mAuthEntries.keys().containsKey(key)) { if (mAuthEntries.keys().containsKey(key)) { mAuthEntries.keys().remove(key); mAuthEntries.keys().remove(key); mKeyStorePersistAction.requestPersist(); mKeyStorePersistAction.requestPersist(); Loading @@ -146,7 +148,7 @@ class AdbKeyStore { } } /** Returns whether there are any 'always allowed' keys in the keystore. */ /** Returns whether there are any 'always allowed' keys in the keystore. */ boolean isEmpty() { synchronized boolean isEmpty() { return mAuthEntries.keys().isEmpty(); return mAuthEntries.keys().isEmpty(); } } Loading @@ -154,7 +156,7 @@ class AdbKeyStore { * Iterates through the keys in the keystore and removes any that are beyond the window within * Iterates through the keys in the keystore and removes any that are beyond the window within * which connections are automatically allowed without user interaction. * which connections are automatically allowed without user interaction. */ */ void updateKeyStore() { synchronized void updateKeyStore() { if (filterOutOldKeys()) { if (filterOutOldKeys()) { mKeyStorePersistAction.requestPersist(); mKeyStorePersistAction.requestPersist(); } } Loading Loading @@ -182,7 +184,7 @@ class AdbKeyStore { } } /** Writes the key map to the key file. */ /** Writes the key map to the key file. */ void persistKeyStore() { synchronized void persistKeyStore() { // if there is nothing in the key map then ensure any keys left in the keystore files // if there is nothing in the key map then ensure any keys left in the keystore files // are deleted as well. // are deleted as well. filterOutOldKeys(); filterOutOldKeys(); Loading Loading @@ -223,7 +225,7 @@ class AdbKeyStore { * Returns the time in ms that the next key will expire or -1 if there are no keys or the keys * Returns the time in ms that the next key will expire or -1 if there are no keys or the keys * will not expire. * will not expire. */ */ long getNextExpirationTime() { synchronized long getNextExpirationTime() { long minExpiration = -1; long minExpiration = -1; long allowedTime = getAllowedConnectionTime(); long allowedTime = getAllowedConnectionTime(); // if the allowedTime is 0 then keys never expire; return -1 to indicate this // if the allowedTime is 0 then keys never expire; return -1 to indicate this Loading @@ -247,7 +249,7 @@ class AdbKeyStore { } } /** Removes all of the entries in the key map and deletes the key file. */ /** Removes all of the entries in the key map and deletes the key file. */ void deleteKeyStore() { synchronized void deleteKeyStore() { mAuthEntries.clear(); mAuthEntries.clear(); mAuthStore.delete(); mAuthStore.delete(); mAdbKeyUser.delete(); mAdbKeyUser.delete(); Loading @@ -257,12 +259,12 @@ class AdbKeyStore { * Returns the time of the last connection from the specified key, or {@code * Returns the time of the last connection from the specified key, or {@code * NO_PREVIOUS_CONNECTION} if the specified key does not have an active adb grant. * NO_PREVIOUS_CONNECTION} if the specified key does not have an active adb grant. */ */ long getLastConnectionTime(String key) { synchronized long getLastConnectionTime(String key) { return mAuthEntries.keys().getOrDefault(key, NO_PREVIOUS_CONNECTION); return mAuthEntries.keys().getOrDefault(key, NO_PREVIOUS_CONNECTION); } } /** Sets the time of the last connection for the specified key to the provided time. */ /** Sets the time of the last connection for the specified key to the provided time. */ void setLastConnectionTime(String key, long connectionTime) { synchronized void setLastConnectionTime(String key, long connectionTime) { setLastConnectionTime(key, connectionTime, false); setLastConnectionTime(key, connectionTime, false); } } Loading @@ -272,7 +274,7 @@ class AdbKeyStore { * time. * time. */ */ @VisibleForTesting @VisibleForTesting void setLastConnectionTime(String key, long connectionTime, boolean force) { synchronized void setLastConnectionTime(String key, long connectionTime, boolean force) { // Do not set the connection time to a value that is earlier than what was previously // Do not set the connection time to a value that is earlier than what was previously // stored as the last connection time unless force is set. // stored as the last connection time unless force is set. if (mAuthEntries.keys().containsKey(key) if (mAuthEntries.keys().containsKey(key) Loading @@ -292,7 +294,7 @@ class AdbKeyStore { * Returns the connection time within which a connection from an allowed key is automatically * Returns the connection time within which a connection from an allowed key is automatically * allowed without user interaction. * allowed without user interaction. */ */ long getAllowedConnectionTime() { synchronized long getAllowedConnectionTime() { return Settings.Global.getLong( return Settings.Global.getLong( mContext.getContentResolver(), mContext.getContentResolver(), Settings.Global.ADB_ALLOWED_CONNECTION_TIME, Settings.Global.ADB_ALLOWED_CONNECTION_TIME, Loading @@ -304,7 +306,7 @@ class AdbKeyStore { * This requires that the user previously connected this device and selected the option to * This requires that the user previously connected this device and selected the option to * 'Always allow', and the time since the last connection is within the allowed window. * 'Always allow', and the time since the last connection is within the allowed window. */ */ boolean isKeyAuthorized(String key) { synchronized boolean isKeyAuthorized(String key) { // A system key is always authorized to connect. // A system key is always authorized to connect. if (mSystemKeys.contains(key)) { if (mSystemKeys.contains(key)) { return true; return true; Loading @@ -325,7 +327,7 @@ class AdbKeyStore { * the user previously allowed wireless debugging on this network and selected the option to * the user previously allowed wireless debugging on this network and selected the option to * 'Always allow'. * 'Always allow'. */ */ boolean isTrustedNetwork(String bssid) { synchronized boolean isTrustedNetwork(String bssid) { return mAuthEntries.trustedNetworks().contains(bssid); return mAuthEntries.trustedNetworks().contains(bssid); } } Loading