[RADIATOR] DEBUG logging oddities

Karl Gaissmaier karl.gaissmaier at uni-ulm.de
Thu Feb 18 04:40:34 CST 2016


Hi,

no official solution or ACK for this problem til now :-(

Currently I use the following homebrew workaround to get debug messages 
with trace level 4 in private log clauses:


# Gimmick to trick &main::willLog
# has an unnecessary processing component, I know, but ...
<Log FILE>
        Trace           4
        Identifier      NULL-LOGGER-GIMMICK
        Filename        /dev/null
</Log>

# more global loggers for errors, warnings and notices:
<Log FILE>
         Trace           2
         Identifier      radiatorlog
         Filename        %L/radiatorlog
</Log>

<Log SYSLOG>
         Trace                   2
         IgnorePacketTrace
         ...
</Log>


Best Regards
    Charly

> Hi RADIATOR Team,
>
> I would like to dump the packet attributes within ServerRADSEC or
> AuthRADSEC but without overwhelming packet hexdumps.
>
> Therefore I can't/won't use PacketTrace in the clauses.
>
> I configured a clause specific Logger with 'Trace 4' but the 'sub
> main::willLog' doesn't honor the settings in the clause loggers, instead
> it checks just the global logger(s) und shortcuts the calls to
> recv_debug_dump in the Modules:
>
>> Radius/AuthRADIUS.pm:   $p->recv_debug_dump($self)  if (main::willLog($main::LOG_DEBUG, $p));
>> Radius/AuthRADSEC.pm:   $p->recv_debug_dump($self)  if (main::willLog($main::LOG_DEBUG, $p));
>> Radius/Client.pm:       $p->recv_debug_dump($self)  if (main::willLog($main::LOG_DEBUG, $p));
>> Radius/ServerRADSEC.pm: $tp->recv_debug_dump($self) if (main::willLog($main::LOG_DEBUG, $tp));
>>
>> #####################################################################
>> # Return true if at least one logger is required to log
>> # Can be a shortcut to prevent length logging calculations
>> sub main::willLog
>> {
>>    my ($priority, $p) = @_;
>>      return 1
>>        if ($main::config->{LogStdout}&& ($priority <= $main::config->{Trace}
>>           || ($p && $p->{PacketTrace})))
>>           || grep $_->willLog($priority, $p), @{$main::config->{Log}};
>> }
>
>
> ################################################################################
> Please see my stripped down test setting:
> ################################################################################
>
>> BindAddress 127.0.0.1
>> AuthPort 1812
>> AcctPort 1813
>>
>> LogDir /tmp/radiator/log
>> DbDir  /tmp/radiator/etc
>>
>>
>> # disable global logfile for tests, in production I use a global file logger and syslog logger with Trace 2
>> LogFile
>> # I'll just see warnings and errors in the global log or during this tests on stdout
>> Trace 2
>> Foreground
>> LogStdout
>>
>> PidFile        %D/radiusd.pid
>> DictionaryFile %D/my-very-short-dict-for-running-under-perl-debugger
>>
>> # AuthBy gimmick to define referable, non global loggers, thanks Hugh!
>> <AuthBy GROUP>
>>    <Log FILE>
>>      Identifier DEBUG-LOGGER
>>      Trace 4
>>      Filename %L/debug-logger
>>    </Log>
>> </AuthBy>
>>
>> <AuthBy TEST>
>>    Identifier AUTHBY_TEST
>> </AuthBy>
>>
>> <AuthBy RADSEC>
>>    # I'm interested in the radius code and attributes, not in SSL hexdumps
>>    Log DEBUG-LOGGER
>>    Secret radsec
>>    Identifier AUTHBY_RADSEC
>>
>>    UseStatusServerForFailureDetect
>>    KeepaliveTimeout 10
>>    FailureBackoffTime 10
>>    NoreplyTimeout 10
>>
>>    LocalAddress 127.0.0.1
>>    Host 127.0.0.1
>>
>>    # test settings, in production use valid certs and CN checks!!!
>>    UseTLS
>>    TLS_CAFile %D/certificates/demoCA/cacert.pem
>>    TLS_ExpectedPeerName .*
>>
>>    TLS_CertificateFile %D/certificates/cert-clt.pem
>>    TLS_CertificateType PEM
>>    TLS_PrivateKeyFile %D/certificates/cert-clt.pem
>>    TLS_PrivateKeyPassword whatever
>> </AuthBy>
>>
>> #################################################################################
>>
>> <Handler Connect-Info=RADSEC>
>>    Identifier HANDLER_FROM_RADSEC
>>    AuthBy AUTHBY_TEST
>> </Handler>
>>
>> <Handler Realm=radsec>
>>    Identifier HANDLER_TO_RADSEC
>>    AuthBy AUTHBY_RADSEC
>> </Handler>
>>
>> <Handler>
>>    Identifier HANDLER_DEFAULT
>>    AuthBy AUTHBY_TEST
>> </Handler>
>>
>> #################################################################################
>>
>> <Client DEFAULT>
>>    Identifier DEFAULT
>>    Secret mysecret
>>    Log DEBUG-LOGGER
>> </Client>
>>
>> <ServerRADSEC>
>>    # I'm interested in the radius code and attributes, not in SSL hexdumps
>>    Log DEBUG-LOGGER
>>
>>    Identifier RADSEC_SERVER
>>    BindAddress 127.0.0.1
>>    Port 2083
>>    Secret radsec
>>
>>    AddToRequest Connect-Info=RADSEC
>>    AddToReply Connect-Info=RADSEC
>>
>>    UseTLS
>>    TLS_CAFile %D/certificates/demoCA/cacert.pem
>>    TLS_CertificateFile %D/certificates/cert-srv.pem
>>    TLS_CertificateType PEM
>>    TLS_PrivateKeyFile %D/certificates/cert-srv.pem
>>    TLS_PrivateKeyPassword whatever
>>    TLS_RequireClientCert
>>    TLS_ExpectedPeerName .*
>> </ServerRADSEC>
>> ####################################################################
>
>
>
> and then test it with radpwtst
>
>> $ radpwtst -bind_address 127.0.0.1 -s 127.0.0.1 -noacct -auth_port 1812 -user foo at radsec
>
> Any hint how to solve this problem?
>
> Please rethink your &main::willLog(...) and btw, in my opinion, the
> whole logging deserves refactoring ;-(
>
> Maybe, supporting module specific $self->willLog would be proper a path
> to go.
>
> Best Regards
>      Charly Gaissmaier
> _______________________________________________


More information about the radiator mailing list