MCPcopy Create free account
hub / github.com/OpenDDS/OpenDDS / search_permissions

Method search_permissions

dds/DCPS/security/AccessControlBuiltInImpl.cpp:1491–1526  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1489}
1490
1491bool 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
1528void AccessControlBuiltInImpl::parse_class_id(
1529 const std::string& class_id,

Callers

nothing calls this directly

Calls 7

set_security_errorFunction · 0.85
topic_matchesMethod · 0.80
partitions_matchMethod · 0.80
beginMethod · 0.45
endMethod · 0.45
hasMethod · 0.45
validMethod · 0.45

Tested by

no test coverage detected