use strict;
use vars qw( $Debug %kids $kids $max_kids $shutdown $log_file $ssh_pid );
+use subs qw( lock_write unlock_write );
use Fcntl qw(:flock);
use POSIX qw(:sys_wait_h setsid);
use IO::Handle;
my $user = shift or die &usage;
my $machine = shift or die &usage;
+my $tag = scalar(@ARGV) ? shift : '';
my $pid_file = "/var/run/freeside-selfservice-server.$user.pid";
#my $pid_file = "/var/run/freeside-selfservice-server.$user.pid"; $FS::UID::datasrc not posible, but should include machine name at least, hmm
+my $lock_file = "/usr/local/etc/freeside/selfservice.$machine.writelock";
+open(LOCKFILE,">$lock_file") or die "can't open $lock_file: $!";
+
&init($user);
my $conf = new FS::Conf;
-if ($conf->exists('selfservice_server-quiet')) {
- $FS::cust_bill::quiet = 1;
- $FS::cust_pkg::quiet = 1;
-}
-
my $clientd = "/usr/local/sbin/freeside-selfservice-clientd"; #better name?
my $warnkids=0;
my($writer,$reader,$error) = (new IO::Handle, new IO::Handle, new IO::Handle);
warn "connecting to $machine\n" if $Debug;
- $ssh_pid = sshopen2($machine,$reader,$writer,$clientd);
+ $ssh_pid = sshopen2($machine,$reader,$writer,$clientd,$tag);
# nstore_fd(\*writer, {'hi'=>'there'});
$rv->{_token} = $packet->{_token}; #identifier
warn "sending response\n" if $Debug;
- flock($writer, LOCK_EX) or die "FATAL: can't lock write stream: $!";
+ lock_write;
nstore_fd($rv, $writer) or die "FATAL: can't send response: $!";
$writer->flush or die "FATAL: can't flush: $!";
- flock($writer, LOCK_UN) or die "WARNING: can't release write lock: $!";
+ unlock_write;
warn "child exiting\n" if $Debug;
exit; #end-of-kid
close $log;
}
+sub lock_write {
+ #broken on freebsd?
+ #flock($writer, LOCK_EX) or die "FATAL: can't lock write stream: $!";
+
+ flock(LOCKFILE, LOCK_EX) or die "FATAL: can't lock $lock_file: $!";
+
+}
+
+sub unlock_write {
+ #broken on freebsd?
+ #flock($writer, LOCK_UN) or die "WARNING: can't release write lock: $!";
+
+ flock(LOCKFILE, LOCK_UN) or die "FATAL: can't unlock $lock_file: $!";
+
+}
+
sub usage {
- die "Usage:\n\n fs_signup_server user machine\n";
+ die "Usage:\n\n freeside-selfservice-server user machine\n";
}