handle missing customer records without erroring out
[freeside.git] / bin / svc_acct.import
index 893a829..eb94e1c 100755 (executable)
@@ -1,49 +1,11 @@
 #!/usr/bin/perl -Tw
-#
-# $Id: svc_acct.import,v 1.8 2000-02-03 05:16:52 ivan Exp $
-#
-# ivan@sisd.com 98-mar-9
-#
-# changed 'password' field to '_password' because PgSQL 6.3 reserves this word
-#      bmccane@maxbaud.net  98-Apr-3
-#
-# generalized svcparts (still needs radius import) ivan@sisd.com 98-mar-23
-#
-# radius import, now an interactive script.  still needs erpcd import?
-# ivan@sisd.com 98-jun-24
-#
-# arbitrary radius attributes ivan@sisd.com 98-aug-9
-#
-# don't import /var/spool/freeside/conf/shells!  ivan@sisd.com 98-aug-13
-#
-# $Log: svc_acct.import,v $
-# Revision 1.8  2000-02-03 05:16:52  ivan
-# beginning of DNS and Apache support
-#
-# Revision 1.7  1999/07/08 02:32:26  ivan
-# import fix, noticed by Ben Leibig and Joel Griffiths
-#
-# Revision 1.6  1999/07/08 01:49:00  ivan
-# updates to avoid -w warnings from Joel Griffiths <griff@aver-computer.com>
-#
-# Revision 1.5  1999/03/25 08:42:19  ivan
-# import stuff uses Term::Query and spits out (some kinds of) nonsensical input
-#
-# Revision 1.4  1999/03/24 00:43:38  ivan
-# die if no relevant services
-#
-# Revision 1.3  1998/12/10 07:23:16  ivan
-# use FS::Conf, need user (for datasrc)
-#
-# Revision 1.2  1998/10/13 12:07:51  ivan
-# Assigns password from the shadow file for RADIUS password "UNIX"
-#
+# $Id: svc_acct.import,v 1.17 2001-08-19 10:25:44 ivan Exp $
 
 use strict;
 use vars qw(%part_svc);
 use Date::Parse;
 use Term::Query qw(query);
-use FS::SSH qw(iscp);
+use Net::SCP qw(iscp);
 use FS::UID qw(adminsuidsetup datasrc);
 use FS::Record qw(qsearch);
 use FS::svc_acct;
@@ -52,6 +14,8 @@ use FS::part_svc;
 my $user = shift or die &usage;
 adminsuidsetup $user;
 
+push @FS::svc_acct::shells, qw(/bin/sync /sbin/shuddown /bin/halt); #others?
+
 my($spooldir)="/usr/local/etc/freeside/export.". datasrc;
 
 $FS::svc_acct::nossh_hack = 1;
@@ -145,12 +109,13 @@ my(%upassword,%ip,%allparam);
 my(%param,$username);
 while (<USERS>) {
   chop;
-  next if /^$/;
+  next if /^\s*$/;
+  next if /^\s*#/;
   if ( /^\S/ ) {
-    /^(\w+)\s+Password\s+=\s+"([^"]+)"(,\s+Expiration\s+=\s+"([^"]*")\s*)?$/
+    /^(\w+)\s+(Auth-Type\s+=\s+Local,\s+)?Password\s+=\s+"([^"]+)"(,\s+Expiration\s+=\s+"([^"]*")\s*)?$/
       or die "1Unexpected line in users.import: $_";
     my($password,$expiration);
-    ($username,$password,$expiration)=(lc($1),$2,$4);
+    ($username,$password,$expiration)=(lc($1),$3,$5);
     $password = '' if $password eq 'UNIX';
     $upassword{$username}=$password;
     undef %param;
@@ -190,6 +155,8 @@ my(%password);
 while (<SHADOW>) {
   chop;
   my($username,$password)=split(/:/);
+  #$password =~ s/^\!$/\*/;
+  #$password =~ s/\!+/\*SUSPENDED\* /;
   $password{$username}=$password;
 }
 
@@ -215,15 +182,15 @@ while (<PASSWD>) {
   }
 
   my($svc_acct) = new FS::svc_acct ({
-    'svcpart'  => $svcpart,
-    'username' => $username,
-    'password' => $password,
-    'uid'      => $uid,
-    'gid'      => $gid,
-    'finger'   => $finger,
-    'dir'      => $dir,
-    'shell'    => $shell,
-    'slipip'   => $ip{$username},
+    'svcpart'   => $svcpart,
+    'username'  => $username,
+    '_password' => $password,
+    'uid'       => $uid,
+    'gid'       => $gid,
+    'finger'    => $finger,
+    'dir'       => $dir,
+    'shell'     => $shell,
+    'slipip'    => $ip{$username},
     %{$allparam{$username}},
   });
   my($error);
@@ -249,10 +216,10 @@ foreach $username ( keys %upassword ) {
   }
 
   my($svc_acct) = new FS::svc_acct ({
-    'svcpart'  => $svcpart,
-    'username' => $username,
-    'password' => $password,
-    'slipip'   => $ip{$username},
+    'svcpart'   => $svcpart,
+    'username'  => $username,
+    '_password' => $password,
+    'slipip'    => $ip{$username},
     %{$allparam{$username}},
   });
   my($error);