Project

General

Profile

Regression #13156 » 13156_2.patch

Marcos M, 09/11/2022 03:57 PM

View differences:

src/usr/local/www/widgets/widgets/pfblockerng.widget.php
261 261
	}
262 262

  
263 263
	// Determine if firewall rules are defined
264
	$pfb_packets = pfSense_get_pf_rules();
265 264
	if (isset($config['filter']['rule'])) {
266
		foreach ($config['filter']['rule'] as $rule) {
265
		$tracked_rules = array();
267 266

  
267
		// Get the relevant pfB rules
268
		foreach ($config['filter']['rule'] as $rule) {
268 269
			if (strpos($rule['descr'], 'pfB_DNSBL_Ping') !== FALSE || strpos($rule['descr'], 'pfB_DNSBL_Permit') !== FALSE) {
269 270
				continue;
270 271
			}
271 272

  
272
			if (isset($rule['source']['address']) && stripos($rule['source']['address'], 'pfb_') !== FALSE) {
273
				foreach ($pfb_packets as $pkey => $prule) {
274
					if ($rule['tracker'] == $prule['tracker']) {
275
						if (!isset($pfb_table[$rule['source']['address']]['packets'])) {
276
							$pfb_table[$rule['source']['address']]['packets'] = 0;
277
						}
278
						if (isset($prule['packets']) && $prule['packets'] > 0) {
279
							$pfb_table[$rule['source']['address']]['packets'] += $prule['packets'];
280
						}
281
						unset($pfb_packets[$pkey]);
282
						break;
283
					}
284
				} 
273
			$tracked_rules[$rule['tracker']] = array('packets' => 0);
285 274

  
275
			if (isset($rule['source']['address']) && stripos($rule['source']['address'], 'pfb_') !== FALSE) {
276
				$tracked_rules[$rule['tracker']]['source'] = $rule['source']['address'];
286 277
				if (!isset($rule['disabled'])) {
287 278
					$pfb_table[$rule['source']['address']]['img'] = $pfb['up'];
288 279
					$pfb_table[$rule['source']['address']]['rule'] += 1;
280
					if (!isset($pfb_table[$rule['source']['address']]['packets'])) {
281
						$pfb_table[$rule['source']['address']]['packets'] = 0;
282
					}
289 283
					$pfb_table[$rule['source']['address']]['type'] = ucfirst($rule['type']) ?: 'unknown';
290 284
				}
291 285
			}
286
			
292 287
			if (isset($rule['destination']['address']) && stripos($rule['destination']['address'], 'pfb_') !== FALSE) {
293
				foreach ($pfb_packets as $pkey => $prule) {
294
					if ($rule['tracker'] == $prule['tracker']) {
295
						if (!isset($pfb_table[$rule['destination']['address']]['packets'])) {
296
							$pfb_table[$rule['destination']['address']]['packets'] = 0;
297
						}
298
						if (isset($prule['packets']) && $prule['packets'] > 0) {
299
							$pfb_table[$rule['destination']['address']]['packets'] += $prule['packets'];
300
						}
301
						unset($pfb_packets[$pkey]);
302
						break;
303
					}
304
				}
305

  
288
				$tracked_rules[$rule['tracker']]['destination'] = $rule['destination']['address'];
306 289
				if (!isset($rule['disabled'])) {
307 290
					$pfb_table[$rule['destination']['address']]['img'] = $pfb['up'];
308 291
					$pfb_table[$rule['destination']['address']]['rule'] += 1;
292
					if (!isset($pfb_table[$rule['destination']['address']]['packets'])) {
293
						$pfb_table[$rule['destination']['address']]['packets'] = 0;
294
					}
309 295
					$pfb_table[$rule['destination']['address']]['type'] = ucfirst($rule['type']) ?: 'unknown';
310 296
				}
311 297
			}
312 298
		}
299

  
300
		// Get the packet count for each pfB rule
301
		if (!empty($tracked_rules)) {
302
			foreach (pfSense_get_pf_rules() as $prule) {
303
				$prule_id = $prule['tracker'];
304
				if (isset($tracked_rules[$prule_id])) {
305
					if (isset($prule['packets']) && $prule['packets'] > 0) {
306
						if (isset($tracked_rules[$prule_id]['source'])) {
307
							$pfb_table[$tracked_rules[$prule_id]['source']]['packets'] += $prule['packets'];
308
						}
309
						if (isset($tracked_rules[$prule_id]['destination'])) {
310
							$pfb_table[$tracked_rules[$prule_id]['destination']]['packets'] += $prule['packets'];
311
						}
312
					}
313
				}
314
			}
315
		}
313 316
	}
314 317

  
315 318
	// Collect pfB Alias ID for popup
(2-2/2)