From 4503dc6fbaafab5341b91116f552f666d2f9b532 Mon Sep 17 00:00:00 2001 From: Etan Cohen Date: Thu, 11 Aug 2016 09:31:21 -0700 Subject: [PATCH] [NAN] Provide calling package name to service Useful for permission checks. Bug: 30000323 Change-Id: I8c7f06cff346437aa24ca5da9822cbd7b20c59c4 (cherry picked from commit 7531a28e2611039a8120305c14a96b8c61fff563) --- core/java/android/app/SystemServiceRegistry.java | 6 +++--- wifi/java/android/net/wifi/nan/IWifiNanManager.aidl | 2 +- wifi/java/android/net/wifi/nan/WifiNanManager.java | 7 +++++-- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/core/java/android/app/SystemServiceRegistry.java b/core/java/android/app/SystemServiceRegistry.java index 55744b935f517..42ddf108a2a55 100644 --- a/core/java/android/app/SystemServiceRegistry.java +++ b/core/java/android/app/SystemServiceRegistry.java @@ -515,15 +515,15 @@ final class SystemServiceRegistry { }}); registerService(Context.WIFI_NAN_SERVICE, WifiNanManager.class, - new StaticServiceFetcher() { + new CachedServiceFetcher() { @Override - public WifiNanManager createService() { + public WifiNanManager createService(ContextImpl ctx) { IBinder b = ServiceManager.getService(Context.WIFI_NAN_SERVICE); IWifiNanManager service = IWifiNanManager.Stub.asInterface(b); if (service == null) { return null; } - return new WifiNanManager(service); + return new WifiNanManager(ctx.getOuterContext(), service); }}); registerService(Context.WIFI_SCANNING_SERVICE, WifiScanner.class, diff --git a/wifi/java/android/net/wifi/nan/IWifiNanManager.aidl b/wifi/java/android/net/wifi/nan/IWifiNanManager.aidl index b8dd1a510b129..17ec1bc240e06 100644 --- a/wifi/java/android/net/wifi/nan/IWifiNanManager.aidl +++ b/wifi/java/android/net/wifi/nan/IWifiNanManager.aidl @@ -38,7 +38,7 @@ interface IWifiNanManager boolean isUsageEnabled(); // client API - int connect(in IBinder binder, in IWifiNanEventCallback callback, + int connect(in IBinder binder, in String callingPackage, in IWifiNanEventCallback callback, in ConfigRequest configRequest); void disconnect(int clientId, in IBinder binder); diff --git a/wifi/java/android/net/wifi/nan/WifiNanManager.java b/wifi/java/android/net/wifi/nan/WifiNanManager.java index dfb1afe3582ec..8a499d34094e2 100644 --- a/wifi/java/android/net/wifi/nan/WifiNanManager.java +++ b/wifi/java/android/net/wifi/nan/WifiNanManager.java @@ -22,6 +22,7 @@ import android.annotation.Nullable; import android.annotation.SdkConstant; import android.annotation.SdkConstant.SdkConstantType; import android.annotation.SystemApi; +import android.content.Context; import android.net.ConnectivityManager; import android.net.NetworkRequest; import android.net.wifi.RttManager; @@ -220,6 +221,7 @@ public class WifiNanManager { public static final int WIFI_NAN_DATA_PATH_ROLE_RESPONDER = 1; + private final Context mContext; private final IWifiNanManager mService; private final Object mLock = new Object(); // lock access to the following vars @@ -239,7 +241,8 @@ public class WifiNanManager { /** * {@hide} */ - public WifiNanManager(IWifiNanManager service) { + public WifiNanManager(Context context, IWifiNanManager service) { + mContext = context; mService = service; } @@ -324,7 +327,7 @@ public class WifiNanManager { mLooper = looper; try { - mClientId = mService.connect(mBinder, + mClientId = mService.connect(mBinder, mContext.getOpPackageName(), new WifiNanEventCallbackProxy(this, looper, callback), configRequest); } catch (RemoteException e) { mClientId = INVALID_CLIENT_ID;