(RADIATOR) PreClientHook for use with Cisco NAS equipment

Hugh Irvine hugh at open.com.au
Mon Nov 11 23:58:11 CST 2002


Hello Everyone -

Here is a little hook that should make life much easier for anyone with 
Cisco gear who wants to use a session database.

This is a PreClientHook that basically uses the "Cisco-NAS-Port" 
attribute that has been produced by the special Cisco configuration 
shown below (radius-server vsa send accounting/radius-server vsa send 
authentication).

Basically the hook generates a "NAS-Port" attribute that can be used 
directly with a "NasType Cisco" in the Client(s) clause.

Please let me know how it works.

regards

Hugh


# -*- mode: Perl -*-
# AlterNASPort
#
# This is to change the Cisco-NAS-Port to NAS-port so we can
# use the standard session database and NasType Cisco.
#
# Requires the use of the following Cisco configuration:
#
#	radius-server vsa send accounting
#	radius-server vsa send authentication
#
# Contributed by Paul Pilsbury <ppilsbur at connect.com.au>.
#

sub
{
         my $p = ${$_[0]};

	my $nasport = $p->get_attr('Cisco-NAS-Port');
	my $nasip = $p->get_attr('NAS-IP-Address');
	my $user = $p->get_attr('User-Name');

	my $orignasport = $nasport;

	if (defined($nasport))
	{
		my $new_nas_port;
  		my $port_no;
		my $slot;
		my $port;

  		$new_nas_port  =  $nasport;

		# Looking for Async9/96*Serial13/18:14
		# This is what the 5850 sends and i dont have the ports
		# per slot to work this out.
		# also it doesnt have the MIB in our 5850's for the query

		if ($new_nas_port =~ /Async(\d+)\/(\d+)\*Serial/)
		{
			$port_no = "$2";
		}

		# port looks like Async8/24
		elsif ( $new_nas_port =~ /Async(\d+)\/(\d+)/)
		{
			$slot = $1 + 1;
			$port = $2;
  			$port_no = $slot * 108 + $port;
		}

		# port looks like tty1/24
		elsif ( $new_nas_port =~ /tty(\d+)\/(\d+)/)
		{
   			$slot = $1 + 1;
    			$port = $2;
   			$port_no = $slot * 108 + $port;
   		}

		# looks like Async19
		elsif ( $new_nas_port =~ /Async(\d+)/)
		{
    			$port_no = $1;
    		}

		# looks like tty57
  		elsif ( $new_nas_port =~ /tty(\d+)/)
		{
   			$port_no = $1;
   		}

  		else
		{
			&main::log($main::LOG_INFO,
				"Nothing found in script AlterNASPort $user $nasip");
  		}

  		$p->change_attr('NAS-Port', $port_no) ;

		# for debug and testing
  		&main::log($main::LOG_INFO,
			"Orig-NAS-Port = $orignasport NAS-Port = $port_no
			Slot = $slot Port = $port User-Name = $user
			NAS-IP-Address = $nasip");
	}
}




NB: I am travelling this week, so there may be delays in our 
correspondence.

-- 
Radiator: the most portable, flexible and configurable RADIUS server
anywhere. Available on *NIX, *BSD, Windows 95/98/2000, NT, MacOS X.
-
Nets: internetwork inventory and management - graphical, extensible,
flexible with hardware, software, platform and database independence.

===
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.

===
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