Compare commits
6 Commits
11_0_0-26_
...
11_0_0-29_
Author | SHA1 | Date | |
---|---|---|---|
2b83be6d70 | |||
6c1b6ed1f4 | |||
3fa8ab5eda | |||
55465e3081 | |||
e5b9a012d9 | |||
fbdf3170ec |
1
.gitignore
vendored
1
.gitignore
vendored
@@ -2,3 +2,4 @@
|
||||
*.log
|
||||
*spec-20*
|
||||
*.tar.xz
|
||||
*.bak
|
||||
|
11
README.md
11
README.md
@@ -13,7 +13,14 @@ SMEServer Koozali developed git repo for smeserver-manager smeserver
|
||||
<br />https://wiki.koozali.org/Server_Manager_2_Howto_incorporate_a_legacy_contrib
|
||||
|
||||
## Bugzilla
|
||||
Show list of outstanding bugs: [here](https://bugs.koozali.org/buglist.cgi?component=smeserver-manager&product=SME%20Server%2010.X&query_format=advanced&limit=0&bug_status=UNCONFIRMED&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&bug_status=CONFIRMED)
|
||||
Show list of outstanding bugs:
|
||||
[All](https://bugs.koozali.org/buglist.cgi?action=wrap&bug_status=UNCONFIRMED&bug_status=CONFIRMED&bug_status=NEEDINFO&bug_status=IN_PROGRESS&bug_status=RESOLVED&bug_status=VERIFIED&cf_package=smeserver-manager&classification=SME+Server&list_id=105756&order=changeddate+DESC%2Ccomponent%2Cpriority%2Cbug_severity&query_format=advanced)
|
||||
[Confirmed](https://bugs.koozali.org/buglist.cgi?action=wrap&bug_status=CONFIRMED&cf_package=smeserver-manager&classification=SME+Server&order=changeddate+DESC%2Ccomponent%2Cpriority%2Cbug_severity&query_format=advanced)
|
||||
[Unconfirmed](https://bugs.koozali.org/buglist.cgi?action=wrap&bug_status=UNCONFIRMED&cf_package=smeserver-manager&classification=SME+Server&order=changeddate+DESC%2Ccomponent%2Cpriority%2Cbug_severity&query_format=advanced)
|
||||
[Need info](https://bugs.koozali.org/buglist.cgi?action=wrap&bug_status=NEEDINFO&cf_package=smeserver-manager&classification=SME+Server&order=changeddate+DESC%2Ccomponent%2Cpriority%2Cbug_severity&query_format=advanced)
|
||||
[In progress](https://bugs.koozali.org/buglist.cgi?action=wrap&bug_status=IN_PROGRESS&cf_package=smeserver-manager&classification=SME+Server&order=changeddate+DESC%2Ccomponent%2Cpriority%2Cbug_severity&query_format=advanced)
|
||||
[Resolved](https://bugs.koozali.org/buglist.cgi?action=wrap&bug_status=RESOLVED&cf_package=smeserver-manager&classification=SME+Server&order=changeddate+DESC%2Ccomponent%2Cpriority%2Cbug_severity&query_format=advanced)
|
||||
[Verified](https://bugs.koozali.org/buglist.cgi?action=wrap&bug_status=VERIFIED&cf_package=smeserver-manager&classification=SME+Server&order=changeddate+DESC%2Ccomponent%2Cpriority%2Cbug_severity&query_format=advanced)
|
||||
|
||||
## Description
|
||||
|
||||
@@ -72,4 +79,4 @@ Dependencies: Relies on specific packages and configurations of SME Server, and
|
||||
|
||||
### Summary
|
||||
|
||||
SMEserver-manager is a powerful tool that brings simplicity and efficiency to server management for small to medium-sized enterprises. By providing a centralized, web-based interface, it allows administrators to manage users, network settings, file sharing, email services, web hosting, and more, all from a single location.
|
||||
SMEserver-manager is a powerful tool that brings simplicity and efficiency to server management for small to medium-sized enterprises. By providing a centralized, web-based interface, it allows administrators to manage users, network settings, file sharing, email services, web hosting, and more, all from a single location.
|
||||
|
@@ -12,6 +12,9 @@ use strict;
|
||||
use warnings;
|
||||
use Mojo::Base 'Mojolicious::Controller';
|
||||
|
||||
use constant FALSE => 0;
|
||||
use constant TRUE => 1;
|
||||
|
||||
use Locale::gettext;
|
||||
use SrvMngr::I18N;
|
||||
|
||||
@@ -36,7 +39,7 @@ sub main {
|
||||
my $title = $c->l('mai_FORM_TITLE');
|
||||
|
||||
$mai_datas{'trt'} = 'LIST';
|
||||
$mai_datas{fetchmailmethod} = $cdb->get_prop('fetchmail', 'Method');
|
||||
$mai_datas{fetchmailmethod} = $c->l($cdb->get_prop('fetchmail', 'Method'));
|
||||
|
||||
$c->stash( title => $title, notif => '', mai_datas => \%mai_datas );
|
||||
$c->render(template => 'emailsettings');
|
||||
@@ -56,11 +59,12 @@ sub do_display {
|
||||
my ($notif, $dest) = '';
|
||||
|
||||
$mai_datas{'trt'} = $trt;
|
||||
$cdb = esmith::ConfigDB->open || die "Couldn't open config db";
|
||||
|
||||
if ( $trt eq 'ACC' )
|
||||
if ( $trt eq 'ACC' )
|
||||
{
|
||||
$dest = 'emailaccess';
|
||||
$mai_datas{fetchmailmethod} = $cdb->get_prop('fetchmail', 'Method');
|
||||
$dest = 'emailaccess';
|
||||
$mai_datas{fetchmailmethod} = $cdb->get_prop('fetchmail', 'Method');
|
||||
}
|
||||
|
||||
if ( $trt eq 'FIL' )
|
||||
@@ -119,6 +123,7 @@ sub do_update {
|
||||
|
||||
my %mai_datas = ();
|
||||
$mai_datas{trt} = $trt;
|
||||
$cdb = esmith::ConfigDB->open || die "Couldn't open config db";
|
||||
|
||||
my $title = $c->l('mai_FORM_TITLE');
|
||||
|
||||
@@ -234,7 +239,6 @@ sub do_update {
|
||||
|
||||
};
|
||||
|
||||
|
||||
sub get_virus_status {
|
||||
|
||||
my ($c, $localise) = @_;
|
||||
@@ -262,10 +266,10 @@ sub localise_status {
|
||||
}
|
||||
|
||||
|
||||
sub get_prop {
|
||||
sub get_db_prop {
|
||||
|
||||
my ($c, $item, $prop, $default) = @_;
|
||||
|
||||
|
||||
return $cdb->get_prop($item, $prop) || $default;
|
||||
}
|
||||
|
||||
@@ -377,6 +381,48 @@ sub get_current_imap_access {
|
||||
}
|
||||
|
||||
|
||||
sub get_current_smtp_ssl_auth {
|
||||
my ($c, $localise, $soru, $debug) = @_;
|
||||
die "Error: \$soru must be either 's' or 'u':$soru.\n" unless $soru eq 's' || $soru eq 'u';
|
||||
|
||||
$cdb = esmith::ConfigDB->open || die "Couldn't open config db";
|
||||
|
||||
# Initialize variables with default values
|
||||
my $smtpStatus = 'none';
|
||||
my $smtpAccess = 'none';
|
||||
my $smtpAuth = 'disabled'; # assuming 'disabled' as a default
|
||||
|
||||
|
||||
|
||||
# Fetch SMTP settings based on the value of `$soru`
|
||||
if ($soru eq "u") {
|
||||
$smtpStatus = $cdb->get_prop('uqpsmtpd', 'status') || 'enabled'; # Fetch from uqpsmtpd
|
||||
$smtpAccess = $cdb->get_prop('uqpsmtpd', 'access') || 'public';
|
||||
$smtpAuth = 'enabled'; # Assuming authentication is enabled in this context
|
||||
} else {
|
||||
$smtpStatus = $cdb->get_prop('sqpsmtpd', 'status') || 'enabled'; # Fetch from sqpsmtpd
|
||||
$smtpAccess = $cdb->get_prop('sqpsmtpd', 'access') || 'public';
|
||||
$smtpAuth = 'enabled'; # Assuming authentication is enabled in this context
|
||||
}
|
||||
|
||||
# Retrieve SMTP SSL authentication options
|
||||
my $options = $c->get_smtp_ssl_auth_options();
|
||||
|
||||
|
||||
if ($soru eq "u" && $debug ) {
|
||||
$c->stash('smtp'=>[$smtpStatus,$smtpAccess,$smtpAuth,$soru,$options->{$smtpAccess},$c->l($options->{$smtpAccess})]);
|
||||
# die "Stop $soru in get_current_smtp_ssl_auth";
|
||||
}
|
||||
|
||||
|
||||
# Return appropriate message based on SMTP settings
|
||||
if ($smtpStatus eq 'enabled' && $smtpAuth eq 'enabled') {
|
||||
return $localise ? $c->l($options->{$smtpAccess}) : $smtpAccess;
|
||||
}
|
||||
|
||||
return $localise ? $c->l($options->{disabled}) : 'disabled';
|
||||
}
|
||||
|
||||
sub get_current_smtp_auth {
|
||||
|
||||
my ($c, $localise) = @_;
|
||||
@@ -384,16 +430,13 @@ sub get_current_smtp_auth {
|
||||
my $smtpStatus = $cdb->get_prop('qpsmtpd', 'status') || 'enabled';
|
||||
my $smtpAuth = $cdb->get_prop('qpsmtpd', 'Authentication') || 'enabled';
|
||||
|
||||
my $smtpsStatus = $cdb->get_prop('sqpsmtpd', 'status') || 'enabled';
|
||||
my $smtpsAuth = $cdb->get_prop('sqpsmtpd', 'Authentication') || 'enabled';
|
||||
|
||||
my $options = get_smtp_auth_options();
|
||||
|
||||
if ($smtpStatus eq 'enabled' && $smtpAuth eq 'enabled')
|
||||
if ($smtpStatus eq 'enabled' && $smtpAuth eq 'disabled')
|
||||
{
|
||||
return $localise ? $c->l($options->{public}) : 'public';
|
||||
}
|
||||
elsif ($smtpsStatus eq 'enabled' && $smtpsAuth eq 'enabled')
|
||||
elsif ($smtpStatus eq 'enabled' && $smtpAuth eq 'enabled')
|
||||
{
|
||||
return $localise ? $c->l($options->{publicSSL}) : 'publicSSL';
|
||||
}
|
||||
@@ -401,6 +444,8 @@ sub get_current_smtp_auth {
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
sub get_current_webmail_status {
|
||||
|
||||
my ($c, $localise) = @_;
|
||||
@@ -500,13 +545,58 @@ sub get_imap_options {
|
||||
}
|
||||
|
||||
|
||||
sub get_smtp_auth_opt {
|
||||
|
||||
my $c = shift;
|
||||
|
||||
return [[ $c->l('mai_SECURE_SMTP') => 'publicSSL'],
|
||||
[ $c->l('Only allow insecure access') => 'public'],
|
||||
[ $c->l('DISABLED') => 'disabled']
|
||||
];
|
||||
}
|
||||
|
||||
sub get_smtp_auth_options {
|
||||
|
||||
my $c = shift;
|
||||
|
||||
my %options = ( disabled => 'DISABLED', publicSSL => 'mai_SECURE_SMTP', public => 'mai_INSECURE_SMTP');
|
||||
my %options = ( publicSSL => 'mai_SECURE_SMTP', public => 'Only allow insecure access',disabled => 'DISABLED');
|
||||
|
||||
\%options;
|
||||
return \%options;
|
||||
}
|
||||
|
||||
|
||||
sub get_smtp_ssl_auth_options {
|
||||
|
||||
my $c = shift;
|
||||
|
||||
my %options = ( public => 'Allow public access', local => 'Allow local access only',disabled => 'DISABLED');
|
||||
|
||||
return \%options;
|
||||
}
|
||||
sub get_smtp_ssl_auth_opt {
|
||||
|
||||
my $c = shift;
|
||||
|
||||
return [[ $c->l('Allow public access') => 'public'],
|
||||
[ $c->l('Allow local access only') => 'local'],
|
||||
[ $c->l('DISABLED') => 'disabled']
|
||||
];
|
||||
}
|
||||
|
||||
sub get_key_by_value {
|
||||
my ($hash_ref, $target_value) = @_;
|
||||
|
||||
# Iterate over the hash
|
||||
while (my ($key, $value) = each %$hash_ref) {
|
||||
return $key if $value eq $target_value;
|
||||
}
|
||||
|
||||
return undef; # Return undef if no match is found
|
||||
}
|
||||
sub get_value_by_key {
|
||||
my ($hash_ref, $key) = @_;
|
||||
|
||||
return $hash_ref->{$key}; # Return the value associated with the key
|
||||
}
|
||||
|
||||
|
||||
@@ -546,15 +636,6 @@ sub get_retrieval_opt {
|
||||
}
|
||||
|
||||
|
||||
sub get_smtp_auth_opt {
|
||||
|
||||
my $c = shift;
|
||||
|
||||
return [[ $c->l('DISABLED') => 'disabled'],
|
||||
[ $c->l('mai_SECURE_SMTP') => 'publicSSL'],
|
||||
[ $c->l('mai_INSECURE_SMTP') => 'public']];
|
||||
}
|
||||
|
||||
|
||||
sub get_emailunknownuser_options {
|
||||
|
||||
@@ -710,18 +791,47 @@ sub change_settings_reception {
|
||||
}
|
||||
}
|
||||
|
||||
my $smtpAuth = ($c->param('SMTPAuth') || 'public');
|
||||
if ($smtpAuth eq 'public') {
|
||||
$cdb->set_prop("qpsmtpd", "Authentication", "enabled" );
|
||||
$cdb->set_prop("sqpsmtpd", "Authentication", "enabled" );
|
||||
} elsif ($smtpAuth eq 'publicSSL') {
|
||||
$cdb->set_prop("qpsmtpd", "Authentication", "disabled" );
|
||||
$cdb->set_prop("sqpsmtpd", "Authentication", "enabled" );
|
||||
} else {
|
||||
$cdb->set_prop("qpsmtpd", "Authentication", "disabled" );
|
||||
$cdb->set_prop("sqpsmtpd", "Authentication", "disabled" );
|
||||
}
|
||||
# Need code here for all 3 options - 25, 465 ad 587
|
||||
# Options for 25 are enabled and disabled
|
||||
# for 465 and 587 are (access) public, local and (status) disabled
|
||||
|
||||
|
||||
#my $smtpAuth = ($c->param('SMTPAuth') || 'public');
|
||||
#if ($smtpAuth eq 'public') {
|
||||
#$cdb->set_prop("qpsmtpd", "Authentication", "enabled" );
|
||||
#$cdb->set_prop("sqpsmtpd", "Authentication", "enabled" );
|
||||
#} elsif ($smtpAuth eq 'publicSSL') {
|
||||
#$cdb->set_prop("qpsmtpd", "Authentication", "disabled" );
|
||||
#$cdb->set_prop("sqpsmtpd", "Authentication", "enabled" );
|
||||
#} else {
|
||||
#$cdb->set_prop("qpsmtpd", "Authentication", "disabled" );
|
||||
#$cdb->set_prop("sqpsmtpd", "Authentication", "disabled" );
|
||||
#}
|
||||
|
||||
my @keys = qw(qpsmtpd uqpsmtpd sqpsmtpd);
|
||||
|
||||
foreach my $key (@keys) {
|
||||
my $param_name = $key eq 'qpsmtpd' ? 'SMTPAuth'
|
||||
: $key eq 'uqpsmtpd' ? 'uSMTPAuth'
|
||||
: 'sSMTPAuth'; # Defaults to 'sSMTPAuth' for 'sqpsmtpd'
|
||||
my $SMTPAuth = $c->param($param_name);
|
||||
if ($SMTPAuth eq 'disabled') {
|
||||
$cdb->set_prop($key, 'status', 'disabled');
|
||||
$cdb->set_prop($key, 'access', 'disabled');
|
||||
} else {
|
||||
$cdb->set_prop($key, 'status', 'enabled');
|
||||
if ($key eq 'qpsmtpd') {
|
||||
my $auth_status = $SMTPAuth eq 'publicSSL' ? 'enabled' : 'disabled';
|
||||
$cdb->set_prop($key, 'Authentication', $auth_status);
|
||||
$cdb->set_prop($key, 'access', 'public');
|
||||
} else {
|
||||
$cdb->set_prop($key, 'Authentication', 'enabled');
|
||||
my $auth_key = ($key eq 'uqpsmtpd') ? 'uSMTPAuth' : 'sSMTPAuth';
|
||||
my $access_value = $c->param($auth_key) eq 'public' ? 'public' : 'local';
|
||||
$cdb->set_prop($key, 'access', $access_value);
|
||||
}
|
||||
}
|
||||
}
|
||||
unless ( system( "/sbin/e-smith/signal-event", "email-update" ) == 0 )
|
||||
{
|
||||
return $c->l('mai_ERROR_UPDATING_CONFIGURATION');
|
||||
@@ -762,7 +872,7 @@ sub change_settings_delivery {
|
||||
sub change_settings_access {
|
||||
|
||||
my $c = shift;
|
||||
$cdb = esmith::ConfigDB->open || die "Couldn't open config db";
|
||||
$cdb = esmith::ConfigDB->open || die "Couldn't open config db";
|
||||
|
||||
my $pop3Access = ($c->param('POPAccess') || 'private');
|
||||
if ($pop3Access eq 'disabled') {
|
||||
@@ -919,4 +1029,4 @@ sub validate_smarthost {
|
||||
}
|
||||
|
||||
|
||||
1;
|
||||
1;
|
@@ -26,165 +26,182 @@ use Socket qw( inet_aton );
|
||||
|
||||
#our @ISA = qw(esmith::FormMagick Exporter);
|
||||
|
||||
our @EXPORT = qw( networkAccess_list passwordLogin_list get_ssh_permit_root_login get_ssh_access get_telnet_mode
|
||||
get_ftp_access get_ftp_password_login_access
|
||||
get_value get_prop get_ssh_password_auth
|
||||
validate_network_and_mask ip_number_or_blank subnet_mask_or_blank
|
||||
get_ipsecrw_sessions pptp_and_dhcp_range
|
||||
);
|
||||
our @EXPORT =
|
||||
qw( networkAccess_list passwordLogin_list get_ssh_permit_root_login get_ssh_access get_telnet_mode
|
||||
get_ftp_access get_ftp_password_login_access
|
||||
get_value get_prop get_ssh_password_auth
|
||||
validate_network_and_mask ip_number_or_blank subnet_mask_or_blank
|
||||
get_ipsecrw_sessions pptp_and_dhcp_range
|
||||
);
|
||||
|
||||
# get_pptp_sessions
|
||||
|
||||
our $db = esmith::ConfigDB->open || warn "Couldn't open configuration database";
|
||||
|
||||
|
||||
sub main {
|
||||
|
||||
my $c = shift;
|
||||
$c->app->log->info($c->log_req);
|
||||
$c->app->log->info( $c->log_req );
|
||||
|
||||
my $title = $c->l('rma_FORM_TITLE');
|
||||
my $notif = '';
|
||||
my $title = $c->l('rma_FORM_TITLE');
|
||||
my $notif = '';
|
||||
my %rma_datas = ();
|
||||
|
||||
$db = esmith::ConfigDB->open || warn "Couldn't open configuration database";
|
||||
|
||||
#$rma_datas{ipsecrwSess} = $c->get_ipsecrw_sessions();
|
||||
#$rma_datas{pptpSessions} = $c->get_pptp_sessions();
|
||||
$rma_datas{sshAccess} = $c->get_ssh_access();
|
||||
$rma_datas{sshPermitRootLogin} = $c->get_ssh_permit_root_login();
|
||||
$rma_datas{sshAccess} = $c->get_ssh_access();
|
||||
$rma_datas{sshPermitRootLogin} = $c->get_ssh_permit_root_login();
|
||||
$rma_datas{sshPasswordAuthentication} = $c->get_ssh_password_auth();
|
||||
$rma_datas{sshTCPPort} = $c->get_ssh_port();
|
||||
$rma_datas{ftpAccess} = $c->get_ftp_access();
|
||||
$rma_datas{ftpPasswordAccess} = $c->get_ftp_password_login_access();
|
||||
$rma_datas{sshTCPPort} = $c->get_ssh_port();
|
||||
$rma_datas{ftpAccess} = $c->get_ftp_access();
|
||||
$rma_datas{ftpPasswordAccess} = $c->get_ftp_password_login_access();
|
||||
|
||||
#$rma_datas{telnetAccess} = $c->get_telnet_access;
|
||||
|
||||
$c->stash( title => $title, notif => $notif, rma_datas => \%rma_datas );
|
||||
$c->render(template => 'remoteaccess');
|
||||
|
||||
};
|
||||
$c->render( template => 'remoteaccess' );
|
||||
|
||||
}
|
||||
|
||||
sub do_action {
|
||||
|
||||
my $c = shift;
|
||||
$c->app->log->info($c->log_req);
|
||||
$c->app->log->info( $c->log_req );
|
||||
|
||||
my $title = $c->l('rma_FORM_TITLE');
|
||||
my ($result, $res, $trt) = '';
|
||||
my ( $result, $res, $trt ) = '';
|
||||
my %rma_datas = ();
|
||||
|
||||
$rma_datas{ipsecrwSess} = ($c->param ('IpsecrwSess') || '');
|
||||
$rma_datas{ipsecrwReset} = ($c->param ('IpsecrwReset') || '');
|
||||
$db = esmith::ConfigDB->open || warn "Couldn't open configuration database";
|
||||
|
||||
$rma_datas{ipsecrwSess} = ( $c->param('IpsecrwSess') || '' );
|
||||
$rma_datas{ipsecrwReset} = ( $c->param('IpsecrwReset') || '' );
|
||||
|
||||
#$rma_datas{pptpSessions} = ($c->param ('PptpSessions') || '0');
|
||||
|
||||
$rma_datas{validFromNetwork} = ($c->param ('ValidFromNetwork') || '');
|
||||
$rma_datas{validFromMask} = ($c->param ('ValidFromMask') || '');
|
||||
$rma_datas{validFromNetwork} = ( $c->param('ValidFromNetwork') || '' );
|
||||
$rma_datas{validFromMask} = ( $c->param('ValidFromMask') || '' );
|
||||
## my @remove = $q->param('validFromRemove'); ???????? the first one only !!
|
||||
my @vals = $c->param ('Remove_nets');
|
||||
my @vals = $c->param('Remove_nets');
|
||||
$rma_datas{remove_nets} = join ',', @vals;
|
||||
|
||||
$rma_datas{sshaccess} = ($c->param ('SshAccess') || 'off');
|
||||
$rma_datas{sshPermitRootLogin} = ($c->param ('SshPermitRootLogin') || 'no');
|
||||
$rma_datas{sshPasswordAuthentication} = ($c->param ('SshPasswordAuthentication') || 'no');
|
||||
$rma_datas{sshTCPPort} = ($c->param ('SshTCPPort') || '22');
|
||||
$rma_datas{sshaccess} = ( $c->param('SshAccess') || 'off' );
|
||||
$rma_datas{sshPermitRootLogin} =
|
||||
( $c->param('SshPermitRootLogin') || 'no' );
|
||||
$rma_datas{sshPasswordAuthentication} =
|
||||
( $c->param('SshPasswordAuthentication') || 'no' );
|
||||
$rma_datas{sshTCPPort} = ( $c->param('SshTCPPort') || '22' );
|
||||
|
||||
$rma_datas{ftpAccess} = ($c->param ('FtpAccess') || 'off');
|
||||
$rma_datas{ftpPasswordAccess} = ($c->param ('FtpPasswordAccess') || 'private');
|
||||
$rma_datas{ftpAccess} = ( $c->param('FtpAccess') || 'off' );
|
||||
$rma_datas{ftpPasswordAccess} =
|
||||
( $c->param('FtpPasswordAccess') || 'private' );
|
||||
|
||||
$rma_datas{telnetAccess} = ($c->param ('TelnetAccess') || 'off');
|
||||
$rma_datas{telnetAccess} = ( $c->param('TelnetAccess') || 'off' );
|
||||
|
||||
# validate
|
||||
my $v = $c->validation;
|
||||
return $c->render('remoteaccess') unless $v->has_data;
|
||||
|
||||
#$v->optional('PptpSessions')->num(0, 999)->is_valid;
|
||||
$v->optional('ValidFromNetwork')->size(7, 15)->is_valid;
|
||||
$v->optional('ValidFromMask')->size(7, 15)->is_valid;
|
||||
$v->required('SshTCPPort')->num(1, 65535)->is_valid;
|
||||
if ( $c->param('ValidFromNetwork') ne "" ) {
|
||||
$v->optional('ValidFromNetwork')->size( 7, 15 )->is_valid;
|
||||
}
|
||||
if ( $c->param('ValidFromMask') ne "" ) {
|
||||
$v->optional('ValidFromMask')->size( 7, 15 )->is_valid;
|
||||
}
|
||||
$v->required('SshTCPPort')->num( 1, 65535 )->is_valid;
|
||||
|
||||
$result .= 'field validation error' if $v->has_error;
|
||||
|
||||
if ( ! $result ) {
|
||||
if ( !$result ) {
|
||||
|
||||
# controls
|
||||
#$res = pptp_and_dhcp_range( $c, $rma_datas{pptpSessions} );
|
||||
#$result .= $res . ' ' unless $res eq 'OK';
|
||||
# controls
|
||||
#$res = pptp_and_dhcp_range( $c, $rma_datas{pptpSessions} );
|
||||
#$result .= $res . ' ' unless $res eq 'OK';
|
||||
|
||||
$res = ip_number_or_blank( $c, $rma_datas{validFromNetwork} );
|
||||
$result .= $res . ' ' unless $res eq 'OK';
|
||||
$res = ip_number_or_blank( $c, $rma_datas{validFromNetwork} );
|
||||
$result .= $res . ' ' unless $res eq 'OK';
|
||||
|
||||
$res = subnet_mask_or_blank( $c, $rma_datas{validFromMask} );
|
||||
$result .= $res . ' ' unless $res eq 'OK';
|
||||
$res = subnet_mask_or_blank( $c, $rma_datas{validFromMask} );
|
||||
$result .= $res . ' ' unless $res eq 'OK';
|
||||
|
||||
$res = validate_network_and_mask( $c, $rma_datas{validFromNetwork}, $rma_datas{validFromMask} );
|
||||
$result .= $res . ' ' unless $res eq 'OK';
|
||||
$res = validate_network_and_mask(
|
||||
$c,
|
||||
$rma_datas{validFromNetwork},
|
||||
$rma_datas{validFromMask}
|
||||
);
|
||||
$result .= $res . ' ' unless $res eq 'OK';
|
||||
|
||||
#$result .= ' blocked for testing !' . $rma_datas{remove_nets};
|
||||
#$result .= ' blocked for testing !' . $rma_datas{remove_nets};
|
||||
}
|
||||
|
||||
if ( ! $result ) {
|
||||
if ( !$result ) {
|
||||
$res = change_settings( $c, %rma_datas );
|
||||
$result .= $res unless $res eq 'OK';
|
||||
}
|
||||
|
||||
if ( ! $result ) {
|
||||
$result = $c->l('rma_ACTION_SUCCEEDED');
|
||||
$trt = 'SUC';
|
||||
|
||||
if ( $result eq "" ) {
|
||||
$result = $c->l('rma_SUCCESS');
|
||||
$trt = 'SUC';
|
||||
}
|
||||
|
||||
$c->stash( title => $title, notif => $result, rma_datas => \%rma_datas );
|
||||
|
||||
if ( $trt ne 'SUC' ) {
|
||||
return $c->render(template => 'remoteaccess');
|
||||
#return $c->render( template => 'remoteaccess' );
|
||||
|
||||
if ( $trt eq 'SUC' ) {
|
||||
$c->stash( title => $title,modul => $result);
|
||||
return $c->render( template => 'module' );
|
||||
}
|
||||
|
||||
$c->redirect_to('/remoteaccess');
|
||||
|
||||
};
|
||||
return $c->render( template => 'remoteaccess' );
|
||||
#$c->redirect_to('/remoteaccess');
|
||||
|
||||
}
|
||||
|
||||
sub networkAccess_list {
|
||||
my $c = shift;
|
||||
return [[ $c->l('rma_NO_ACCESS') => 'off'],
|
||||
[ $c->l('NETWORKS_ALLOW_LOCAL') => 'private'],
|
||||
[ $c->l('NETWORKS_ALLOW_PUBLIC') => 'public']];
|
||||
return [
|
||||
[ $c->l('rma_NO_ACCESS') => 'off' ],
|
||||
[ $c->l('NETWORKS_ALLOW_LOCAL') => 'private' ],
|
||||
[ $c->l('NETWORKS_ALLOW_PUBLIC') => 'public' ]
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
sub passwordLogin_list {
|
||||
my $c = shift;
|
||||
return [[$c->l('rma_PASSWORD_LOGIN_PRIVATE') => 'private'],
|
||||
[$c->l('rma_PASSWORD_LOGIN_PUBLIC') => 'public']];
|
||||
return [
|
||||
[ $c->l('rma_PASSWORD_LOGIN_PRIVATE') => 'private' ],
|
||||
[ $c->l('rma_PASSWORD_LOGIN_PUBLIC') => 'public' ]
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
sub get_prop {
|
||||
|
||||
my ($c, $item, $prop) = @_;
|
||||
warn "You must specify a record key" unless $item;
|
||||
warn "You must specify a property name" unless $prop;
|
||||
my $record = $db->get($item) or warn "Couldn't get record for $item";
|
||||
return $record ? $record->prop($prop) : undef;
|
||||
my ( $c, $item, $prop ) = @_;
|
||||
warn "You must specify a record key" unless $item;
|
||||
warn "You must specify a property name" unless $prop;
|
||||
my $record = $db->get($item) or warn "Couldn't get record for $item";
|
||||
return $record ? $record->prop($prop) : undef;
|
||||
}
|
||||
|
||||
|
||||
sub get_value {
|
||||
|
||||
my $c = shift;
|
||||
my $item = shift;
|
||||
return ($db->get($item)->value());
|
||||
my $c = shift;
|
||||
my $item = shift;
|
||||
return ( $db->get($item)->value() );
|
||||
}
|
||||
|
||||
|
||||
sub get_ftp_access {
|
||||
|
||||
my $status = get_prop('','ftp','status') || 'disabled';
|
||||
my $status = get_prop( '', 'ftp', 'status' ) || 'disabled';
|
||||
return 'off' unless $status eq 'enabled';
|
||||
|
||||
my $access = get_prop('','ftp','access') || 'private';
|
||||
return ($access eq 'public') ? 'normal' : 'private';
|
||||
my $access = get_prop( '', 'ftp', 'access' ) || 'private';
|
||||
return ( $access eq 'public' ) ? 'normal' : 'private';
|
||||
}
|
||||
|
||||
|
||||
#sub get_pptp_sessions {
|
||||
# my $status = get_prop('','pptpd','status');
|
||||
# if (defined($status) && ($status eq 'enabled')) {
|
||||
@@ -192,314 +209,317 @@ sub get_ftp_access {
|
||||
# return '0';
|
||||
#}
|
||||
|
||||
|
||||
sub get_ssh_permit_root_login {
|
||||
return(get_prop('','sshd','PermitRootLogin') || 'no');
|
||||
return ( get_prop( '', 'sshd', 'PermitRootLogin' ) || 'no' );
|
||||
}
|
||||
|
||||
|
||||
sub get_ssh_password_auth {
|
||||
return(get_prop('','sshd','PasswordAuthentication') || 'yes');
|
||||
return ( get_prop( '', 'sshd', 'PasswordAuthentication' ) || 'yes' );
|
||||
}
|
||||
|
||||
|
||||
sub get_ssh_access {
|
||||
|
||||
my $status = get_prop('','sshd','status');
|
||||
if (defined($status) && ($status eq 'enabled')) {
|
||||
my $access = get_prop('','sshd','access');
|
||||
$access = ($access eq 'public') ? 'public' : 'private';
|
||||
return($access);
|
||||
}
|
||||
else {
|
||||
return('off');
|
||||
}
|
||||
my $status = get_prop( '', 'sshd', 'status' );
|
||||
if ( defined($status) && ( $status eq 'enabled' ) ) {
|
||||
my $access = get_prop( '', 'sshd', 'access' );
|
||||
$access = ( $access eq 'public' ) ? 'public' : 'private';
|
||||
return ($access);
|
||||
}
|
||||
else {
|
||||
return ('off');
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
sub get_ssh_port {
|
||||
return(get_prop('$c','sshd','TCPPort') || '22');
|
||||
return ( get_prop( '$c', 'sshd', 'TCPPort' ) || '22' );
|
||||
}
|
||||
|
||||
|
||||
sub get_ftp_password_login_access {
|
||||
|
||||
my $status = get_prop('','ftp','status') || 'disabled';
|
||||
my $status = get_prop( '', 'ftp', 'status' ) || 'disabled';
|
||||
return 'private' unless $status eq 'enabled';
|
||||
|
||||
my $access = get_prop('','ftp','LoginAccess') || 'private';
|
||||
my $access = get_prop( '', 'ftp', 'LoginAccess' ) || 'private';
|
||||
|
||||
return ($access eq 'public') ? 'public' : 'private';
|
||||
return ( $access eq 'public' ) ? 'public' : 'private';
|
||||
}
|
||||
|
||||
|
||||
sub get_telnet_mode {
|
||||
|
||||
my $telnet = $db->get('telnet');
|
||||
return('off') unless $telnet;
|
||||
my $status = $telnet->prop('status') || 'disabled';
|
||||
return('off') unless $status eq 'enabled';
|
||||
my $access = $telnet->prop('access') || 'private';
|
||||
return ($access eq "public") ? "public" : "private";
|
||||
my $telnet = $db->get('telnet');
|
||||
return ('off') unless $telnet;
|
||||
my $status = $telnet->prop('status') || 'disabled';
|
||||
return ('off') unless $status eq 'enabled';
|
||||
my $access = $telnet->prop('access') || 'private';
|
||||
return ( $access eq "public" ) ? "public" : "private";
|
||||
}
|
||||
|
||||
sub get_ipsecrw_sessions {
|
||||
|
||||
sub get_ipsecrw_sessions {
|
||||
|
||||
my $status = $db->get('ipsec')->prop('RoadWarriorStatus');
|
||||
if (defined($status) && ($status eq 'enabled')) {
|
||||
return($db->get('ipsec')->prop('RoadWarriorSessions') || '0');
|
||||
}
|
||||
else {
|
||||
return('0');
|
||||
}
|
||||
my $status = $db->get('ipsec')->prop('RoadWarriorStatus');
|
||||
if ( defined($status) && ( $status eq 'enabled' ) ) {
|
||||
return ( $db->get('ipsec')->prop('RoadWarriorSessions') || '0' );
|
||||
}
|
||||
else {
|
||||
return ('0');
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
sub get_ipsecrw_status {
|
||||
|
||||
return undef unless ( $db->get('ipsec'));
|
||||
return $db->get('ipsec')->prop('RoadWarriorStatus');
|
||||
return undef unless ( $db->get('ipsec') );
|
||||
return $db->get('ipsec')->prop('RoadWarriorStatus');
|
||||
|
||||
}
|
||||
|
||||
|
||||
sub pptp_and_dhcp_range {
|
||||
|
||||
my $c = shift;
|
||||
my $val = shift || 0;
|
||||
my $dhcp_status = $db->get_prop('dhcpd','status') || 'disabled';
|
||||
my $dhcp_end = $db->get_prop('dhcpd','end') || '';
|
||||
my $dhcp_start = $db->get_prop('dhcpd','start') || '';
|
||||
my $c = shift;
|
||||
my $val = shift || 0;
|
||||
my $dhcp_status = $db->get_prop( 'dhcpd', 'status' ) || 'disabled';
|
||||
my $dhcp_end = $db->get_prop( 'dhcpd', 'end' ) || '';
|
||||
my $dhcp_start = $db->get_prop( 'dhcpd', 'start' ) || '';
|
||||
|
||||
if ( $dhcp_status eq 'enabled' ) {
|
||||
my $ip_start = unpack 'N', inet_aton($dhcp_start);
|
||||
my $ip_end = unpack 'N', inet_aton($dhcp_end);
|
||||
my $ip_count = $ip_end - $ip_start;
|
||||
return 'OK' if( $val < $ip_count );
|
||||
return $c->l('rma_NUMBER_OF_PPTP_CLIENTS_MUST_BE_LESSER_THAN_NUMBER_OF_IP_IN_DHCP_RANGE');
|
||||
} else {
|
||||
my $ip_start = unpack 'N', inet_aton($dhcp_start);
|
||||
my $ip_end = unpack 'N', inet_aton($dhcp_end);
|
||||
my $ip_count = $ip_end - $ip_start;
|
||||
return 'OK' if ( $val < $ip_count );
|
||||
return $c->l(
|
||||
'rma_NUMBER_OF_PPTP_CLIENTS_MUST_BE_LESSER_THAN_NUMBER_OF_IP_IN_DHCP_RANGE'
|
||||
);
|
||||
}
|
||||
else {
|
||||
return 'OK';
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
sub _get_valid_from {
|
||||
|
||||
my $c = shift;
|
||||
my $c = shift;
|
||||
|
||||
my $rec = $db->get('httpd-admin');
|
||||
return undef unless($rec);
|
||||
my @vals = (split ',', ($rec->prop('ValidFrom') || ''));
|
||||
return @vals;
|
||||
my $rec = $db->get('httpd-admin');
|
||||
return undef unless ($rec);
|
||||
my @vals = ( split ',', ( $rec->prop('ValidFrom') || '' ) );
|
||||
return @vals;
|
||||
}
|
||||
|
||||
|
||||
sub ip_number_or_blank {
|
||||
|
||||
my $c = shift;
|
||||
my $c = shift;
|
||||
my $ip = shift;
|
||||
|
||||
if (!defined($ip) || $ip eq "") {
|
||||
return 'OK';
|
||||
if ( !defined($ip) || $ip eq "" ) {
|
||||
return 'OK';
|
||||
}
|
||||
return ip_number($c, $ip);
|
||||
return ip_number( $c, $ip );
|
||||
}
|
||||
|
||||
|
||||
sub subnet_mask_or_blank {
|
||||
|
||||
my $c = shift;
|
||||
my $c = shift;
|
||||
my $mask = shift;
|
||||
|
||||
if (!defined($mask) || $mask eq "") {
|
||||
if ( !defined($mask) || $mask eq "" ) {
|
||||
return "OK";
|
||||
}
|
||||
|
||||
chomp $mask ;
|
||||
chomp $mask;
|
||||
|
||||
return ( subnet_mask( $mask ) ne 'OK' ) ? $c->l('rma_INVALID_SUBNET_MASK') . " (" . $mask . ")" : 'OK';
|
||||
return ( subnet_mask($mask) ne 'OK' )
|
||||
? $c->l('rma_INVALID_SUBNET_MASK') . " (" . $mask . ")"
|
||||
: 'OK';
|
||||
}
|
||||
|
||||
|
||||
sub validate_network_and_mask {
|
||||
|
||||
my $c = shift;
|
||||
my $net = shift || "";
|
||||
my $mask = shift || "";
|
||||
my $c = shift;
|
||||
my $net = shift || "";
|
||||
my $mask = shift || "";
|
||||
|
||||
if ($net xor $mask) {
|
||||
return $c->l('rma_ERR_INVALID_PARAMS' . " (" . $net."/".$mask . ")");
|
||||
}
|
||||
return 'OK';
|
||||
if ( $net xor $mask ) {
|
||||
return $c->l(
|
||||
'rma_ERR_INVALID_PARAMS' . " (" . $net . "/" . $mask . ")" );
|
||||
}
|
||||
return 'OK';
|
||||
}
|
||||
|
||||
|
||||
sub change_settings {
|
||||
|
||||
my ($c, %rma_datas) = @_;
|
||||
my ( $c, %rma_datas ) = @_;
|
||||
|
||||
#------------------------------------------------------------
|
||||
# good; go ahead and change the access.
|
||||
#------------------------------------------------------------
|
||||
|
||||
my $rec = $db->get('telnet');
|
||||
if($rec) {
|
||||
if ($rma_datas{telnetAccess} eq "off") {
|
||||
$rec->set_prop('status','disabled');
|
||||
} else {
|
||||
$rec->set_prop('status','enabled');
|
||||
$rec->set_prop('access', $rma_datas{telnetAccess});
|
||||
}
|
||||
if ($rec) {
|
||||
if ( $rma_datas{telnetAccess} eq "off" ) {
|
||||
$rec->set_prop( 'status', 'disabled' );
|
||||
}
|
||||
else {
|
||||
$rec->set_prop( 'status', 'enabled' );
|
||||
$rec->set_prop( 'access', $rma_datas{telnetAccess} );
|
||||
}
|
||||
}
|
||||
|
||||
$rec = $db->get('sshd') || $db->new_record('sshd', {type => 'service'});
|
||||
$rec->set_prop('TCPPort', $rma_datas{sshTCPPort});
|
||||
$rec->set_prop('status', ( $rma_datas{sshaccess} eq "off" ? 'disabled' : 'enabled'));
|
||||
$rec->set_prop('access', $rma_datas{sshaccess});
|
||||
$rec->set_prop('PermitRootLogin', $rma_datas{sshPermitRootLogin});
|
||||
$rec->set_prop('PasswordAuthentication', $rma_datas{sshPasswordAuthentication});
|
||||
|
||||
$rec = $db->get('sshd') || $db->new_record( 'sshd', { type => 'service' } );
|
||||
$rec->set_prop( 'TCPPort', $rma_datas{sshTCPPort} );
|
||||
$rec->set_prop( 'status',
|
||||
( $rma_datas{sshaccess} eq "off" ? 'disabled' : 'enabled' ) );
|
||||
$rec->set_prop( 'access', $rma_datas{sshaccess} );
|
||||
$rec->set_prop( 'PermitRootLogin', $rma_datas{sshPermitRootLogin} );
|
||||
$rec->set_prop( 'PasswordAuthentication',
|
||||
$rma_datas{sshPasswordAuthentication} );
|
||||
|
||||
$rec = $db->get('ftp');
|
||||
if($rec) {
|
||||
if ($rma_datas{ftpAccess} eq "off") {
|
||||
$rec->set_prop('status', 'disabled');
|
||||
$rec->set_prop('access', 'private');
|
||||
$rec->set_prop('LoginAccess', 'private');
|
||||
} elsif ($rma_datas{ftpAccess} eq "normal") {
|
||||
$rec->set_prop('status', 'enabled');
|
||||
$rec->set_prop('access', 'public');
|
||||
$rec->set_prop('LoginAccess', $rma_datas{ftpPasswordAccess});
|
||||
} else {
|
||||
$rec->set_prop('status', 'enabled');
|
||||
$rec->set_prop('access', 'private');
|
||||
$rec->set_prop('LoginAccess', $rma_datas{ftpPasswordAccess});
|
||||
}
|
||||
if ($rec) {
|
||||
if ( $rma_datas{ftpAccess} eq "off" ) {
|
||||
$rec->set_prop( 'status', 'disabled' );
|
||||
$rec->set_prop( 'access', 'private' );
|
||||
$rec->set_prop( 'LoginAccess', 'private' );
|
||||
}
|
||||
elsif ( $rma_datas{ftpAccess} eq "normal" ) {
|
||||
$rec->set_prop( 'status', 'enabled' );
|
||||
$rec->set_prop( 'access', 'public' );
|
||||
$rec->set_prop( 'LoginAccess', $rma_datas{ftpPasswordAccess} );
|
||||
}
|
||||
else {
|
||||
$rec->set_prop( 'status', 'enabled' );
|
||||
$rec->set_prop( 'access', 'private' );
|
||||
$rec->set_prop( 'LoginAccess', $rma_datas{ftpPasswordAccess} );
|
||||
}
|
||||
}
|
||||
|
||||
# if ($rma_datas{pptpSessions} == 0) {
|
||||
# $db->get('pptpd')->set_prop('status', 'disabled');
|
||||
# } else {
|
||||
# $db->get('pptpd')->set_prop('status', 'enabled');
|
||||
# $db->get('pptpd')->set_prop('sessions', $rma_datas{pptpSessions});
|
||||
# }
|
||||
# if ($rma_datas{pptpSessions} == 0) {
|
||||
# $db->get('pptpd')->set_prop('status', 'disabled');
|
||||
# } else {
|
||||
# $db->get('pptpd')->set_prop('status', 'enabled');
|
||||
# $db->get('pptpd')->set_prop('sessions', $rma_datas{pptpSessions});
|
||||
# }
|
||||
|
||||
if ( $rma_datas{validFromNetwork} && $rma_datas{validFromMask} ) {
|
||||
unless (add_new_valid_from( $c, $rma_datas{validFromNetwork}, $rma_datas{validFromMask} )) {
|
||||
return $c->l('rma_ERROR_UPDATING_CONFIGURATION') . 'new net';
|
||||
}
|
||||
unless (
|
||||
add_new_valid_from(
|
||||
$c,
|
||||
$rma_datas{validFromNetwork},
|
||||
$rma_datas{validFromMask}
|
||||
)
|
||||
)
|
||||
{
|
||||
return $c->l('rma_ERROR_UPDATING_CONFIGURATION') . 'new net';
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if ( $rma_datas{remove_nets} ) {
|
||||
unless (remove_valid_from( $c, $rma_datas{remove_nets} )) {
|
||||
return $c->l('rma_ERROR_UPDATING_CONFIGURATION') . 'del net';
|
||||
}
|
||||
unless ( remove_valid_from( $c, $rma_datas{remove_nets} ) ) {
|
||||
return $c->l('rma_ERROR_UPDATING_CONFIGURATION') . 'del net';
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
# reset ipsec roadwarrior CA,server,client certificates
|
||||
if ($rma_datas{ipsecrwReset}) {
|
||||
system('/sbin/e-smith/roadwarrior', 'reset_certs') == 0 or
|
||||
return $c->l('rma_ERROR_UPDATING_CONFIGURATION') . 'rst ipsec';
|
||||
if ( $rma_datas{ipsecrwReset} ) {
|
||||
system( '/sbin/e-smith/roadwarrior', 'reset_certs' ) == 0
|
||||
or return $c->l('rma_ERROR_UPDATING_CONFIGURATION') . 'rst ipsec';
|
||||
}
|
||||
|
||||
if ( $rma_datas{ipsecrwSess} ) {
|
||||
set_ipsecrw_sessions( $c, $rma_datas{ipsecrwSess} );
|
||||
set_ipsecrw_sessions( $c, $rma_datas{ipsecrwSess} );
|
||||
}
|
||||
|
||||
unless ( system( "/sbin/e-smith/signal-event", "remoteaccess-update" ) == 0 ) {
|
||||
unless (
|
||||
system( "/sbin/e-smith/signal-event", "remoteaccess-update" ) == 0 )
|
||||
{
|
||||
return $c->l('rma_ERROR_UPDATING_CONFIGURATION');
|
||||
}
|
||||
|
||||
return 'OK';
|
||||
}
|
||||
|
||||
|
||||
sub set_ipsecrw_sessions {
|
||||
|
||||
my $c = shift;
|
||||
my $c = shift;
|
||||
my $sessions = shift;
|
||||
|
||||
if (defined $sessions) {
|
||||
$db->get('ipsec')->set_prop('RoadWarriorSessions', $sessions);
|
||||
if (int($sessions) > 0) {
|
||||
$db->get('ipsec')->set_prop('RoadWarriorStatus', 'enabled');
|
||||
}
|
||||
if ( defined $sessions ) {
|
||||
$db->get('ipsec')->set_prop( 'RoadWarriorSessions', $sessions );
|
||||
if ( int($sessions) > 0 ) {
|
||||
$db->get('ipsec')->set_prop( 'RoadWarriorStatus', 'enabled' );
|
||||
}
|
||||
}
|
||||
return '';
|
||||
}
|
||||
|
||||
|
||||
sub add_new_valid_from {
|
||||
|
||||
my $c = shift;
|
||||
my $net = shift;
|
||||
my $mask = shift;
|
||||
my $c = shift;
|
||||
my $net = shift;
|
||||
my $mask = shift;
|
||||
|
||||
# we transform bit mask to regular mask
|
||||
$mask = get_reg_mask( $net, $mask );
|
||||
|
||||
my $rec = $db->get('httpd-admin');
|
||||
return $c->error('ERR_NO_RECORD') unless $rec;
|
||||
# we transform bit mask to regular mask
|
||||
$mask = get_reg_mask( $net, $mask );
|
||||
|
||||
my $prop = $rec->prop('ValidFrom') || '';
|
||||
my $rec = $db->get('httpd-admin');
|
||||
return $c->error('ERR_NO_RECORD') unless $rec;
|
||||
|
||||
my @vals = split /,/, $prop;
|
||||
return '' if (grep /^$net\/$mask$/, @vals); # already have this entry
|
||||
my $prop = $rec->prop('ValidFrom') || '';
|
||||
|
||||
if ($prop ne '') {
|
||||
$prop .= ",$net/$mask";
|
||||
} else {
|
||||
$prop = "$net/$mask";
|
||||
}
|
||||
my @vals = split /,/, $prop;
|
||||
return '' if ( grep /^$net\/$mask$/, @vals ); # already have this entry
|
||||
|
||||
$rec->set_prop('ValidFrom', $prop);
|
||||
if ( $prop ne '' ) {
|
||||
$prop .= ",$net/$mask";
|
||||
}
|
||||
else {
|
||||
$prop = "$net/$mask";
|
||||
}
|
||||
|
||||
return 1;
|
||||
$rec->set_prop( 'ValidFrom', $prop );
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
sub remove_valid_from {
|
||||
|
||||
my $c = shift;
|
||||
my $remove_nets = shift;
|
||||
my $c = shift;
|
||||
my $remove_nets = shift;
|
||||
|
||||
my @remove = split /,/, $remove_nets;
|
||||
my @remove = split /,/, $remove_nets;
|
||||
|
||||
# my @remove = $c->param('Remove_nets');
|
||||
my @vals = $c->_get_valid_from();
|
||||
# my @remove = $c->param('Remove_nets');
|
||||
my @vals = $c->_get_valid_from();
|
||||
|
||||
foreach my $entry (@remove) {
|
||||
|
||||
return undef unless $entry;
|
||||
foreach my $entry (@remove) {
|
||||
|
||||
my ($net, $mask) = split (/\//, $entry);
|
||||
return undef unless $entry;
|
||||
|
||||
unless (@vals) {
|
||||
print STDERR "ERROR: unable to load ValidFrom property from conf db\n";
|
||||
return undef;
|
||||
}
|
||||
my ( $net, $mask ) = split( /\//, $entry );
|
||||
|
||||
# what if we don't have a mask because someone added an entry from
|
||||
# the command line? by the time we get here, the panel will have
|
||||
# added a 32 bit mask, so we don't know for sure if the value in db
|
||||
# is $net alone or $net/255.255.255.255. we have to check for both
|
||||
# in this special case...
|
||||
@vals = (grep { $entry ne $_ && $net ne $_ } @vals);
|
||||
}
|
||||
unless (@vals) {
|
||||
print STDERR
|
||||
"ERROR: unable to load ValidFrom property from conf db\n";
|
||||
return undef;
|
||||
}
|
||||
|
||||
my $prop;
|
||||
if (@vals) {
|
||||
$prop = join ',',@vals;
|
||||
} else {
|
||||
$prop = '';
|
||||
}
|
||||
# what if we don't have a mask because someone added an entry from
|
||||
# the command line? by the time we get here, the panel will have
|
||||
# added a 32 bit mask, so we don't know for sure if the value in db
|
||||
# is $net alone or $net/255.255.255.255. we have to check for both
|
||||
# in this special case...
|
||||
@vals = ( grep { $entry ne $_ && $net ne $_ } @vals );
|
||||
}
|
||||
|
||||
$db->get('httpd-admin')->set_prop('ValidFrom', $prop);
|
||||
my $prop;
|
||||
if (@vals) {
|
||||
$prop = join ',', @vals;
|
||||
}
|
||||
else {
|
||||
$prop = '';
|
||||
}
|
||||
|
||||
return 1;
|
||||
$db->get('httpd-admin')->set_prop( 'ValidFrom', $prop );
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
1;
|
||||
1;
|
@@ -1,12 +1,17 @@
|
||||
% layout 'default', title => "Sme server 2 - emailreceive";
|
||||
|
||||
% content_for 'module' => begin
|
||||
|
||||
% use constant FALSE => 0;
|
||||
% use constant TRUE => 1;
|
||||
|
||||
<div id='module' class='module emailreceive-panel'>
|
||||
|
||||
% if ($config->{debug} == 1) {
|
||||
<p>
|
||||
%= dumper $c->current_route
|
||||
%= dumper $mai_datas
|
||||
%= dumper $c->param('SMTPAuth')
|
||||
</p>
|
||||
% }
|
||||
|
||||
@@ -26,16 +31,65 @@
|
||||
%=l 'mai_LABEL_MODE'
|
||||
</span><span class=input>
|
||||
% param 'FetchmailMethod' => $mai_datas->{fetchmailmethod} unless param 'FetchmailMethod';
|
||||
<!--
|
||||
<pre>
|
||||
%= dumper $mai_datas->{fetchmailmethod}
|
||||
%= dumper $c->get_retrieval_opt()
|
||||
%= param 'FetchmailMethod'
|
||||
</pre>
|
||||
-->
|
||||
%= select_field 'FetchmailMethod' => $c->get_retrieval_opt(), class => 'input'
|
||||
</span></p>
|
||||
|
||||
%=l 'mai_DESC_SMTP_AUTH_CONTROL'
|
||||
%#=l 'mai_DESC_SMTP_AUTH_CONTROL'
|
||||
<br />
|
||||
%= l "SMTP port (25) main purpose is to receive emails from another server, STARTTLS is always offered, but auth if offered is only if STARTTLS is also used by client."
|
||||
<br />
|
||||
%= l "SMTPS port (465) will require implicit SSL/TLS then authenticate to send."
|
||||
<br />
|
||||
%= l "SMTP Submission port (587) will require STARTTLS, then authenticate to send."
|
||||
<br />
|
||||
|
||||
% my $smtp_mesg=l('SMTP port %u allow client to authenticate:');
|
||||
<p><span class=label>
|
||||
%=l 'mai_LABEL_SMTP_AUTH_CONTROL'
|
||||
%= sprintf($smtp_mesg,$c->get_db_prop('qpsmtpd','TCPPort',25));
|
||||
</span><span class=input>
|
||||
% param 'SMTPAuth' => $c->get_current_smtp_auth() unless param 'SMTPAuth';
|
||||
%= select_field 'SMTPAuth' => $c->get_smtp_auth_opt(), class => 'input'
|
||||
% param 'SMTPAuth' => $c->get_current_smtp_auth( FALSE ) unless param 'SMTPAuth';
|
||||
<!--
|
||||
<pre>
|
||||
%= dumper $c->get_smtp_auth_opt()
|
||||
%= dumper $c->get_current_smtp_auth(FALSE)
|
||||
%= dumper $c->get_db_prop("qpsmtpd","Authentication")
|
||||
%= param 'SMTPAuth'
|
||||
</pre>
|
||||
-->
|
||||
%= select_field 'SMTPAuth' => $c->get_smtp_auth_opt(), class => 'input'
|
||||
</span></p>
|
||||
|
||||
% my $smtp_mesg=l('SMTPS SSL/TLS auth: port %u status:');
|
||||
<p><span class=label>
|
||||
%= sprintf($smtp_mesg,$c->get_db_prop('sqpsmtpd','TCPPort',465));
|
||||
</span><span class=input>
|
||||
% param 'sSMTPAuth' => $c->get_current_smtp_ssl_auth(FALSE,'s', TRUE) unless param 'sSMTPAuth';
|
||||
|
||||
%= select_field 'sSMTPAuth' => $c->get_smtp_ssl_auth_opt(), class => 'input'
|
||||
</span></p>
|
||||
|
||||
%my $smtp_mesg=l('Submission port %u status:');
|
||||
<p><span class=label>
|
||||
%= sprintf($smtp_mesg,$c->get_db_prop('uqpsmtpd','TCPPort',587));
|
||||
</span><span class=input>
|
||||
% param 'uSMTPAuth' => $c->get_current_smtp_ssl_auth(FALSE,'u', TRUE) unless param 'uSMTPAuth';
|
||||
<!--
|
||||
<pre>
|
||||
%= dumper $c->get_smtp_ssl_auth_opt()
|
||||
%= dumper $c->get_current_smtp_ssl_auth(FALSE,'s', TRUE)
|
||||
%= dumper $c->get_current_smtp_ssl_auth(FALSE,'u', TRUE)
|
||||
%= dumper $c->get_db_prop("uqpsmtpd","access")
|
||||
%= param 'uSMTPAuth'
|
||||
</pre>
|
||||
-->
|
||||
%= select_field 'uSMTPAuth' => $c->get_smtp_ssl_auth_opt(), class => 'input'
|
||||
</span></p>
|
||||
|
||||
<hr class="sectionbar" />
|
||||
@@ -110,4 +164,4 @@
|
||||
% end
|
||||
|
||||
</div>
|
||||
%end
|
||||
%end
|
@@ -1,9 +1,13 @@
|
||||
% layout 'default', title => "Sme server 2 - emailsettings";
|
||||
|
||||
% content_for 'module' => begin
|
||||
|
||||
% use constant FALSE => 0;
|
||||
% use constant TRUE => 1;
|
||||
|
||||
<div id='module' class='module emailsettings-panel'>
|
||||
|
||||
% if ($config->{debug} == 1) {
|
||||
% if ($config->{debug} == TRUE) {
|
||||
<p>
|
||||
%= dumper $c->current_route
|
||||
%= dumper $mai_datas
|
||||
@@ -22,19 +26,19 @@
|
||||
<p><span class=label>
|
||||
%=l 'mai_LABEL_POP_ACCESS_CONTROL'
|
||||
</span><span class=data2>
|
||||
%= $c->get_current_pop3_access( 1 )
|
||||
%= $c->get_current_pop3_access( TRUE )
|
||||
</span></p>
|
||||
|
||||
<p><span class=label>
|
||||
%=l 'mai_LABEL_IMAP_ACCESS_CONTROL'
|
||||
</span><span class=data2>
|
||||
%= $c->get_current_imap_access( 1 )
|
||||
%= $c->get_current_imap_access( TRUE )
|
||||
</span></p>
|
||||
|
||||
<p><span class=label>
|
||||
%=l 'mai_LABEL_WEBMAIL'
|
||||
</span><span class=data2>
|
||||
%= $c->get_current_webmail_status( 1 )
|
||||
%= $c->get_current_webmail_status( TRUE )
|
||||
</span></p>
|
||||
|
||||
% my $btn = l('mai_DESC_STATE_ACCESS_BUTTON');
|
||||
@@ -51,19 +55,19 @@
|
||||
<p><span class=label>
|
||||
%=l 'mai_LABEL_VIRUS_SCAN'
|
||||
</span><span class=data2>
|
||||
%= $c->get_virus_status(1)
|
||||
%= $c->get_virus_status(TRUE)
|
||||
</span></p>
|
||||
|
||||
<p><span class=label>
|
||||
%=l 'mai_LABEL_SPAM_SCAN'
|
||||
</span><span class=data2>
|
||||
%= $c->get_spam_status(1)
|
||||
%= $c->get_spam_status(TRUE)
|
||||
</span></p>
|
||||
|
||||
<p><span class=label>
|
||||
%=l 'mai_LABEL_BLOCK_EXECUTABLE_CONTENT'
|
||||
</span><span class=data2>
|
||||
%= $c->get_patterns_status(1)
|
||||
%= $c->get_patterns_status(TRUE)
|
||||
</span></p>
|
||||
|
||||
% my $btn = l('mai_DESC_STATE_FILTERING_BUTTON');
|
||||
@@ -83,12 +87,28 @@
|
||||
%= $mai_datas->{fetchmailmethod}
|
||||
</span></p>
|
||||
|
||||
% my $smtp_mesg=l('SMTP port %u allow client to authenticate:');
|
||||
<p><span class=label>
|
||||
%=l 'mai_LABEL_SMTP_AUTH_CONTROL'
|
||||
%= sprintf($smtp_mesg,$c->get_db_prop('qpsmtpd','TCPPort',25));
|
||||
</span><span class=data2>
|
||||
%= $c->get_current_smtp_auth( 1 )
|
||||
%= $c->get_current_smtp_auth( TRUE )
|
||||
</span></p>
|
||||
|
||||
% my $smtp_mesg=l('SMTPS SSL/TLS auth: port %u status:');
|
||||
<p><span class=label>
|
||||
%= sprintf($smtp_mesg,$c->get_db_prop('sqpsmtpd','TCPPort',465));
|
||||
</span><span class=data2>
|
||||
%= $c->get_current_smtp_ssl_auth( TRUE, 's', FALSE )
|
||||
</span></p>
|
||||
|
||||
%my $smtp_mesg=l 'Submission port %u status:';
|
||||
<p><span class=label>
|
||||
%= sprintf($smtp_mesg,$c->get_db_prop('uqpsmtpd','TCPPort',587));
|
||||
</span><span class=data2>
|
||||
%= $c->get_current_smtp_ssl_auth( TRUE,'u', FALSE )
|
||||
</span></p>
|
||||
<br />
|
||||
|
||||
% my $btn = l('mai_DESC_STATE_RECEPTION_BUTTON');
|
||||
<div class='center'>
|
||||
%= submit_button "$btn", class => 'action'
|
||||
@@ -103,7 +123,7 @@
|
||||
<p><span class=label>
|
||||
%=l 'mai_LABEL_UNKNOWN'
|
||||
</span><span class=data2>
|
||||
%= $c->get_emailunknownuser_status( 1 )
|
||||
%= $c->get_emailunknownuser_status( TRUE )
|
||||
</span></p>
|
||||
|
||||
<p><span class=label>
|
||||
@@ -127,4 +147,4 @@
|
||||
% end
|
||||
|
||||
</div>
|
||||
%end
|
||||
%end
|
@@ -79,14 +79,14 @@
|
||||
%
|
||||
% my $thisdomain = session 'SystemName';
|
||||
% $thisdomain .= ".".session 'DomainName';
|
||||
%# my $thisdomain = "localhost";
|
||||
|
||||
<td class='sme-border' style="min-width:35em">
|
||||
<%= $c->render_to_string(inline => $actionModify) %>
|
||||
<%= $c->render_to_string(inline => $actionResetPw) %>
|
||||
<%= $c->render_to_string(inline => $actionLock) %>
|
||||
<%= $c->render_to_string(inline => $actionRemove) %>
|
||||
%# <a href="<%= "https://sme11.thereadclan.me.uk/" %>roundcube?_user=<%= $username %>"><button class="sme-email-button" title="<%= l('EMAIL') %>"><%= l('EMAIL') %></button></a>
|
||||
<a href="<%= "legacypanel/?url=https://".$thisdomain."/" %>roundcube?_user=<%= $username %>"><button class="sme-email-button" title="<%= l('EMAIL') %>"><%= l('EMAIL') %></button></a>
|
||||
<a href="<%= "roundcubepanel/?url=https://".$thisdomain."/" %>roundcube?_user=<%= $username %>"><button class="sme-email-button" title="<%= l('EMAIL') %>"><%= l('EMAIL') %></button></a>
|
||||
</td>
|
||||
</tr>
|
||||
% }
|
||||
|
@@ -2,7 +2,7 @@ Summary: Sme server navigation module : manager 2
|
||||
%define name smeserver-manager
|
||||
Name: %{name}
|
||||
%define version 11.0.0
|
||||
%define release 26
|
||||
%define release 29
|
||||
Version: %{version}
|
||||
Release: %{release}%{?dist}
|
||||
License: GPL
|
||||
@@ -113,6 +113,16 @@ true
|
||||
%defattr(-,root,root)
|
||||
|
||||
%changelog
|
||||
* Tue Nov 26 2024 Brian Read <brianr@koozali.org> 11.0.0-29.sme
|
||||
- Fix remoteaccess panel, reformat pm file and bring success panel into line with other similar panels [SME: 12747]
|
||||
|
||||
* Fri Oct 18 2024 Brian Read <brianr@koozali.org> 11.0.0-28.sme
|
||||
- Add in emailsettings for port 25,465 and 587 [SME: 12750]
|
||||
- Comment out change to localhost for roundcube in _user_list email icon setting [SME: 12751]
|
||||
|
||||
* Sun Oct 06 2024 Brian Read <brianr@koozali.org> 11.0.0-27.sme
|
||||
- Add in change to _user_list.html.ep for access to roundcube email from useraccounts [SME: 12751]
|
||||
|
||||
* Fri Oct 04 2024 Brian Read <brianr@koozali.org> 11.0.0-26.sme
|
||||
- Add in email link to roundcube from user accounts [SME: 12751]
|
||||
|
||||
|
Reference in New Issue
Block a user