diff -urN smeserver-xt_geoip-1.0.1.old/root/etc/e-smith/locale/en-us/etc/e-smith/web/functions/xt_geoip smeserver-xt_geoip-1.0.1/root/etc/e-smith/locale/en-us/etc/e-smith/web/functions/xt_geoip --- smeserver-xt_geoip-1.0.1.old/root/etc/e-smith/locale/en-us/etc/e-smith/web/functions/xt_geoip 2019-04-29 20:23:21.000000000 +0400 +++ smeserver-xt_geoip-1.0.1/root/etc/e-smith/locale/en-us/etc/e-smith/web/functions/xt_geoip 2019-04-29 19:35:33.000000000 +0400 @@ -96,12 +96,12 @@ IPT_LIST - Geoip ban + Stats of XT-geoip prevented connections SSH_LIST - Ssh errors + Stats of SSH errors not blocked by XT-geoip diff -urN smeserver-xt_geoip-1.0.1.old/root/etc/e-smith/locale/fr/etc/e-smith/web/functions/xt_geoip smeserver-xt_geoip-1.0.1/root/etc/e-smith/locale/fr/etc/e-smith/web/functions/xt_geoip --- smeserver-xt_geoip-1.0.1.old/root/etc/e-smith/locale/fr/etc/e-smith/web/functions/xt_geoip 2019-04-29 20:23:21.000000000 +0400 +++ smeserver-xt_geoip-1.0.1/root/etc/e-smith/locale/fr/etc/e-smith/web/functions/xt_geoip 2019-04-29 19:33:56.000000000 +0400 @@ -93,14 +93,15 @@ IPT_LIST - Geoip stop + Stats des connexions évitées à l'aide de XT-geoip SSH_LIST - Ssh erreurs + Stats des erreurs SSH non bloquées par XT-geoip + STATS_GENERATED Statistiques générées diff -urN smeserver-xt_geoip-1.0.1.old/root/usr/share/perl5/vendor_perl/esmith/FormMagick/Panel/xt_geoip.pm smeserver-xt_geoip-1.0.1/root/usr/share/perl5/vendor_perl/esmith/FormMagick/Panel/xt_geoip.pm --- smeserver-xt_geoip-1.0.1.old/root/usr/share/perl5/vendor_perl/esmith/FormMagick/Panel/xt_geoip.pm 2019-04-29 20:23:21.000000000 +0400 +++ smeserver-xt_geoip-1.0.1/root/usr/share/perl5/vendor_perl/esmith/FormMagick/Panel/xt_geoip.pm 2019-04-25 20:33:34.000000000 +0400 @@ -26,6 +26,15 @@ get_date_update change_settings must_exist + print_service_table + get_stat_geoip + print_custom_button + generateStats + get_srv_name + get_srv_badcountries + remove_serv + modify_serv + srv_must_exist ); our $VERSION = sprintf '%d.%03d', q$Revision: 1.1 $ =~ /: (\d+).(\d+)/; @@ -215,7 +224,7 @@ my @mq_bcs = split /[,:]/, $q->param("masq_badcountries"); if (@mq_bcs) { my $ctr = @mq_bcs; - return $self->localise('ERR_COUNTRY_MAX: {$ctr}', {ctr=> "$ctr"}) if ($ctr > 50); + return $self->localise('ERROR_COUNTRY_MAX: {$ctr}', {ctr=> "$ctr"}) if ($ctr > 50); foreach my $bcs (@mq_bcs) { my $file = "/usr/share/xt_geoip/LE/" . $bcs . ".iv4"; @@ -249,7 +258,7 @@ $stats_type =~ /(.+)/; $stats_type = $1; if ($stats_type ne "ipt" && $stats_type ne "ssh") { - print $q->p($q->b($self->localise('INVALID_STATS_TYPE'). + print $q->p($q->b($self->localise('INVALID_STATS_TYPE')." ". $stats_type)); return ''; } else { @@ -271,8 +280,174 @@ print "\n"; print $q->h3($self->localise('END_OF_STATS')); + $self->wherenext('First'); return ''; } } +sub get_srv_name +{ + my ($self) = @_; + return $self->cgi->param('name'); +} + +sub get_srv_badcountries +{ + my ($self) = @_; + my $name = $self->cgi->param('name'); + return $db->get_prop($name, "BadCountries"); +} + +sub print_service_table { + my $self = shift; + my $q = $self->{cgi}; + my $servname = $self->localise('NAME'); + my $port = $self->localise('PORT'); + my $status = $self->localise('STATUS'); + my $access = $self->localise('ACCESS'); + my $servBC = $self->localise('BADCOUNTRIES'); + my $modify = $self->localise('MODIFY'); + my $remove = $self->localise('REMOVE'); + my $action_h = $self->localise('ACTION'); + + my @services = split(/,/, $db->get_prop("masq", "XtServices")); + #my @services = ('imaps','pop3s','sshd','ftp','ssmtpd'); + + unless ( scalar @services ) + { + print $q->Tr($q->td($self->localise('NO_SERVICES'))); + return ""; + } + + print $q->start_table({-CLASS => "sme-border"}),"\n"; + print $q->Tr ( + esmith::cgi::genSmallCell($q, $servname,"header"), + esmith::cgi::genSmallCell($q, $port,"header"), + esmith::cgi::genSmallCell($q, $status,"header"), + esmith::cgi::genSmallCell($q, $access,"header"), + esmith::cgi::genSmallCell($q, $servBC,"header"), + esmith::cgi::genSmallCell($q, $action_h,"header", 2)),"\n"; + + my $scriptname = basename($0); + + foreach my $servname (@services) + { + my $i = $db->get($servname); + + my $port = $i->prop('TCPPort'); + my $status = $i->prop('status'); + my $access = $i->prop('access'); + my $servBC = $i->prop('BadCountries') || ' '; + + my $params = $self->build_serv_cgi_params($servname, $i->props()); + + my $href = "$scriptname?$params&action=modify&wherenext="; + + my $actionModify = ' '; + $actionModify .= $q->a({href => "${href}SrvModify"},$modify) + . ' '; + + my $actionRemove = ' '; + $actionRemove .= $q->a({href => "${href}SrvRemove"}, $remove) + . ' '; + + my $color = 'red'; + if ($status eq 'disabled' || $access ne 'public') { $color = 'green'; } + print $q->Tr ( + esmith::cgi::genSmallCell($q, $servname,"normal"), + esmith::cgi::genSmallCell($q, $port,"normal"), + esmith::cgi::genSmallCell($q, $status,"header"), + esmith::cgi::genSmallCell($q, $access,"header"), + esmith::cgi::genSmallCell($q, "" . $servBC . "","header"), + esmith::cgi::genSmallCell($q, $actionModify,"normal"), + esmith::cgi::genSmallCell($q, $actionRemove,"normal")); + } + + print $q->end_table,"\n"; + + return ""; +} + +sub build_serv_cgi_params { + my ($self, $servname, %oldprops) = @_; + + my %props = ( + page => 0, + page_stack => "", + name => $servname, + ); + + return $self->props_to_query_string(\%props); +} + +sub remove_serv { + my ($self) = @_; + my $name = $self->cgi->param('name'); + if (my $serv = $db->get($name)) { + my $servBC = $serv->prop('BadCountries') || ''; + if ($servBC ne '') { + $db->set_prop($name, "BadCountries", ''); + # Untaint $name before use in system() + # $name =~ /(.+)/; $name = $1; + if (system ("/sbin/e-smith/signal-event", "xt_geoip-service") == 0) + { + return $self->success("SUCCESSFULLY_DELETED_SERVICE"); + } else { + return $self->error("ERROR_WHILE_DELETING_SERVICE"); + } + } else { + return $self->success('NO_CHANGE'); + } + + } else { + $self->error('CANT_FIND_SERV'); + } + $self->wherenext('First'); +} + +sub modify_serv { + my ($self) = @_; + my $name = $self->cgi->param('name'); + if (my $serv = $db->get($name)) { + my $servBC = $serv->prop('BadCountries') || ''; + + my $q = $self->{'cgi'}; + my $n_servBC = $q->param("masq_srv_badcountries") || $servBC; + + if ($n_servBC eq $servBC) { + return $self->success("NO_CHANGE") + } + $db->set_prop($name, "BadCountries", $n_servBC); + + if (system ( "/sbin/e-smith/signal-event", "xt_geoip-service" ) == 0 ) + { + return $self->success("SUCCESS"); + } else { + return $self->error("ERROR_UPDATING"); + } + } else { + $self->error('CANT_FIND_SERV'); + } + $self->wherenext('First'); +} + +sub srv_must_exist +{ + my $self = shift; + my $q = $self->{cgi}; + my $listerr = ""; + my @mq_bcs = split /[,:]/, $q->param("masq_srv_badcountries"); + if (@mq_bcs) { + my $ctr = @mq_bcs; + return $self->localise('ERROR_COUNTRY_MAX: {$ctr}', {ctr=> "$ctr"}) if ($ctr > 50); + + foreach my $bcs (@mq_bcs) { + my $file = "/usr/share/xt_geoip/LE/" . $bcs . ".iv4"; + if (! -f $file) { $listerr .= $bcs . ","; } + } + return $self->localise('ERR_COUNTRY_NOT_EXIST: {$listerr}', {listerr=> "$listerr"}) if $listerr; + } + return 'OK'; +} + 1;