RADIUS exports that skip provisioning, for accounting purposes, RT#73739
[freeside.git] / FS / FS / part_export / broadband_sqlradius.pm
index b5d1a80..2d6681e 100644 (file)
@@ -6,15 +6,20 @@ use Tie::IxHash;
 use FS::Conf;
 use FS::Record qw( dbh str2time_sql ); #qsearch qsearchs );
 use FS::part_export::sqlradius qw(sqlradius_connect);
+use FS::Password_Mixin;
+use NEXT;
 
-FS::UID->install_callback(sub { $conf = new FS::Conf });
+FS::UID->install_callback(
+  sub {
+    $conf = new FS::Conf;
+    @pw_set = FS::Password_Mixin->pw_set;
+  }
+);
 
 @ISA = qw(FS::part_export::sqlradius);
 
 $DEBUG = 0;
 
-@pw_set = ( 'a'..'z', 'A'..'Z', '0'..'9', '(', ')', '#', '.', ',' );
-
 tie %options, 'Tie::IxHash',
   'datasrc'  => { label=>'DBI data source ' },
   'username' => { label=>'Database username' },
@@ -88,7 +93,9 @@ sub export_username {
 
 sub radius_reply {
   my($self, $svc_broadband) = (shift, shift);
-  my %reply;
+  # start with attributes the service wants
+  my %reply = $self->NEXT::radius_reply($svc_broadband);
+  # add export-specific stuff
   if (  length($self->option('ip_addr_as',1)) 
     and length($svc_broadband->ip_addr) ) {
     $reply{$self->option('ip_addr_as')} = $svc_broadband->ip_addr;
@@ -98,8 +105,9 @@ sub radius_reply {
 
 sub radius_check {
   my($self, $svc_broadband) = (shift, shift);
+
+  my %check = $self->SUPER::radius_check($svc_broadband);
   my $password_attrib = $conf->config('radius-password') || 'Password';
-  my %check;
   if ( $self->option('mac_as_password') ) {
     $check{$password_attrib} = $self->export_username($svc_broadband);
   }
@@ -125,6 +133,8 @@ sub radius_check_suspended {
 sub _export_suspend {
   my( $self, $svc_broadband ) = (shift, shift);
 
+  return '' if $self->option('skip_provisioning');
+
   local $SIG{HUP} = 'IGNORE';
   local $SIG{INT} = 'IGNORE';
   local $SIG{QUIT} = 'IGNORE';