(RADIATOR) Radiator+MySQL problem

Romain Vergniol romain.vergniol at cegedim.fr
Fri May 31 05:58:26 CDT 2002


Hello Hugh, Mike, everyone,

I use Radiator 3.0 together with MySQL on Slackware 8.0 servers.
I noticed that Radiator badly manages the loss of MySQL server ; in certain
cases,
Radiator consumes all available memory then crashes down.

I set up a test server and it was easy to reproduce the problem, here is the
scenario :

    - start MySQL server
    - start Radiator
    - start radpwtst with thousands iterations to have the time to do our
tests
    - shutdown MySQL server

At this moment, Radiator starts to consume all available memory until it
crashes (restarting Mysql server doesn't change anything...).
I tried to increase or reduce 'FailureBackoffTime' but it doesn't seem to
change anything.

Shutting down MySQL when no radius request is sent doesn't  reproduce the
problem.

Is my config file OK ?

Here is a trace 4 debug with the config file


Romain Vergniol
CEGEDIM
France

PS : Radiator is a great product !    :)


======================================================================

Trace 4 debug:

*** Received from 172.xxxxxxx port 1074 ....
Code:       Access-Request
Identifier: 219
Authentic:  1234567890123456
Attributes:
        User-Name = "test_rvergniol at cegedim.net"
        Service-Type = Framed
        NAS-IP-Address = 172.xxxxxx
        NAS-Port = 1234
        Called-Station-Id = "0000"
        Calling-Station-Id = "987654321"
        NAS-Port-Type = Async
        Framed-IP-Address = 172.xxxxxxx
        User-Password =
"<170>n<243>=<28><251><161><238>4<31><131>"B<18><249><132>"

Fri May 31 11:50:46 2002: DEBUG: Handling request with Handler
'Request-Type=Access-Request'
Fri May 31 11:50:46 2002: DEBUG:  Deleting session for
test_rvergniol at cegedim.net, 172.xxxxxx, 1234
Fri May 31 11:50:46 2002: DEBUG: Handling with Radius::AuthGROUP
Fri May 31 11:50:46 2002: DEBUG: Handling with Radius::AuthSQL
Fri May 31 11:50:46 2002: DEBUG: Handling with Radius::AuthSQL:
Fri May 31 11:50:46 2002: DEBUG: Query is: select S.PASSWORD, S.CHECKATTR,
S.REPLYATTR from SUBSCRIBERS as S, REL_PROFCOM as P where
S.USERNAME='test_rvergniol at cegedim.net' and S.NASIDENTIFIER='172.xxxxxx' and
S.PROFCOM=P.ID and P.NUM='0000'

Fri May 31 11:50:46 2002: DEBUG: Radius::AuthSQL looks for match with
test_rvergniol at cegedim.net
Fri May 31 11:50:46 2002: DEBUG: Expiration date converted to: 1798758000
Fri May 31 11:50:46 2002: DEBUG: Radius::AuthSQL ACCEPT:
Fri May 31 11:50:46 2002: DEBUG: Access accepted for
test_rvergniol at cegedim.net
Fri May 31 11:50:46 2002: DEBUG: Packet dump:
*** Sending to 172.xxxxxxxxport 1074 ....
Code:       Access-Accept
Identifier: 219
Authentic:  1234567890123456
Attributes:
        Framed-IP-Address = 172.xxxxxxxxx
        Service-Type = Framed
        cisco-avpair = "ip:dns-servers=xxxxxxx yyyyyyyyyyyyyy"
        cisco-avpair = "ip:inacl#1=permit ip any 172.xxxxxxxxx/16"
        cisco-avpair = "ip:inacl#2=permit ip any host xxxxxxxxxxxxxxxx"
        cisco-avpair = "ip:inacl#3=permit ip any host yyyyyyyyyyyy"
        cisco-avpair = "ip:inacl#4=deny all any any"
        Framed-Protocol = PPP

Fri May 31 11:50:46 2002: DEBUG: Packet dump:

#------------------------------------------------
# Up to here, everything is OK
# MySQL shuts down now
#------------------------------------------------


*** Received from 172.xxxxxxxxx port 1074 ....
Code:       Accounting-Request
Identifier: 220
Authentic:
<212><29><155>$\<246><202><193><141><206><12><148><15><138><210>Q
Attributes:
        User-Name = "test_rvergniol at cegedim.net"
        Service-Type = Framed
        NAS-IP-Address = 172.xxxxxxx
        NAS-Port = 1234
        NAS-Port-Type = Async
        Acct-Session-Id = "00001400"
        Acct-Status-Type = Start
        Called-Station-Id = "0000"
        Calling-Station-Id = "987654321"
        Framed-IP-Address = 172xxxxxxx
        Acct-Delay-Time = 0

