3a2bd1d271107507d093498cdbccf00650c96eed
[freeside.git] / fs_passwd / fs_passwdd
1 #!/usr/bin/perl -Tw
2 #
3 # fs_passwdd
4 #
5 # This is run REMOTELY over ssh by fs_passwd_server.
6 #
7 # ivan@sisd.com 98-mar-9
8
9 use strict;
10 use Socket;
11
12 my $fs_passwdd_socket = "/usr/local/freeside/fs_passwdd_socket";
13 my $pid_file = "$fs_passwdd_socket.pid"
14
15 $ENV{'PATH'} ='/usr/local/bin:/usr/bin:/usr/ucb:/bin';
16 $ENV{'SHELL'} = '/bin/sh';
17 $ENV{'IFS'} = " \t\n";
18 $ENV{'CDPATH'} = '';
19 $ENV{'ENV'} = '';
20 $ENV{'BASH_ENV'} = '';
21
22 $|=1;
23
24 my $uaddr = sockaddr_un($fs_passwdd_socket);
25 my $proto = getprotobyname('tcp');
26
27 socket(Server,PF_UNIX,SOCK_STREAM,0) or die "socket: $!";
28 unlink($fs_passwdd_socket);
29 bind(Server, $uaddr) or die "bind: $!";
30 listen(Server,SOMAXCONN) or die "listen: $!";
31
32 if ( -e $pid_file ) {
33   open(PIDFILE,"<$pid_file");
34   chomp( my $old_pid = <$pid_file> );
35   close PIDFILE;
36   kill 'TERM', $pid_file;
37 }
38 open(PIDFILE,">$pid_file");
39 print PIDFILE "$$\n";
40 close PIDFILE;
41
42 my($paddr);
43 for ( ; $paddr = accept(Client,Server); close Client) {
44   my($me,$old_password,$new_password,$new_gecos,$new_shell);
45
46   $me=<Client>;
47   $old_password=<Client>;
48   $new_password=<Client>;
49   $new_gecos=<Client>;
50   $new_shell=<Client>;
51
52   print $me,$old_password,$new_password,$new_gecos,$new_shell;
53   my($error);
54
55   $error=<STDIN>;
56   
57   print Client $error;
58   close Client;
59 }
60