move freeside-selfservice-server to proper MakeMaker install location
authorivan <ivan>
Tue, 14 Jan 2003 09:26:49 +0000 (09:26 +0000)
committerivan <ivan>
Tue, 14 Jan 2003 09:26:49 +0000 (09:26 +0000)
FS/MANIFEST
FS/bin/freeside-selfservice-server [new file with mode: 0644]
fs_selfservice/freeside-selfservice-server [deleted file]
init.d/freeside-init

index 9c387d4..b3de623 100644 (file)
@@ -19,6 +19,7 @@ bin/freeside-setinvoice
 bin/freeside-overdue
 bin/freeside-radgroup
 bin/freeside-receivables-report
+bin/freeside-selfservice-server
 bin/freeside-sqlradius-radacctd
 bin/freeside-sqlradius-reset
 bin/freeside-sqlradius-seconds
diff --git a/FS/bin/freeside-selfservice-server b/FS/bin/freeside-selfservice-server
new file mode 100644 (file)
index 0000000..264cbc5
--- /dev/null
@@ -0,0 +1,235 @@
+#!/usr/bin/perl -w
+#
+# freeside-selfservice-server
+
+# alas, much false laziness with freeside-queued and fs_signup_server.  at
+# least it is slated to replace fs_{signup,passwd,mailadmin}_server
+# should probably generalize the version in here, or better yet use
+# Proc::Daemon or somesuch
+
+use strict;
+use vars qw( $Debug %kids $kids $max_kids $shutdown $log_file $ssh_pid );
+use Fcntl qw(:flock);
+use POSIX qw(:sys_wait_h setsid);
+use IO::Handle;
+use IO::Select;
+use IO::File;
+use Storable qw(nstore_fd fd_retrieve);
+use Net::SSH qw(sshopen2);
+use FS::UID qw(adminsuidsetup forksuidsetup);
+use FS::ClientAPI;
+
+use FS::Conf;
+use FS::cust_bill;
+use FS::cust_pkg;
+
+$Debug = 2; # >= 2 will log packet contents, including potentially compromising
+            # information
+
+$shutdown = 0;
+$max_kids = '10'; #?
+$kids = 0;
+
+my $user = shift or die &usage;
+my $machine = shift or die &usage;
+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
+
+&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;
+while (1) {
+  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);
+
+#  nstore_fd(\*writer, {'hi'=>'there'});
+
+  warn "entering main loop\n" if $Debug;
+  my $undisp = 0;
+  my $s = IO::Select->new( $reader );
+  while (1) {
+
+    &reap_kids;
+
+    warn "waiting for packet from client\n" if $Debug && !$undisp;
+    $undisp = 1;
+    my @handles = $s->can_read(5);
+    unless ( @handles ) {
+      &shutdown if $shutdown;
+      next;
+    }
+
+    $undisp = 0;
+
+    warn "receiving packet from client\n" if $Debug;
+
+    my $packet = fd_retrieve($reader);
+    warn "packet received\n".
+         join('', map { " $_=>$packet->{$_}\n" } keys %$packet )
+      if $Debug > 1;
+
+    #prevent runaway forking
+    my $warnkids = 0;
+    while ( $kids >= $max_kids ) {
+      warn "WARNING: maximum $kids children reached\n" unless $warnkids++;
+      &reap_kids;
+      sleep 1;
+    }
+
+    warn "forking child\n" if $Debug;
+    defined( my $pid = fork ) or die "can't fork: $!";
+    if ( $pid ) {
+      $kids++;
+      $kids{$pid} = 1;
+      warn "child $pid spawned\n" if $Debug;
+    } else { #kid time
+
+      #get new db handle
+      $FS::UID::dbh->{InactiveDestroy} = 1;
+      forksuidsetup($user);
+
+      my $type = $packet->{_packet};
+      warn "calling $type handler\n" if $Debug; 
+      my $rv = eval { FS::ClientAPI->dispatch($type, $packet); };
+      if ( $@ ) {
+        warn my $error = "WARNING: error dispatching $type: $@";
+        $rv = { _error => $error };
+      }
+      $rv->{_token} = $packet->{_token}; #identifier
+
+      warn "sending response\n" if $Debug;
+      flock($writer, LOCK_EX) or die "FATAL: can't lock write stream: $!";
+      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: $!";
+
+      warn "child exiting\n" if $Debug;
+      exit; #end-of-kid
+    }
+
+  }
+
+}
+
+###
+# utility subroutines
+###
+
+sub reap_kids {
+  #warn "reaping kids\n";
+  foreach my $pid ( keys %kids ) {
+    my $kid = waitpid($pid, WNOHANG);
+    if ( $kid > 0 ) {
+      $kids--;
+      delete $kids{$kid};
+    }
+  }
+  #warn "done reaping\n";
+}
+
+sub init {
+  my $user = shift;
+
+  chdir "/" or die "Can't chdir to /: $!";
+  open STDIN, '/dev/null' or die "Can't read /dev/null: $!";
+  defined(my $pid = fork) or die "Can't fork: $!";
+  if ( $pid ) {
+    print "freeside-selfservice-server to $machine started with pid $pid\n"; #logging to $log_file
+    exit unless $pid_file;
+    my $pidfh = new IO::File ">$pid_file" or exit;
+    print $pidfh "$pid\n";
+    exit;
+  }
+
+#  sub REAPER { my $pid = wait; $SIG{CHLD} = \&REAPER; $kids--; }
+#  #sub REAPER { my $pid = wait; $kids--; $SIG{CHLD} = \&REAPER; }
+#  $SIG{CHLD} =  \&REAPER;
+
+  $shutdown = 0;
+  $SIG{HUP} = sub { warn "SIGHUP received; shutting down\n"; $shutdown++; };
+  $SIG{INT} = sub { warn "SIGINT received; shutting down\n"; $shutdown++; };
+  $SIG{TERM} = sub { warn "SIGTERM received; shutting down\n"; $shutdown++; };
+  $SIG{QUIT} = sub { warn "SIGQUIT received; shutting down\n"; $shutdown++; };
+  $SIG{PIPE} = sub { warn "SIGPIPE received; shutting down\n"; $shutdown++; };
+
+  #false laziness w/freeside-queued
+  my $freeside_gid = scalar(getgrnam('freeside'))
+    or die "can't setgid to freeside group\n";
+  $) = $freeside_gid;
+  $( = $freeside_gid;
+  #if freebsd can't setuid(), presumably it can't setgid() either.  grr fleabsd
+  ($(,$)) = ($),$();
+  $) = $freeside_gid;
+
+  $> = $FS::UID::freeside_uid;
+  $< = $FS::UID::freeside_uid;
+  #freebsd is sofa king broken, won't setuid()
+  ($<,$>) = ($>,$<);
+  $> = $FS::UID::freeside_uid;
+  #eslaf
+
+  $ENV{HOME} = (getpwuid($>))[7]; #for ssh
+  adminsuidsetup $user;
+
+  #$log_file = "/usr/local/etc/freeside/selfservice.". $FS::UID::datasrc; #MACHINE NAME
+  $log_file = "/usr/local/etc/freeside/selfservice.$machine.log";
+
+  open STDOUT, '>/dev/null'
+                            or die "Can't write to /dev/null: $!";
+  setsid                  or die "Can't start a new session: $!";
+  open STDERR, '>&STDOUT' or die "Can't dup stdout: $!";
+
+  $SIG{__DIE__} = \&_die;
+  $SIG{__WARN__} = \&_logmsg;
+
+  warn "freeside-selfservice-server starting\n";
+
+}
+
+sub shutdown {
+  my $wait = 12; #wait up to 1 minute
+  while ( $kids > 0 && $wait-- ) {
+    warn "waiting for $kids children to terminate";
+    sleep 5;
+  }
+  warn "abandoning $kids children" if $kids;
+  kill 'TERM', $ssh_pid if $ssh_pid;
+  die "exiting";
+}
+
+sub _die {
+  my $msg = shift;
+  unlink $pid_file if -e $pid_file;
+  _logmsg($msg);
+}
+
+sub _logmsg {
+  chomp( my $msg = shift );
+  _do_logmsg( "[server] [". scalar(localtime). "] [$$] $msg\n" );
+}
+
+sub _do_logmsg {
+  chomp( my $msg = shift );
+  my $log = new IO::File ">>$log_file";
+  flock($log, LOCK_EX);
+  seek($log, 0, 2);
+  print $log "$msg\n";
+  flock($log, LOCK_UN);
+  close $log;
+}
+
+sub usage {
+  die "Usage:\n\n  fs_signup_server user machine\n";
+}
+
diff --git a/fs_selfservice/freeside-selfservice-server b/fs_selfservice/freeside-selfservice-server
deleted file mode 100644 (file)
index 264cbc5..0000000
+++ /dev/null
@@ -1,235 +0,0 @@
-#!/usr/bin/perl -w
-#
-# freeside-selfservice-server
-
-# alas, much false laziness with freeside-queued and fs_signup_server.  at
-# least it is slated to replace fs_{signup,passwd,mailadmin}_server
-# should probably generalize the version in here, or better yet use
-# Proc::Daemon or somesuch
-
-use strict;
-use vars qw( $Debug %kids $kids $max_kids $shutdown $log_file $ssh_pid );
-use Fcntl qw(:flock);
-use POSIX qw(:sys_wait_h setsid);
-use IO::Handle;
-use IO::Select;
-use IO::File;
-use Storable qw(nstore_fd fd_retrieve);
-use Net::SSH qw(sshopen2);
-use FS::UID qw(adminsuidsetup forksuidsetup);
-use FS::ClientAPI;
-
-use FS::Conf;
-use FS::cust_bill;
-use FS::cust_pkg;
-
-$Debug = 2; # >= 2 will log packet contents, including potentially compromising
-            # information
-
-$shutdown = 0;
-$max_kids = '10'; #?
-$kids = 0;
-
-my $user = shift or die &usage;
-my $machine = shift or die &usage;
-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
-
-&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;
-while (1) {
-  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);
-
-#  nstore_fd(\*writer, {'hi'=>'there'});
-
-  warn "entering main loop\n" if $Debug;
-  my $undisp = 0;
-  my $s = IO::Select->new( $reader );
-  while (1) {
-
-    &reap_kids;
-
-    warn "waiting for packet from client\n" if $Debug && !$undisp;
-    $undisp = 1;
-    my @handles = $s->can_read(5);
-    unless ( @handles ) {
-      &shutdown if $shutdown;
-      next;
-    }
-
-    $undisp = 0;
-
-    warn "receiving packet from client\n" if $Debug;
-
-    my $packet = fd_retrieve($reader);
-    warn "packet received\n".
-         join('', map { " $_=>$packet->{$_}\n" } keys %$packet )
-      if $Debug > 1;
-
-    #prevent runaway forking
-    my $warnkids = 0;
-    while ( $kids >= $max_kids ) {
-      warn "WARNING: maximum $kids children reached\n" unless $warnkids++;
-      &reap_kids;
-      sleep 1;
-    }
-
-    warn "forking child\n" if $Debug;
-    defined( my $pid = fork ) or die "can't fork: $!";
-    if ( $pid ) {
-      $kids++;
-      $kids{$pid} = 1;
-      warn "child $pid spawned\n" if $Debug;
-    } else { #kid time
-
-      #get new db handle
-      $FS::UID::dbh->{InactiveDestroy} = 1;
-      forksuidsetup($user);
-
-      my $type = $packet->{_packet};
-      warn "calling $type handler\n" if $Debug; 
-      my $rv = eval { FS::ClientAPI->dispatch($type, $packet); };
-      if ( $@ ) {
-        warn my $error = "WARNING: error dispatching $type: $@";
-        $rv = { _error => $error };
-      }
-      $rv->{_token} = $packet->{_token}; #identifier
-
-      warn "sending response\n" if $Debug;
-      flock($writer, LOCK_EX) or die "FATAL: can't lock write stream: $!";
-      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: $!";
-
-      warn "child exiting\n" if $Debug;
-      exit; #end-of-kid
-    }
-
-  }
-
-}
-
-###
-# utility subroutines
-###
-
-sub reap_kids {
-  #warn "reaping kids\n";
-  foreach my $pid ( keys %kids ) {
-    my $kid = waitpid($pid, WNOHANG);
-    if ( $kid > 0 ) {
-      $kids--;
-      delete $kids{$kid};
-    }
-  }
-  #warn "done reaping\n";
-}
-
-sub init {
-  my $user = shift;
-
-  chdir "/" or die "Can't chdir to /: $!";
-  open STDIN, '/dev/null' or die "Can't read /dev/null: $!";
-  defined(my $pid = fork) or die "Can't fork: $!";
-  if ( $pid ) {
-    print "freeside-selfservice-server to $machine started with pid $pid\n"; #logging to $log_file
-    exit unless $pid_file;
-    my $pidfh = new IO::File ">$pid_file" or exit;
-    print $pidfh "$pid\n";
-    exit;
-  }
-
-#  sub REAPER { my $pid = wait; $SIG{CHLD} = \&REAPER; $kids--; }
-#  #sub REAPER { my $pid = wait; $kids--; $SIG{CHLD} = \&REAPER; }
-#  $SIG{CHLD} =  \&REAPER;
-
-  $shutdown = 0;
-  $SIG{HUP} = sub { warn "SIGHUP received; shutting down\n"; $shutdown++; };
-  $SIG{INT} = sub { warn "SIGINT received; shutting down\n"; $shutdown++; };
-  $SIG{TERM} = sub { warn "SIGTERM received; shutting down\n"; $shutdown++; };
-  $SIG{QUIT} = sub { warn "SIGQUIT received; shutting down\n"; $shutdown++; };
-  $SIG{PIPE} = sub { warn "SIGPIPE received; shutting down\n"; $shutdown++; };
-
-  #false laziness w/freeside-queued
-  my $freeside_gid = scalar(getgrnam('freeside'))
-    or die "can't setgid to freeside group\n";
-  $) = $freeside_gid;
-  $( = $freeside_gid;
-  #if freebsd can't setuid(), presumably it can't setgid() either.  grr fleabsd
-  ($(,$)) = ($),$();
-  $) = $freeside_gid;
-
-  $> = $FS::UID::freeside_uid;
-  $< = $FS::UID::freeside_uid;
-  #freebsd is sofa king broken, won't setuid()
-  ($<,$>) = ($>,$<);
-  $> = $FS::UID::freeside_uid;
-  #eslaf
-
-  $ENV{HOME} = (getpwuid($>))[7]; #for ssh
-  adminsuidsetup $user;
-
-  #$log_file = "/usr/local/etc/freeside/selfservice.". $FS::UID::datasrc; #MACHINE NAME
-  $log_file = "/usr/local/etc/freeside/selfservice.$machine.log";
-
-  open STDOUT, '>/dev/null'
-                            or die "Can't write to /dev/null: $!";
-  setsid                  or die "Can't start a new session: $!";
-  open STDERR, '>&STDOUT' or die "Can't dup stdout: $!";
-
-  $SIG{__DIE__} = \&_die;
-  $SIG{__WARN__} = \&_logmsg;
-
-  warn "freeside-selfservice-server starting\n";
-
-}
-
-sub shutdown {
-  my $wait = 12; #wait up to 1 minute
-  while ( $kids > 0 && $wait-- ) {
-    warn "waiting for $kids children to terminate";
-    sleep 5;
-  }
-  warn "abandoning $kids children" if $kids;
-  kill 'TERM', $ssh_pid if $ssh_pid;
-  die "exiting";
-}
-
-sub _die {
-  my $msg = shift;
-  unlink $pid_file if -e $pid_file;
-  _logmsg($msg);
-}
-
-sub _logmsg {
-  chomp( my $msg = shift );
-  _do_logmsg( "[server] [". scalar(localtime). "] [$$] $msg\n" );
-}
-
-sub _do_logmsg {
-  chomp( my $msg = shift );
-  my $log = new IO::File ">>$log_file";
-  flock($log, LOCK_EX);
-  seek($log, 0, 2);
-  print $log "$msg\n";
-  flock($log, LOCK_UN);
-  close $log;
-}
-
-sub usage {
-  die "Usage:\n\n  fs_signup_server user machine\n";
-}
-
index 37ced73..68cba8d 100644 (file)
@@ -34,7 +34,7 @@ case "$1" in
         echo "done."
 
         echo -n "Starting freeside-selfservice-server: "
-        $FREESIDE_PATH/fs_selfservice/freeside-selfservice-server $SELFSERVICE_USER $SELFSERVICE_MACHINE
+        freeside-selfservice-server $SELFSERVICE_USER $SELFSERVICE_MACHINE
         echo "done."
 
         ;;