perl 5.005 needs an explicit mask for mkdir
[freeside.git] / bin / svc_acct_sm.import
index 647e5c2..b668405 100755 (executable)
@@ -1,31 +1,11 @@
 #!/usr/bin/perl -Tw
 #
-# $Id: svc_acct_sm.import,v 1.3 1999-03-24 00:51:55 ivan Exp $
-#
-# ivan@sisd.com 98-mar-9
-#
-# generalized svcparts ivan@sisd.com 98-mar-23
-
-# You really need to enable ssh into a shell machine as this needs to rename
-# .qmail-extension files.
-#
-# now an interactive script ivan@sisd.com 98-jun-30
-#
-# has an (untested) section for sendmail, s/warn/die/g and generates a program
-# to run on your mail machine _later_ instead of ssh'ing for each user
-# ivan@sisd.com 98-jul-13
-#
-# $Log: svc_acct_sm.import,v $
-# Revision 1.3  1999-03-24 00:51:55  ivan
-# die if no relevant services... cvspain
-#
-# Revision 1.2  1998/12/10 07:23:18  ivan
-# use FS::Conf, need user (for datasrc)
-#
+# $Id: svc_acct_sm.import,v 1.10 2001-08-21 02:43:18 ivan Exp $
 
 use strict;
 use vars qw(%d_part_svc %m_part_svc);
-use FS::SSH qw(iscp);
+use Term::Query qw(query);
+use Net::SCP qw(iscp);
 use FS::UID qw(adminsuidsetup datasrc);
 use FS::Record qw(qsearch qsearchs);
 use FS::svc_acct_sm;
@@ -55,20 +35,28 @@ die "No services with svcdb svc_svc_acct_sm!\n" unless %m_part_svc;
 
 print "\n\n", 
       ( join "\n", map "$_: ".$d_part_svc{$_}->svc, sort keys %d_part_svc ),
-      "\n\nEnter part number for domains: ";
-my($domain_svcpart)=&getvalue;
+      "\n\n";
+$^W=0; #Term::Query isn't -w-safe
+my $domain_svcpart = 
+  query "Enter part number for domains: ", 'irk', [ keys %d_part_svc ];
+$^W=1;
 
 print "\n\n", 
       ( join "\n", map "$_: ".$m_part_svc{$_}->svc, sort keys %m_part_svc ),
-      "\n\nEnter part number for mail aliases: ";
-my($mailalias_svcpart)=&getvalue;
+      "\n\n";
+$^W=0; #Term::Query isn't -w-safe
+my $mailalias_svcpart = 
+  query "Enter part number for mail aliases: ", 'irk', [ keys %m_part_svc ];
+$^W=1;
 
 print "\n\n", <<END;
 Select your MTA from the following list.
 END
 print join "\n", map "$_: $mta{$_}", sort keys %mta;
-print "\n\n:";
-my($mta)=&getvalue;
+print "\n\n";
+$^W=0; #Term::Query isn't -w-safe
+my $mta = query ":", 'irk', [ keys %mta ];
+$^W=1;
 
 if ( $mta{$mta} eq "qmail" ) {
 
@@ -76,8 +64,7 @@ if ( $mta{$mta} eq "qmail" ) {
 Enter the location and name of your qmail control directory, for example
 "mail.isp.com:/var/qmail/control"
 END
-  print ":";
-  my($control)=&getvalue;
+  my($control)=&getvalue(":");
   iscp("root\@$control/rcpthosts","$spooldir/rcpthosts.import");
 #  iscp("root\@$control/recipientmap","$spooldir/recipientmap.import");
   iscp("root\@$control/virtualdomains","$spooldir/virtualdomains.import");
@@ -95,16 +82,14 @@ END
 Enter the location and name of your sendmail virtual user table, for example
 "mail.isp.com:/etc/virtusertable"
 END
-  print ":";
-  my($virtusertable)=&getvalue;
+  my($virtusertable)=&getvalue(":");
   iscp("root\@$virtusertable","$spooldir/virtusertable.import");
 
   print "\n\n", <<END;
 Enter the location and name of your sendmail.cw file, for example
 "mail.isp.com:/etc/sendmail.cw"
 END
-  print ":";
-  my($sendmail_cw)=&getvalue;
+  my($sendmail_cw)=&getvalue(":");
   iscp("root\@$sendmail_cw","$spooldir/sendmail.cw.import");
 
 } else {
@@ -112,9 +97,11 @@ END
 }
 
 sub getvalue {
-  my($x)=scalar(<STDIN>);
-  chop $x;
-  $x;
+  my $prompt = shift;
+  $^W=0; #Term::Query isn't -w-safe
+  my $data = query $prompt, '';
+  $^W=1;
+  $data;
 }
 
 print "\n\n";
@@ -138,13 +125,14 @@ my(%svcnum);
 
 while (<RCPTHOSTS>) {
   next if /^(#|$)/;
+  next if $mta{$mta} eq 'sendmail' && /^\s*$/; #blank lines
   /^\.?([\w\-\.]+)$/
     #or do { warn "Strange rcpthosts/sendmail.cw line: $_"; next; };
     or die "Strange rcpthosts/sendmail.cw line: $_";
   my $domain = $1;
   my($svc_domain);
   unless ( $svc_domain = qsearchs('svc_domain', {'domain'=>$domain} ) ) {
-    $svc_domain = create FS::svc_domain ({
+    $svc_domain = new FS::svc_domain ({
       'domain'  => $domain,
       'svcpart' => $domain_svcpart,
       'action'  => 'N',
@@ -199,7 +187,7 @@ END
     }
 
     unless ( exists $svcnum{$domain} ) {
-      my($svc_domain) = create FS::svc_domain ({
+      my($svc_domain) = new FS::svc_domain ({
         'domain'  => $domain,
         'svcpart' => $domain_svcpart,
         'action'  => 'N',
@@ -210,7 +198,7 @@ END
       $svcnum{$domain}=$svc_domain->svcnum;
     }
 
-    my($svc_acct_sm)=create FS::svc_acct_sm ({
+    my($svc_acct_sm)=new FS::svc_acct_sm ({
       'domsvc'  => $svcnum{$domain},
       'domuid'  => $svc_acct->uid,
       'domuser' => '*',
@@ -230,7 +218,8 @@ END
     or die "Can't open $spooldir/virtusertable.import: $!";
   while (<VIRTUSERTABLE>) {
     next if /^#/; #comments?
-    /^([\w\-\.]+)?\@([\w\-\.]+)\t([\w\-\.]+)$/
+    next if /^\s*$/; #blank lines
+    /^([\w\-\.]+)?\@([\w\-\.]+)\t+([\w\-\.]+)$/
       #or do { warn "Strange virtusertable line: $_"; next; };
       or die "Strange virtusertable line: $_";
     my($domuser,$domain,$username)=($1,$2,$3);
@@ -240,7 +229,7 @@ END
       die "Unknown user $username in virtusertable";
       next;
     }
-    my($svc_acct_sm)=create FS::svc_acct_sm ({
+    my($svc_acct_sm)=new FS::svc_acct_sm ({
       'domsvc'  => $svcnum{$domain},
       'domuid'  => $svc_acct->uid,
       'domuser' => $domuser || '*',
@@ -268,6 +257,6 @@ END
 #
 
 sub usage {
-  die "Usage:\n\n  svc_acct_sm.export user\n";
+  die "Usage:\n\n  svc_acct_sm.import user\n";
 }