session monitor updates
[freeside.git] / fs_sesmon / FS-SessionClient / fs_sessiond
1 #!/usr/bin/perl -Tw
2 #
3 # fs_sessiond
4 #
5 # This is run REMOTELY over ssh by fs_session_server
6 #
7
8 use strict;
9 use Socket;
10
11 use vars qw( $Debug );
12
13 $Debug = 1;
14
15 my $fs_sessiond_socket = "/usr/local/freeside/fs_sessiond_socket";
16
17 $ENV{'PATH'} ='/usr/local/bin:/usr/bin:/usr/ucb:/bin';
18 $ENV{'SHELL'} = '/bin/sh';
19 $ENV{'IFS'} = " \t\n";
20 $ENV{'CDPATH'} = '';
21 $ENV{'ENV'} = '';
22 $ENV{'BASH_ENV'} = '';
23
24 $|=1;
25
26 my $me = "[fs_sessiond]";
27
28 warn "$me starting\n" if $Debug;
29 #nothing to read from server
30
31 warn "$me creating $fs_sessiond_socket\n" if $Debug;
32 my $uaddr = sockaddr_un($fs_sessiond_socket);
33 my $proto = getprotobyname('tcp');
34 socket(Server,PF_UNIX,SOCK_STREAM,0) or die "socket: $!";
35 unlink($fs_sessiond_socket);
36 bind(Server, $uaddr) or die "bind: $!";
37 listen(Server,SOMAXCONN) or die "listen: $!";
38
39 warn "$me entering main loop\n" if $Debug;
40 my $paddr;
41 for ( ; $paddr = accept(Client,Server); close Client) {
42
43   chomp( my $command = <Client> );
44
45   if ( $command eq 'login' || $command eq 'logout' || $command eq 'portnum' ) {
46     warn "$me reading data from local client\n" if $Debug;
47     my( @data, $dos );
48     push @data, scalar(<Client>) until $dos++ == 99 || $data[$#data] eq "END\n";
49     if ( $dos == 99 ) { 
50       warn "$me WARNING: DoS attempt!" 
51     } else {
52       warn "$me sending data to remote server\n" if $Debug;
53       print "$command\n", @data;
54       warn "$me reading result from remote server\n" if $Debug;
55       my $error = <STDIN>;
56       warn "$me sending error to local client\n" if $Debug;
57       print Client $error;
58     }
59   } else {
60     warn "$me WARNING: unexpected command from client: $command";
61   }
62
63 }
64