don't use Apache::ASP-specific $Redirect object
[freeside.git] / bin / svc_acct_sm.export
index 380a52e..d7a7840 100755 (executable)
@@ -1,6 +1,6 @@
 #!/usr/bin/perl -Tw
 #
-# $Id: svc_acct_sm.export,v 1.3 2000-06-12 08:37:56 ivan Exp $
+# $Id: svc_acct_sm.export,v 1.10 2001-05-08 10:44:17 ivan Exp $
 # 
 # Create and export config files for sendmail, qmail
 #
 # /var/spool/freeside/conf and sendmail updates ivan@sisd.com 98-aug-14
 #
 # $Log: svc_acct_sm.export,v $
-# Revision 1.3  2000-06-12 08:37:56  ivan
+# Revision 1.10  2001-05-08 10:44:17  ivan
+# fix for OO Net::SCP
+#
+# Revision 1.9  2001/04/22 01:56:15  ivan
+# get rid of FS::SSH.pm (became Net::SSH and Net::SCP on CPAN)
+#
+# Revision 1.8  2000/07/06 03:37:24  ivan
+# don't error out on invalid svc_acct_sm.domuid's that can't be matched in
+# svc_acct.uid - just warn.
+#
+# Revision 1.7  2000/07/03 09:13:10  ivan
+# get rid of double sendmailrestart invocation; no need for multiple sessions
+#
+# Revision 1.6  2000/07/03 09:09:14  ivan
+# typo
+#
+# Revision 1.5  2000/07/03 09:03:14  ivan
+# added sendmailrestart and sendmailconfigpath config files
+#
+# Revision 1.4  2000/06/29 14:02:29  ivan
+# add sendmailrestart configuration file
+#
+# Revision 1.3  2000/06/12 08:37:56  ivan
 # sendmail fix from Jeff Finucane
 #
 # Revision 1.2  1998/12/10 07:23:17  ivan
@@ -52,7 +74,8 @@
 use strict;
 use vars qw($conf);
 use Fcntl qw(:flock);
-use FS::SSH qw(ssh scp);
+use Net::SSH qw(ssh);
+use Net::SCP qw(scp);
 use FS::UID qw(adminsuidsetup datasrc);
 use FS::Record qw(qsearch qsearchs);
 use FS::svc_acct;
@@ -64,15 +87,18 @@ adminsuidsetup $user;
 
 $conf = new FS::Conf;
 
-my($shellmachine);
-my(@qmailmachines);
+my($shellmachine, @qmailmachines);
 if ( $conf->exists('qmailmachines') ) {
   $shellmachine = $conf->config('shellmachine');
   @qmailmachines = $conf->config('qmailmachines');
 }
 
-my @sendmailmachines = $conf->config('sendmailmachines')
-  if $conf->exists('sendmailmachines');
+my(@sendmailmachines, $sendmailconfigpath, $sendmailrestart);
+if ( $conf->exists('sendmailmachines') ) {
+  @sendmailmachines = $conf->config('sendmailmachines');
+  $sendmailconfigpath = $conf->config('sendmailconfigpath') || '/etc';
+  $sendmailrestart = $conf->config('sendmailrestart');
+}
 
 my $mydomain = $conf->config('domain');
 
@@ -130,6 +156,11 @@ foreach $svc_acct_sm ( qsearch('svc_acct_sm') ) {
   );
   my($domain)=$domain{$domsvc};
   my($svc_acct)=qsearchs('svc_acct',{'uid'=>$domuid});
+  unless ( $svc_acct ) {
+    warn "WARNING: couldn't find svc_acct.uid $domuid (svc_acct_sm.svcnum ".
+         $svc_acct_sm->svcnum. ") - corruped database?\n";
+    next;
+  }
   my($username,$dir,$uid,$gid)=(
     $svc_acct->username,
     $svc_acct->dir,
@@ -183,15 +214,16 @@ close VIRTUALDOMAINS;
 
 my($sendmailmachine);
 foreach $sendmailmachine (@sendmailmachines) {
-  scp("$spooldir/sendmail.cw","root\@$sendmailmachine:/etc/sendmail.cw.new")
-    == 0 or die "scp error: $!";
-  scp("$spooldir/virtusertable","root\@$sendmailmachine:/etc/virtusertable.new")
-    == 0 or die "scp error: $!";
+  my $scp = new Net::SCP;
+  $scp->scp("$spooldir/sendmail.cw","root\@$sendmailmachine:$sendmailconfigpath/sendmail.cw.new")
+    or die "scp error: ". $scp->{errstr};
+  $scp->scp("$spooldir/virtusertable","root\@$sendmailmachine:$sendmailconfigpath/virtusertable.new")
+    or die "scp error: ". $scp->{errstr};
   ssh("root\@$sendmailmachine",
     "( ".
-      "mv /etc/sendmail.cw.new /etc/sendmail.cw; ".
-      "mv /etc/virtusertable.new /etc/virtusertable; ".
-      #"/etc/init.d/sendmail restart; ".
+      "mv $sendmailconfigpath/sendmail.cw.new $sendmailconfigpath/sendmail.cw; ".
+      "mv $sendmailconfigpath/virtusertable.new $sendmailconfigpath/virtusertable; ".
+      $sendmailrestart.
     " )"
   )
     == 0 or die "ssh error: $!";
@@ -199,12 +231,13 @@ foreach $sendmailmachine (@sendmailmachines) {
 
 my($qmailmachine);
 foreach $qmailmachine (@qmailmachines) {
-  scp("$spooldir/recipientmap","root\@$qmailmachine:/var/qmail/control/recipientmap")
-    == 0 or die "scp error: $!";
-  scp("$spooldir/virtualdomains","root\@$qmailmachine:/var/qmail/control/virtualdomains")
-    == 0 or die "scp error: $!";
-  scp("$spooldir/rcpthosts","root\@$qmailmachine:/var/qmail/control/rcpthosts")
-    == 0 or die "scp error: $!";
+  my $scp = new Net::SCP;
+  $scp->scp("$spooldir/recipientmap","root\@$qmailmachine:/var/qmail/control/recipientmap")
+    or die "scp error: ". $scp->{errstr};
+  $scp->scp("$spooldir/virtualdomains","root\@$qmailmachine:/var/qmail/control/virtualdomains")
+    or die "scp error: ". $scp->{errstr};
+  $scp->scp("$spooldir/rcpthosts","root\@$qmailmachine:/var/qmail/control/rcpthosts")
+    or die "scp error: ". $scp->{errstr};
   #ssh("root\@$qmailmachine","/etc/init.d/qmail restart")
   #  == 0 or die "ssh error: $!";
 }