big signup server cleanups. uses Storable for network protocol now.
[freeside.git] / fs_signup / FS-SignupClient / fs_signupd
1 #!/usr/bin/perl -Tw
2 #
3 # fs_signupd
4 #
5 # This is run REMOTELY over ssh by fs_signup_server.
6
7 use strict;
8 use Socket;
9 use Storable qw(nstore_fd fd_retrieve);
10 use IO::Handle;
11
12 use vars qw( $Debug );
13
14 $Debug = 1;
15
16 my($fs_signupd_socket)="/usr/local/freeside/fs_signupd_socket";
17
18 $ENV{'PATH'} ='/usr/local/bin:/usr/bin:/usr/ucb:/bin';
19 $ENV{'SHELL'} = '/bin/sh';
20 $ENV{'IFS'} = " \t\n";
21 $ENV{'CDPATH'} = '';
22 $ENV{'ENV'} = '';
23 $ENV{'BASH_ENV'} = '';
24
25 $|=1;
26
27 warn "[fs_signupd] Reading init data...\n" if $Debug;
28 my $init_data = fd_retrieve(\*STDIN);
29
30 warn "[fs_signupd] Creating $fs_signupd_socket\n" if $Debug;
31 my $uaddr = sockaddr_un($fs_signupd_socket);
32 my $proto = getprotobyname('tcp');
33 socket(Server,PF_UNIX,SOCK_STREAM,0) or die "socket: $!";
34 unlink($fs_signupd_socket);
35 bind(Server, $uaddr) or die "bind: $!";
36 listen(Server,SOMAXCONN) or die "listen: $!";
37
38 warn "[fs_signupd] Entering main loop...\n" if $Debug;
39 my $paddr;
40 for ( ; $paddr = accept(Client,Server); close Client) {
41
42   chop( my $command = <Client> );
43
44   if ( $command eq "signup_info" ) {
45
46     warn "[fs_signupd] sending signup info...\n" if $Debug; 
47     nstore_fd($init_data, \*Client) or die "can't send init data: $!";
48     Client->flush;
49
50   } elsif ( $command eq "new_customer" ) {
51
52     #inefficient...
53
54     warn "[fs_signupd] reading customer signup...\n" if $Debug;
55     my $signup_data = fd_retrieve(\*Client);
56
57     warn "[fs_signupd] sending customer data to remote server...\n" if $Debug;
58     nstore_fd($signup_data, \*STDOUT) or die "can't send signup data: $!";
59     STDOUT->flush;
60
61     warn "[fs_signupd] reading error from remote server...\n" if $Debug;
62     my $error = <STDIN>;
63
64     warn "[fs_signupd] sending error to local client...\n" if $Debug;
65     print Client $error;
66     Client->flush;
67
68   } else {
69     die "unexpected command from client: $command";
70   }
71
72 }
73