Merge "Make tetherChangePermission to be secured for AppOps permission"

This commit is contained in:
Erik Kline
2017-04-20 04:28:52 +00:00
committed by Gerrit Code Review
3 changed files with 44 additions and 25 deletions

View File

@@ -1862,8 +1862,12 @@ public class ConnectivityManager {
.getPackageNameForUid(context, uid), true /* throwException */);
}
/** {@hide */
public static final void enforceTetherChangePermission(Context context) {
/** {@hide} */
public static final void enforceTetherChangePermission(Context context, String callingPkg) {
if (null == context || null == callingPkg) {
throw new IllegalArgumentException("arguments should not be null");
}
if (context.getResources().getStringArray(
com.android.internal.R.array.config_mobile_hotspot_provision_app).length == 2) {
// Have a provisioning app - must only let system apps (which check this app)
@@ -1872,8 +1876,10 @@ public class ConnectivityManager {
android.Manifest.permission.TETHER_PRIVILEGED, "ConnectivityService");
} else {
int uid = Binder.getCallingUid();
Settings.checkAndNoteWriteSettingsOperation(context, uid, Settings
.getPackageNameForUid(context, uid), true /* throwException */);
// If callingPkg's uid is not same as Binder.getCallingUid(),
// AppOpsService throws SecurityException.
Settings.checkAndNoteWriteSettingsOperation(context, uid, callingPkg,
true /* throwException */);
}
}
@@ -1996,7 +2002,9 @@ public class ConnectivityManager {
*/
public int tether(String iface) {
try {
return mService.tether(iface);
String pkgName = mContext.getOpPackageName();
Log.i(TAG, "tether caller:" + pkgName);
return mService.tether(iface, pkgName);
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
@@ -2022,7 +2030,9 @@ public class ConnectivityManager {
*/
public int untether(String iface) {
try {
return mService.untether(iface);
String pkgName = mContext.getOpPackageName();
Log.i(TAG, "untether caller:" + pkgName);
return mService.untether(iface, pkgName);
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
@@ -2113,7 +2123,9 @@ public class ConnectivityManager {
};
try {
mService.startTethering(type, wrappedCallback, showProvisioningUi);
String pkgName = mContext.getOpPackageName();
Log.i(TAG, "startTethering caller:" + pkgName);
mService.startTethering(type, wrappedCallback, showProvisioningUi, pkgName);
} catch (RemoteException e) {
Log.e(TAG, "Exception trying to start tethering.", e);
wrappedCallback.send(TETHER_ERROR_SERVICE_UNAVAIL, null);
@@ -2133,7 +2145,9 @@ public class ConnectivityManager {
@SystemApi
public void stopTethering(int type) {
try {
mService.stopTethering(type);
String pkgName = mContext.getOpPackageName();
Log.i(TAG, "stopTethering caller:" + pkgName);
mService.stopTethering(type, pkgName);
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
@@ -2218,7 +2232,9 @@ public class ConnectivityManager {
*/
public int setUsbTethering(boolean enable) {
try {
return mService.setUsbTethering(enable);
String pkgName = mContext.getOpPackageName();
Log.i(TAG, "setUsbTethering caller:" + pkgName);
return mService.setUsbTethering(enable, pkgName);
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}

View File

@@ -69,17 +69,18 @@ interface IConnectivityManager
boolean requestRouteToHostAddress(int networkType, in byte[] hostAddress);
int tether(String iface);
int tether(String iface, String callerPkg);
int untether(String iface);
int untether(String iface, String callerPkg);
int getLastTetherError(String iface);
boolean isTetheringSupported();
void startTethering(int type, in ResultReceiver receiver, boolean showProvisioningUi);
void startTethering(int type, in ResultReceiver receiver, boolean showProvisioningUi,
String callerPkg);
void stopTethering(int type);
void stopTethering(int type, String callerPkg);
String[] getTetherableIfaces();
@@ -95,7 +96,7 @@ interface IConnectivityManager
String[] getTetherableBluetoothRegexs();
int setUsbTethering(boolean enable);
int setUsbTethering(boolean enable, String callerPkg);
void reportInetCondition(int networkType, int percentage);