| 1489 | } |
| 1490 | |
| 1491 | bool AccessControlBuiltInImpl::search_permissions( |
| 1492 | const char* topic_name, |
| 1493 | const DDS::Security::DomainId_t domain_id, |
| 1494 | const DDS::PartitionQosPolicy& partition, |
| 1495 | const Permissions::PublishSubscribe_t pub_or_sub, |
| 1496 | const Permissions::Grant& grant, |
| 1497 | time_t now_utc, |
| 1498 | time_t& expiration_time, |
| 1499 | DDS::Security::SecurityException& ex) |
| 1500 | { |
| 1501 | for (Permissions::Rules::const_iterator rit = grant.rules.begin(); rit != grant.rules.end(); ++rit) { |
| 1502 | if (rit->domains.has(domain_id)) { |
| 1503 | for (Permissions::Actions::const_iterator ait = rit->actions.begin(); ait != rit->actions.end(); ++ait) { |
| 1504 | if (ait->ps_type == pub_or_sub && |
| 1505 | ait->topic_matches(topic_name) && |
| 1506 | ait->partitions_match(partition.name, rit->ad_type) && |
| 1507 | ait->valid(now_utc)) { |
| 1508 | if (rit->ad_type == Permissions::ALLOW) { |
| 1509 | if (ait->validity.not_after != 0) { |
| 1510 | expiration_time = std::min(expiration_time, ait->validity.not_after); |
| 1511 | } |
| 1512 | return true; |
| 1513 | } else { |
| 1514 | return CommonUtilities::set_security_error(ex, -1, 0, "AccessControlBuiltInImpl: DENY rule matched"); |
| 1515 | } |
| 1516 | } |
| 1517 | } |
| 1518 | } |
| 1519 | } |
| 1520 | |
| 1521 | if (grant.default_permission == Permissions::ALLOW) { |
| 1522 | return true; |
| 1523 | } else { |
| 1524 | return CommonUtilities::set_security_error(ex, -1, 0, "AccessControlBuiltInImpl: No matching rule for topic, default permission is DENY."); |
| 1525 | } |
| 1526 | } |
| 1527 | |
| 1528 | void AccessControlBuiltInImpl::parse_class_id( |
| 1529 | const std::string& class_id, |
nothing calls this directly
no test coverage detected