Fri May 31 11:50:46 2002: DEBUG: Handling request with Handler
'Request-Type=Accounting-Request'
Fri May 31 11:50:46 2002: DEBUG:  Adding session for
test_rvergniol at cegedim.net, 172.xxxxxx, 1234
Fri May 31 11:50:46 2002: DEBUG: Handling with Radius::AuthSQL
Fri May 31 11:50:46 2002: DEBUG: Handling accounting with Radius::AuthSQL
Fri May 31 11:50:46 2002: DEBUG: do query is: insert into ACCOUNTING
                (USERNAME, TIME_STAMP, ACCTSTATUSTYPE, ACCTDELAYTIME,
ACCTSESSIONID, NASIDENTIFIER, FRAMEDIPADDRESS, ASCEND_CALLED_STATION_ID,
ASCEND_CALLING_STATION_ID, FORMATTED_DATE)
                values
                ('test_rvergniol at cegedim.net', 1022838646, 'Start', 0,
'00001400', '172.xxxxxxxx', '172.xxxxxxx', '0000', '987654321',
'2002-05-31.11.50.46')

DBD::mysql::db do failed: MySQL server has gone away at
/usr/lib/perl5/site_perl/Radius/SqlDb.pm line 218.
Fri May 31 11:50:46 2002: ERR: do failed for 'insert into ACCOUNTING
                (USERNAME, TIME_STAMP, ACCTSTATUSTYPE, ACCTDELAYTIME,
ACCTSESSIONID, NASIDENTIFIER, FRAMEDIPADDRESS, ASCEND_CALLED_STATION_ID,
ASCEND_CALLING_STATION_ID, FORMATTED_DATE)
                values
                ('test_rvergniol at cegedim.net', 1022838646, 'Start', 0,
'00001400', '172.xxxxxx', '172.xxxxxxxx', '0000', '987654321',
'2002-05-31.11.50.46')': MySQL server has gone away
DBD::mysql::db do failed: MySQL server has gone away at
/usr/lib/perl5/site_perl/Radius/SqlDb.pm line 218.
DBD::mysql::db do failed: MySQL server has gone away at
/usr/lib/perl5/site_perl/Radius/SqlDb.pm line 218.
DBD::mysql::db do failed: MySQL server has gone away at
/usr/lib/perl5/site_perl/Radius/SqlDb.pm line 218.
DBD::mysql::db do failed: MySQL server has gone away at
/usr/lib/perl5/site_perl/Radius/SqlDb.pm line 218.
DBD::mysql::db do failed: MySQL server has gone away at
/usr/lib/perl5/site_perl/Radius/SqlDb.pm line 218.
DBD::mysql::db do failed: MySQL server has gone away at
/usr/lib/perl5/site_perl/Radius/SqlDb.pm line 218.
DBD::mysql::db do failed: MySQL server has gone away at
/usr/lib/perl5/site_perl/Radius/SqlDb.pm line 218.
DBD::mysql::db do failed: MySQL server has gone away at
/usr/lib/perl5/site_perl/Radius/SqlDb.pm line 218.
DBD::mysql::db do failed: MySQL server has gone away at
/usr/lib/perl5/site_perl/Radius/SqlDb.pm line 218.
DBD::mysql::db do failed: MySQL server has gone away at
/usr/lib/perl5/site_perl/Radius/SqlDb.pm line 218.
DBD::mysql::db do failed: MySQL server has gone away at
/usr/lib/perl5/site_perl/Radius/SqlDb.pm line 218.
DBD::mysql::db do failed: MySQL server has gone away at
/usr/lib/perl5/site_perl/Radius/SqlDb.pm line 218.
DBD::mysql::db do failed: MySQL server has gone away at
/usr/lib/perl5/site_perl/Radius/SqlDb.pm line 218.
DBD::mysql::db do failed: MySQL server has gone away at
/usr/lib/perl5/site_perl/Radius/SqlDb.pm line 218.
DBD::mysql::db do failed: MySQL server has gone away at
/usr/lib/perl5/site_perl/Radius/SqlDb.pm line 218.
DBD::mysql::db do failed: MySQL server has gone away at
/usr/lib/perl5/site_perl/Radius/SqlDb.pm line 218.
DBD::mysql::db do failed: MySQL server has gone away at
/usr/lib/perl5/site_perl/Radius/SqlDb.pm line 218.
DBD::mysql::db do failed: MySQL server has gone away at
/usr/lib/perl5/site_perl/Radius/SqlDb.pm line 218.
DBD::mysql::db do failed: MySQL server has gone away at
/usr/lib/perl5/site_perl/Radius/SqlDb.pm line 218.
DBD::mysql::db do failed: MySQL server has gone away at
/usr/lib/perl5/site_perl/Radius/SqlDb.pm line 218.
DBD::mysql::db do failed: MySQL server has gone away at
/usr/lib/perl5/site_perl/Radius/SqlDb.pm line 218.
Out of memory!
Attempt to free unreferenced scalar during global destruction.


