Merge "Fix the misuse of calling user id as group id" into nyc-dev

This commit is contained in:
Tony Mak
2016-04-19 19:55:45 +00:00
committed by Android (Google) Code Review
6 changed files with 32 additions and 29 deletions

View File

@@ -39,9 +39,9 @@ public abstract class AuthenticationClient extends ClientMonitor {
public abstract void resetFailedAttempts();
public AuthenticationClient(Context context, long halDeviceId, IBinder token,
IFingerprintServiceReceiver receiver, int userId, int groupId, long opId,
IFingerprintServiceReceiver receiver, int callingUserId, int groupId, long opId,
boolean restricted, String owner) {
super(context, halDeviceId, token, receiver, userId, groupId, restricted, owner);
super(context, halDeviceId, token, receiver, callingUserId, groupId, restricted, owner);
mOpId = opId;
}

View File

@@ -38,7 +38,7 @@ public abstract class ClientMonitor implements IBinder.DeathRecipient {
protected static final boolean DEBUG = FingerprintService.DEBUG;
private IBinder mToken;
private IFingerprintServiceReceiver mReceiver;
private int mUserId;
private int mCallingUserId;
private int mGroupId;
private boolean mIsRestricted; // True if client does not have MANAGE_FINGERPRINT permission
private String mOwner;
@@ -50,20 +50,20 @@ public abstract class ClientMonitor implements IBinder.DeathRecipient {
* @param halDeviceId the HAL device ID of the associated fingerprint hardware
* @param token a unique token for the client
* @param receiver recipient of related events (e.g. authentication)
* @param userId userId for the fingerprint set
* @param callingUserId user id of calling user
* @param groupId groupId for the fingerprint set
* @param restricted whether or not client has the {@link Manifest#MANAGE_FINGERPRINT}
* permission
* @param owner name of the client that owns this
*/
public ClientMonitor(Context context, long halDeviceId, IBinder token,
IFingerprintServiceReceiver receiver, int userId, int groupId,boolean restricted,
IFingerprintServiceReceiver receiver, int callingUserId, int groupId,boolean restricted,
String owner) {
mContext = context;
mHalDeviceId = halDeviceId;
mToken = token;
mReceiver = receiver;
mUserId = userId;
mCallingUserId = callingUserId;
mGroupId = groupId;
mIsRestricted = restricted;
mOwner = owner;
@@ -197,8 +197,8 @@ public abstract class ClientMonitor implements IBinder.DeathRecipient {
return mIsRestricted;
}
public final int getUserId() {
return mUserId;
public final int getCallingUserId() {
return mCallingUserId;
}
public final int getGroupId() {

View File

@@ -46,9 +46,12 @@ public abstract class EnrollClient extends ClientMonitor {
@Override
public boolean onEnrollResult(int fingerId, int groupId, int remaining) {
if (groupId != getGroupId()) {
Slog.w(TAG, "groupId != getGroupId(), groupId: " + groupId +
" getGroupId():" + getGroupId());
}
if (remaining == 0) {
FingerprintUtils.getInstance().addFingerprintForUser(getContext(), fingerId,
getUserId());
FingerprintUtils.getInstance().addFingerprintForUser(getContext(), fingerId, groupId);
}
return sendEnrollResult(fingerId, groupId, remaining);
}

View File

@@ -41,7 +41,7 @@ public abstract class EnumerateClient extends ClientMonitor {
try {
final int result = daemon.enumerate();
if (result != 0) {
Slog.w(TAG, "start enumerate for user " + getUserId()
Slog.w(TAG, "start enumerate for user " + getCallingUserId()
+ " failed, result=" + result);
onError(FingerprintManager.FINGERPRINT_ERROR_HW_UNAVAILABLE);
return result;

View File

@@ -356,7 +356,7 @@ public class FingerprintService extends SystemService implements IBinder.DeathRe
}
}
void startRemove(IBinder token, int fingerId, int userId, int groupId,
void startRemove(IBinder token, int fingerId, int callingUserId, int groupId,
IFingerprintServiceReceiver receiver, boolean restricted) {
IFingerprintDaemon daemon = getFingerprintDaemon();
if (daemon == null) {
@@ -364,7 +364,7 @@ public class FingerprintService extends SystemService implements IBinder.DeathRe
return;
}
RemovalClient client = new RemovalClient(getContext(), mHalDeviceId, token,
receiver, userId, groupId, fingerId, restricted, token.toString()) {
receiver, callingUserId, groupId, fingerId, restricted, token.toString()) {
@Override
public void notifyUserActivity() {
FingerprintService.this.userActivity();
@@ -372,8 +372,7 @@ public class FingerprintService extends SystemService implements IBinder.DeathRe
@Override
public IFingerprintDaemon getFingerprintDaemon() {
FingerprintService.this.getFingerprintDaemon();
return null;
return FingerprintService.this.getFingerprintDaemon();
}
};
startClient(client, true);
@@ -494,7 +493,7 @@ public class FingerprintService extends SystemService implements IBinder.DeathRe
}
}
private void startAuthentication(IBinder token, long opId, int realUserId, int groupId,
private void startAuthentication(IBinder token, long opId, int callingUserId, int groupId,
IFingerprintServiceReceiver receiver, int flags, boolean restricted,
String opPackageName) {
updateActiveGroup(groupId, opPackageName);
@@ -502,7 +501,7 @@ public class FingerprintService extends SystemService implements IBinder.DeathRe
if (DEBUG) Slog.v(TAG, "startAuthentication(" + opPackageName + ")");
AuthenticationClient client = new AuthenticationClient(getContext(), mHalDeviceId, token,
receiver, realUserId, groupId, opId, restricted, opPackageName) {
receiver, callingUserId, groupId, opId, restricted, opPackageName) {
@Override
public boolean handleFailedAttempt() {
mFailedAttempts++;
@@ -541,13 +540,13 @@ public class FingerprintService extends SystemService implements IBinder.DeathRe
startClient(client, true /* initiatedByClient */);
}
private void startEnrollment(IBinder token, byte [] cryptoToken, int userId, int groupId,
private void startEnrollment(IBinder token, byte [] cryptoToken, int callingUserId, int groupId,
IFingerprintServiceReceiver receiver, int flags, boolean restricted,
String opPackageName) {
updateActiveGroup(groupId, opPackageName);
EnrollClient client = new EnrollClient(getContext(), mHalDeviceId, token, receiver,
userId, groupId, cryptoToken, restricted, opPackageName) {
callingUserId, groupId, cryptoToken, restricted, opPackageName) {
@Override
public IFingerprintDaemon getFingerprintDaemon() {
@@ -687,9 +686,9 @@ public class FingerprintService extends SystemService implements IBinder.DeathRe
checkPermission(MANAGE_FINGERPRINT);
final int limit = mContext.getResources().getInteger(
com.android.internal.R.integer.config_fingerprintMaxTemplatesPerUser);
final int callingUid = Binder.getCallingUid();
final int userId = UserHandle.getUserId(callingUid);
final int enrolled = FingerprintService.this.getEnrolledFingerprints(userId).size();
final int callingUserId = UserHandle.getCallingUserId();
final int enrolled = FingerprintService.this.
getEnrolledFingerprints(callingUserId).size();
if (enrolled >= limit) {
Slog.w(TAG, "Too many fingerprints registered");
return;
@@ -705,7 +704,7 @@ public class FingerprintService extends SystemService implements IBinder.DeathRe
mHandler.post(new Runnable() {
@Override
public void run() {
startEnrollment(token, cryptoToken, userId, groupId, receiver, flags,
startEnrollment(token, cryptoToken, callingUserId, groupId, receiver, flags,
restricted, opPackageName);
}
});
@@ -735,7 +734,8 @@ public class FingerprintService extends SystemService implements IBinder.DeathRe
public void authenticate(final IBinder token, final long opId, final int groupId,
final IFingerprintServiceReceiver receiver, final int flags,
final String opPackageName) {
final int realUserId = Binder.getCallingUid();
final int callingUid = Binder.getCallingUid();
final int callingUserId = UserHandle.getCallingUserId();
final int pid = Binder.getCallingPid();
final boolean restricted = isRestricted();
mHandler.post(new Runnable() {
@@ -743,11 +743,11 @@ public class FingerprintService extends SystemService implements IBinder.DeathRe
public void run() {
MetricsLogger.histogram(mContext, "fingerprint_token", opId != 0L ? 1 : 0);
if (!canUseFingerprint(opPackageName, true /* foregroundOnly */,
realUserId, pid)) {
callingUid, pid)) {
if (DEBUG) Slog.v(TAG, "authenticate(): reject " + opPackageName);
return;
}
startAuthentication(token, opId, realUserId, groupId, receiver,
startAuthentication(token, opId, callingUserId, groupId, receiver,
flags, restricted, opPackageName);
}
});
@@ -797,11 +797,11 @@ public class FingerprintService extends SystemService implements IBinder.DeathRe
final IFingerprintServiceReceiver receiver) {
checkPermission(MANAGE_FINGERPRINT); // TODO: Maybe have another permission
final boolean restricted = isRestricted();
final int realUserId = Binder.getCallingUid();
final int callingUserId = UserHandle.getCallingUserId();
mHandler.post(new Runnable() {
@Override
public void run() {
startRemove(token, fingerId, realUserId, groupId, receiver, restricted);
startRemove(token, fingerId, callingUserId, groupId, receiver, restricted);
}
});

View File

@@ -45,7 +45,7 @@ public abstract class RemovalClient extends ClientMonitor {
IFingerprintDaemon daemon = getFingerprintDaemon();
// The fingerprint template ids will be removed when we get confirmation from the HAL
try {
final int result = daemon.remove(mFingerId, getUserId());
final int result = daemon.remove(mFingerId, getGroupId());
if (result != 0) {
Slog.w(TAG, "startRemove with id = " + mFingerId + " failed, result=" + result);
onError(FingerprintManager.FINGERPRINT_ERROR_HW_UNAVAILABLE);