diff --git a/fail2ban/edit_jail.cgi b/fail2ban/edit_jail.cgi index 7b1653017..cce419f29 100755 --- a/fail2ban/edit_jail.cgi +++ b/fail2ban/edit_jail.cgi @@ -30,15 +30,15 @@ print &ui_hidden("new", $in{'new'}); print &ui_hidden("old", $in{'name'}); print &ui_table_start($text{'jail_header'}, undef, 2); -# Jail name -print &ui_table_row($text{'jail_name'}, - &ui_textbox("name", $jail->{'name'}, 30)); - # Enabled or disabled? my $enabled = &find_value("enabled", $jail); print &ui_table_row($text{'jail_enabled'}, &ui_yesno_radio("enabled", $enabled =~ /true|yes|1/i)); +# Jail name +print &ui_table_row($text{'jail_name'}, + &ui_textbox("name", $jail->{'name'}, 30)); + # Filter to match my @filters = &list_filters(); my $filter = &find_value("filter", $jail); @@ -49,6 +49,22 @@ print &ui_table_row($text{'jail_filter'}, map { &filename_to_name($_->[0]->{'file'}) } @filters ], 1, 0, $filter ? 1 : 0)); +# Backend +my $backend = &find_value("backend", $jail); +print &ui_table_row($text{'jail_backend'}, + &ui_select("backend", $backend || "", + [ [ "", "" ], + [ "auto", $text{'jail_auto'} ], + [ "systemd", $text{'jail_systemd'} ], + [ "polling", $text{'jail_polling'} ], + [ "gamin", $text{'jail_gamin'} ], + [ "pyinotify", $text{'jail_pyinotify'} ] ])); + +# Ports to monitor +my $port = &find_value("port", $jail); +print &ui_table_row($text{'jail_ports'}, + &ui_textbox("port", $port, 35)); + # Actions to run my $actionlist = &find("action", $jail); my @actions = &list_actions(); diff --git a/fail2ban/lang/en b/fail2ban/lang/en index 4122522bd..6c42c2142 100644 --- a/fail2ban/lang/en +++ b/fail2ban/lang/en @@ -87,6 +87,7 @@ jail_title1=Create Jail jail_title2=Edit Jail jail_header=Filter action jail details jail_name=Jail name +jail_ports=Ports to block jail_egone=Jail no longer exists! jail_enabled=Currently enabled? jail_filter=Filter to search log for @@ -104,6 +105,8 @@ jail_ignoreip=IP addresses to never ban jail_err=Failed to save jail jail_eclash=A jail with the same name already exists jail_ename=Missing or invalid jail name +jail_ebackend=Invalid backend name +jail_eports=Invalid port name, number or range; use a single port name, number or a range in the form start:end; to specify multiple ports, separate them with commas jail_eaname=Invalid looking name parameter for action $1 jail_eport=Invalid port number for action $1 jail_eactions=No actions selected! diff --git a/fail2ban/save_jail.cgi b/fail2ban/save_jail.cgi index 9b4c753c0..ec4eb632f 100755 --- a/fail2ban/save_jail.cgi +++ b/fail2ban/save_jail.cgi @@ -44,6 +44,14 @@ else { $clash && &error($text{'jail_eclash'}); } + # Validate backend + !$in{'backend'} || $in{'backend'} =~ /^(auto|systemd|polling|gamin|pyinotify)$/ || + &error($text{'jail_ebackend'}); + + # Validate ports (1234 or 1234:1245 or 1234:1245,1250,http or 1238,http,https) + $in{'port'} =~ s/\s+//g if ($in{'port'}); + !$in{'port'} || $in{'port'} =~ /^(?!$)(?:[a-zA-Z]+|\d{1,5})(?:(?::\d{1,5})?)(?:,(?:[a-zA-Z]+|\d{1,5})(?:(?::\d{1,5})?)?)*$/gmi || &error($text{'jail_eports'}); + # Parse and validate actions my @actions; for(my $i=0; defined($in{"action_$i"}); $i++) { @@ -116,6 +124,8 @@ else { # Save directives within the section &save_directive("enabled", $in{'enabled'} ? 'true' : 'false', $jail); &save_directive("filter", $in{'filter'} || undef, $jail); + &save_directive("backend", $in{'backend'} || undef, $jail); + &save_directive("port", $in{'port'} || undef, $jail); &save_directive("action", @actions ? join("\n", @actions) : undef, $jail); &save_directive("logpath", join("\n", @logpaths), $jail);