===========================================================================

radius.cfg of the test server

Foreground
LogStdout
LogDir          /usr/local/etc/radius
DbDir           /usr/local/etc/radius

PidFile /usr/local/etc/radius/radius.pid

BindAddress 172.xxxxxxxxxxx
AuthPort 1812
AcctPort 1813

<ClientListSQL>
        DBSource        dbi:mysql:xxxxxxxxxxxxxx
        DBUsername      xxxxxxxxxxxxx
        DBAuth          xxxxxxxx
        FailureBackoffTime 20

</ClientListSQL>

<Client DEFAULT>
Secret xxxxxxxxxxxxxxx
</Client>

#<AddressAllocator SQL>
#       Identifier SQLAllocator
#
#       DBSource        dbi:mysql:xxxxxxxxxxxxxx
#        DBUsername      xxxxxxxxxxxxx
#        DBAuth          xxxxxxxx
#       FailureBackoffTime 5
#
#       #DefaultLeasePeriod     86400
#       #LeaseReclaimInterval 86400
#       FindQuery select TIME_STAMP, YIADDR, SUBNETMASK, DNSSERVER from
RADPOOL where POOL='%0' and STATE=0 limit 1
#
#       AllocateQuery update RADPOOL set STATE=1, TIME_STAMP=%0, EXPIRY=%1,
USERNAME='%2' where YIADDR='%3'
#
#       DeallocateQuery update RADPOOL set STATE=0, TIME_STAMP=%t where
YIADDR='%0'
#
#</AddressAllocator>

<AuthBy GROUP>
        Identifier AUTH_USER
#       AuthByPolicy ContinueWhileAccept
        <AuthBy SQL>
                Identifier AUTH_USER

                DBSource        dbi:mysql:xxxxxxxxxxxxxx
            DBUsername      xxxxxxxxxxxxx
            DBAuth          xxxxxxxx

                FailureBackoffTime 20

                AuthSelect select PASSWORD, CHECKATTR, REPLYATTR from
SUBSCRIBERS where USERNAME='%n' limit 1
                AuthColumnDef 0, User-Password, check
                AuthColumnDef 1, GENERIC, check
                AuthColumnDef 2, GENERIC, reply

        </AuthBy SQL>
#       <AuthBy DYNADDRESS>
#                Allocator       SQLAllocator
#                #MapAttribute   yiaddr, Framed-IP-Address
#                #MapAttribute   subnetmask, Framed-IP-Netmask
#                StripFromReply  PoolHint
#        </AuthBy>
</AuthBy>


<AuthBy GROUP>
        Identifier AUTH_USER_NAS
#        AuthByPolicy ContinueWhileAccept
        <AuthBy SQL>
             DBSource        dbi:mysql:xxxxxxxxxxxxxx
            DBUsername      xxxxxxxxxxxxx
            DBAuth          xxxxxxxx

                FailureBackoffTime 20

                #AuthSelect select PASSWORD, CHECKATTR, REPLYATTR from
SUBSCRIBERS where USERNAME='%n' and NASIDENTIFIER='%N'

                AuthSelect select S.PASSWORD, S.CHECKATTR, S.REPLYATTR \
                from SUBSCRIBERS as S, REL_PROFCOM as P \
                where S.USERNAME='%n' and S.NASIDENTIFIER='%N' \
                and S.PROFCOM=P.ID \
                and P.NUM='%{Called-Station-Id}'

                AuthColumnDef 0, User-Password, check
                AuthColumnDef 1, GENERIC, check
                AuthColumnDef 2, GENERIC, reply

        </AuthBy SQL>
#        <AuthBy DYNADDRESS>
#                Allocator       SQLAllocator
#               #MapAttribute   yiaddr, Ascend-Assign-IP-Pool
#                MapAttribute   yiaddr, Framed-IP-Address
#                MapAttribute   subnetmask, Framed-IP-Netmask
#                StripFromReply  PoolHint
#        </AuthBy>
</AuthBy>


<AuthBy GROUP>
        Identifier AUTH_USER_NAS_CSID
        NoDefault
        AuthByPolicy ContinueWhileAccept
        <AuthBy SQL>
               DBSource        dbi:mysql:xxxxxxxxxxxxxx
            DBUsername      xxxxxxxxxxxxx
            DBAuth          xxxxxxxx

                FailureBackoffTime 20

                AuthSelect select S.PASSWORD, S.CHECKATTR, S.REPLYATTR \
                from SUBSCRIBERS as S, REL_PROFCOM as P \
                where S.USERNAME='%n' and S.NASIDENTIFIER='%N' \
                and S.PROFCOM=P.ID \
                and P.NUM='%{Called-Station-Id}'

                AuthColumnDef 0, User-Password, check
                AuthColumnDef 1, GENERIC, check
                AuthColumnDef 2, GENERIC, reply

         </AuthBy>

