Merge "Validate input for ContentService#setIsSyncable" into nyc-mr1-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
76043cf69f
@@ -838,7 +838,7 @@ public final class ContentService extends IContentService.Stub {
|
|||||||
SyncManager syncManager = getSyncManager();
|
SyncManager syncManager = getSyncManager();
|
||||||
if (syncManager != null) {
|
if (syncManager != null) {
|
||||||
return syncManager.computeSyncable(
|
return syncManager.computeSyncable(
|
||||||
account, userId, providerName);
|
account, userId, providerName, false);
|
||||||
}
|
}
|
||||||
} finally {
|
} finally {
|
||||||
restoreCallingIdentity(identityToken);
|
restoreCallingIdentity(identityToken);
|
||||||
@@ -854,6 +854,8 @@ public final class ContentService extends IContentService.Stub {
|
|||||||
mContext.enforceCallingOrSelfPermission(Manifest.permission.WRITE_SYNC_SETTINGS,
|
mContext.enforceCallingOrSelfPermission(Manifest.permission.WRITE_SYNC_SETTINGS,
|
||||||
"no permission to write the sync settings");
|
"no permission to write the sync settings");
|
||||||
|
|
||||||
|
syncable = normalizeSyncable(syncable);
|
||||||
|
|
||||||
int userId = UserHandle.getCallingUserId();
|
int userId = UserHandle.getCallingUserId();
|
||||||
long identityToken = clearCallingIdentity();
|
long identityToken = clearCallingIdentity();
|
||||||
try {
|
try {
|
||||||
@@ -1156,6 +1158,15 @@ public final class ContentService extends IContentService.Stub {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static int normalizeSyncable(int syncable) {
|
||||||
|
if (syncable > 0) {
|
||||||
|
return SyncStorageEngine.AuthorityInfo.SYNCABLE;
|
||||||
|
} else if (syncable == 0) {
|
||||||
|
return SyncStorageEngine.AuthorityInfo.NOT_SYNCABLE;
|
||||||
|
}
|
||||||
|
return SyncStorageEngine.AuthorityInfo.UNDEFINED;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Hide this class since it is not part of api,
|
* Hide this class since it is not part of api,
|
||||||
* but current unittest framework requires it to be public
|
* but current unittest framework requires it to be public
|
||||||
|
|||||||
@@ -1001,7 +1001,12 @@ public class SyncManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public int computeSyncable(Account account, int userId, String authority) {
|
private int computeSyncable(Account account, int userId, String authority) {
|
||||||
|
return computeSyncable(account, userId, authority, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
public int computeSyncable(Account account, int userId, String authority,
|
||||||
|
boolean checkAccountAccess) {
|
||||||
final int status = getIsSyncable(account, userId, authority);
|
final int status = getIsSyncable(account, userId, authority);
|
||||||
if (status == AuthorityInfo.NOT_SYNCABLE) {
|
if (status == AuthorityInfo.NOT_SYNCABLE) {
|
||||||
return AuthorityInfo.NOT_SYNCABLE;
|
return AuthorityInfo.NOT_SYNCABLE;
|
||||||
@@ -1025,7 +1030,7 @@ public class SyncManager {
|
|||||||
} catch (RemoteException e) {
|
} catch (RemoteException e) {
|
||||||
/* ignore - local call */
|
/* ignore - local call */
|
||||||
}
|
}
|
||||||
if (!canAccessAccount(account, owningPackage, owningUid)) {
|
if (checkAccountAccess && !canAccessAccount(account, owningPackage, owningUid)) {
|
||||||
Log.w(TAG, "Access to " + account + " denied for package "
|
Log.w(TAG, "Access to " + account + " denied for package "
|
||||||
+ owningPackage + " in UID " + syncAdapterInfo.uid);
|
+ owningPackage + " in UID " + syncAdapterInfo.uid);
|
||||||
return AuthorityInfo.SYNCABLE_NO_ACCOUNT_ACCESS;
|
return AuthorityInfo.SYNCABLE_NO_ACCOUNT_ACCESS;
|
||||||
|
|||||||
Reference in New Issue
Block a user