diff --git a/fail2ban/edit_config.cgi b/fail2ban/edit_config.cgi old mode 100644 new mode 100755 diff --git a/fail2ban/edit_manual.cgi b/fail2ban/edit_manual.cgi new file mode 100755 index 000000000..733027d60 --- /dev/null +++ b/fail2ban/edit_manual.cgi @@ -0,0 +1,34 @@ +#!/usr/local/bin/perl +# Allow manual editing of all config files + +use strict; +use warnings; +require './fail2ban-lib.pl'; +our (%in, %text); +&ReadParse(); + +&ui_print_header(undef, $text{'manual_title'}, ""); + +# Show file selector +my @files = &list_all_config_files(); +$in{'file'} ||= $files[0]; +&indexof($in{'file'}, @files) >= 0 || &error($text{'manual_efile'}); +print &ui_form_start("edit_manual.cgi"); +print "$text{'manual_desc'}\n"; +print &ui_select("file", $in{'file'}, \@files, 1, 0, 0, 0, + "onchange='form.submit()'"); +print &ui_submit($text{'manual_ok'}); +print &ui_form_end(); +print "

\n"; + +# Show editing form +my $data = &read_file_contents($in{'file'}); +print &ui_form_start("save_manual.cgi", "form-data"); +print &ui_hidden("file", $in{'file'}); +print &ui_table_start("".&html_escape($in{'file'})."", undef, 2); +print &ui_table_row(undef, + &ui_textarea("manual", $data, 40, 80), 2); +print &ui_table_end(); +print &ui_form_end([ [ undef, $text{'save'} ] ]); + +&ui_print_footer("", $text{'index_return'}); diff --git a/fail2ban/fail2ban-lib.pl b/fail2ban/fail2ban-lib.pl index 5506eab7a..89ad61924 100644 --- a/fail2ban/fail2ban-lib.pl +++ b/fail2ban/fail2ban-lib.pl @@ -3,8 +3,8 @@ # XXX include in makedist.pl # XXX main help page # XXX help page for filters with description of / etc -# XXX filter defaults # XXX deleting a directive removes too many lines? +# XXX config files for distros BEGIN { push(@INC, ".."); }; use strict; @@ -393,4 +393,16 @@ my $out = &backquote_logged("$config{'client_cmd'} reload 2>&1 = 0 || &error($text{'manual_efile'}); +$in{'manual'} =~ s/\r//g; +$in{'manual'} =~ /\S/ || &error($text{'manual_edata'}); + +# Write it out +my $fh = "FILE"; +&open_lock_tempfile($fh, ">$in{'file'}"); +&print_tempfile($fh, $in{'manual'}); +&close_tempfile($fh); + +&webmin_log("manual", undef, $in{'file'}); +&redirect("");