Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
O
OpnSense
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Kulya
OpnSense
Commits
820bd59e
Commit
820bd59e
authored
Jul 15, 2015
by
Ad Schellevis
Committed by
Franco Fichtner
Jul 20, 2015
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
(legacy) evil globals... change use of $FilterIflist
parent
83d63674
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
53 additions
and
40 deletions
+53
-40
authgui.inc
src/etc/inc/authgui.inc
+3
-7
filter.inc
src/etc/inc/filter.inc
+44
-23
openvpn-client-export.inc
src/etc/inc/openvpn-client-export.inc
+2
-3
firewall_nat_out.php
src/www/firewall_nat_out.php
+4
-7
No files found.
src/etc/inc/authgui.inc
View file @
820bd59e
...
@@ -31,6 +31,7 @@
...
@@ -31,6 +31,7 @@
include_once
(
"auth.inc"
);
include_once
(
"auth.inc"
);
include_once
(
"priv.inc"
);
include_once
(
"priv.inc"
);
require_once
(
"filter.inc"
);
function
getPrivPages
(
&
$entry
,
&
$allowed_pages
)
{
function
getPrivPages
(
&
$entry
,
&
$allowed_pages
)
{
global
$priv_list
;
global
$priv_list
;
...
@@ -317,8 +318,8 @@ function display_login_form()
...
@@ -317,8 +318,8 @@ function display_login_form()
}
}
/* Check against locally configured IP addresses, which will catch when someone
/* Check against locally configured IP addresses, which will catch when someone
port forwards WebGUI access from WAN to an internal IP on the router. */
port forwards WebGUI access from WAN to an internal IP on the router. */
global
$FilterIflist
;
$FilterIflist
=
filter_generate_optcfg_array
()
;
$local_ip
=
false
;
$local_ip
=
false
;
if
(
strstr
(
$_SERVER
[
'HTTP_HOST'
],
":"
))
{
if
(
strstr
(
$_SERVER
[
'HTTP_HOST'
],
":"
))
{
$http_host_port
=
explode
(
":"
,
$_SERVER
[
'HTTP_HOST'
]);
$http_host_port
=
explode
(
":"
,
$_SERVER
[
'HTTP_HOST'
]);
...
@@ -326,10 +327,6 @@ function display_login_form()
...
@@ -326,10 +327,6 @@ function display_login_form()
}
else
{
}
else
{
$http_host
=
$_SERVER
[
'HTTP_HOST'
];
$http_host
=
$_SERVER
[
'HTTP_HOST'
];
}
}
if
(
empty
(
$FilterIflist
))
{
require_once
(
'filter.inc'
);
filter_generate_optcfg_array
();
}
foreach
(
$FilterIflist
as
$iflist
)
{
foreach
(
$FilterIflist
as
$iflist
)
{
if
(
$iflist
[
'ip'
]
==
$http_host
)
{
if
(
$iflist
[
'ip'
]
==
$http_host
)
{
$local_ip
=
true
;
$local_ip
=
true
;
...
@@ -338,7 +335,6 @@ function display_login_form()
...
@@ -338,7 +335,6 @@ function display_login_form()
$local_ip
=
true
;
$local_ip
=
true
;
}
}
}
}
unset
(
$FilterIflist
);
if
(
isset
(
$config
[
'virtualip'
]))
{
if
(
isset
(
$config
[
'virtualip'
]))
{
if
(
$config
[
'virtualip'
][
'vip'
])
{
if
(
$config
[
'virtualip'
][
'vip'
])
{
...
...
src/etc/inc/filter.inc
View file @
820bd59e
...
@@ -36,9 +36,6 @@ $after_filter_configure_run = array();
...
@@ -36,9 +36,6 @@ $after_filter_configure_run = array();
/* For installing cron job of schedules */
/* For installing cron job of schedules */
$time_based_rules
=
false
;
$time_based_rules
=
false
;
/* Used to hold the interface list that will be used on ruleset creation. */
$FilterIflist
=
array
();
/* Create a global array to avoid errors on rulesets. */
/* Create a global array to avoid errors on rulesets. */
$GatewaysList
=
array
();
$GatewaysList
=
array
();
...
@@ -149,9 +146,11 @@ function filter_delete_states_for_down_gateways() {
...
@@ -149,9 +146,11 @@ function filter_delete_states_for_down_gateways() {
/* reload filter sync */
/* reload filter sync */
function
filter_configure_sync
(
$delete_states_if_needed
=
true
)
function
filter_configure_sync
(
$delete_states_if_needed
=
true
)
{
{
global
$config
,
$g
,
$after_filter_configure_run
,
$FilterIflist
;
global
$config
,
$g
,
$after_filter_configure_run
;
global
$time_based_rules
,
$filterdns
,
$aliases
;
global
$time_based_rules
,
$filterdns
,
$aliases
;
$FilterIflist
=
filter_generate_optcfg_array
()
;
/* Use filter lock to not allow concurrent filter reloads during this run. */
/* Use filter lock to not allow concurrent filter reloads during this run. */
$filterlck
=
lock
(
'filter'
,
LOCK_EX
);
$filterlck
=
lock
(
'filter'
,
LOCK_EX
);
...
@@ -372,7 +371,8 @@ function filter_configure_sync($delete_states_if_needed = true)
...
@@ -372,7 +371,8 @@ function filter_configure_sync($delete_states_if_needed = true)
}
}
function
filter_generate_scrubing
()
{
function
filter_generate_scrubing
()
{
global
$config
,
$FilterIflist
;
global
$config
;
$FilterIflist
=
filter_generate_optcfg_array
()
;
$scrubrules
=
""
;
$scrubrules
=
""
;
if
(
isset
(
$config
[
'system'
][
'maxmss_enable'
]))
{
if
(
isset
(
$config
[
'system'
][
'maxmss_enable'
]))
{
...
@@ -483,7 +483,8 @@ function filter_expand_alias_array($alias_name) {
...
@@ -483,7 +483,8 @@ function filter_expand_alias_array($alias_name) {
function
filter_generate_aliases
()
function
filter_generate_aliases
()
{
{
global
$config
,
$FilterIflist
,
$after_filter_configure_run
;
global
$config
,
$after_filter_configure_run
;
$FilterIflist
=
filter_generate_optcfg_array
()
;
$alias
=
"#System aliases
\n
"
;
$alias
=
"#System aliases
\n
"
;
$aliases
=
"loopback =
\"
{ lo0 }
\"\n
"
;
$aliases
=
"loopback =
\"
{ lo0 }
\"\n
"
;
...
@@ -756,13 +757,12 @@ function filter_get_vpns_list() {
...
@@ -756,13 +757,12 @@ function filter_get_vpns_list() {
* optionally returns an array instead, including friendly interface and gateway (if applicable)
* optionally returns an array instead, including friendly interface and gateway (if applicable)
*/
*/
function
filter_get_direct_networks_list
(
$returnsubnetsonly
=
true
)
{
function
filter_get_direct_networks_list
(
$returnsubnetsonly
=
true
)
{
global
$config
,
$FilterIflist
,
$GatewaysList
;
global
$config
,
$GatewaysList
;
$FilterIflist
=
filter_generate_optcfg_array
()
;
/* build list of directly connected interfaces and networks */
/* build list of directly connected interfaces and networks */
$networks
=
""
;
$networks
=
""
;
$networks_arr
=
array
();
$networks_arr
=
array
();
if
(
empty
(
$FilterIflist
))
{
filter_generate_optcfg_array
();
}
foreach
(
$FilterIflist
as
$ifent
=>
$ifcfg
)
{
foreach
(
$FilterIflist
as
$ifent
=>
$ifcfg
)
{
$subnet
=
"
{
$ifcfg
[
'sa'
]
}
/
{
$ifcfg
[
'sn'
]
}
"
;
$subnet
=
"
{
$ifcfg
[
'sa'
]
}
/
{
$ifcfg
[
'sn'
]
}
"
;
if
(
is_subnet
(
$subnet
))
{
if
(
is_subnet
(
$subnet
))
{
...
@@ -819,6 +819,14 @@ function filter_generate_optcfg_array()
...
@@ -819,6 +819,14 @@ function filter_generate_optcfg_array()
{
{
global
$config
,
$FilterIflist
;
global
$config
,
$FilterIflist
;
// Nasty hack to avoid unkown status of $FilterIflist, every piece of code using $FilterIflist should use
// this function to retrieve it's content.
if
(
isset
(
$FilterIflist
)
&&
is_array
(
$FilterIflist
)
&&
count
(
$FilterIflist
)
>
0
)
{
return
$FilterIflist
;
}
$FilterIflist
=
array
();
/* if list */
/* if list */
$iflist
=
get_configured_interface_with_descr
();
$iflist
=
get_configured_interface_with_descr
();
foreach
(
$iflist
as
$if
=>
$ifdetail
)
{
foreach
(
$iflist
as
$if
=>
$ifdetail
)
{
...
@@ -978,11 +986,13 @@ function filter_generate_optcfg_array()
...
@@ -978,11 +986,13 @@ function filter_generate_optcfg_array()
$FilterIflist
[
$ifgen
[
'ifname'
]]
=
$oc
;
$FilterIflist
[
$ifgen
[
'ifname'
]]
=
$oc
;
}
}
}
}
return
$FilterIflist
;
}
}
function
filter_get_reflection_interfaces
(
$natif
=
""
)
{
function
filter_get_reflection_interfaces
(
$natif
=
""
)
{
global
$FilterIflist
;
$FilterIflist
=
filter_generate_optcfg_array
()
;
$nat_if_list
=
array
();
$nat_if_list
=
array
();
...
@@ -1001,7 +1011,8 @@ function filter_get_reflection_interfaces($natif = "") {
...
@@ -1001,7 +1011,8 @@ function filter_get_reflection_interfaces($natif = "") {
}
}
function
filter_generate_reflection_nat
(
$rule
,
&
$route_table
,
$nat_ifs
,
$protocol
,
$target
,
$target_ip
,
$target_subnet
=
""
)
{
function
filter_generate_reflection_nat
(
$rule
,
&
$route_table
,
$nat_ifs
,
$protocol
,
$target
,
$target_ip
,
$target_subnet
=
""
)
{
global
$config
,
$FilterIflist
;
global
$config
;
$FilterIflist
=
filter_generate_optcfg_array
()
;
if
(
!
isset
(
$config
[
'system'
][
'enablenatreflectionhelper'
]))
if
(
!
isset
(
$config
[
'system'
][
'enablenatreflectionhelper'
]))
return
""
;
return
""
;
...
@@ -1086,7 +1097,8 @@ function filter_generate_reflection_nat($rule, &$route_table, $nat_ifs, $protoco
...
@@ -1086,7 +1097,8 @@ function filter_generate_reflection_nat($rule, &$route_table, $nat_ifs, $protoco
}
}
function
filter_generate_reflection_proxy
(
$rule
,
$nordr
,
$rdr_ifs
,
$srcaddr
,
$dstaddr_port
,
&
$starting_localhost_port
,
&
$reflection_txt
)
{
function
filter_generate_reflection_proxy
(
$rule
,
$nordr
,
$rdr_ifs
,
$srcaddr
,
$dstaddr_port
,
&
$starting_localhost_port
,
&
$reflection_txt
)
{
global
$FilterIflist
,
$config
;
global
$config
;
$FilterIflist
=
filter_generate_optcfg_array
()
;
// Initialize natrules holder string
// Initialize natrules holder string
$natrules
=
""
;
$natrules
=
""
;
...
@@ -1278,7 +1290,8 @@ function filter_generate_reflection_proxy($rule, $nordr, $rdr_ifs, $srcaddr, $ds
...
@@ -1278,7 +1290,8 @@ function filter_generate_reflection_proxy($rule, $nordr, $rdr_ifs, $srcaddr, $ds
}
}
function
filter_nat_rules_automatic_tonathosts
(
$with_descr
=
false
)
{
function
filter_nat_rules_automatic_tonathosts
(
$with_descr
=
false
)
{
global
$config
,
$FilterIflist
,
$GatewaysList
;
global
$config
,
$GatewaysList
;
$FilterIflist
=
filter_generate_optcfg_array
()
;
$tonathosts
=
array
(
"127.0.0.0/8"
);
$tonathosts
=
array
(
"127.0.0.0/8"
);
$descriptions
=
array
(
gettext
(
"localhost"
));
$descriptions
=
array
(
gettext
(
"localhost"
));
...
@@ -1401,7 +1414,8 @@ function filter_nat_rules_automatic_tonathosts($with_descr = false) {
...
@@ -1401,7 +1414,8 @@ function filter_nat_rules_automatic_tonathosts($with_descr = false) {
function
filter_nat_rules_outbound_automatic
(
$src
)
function
filter_nat_rules_outbound_automatic
(
$src
)
{
{
global
$config
,
$FilterIflist
;
global
$config
;
$FilterIflist
=
filter_generate_optcfg_array
()
;
$rules
=
array
();
$rules
=
array
();
...
@@ -1443,7 +1457,8 @@ function filter_nat_rules_outbound_automatic($src)
...
@@ -1443,7 +1457,8 @@ function filter_nat_rules_outbound_automatic($src)
/* Generate a 'nat on' or 'no nat on' rule for given interface */
/* Generate a 'nat on' or 'no nat on' rule for given interface */
function
filter_nat_rules_generate_if
(
$if
,
$src
=
"any"
,
$srcport
=
""
,
$dst
=
"any"
,
$dstport
=
""
,
$natip
=
""
,
$natport
=
""
,
$nonat
=
false
,
$staticnatport
=
false
,
$proto
=
""
,
$poolopts
=
""
)
{
function
filter_nat_rules_generate_if
(
$if
,
$src
=
"any"
,
$srcport
=
""
,
$dst
=
"any"
,
$dstport
=
""
,
$natip
=
""
,
$natport
=
""
,
$nonat
=
false
,
$staticnatport
=
false
,
$proto
=
""
,
$poolopts
=
""
)
{
global
$config
,
$FilterIflist
;
global
$config
;
$FilterIflist
=
filter_generate_optcfg_array
()
;
/* XXX: billm - any idea if this code is needed? */
/* XXX: billm - any idea if this code is needed? */
if
(
$src
==
"/32"
||
$src
{
0
}
==
"/"
)
if
(
$src
==
"/32"
||
$src
{
0
}
==
"/"
)
return
"# src incorrectly specified
\n
"
;
return
"# src incorrectly specified
\n
"
;
...
@@ -1524,7 +1539,8 @@ function filter_nat_rules_generate_if($if, $src = "any", $srcport = "", $dst = "
...
@@ -1524,7 +1539,8 @@ function filter_nat_rules_generate_if($if, $src = "any", $srcport = "", $dst = "
}
}
function
filter_nat_rules_generate
()
{
function
filter_nat_rules_generate
()
{
global
$config
,
$g
,
$after_filter_configure_run
,
$FilterIflist
,
$GatewaysList
,
$aliases
;
global
$config
,
$g
,
$after_filter_configure_run
,
$GatewaysList
,
$aliases
;
$FilterIflist
=
filter_generate_optcfg_array
()
;
$natrules
=
"no nat proto carp
\n
"
;
$natrules
=
"no nat proto carp
\n
"
;
$natrules
.=
"no rdr proto carp
\n
"
;
$natrules
.=
"no rdr proto carp
\n
"
;
...
@@ -2029,7 +2045,7 @@ function filter_generate_port(& $rule, $target = "source", $isnat = false) {
...
@@ -2029,7 +2045,7 @@ function filter_generate_port(& $rule, $target = "source", $isnat = false) {
}
}
function
filter_address_add_vips_subnets
(
&
$subnets
,
$if
,
$not
)
{
function
filter_address_add_vips_subnets
(
&
$subnets
,
$if
,
$not
)
{
global
$FilterIflist
;
$FilterIflist
=
filter_generate_optcfg_array
()
;
$if_subnets
=
array
(
$subnets
);
$if_subnets
=
array
(
$subnets
);
...
@@ -2067,7 +2083,8 @@ function filter_address_add_vips_subnets(&$subnets, $if, $not) {
...
@@ -2067,7 +2083,8 @@ function filter_address_add_vips_subnets(&$subnets, $if, $not) {
}
}
function
filter_generate_address
(
&
$rule
,
$target
=
"source"
,
$isnat
=
false
)
{
function
filter_generate_address
(
&
$rule
,
$target
=
"source"
,
$isnat
=
false
)
{
global
$FilterIflist
,
$config
;
global
$config
;
$FilterIflist
=
filter_generate_optcfg_array
()
;
$src
=
""
;
$src
=
""
;
if
(
isset
(
$rule
[
$target
][
'any'
]))
{
if
(
isset
(
$rule
[
$target
][
'any'
]))
{
...
@@ -2219,7 +2236,8 @@ function filter_generate_address(& $rule, $target = "source", $isnat = false) {
...
@@ -2219,7 +2236,8 @@ function filter_generate_address(& $rule, $target = "source", $isnat = false) {
function
filter_generate_user_rule
(
$rule
)
function
filter_generate_user_rule
(
$rule
)
{
{
global
$config
,
$g
,
$FilterIflist
,
$GatewaysList
;
global
$config
,
$g
,
$GatewaysList
;
$FilterIflist
=
filter_generate_optcfg_array
()
;
/* don't include disabled rules */
/* don't include disabled rules */
if
(
isset
(
$rule
[
'disabled'
]))
{
if
(
isset
(
$rule
[
'disabled'
]))
{
...
@@ -2566,7 +2584,8 @@ function filter_generate_user_rule($rule)
...
@@ -2566,7 +2584,8 @@ function filter_generate_user_rule($rule)
function
filter_rules_generate
()
function
filter_rules_generate
()
{
{
global
$config
,
$g
,
$FilterIflist
,
$time_based_rules
,
$GatewaysList
;
global
$config
,
$g
,
$time_based_rules
,
$GatewaysList
;
$FilterIflist
=
filter_generate_optcfg_array
()
;
$fix_rule_label
=
'fix_rule_label'
;
$fix_rule_label
=
'fix_rule_label'
;
...
@@ -3364,7 +3383,8 @@ function filter_tdr_month($schedule) {
...
@@ -3364,7 +3383,8 @@ function filter_tdr_month($schedule) {
function
filter_setup_logging_interfaces
()
function
filter_setup_logging_interfaces
()
{
{
global
$config
,
$FilterIflist
;
global
$config
;
$FilterIflist
=
filter_generate_optcfg_array
()
;
$rules
=
''
;
$rules
=
''
;
if
(
isset
(
$FilterIflist
[
'lan'
]))
if
(
isset
(
$FilterIflist
[
'lan'
]))
...
@@ -3391,7 +3411,8 @@ function filter_process_carp_rules($log)
...
@@ -3391,7 +3411,8 @@ function filter_process_carp_rules($log)
/* Generate IPsec Filter Items */
/* Generate IPsec Filter Items */
function
filter_generate_ipsec_rules
(
$log
=
array
())
function
filter_generate_ipsec_rules
(
$log
=
array
())
{
{
global
$config
,
$g
,
$FilterIflist
;
global
$config
,
$g
;
$FilterIflist
=
filter_generate_optcfg_array
()
;
if
(
isset
(
$config
[
'system'
][
'disablevpnrules'
]))
{
if
(
isset
(
$config
[
'system'
][
'disablevpnrules'
]))
{
return
"
\n
# VPN Rules not added disabled in System->Advanced.
\n
"
;
return
"
\n
# VPN Rules not added disabled in System->Advanced.
\n
"
;
...
...
src/etc/inc/openvpn-client-export.inc
View file @
820bd59e
...
@@ -845,9 +845,8 @@ function openvpn_client_export_build_remote_lines($settings, $useaddr, $interfac
...
@@ -845,9 +845,8 @@ function openvpn_client_export_build_remote_lines($settings, $useaddr, $interfac
}
}
function
openvpn_client_export_find_port_forwards
(
$targetip
,
$targetport
,
$targetproto
,
$skipprivate
,
$findhostname
=
false
)
{
function
openvpn_client_export_find_port_forwards
(
$targetip
,
$targetport
,
$targetproto
,
$skipprivate
,
$findhostname
=
false
)
{
global
$config
,
$FilterIflist
;
global
$config
;
if
(
empty
(
$FilterIflist
))
$FilterIflist
=
filter_generate_optcfg_array
()
;
filter_generate_optcfg_array
();
$destinations
=
array
();
$destinations
=
array
();
if
(
!
is_array
(
$config
[
'nat'
])
||
!
is_array
(
$config
[
'nat'
][
'rule'
]))
if
(
!
is_array
(
$config
[
'nat'
])
||
!
is_array
(
$config
[
'nat'
][
'rule'
]))
...
...
src/www/firewall_nat_out.php
View file @
820bd59e
...
@@ -31,9 +31,10 @@ require_once("guiconfig.inc");
...
@@ -31,9 +31,10 @@ require_once("guiconfig.inc");
require_once
(
"functions.inc"
);
require_once
(
"functions.inc"
);
require_once
(
"filter.inc"
);
require_once
(
"filter.inc"
);
global
$FilterIflist
;
global
$GatewaysList
;
global
$GatewaysList
;
$FilterIflist
=
filter_generate_optcfg_array
()
;
if
(
!
is_array
(
$config
[
'nat'
][
'outbound'
]))
if
(
!
is_array
(
$config
[
'nat'
][
'outbound'
]))
$config
[
'nat'
][
'outbound'
]
=
array
();
$config
[
'nat'
][
'outbound'
]
=
array
();
...
@@ -72,8 +73,6 @@ if (isset($_POST['save']) && $_POST['save'] == "Save") {
...
@@ -72,8 +73,6 @@ if (isset($_POST['save']) && $_POST['save'] == "Save") {
* lets automatically create entries
* lets automatically create entries
* for all of the interfaces to make life easier on the pip-o-chap
* for all of the interfaces to make life easier on the pip-o-chap
*/
*/
if
(
empty
(
$FilterIflist
))
filter_generate_optcfg_array
();
if
(
empty
(
$GatewaysList
))
if
(
empty
(
$GatewaysList
))
filter_generate_gateways
();
filter_generate_gateways
();
$tonathosts
=
filter_nat_rules_automatic_tonathosts
(
true
);
$tonathosts
=
filter_nat_rules_automatic_tonathosts
(
true
);
...
@@ -105,7 +104,7 @@ if (isset($_POST['save']) && $_POST['save'] == "Save") {
...
@@ -105,7 +104,7 @@ if (isset($_POST['save']) && $_POST['save'] == "Save") {
}
}
}
}
$savemsg
=
gettext
(
"Default rules for each interface have been created."
);
$savemsg
=
gettext
(
"Default rules for each interface have been created."
);
unset
(
$
FilterIflist
,
$
GatewaysList
);
unset
(
$GatewaysList
);
}
}
$config
[
'nat'
][
'outbound'
][
'mode'
]
=
$_POST
[
'mode'
];
$config
[
'nat'
][
'outbound'
][
'mode'
]
=
$_POST
[
'mode'
];
...
@@ -477,12 +476,10 @@ include("head.inc");
...
@@ -477,12 +476,10 @@ include("head.inc");
</tbody>
</tbody>
<?php
<?php
if
(
$mode
==
"automatic"
||
$mode
==
"hybrid"
)
:
if
(
$mode
==
"automatic"
||
$mode
==
"hybrid"
)
:
if
(
empty
(
$FilterIflist
))
filter_generate_optcfg_array
();
if
(
empty
(
$GatewaysList
))
if
(
empty
(
$GatewaysList
))
filter_generate_gateways
();
filter_generate_gateways
();
$automatic_rules
=
filter_nat_rules_outbound_automatic
(
implode
(
" "
,
filter_nat_rules_automatic_tonathosts
()));
$automatic_rules
=
filter_nat_rules_outbound_automatic
(
implode
(
" "
,
filter_nat_rules_automatic_tonathosts
()));
unset
(
$
FilterIflist
,
$
GatewaysList
);
unset
(
$GatewaysList
);
?>
?>
<thead>
<thead>
<tr><th
colspan=
"12"
>
<?=
gettext
(
"Automatic rules:"
);
?>
</th></tr>
<tr><th
colspan=
"12"
>
<?=
gettext
(
"Automatic rules:"
);
?>
</th></tr>
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment