auto policyLevel = getPrivilegeMappedPolicy(appId, privilege);
+ if (policyLevel.empty()) {
+ ALOGD("Privilege " << privilege << " is not a privacy privilege for app " << appId);
+ return ASKUSER_CHECK_RESULT_DENY;
+ }
if (policyLevel == "Allow") {
return ASKUSER_CHECK_RESULT_ALLOW;
}
return ASKUSER_CHECK_RESULT_ASK;
}
+ ALOGE("Unknown policy level set : " << policyLevel <<
+ " for app " << appId << " and privilege " << privilege);
return ASKUSER_CHECK_RESULT_DENY;
}
}
Policy getMinimumPolicy(const std::vector<Policy> &policies) {
+ if (policies.empty())
+ return "";
+
Policy minimumPolicy = "Allow";
for (auto &policy : policies) {
Policy getPrivaciesPolicy(const std::string &appId, const std::vector<Privacy> &privacies) {
std::vector<Policy> policies;
for (auto &privacy : privacies) {
- policies.push_back(calculatePolicyForPrivacy(appId, privacy));
+ Policy privacyPolicy = calculatePolicyForPrivacy(appId, privacy);
+ if (privacyPolicy.empty())
+ continue;
+ policies.push_back(privacyPolicy);
}
return getMinimumPolicy(policies);
}
// Remove privacies which are already allowed - we don't need to spam user more with popups
privacy = removePrivacy;
}
+ if (policy.empty()) {
+ ALOGD("Application doesn't use privacy " << privacy);
+ continue;
+ }
policies.push_back(policy);
}
+
+ if (policies.empty()) {
+ ALOGD("Privilege " << privilege << " is not privacy for app : " << conn.appId);
+ m_serverChannel->popupResponse(fd, id, ASKUSER_DENY_FOREVER);
+ return;
+ }
std::string policyLevel = getMinimumPolicy(policies);
ALOGD("Privilege policy level calculated to : " << policyLevel);