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

Commit ebe36246 authored by Ricky Wai's avatar Ricky Wai
Browse files

Make Network watchlist use ConfigUpdater to get watchlist

Bug: 63908748
Test: test_network_watchlist_full.sh samples/network-watchlist-sample.xml

Change-Id: I9dcca568d3f19f2937786c9c184324b43dc08ff2
parent b929041f
Loading
Loading
Loading
Loading
+16 −2
Original line number Diff line number Diff line
@@ -59,8 +59,8 @@ public class NetworkWatchlistManager {
    /**
     * Report network watchlist records if necessary.
     *
     * Watchlist report process will run summarize records into a single report, then the
     * report will be processed by differential privacy framework and store it on disk.
     * Watchlist report process will summarize records into a single report, then the
     * report will be processed by differential privacy framework and stored on disk.
     *
     * @hide
     */
@@ -72,4 +72,18 @@ public class NetworkWatchlistManager {
            e.rethrowFromSystemServer();
        }
    }

    /**
     * Reload network watchlist.
     *
     * @hide
     */
    public void reloadWatchlist() {
        try {
            mNetworkWatchlistManager.reloadWatchlist();
        } catch (RemoteException e) {
            Log.e(TAG, "Unable to reload watchlist");
            e.rethrowFromSystemServer();
        }
    }
}
+1 −0
Original line number Diff line number Diff line
@@ -22,5 +22,6 @@ import android.os.SharedMemory;
interface INetworkWatchlistManager {
    boolean startWatchlistLogging();
    boolean stopWatchlistLogging();
    void reloadWatchlist();
    void reportWatchlistIfNecessary();
}
+8 −0
Original line number Diff line number Diff line
@@ -3856,6 +3856,14 @@
            </intent-filter>
        </receiver>

        <receiver android:name="com.android.server.updates.NetworkWatchlistInstallReceiver"
                  android:permission="android.permission.UPDATE_CONFIG">
            <intent-filter>
                <action android:name="android.intent.action.UPDATE_NETWORK_WATCHLIST" />
                <data android:scheme="content" android:host="*" android:mimeType="*/*" />
            </intent-filter>
        </receiver>

        <receiver android:name="com.android.server.updates.ApnDbInstallReceiver"
                android:permission="android.permission.UPDATE_CONFIG">
            <intent-filter>
+7 −30
Original line number Diff line number Diff line
@@ -33,6 +33,7 @@ import android.text.TextUtils;
import android.util.Slog;

import com.android.internal.R;
import com.android.internal.annotations.GuardedBy;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.util.DumpUtils;
import com.android.internal.net.INetworkWatchlistManager;
@@ -92,6 +93,7 @@ public class NetworkWatchlistService extends INetworkWatchlistManager.Stub {
        }
    }

    @GuardedBy("mLoggingSwitchLock")
    private volatile boolean mIsLoggingEnabled = false;
    private final Object mLoggingSwitchLock = new Object();

@@ -220,36 +222,11 @@ public class NetworkWatchlistService extends INetworkWatchlistManager.Stub {
        }
    }

    /**
     * Set a new network watchlist.
     * This method should be called by ConfigUpdater only.
     *
     * @return True if network watchlist is updated.
     */
    public boolean setNetworkSecurityWatchlist(List<byte[]> domainsCrc32Digests,
            List<byte[]> domainsSha256Digests,
            List<byte[]> ipAddressesCrc32Digests,
            List<byte[]> ipAddressesSha256Digests) {
        Slog.i(TAG, "Setting network watchlist");
        if (domainsCrc32Digests == null || domainsSha256Digests == null
                || ipAddressesCrc32Digests == null || ipAddressesSha256Digests == null) {
            Slog.e(TAG, "Parameters cannot be null");
            return false;
        }
        if (domainsCrc32Digests.size() != domainsSha256Digests.size()
                || ipAddressesCrc32Digests.size() != ipAddressesSha256Digests.size()) {
            Slog.e(TAG, "Must need to have the same number of CRC32 and SHA256 digests");
            return false;
        }
        if (domainsSha256Digests.size() + ipAddressesSha256Digests.size()
                > MAX_NUM_OF_WATCHLIST_DIGESTS) {
            Slog.e(TAG, "Total watchlist size cannot exceed " + MAX_NUM_OF_WATCHLIST_DIGESTS);
            return false;
        }
        mSettings.writeSettingsToDisk(domainsCrc32Digests, domainsSha256Digests,
                ipAddressesCrc32Digests, ipAddressesSha256Digests);
        Slog.i(TAG, "Set network watchlist: Success");
        return true;
    @Override
    public void reloadWatchlist() throws RemoteException {
        enforceWatchlistLoggingPermission();
        Slog.i(TAG, "Reloading watchlist");
        mSettings.reloadSettings();
    }

    @Override
+7 −2
Original line number Diff line number Diff line
@@ -21,10 +21,12 @@ import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Environment;
import android.util.Pair;

import com.android.internal.util.HexDump;

import java.io.File;
import java.util.ArrayList;
import java.util.GregorianCalendar;
import java.util.HashMap;
@@ -83,9 +85,12 @@ class WatchlistReportDbHelper extends SQLiteOpenHelper {
        HashMap<String, String> appDigestCNCList;
    }

    static File getSystemWatchlistDbFile() {
        return new File(Environment.getDataSystemDirectory(), NAME);
    }

    private WatchlistReportDbHelper(Context context) {
        super(context, WatchlistSettings.getSystemWatchlistFile(NAME).getAbsolutePath(),
                null, VERSION);
        super(context, getSystemWatchlistDbFile().getAbsolutePath(), null, VERSION);
        // Memory optimization - close idle connections after 30s of inactivity
        setIdleConnectionTimeout(IDLE_CONNECTION_TIMEOUT_MS);
    }
Loading