!1229 无peermac权限时getCurrentP2pGroup和getP2pGroups获取到的mac地址为真实mac

Merge pull request !1229 from jvm/master
This commit is contained in:
openharmony_ci 2023-08-25 10:09:38 +00:00 committed by Gitee
commit 3ab8dcd5a5
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F
13 changed files with 103 additions and 75 deletions

View File

@ -1236,7 +1236,7 @@ ErrCode WifiDeviceProxy::RegisterCallBack(const sptr<IWifiDeviceCallBack> &callb
data.WriteString(eventName);
}
}
WIFI_LOGD("%{public}s, calling uid: %{public}d, pid: %{public}d, tokenId: %{public}d",
WIFI_LOGD("%{public}s, calling uid: %{public}d, pid: %{public}d, tokenId: %{private}d",
__func__, GetCallingUid(), pid, tokenId);
int error = Remote()->SendRequest(static_cast<uint32_t>(DevInterfaceCode::WIFI_SVR_CMD_REGISTER_CALLBACK_CLIENT),
data, reply, option);

View File

@ -1135,7 +1135,7 @@ ErrCode WifiP2pProxy::RegisterCallBack(const sptr<IWifiP2pCallback> &callback, c
data.WriteString(eventName);
}
}
WIFI_LOGD("%{public}s, calling uid: %{public}d, pid: %{public}d, tokenId: %{public}d",
WIFI_LOGD("%{public}s, calling uid: %{public}d, pid: %{public}d, tokenId: %{private}d",
__func__, GetCallingUid(), pid, tokenId);
int error = Remote()->SendRequest(static_cast<uint32_t>(P2PInterfaceCode::WIFI_SVR_CMD_P2P_REGISTER_CALLBACK), data,
reply, option);

View File

@ -350,7 +350,7 @@ ErrCode WifiScanProxy::RegisterCallBack(const sptr<IWifiScanCallback> &callback,
data.WriteString(eventName);
}
}
WIFI_LOGD("%{public}s, calling uid: %{public}d, pid: %{public}d, tokenId: %{public}d",
WIFI_LOGD("%{public}s, calling uid: %{public}d, pid: %{public}d, tokenId: %{private}d",
__func__, GetCallingUid(), pid, tokenId);
int error = Remote()->SendRequest(static_cast<uint32_t>(ScanInterfaceCode::WIFI_SVR_CMD_REGISTER_SCAN_CALLBACK),
data, reply, option);

View File

@ -158,45 +158,18 @@ IsGranted WifiPermissionHelper::MockVerifyPermission(const std::string &permissi
return PERMISSION_GRANTED;
}
int WifiPermissionHelper::VerifyPermission(const std::string &permissionName, const int &pid, const int &uid)
{
#ifdef OHOS_ARCH_LITE
return PERMISSION_GRANTED;
#else
auto callerToken = IPCSkeleton::GetCallingTokenID();
auto tokenType = Security::AccessToken::AccessTokenKit::GetTokenTypeFlag(callerToken);
if (tokenType == Security::AccessToken::ATokenTypeEnum::TOKEN_NATIVE) {
LOGI("callerToken=0x%{public}x has permission_name=%{public}s, pid=0x%{public}x, type=%{public}d",
callerToken, permissionName.c_str(), pid, tokenType);
return PERMISSION_GRANTED;
}
if (tokenType == Security::AccessToken::ATokenTypeEnum::TOKEN_HAP) {
int result = Security::AccessToken::AccessTokenKit::VerifyAccessToken(callerToken, permissionName);
if (result == Security::AccessToken::PermissionState::PERMISSION_GRANTED) {
LOGI("callerToken=0x%{public}x has permission_name=%{public}s, pid=0x%{public}x, type=%{public}d",
callerToken, permissionName.c_str(), pid, tokenType);
return PERMISSION_GRANTED;
}
LOGI("callerToken=0x%{public}x has no permission_name=%{public}s, pid=0x%{public}x, type=%{public}d",
callerToken, permissionName.c_str(), pid, tokenType);
return PERMISSION_DENIED;
}
LOGE("callerToken=0x%{public}x has invalid token, pid=0x%{public}x, type=%{public}d",
callerToken, pid, tokenType);
return PERMISSION_DENIED;
#endif
}
int WifiPermissionHelper::VerifyPermissionEx(const std::string &permissionName, const int &pid,
int WifiPermissionHelper::VerifyPermission(const std::string &permissionName, const int &pid,
const int &uid, const int &tokenId)
{
#ifdef OHOS_ARCH_LITE
return PERMISSION_GRANTED;
#else
auto callerToken = (Security::AccessToken::AccessTokenID)tokenId;
Security::AccessToken::AccessTokenID callerToken = 0;
if (tokenId == 0) {
callerToken = IPCSkeleton::GetCallingTokenID();
} else {
callerToken = (Security::AccessToken::AccessTokenID)tokenId;
}
auto tokenType = Security::AccessToken::AccessTokenKit::GetTokenTypeFlag(callerToken);
if (tokenType == Security::AccessToken::ATokenTypeEnum::TOKEN_NATIVE) {
LOGI("callerToken=0x%{public}x has permission_name=%{public}s, pid=0x%{public}x, type=%{public}d",
@ -225,16 +198,15 @@ int WifiPermissionHelper::VerifyPermissionEx(const std::string &permissionName,
int WifiPermissionHelper::VerifySetWifiInfoPermission(const int &pid, const int &uid)
{
if (VerifyPermission("ohos.permission.SET_WIFI_INFO", pid, uid) == PERMISSION_DENIED) {
if (VerifyPermission("ohos.permission.SET_WIFI_INFO", pid, uid, 0) == PERMISSION_DENIED) {
return PERMISSION_DENIED;
}
return PERMISSION_GRANTED;
}
int WifiPermissionHelper::VerifyGetWifiInfoPermission(const int &pid, const int &uid)
{
if (VerifyPermission("ohos.permission.GET_WIFI_INFO", pid, uid) == PERMISSION_DENIED) {
if (VerifyPermission("ohos.permission.GET_WIFI_INFO", pid, uid, 0) == PERMISSION_DENIED) {
return PERMISSION_DENIED;
}
return PERMISSION_GRANTED;
@ -242,7 +214,7 @@ int WifiPermissionHelper::VerifyGetWifiInfoPermission(const int &pid, const int
int WifiPermissionHelper::VerifySetWifiConfigPermission(const int &pid, const int &uid)
{
if (VerifyPermission("ohos.permission.SET_WIFI_CONFIG", pid, uid) == PERMISSION_DENIED) {
if (VerifyPermission("ohos.permission.SET_WIFI_CONFIG", pid, uid, 0) == PERMISSION_DENIED) {
return PERMISSION_DENIED;
}
return PERMISSION_GRANTED;
@ -250,7 +222,7 @@ int WifiPermissionHelper::VerifySetWifiConfigPermission(const int &pid, const in
int WifiPermissionHelper::VerifyGetWifiConfigPermission(const int &pid, const int &uid)
{
if (VerifyPermission("ohos.permission.GET_WIFI_CONFIG", pid, uid) == PERMISSION_DENIED) {
if (VerifyPermission("ohos.permission.GET_WIFI_CONFIG", pid, uid, 0) == PERMISSION_DENIED) {
return PERMISSION_DENIED;
}
return PERMISSION_GRANTED;
@ -258,7 +230,7 @@ int WifiPermissionHelper::VerifyGetWifiConfigPermission(const int &pid, const in
int WifiPermissionHelper::VerifyGetScanInfosPermission(const int &pid, const int &uid)
{
if (VerifyPermission("ohos.permission.LOCATION", pid, uid) == PERMISSION_DENIED) {
if (VerifyPermission("ohos.permission.LOCATION", pid, uid, 0) == PERMISSION_DENIED) {
return PERMISSION_DENIED;
}
return PERMISSION_GRANTED;
@ -266,7 +238,7 @@ int WifiPermissionHelper::VerifyGetScanInfosPermission(const int &pid, const int
int WifiPermissionHelper::VerifyGetWifiLocalMacPermission(const int &pid, const int &uid)
{
if (VerifyPermission("ohos.permission.GET_WIFI_LOCAL_MAC", pid, uid) == PERMISSION_DENIED) {
if (VerifyPermission("ohos.permission.GET_WIFI_LOCAL_MAC", pid, uid, 0) == PERMISSION_DENIED) {
return PERMISSION_DENIED;
}
return PERMISSION_GRANTED;
@ -274,7 +246,7 @@ int WifiPermissionHelper::VerifyGetWifiLocalMacPermission(const int &pid, const
int WifiPermissionHelper::VerifyWifiConnectionPermission(const int &pid, const int &uid)
{
if (VerifyPermission("ohos.permission.MANAGE_WIFI_CONNECTION", pid, uid) == PERMISSION_DENIED) {
if (VerifyPermission("ohos.permission.MANAGE_WIFI_CONNECTION", pid, uid, 0) == PERMISSION_DENIED) {
return PERMISSION_DENIED;
}
return PERMISSION_GRANTED;
@ -282,7 +254,7 @@ int WifiPermissionHelper::VerifyWifiConnectionPermission(const int &pid, const i
int WifiPermissionHelper::VerifyGetWifiDirectDevicePermission(const int &pid, const int &uid)
{
if (VerifyPermission("ohos.permission.LOCATION", pid, uid) == PERMISSION_DENIED) {
if (VerifyPermission("ohos.permission.LOCATION", pid, uid, 0) == PERMISSION_DENIED) {
return PERMISSION_DENIED;
}
return PERMISSION_GRANTED;
@ -290,7 +262,7 @@ int WifiPermissionHelper::VerifyGetWifiDirectDevicePermission(const int &pid, co
int WifiPermissionHelper::VerifyManageWifiHotspotPermission(const int &pid, const int &uid)
{
if (VerifyPermission("ohos.permission.MANAGE_WIFI_HOTSPOT", pid, uid) == PERMISSION_DENIED) {
if (VerifyPermission("ohos.permission.MANAGE_WIFI_HOTSPOT", pid, uid, 0) == PERMISSION_DENIED) {
return PERMISSION_DENIED;
}
return PERMISSION_GRANTED;
@ -298,7 +270,7 @@ int WifiPermissionHelper::VerifyManageWifiHotspotPermission(const int &pid, cons
int WifiPermissionHelper::VerifyGetWifiPeersMacPermission(const int &pid, const int &uid)
{
if (VerifyPermission("ohos.permission.GET_WIFI_PEERS_MAC", pid, uid) == PERMISSION_DENIED) {
if (VerifyPermission("ohos.permission.GET_WIFI_PEERS_MAC", pid, uid, 0) == PERMISSION_DENIED) {
return PERMISSION_DENIED;
}
return PERMISSION_GRANTED;
@ -306,7 +278,7 @@ int WifiPermissionHelper::VerifyGetWifiPeersMacPermission(const int &pid, const
int WifiPermissionHelper::VerifyGetWifiPeersMacPermissionEx(const int &pid, const int &uid, const int &tokenId)
{
if (VerifyPermissionEx("ohos.permission.GET_WIFI_PEERS_MAC", pid, uid, tokenId) == PERMISSION_DENIED) {
if (VerifyPermission("ohos.permission.GET_WIFI_PEERS_MAC", pid, uid, tokenId) == PERMISSION_DENIED) {
return PERMISSION_DENIED;
}
return PERMISSION_GRANTED;
@ -314,7 +286,7 @@ int WifiPermissionHelper::VerifyGetWifiPeersMacPermissionEx(const int &pid, cons
int WifiPermissionHelper::VerifyGetWifiInfoInternalPermission(const int &pid, const int &uid)
{
if (VerifyPermission("ohos.permission.GET_WIFI_INFO_INTERNAL", pid, uid) == PERMISSION_DENIED) {
if (VerifyPermission("ohos.permission.GET_WIFI_INFO_INTERNAL", pid, uid, 0) == PERMISSION_DENIED) {
return PERMISSION_DENIED;
}
return PERMISSION_GRANTED;
@ -322,7 +294,7 @@ int WifiPermissionHelper::VerifyGetWifiInfoInternalPermission(const int &pid, co
int WifiPermissionHelper::VerifyManageWifiHotspotExtPermission(const int &pid, const int &uid)
{
if (VerifyPermission("ohos.permission.MANAGE_WIFI_HOTSPOT_EXT", pid, uid) == PERMISSION_DENIED) {
if (VerifyPermission("ohos.permission.MANAGE_WIFI_HOTSPOT_EXT", pid, uid, 0) == PERMISSION_DENIED) {
return PERMISSION_DENIED;
}
return PERMISSION_GRANTED;

View File

@ -69,19 +69,7 @@ public:
* @param uid - User ID.[in]
* @return int
*/
static int VerifyPermission(const std::string &permissionName, const int &pid, const int &uid);
/**
* @Description : Verify Permission.
*
* @param permissionName - Permission name.[in]
* @param pid - Process ID.[in]
* @param uid - User ID.[in]
* @param tokenId - token ID.[in]
* @return int
*/
static int VerifyPermissionEx(const std::string &permissionName, const int &pid,
const int &uid, const int &tokenId);
static int VerifyPermission(const std::string &permissionName, const int &pid, const int &uid, const int &tokenId);
/**
* @Description : Verify Set Wifi Information Permission.

View File

@ -678,7 +678,7 @@ void WifiDeviceStub::OnRegisterCallBack(uint32_t code, MessageParcel &data, Mess
event.emplace_back(data.ReadString());
}
}
WIFI_LOGD("%{public}s, get pid: %{public}d, tokenId: %{public}d", __func__, pid, tokenId);
WIFI_LOGD("%{public}s, get pid: %{public}d, tokenId: %{private}d", __func__, pid, tokenId);
if (mSingleCallback) {
ret = RegisterCallBack(callback_, event);

View File

@ -159,7 +159,7 @@ ErrCode WifiInternalEventDispatcher::AddStaCallback(
callbackInfo.callingPid = pid;
callbackInfo.callingTokenId = tokenId;
callbackInfo.regCallBackEventId.emplace(eventIter->second);
WIFI_LOGD("%{public}s, add uid: %{public}d, pid: %{public}d, callback event:%{public}d, tokenId: %{public}d",
WIFI_LOGD("%{public}s, add uid: %{public}d, pid: %{public}d, callback event:%{public}d, tokenId: %{private}d",
__func__, callbackInfo.callingUid, callbackInfo.callingPid,
eventIter->second, callbackInfo.callingTokenId);
}
@ -236,7 +236,7 @@ ErrCode WifiInternalEventDispatcher::AddScanCallback(
callbackInfo.callingPid = pid;
callbackInfo.callingTokenId = tokenId;
callbackInfo.regCallBackEventId.emplace(eventIter->second);
WIFI_LOGD("%{public}s, add uid: %{public}d, pid: %{public}d, callback event:%{public}d, tokenId: %{public}d",
WIFI_LOGD("%{public}s, add uid: %{public}d, pid: %{public}d, callback event:%{public}d, tokenId: %{private}d",
__func__, callbackInfo.callingUid, callbackInfo.callingPid,
eventIter->second, callbackInfo.callingTokenId);
}
@ -423,7 +423,7 @@ ErrCode WifiInternalEventDispatcher::AddP2pCallback(
callbackInfo.callingPid = pid;
callbackInfo.callingTokenId = tokenId;
callbackInfo.regCallBackEventId.emplace(eventIter->second);
WIFI_LOGI("%{public}s, add uid: %{public}d, pid: %{public}d, callback event: %{public}d, tokenId: %{public}d",
WIFI_LOGI("%{public}s, add uid: %{public}d, pid: %{public}d, callback event: %{public}d, tokenId: %{private}d",
__func__, callbackInfo.callingUid, callbackInfo.callingPid,
eventIter->second, callbackInfo.callingTokenId);
}

View File

@ -46,6 +46,9 @@ bool WifiP2pGroupManager::AddGroup(const WifiP2pGroupInfo &group)
return true;
}
}
#ifdef SUPPORT_RANDOM_MAC_ADDR
AddMacAddrPairInfo(group);
#endif
groupsInfo.push_back(group);
return true;
}
@ -55,10 +58,16 @@ bool WifiP2pGroupManager::AddOrUpdateGroup(const WifiP2pGroupInfo &group)
std::unique_lock<std::mutex> lock(groupMutex);
for (auto it = groupsInfo.begin(); it != groupsInfo.end(); ++it) {
if (*it == group) {
#ifdef SUPPORT_RANDOM_MAC_ADDR
RemoveMacAddrPairInfo(group);
#endif
groupsInfo.erase(it);
break;
}
}
#ifdef SUPPORT_RANDOM_MAC_ADDR
AddMacAddrPairInfo(group);
#endif
groupsInfo.push_back(group);
return true;
}
@ -67,6 +76,9 @@ bool WifiP2pGroupManager::RemoveGroup(const WifiP2pGroupInfo &group)
std::unique_lock<std::mutex> lock(groupMutex);
for (auto it = groupsInfo.begin(); it != groupsInfo.end(); ++it) {
if (*it == group) {
#ifdef SUPPORT_RANDOM_MAC_ADDR
RemoveMacAddrPairInfo(group);
#endif
groupsInfo.erase(it);
return true;
}
@ -77,6 +89,11 @@ int WifiP2pGroupManager::ClearAll()
{
std::unique_lock<std::mutex> lock(groupMutex);
int groupSize = groupsInfo.size();
#ifdef SUPPORT_RANDOM_MAC_ADDR
for (auto iter = groupsInfo.begin(); iter != groupsInfo.end(); ++iter) {
RemoveMacAddrPairInfo(*iter);
}
#endif
groupsInfo.clear();
return groupSize;
}
@ -94,7 +111,9 @@ void WifiP2pGroupManager::UpdateWpaGroup(const WifiP2pGroupInfo &group)
return;
}
}
#ifdef SUPPORT_RANDOM_MAC_ADDR
AddMacAddrPairInfo(group);
#endif
groupsInfo.push_back(group);
}
@ -256,5 +275,41 @@ void WifiP2pGroupManager::UpdateGroupsNetwork(std::map<int, WifiP2pGroupInfo> wp
}
}
}
#ifdef SUPPORT_RANDOM_MAC_ADDR
void WifiP2pGroupManager::AddMacAddrPairInfo(const WifiP2pGroupInfo &group)
{
WifiP2pDevice owner = group.GetOwner();
WIFI_LOGD("%{public}s add mac address, ownerName:%{private}s, address:%{private}s, type:%{public}d",
__func__, owner.GetDeviceName().c_str(),
owner.GetDeviceAddress().c_str(), owner.GetDeviceAddressType());
WifiSettings::GetInstance().StoreWifiMacAddrPairInfo(WifiMacAddrInfoType::P2P_MACADDR_INFO,
owner.GetDeviceAddress());
std::vector<WifiP2pDevice> clientVec = group.GetClientDevices();
for (auto iter = clientVec.begin(); iter != clientVec.end(); ++iter) {
WifiSettings::GetInstance().StoreWifiMacAddrPairInfo(WifiMacAddrInfoType::P2P_MACADDR_INFO,
iter->GetDeviceAddress());
}
}
void WifiP2pGroupManager::RemoveMacAddrPairInfo(const WifiP2pGroupInfo &group)
{
WifiP2pDevice owner = group.GetOwner();
WIFI_LOGD("%{public}s remove mac address, ownerName:%{private}s, address:%{private}s, type:%{public}d",
__func__, owner.GetDeviceName().c_str(),
owner.GetDeviceAddress().c_str(), owner.GetDeviceAddressType());
WifiMacAddrInfo macAddrInfo;
macAddrInfo.bssid = owner.GetDeviceAddress();
macAddrInfo.bssidType = owner.GetDeviceAddressType();
WifiSettings::GetInstance().RemoveMacAddrPairs(WifiMacAddrInfoType::P2P_MACADDR_INFO, macAddrInfo);
std::vector<WifiP2pDevice> clientVec = group.GetClientDevices();
for (auto iter = clientVec.begin(); iter != clientVec.end(); ++iter) {
WifiMacAddrInfo clientMacAddrInfo;
clientMacAddrInfo.bssid = iter->GetDeviceAddress();
clientMacAddrInfo.bssidType = iter->GetDeviceAddressType();
WifiSettings::GetInstance().RemoveMacAddrPairs(WifiMacAddrInfoType::P2P_MACADDR_INFO, clientMacAddrInfo);
}
}
#endif
} // namespace Wifi
} // namespace OHOS

View File

@ -186,6 +186,7 @@ public:
inline void SetCurrentGroup(const WifiP2pGroupInfo &group)
{
currentGroup = group;
AddMacAddrPairInfo(group);
RefreshCurrentGroupFromGroups();
}
@ -193,7 +194,16 @@ public:
{
return currentGroup;
}
#ifdef SUPPORT_RANDOM_MAC_ADDR
/**
* @Description - add mac address information
*/
void AddMacAddrPairInfo(const WifiP2pGroupInfo &group);
/**
* @Description - remove mac address information
*/
void RemoveMacAddrPairInfo(const WifiP2pGroupInfo &group);
#endif
private:
/**
* @Description - Synchronize from the current group to all registry groups.

View File

@ -639,7 +639,7 @@ void WifiP2pStub::OnRegisterCallBack(uint32_t code, MessageParcel &data, Message
event.emplace_back(data.ReadString());
}
}
WIFI_LOGD("%{public}s, get pid: %{public}d, tokenId: %{public}d", __func__, pid, tokenId);
WIFI_LOGD("%{public}s, get pid: %{public}d, tokenId: %{private}d", __func__, pid, tokenId);
if (mSingleCallback) {
ret = RegisterCallBack(callback_, event);

View File

@ -180,9 +180,11 @@ int WifiScanStub::OnIsWifiClosedScan(uint32_t code, MessageParcel &data, Message
int WifiScanStub::OnGetScanInfoList(uint32_t code, MessageParcel &data, MessageParcel &reply, MessageOption &option)
{
WIFI_LOGD("run OnGetScanInfoList code %{public}u, datasize %{public}zu", code, data.GetRawDataSize());
bool compatible = data.ReadBool();
WIFI_LOGD("run OnGetScanInfoList code %{public}u, datasize %{public}zu, compatible:%{public}d",
code, data.GetRawDataSize(), compatible);
std::vector<WifiScanInfo> result;
ErrCode ret = GetScanInfoList(result);
ErrCode ret = GetScanInfoList(result, compatible);
reply.WriteInt32(0);
reply.WriteInt32(ret);
if (ret != WIFI_OPT_SUCCESS) {
@ -243,7 +245,7 @@ int WifiScanStub::OnRegisterCallBack(uint32_t code, MessageParcel &data, Message
event.emplace_back(data.ReadString());
}
}
WIFI_LOGD("%{public}s, get pid: %{public}d, tokenId: %{public}d", __func__, pid, tokenId);
WIFI_LOGD("%{public}s, get pid: %{public}d, tokenId: %{private}d", __func__, pid, tokenId);
if (mSingleCallback) {
ret = RegisterCallBack(callback_, event);

View File

@ -178,7 +178,7 @@ HWTEST_F(WifiPermissionHelperTest, VerifyPermission001, TestSize.Level1)
{
WIFI_LOGI("VerifyPermission001 enter");
std::string permissionName = "ohos.permission.GET_WIFI_INFO";
EXPECT_TRUE(pWifiPermissionHelper->VerifyPermission(permissionName, pid, uid) == PERMISSION_DENIED);
EXPECT_TRUE(pWifiPermissionHelper->VerifyPermission(permissionName, pid, uid, 0) == PERMISSION_DENIED);
}
/**
* @tc.name: VerifyAllPermission001

View File

@ -150,6 +150,7 @@ ohos_unittest("wifi_p2p_test") {
]
defines = [ "AP_INSTANCE_MAX_NUM=$wifi_feature_with_ap_num" ]
defines += [ "SUPPORT_RANDOM_MAC_ADDR" ]
part_name = "wifi"
subsystem_name = "communication"
}