Loading services/core/java/com/android/server/content/ContentService.java +4 −3 Original line number Diff line number Diff line Loading @@ -786,7 +786,7 @@ public final class ContentService extends IContentService.Stub { SyncManager syncManager = getSyncManager(); if (syncManager != null) { syncManager.getSyncStorageEngine().setSyncAutomatically(account, userId, providerName, sync, syncExemptionFlag); providerName, sync, syncExemptionFlag, callingUid); } } finally { restoreCallingIdentity(identityToken); Loading Loading @@ -913,6 +913,7 @@ public final class ContentService extends IContentService.Stub { "no permission to write the sync settings"); syncable = normalizeSyncable(syncable); final int callingUid = Binder.getCallingUid(); int userId = UserHandle.getCallingUserId(); long identityToken = clearCallingIdentity(); Loading @@ -920,7 +921,7 @@ public final class ContentService extends IContentService.Stub { SyncManager syncManager = getSyncManager(); if (syncManager != null) { syncManager.getSyncStorageEngine().setIsSyncable( account, userId, providerName, syncable); account, userId, providerName, syncable, callingUid); } } finally { restoreCallingIdentity(identityToken); Loading Loading @@ -974,7 +975,7 @@ public final class ContentService extends IContentService.Stub { SyncManager syncManager = getSyncManager(); if (syncManager != null) { syncManager.getSyncStorageEngine().setMasterSyncAutomatically(flag, userId, getSyncExemptionForCaller(callingUid)); getSyncExemptionForCaller(callingUid), callingUid); } } finally { restoreCallingIdentity(identityToken); Loading services/core/java/com/android/server/content/SyncLogger.java +7 −2 Original line number Diff line number Diff line Loading @@ -54,6 +54,9 @@ public class SyncLogger { private static SyncLogger sInstance; // Special UID used for logging to denote the self process. public static final int CALLING_UID_SELF = -1; SyncLogger() { } Loading @@ -62,8 +65,10 @@ public class SyncLogger { */ public static synchronized SyncLogger getInstance() { if (sInstance == null) { final boolean enable = "1".equals(SystemProperties.get("debug.synclog", Build.IS_DEBUGGABLE ? "1" : "0")); final boolean enable = Build.IS_DEBUGGABLE || "1".equals(SystemProperties.get("debug.synclog")) || Log.isLoggable(TAG, Log.VERBOSE); if (enable) { sInstance = new RotatingFileLogger(); } else { Loading services/core/java/com/android/server/content/SyncManager.java +11 −11 Original line number Diff line number Diff line Loading @@ -51,8 +51,8 @@ import android.content.SyncStatusInfo; import android.content.pm.ApplicationInfo; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManagerInternal; import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.PackageManagerInternal; import android.content.pm.ProviderInfo; import android.content.pm.RegisteredServicesCache; import android.content.pm.RegisteredServicesCacheListener; Loading Loading @@ -88,26 +88,25 @@ import android.util.Log; import android.util.Pair; import android.util.Slog; import com.android.internal.R; import com.android.internal.app.IBatteryStats; import com.android.internal.messages.nano.SystemMessageProto.SystemMessage; import com.android.internal.notification.SystemNotificationChannels; import com.android.internal.os.BackgroundThread; import com.android.internal.util.ArrayUtils; import com.android.internal.util.IndentingPrintWriter; import com.android.server.DeviceIdleController; import com.android.server.DeviceIdleController.LocalService; import com.android.server.LocalServices; import com.android.server.SystemService; import com.android.server.job.JobSchedulerInternal; import com.google.android.collect.Lists; import com.google.android.collect.Maps; import com.android.internal.R; import com.android.internal.app.IBatteryStats; import com.android.internal.os.BackgroundThread; import com.android.internal.util.IndentingPrintWriter; import com.android.server.accounts.AccountManagerService; import com.android.server.backup.AccountSyncSettingsBackupHelper; import com.android.server.content.SyncStorageEngine.AuthorityInfo; import com.android.server.content.SyncStorageEngine.EndPoint; import com.android.server.content.SyncStorageEngine.OnSyncRequestListener; import com.android.server.job.JobSchedulerInternal; import com.google.android.collect.Lists; import com.google.android.collect.Maps; import java.io.FileDescriptor; import java.io.PrintWriter; Loading Loading @@ -1028,7 +1027,8 @@ public class SyncManager { final boolean isAlwaysSyncable = syncAdapterInfo.type.isAlwaysSyncable(); if (!checkIfAccountReady && isSyncable < 0 && isAlwaysSyncable) { mSyncStorageEngine.setIsSyncable( account.account, account.userId, authority, AuthorityInfo.SYNCABLE); account.account, account.userId, authority, AuthorityInfo.SYNCABLE, SyncLogger.CALLING_UID_SELF); isSyncable = AuthorityInfo.SYNCABLE; } Loading services/core/java/com/android/server/content/SyncStorageEngine.java +35 −7 Original line number Diff line number Diff line Loading @@ -43,7 +43,14 @@ import android.os.Parcel; import android.os.RemoteCallbackList; import android.os.RemoteException; import android.os.UserHandle; import android.util.*; import android.util.ArrayMap; import android.util.AtomicFile; import android.util.EventLog; import android.util.Log; import android.util.Pair; import android.util.Slog; import android.util.SparseArray; import android.util.Xml; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.util.ArrayUtils; Loading Loading @@ -466,11 +473,13 @@ public class SyncStorageEngine { private boolean mGrantSyncAdaptersAccountAccess; private final MyHandler mHandler; private final SyncLogger mLogger; private SyncStorageEngine(Context context, File dataDir, Looper looper) { mHandler = new MyHandler(looper); mContext = context; sSyncStorageEngine = this; mLogger = SyncLogger.getInstance(); mCal = Calendar.getInstance(TimeZone.getTimeZone("GMT+0")); Loading @@ -494,6 +503,14 @@ public class SyncStorageEngine { writeAccountInfoLocked(); writeStatusLocked(); writeStatisticsLocked(); if (mLogger.enabled()) { final int size = mAuthorities.size(); mLogger.log("Loaded ", size, " items"); for (int i = 0; i < size; i++) { mLogger.log(mAuthorities.valueAt(i)); } } } public static SyncStorageEngine newTestInstance(Context context) { Loading Loading @@ -648,11 +665,16 @@ public class SyncStorageEngine { } public void setSyncAutomatically(Account account, int userId, String providerName, boolean sync, @SyncExemption int syncExemptionFlag) { boolean sync, @SyncExemption int syncExemptionFlag, int callingUid) { if (Log.isLoggable(TAG, Log.VERBOSE)) { Slog.d(TAG, "setSyncAutomatically: " + /* account + */" provider " + providerName + ", user " + userId + " -> " + sync); } mLogger.log("Set sync auto account=", account, " user=", userId, " authority=", providerName, " value=", Boolean.toString(sync), " callingUid=", callingUid); synchronized (mAuthorities) { AuthorityInfo authority = getOrCreateAuthorityLocked( Loading Loading @@ -709,8 +731,10 @@ public class SyncStorageEngine { } } public void setIsSyncable(Account account, int userId, String providerName, int syncable) { setSyncableStateForEndPoint(new EndPoint(account, providerName, userId), syncable); public void setIsSyncable(Account account, int userId, String providerName, int syncable, int callingUid) { setSyncableStateForEndPoint(new EndPoint(account, providerName, userId), syncable, callingUid); } /** Loading @@ -719,8 +743,10 @@ public class SyncStorageEngine { * @param target target to set value for. * @param syncable 0 indicates unsyncable, <0 unknown, >0 is active/syncable. */ private void setSyncableStateForEndPoint(EndPoint target, int syncable) { private void setSyncableStateForEndPoint(EndPoint target, int syncable, int callingUid) { AuthorityInfo aInfo; mLogger.log("Set syncable ", target, " value=", Integer.toString(syncable), " callingUid=", callingUid); synchronized (mAuthorities) { aInfo = getOrCreateAuthorityLocked(target, -1, false); if (syncable < AuthorityInfo.NOT_INITIALIZED) { Loading Loading @@ -902,7 +928,9 @@ public class SyncStorageEngine { } public void setMasterSyncAutomatically(boolean flag, int userId, @SyncExemption int syncExemptionFlag) { @SyncExemption int syncExemptionFlag, int callingUid) { mLogger.log("Set master enabled=", flag, " user=", userId, " caller=" + callingUid); synchronized (mAuthorities) { Boolean auto = mMasterSyncAutomatically.get(userId); if (auto != null && auto.equals(flag)) { Loading Loading @@ -2049,7 +2077,7 @@ public class SyncStorageEngine { if (name == null) continue; if (name.equals("listen_for_tickles")) { setMasterSyncAutomatically(value == null || Boolean.parseBoolean(value), 0, ContentResolver.SYNC_EXEMPTION_NONE); ContentResolver.SYNC_EXEMPTION_NONE, SyncLogger.CALLING_UID_SELF); } else if (name.startsWith("sync_provider_")) { String provider = name.substring("sync_provider_".length(), name.length()); Loading Loading
services/core/java/com/android/server/content/ContentService.java +4 −3 Original line number Diff line number Diff line Loading @@ -786,7 +786,7 @@ public final class ContentService extends IContentService.Stub { SyncManager syncManager = getSyncManager(); if (syncManager != null) { syncManager.getSyncStorageEngine().setSyncAutomatically(account, userId, providerName, sync, syncExemptionFlag); providerName, sync, syncExemptionFlag, callingUid); } } finally { restoreCallingIdentity(identityToken); Loading Loading @@ -913,6 +913,7 @@ public final class ContentService extends IContentService.Stub { "no permission to write the sync settings"); syncable = normalizeSyncable(syncable); final int callingUid = Binder.getCallingUid(); int userId = UserHandle.getCallingUserId(); long identityToken = clearCallingIdentity(); Loading @@ -920,7 +921,7 @@ public final class ContentService extends IContentService.Stub { SyncManager syncManager = getSyncManager(); if (syncManager != null) { syncManager.getSyncStorageEngine().setIsSyncable( account, userId, providerName, syncable); account, userId, providerName, syncable, callingUid); } } finally { restoreCallingIdentity(identityToken); Loading Loading @@ -974,7 +975,7 @@ public final class ContentService extends IContentService.Stub { SyncManager syncManager = getSyncManager(); if (syncManager != null) { syncManager.getSyncStorageEngine().setMasterSyncAutomatically(flag, userId, getSyncExemptionForCaller(callingUid)); getSyncExemptionForCaller(callingUid), callingUid); } } finally { restoreCallingIdentity(identityToken); Loading
services/core/java/com/android/server/content/SyncLogger.java +7 −2 Original line number Diff line number Diff line Loading @@ -54,6 +54,9 @@ public class SyncLogger { private static SyncLogger sInstance; // Special UID used for logging to denote the self process. public static final int CALLING_UID_SELF = -1; SyncLogger() { } Loading @@ -62,8 +65,10 @@ public class SyncLogger { */ public static synchronized SyncLogger getInstance() { if (sInstance == null) { final boolean enable = "1".equals(SystemProperties.get("debug.synclog", Build.IS_DEBUGGABLE ? "1" : "0")); final boolean enable = Build.IS_DEBUGGABLE || "1".equals(SystemProperties.get("debug.synclog")) || Log.isLoggable(TAG, Log.VERBOSE); if (enable) { sInstance = new RotatingFileLogger(); } else { Loading
services/core/java/com/android/server/content/SyncManager.java +11 −11 Original line number Diff line number Diff line Loading @@ -51,8 +51,8 @@ import android.content.SyncStatusInfo; import android.content.pm.ApplicationInfo; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManagerInternal; import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.PackageManagerInternal; import android.content.pm.ProviderInfo; import android.content.pm.RegisteredServicesCache; import android.content.pm.RegisteredServicesCacheListener; Loading Loading @@ -88,26 +88,25 @@ import android.util.Log; import android.util.Pair; import android.util.Slog; import com.android.internal.R; import com.android.internal.app.IBatteryStats; import com.android.internal.messages.nano.SystemMessageProto.SystemMessage; import com.android.internal.notification.SystemNotificationChannels; import com.android.internal.os.BackgroundThread; import com.android.internal.util.ArrayUtils; import com.android.internal.util.IndentingPrintWriter; import com.android.server.DeviceIdleController; import com.android.server.DeviceIdleController.LocalService; import com.android.server.LocalServices; import com.android.server.SystemService; import com.android.server.job.JobSchedulerInternal; import com.google.android.collect.Lists; import com.google.android.collect.Maps; import com.android.internal.R; import com.android.internal.app.IBatteryStats; import com.android.internal.os.BackgroundThread; import com.android.internal.util.IndentingPrintWriter; import com.android.server.accounts.AccountManagerService; import com.android.server.backup.AccountSyncSettingsBackupHelper; import com.android.server.content.SyncStorageEngine.AuthorityInfo; import com.android.server.content.SyncStorageEngine.EndPoint; import com.android.server.content.SyncStorageEngine.OnSyncRequestListener; import com.android.server.job.JobSchedulerInternal; import com.google.android.collect.Lists; import com.google.android.collect.Maps; import java.io.FileDescriptor; import java.io.PrintWriter; Loading Loading @@ -1028,7 +1027,8 @@ public class SyncManager { final boolean isAlwaysSyncable = syncAdapterInfo.type.isAlwaysSyncable(); if (!checkIfAccountReady && isSyncable < 0 && isAlwaysSyncable) { mSyncStorageEngine.setIsSyncable( account.account, account.userId, authority, AuthorityInfo.SYNCABLE); account.account, account.userId, authority, AuthorityInfo.SYNCABLE, SyncLogger.CALLING_UID_SELF); isSyncable = AuthorityInfo.SYNCABLE; } Loading
services/core/java/com/android/server/content/SyncStorageEngine.java +35 −7 Original line number Diff line number Diff line Loading @@ -43,7 +43,14 @@ import android.os.Parcel; import android.os.RemoteCallbackList; import android.os.RemoteException; import android.os.UserHandle; import android.util.*; import android.util.ArrayMap; import android.util.AtomicFile; import android.util.EventLog; import android.util.Log; import android.util.Pair; import android.util.Slog; import android.util.SparseArray; import android.util.Xml; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.util.ArrayUtils; Loading Loading @@ -466,11 +473,13 @@ public class SyncStorageEngine { private boolean mGrantSyncAdaptersAccountAccess; private final MyHandler mHandler; private final SyncLogger mLogger; private SyncStorageEngine(Context context, File dataDir, Looper looper) { mHandler = new MyHandler(looper); mContext = context; sSyncStorageEngine = this; mLogger = SyncLogger.getInstance(); mCal = Calendar.getInstance(TimeZone.getTimeZone("GMT+0")); Loading @@ -494,6 +503,14 @@ public class SyncStorageEngine { writeAccountInfoLocked(); writeStatusLocked(); writeStatisticsLocked(); if (mLogger.enabled()) { final int size = mAuthorities.size(); mLogger.log("Loaded ", size, " items"); for (int i = 0; i < size; i++) { mLogger.log(mAuthorities.valueAt(i)); } } } public static SyncStorageEngine newTestInstance(Context context) { Loading Loading @@ -648,11 +665,16 @@ public class SyncStorageEngine { } public void setSyncAutomatically(Account account, int userId, String providerName, boolean sync, @SyncExemption int syncExemptionFlag) { boolean sync, @SyncExemption int syncExemptionFlag, int callingUid) { if (Log.isLoggable(TAG, Log.VERBOSE)) { Slog.d(TAG, "setSyncAutomatically: " + /* account + */" provider " + providerName + ", user " + userId + " -> " + sync); } mLogger.log("Set sync auto account=", account, " user=", userId, " authority=", providerName, " value=", Boolean.toString(sync), " callingUid=", callingUid); synchronized (mAuthorities) { AuthorityInfo authority = getOrCreateAuthorityLocked( Loading Loading @@ -709,8 +731,10 @@ public class SyncStorageEngine { } } public void setIsSyncable(Account account, int userId, String providerName, int syncable) { setSyncableStateForEndPoint(new EndPoint(account, providerName, userId), syncable); public void setIsSyncable(Account account, int userId, String providerName, int syncable, int callingUid) { setSyncableStateForEndPoint(new EndPoint(account, providerName, userId), syncable, callingUid); } /** Loading @@ -719,8 +743,10 @@ public class SyncStorageEngine { * @param target target to set value for. * @param syncable 0 indicates unsyncable, <0 unknown, >0 is active/syncable. */ private void setSyncableStateForEndPoint(EndPoint target, int syncable) { private void setSyncableStateForEndPoint(EndPoint target, int syncable, int callingUid) { AuthorityInfo aInfo; mLogger.log("Set syncable ", target, " value=", Integer.toString(syncable), " callingUid=", callingUid); synchronized (mAuthorities) { aInfo = getOrCreateAuthorityLocked(target, -1, false); if (syncable < AuthorityInfo.NOT_INITIALIZED) { Loading Loading @@ -902,7 +928,9 @@ public class SyncStorageEngine { } public void setMasterSyncAutomatically(boolean flag, int userId, @SyncExemption int syncExemptionFlag) { @SyncExemption int syncExemptionFlag, int callingUid) { mLogger.log("Set master enabled=", flag, " user=", userId, " caller=" + callingUid); synchronized (mAuthorities) { Boolean auto = mMasterSyncAutomatically.get(userId); if (auto != null && auto.equals(flag)) { Loading Loading @@ -2049,7 +2077,7 @@ public class SyncStorageEngine { if (name == null) continue; if (name.equals("listen_for_tickles")) { setMasterSyncAutomatically(value == null || Boolean.parseBoolean(value), 0, ContentResolver.SYNC_EXEMPTION_NONE); ContentResolver.SYNC_EXEMPTION_NONE, SyncLogger.CALLING_UID_SELF); } else if (name.startsWith("sync_provider_")) { String provider = name.substring("sync_provider_".length(), name.length()); Loading