Skip registration of CAS App when config has errors (#2525)

This commit is contained in:
Maxime Besson 2021-05-01 20:54:27 +02:00
parent e50db3f083
commit 71a8fc6d16

View File

@ -47,45 +47,60 @@ sub loadSrv {
# Load CAS application list # Load CAS application list
sub loadApp { sub loadApp {
my ($self) = @_; my ($self) = @_;
if ( $self->conf->{casAppMetaDataOptions} unless ( $self->conf->{casAppMetaDataOptions}
and %{ $self->conf->{casAppMetaDataOptions} } ) and %{ $self->conf->{casAppMetaDataOptions} } )
{ {
$self->casAppList( $self->conf->{casAppMetaDataOptions} );
}
else {
$self->logger->info("No CAS apps found in configuration"); $self->logger->info("No CAS apps found in configuration");
} }
foreach ( keys %{ $self->conf->{casAppMetaDataOptions} } ) { foreach ( keys %{ $self->conf->{casAppMetaDataOptions} } ) {
my $valid = 1;
# Load access rule # Load access rule
my $rule = $self->conf->{casAppMetaDataOptions}->{$_} my $rule =
$self->conf->{casAppMetaDataOptions}->{$_}
->{casAppMetaDataOptionsRule}; ->{casAppMetaDataOptionsRule};
if ( length $rule ) { if ( length $rule ) {
$rule = $self->p->HANDLER->substitute($rule); $rule = $self->p->HANDLER->substitute($rule);
unless ( $rule = $self->p->HANDLER->buildSub($rule) ) { unless ( $rule = $self->p->HANDLER->buildSub($rule) ) {
$self->error( 'CAS App rule error: ' $self->logger->error(
"Unable to build access rule for CAS Application $_: "
. $self->p->HANDLER->tsv->{jail}->error ); . $self->p->HANDLER->tsv->{jail}->error );
return 0; $valid = 0;
} }
$self->spRules->{$_} = $rule;
} }
# Load per-application macros # Load per-application macros
my $macros = $self->conf->{casAppMetaDataMacros}->{$_}; my $macros = $self->conf->{casAppMetaDataMacros}->{$_};
my $compiledMacros = {};
for my $macroAttr ( keys %{$macros} ) { for my $macroAttr ( keys %{$macros} ) {
my $macroRule = $macros->{$macroAttr}; my $macroRule = $macros->{$macroAttr};
if ( length $macroRule ) { if ( length $macroRule ) {
$macroRule = $self->p->HANDLER->substitute($macroRule); $macroRule = $self->p->HANDLER->substitute($macroRule);
unless ( $macroRule = $self->p->HANDLER->buildSub($macroRule) ) if ( $macroRule = $self->p->HANDLER->buildSub($macroRule) ) {
{ $compiledMacros->{$macroAttr} = $macroRule;
$self->error( 'SAML SP macro error: ' }
. $self->p->HANDLER->tsv->{jail}->error ); else {
return 0; $self->logger->error(
"Unable to build macro $macroAttr for CAS Application $_: "
. $self->p->HANDLER->tsv->{jail}->error );
$valid = 0;
} }
$self->spMacros->{$_}->{$macroAttr} = $macroRule;
} }
} }
if ($valid) {
$self->casAppList->{$_} =
$self->conf->{casAppMetaDataOptions}->{$_};
$self->spRules->{$_} = $rule;
$self->spMacros->{$_} = $compiledMacros;
}
else {
$self->logger->error(
"CAS Application $_ has errors and will be ignored");
}
} }
return 1; return 1;
} }