</AuthBy>




<AuthBy SQL>

        Identifier ACCT

        DBSource        dbi:mysql:xxxxxxxxxxxxxx
        DBUsername      xxxxxxxxxxxxx
        DBAuth          xxxxxxxx


        AccountingTable ACCOUNTING
        AcctColumnDef   USERNAME,User-Name
        AcctColumnDef   REALM,User-Realm
        AcctColumnDef   TIME_STAMP,Timestamp,integer
        AcctColumnDef   ACCTSTATUSTYPE,Acct-Status-Type
        AcctColumnDef   ACCTDELAYTIME,Acct-Delay-Time,integer
        AcctColumnDef   ACCTINPUTOCTETS,Acct-Input-Octets,integer
        AcctColumnDef   ACCTOUTPUTOCTETS,Acct-Output-Octets,integer
        AcctColumnDef   ACCTSESSIONID,Acct-Session-Id
        AcctColumnDef   ACCTSESSIONTIME,Acct-Session-Time,integer
        AcctColumnDef
ASCEND_DISCONNECT_CAUSE,Ascend-Disconnect-Cause,integer
        AcctColumnDef   ACCTTERMINATECAUSE,Acct-Terminate-Cause
        AcctColumnDef   NASIDENTIFIER,%N,formatted
        AcctColumnDef   FRAMEDIPADDRESS,Framed-IP-Address
        AcctColumnDef
ASCEND_CONNECT_PROGRESS,Ascend-Connect-Progress,integer
        AcctColumnDef   ASCEND_DATA_RATE,Ascend-Data-Rate,integer
        AcctColumnDef
ASCEND_PRE_INPUT_OCTETS,Ascend-Pre-Input-Octets,integer
        AcctColumnDef
ASCEND_PRE_OUTPUT_OCTETS,Ascend-Pre-Output-Octets,integer
        AcctColumnDef
ASCEND_PRESESSION_TIME,Ascend-PreSession-Time,integer
        AcctColumnDef   ASCEND_XMIT_RATE,Ascend-Xmit-Rate,integer
        AcctColumnDef   ASCEND_CALLED_STATION_ID,Called-Station-Id
        AcctColumnDef   ASCEND_CALLING_STATION_ID,Calling-Station-Id
        AcctColumnDef   FRAMED_PROTOCOL,Framed-Protocol,integer
        AcctColumnDef   FORMATTED_DATE,%Y-%m-%d.%H.%M.%S,formatted

        AcctFailedLogFileName /usr/local/etc/radius/missedaccounting


</AuthBy>

<AuthLog SQL>
        Identifier AUTHLOG

        DBSource        dbi:mysql:xxxxxxxxxxxxx
        DBUsername      xxxxxxxxx
        DBAuth          xxxxxxxxxxxxxxxxx
        FailureBackoffTime 20

        LogSuccess 1
        LogFailure 1
        Table RADAUTHLOG_1
        SuccessQuery INSERT into RADAUTHLOG_1 values("%t","%n" , "%N" ,
"Radius2: OK. %1" )
        FailureQuery INSERT into RADAUTHLOG_1 values("%t","%n" , "%N" ,
"Radius2: NOK. %1(C-S-Id:%{Called-Station-Id})" )
</AuthLog>

# Scripts de Fail-Over
<Handler Request-Type=Access-Request,Realm=test.fr>
        AuthBy AUTH_USER
</Handler>

# TEST
<Handler Request-Type=Access-Request,Realm=test.cegedim>
        #AuthBy AUTH_USER_NAS
        AuthBy AUTH_USER_NAS_CSID
        AuthLog AUTHLOG
</Handler>

#####################################################
# OTHER.USERS
####################################################


<Handler Request-Type=Accounting-Request>
        AuthBy ACCT
</Handler>

<Handler Request-Type=Access-Request,Realm=teams.bak>
        RejectHasReason
        AuthBy AUTH_USER
        AuthLog AUTHLOG
</Handler>


<Handler Request-Type=Access-Request>
        RejectHasReason
        AuthBy AUTH_USER_NAS_CSID
        AuthLog AUTHLOG
</Handler>

######################################################



<Log SQL>
        DBSource        dbi:mysql:xxxxxxxxxxxxxx
        DBUsername      xxxxxxxxxxxxx
        DBAuth          xxxxxxxx
        FailureBackoffTime 20

        Trace 3
</Log>

===
Archive at http://www.open.com.au/archives/radiator/
Announcements on radiator-announce at open.com.au
To unsubscribe, email 'majordomo at open.com.au' with
'unsubscribe radiator' in the body of the message.


More information about the radiator mailing list