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