From 87c69933ecc5cccec88df284da67e8d6a836cbb4 Mon Sep 17 00:00:00 2001 From: Jamie Cameron Date: Thu, 15 May 2014 21:42:27 -0700 Subject: [PATCH] Config file editing --- fail2ban/edit_config.cgi | 0 fail2ban/edit_manual.cgi | 34 ++++++++++++++++++++++++++++++++++ fail2ban/fail2ban-lib.pl | 14 +++++++++++++- fail2ban/images/manual.gif | Bin 0 -> 5031 bytes fail2ban/lang/en | 8 ++++++++ fail2ban/save_manual.cgi | 24 ++++++++++++++++++++++++ 6 files changed, 79 insertions(+), 1 deletion(-) mode change 100644 => 100755 fail2ban/edit_config.cgi create mode 100755 fail2ban/edit_manual.cgi create mode 100644 fail2ban/images/manual.gif create mode 100644 fail2ban/save_manual.cgi 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 LKP_m(PAXbm!`}CAKtJFpck!_}-1EMFSnx1-| z`j)Z|Du--q&gZ98k}&5In?nq<&u`z~ANPH|u7B>=bzkrI^}4S2mB#eiZD_F40002P zy?b^Z)LHWXjy^_r`yyvkbOs&fvfl*&ifZlkE`8Vegy>y<(Z8`nqhkW1LI9Uwc3=o; z@2P;Wkb@xs!EupwAx;3W%yI8d7oXUUKn)DjF=PP zx`Mo8Xdi2|5kt_7x*}}2TGhYvu;p4mgY&~2@}4s^vL+xnRR6{G0H*O!pjz|GO7Jkr z0rmRIVSrh(Sr^kI&&G#kp8kx3oU;*0C8_!5Sb-@XCI6}f!J#`ea>9H=V^0XFngfsG zg){yz)hRfrPix?L2te#S2a-$cf7>z*73b`Y#EsjgdcE?QqV|U}6+tZZR5o8xZ-Wu~ zGIFTMj~p?D0@aEntoAo1?2QU>E9klN~FhVO41m)(Da&KSd z2YhY*3VzMm)FI;(hiqVuoaF&)>QO(p{;-v37d&n-`~EvV{wjy^*`8&zba}8^vtT11 z`1%?8^s{s7`}lZS(yiZW9Oz9 z$zSH-;Jr`dwY0s>yhF^SjJzY6DF^l(%v210CW1NBx8Mt7?H>p5TJ1@Cqm*OflPEAN zdYPGj?P6pc^U)Lb!Q3?hOzSvZ%gAby;~6zHSJykshSfneBC>5>$(%-V+447Dy2P+; z@r3jU4@e5@jdgdQ_6NZ{Q`^R^jfI6tk+|RNUNQ1kXF8{?14h6UkW3whQf||2tBbTLZyUvN3)Q_&z__Ueygw=x%yMpXtJ-RRrr@xG}WRBGDj6j`GZ^4sLIGo zQFK0C0L#2zQf_VDUMJnSUds73d5G0UrD*2y6X;eO>F>AG{!HWh=kV{&O4kW-zDPo> zLnQ>|(zo4{KlQ_Zw+NedZ@ znwb``=vYNa59++r`kf+~$L)N+S@_(U0zp(+EWzh~GbK0n1UYxxiQk`Y58n2XT;ECC z;Fay-0pz;#(L`IAFkp`H^1c*e-T ze{7wr_kRc#h=#}AMCgu0-6&QjZI*YO-;de9chB(>r7K+!FENq7_x6BxhEzcns3!IF zg1uZMlJbDTMZzL!IXXHyCk_(aTyBpdp9GFpOGzm3TR*T%czi@jZTt`l#l$@&1J4nx*hcW9HhLecYb|+vSuywJ z0|@77$zq@{FDEbG<@)Y47q^2svaYUt*#~m63k3Ztc&;Goqke5$b%q+z{JHbB>%bCMT4g)w>zs zU$EUA4d_5e6j*ZM1%Uc=G>pZ3AIbu5a5w!R5~lBP>Ve zbZ0W>c_djs3Plq^4UpHtgI}_<3qzp%!W76`s*&~dX6`*>bb%fx7|Sv z=ULjYsS)(Kth@hwye8YTbUhe7Tond_yLn#mI8SE@uc{kgP}41$t>%PIrWg62-k(>k z`qjSoVV?*&9`nc9oS-s%kd~ezgN=n_7<-@hw|$q{NAS6Zw}X z@sbOrZ&{Sq@vwrrK}v0$`b5nCc)~Iff2tV2q-eEatqXp`U772^f3p6Q1Z=)3f)*c5 z5VU;D%-kKN=7yIJ0o9f1J2D6cD>qTqq1&kKCnG6hz)kB!u8Tna9yw2`9fxJ3 zo}lf~UkJ?XiIs^*Y(uH<24anxke=JDyxs=(gwD${iH&k;m42k=k{h!I<#8vBO(5KP zt7%dFP$go7d;YTia?$v$eg%XcH(geJsx!mXwKar+5S0>4@%*!JUoEI{Hhoq)nEU7d+@u*!mY zd`g3EJs>@2+lR-*e8Yp-^c^8;E&hFF)r~QibnHdjhnnuvS!cQ3xdR1K6U?B5A=h3A zRL{(A5Y$e-1zqv4sFm@k>^9qY%%Th1g@byRK?#Pc919VDSlHkj)$T-SDG z7FO0s!0j2wP?)}U_x=2LnjGe+=yOQ}HF5+hXeti*i&i?7!FbA=6 zk=&eh!0|%eZs7yGKV@_AjzIldO@ml@af{nNH?mt)nx(wqwS;iXtO{D}6cgwWBS?{L z{Uf!7$6t-!{GPGTR#zA95@WxCQAxr)Jn3H$JoRInc=OUAqh*@Pp2E4TfT6nAsS_f^ zd$e{D_^X>s3M^!tj8VS9N91XdHyT=?M~0BCmfsx!G9TH`c&8R z$!MLrpak4d!u;lt_UOT-%&q&fq1=r~3 zs;4zZx7baYt^Jj((V{vasyYSVO{hTTchM7J?0F5bb=*iZI?u(Jv*@kWpL6fBZ#xQJ z>d^&H(fKBujZ^D!03!KpINC4Yv?Ot|`%k-q&|VYP-?i3@uZ-D)LMj`YHoagNvCkrF zN#Vyum(oO1+upthwalZZs|)^H*`itn?eFF}!ZmgUa(+6j=Xr)MgWh4|1{+?}L3fN3 zI0JPOroUx{i5Cx<*axvxf*X4plbrw~hTjg3VLR{q?0EN&vJBq$-mjKI*ffe^k{GDJ zHNJ^6`-3LT5s^09`^{rb=UQ{s2+zRs2v5*hn)sKXV!hxBgl&J(&C46Wc8+I4YFwLY zm0!fO7YjjR12M~w>yz)&d0ix9~!2ZjOSTr+v&POvk37@Mn9@|!(9q4 zq}-Mrn%RizdoU0Bj=^Xvi|d$9?#@C@(jfi-;xK0WjsT2F&;d-`qD=*+;-#o6V=_yk z2@H)@PY~r*`4Z@rGEvUq$U}toMPDFDubmKmOE35o$ubML>!&NGTZDl%;(Pa_r)U1O zZ*k5~twrUxcb)+Mpxcp$FYO3w7xyg@6sKFe9|caDhpo|2u|?|EXi)fP)=K7Lu={e68Sv)5$I%_nTa_o zbun~cKIk_i$GwH8aukXWO3?QyH#n99TgdYtunBiM6BidQqm$RC!GUDs*}8(DNr9|+ z*k16@1d#=Q$BOl}=!mnL5cR|o2-jf^ZW}CozwZb;AK1acK{)@&Efn3n^8m}(=)-oe zuKL`v(Dcfn6x(=Bx~a{76DDTi0cf^rjB4xmpvh>=LZ({W&MQ3&)5O1KZz`sr%z$kF zim=$3UX*zIc$#d_tc`%L3B!ckV}qr4CD8J?cuFr%!cq3W4wJ-M>1$=~Je{%~iO(0x5d2T*y)MlmAJcc{0hkJzOdH!>da#F{8 zu;9|4_~CHYWYR8NZgczUvB03@wj?@#OauJ9lHiOBrU%Bx^<(5;Rw*}iBJ5kB#J(se zeH}NC;d#~mSp>q&F$YzR+y(1rrK+ZCxG`BW#`p^P^pDqI4ADHKr%zo^+N93sUtM** z-DLx@Ju%Q2`;QIlK=WFlA9>`yZNW7gW{a6$HWyL)eHnRg;v0nL8R@zAL{`c)-H3+# zrA7QxCGrG)@fsF@`5cE)F%0El%x}pJS9O|Q{0g=5ZC}T~#H-VL?cP9o4iFTwjG&eH z;eRThQ^QAUk*I^%VMaizMIQfb3%kHVf*45`6-n>bsiJJi{{_na=JMAqpnf&+zYh}0 zyEGx8YHai;?*d8Jj^L2k3nuMtiP{v!z=A*h6(;jVIRi)v}xXGCa6P0VVu{N1fxgs#Pl8NiYc zUFu2gXZV-NIgKhi5;*tSIht`Yj@1!@7Or3Ra7#_C3O2EjcN4FG-Q9>IB=1~;v-50| zYFg34wL7iV%=V8JWw7bm_{r}r@Mr0pScB*<3tuz;oy?G;wJV%jaWeW{xAhD=S_1Ff zkMVOH0Gax57GdY^9!U$hA^0z@zwK{B2i^vSUF%&g;n+7#ovOE9w?UcVE^z0EXGFf< ziCmq$Z@FhL(b5yK-~m=bd8|RDG#QLAl$p($U6QzF*La7!FW?rf(67!JyQb?KO9l|k zQ~D9N{2p^C9~&M$e++B1@XX``Nmn^Mtu$=CTkvnLiFD^wuOmu6!p{6liEE3bx4O>Q zxA7$b5eLgMhjr6N>YYI3d8CiI2QL)E&o$}TsJ__m;5WQxyRq@}o=dZI!_bciWa@G} z&mekhc-1>h1CgmQNz=}Y(m%ku{g^{r&Q|~p0auAf>VI0TrRz3rz}{V6JD<9;lKu}c C`+kG~ literal 0 HcmV?d00001 diff --git a/fail2ban/lang/en b/fail2ban/lang/en index 0a31ec4b5..18327033a 100644 --- a/fail2ban/lang/en +++ b/fail2ban/lang/en @@ -133,6 +133,7 @@ log_start=Started Fail2Ban server log_restart=Re-started Fail2Ban server log_atboot=Enabled Fail2Ban at boot time log_delboot=Disabled Fail2Ban at boot time +log_manual=Edited configuration file $1 config_title=Global Configuration config_edef=No Definition section found in config file! @@ -147,6 +148,13 @@ config_err=Failed to save global configuration config_elogtarget=File to write logs to must be an absolute path config_esocket=Socket file must be an absolute path +manual_title=Edit Config Files +manual_desc=File to edit: +manual_ok=OK +manual_efile=Selected file is not part of the Fail2Ban configuration! +manual_err=Failed to edit config file +manual_edata=No config file contents entered + syslog_logtarget=Fail2Ban action log __norefs=1 diff --git a/fail2ban/save_manual.cgi b/fail2ban/save_manual.cgi new file mode 100644 index 000000000..099c1c171 --- /dev/null +++ b/fail2ban/save_manual.cgi @@ -0,0 +1,24 @@ +#!/usr/local/bin/perl +# Save one config file + +use strict; +use warnings; +require './fail2ban-lib.pl'; +our (%in, %text); +&ReadParseMime(); +&error_setup($text{'manual_err'}); + +# Validate inputs +my @files = &list_all_config_files(); +&indexof($in{'file'}, @files) >= 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("");