Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
e
os
GmsCore
Commits
4713797e
Verified
Commit
4713797e
authored
Jun 01, 2019
by
Marvin W.
🐿
Browse files
Fix calling package detection in KK+
parent
a74ce16d
Changes
2
Hide whitespace changes
Inline
Side-by-side
play-services-core/src/main/java/org/microg/gms/auth/AccountContentProvider.java
View file @
4713797e
...
...
@@ -30,8 +30,6 @@ import android.os.Bundle;
import
android.support.annotation.Nullable
;
import
android.util.Log
;
import
com.google.android.gms.R
;
import
org.microg.gms.common.PackageUtils
;
import
java.util.Arrays
;
...
...
@@ -52,7 +50,12 @@ public class AccountContentProvider extends ContentProvider {
@Nullable
@Override
public
Bundle
call
(
String
method
,
String
arg
,
Bundle
extras
)
{
String
packageName
=
PackageUtils
.
packageFromProcessId
(
getContext
(),
Binder
.
getCallingPid
());
String
suggestedPackageName
=
null
;
if
(
Build
.
VERSION
.
SDK_INT
>
Build
.
VERSION_CODES
.
KITKAT
)
{
suggestedPackageName
=
getCallingPackage
();
}
String
packageName
=
PackageUtils
.
getAndCheckCallingPackage
(
getContext
(),
suggestedPackageName
);
Log
.
d
(
TAG
,
"Call from "
+
packageName
);
if
(!
PackageUtils
.
callerHasExtendedAccess
(
getContext
()))
{
String
[]
packagesForUid
=
getContext
().
getPackageManager
().
getPackagesForUid
(
Binder
.
getCallingUid
());
if
(
packagesForUid
!=
null
&&
packagesForUid
.
length
!=
0
)
...
...
@@ -64,7 +67,14 @@ public class AccountContentProvider extends ContentProvider {
if
(
PROVIDER_METHOD_GET_ACCOUNTS
.
equals
(
method
)
&&
AuthConstants
.
DEFAULT_ACCOUNT_TYPE
.
equals
(
arg
))
{
Bundle
result
=
new
Bundle
();
AccountManager
am
=
AccountManager
.
get
(
getContext
());
result
.
putParcelableArray
(
PROVIDER_EXTRA_ACCOUNTS
,
Build
.
VERSION
.
SDK_INT
>=
Build
.
VERSION_CODES
.
JELLY_BEAN_MR2
?
am
.
getAccountsByTypeForPackage
(
arg
,
packageName
)
:
am
.
getAccountsByType
(
arg
));
Account
[]
accounts
=
null
;
if
(
Build
.
VERSION
.
SDK_INT
>=
Build
.
VERSION_CODES
.
JELLY_BEAN_MR2
)
{
accounts
=
am
.
getAccountsByTypeForPackage
(
arg
,
packageName
);
}
if
(
accounts
==
null
||
accounts
.
length
==
0
)
{
accounts
=
am
.
getAccountsByType
(
arg
);
}
result
.
putParcelableArray
(
PROVIDER_EXTRA_ACCOUNTS
,
accounts
);
return
result
;
}
else
if
(
PROVIDER_METHOD_CLEAR_PASSWORD
.
equals
(
method
))
{
Account
a
=
extras
.
getParcelable
(
PROVIDER_EXTRA_CLEAR_PASSWORD
);
...
...
play-services-core/src/main/java/org/microg/gms/common/PackageUtils.java
View file @
4713797e
...
...
@@ -110,6 +110,16 @@ public class PackageUtils {
return
null
;
}
@Nullable
public
static
String
getCallingPackage
(
Context
context
)
{
int
callingUid
=
Binder
.
getCallingUid
(),
callingPid
=
Binder
.
getCallingPid
();
String
packageName
=
packageFromProcessId
(
context
,
callingPid
);
if
(
packageName
==
null
)
{
packageName
=
firstPackageFromUserId
(
context
,
callingUid
);
}
return
packageName
;
}
@Nullable
public
static
String
getAndCheckCallingPackage
(
Context
context
,
String
suggestedPackageName
)
{
return
getAndCheckCallingPackage
(
context
,
suggestedPackageName
,
0
);
...
...
@@ -152,10 +162,12 @@ public class PackageUtils {
packageName
=
packagesForUid
[
0
];
}
else
if
(
Arrays
.
asList
(
packagesForUid
).
contains
(
suggestedPackageName
))
{
packageName
=
suggestedPackageName
;
}
else
if
(
suggestedPackageName
==
null
)
{
packageName
=
packagesForUid
[
0
];
}
}
}
if
(
packageName
!=
null
&&
!
packageName
.
equals
(
suggestedPackageName
))
{
if
(
packageName
!=
null
&&
suggestedPackageName
!=
null
&&
!
packageName
.
equals
(
suggestedPackageName
))
{
throw
new
SecurityException
(
"UID ["
+
callingUid
+
"] is not related to packageName ["
+
packageName
+
"]"
);
}
return
packageName
;
...
...
@@ -172,6 +184,15 @@ public class PackageUtils {
return
null
;
}
@Nullable
public
static
String
firstPackageFromUserId
(
Context
context
,
int
uid
)
{
String
[]
packagesForUid
=
context
.
getPackageManager
().
getPackagesForUid
(
uid
);
if
(
packagesForUid
!=
null
&&
packagesForUid
.
length
!=
0
)
{
return
packagesForUid
[
0
];
}
return
null
;
}
@SuppressWarnings
(
"deprecation"
)
public
static
String
packageFromPendingIntent
(
PendingIntent
pi
)
{
if
(
pi
==
null
)
return
null
;
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment