17
17
*/
18
18
19
19
20
- #include < dnet.h>
21
20
#include < sstream>
22
21
#include " OSS/Net/Firewall.h"
23
22
#include " OSS/Logger.h"
@@ -29,89 +28,6 @@ extern "C" { size_t strlcpy(char *dst, const char *src, size_t siz); };
29
28
namespace OSS {
30
29
namespace Net {
31
30
32
- //
33
- // DNET specific functions
34
- //
35
- fw_t * _pInstance = 0 ;
36
-
37
- static bool rule_to_fwrule (const FirewallRule& rule, fw_rule* fr)
38
- {
39
- fr->fw_proto = rule.getProtocol ();
40
- fr->fw_op = rule.getOperation ();
41
- fr->fw_dir = rule.getDirection ();
42
-
43
- if (!rule.getDevice ().empty ())
44
- strlcpy (fr->fw_device , rule.getDevice ().c_str (), sizeof (fr->fw_device ));
45
-
46
- if (!rule.getSourceAddress ().empty ())
47
- {
48
- if (addr_pton (rule.getSourceAddress ().c_str (), &fr->fw_dst ) < 0 )
49
- return false ;
50
- }
51
-
52
- if (!rule.getDestinationAddress ().empty ())
53
- {
54
- if (addr_pton (rule.getDestinationAddress ().c_str (), &fr->fw_dst ) < 0 )
55
- return false ;
56
- }
57
-
58
- if (rule.getSourcePort () != 0 )
59
- {
60
- fr->fw_sport [0 ] = rule.getSourcePort ();
61
- if (rule.getSourceEndPort () != 0 )
62
- fr->fw_sport [1 ] = rule.getSourceEndPort ();
63
- else
64
- fr->fw_sport [1 ] = rule.getSourcePort ();
65
- }
66
- else if (fr->fw_proto == IP_PROTO_TCP || fr->fw_proto == IP_PROTO_UDP)
67
- {
68
- fr->fw_sport [0 ] = 0 ;
69
- fr->fw_sport [1 ] = TCP_PORT_MAX;
70
- }
71
-
72
- if (rule.getDestinationPort () != 0 )
73
- {
74
- fr->fw_dport [0 ] = rule.getDestinationPort ();
75
- if (rule.getDestinationEndPort () != 0 )
76
- fr->fw_dport [1 ] = rule.getDestinationEndPort ();
77
- else
78
- fr->fw_dport [1 ] = rule.getDestinationPort ();
79
- }
80
- else if (fr->fw_proto == IP_PROTO_TCP || fr->fw_proto == IP_PROTO_UDP)
81
- {
82
- fr->fw_dport [0 ] = 0 ;
83
- fr->fw_dport [1 ] = TCP_PORT_MAX;
84
- }
85
-
86
- return true ;
87
- }
88
-
89
- static int internal_table_loop (const struct fw_rule *fr, void *arg)
90
- {
91
- Firewall::TableLoopHandler* pHandler = reinterpret_cast <Firewall::TableLoopHandler*>(arg);
92
-
93
- FirewallRule rule (
94
- fr->fw_device ? fr->fw_device : " " ,
95
- fr->fw_src .addr_type ? addr_ntoa (&fr->fw_src ) : " " ,
96
- fr->fw_sport [0 ],
97
- fr->fw_sport [1 ],
98
- fr->fw_src .addr_type ? addr_ntoa (&fr->fw_dst ) : " " ,
99
- fr->fw_dport [0 ],
100
- fr->fw_dport [1 ],
101
- fr->fw_proto ,
102
- fr->fw_dir ,
103
- fr->fw_op
104
- );
105
-
106
- (*pHandler)(rule.str ());
107
- return 0 ;
108
- }
109
-
110
- //
111
- // EOF Dnet functions
112
- //
113
-
114
-
115
31
//
116
32
// Start of IPTables functions
117
33
//
@@ -218,55 +134,20 @@ static std::string iptables_get_rules(FirewallRule::Direction direction)
218
134
219
135
Firewall& Firewall::instance ()
220
136
{
221
- static Firewall fw ( false /* o not use libdnet */ ) ;
137
+ static Firewall fw;
222
138
return fw;
223
139
}
224
140
225
- Firewall::Firewall (bool useLibDnet) :
226
- _useLibDnet (useLibDnet)
141
+ Firewall::Firewall ()
227
142
{
228
- if (_useLibDnet)
229
- {
230
- _pInstance = fw_open ();
231
- }
232
143
}
233
144
234
145
Firewall::~Firewall ()
235
146
{
236
- if (_useLibDnet)
237
- {
238
- if (_pInstance)
239
- fw_close (_pInstance);
240
- }
241
147
}
242
148
243
149
244
- bool Firewall::dnetAddRule (const FirewallRule& rule)
245
- {
246
- if (_useLibDnet)
247
- {
248
- if (!_pInstance)
249
- {
250
- OSS_LOG_ERROR (" Dnet Firewall hook is not open." );
251
- return false ;
252
- }
253
-
254
- fw_rule fr;
255
- if (!rule_to_fwrule (rule, &fr))
256
- {
257
- OSS_LOG_ERROR (" Dnet Firewall hook is not open." );
258
- return false ;
259
- }
260
- int ret = fw_add (_pInstance, &fr);
261
- if (ret < 0 )
262
- {
263
- OSS_LOG_ERROR (" Firewall: Error adding rule (ret=" << ret << " )" );
264
- return false ;
265
- }
266
- return true ;
267
- }
268
- return false ;
269
- }
150
+
270
151
271
152
bool Firewall::iptAddRule (const FirewallRule& rule)
272
153
{
@@ -276,49 +157,11 @@ bool Firewall::iptAddRule(const FirewallRule& rule)
276
157
277
158
bool Firewall::iptDeleteRule (FirewallRule::Direction direction, std::size_t index)
278
159
{
279
- if (!_useLibDnet)
280
- {
281
- OSS_EXEC (iptables_delete (direction, index ));
282
- return true ;
283
- }
284
- return false ;
285
- }
286
-
287
- bool Firewall::dnetDeleteRule (const FirewallRule& rule)
288
- {
289
- if (_useLibDnet)
290
- {
291
- if (!_pInstance)
292
- {
293
- OSS_LOG_ERROR (" Dnet Firewall hook is not open." );
294
- return false ;
295
- }
296
-
297
- fw_rule fr;
298
- rule_to_fwrule (rule, &fr);
299
- int ret = fw_delete (_pInstance, &fr);
300
- if (ret < 0 )
301
- {
302
- OSS_LOG_ERROR (" Firewall: Error deleting rule (ret=" << ret << " )" );
303
- return false ;
304
- }
305
- }
160
+ OSS_EXEC (iptables_delete (direction, index ));
306
161
return true ;
307
162
}
308
163
309
164
310
- void Firewall::dnetTableLoop (TableLoopHandler& handler)
311
- {
312
- if (_useLibDnet)
313
- {
314
- if (!_pInstance)
315
- {
316
- OSS_LOG_ERROR (" Dnet Firewall hook is not open." );
317
- return ;
318
- }
319
- fw_loop (_pInstance, internal_table_loop, (void *)&handler);
320
- }
321
- }
322
165
323
166
void Firewall::iptGetRules (FirewallRule::Direction direction, std::vector<std::string>& rules)
324
167
{
0 commit comments