Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit edb47668 authored by Robert Greenwalt's avatar Robert Greenwalt
Browse files

Use unified Tethering Permission Check

The BT and Wifi mechanisms for enabling Tethering did their own
permission checks.  This set of changes unifies the check into
a ConnectivityManager function so they can be kept in sync.

bug:17435527
Change-Id: I8c157a5acf56ffbddd349cb6a45160ae7be8541b
parent 328c630a
Loading
Loading
Loading
Loading
+14 −0
Original line number Diff line number Diff line
@@ -1402,6 +1402,20 @@ public class ConnectivityManager {
        return (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    }

    /** {@hide */
    public static final void enforceTetherChangePermission(Context context) {
        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)
            // turn on tethering
            context.enforceCallingOrSelfPermission(
                    android.Manifest.permission.CONNECTIVITY_INTERNAL, "ConnectivityService");
        } else {
            context.enforceCallingOrSelfPermission(
                    android.Manifest.permission.CHANGE_NETWORK_STATE, "ConnectivityService");
        }
    }

    /**
     * Get the set of tetherable, available interfaces.  This list is limited by
     * device configuration and current interface existence.
+3 −11
Original line number Diff line number Diff line
@@ -1357,13 +1357,6 @@ public class ConnectivityService extends IConnectivityManager.Stub {
                "ConnectivityService");
    }

    // TODO Make this a special check when it goes public
    private void enforceTetherChangePermission() {
        mContext.enforceCallingOrSelfPermission(
                android.Manifest.permission.CHANGE_NETWORK_STATE,
                "ConnectivityService");
    }

    private void enforceTetherAccessPermission() {
        mContext.enforceCallingOrSelfPermission(
                android.Manifest.permission.ACCESS_NETWORK_STATE,
@@ -2375,8 +2368,7 @@ public class ConnectivityService extends IConnectivityManager.Stub {

    // javadoc from interface
    public int tether(String iface) {
        enforceTetherChangePermission();

        ConnectivityManager.enforceTetherChangePermission(mContext);
        if (isTetheringSupported()) {
            return mTethering.tether(iface);
        } else {
@@ -2386,7 +2378,7 @@ public class ConnectivityService extends IConnectivityManager.Stub {

    // javadoc from interface
    public int untether(String iface) {
        enforceTetherChangePermission();
        ConnectivityManager.enforceTetherChangePermission(mContext);

        if (isTetheringSupported()) {
            return mTethering.untether(iface);
@@ -2435,7 +2427,7 @@ public class ConnectivityService extends IConnectivityManager.Stub {
    }

    public int setUsbTethering(boolean enable) {
        enforceTetherChangePermission();
        ConnectivityManager.enforceTetherChangePermission(mContext);
        if (isTetheringSupported()) {
            return mTethering.setUsbTethering(enable);
        } else {