int Adaptation::AccessRule::LastId = 0;
-Adaptation::AccessRule::AccessRule(): id(++LastId), acl(NULL)
+Adaptation::AccessRule::AccessRule(const String &aGroupId): id(++LastId), groupId(aGroupId), acl(NULL)
{
}
void
Adaptation::AccessRule::parse(ConfigParser &parser)
{
- ConfigParser::ParseString(&groupId);
aclParseAccessLine(parser, &acl);
}
return NULL;
}
+
+Adaptation::AccessRule *
+Adaptation::FindRuleByGroupId(const String &groupId)
+{
+ typedef AccessRules::iterator ARI;
+ for (ARI i = AllRules().begin(); i != AllRules().end(); ++i) {
+ if ((*i)->groupId == groupId)
+ return *i;
+ }
+
+ return NULL;
+}
class AccessRule
{
public:
- AccessRule();
+ AccessRule(const String &groupId);
~AccessRule();
void parse(ConfigParser &parser);
typedef Vector<Adaptation::AccessRule*> AccessRules;
extern AccessRules &AllRules();
extern AccessRule *FindRule(const AccessRule::Id &id);
+extern AccessRule *FindRuleByGroupId(const String &groupId);
} // namespace Adaptation
void
Adaptation::Config::ParseAccess(ConfigParser &parser)
{
- AccessRule *r = new AccessRule;
+ String groupId;
+ ConfigParser::ParseString(&groupId);
+ AccessRule *r;
+ if (!(r=FindRuleByGroupId(groupId)))
+ r = new AccessRule(groupId);
+
r->parse(parser);
AllRules().push_back(r);
}