Fix 1267 in remoteaccess panel

This commit is contained in:
Brian Read 2024-11-26 16:38:31 +00:00
parent 6c1b6ed1f4
commit 2b83be6d70
2 changed files with 283 additions and 260 deletions

View File

@ -26,165 +26,182 @@ use Socket qw( inet_aton );
#our @ISA = qw(esmith::FormMagick Exporter); #our @ISA = qw(esmith::FormMagick Exporter);
our @EXPORT = qw( networkAccess_list passwordLogin_list get_ssh_permit_root_login get_ssh_access get_telnet_mode our @EXPORT =
get_ftp_access get_ftp_password_login_access qw( networkAccess_list passwordLogin_list get_ssh_permit_root_login get_ssh_access get_telnet_mode
get_value get_prop get_ssh_password_auth get_ftp_access get_ftp_password_login_access
validate_network_and_mask ip_number_or_blank subnet_mask_or_blank get_value get_prop get_ssh_password_auth
get_ipsecrw_sessions pptp_and_dhcp_range validate_network_and_mask ip_number_or_blank subnet_mask_or_blank
); get_ipsecrw_sessions pptp_and_dhcp_range
);
# get_pptp_sessions # get_pptp_sessions
our $db = esmith::ConfigDB->open || warn "Couldn't open configuration database"; our $db = esmith::ConfigDB->open || warn "Couldn't open configuration database";
sub main { sub main {
my $c = shift; 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 $title = $c->l('rma_FORM_TITLE');
my $notif = ''; my $notif = '';
my %rma_datas = (); my %rma_datas = ();
$db = esmith::ConfigDB->open || warn "Couldn't open configuration database";
#$rma_datas{ipsecrwSess} = $c->get_ipsecrw_sessions(); #$rma_datas{ipsecrwSess} = $c->get_ipsecrw_sessions();
#$rma_datas{pptpSessions} = $c->get_pptp_sessions(); #$rma_datas{pptpSessions} = $c->get_pptp_sessions();
$rma_datas{sshAccess} = $c->get_ssh_access(); $rma_datas{sshAccess} = $c->get_ssh_access();
$rma_datas{sshPermitRootLogin} = $c->get_ssh_permit_root_login(); $rma_datas{sshPermitRootLogin} = $c->get_ssh_permit_root_login();
$rma_datas{sshPasswordAuthentication} = $c->get_ssh_password_auth(); $rma_datas{sshPasswordAuthentication} = $c->get_ssh_password_auth();
$rma_datas{sshTCPPort} = $c->get_ssh_port(); $rma_datas{sshTCPPort} = $c->get_ssh_port();
$rma_datas{ftpAccess} = $c->get_ftp_access(); $rma_datas{ftpAccess} = $c->get_ftp_access();
$rma_datas{ftpPasswordAccess} = $c->get_ftp_password_login_access(); $rma_datas{ftpPasswordAccess} = $c->get_ftp_password_login_access();
#$rma_datas{telnetAccess} = $c->get_telnet_access; #$rma_datas{telnetAccess} = $c->get_telnet_access;
$c->stash( title => $title, notif => $notif, rma_datas => \%rma_datas ); $c->stash( title => $title, notif => $notif, rma_datas => \%rma_datas );
$c->render(template => 'remoteaccess'); $c->render( template => 'remoteaccess' );
};
}
sub do_action { sub do_action {
my $c = shift; 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 $title = $c->l('rma_FORM_TITLE');
my ($result, $res, $trt) = ''; my ( $result, $res, $trt ) = '';
my %rma_datas = (); my %rma_datas = ();
$rma_datas{ipsecrwSess} = ($c->param ('IpsecrwSess') || ''); $db = esmith::ConfigDB->open || warn "Couldn't open configuration database";
$rma_datas{ipsecrwReset} = ($c->param ('IpsecrwReset') || '');
$rma_datas{ipsecrwSess} = ( $c->param('IpsecrwSess') || '' );
$rma_datas{ipsecrwReset} = ( $c->param('IpsecrwReset') || '' );
#$rma_datas{pptpSessions} = ($c->param ('PptpSessions') || '0'); #$rma_datas{pptpSessions} = ($c->param ('PptpSessions') || '0');
$rma_datas{validFromNetwork} = ($c->param ('ValidFromNetwork') || ''); $rma_datas{validFromNetwork} = ( $c->param('ValidFromNetwork') || '' );
$rma_datas{validFromMask} = ($c->param ('ValidFromMask') || ''); $rma_datas{validFromMask} = ( $c->param('ValidFromMask') || '' );
## my @remove = $q->param('validFromRemove'); ???????? the first one only !! ## 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{remove_nets} = join ',', @vals;
$rma_datas{sshaccess} = ($c->param ('SshAccess') || 'off'); $rma_datas{sshaccess} = ( $c->param('SshAccess') || 'off' );
$rma_datas{sshPermitRootLogin} = ($c->param ('SshPermitRootLogin') || 'no'); $rma_datas{sshPermitRootLogin} =
$rma_datas{sshPasswordAuthentication} = ($c->param ('SshPasswordAuthentication') || 'no'); ( $c->param('SshPermitRootLogin') || 'no' );
$rma_datas{sshTCPPort} = ($c->param ('SshTCPPort') || '22'); $rma_datas{sshPasswordAuthentication} =
( $c->param('SshPasswordAuthentication') || 'no' );
$rma_datas{sshTCPPort} = ( $c->param('SshTCPPort') || '22' );
$rma_datas{ftpAccess} = ($c->param ('FtpAccess') || 'off'); $rma_datas{ftpAccess} = ( $c->param('FtpAccess') || 'off' );
$rma_datas{ftpPasswordAccess} = ($c->param ('FtpPasswordAccess') || 'private'); $rma_datas{ftpPasswordAccess} =
( $c->param('FtpPasswordAccess') || 'private' );
$rma_datas{telnetAccess} = ($c->param ('TelnetAccess') || 'off'); $rma_datas{telnetAccess} = ( $c->param('TelnetAccess') || 'off' );
# validate # validate
my $v = $c->validation; my $v = $c->validation;
return $c->render('remoteaccess') unless $v->has_data; return $c->render('remoteaccess') unless $v->has_data;
#$v->optional('PptpSessions')->num(0, 999)->is_valid; #$v->optional('PptpSessions')->num(0, 999)->is_valid;
$v->optional('ValidFromNetwork')->size(7, 15)->is_valid; if ( $c->param('ValidFromNetwork') ne "" ) {
$v->optional('ValidFromMask')->size(7, 15)->is_valid; $v->optional('ValidFromNetwork')->size( 7, 15 )->is_valid;
$v->required('SshTCPPort')->num(1, 65535)->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; $result .= 'field validation error' if $v->has_error;
if ( ! $result ) { if ( !$result ) {
# controls # controls
#$res = pptp_and_dhcp_range( $c, $rma_datas{pptpSessions} ); #$res = pptp_and_dhcp_range( $c, $rma_datas{pptpSessions} );
#$result .= $res . ' ' unless $res eq 'OK'; #$result .= $res . ' ' unless $res eq 'OK';
$res = ip_number_or_blank( $c, $rma_datas{validFromNetwork} ); $res = ip_number_or_blank( $c, $rma_datas{validFromNetwork} );
$result .= $res . ' ' unless $res eq 'OK'; $result .= $res . ' ' unless $res eq 'OK';
$res = subnet_mask_or_blank( $c, $rma_datas{validFromMask} ); $res = subnet_mask_or_blank( $c, $rma_datas{validFromMask} );
$result .= $res . ' ' unless $res eq 'OK'; $result .= $res . ' ' unless $res eq 'OK';
$res = validate_network_and_mask( $c, $rma_datas{validFromNetwork}, $rma_datas{validFromMask} ); $res = validate_network_and_mask(
$result .= $res . ' ' unless $res eq 'OK'; $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 ); $res = change_settings( $c, %rma_datas );
$result .= $res unless $res eq 'OK'; $result .= $res unless $res eq 'OK';
} }
if ( ! $result ) { if ( $result eq "" ) {
$result = $c->l('rma_ACTION_SUCCEEDED'); $result = $c->l('rma_SUCCESS');
$trt = 'SUC'; $trt = 'SUC';
} }
$c->stash( title => $title, notif => $result, rma_datas => \%rma_datas ); $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 { sub networkAccess_list {
my $c = shift; my $c = shift;
return [[ $c->l('rma_NO_ACCESS') => 'off'], return [
[ $c->l('NETWORKS_ALLOW_LOCAL') => 'private'], [ $c->l('rma_NO_ACCESS') => 'off' ],
[ $c->l('NETWORKS_ALLOW_PUBLIC') => 'public']]; [ $c->l('NETWORKS_ALLOW_LOCAL') => 'private' ],
[ $c->l('NETWORKS_ALLOW_PUBLIC') => 'public' ]
];
} }
sub passwordLogin_list { sub passwordLogin_list {
my $c = shift; my $c = shift;
return [[$c->l('rma_PASSWORD_LOGIN_PRIVATE') => 'private'], return [
[$c->l('rma_PASSWORD_LOGIN_PUBLIC') => 'public']]; [ $c->l('rma_PASSWORD_LOGIN_PRIVATE') => 'private' ],
[ $c->l('rma_PASSWORD_LOGIN_PUBLIC') => 'public' ]
];
} }
sub get_prop { sub get_prop {
my ($c, $item, $prop) = @_; my ( $c, $item, $prop ) = @_;
warn "You must specify a record key" unless $item; warn "You must specify a record key" unless $item;
warn "You must specify a property name" unless $prop; warn "You must specify a property name" unless $prop;
my $record = $db->get($item) or warn "Couldn't get record for $item"; my $record = $db->get($item) or warn "Couldn't get record for $item";
return $record ? $record->prop($prop) : undef; return $record ? $record->prop($prop) : undef;
} }
sub get_value { sub get_value {
my $c = shift; my $c = shift;
my $item = shift; my $item = shift;
return ($db->get($item)->value()); return ( $db->get($item)->value() );
} }
sub get_ftp_access { sub get_ftp_access {
my $status = get_prop('','ftp','status') || 'disabled'; my $status = get_prop( '', 'ftp', 'status' ) || 'disabled';
return 'off' unless $status eq 'enabled'; return 'off' unless $status eq 'enabled';
my $access = get_prop('','ftp','access') || 'private'; my $access = get_prop( '', 'ftp', 'access' ) || 'private';
return ($access eq 'public') ? 'normal' : 'private'; return ( $access eq 'public' ) ? 'normal' : 'private';
} }
#sub get_pptp_sessions { #sub get_pptp_sessions {
# my $status = get_prop('','pptpd','status'); # my $status = get_prop('','pptpd','status');
# if (defined($status) && ($status eq 'enabled')) { # if (defined($status) && ($status eq 'enabled')) {
@ -192,314 +209,317 @@ sub get_ftp_access {
# return '0'; # return '0';
#} #}
sub get_ssh_permit_root_login { sub get_ssh_permit_root_login {
return(get_prop('','sshd','PermitRootLogin') || 'no'); return ( get_prop( '', 'sshd', 'PermitRootLogin' ) || 'no' );
} }
sub get_ssh_password_auth { sub get_ssh_password_auth {
return(get_prop('','sshd','PasswordAuthentication') || 'yes'); return ( get_prop( '', 'sshd', 'PasswordAuthentication' ) || 'yes' );
} }
sub get_ssh_access { sub get_ssh_access {
my $status = get_prop('','sshd','status'); my $status = get_prop( '', 'sshd', 'status' );
if (defined($status) && ($status eq 'enabled')) { if ( defined($status) && ( $status eq 'enabled' ) ) {
my $access = get_prop('','sshd','access'); my $access = get_prop( '', 'sshd', 'access' );
$access = ($access eq 'public') ? 'public' : 'private'; $access = ( $access eq 'public' ) ? 'public' : 'private';
return($access); return ($access);
} }
else { else {
return('off'); return ('off');
} }
} }
sub get_ssh_port { sub get_ssh_port {
return(get_prop('$c','sshd','TCPPort') || '22'); return ( get_prop( '$c', 'sshd', 'TCPPort' ) || '22' );
} }
sub get_ftp_password_login_access { 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'; 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 { sub get_telnet_mode {
my $telnet = $db->get('telnet'); my $telnet = $db->get('telnet');
return('off') unless $telnet; return ('off') unless $telnet;
my $status = $telnet->prop('status') || 'disabled'; my $status = $telnet->prop('status') || 'disabled';
return('off') unless $status eq 'enabled'; return ('off') unless $status eq 'enabled';
my $access = $telnet->prop('access') || 'private'; my $access = $telnet->prop('access') || 'private';
return ($access eq "public") ? "public" : "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' ) ) {
my $status = $db->get('ipsec')->prop('RoadWarriorStatus'); return ( $db->get('ipsec')->prop('RoadWarriorSessions') || '0' );
if (defined($status) && ($status eq 'enabled')) { }
return($db->get('ipsec')->prop('RoadWarriorSessions') || '0'); else {
} return ('0');
else { }
return('0');
}
} }
sub get_ipsecrw_status { sub get_ipsecrw_status {
return undef unless ( $db->get('ipsec')); return undef unless ( $db->get('ipsec') );
return $db->get('ipsec')->prop('RoadWarriorStatus'); return $db->get('ipsec')->prop('RoadWarriorStatus');
} }
sub pptp_and_dhcp_range { sub pptp_and_dhcp_range {
my $c = shift; my $c = shift;
my $val = shift || 0; my $val = shift || 0;
my $dhcp_status = $db->get_prop('dhcpd','status') || 'disabled'; my $dhcp_status = $db->get_prop( 'dhcpd', 'status' ) || 'disabled';
my $dhcp_end = $db->get_prop('dhcpd','end') || ''; my $dhcp_end = $db->get_prop( 'dhcpd', 'end' ) || '';
my $dhcp_start = $db->get_prop('dhcpd','start') || ''; my $dhcp_start = $db->get_prop( 'dhcpd', 'start' ) || '';
if ( $dhcp_status eq 'enabled' ) { if ( $dhcp_status eq 'enabled' ) {
my $ip_start = unpack 'N', inet_aton($dhcp_start); my $ip_start = unpack 'N', inet_aton($dhcp_start);
my $ip_end = unpack 'N', inet_aton($dhcp_end); my $ip_end = unpack 'N', inet_aton($dhcp_end);
my $ip_count = $ip_end - $ip_start; my $ip_count = $ip_end - $ip_start;
return 'OK' if( $val < $ip_count ); return 'OK' if ( $val < $ip_count );
return $c->l('rma_NUMBER_OF_PPTP_CLIENTS_MUST_BE_LESSER_THAN_NUMBER_OF_IP_IN_DHCP_RANGE'); return $c->l(
} else { 'rma_NUMBER_OF_PPTP_CLIENTS_MUST_BE_LESSER_THAN_NUMBER_OF_IP_IN_DHCP_RANGE'
);
}
else {
return 'OK'; return 'OK';
} }
} }
sub _get_valid_from { sub _get_valid_from {
my $c = shift; my $c = shift;
my $rec = $db->get('httpd-admin'); my $rec = $db->get('httpd-admin');
return undef unless($rec); return undef unless ($rec);
my @vals = (split ',', ($rec->prop('ValidFrom') || '')); my @vals = ( split ',', ( $rec->prop('ValidFrom') || '' ) );
return @vals; return @vals;
} }
sub ip_number_or_blank { sub ip_number_or_blank {
my $c = shift; my $c = shift;
my $ip = shift; my $ip = shift;
if (!defined($ip) || $ip eq "") { if ( !defined($ip) || $ip eq "" ) {
return 'OK'; return 'OK';
} }
return ip_number($c, $ip); return ip_number( $c, $ip );
} }
sub subnet_mask_or_blank { sub subnet_mask_or_blank {
my $c = shift; my $c = shift;
my $mask = shift; my $mask = shift;
if (!defined($mask) || $mask eq "") { if ( !defined($mask) || $mask eq "" ) {
return "OK"; 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 { sub validate_network_and_mask {
my $c = shift; my $c = shift;
my $net = shift || ""; my $net = shift || "";
my $mask = shift || ""; my $mask = shift || "";
if ($net xor $mask) { if ( $net xor $mask ) {
return $c->l('rma_ERR_INVALID_PARAMS' . " (" . $net."/".$mask . ")"); return $c->l(
} 'rma_ERR_INVALID_PARAMS' . " (" . $net . "/" . $mask . ")" );
return 'OK'; }
return 'OK';
} }
sub change_settings { sub change_settings {
my ($c, %rma_datas) = @_; my ( $c, %rma_datas ) = @_;
#------------------------------------------------------------ #------------------------------------------------------------
# good; go ahead and change the access. # good; go ahead and change the access.
#------------------------------------------------------------ #------------------------------------------------------------
my $rec = $db->get('telnet'); my $rec = $db->get('telnet');
if($rec) { if ($rec) {
if ($rma_datas{telnetAccess} eq "off") { if ( $rma_datas{telnetAccess} eq "off" ) {
$rec->set_prop('status','disabled'); $rec->set_prop( 'status', 'disabled' );
} else { }
$rec->set_prop('status','enabled'); else {
$rec->set_prop('access', $rma_datas{telnetAccess}); $rec->set_prop( 'status', 'enabled' );
} $rec->set_prop( 'access', $rma_datas{telnetAccess} );
}
} }
$rec = $db->get('sshd') || $db->new_record('sshd', {type => 'service'}); $rec = $db->get('sshd') || $db->new_record( 'sshd', { type => 'service' } );
$rec->set_prop('TCPPort', $rma_datas{sshTCPPort}); $rec->set_prop( 'TCPPort', $rma_datas{sshTCPPort} );
$rec->set_prop('status', ( $rma_datas{sshaccess} eq "off" ? 'disabled' : 'enabled')); $rec->set_prop( 'status',
$rec->set_prop('access', $rma_datas{sshaccess}); ( $rma_datas{sshaccess} eq "off" ? 'disabled' : 'enabled' ) );
$rec->set_prop('PermitRootLogin', $rma_datas{sshPermitRootLogin}); $rec->set_prop( 'access', $rma_datas{sshaccess} );
$rec->set_prop('PasswordAuthentication', $rma_datas{sshPasswordAuthentication}); $rec->set_prop( 'PermitRootLogin', $rma_datas{sshPermitRootLogin} );
$rec->set_prop( 'PasswordAuthentication',
$rma_datas{sshPasswordAuthentication} );
$rec = $db->get('ftp'); $rec = $db->get('ftp');
if($rec) { if ($rec) {
if ($rma_datas{ftpAccess} eq "off") { if ( $rma_datas{ftpAccess} eq "off" ) {
$rec->set_prop('status', 'disabled'); $rec->set_prop( 'status', 'disabled' );
$rec->set_prop('access', 'private'); $rec->set_prop( 'access', 'private' );
$rec->set_prop('LoginAccess', 'private'); $rec->set_prop( 'LoginAccess', 'private' );
} elsif ($rma_datas{ftpAccess} eq "normal") { }
$rec->set_prop('status', 'enabled'); elsif ( $rma_datas{ftpAccess} eq "normal" ) {
$rec->set_prop('access', 'public'); $rec->set_prop( 'status', 'enabled' );
$rec->set_prop('LoginAccess', $rma_datas{ftpPasswordAccess}); $rec->set_prop( 'access', 'public' );
} else { $rec->set_prop( 'LoginAccess', $rma_datas{ftpPasswordAccess} );
$rec->set_prop('status', 'enabled'); }
$rec->set_prop('access', 'private'); else {
$rec->set_prop('LoginAccess', $rma_datas{ftpPasswordAccess}); $rec->set_prop( 'status', 'enabled' );
} $rec->set_prop( 'access', 'private' );
$rec->set_prop( 'LoginAccess', $rma_datas{ftpPasswordAccess} );
}
} }
# if ($rma_datas{pptpSessions} == 0) { # if ($rma_datas{pptpSessions} == 0) {
# $db->get('pptpd')->set_prop('status', 'disabled'); # $db->get('pptpd')->set_prop('status', 'disabled');
# } else { # } else {
# $db->get('pptpd')->set_prop('status', 'enabled'); # $db->get('pptpd')->set_prop('status', 'enabled');
# $db->get('pptpd')->set_prop('sessions', $rma_datas{pptpSessions}); # $db->get('pptpd')->set_prop('sessions', $rma_datas{pptpSessions});
# } # }
if ( $rma_datas{validFromNetwork} && $rma_datas{validFromMask} ) { if ( $rma_datas{validFromNetwork} && $rma_datas{validFromMask} ) {
unless (add_new_valid_from( $c, $rma_datas{validFromNetwork}, $rma_datas{validFromMask} )) { unless (
return $c->l('rma_ERROR_UPDATING_CONFIGURATION') . 'new net'; 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} ) { if ( $rma_datas{remove_nets} ) {
unless (remove_valid_from( $c, $rma_datas{remove_nets} )) { unless ( remove_valid_from( $c, $rma_datas{remove_nets} ) ) {
return $c->l('rma_ERROR_UPDATING_CONFIGURATION') . 'del net'; return $c->l('rma_ERROR_UPDATING_CONFIGURATION') . 'del net';
} }
} }
# reset ipsec roadwarrior CA,server,client certificates # reset ipsec roadwarrior CA,server,client certificates
if ($rma_datas{ipsecrwReset}) { if ( $rma_datas{ipsecrwReset} ) {
system('/sbin/e-smith/roadwarrior', 'reset_certs') == 0 or system( '/sbin/e-smith/roadwarrior', 'reset_certs' ) == 0
return $c->l('rma_ERROR_UPDATING_CONFIGURATION') . 'rst ipsec'; or return $c->l('rma_ERROR_UPDATING_CONFIGURATION') . 'rst ipsec';
} }
if ( $rma_datas{ipsecrwSess} ) { 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 $c->l('rma_ERROR_UPDATING_CONFIGURATION');
} }
return 'OK'; return 'OK';
} }
sub set_ipsecrw_sessions { sub set_ipsecrw_sessions {
my $c = shift; my $c = shift;
my $sessions = shift; my $sessions = shift;
if (defined $sessions) { if ( defined $sessions ) {
$db->get('ipsec')->set_prop('RoadWarriorSessions', $sessions); $db->get('ipsec')->set_prop( 'RoadWarriorSessions', $sessions );
if (int($sessions) > 0) { if ( int($sessions) > 0 ) {
$db->get('ipsec')->set_prop('RoadWarriorStatus', 'enabled'); $db->get('ipsec')->set_prop( 'RoadWarriorStatus', 'enabled' );
} }
} }
return ''; return '';
} }
sub add_new_valid_from { sub add_new_valid_from {
my $c = shift; my $c = shift;
my $net = shift; my $net = shift;
my $mask = shift; my $mask = shift;
# we transform bit mask to regular mask # we transform bit mask to regular mask
$mask = get_reg_mask( $net, $mask ); $mask = get_reg_mask( $net, $mask );
my $rec = $db->get('httpd-admin');
return $c->error('ERR_NO_RECORD') unless $rec;
my $prop = $rec->prop('ValidFrom') || ''; my $rec = $db->get('httpd-admin');
return $c->error('ERR_NO_RECORD') unless $rec;
my @vals = split /,/, $prop; my $prop = $rec->prop('ValidFrom') || '';
return '' if (grep /^$net\/$mask$/, @vals); # already have this entry
if ($prop ne '') { my @vals = split /,/, $prop;
$prop .= ",$net/$mask"; return '' if ( grep /^$net\/$mask$/, @vals ); # already have this entry
} else {
$prop = "$net/$mask";
}
$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 { sub remove_valid_from {
my $c = shift; my $c = shift;
my $remove_nets = shift; my $remove_nets = shift;
my @remove = split /,/, $remove_nets; my @remove = split /,/, $remove_nets;
# my @remove = $c->param('Remove_nets'); # my @remove = $c->param('Remove_nets');
my @vals = $c->_get_valid_from(); my @vals = $c->_get_valid_from();
foreach my $entry (@remove) { foreach my $entry (@remove) {
return undef unless $entry;
my ($net, $mask) = split (/\//, $entry); return undef unless $entry;
unless (@vals) { my ( $net, $mask ) = split( /\//, $entry );
print STDERR "ERROR: unable to load ValidFrom property from conf db\n";
return undef;
}
# what if we don't have a mask because someone added an entry from unless (@vals) {
# the command line? by the time we get here, the panel will have print STDERR
# added a 32 bit mask, so we don't know for sure if the value in db "ERROR: unable to load ValidFrom property from conf db\n";
# is $net alone or $net/255.255.255.255. we have to check for both return undef;
# in this special case... }
@vals = (grep { $entry ne $_ && $net ne $_ } @vals);
}
my $prop; # what if we don't have a mask because someone added an entry from
if (@vals) { # the command line? by the time we get here, the panel will have
$prop = join ',',@vals; # added a 32 bit mask, so we don't know for sure if the value in db
} else { # is $net alone or $net/255.255.255.255. we have to check for both
$prop = ''; # 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;

View File

@ -2,7 +2,7 @@ Summary: Sme server navigation module : manager 2
%define name smeserver-manager %define name smeserver-manager
Name: %{name} Name: %{name}
%define version 11.0.0 %define version 11.0.0
%define release 28 %define release 29
Version: %{version} Version: %{version}
Release: %{release}%{?dist} Release: %{release}%{?dist}
License: GPL License: GPL
@ -113,6 +113,9 @@ true
%defattr(-,root,root) %defattr(-,root,root)
%changelog %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 * 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] - 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] - Comment out change to localhost for roundcube in _user_list email icon setting [SME: 12751]