X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=blobdiff_plain;f=fs_sesmon%2Ffs_session_server;fp=fs_sesmon%2Ffs_session_server;h=46e53d118ebd6baa50eed99f4706c9c8ee05e1e4;hp=be0a01710555a4d7631fb7c37db5713ec09f5af3;hb=7f07089722bfcabe3bf42619bb2bdb81fd8d44e1;hpb=b31966d5d1f9d8629bd28ff1c2ff37a5c84965c1 diff --git a/fs_sesmon/fs_session_server b/fs_sesmon/fs_session_server index be0a01710..46e53d118 100644 --- a/fs_sesmon/fs_session_server +++ b/fs_sesmon/fs_session_server @@ -12,6 +12,8 @@ use FS::Record qw( qsearch qsearchs ); #use FS::cust_main_county; #use FS::cust_main; use FS::session; +use FS::port; +use FS::svc_acct; #require "configfile"; $Debug = 1; @@ -42,12 +44,70 @@ while (1) { } if ( $command eq 'login' ) { - + $error = &login(\%hash); + print $writer "$error\n"; } elsif ( $command eq 'logoff' ) { - + $error = &logoff(\%hash); + print $writer "$error\n"; } elsif ( $command eq 'portnum' ) { - + if ( exists $hash{'ip'} ) { + $hash{'ip'} =~ /^([\d\.]+)$/ or $1='nomatch'; + $port = qsearchs('port', { 'ip' => $1 } ); + } else { + $hash{'nasnum'} =~ /^(\d+)$/ and my $nasnum = $1; + $hash{'nasport'} =~ /^(\d+)$/ and my $nasport = $1; + $port = qsearchs('port', { 'nasnum'=>$nasnum, 'nasport'=>$nasport } ); + } + print $writer ( $port ? $port->portnum : '' ), "\n"; } else { warn "$me WARNING: unrecognized command"; } + } + #won't ever reach without code above to throw out of loop, but... + close $writer; + close $reader; + warn "connection to $machine lost!\n" + sleep 5; + warn "reconnecting...\n"; +} + +sub login { + my $href = shift; + $href->{'username'} =~ /^([a-z0-9_\-\.]+)$/ or return "Illegal username"; + my $username = $1; + $svc_acct = qsearchs('svc_acct', { 'username' => $username } ) + or return "Unknown user"; + return "Incorrect password" + if defined($href->{'password'}) + && $href->{'password'} ne $svc_acct->_password; + my $session = new FS::session { + 'portnum' => $href->{'portnum'}, + 'svcnum' => $svc_acct->svcnum, + 'login' => $href->{'login'}, + }; + $session->insert; +} + +sub logout { + my $href = shift; + $href->{'username'} =~ /^([a-z0-9_\-\.]+)$/ or return "Illegal username"; + my $username = $1; + $svc_acct = qsearchs('svc_acct', { 'username' => $username } ) + or return "Unknown user"; + return "Incorrect password" + if defined($href->{'password'}) + && $href->{'password'} ne $svc_acct->_password; + my $session = qsearchs FS::session { + 'portnum' => $href->{'portnum'}, + 'svcnum' => $svc_acct->svcnum, + 'logoff' => '', + }; + return "No currently open sessios found for that user/port!" unless $session; + my $nsession = new FS::session ( { $old->hash } ); + $nsession->replace($session); +} + +sub usage { + die "Usage:\n\n fs_session_server user machine\n"; +}