X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=blobdiff_plain;f=FS%2FFS%2Fpart_export%2Fbroadband_sqlradius.pm;fp=FS%2FFS%2Fpart_export%2Fbroadband_sqlradius.pm;h=ae0876ddf59a4b4365bcf7391aeeb701e5b86ec0;hp=0000000000000000000000000000000000000000;hb=307a7d85568a15f5eb0d97c648507484108fcc56;hpb=cfbfa38f73888ee2c073ad7500c1fe147cde1c81 diff --git a/FS/FS/part_export/broadband_sqlradius.pm b/FS/FS/part_export/broadband_sqlradius.pm new file mode 100644 index 000000000..ae0876ddf --- /dev/null +++ b/FS/FS/part_export/broadband_sqlradius.pm @@ -0,0 +1,100 @@ +package FS::part_export::broadband_sqlradius; + +use strict; +use vars qw($DEBUG @ISA %options %info $conf); +use Tie::IxHash; +use FS::Conf; +use FS::Record qw( dbh str2time_sql ); #qsearch qsearchs ); +use FS::part_export::sqlradius qw(sqlradius_connect); + +FS::UID->install_callback(sub { $conf = new FS::Conf }); + +@ISA = qw(FS::part_export::sqlradius); + +$DEBUG = 0; + +tie %options, 'Tie::IxHash', + 'datasrc' => { label=>'DBI data source ' }, + 'username' => { label=>'Database username' }, + 'password' => { label=>'Database password' }, + 'usergroup'=> { label => 'Group table', + type => 'select', + options => [qw( radusergroup usergroup )], + }, +# session report doesn't currently know about this export anyway +# 'hide_ip' => { +# type => 'checkbox', +# label => 'Hide IP address on session reports', +# }, + 'mac_as_password' => { + type => 'checkbox', + default => '1', + label => 'Use MAC address as password', + }, + 'radius_password' => { label=>'Fixed password' }, + 'ip_addr_as' => { label => 'Send IP address as', + default => 'Framed-IP-Address' }, +; + +%info = ( + 'svc' => 'svc_broadband', + 'desc' => 'Real-time export to SQL-backed RADIUS (such as FreeRadius) for broadband services', + 'options' => \%options, + 'nas' => 'Y', + 'notes' => <radcheck, radreply, and usergroup +tables to any SQL database for +FreeRADIUS +or ICRADIUS. +

+ +This export is for broadband service access control based on MAC address. +For a more typical RADIUS export, see sqlradius. +

+ +See the +DBI documentation +and the +documentation for your DBD +for the exact syntax of a DBI data source. + +END +); + +sub rebless { shift; } + +sub export_username { + my($self, $svc_broadband) = (shift, shift); + $svc_broadband->mac_addr; +} + +sub radius_reply { + my($self, $svc_broadband) = (shift, shift); + my %reply; + if ( length($self->option('ip_addr_as',1)) + and length($svc_broadband->ip_addr) ) { + $reply{$self->option('ip_addr_as')} = $svc_broadband->ip_addr; + } + %reply; +} + +sub radius_check { + my($self, $svc_broadband) = (shift, shift); + my $password_attrib = $conf->config('radius-password') || 'Password'; + my %check; + if ( $self->option('mac_as_password') ) { + $check{$password_attrib} = $svc_broadband->mac_addr; #formatting? + } + elsif ( length( $self->option('radius_password',1)) ) { + $check{$password_attrib} = $self->option('radius_password'); + } + %check; +} + +sub _export_suspend {} +sub _export_unsuspend {} + +sub update_svc {} #do nothing + +1; +