File: Init.pm

package info (click to toggle)
lemonldap-ng 2.21.2%2Bds-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 28,024 kB
  • sloc: perl: 77,414; javascript: 25,284; xml: 6,473; makefile: 1,303; sh: 453; sql: 159; python: 53; php: 26
file content (98 lines) | stat: -rw-r--r-- 3,157 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
package Lemonldap::NG::Handler::Main::Init;

our $VERSION = '2.19.0';

package Lemonldap::NG::Handler::Main;

use strict;
use Lemonldap::NG::Common::Conf;

## @imethod void init(hashRef args)
# Read parameters and build the Lemonldap::NG::Common::Conf object.
# @param $args hash containing parameters
sub init($$) {
    my ( $class, $args ) = @_;

    # According to doc, localStorage can be declared in $args root,
    # but it must be in $args->{configStorage}
    foreach (qw(localStorage localStorageOptions)) {
        $args->{configStorage}->{$_} ||= $args->{$_};
    }

    my $tmp = Lemonldap::NG::Common::Conf->new( $args->{configStorage} );
    unless ( $class->confAcc($tmp) ) {
        die(    "$class : unable to build configuration: "
              . "$Lemonldap::NG::Common::Conf::msg" );
    }

    # Merge local configuration parameters so that params defined in
    # startup parameters have precedence over lemonldap-ng.ini params
    $class->localConfig(
        { %{ $class->confAcc->getLocalConf('handler') }, %{$args} } );

    $class->checkTime( $class->localConfig->{checkTime} || $class->checkTime );
    $class->checkMsg( $class->localConfig->{checkMsg}   || $class->checkMsg );

    # Few actions that must be done at server startup:
    # * set log level for Lemonldap::NG logs
    $class->logLevelInit();

    # * set server signature
    $class->serverSignatureInit unless ( $class->localConfig->{hideSignature} );
    1;
}

# @method void logLevelInit
# Set log level for Lemonldap::NG logs
sub logLevelInit {
    my ($class) = @_;
    my $logger = $class->localConfig->{logger} ||=
      $ENV{LLNG_DEFAULTLOGGER} || $class->defaultLogger;
    eval "require $logger";
    die $@ if ($@);
    my $err;
    unless ( $class->localConfig->{logLevel} =~
        /^(?:debug|info|notice|warn|error)$/ )
    {
        $err =
            'Bad logLevel value \''
          . $class->localConfig->{logLevel}
          . "', switching to 'info'\n";
        $class->localConfig->{logLevel} = 'info';
    }
    $class->logger( $logger->new( $class->localConfig ) );
    $class->logger->error($err) if $err;
    $class->logger->debug("Logger $logger loaded");
    $logger = $class->localConfig->{userLogger} || $logger;
    eval "require $logger";
    die $@ if ($@);
    require Lemonldap::NG::Common::Logger::_Duplicate;
    $class->userLogger(
        Lemonldap::NG::Common::Logger::_Duplicate->new(
            $class->localConfig,
            user   => 1,
            logger => $logger,
            dup    => $class->logger
        )
    );
    $class->logger->debug("User logger $logger loaded");

    my $auditlogger =
         $ENV{LLNG_AUDITLOGGER}
      || $class->localConfig->{auditLogger}
      || "Lemonldap::NG::Common::AuditLogger::UserLoggerCompat";
    eval "require $auditlogger";
    die $@ if ($@);
    $class->_auditLogger( $auditlogger->new($class) );
}

# @method void serverSignatureInit
# adapt server signature
sub serverSignatureInit {
    my $class = shift;
    require Lemonldap::NG::Handler;
    my $version = $Lemonldap::NG::Handler::VERSION;
    $class->setServerSignature("Lemonldap::NG/$version");
}

1;