diff options
Diffstat (limited to 'cmds/incidentd/src/Privacy.cpp')
-rw-r--r-- | cmds/incidentd/src/Privacy.cpp | 57 |
1 files changed, 34 insertions, 23 deletions
diff --git a/cmds/incidentd/src/Privacy.cpp b/cmds/incidentd/src/Privacy.cpp index 6e55f906087c..386303b038e7 100644 --- a/cmds/incidentd/src/Privacy.cpp +++ b/cmds/incidentd/src/Privacy.cpp @@ -23,6 +23,8 @@ namespace android { namespace os { namespace incidentd { +using namespace android::os; + uint64_t encode_field_id(const Privacy* p) { return (uint64_t)p->type << 32 | p->field_id; } const Privacy* lookup(const Privacy* p, uint32_t fieldId) { @@ -35,39 +37,48 @@ const Privacy* lookup(const Privacy* p, uint32_t fieldId) { return NULL; } -static bool allowDest(const uint8_t dest, const uint8_t policy) { - switch (policy) { - case android::os::DEST_LOCAL: - return dest == android::os::DEST_LOCAL; - case android::os::DEST_EXPLICIT: - case DEST_UNSET: - return dest == android::os::DEST_LOCAL || dest == android::os::DEST_EXPLICIT || - dest == DEST_UNSET; - case android::os::DEST_AUTOMATIC: +static bool isAllowed(const uint8_t policy, const uint8_t check) { + switch (check) { + case PRIVACY_POLICY_LOCAL: + return policy == PRIVACY_POLICY_LOCAL; + case PRIVACY_POLICY_EXPLICIT: + case PRIVACY_POLICY_UNSET: + return policy == PRIVACY_POLICY_LOCAL + || policy == PRIVACY_POLICY_EXPLICIT + || policy == PRIVACY_POLICY_UNSET; + case PRIVACY_POLICY_AUTOMATIC: return true; default: return false; } } -bool PrivacySpec::operator<(const PrivacySpec& other) const { return dest < other.dest; } +PrivacySpec::PrivacySpec(uint8_t argPolicy) { + // TODO: Why on earth do we have two definitions of policy. Maybe + // it's not too late to clean this up. + switch (argPolicy) { + case android::os::PRIVACY_POLICY_AUTOMATIC: + case android::os::PRIVACY_POLICY_EXPLICIT: + case android::os::PRIVACY_POLICY_LOCAL: + mPolicy = argPolicy; + break; + default: + mPolicy = android::os::PRIVACY_POLICY_AUTOMATIC; + break; + } +} -bool PrivacySpec::CheckPremission(const Privacy* privacy, const uint8_t defaultDest) const { - uint8_t policy = privacy != NULL ? privacy->dest : defaultDest; - return allowDest(dest, policy); +bool PrivacySpec::operator<(const PrivacySpec& that) const { + return mPolicy < that.mPolicy; } -bool PrivacySpec::RequireAll() const { return dest == android::os::DEST_LOCAL; } +bool PrivacySpec::CheckPremission(const Privacy* privacy, const uint8_t defaultDest) const { + uint8_t check = privacy != NULL ? privacy->policy : defaultDest; + return isAllowed(mPolicy, check); +} -PrivacySpec PrivacySpec::new_spec(int dest) { - switch (dest) { - case android::os::DEST_AUTOMATIC: - case android::os::DEST_EXPLICIT: - case android::os::DEST_LOCAL: - return PrivacySpec(dest); - default: - return PrivacySpec(android::os::DEST_AUTOMATIC); - } +bool PrivacySpec::RequireAll() const { + return mPolicy == android::os::PRIVACY_POLICY_LOCAL; } } // namespace incidentd |