diff --git a/api/system-current.txt b/api/system-current.txt index d2e0556515a76..26466ede618e4 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -111,6 +111,7 @@ package android { field public static final java.lang.String INVOKE_CARRIER_SETUP = "android.permission.INVOKE_CARRIER_SETUP"; field public static final java.lang.String KILL_BACKGROUND_PROCESSES = "android.permission.KILL_BACKGROUND_PROCESSES"; field public static final java.lang.String KILL_UID = "android.permission.KILL_UID"; + field public static final java.lang.String LOCAL_MAC_ADDRESS = "android.permission.LOCAL_MAC_ADDRESS"; field public static final java.lang.String LOCATION_HARDWARE = "android.permission.LOCATION_HARDWARE"; field public static final java.lang.String LOOP_RADIO = "android.permission.LOOP_RADIO"; field public static final java.lang.String MANAGE_ACCOUNTS = "android.permission.MANAGE_ACCOUNTS"; diff --git a/core/java/android/bluetooth/BluetoothAdapter.java b/core/java/android/bluetooth/BluetoothAdapter.java index 8768f400b13d8..b22b914686db5 100644 --- a/core/java/android/bluetooth/BluetoothAdapter.java +++ b/core/java/android/bluetooth/BluetoothAdapter.java @@ -95,6 +95,14 @@ public final class BluetoothAdapter { private static final boolean DBG = true; private static final boolean VDBG = false; + /** + * Default MAC address reported to a client that does not have the + * android.permission.LOCAL_MAC_ADDRESS permission. + * + * @hide + */ + public static final String DEFAULT_MAC_ADDRESS = "02:00:00:00:00:00"; + /** * Sentinel error value for this class. Guaranteed to not equal any other * integer constant in this class. Provided as a convenience for functions diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml index 608d718be1331..595f9f07da184 100644 --- a/core/res/AndroidManifest.xml +++ b/core/res/AndroidManifest.xml @@ -898,7 +898,9 @@ android:label="@string/permlab_changeWimaxState" android:protectionLevel="dangerous" /> - + @@ -2447,6 +2449,10 @@ + + + diff --git a/services/core/java/com/android/server/BluetoothManagerService.java b/services/core/java/com/android/server/BluetoothManagerService.java index f5d27f952be1a..c46fa76e8970f 100644 --- a/services/core/java/com/android/server/BluetoothManagerService.java +++ b/services/core/java/com/android/server/BluetoothManagerService.java @@ -16,6 +16,7 @@ package com.android.server; +import android.Manifest; import android.app.ActivityManager; import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothProfile; @@ -909,16 +910,22 @@ class BluetoothManagerService extends IBluetoothManager.Stub { mCallbacks.finishBroadcast(); } } + public String getAddress() { mContext.enforceCallingOrSelfPermission(BLUETOOTH_PERM, - "Need BLUETOOTH permission"); + "Need BLUETOOTH permission"); if ((Binder.getCallingUid() != Process.SYSTEM_UID) && - (!checkIfCallerIsForegroundUser())) { + (!checkIfCallerIsForegroundUser())) { Log.w(TAG,"getAddress(): not allowed for non-active and non system user"); return null; } + if (mContext.checkCallingOrSelfPermission(Manifest.permission.LOCAL_MAC_ADDRESS) + != PackageManager.PERMISSION_GRANTED) { + return BluetoothAdapter.DEFAULT_MAC_ADDRESS; + } + synchronized(mConnection) { if (mBluetooth != null) { try { diff --git a/wifi/java/android/net/wifi/WifiInfo.java b/wifi/java/android/net/wifi/WifiInfo.java index 75198e52e8f00..dbfd4ef41ead9 100644 --- a/wifi/java/android/net/wifi/WifiInfo.java +++ b/wifi/java/android/net/wifi/WifiInfo.java @@ -42,6 +42,14 @@ public class WifiInfo implements Parcelable { private static final EnumMap stateMap = new EnumMap(SupplicantState.class); + /** + * Default MAC address reported to a client that does not have the + * android.permission.LOCAL_MAC_ADDRESS permission. + * + * @hide + */ + public static final String DEFAULT_MAC_ADDRESS = "02:00:00:00:00:00"; + static { stateMap.put(SupplicantState.DISCONNECTED, DetailedState.DISCONNECTED); stateMap.put(SupplicantState.INTERFACE_DISABLED, DetailedState.DISCONNECTED); @@ -91,7 +99,7 @@ public class WifiInfo implements Parcelable { private int mFrequency; private InetAddress mIpAddress; - private String mMacAddress; + private String mMacAddress = DEFAULT_MAC_ADDRESS; /** * @hide