X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=blobdiff_plain;f=FS%2FFS%2Fsession.pm;h=78af2e9ad861ab7b4968c739191a40b2a3a23ad9;hp=61dc8991a9c5527f115b66930ac1292d55b2e390;hb=4af73859347d8d56a9552eb4b5ebaffdda14edd2;hpb=21ec8a6b7223054c6137fdbffa0e059c5c6c9473 diff --git a/FS/FS/session.pm b/FS/FS/session.pm index 61dc8991a..78af2e9ad 100644 --- a/FS/FS/session.pm +++ b/FS/FS/session.pm @@ -1,7 +1,8 @@ package FS::session; use strict; -use vars qw( @ISA $conf $start $stop ); +use vars qw( @ISA $conf ); +use FS::UID qw( dbh ); use FS::Record qw( qsearchs ); use FS::svc_acct; use FS::port; @@ -11,8 +12,6 @@ use FS::nas; $FS::UID::callback{'FS::session'} = sub { $conf = new FS::Conf; - $start = $conf->exists('session-start') ? $conf->config('session-start') : ''; - $stop = $conf->exists('session-stop') ? $conf->config('session-stop') : ''; }; =head1 NAME @@ -100,13 +99,22 @@ sub insert { $error = $self->check; return $error if $error; - return "a session on that port is already open!" - if qsearchs('session', { 'portnum' => $self->portnum, 'logout' => '' } ); + my $oldAutoCommit = $FS::UID::AutoCommit; + local $FS::UID::AutoCommit = 0; + my $dbh = dbh; + + if ( qsearchs('session', { 'portnum' => $self->portnum, 'logout' => '' } ) ) { + $dbh->rollback if $oldAutoCommit; + return "a session on that port is already open!"; + } $self->setfield('login', time()) unless $self->getfield('login'); $error = $self->SUPER::insert; - return $error if $error; + if ( $error ) { + $dbh->rollback if $oldAutoCommit; + return $error; + } $self->nas_heartbeat($self->getfield('login')); @@ -116,8 +124,8 @@ sub insert { my $nas = qsearchs('nas',{'nasnum'=>$port->nasnum}); #kcuy my( $ip, $nasip, $nasfqdn ) = ( $port->ip, $nas->nasip, $nas->nasfqdn ); - system( eval qq("$start") ) if $start; - + + $dbh->commit or die $dbh->errstr if $oldAutoCommit; ''; } @@ -149,13 +157,23 @@ sub replace { local $SIG{TSTP} = 'IGNORE'; local $SIG{PIPE} = 'IGNORE'; + my $oldAutoCommit = $FS::UID::AutoCommit; + local $FS::UID::AutoCommit = 0; + my $dbh = dbh; + $error = $self->check; - return $error if $error; + if ( $error ) { + $dbh->rollback if $oldAutoCommit; + return $error; + } $self->setfield('logout', time()) unless $self->getfield('logout'); $error = $self->SUPER::replace($old); - return $error if $error; + if ( $error ) { + $dbh->rollback if $oldAutoCommit; + return $error; + } $self->nas_heartbeat($self->getfield('logout')); @@ -165,7 +183,8 @@ sub replace { my $nas = qsearchs('nas',{'nasnum'=>$port->nasnum}); #kcuy my( $ip, $nasip, $nasfqdn ) = ( $port->ip, $nas->nasip, $nas->nasfqdn ); - session( eval qq("$stop") ) if $stop; + + $dbh->commit or die $dbh->errstr if $oldAutoCommit; ''; } @@ -193,7 +212,7 @@ sub check { return $error if $error; return "Unknown svcnum" unless qsearchs('svc_acct', { 'svcnum' => $self->svcnum } ); - ''; + $self->SUPER::check; } =item nas_heartbeat @@ -222,10 +241,6 @@ sub svc_acct { =back -=head1 VERSION - -$Id: session.pm,v 1.4 2000-12-08 22:22:31 ivan Exp $ - =head1 BUGS Maybe you shouldn't be able to insert a session if there's currently an open