quote already-crypted passwords to prevent variable substitution
[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;
48     my $dos = 0;
49     push @data, scalar(<Client>) until $dos++ == 99 || $data[$#data] eq "END\n";
50     if ( $dos == 99 ) { 
51       warn "$me WARNING: DoS attempt!" 
52     } else {
53       warn "$me sending data to remote server\n" if $Debug;
54       print "$command\n", @data;
55       warn "$me reading result from remote server\n" if $Debug;
56       my $error = <STDIN>;
57       warn "$me sending error to local client\n" if $Debug;
58       print Client $error;
59     }
60   } else {
61     warn "$me WARNING: unexpected command from client: $command";
62   }
63
64 }
65