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;