Event-Timestamp patch

Jerome Fleury jerome.fleury at fr.tiscali.com
Tue Jun 24 01:20:59 CDT 2008


Hello there,

I provide here a small (but useful) patch. This one allows to use the 
Event-Timestamp accounting attribute sent by some NAS (especially Cisco 
ones in later releases) instead of having to calculate it. (=recvtime - 
acct_delay)
This patch performs a small check: if the calculated timestamp and the NAS 
timestamp differ for more than 300s (this is arbitrary), then we assume 
that the server and the NAS are not synchronized, so it fallback to the 
calculated timestamp (default).

Why did we use this ? Because the timestamp sent by the NAS looks much more 
reliable than the calculated one. As of a consequence, it performs better 
in duplicate finding.

This code should probably be cleaned, maybe "config-variabled", but I hope 
it will be integrated in futures releases.

--
Jerome Fleury     Tiscali/LibertySurf/WC
Network Engineer  Tel/Fax: +33 1 45082314


--------------------------------------------
*** Handler.pm.bak      Mon Oct 21 12:34:37 2002
--- Handler.pm  Wed Oct 23 12:46:20 2002
***************
*** 204,214 ****
      {
        # Add a pseudo attribute for the Timestamp
        # (adjusted by Delay-Time)
        # Some modules (AuthSQL) and logfile scripts rely on it
!       $p->add_attr('Timestamp',
!                    $p->{RecvTime}
!                    - int 
$p->getAttrByNum($Radius::Radius::ACCT_DELAY_TIME));

        # Log the packet
        my $status_type = $p->getAttrByNum
            ($Radius::Radius::ACCT_STATUS_TYPE);
--- 204,231 ----
      {
        # Add a pseudo attribute for the Timestamp
        # (adjusted by Delay-Time)
        # Some modules (AuthSQL) and logfile scripts rely on it
!       # patch by Jerome Fleury <jerome.fleury at fr.tiscali.com>:
!       # rely on Event_Timestamp attribute if present
!       my $timestamp;
!       $timestamp = $p->{RecvTime} - int 
$p->getAttrByNum($Radius::Radius::ACCT_DELAY_TIME);
!       # this patch uses Event-Timestamp if it exists
!       if (defined 
$p->getAttrByNum($Radius::Radius::ACCT_EVENT_TIMESTAMP)) {
!               # we use arbitrary 300s of clock difference to check 
attribute reliability
!               if (abs($timestamp - 
$p->getAttrByNum($Radius::Radius::ACCT_EVENT_TIMESTAMP) > 300)) {
!                       # NAS clock is not synchronized with the server, 
let's use server timestamp, log a warning
!                       $self->log($main::LOG_WARNING, "$nas_id clock not 
synchronized with server!");
!                       $p->add_attr('Timestamp', $timestamp);
!               }
!               else {
!                       # Event_Timestamp looks correct, let's use it
!                       $p->add_attr('Timestamp', 
$p->getAttrByNum($Radius::Radius::ACCT_EVENT_TIMESTAMP));
!               }
!       }
!       # we don't have Event_Timestamp attribute
!       else { $p->add_attr('Timestamp', $timestamp); }
!

        # Log the packet
        my $status_type = $p->getAttrByNum
            ($Radius::Radius::ACCT_STATUS_TYPE);


-------------------------------------------------------
*** Radius.pm.bak       Mon Oct 21 12:33:55 2002
--- Radius.pm   Mon Oct 21 12:34:25 2002
***************
*** 114,117 ****
--- 114,118 ----
  $Radius::Radius::ACCT_OUTPUT_PACKETS = 48;
  $Radius::Radius::ACCT_TERMINATE_CAUSE = 49;
+ $Radius::Radius::ACCT_EVENT_TIMESTAMP = 55;
  $Radius::Radius::CHAP_CHALLENGE = 60;
  $Radius::Radius::NAS_PORT_TYPE = 61;


-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 228 bytes
Desc: not available
URL: <http://www.open.com.au/pipermail/radiator/attachments/20080624/fe9c1106/attachment.bin>


More information about the radiator mailing list