1 /*
2
3 Firewall Builder
4
5 Copyright (C) 2010-2011 NetCitadel, LLC
6
7 Author: Vadim Kurland vadim@fwbuilder.org
8
9 This program is free software which we release under the GNU General Public
10 License. You may redistribute and/or modify this program under the terms
11 of that license as published by the Free Software Foundation; either
12 version 2 of the License, or (at your option) any later version.
13
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
18
19 To get a copy of the GNU General Public License, write to the Free Software
20 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21
22 */
23
24 #ifndef _OBJECT_GROUPS_SUPPORT_HH
25 #define _OBJECT_GROUPS_SUPPORT_HH
26
27 #include "config.h"
28
29 #include "BaseObjectGroup.h"
30 #include "NamedObject.h"
31
32 #include "fwbuilder/Group.h"
33 #include "fwbuilder/RuleElement.h"
34 #include "fwbuilder/FWObjectDatabase.h"
35 #include "fwbuilder/Firewall.h"
36
37 #include "fwcompiler/RuleProcessor.h"
38
39
40 namespace fwcompiler
41 {
42
43 class CreateObjectGroups : public BasicRuleProcessor
44 {
45 protected:
46
47 std::string re_type;
48 std::string name_suffix;
49 NamedObjectsManager *named_objects_manager;
50
51 BaseObjectGroup* findObjectGroup(libfwbuilder::RuleElement *re);
52
53 virtual void packObjects(libfwbuilder::RuleElement *re,
54 BaseObjectGroup *obj_group);
55
56 public:
57
CreateObjectGroups(const std::string & name,const std::string & _ns,const std::string & _type,NamedObjectsManager * m)58 CreateObjectGroups(const std::string &name,
59 const std::string &_ns,
60 const std::string &_type,
61 NamedObjectsManager *m) :
62 BasicRuleProcessor(name)
63 {
64 re_type=_type;
65 name_suffix=_ns;
66 named_objects_manager = m;
67 }
68
69 virtual ~CreateObjectGroups();
70 virtual bool processNext();
71
72 };
73
74 class CreateObjectGroupsForSrc : public CreateObjectGroups
75 {
76 public:
CreateObjectGroupsForSrc(const std::string & n,NamedObjectsManager * m)77 CreateObjectGroupsForSrc(const std::string &n, NamedObjectsManager *m) :
78 CreateObjectGroups(n,"src",libfwbuilder::RuleElementSrc::TYPENAME, m) {}
79 };
80
81 class CreateObjectGroupsForDst : public CreateObjectGroups
82 {
83 public:
CreateObjectGroupsForDst(const std::string & n,NamedObjectsManager * m)84 CreateObjectGroupsForDst(const std::string &n, NamedObjectsManager *m) :
85 CreateObjectGroups(n,"dst",libfwbuilder::RuleElementDst::TYPENAME, m) {}
86 };
87
88 class CreateObjectGroupsForSrv : public CreateObjectGroups
89 {
90 public:
CreateObjectGroupsForSrv(const std::string & n,NamedObjectsManager * m)91 CreateObjectGroupsForSrv(const std::string &n, NamedObjectsManager *m) :
92 CreateObjectGroups(n,"srv",libfwbuilder::RuleElementSrv::TYPENAME, m) {}
93 };
94
95
96 // ################################################################
97 // OSrc, ODst, OSrv, TSrc
98
99 class CreateObjectGroupsForOSrc : public CreateObjectGroups
100 {
101 public:
CreateObjectGroupsForOSrc(const std::string & n,NamedObjectsManager * m)102 CreateObjectGroupsForOSrc(const std::string &n, NamedObjectsManager *m) :
103 CreateObjectGroups(n,"osrc",libfwbuilder::RuleElementOSrc::TYPENAME, m){}
104 };
105
106 class CreateObjectGroupsForODst : public CreateObjectGroups
107 {
108 public:
CreateObjectGroupsForODst(const std::string & n,NamedObjectsManager * m)109 CreateObjectGroupsForODst(const std::string &n, NamedObjectsManager *m) :
110 CreateObjectGroups(n,"odst",libfwbuilder::RuleElementODst::TYPENAME, m){}
111 };
112
113 class CreateObjectGroupsForOSrv : public CreateObjectGroups
114 {
115 public:
CreateObjectGroupsForOSrv(const std::string & n,NamedObjectsManager * m)116 CreateObjectGroupsForOSrv(const std::string &n, NamedObjectsManager *m) :
117 CreateObjectGroups(n,"osrv",libfwbuilder::RuleElementOSrv::TYPENAME, m){}
118 };
119
120 class CreateObjectGroupsForTSrc : public CreateObjectGroups
121 {
122 protected:
123
124 virtual void packObjects(libfwbuilder::RuleElement *re,
125 BaseObjectGroup *obj_group);
126
127 public:
CreateObjectGroupsForTSrc(const std::string & n,NamedObjectsManager * m)128 CreateObjectGroupsForTSrc(const std::string &n, NamedObjectsManager *m) :
129 CreateObjectGroups(n,"tsrc",libfwbuilder::RuleElementTSrc::TYPENAME, m){}
130 };
131
132
133
134
135
136 class createNamedObjectsCommon : public BasicRuleProcessor
137 {
138 protected:
139 virtual void printObjectsForRE(libfwbuilder::FWObject *re);
140 NamedObjectsManager *named_objects_manager;
141 public:
createNamedObjectsCommon(const std::string & n,NamedObjectsManager * _m)142 createNamedObjectsCommon(const std::string &n,
143 NamedObjectsManager *_m) : BasicRuleProcessor(n)
144 {
145 named_objects_manager = _m;
146 }
147 };
148
149 class createNamedObjectsForPolicy : public createNamedObjectsCommon
150 {
151 protected:
152 virtual void printObjectsForRE(libfwbuilder::FWObject *re);
153 public:
createNamedObjectsForPolicy(const std::string & n,NamedObjectsManager * m)154 createNamedObjectsForPolicy(const std::string &n,
155 NamedObjectsManager *m) : createNamedObjectsCommon(n, m) {}
156 virtual bool processNext();
157 };
158
159 class createNamedObjectsForNAT : public createNamedObjectsCommon
160 {
161 public:
createNamedObjectsForNAT(const std::string & n,NamedObjectsManager * m)162 createNamedObjectsForNAT(const std::string &n,
163 NamedObjectsManager *m) : createNamedObjectsCommon(n, m) {}
164 virtual bool processNext();
165 };
166
167 }
168
169 #endif
170