diff --git a/core/app.cpp b/core/app.cpp index a605009..8463971 100755 --- a/core/app.cpp +++ b/core/app.cpp @@ -366,6 +366,7 @@ void App::ProcessRequest() // simple operations which should not throw an exception templates.RequestEnd(); cur.request->Clear(); + cur.session->ClearOnEndRequest(); cur.session = session_manager.GetTmpSession(); log << logendrequest; } diff --git a/core/ipbancontainer.cpp b/core/ipbancontainer.cpp index 58e7ab4..2abbaf4 100644 --- a/core/ipbancontainer.cpp +++ b/core/ipbancontainer.cpp @@ -88,8 +88,6 @@ void IPBanContainer::Clear() // to be less or equal to soft_max_size void IPBanContainer::RemoveOldRecords() { - PrintTab(); - size_t to_remove = 0; if( ipban_tab.size() >= soft_max_size ) @@ -97,35 +95,22 @@ void IPBanContainer::RemoveOldRecords() if( to_remove > 0 ) { - log << log4 << "we are going to remove: " << to_remove << " records" << logend; - sort_helper_tab.resize(ipban_tab.size()); for(size_t i=0 ; i 0 ) - { - log << log4 << "removing record index: " << sort_helper_tab[to_remove] << ", last_used: "; - PT::Date date(ipban_tab[sort_helper_tab[to_remove]].last_used); - log << date << logend; - ipban_tab.erase(ipban_tab.begin() + sort_helper_tab[to_remove]); - } - - log << log4 << "after removing we have: " << logend; - PrintTab(); } } +// for debug purposes void IPBanContainer::PrintTab() { log << log4 << "ipban_tab (size: " << ipban_tab.size() << ")" << logend; @@ -142,6 +127,8 @@ void IPBanContainer::PrintTab() } } + +// for debug purposes void IPBanContainer::PrintTab2() { log << log4 << "sort_helper_tab (size: " << sort_helper_tab.size() << ")" << logend; diff --git a/core/session.cpp b/core/session.cpp index 5597c57..15d8c48 100755 --- a/core/session.cpp +++ b/core/session.cpp @@ -85,3 +85,10 @@ void Session::Clear(bool clear_plugin_data) } +// clearing some variables when a request is ended (just for safety) +void Session::ClearOnEndRequest() +{ + // ip_ban list can be sorted by SessionManager (in the special thread) + ip_ban = 0; +} + diff --git a/core/session.h b/core/session.h index f786fb1..1834b20 100755 --- a/core/session.h +++ b/core/session.h @@ -32,6 +32,7 @@ struct Session void SetTimesTo(time_t time); void Clear(bool clear_plugin_data = true); + void ClearOnEndRequest(); // 0 - means that there is a temporary session diff --git a/functions/Makefile.dep b/functions/Makefile.dep index 6e5a5fd..e70794f 100755 --- a/functions/Makefile.dep +++ b/functions/Makefile.dep @@ -544,7 +544,7 @@ ipban.o: ../notify/templatesnotify.h ../core/users.h ../core/ugcontainer.h ipban.o: ../core/lastcontainer.h ../core/mounts.h ../core/mountparser.h ipban.o: ../core/crypt.h ../core/users.h ../core/groups.h ../core/group.h ipban.o: ../core/loadavg.h ../core/image.h ../core/threadmanager.h -ipban.o: ../core/timezones.h ../core/synchro.h +ipban.o: ../core/timezones.h ../core/synchro.h ../core/sessionmanager.h last.o: last.h functionbase.h ../core/item.h ../../pikotools/space/space.h last.o: ../../pikotools/textstream/types.h ../../pikotools/date/date.h last.o: ../db/db.h ../db/dbbase.h ../db/dbconn.h ../db/dbtextstream.h diff --git a/functions/ipban.cpp b/functions/ipban.cpp index 9528c0f..8088bc6 100755 --- a/functions/ipban.cpp +++ b/functions/ipban.cpp @@ -48,12 +48,21 @@ void IPBanFun::MakeGet() if( cur->request->ParamValue(L"removeip") == L"all" ) { session_manager->ClearIPBanList(); + cur->session->ip_ban = 0; } else { + int cur_ip = 0; + + if( cur->session->ip_ban ) + cur_ip = cur->session->ip_ban->ip; + AssignString(cur->request->ParamValue(L"removeip"), tmp_ip_str); int ip = (int)inet_addr(tmp_ip_str.c_str()); session_manager->RemoveIPBan(ip); + + if( cur->session->ip_ban && cur_ip == ip ) + cur->session->ip_ban = 0; } system->RedirectToLastFunction(); diff --git a/html/fun_ipban.html b/html/fun_ipban.html index d21a8b4..1295bba 100644 --- a/html/fun_ipban.html +++ b/html/fun_ipban.html @@ -1,21 +1,21 @@
-

