{
const uint32_t flag2 = flag & (MATCH_POLICY_ACTION|MATCH_POLICY_ARN) ?
MATCH_CASE_INSENSITIVE : 0;
+ const bool colonblocks = !(flag & (MATCH_POLICY_RESOURCE |
+ MATCH_POLICY_STRING));
const auto npos = boost::string_view::npos;
boost::string_view::size_type last_pos_input = 0, last_pos_pattern = 0;
while (true) {
- auto cur_pos_input = input.find(":", last_pos_input);
- auto cur_pos_pattern = pattern.find(":", last_pos_pattern);
+ auto cur_pos_input = colonblocks ? input.find(":", last_pos_input) : npos;
+ auto cur_pos_pattern =
+ colonblocks ? pattern.find(":", last_pos_pattern) : npos;
auto substr_input = input.substr(last_pos_input, cur_pos_input);
auto substr_pattern = pattern.substr(last_pos_pattern, cur_pos_pattern);
return false;
}
- if (!match_policy(resource, candidate.resource, MATCH_POLICY_ARN)) {
+ if (!match_policy(resource, candidate.resource, MATCH_POLICY_RESOURCE)) {
return false;
}
EXPECT_TRUE(match_policy("a:b:c", "a:b:c", flag));
EXPECT_FALSE(match_policy("a:b:c", "A:B:C", flag)); // case sensitive
EXPECT_TRUE(match_policy("a:*:e", "a:bcd:e", flag));
- EXPECT_FALSE(match_policy("a:*", "a:b:c", flag)); // cannot span segments
+ EXPECT_TRUE(match_policy("a:*", "a:b:c", flag)); // can span segments
}
TEST(MatchPolicy, ARN)
EXPECT_TRUE(match_policy("a:b:c", "a:b:c", flag));
EXPECT_FALSE(match_policy("a:b:c", "A:B:C", flag)); // case sensitive
EXPECT_TRUE(match_policy("a:*:e", "a:bcd:e", flag));
- EXPECT_FALSE(match_policy("a:*", "a:b:c", flag)); // cannot span segments
+ EXPECT_TRUE(match_policy("a:*", "a:b:c", flag)); // can span segments
}