IP Banned

+

{ipban_header}

[if ipban_tab] - - - - - - - - - + + + + + + + + + [for ipban_tab] @@ -24,23 +24,23 @@ - + - + - + [end]
IdIP addresslogin failuresLogin allowedBan levelActive flagLast usedExpiresRemove{ipban_col_id}{ipban_col_ip_address}{ipban_col_login_failures}{ipban_col_login_allowed}{ipban_col_ban_level}{ipban_col_active_flag}{ipban_col_last_used}{ipban_col_expires}{ipban_col_remove}
[ipban_tab_id] [ipban_tab_ip] [ipban_tab_incorrect_login][if ipban_tab_is_logging_allowed]yes[else]no[end][if ipban_tab_is_logging_allowed]{ipban_loggin_allowed}[else]{ipban_loggin_not_allowed}[end] [ipban_tab_ban_level][if ipban_tab_has_active_flag]yes[end][if ipban_tab_has_active_flag]{ipban_has_active_flag}[end] [ipban_tab_last_used] [ipban_tab_expires]remove{ipban_remove_ip}

- Remove all IP's from the list + {ipban_remove_all_ip}

[else] -

There are not any IP addresses banned at the moment.

+

{ipban_ban_list_empty}

[end]
diff --git a/locale/en b/locale/en index e3e5127..4848eff 100755 --- a/locale/en +++ b/locale/en @@ -152,6 +152,25 @@ ls_header = Directory listing ls_pictures_in_dir = Pictures in directory ls_no_picture = There are not any pictures in this directory +ipban_header = IP Banned +ipban_col_id = Id +ipban_col_ip_address = IP address +ipban_col_login_failures = login failures +ipban_col_login_allowed = Login allowed +ipban_col_ban_level = Ban level +ipban_col_active_flag = Active flag +ipban_col_last_used = Last used +ipban_col_expires = Expires +ipban_col_remove = Remove +ipban_loggin_allowed = yes +ipban_loggin_not_allowed = no +ipban_has_active_flag = yes +ipban_remove_ip = remove +ipban_remove_all_ip = Remove all IP's from the list +ipban_ban_list_empty = There are not any IP addresses banned at the moment. + + + man_header = Man man_winix_funcions = Winix functions man_ezc_functions = EZC templates functions diff --git a/locale/pl b/locale/pl index 8ab0de9..5aa48ef 100755 --- a/locale/pl +++ b/locale/pl @@ -156,6 +156,24 @@ ls_pictures_in_dir = Obrazy w katalogu ls_no_picture = W tym katalogu nie ma żadnego obrazu +ipban_header = Lista zbanowanych adresów IP +ipban_col_id = L.p. +ipban_col_ip_address = adres IP +ipban_col_login_failures = nieprawidłowe logowania +ipban_col_login_allowed = możliwe logowanie +ipban_col_ban_level = Rodzaj banu +ipban_col_active_flag = Flaga active +ipban_col_last_used = Ostatnio używany +ipban_col_expires = Wygasza +ipban_col_remove = Usuń +ipban_loggin_allowed = tak +ipban_loggin_not_allowed = nie +ipban_has_active_flag = tak +ipban_remove_ip = usuń +ipban_remove_all_ip = Usuń wszystkie adresy IP z listy +ipban_ban_list_empty = W tej chwili nie ma żadnych zbanowanych adresów IP. + + meta_header = Meta form_meta_legend = Formularz zmiany meta informacji