s/icradiusmachine/machine/
[freeside.git] / bin / svc_acct.export
index d4ebe6b..a638a32 100755 (executable)
@@ -1,6 +1,6 @@
-#!/usr/bin/perl -Tw
+#!/usr/bin/perl -w
 #
-# $Id: svc_acct.export,v 1.2 1998-12-10 07:23:15 ivan Exp $
+# $Id: svc_acct.export,v 1.6 2000-03-06 14:48:29 ivan Exp $
 #
 # Create and export password files: passwd, passwd.adjunct, shadow,
 # acp_passwd, acp_userinfo, acp_dialup, users
 # ivan@sisd.com 98-sep-18
 # 
 # $Log: svc_acct.export,v $
-# Revision 1.2  1998-12-10 07:23:15  ivan
+# Revision 1.6  2000-03-06 14:48:29  ivan
+# s/icradiusmachine/machine/
+#
+# Revision 1.2  1998/12/10 07:23:15  ivan
 # use FS::Conf, need user (for datasrc)
 #
 
 use strict;
 use vars qw($conf);
 use Fcntl qw(:flock);
+use IO::Handle;
 use FS::Conf;
-use FS::SSH qw(scp ssh);
-use FS::UID qw(adminsuidsetup datasrc);
+use FS::SSH qw(scp ssh sshopen2);
+use FS::UID qw(adminsuidsetup datasrc dbh);
 use FS::Record qw(qsearch fields);
 use FS::svc_acct;
 
@@ -71,6 +75,17 @@ my @erpcdmachines = $conf->config('erpcdmachines')
 my @radiusmachines = $conf->config('radiusmachines')
   if $conf->exists('radiusmachines');
 
+my $icradiusmachines = $conf->exists('icradiusmachines');
+my @icradiusmachines = $conf->config('icradiusmachines') if $icradiusmachines;
+my $icradius_mysqldest =
+  $conf->config('icradius_mysqldest') || "/usr/local/var/radius"
+    if $icradiusmachines;
+my $icradius_mysqlsource =
+  $conf->config('icradius_mysqlsource') || "/usr/local/var/freeside"
+    if $icradiusmachines;
+my $icradius_dbh = dbh; #could eventually get it from a config file if you're
+                        #not running MySQL for your Freeside database
+
 my(@saltset)= ( 'a'..'z' , 'A'..'Z' , '0'..'9' , '.' , '/' );
 require 5.004; #srand(time|$$);
 
@@ -119,6 +134,11 @@ chmod 0600, "$spooldir/master.passwd",
             "$spooldir/users",
 ;
 
+if ( $icradiusmachines ) {
+  my $sth = $icradius_dbh->prepare("DELETE FROM radcheck");
+  $sth->execute or die "Can't reset radcheck table: ". $sth->errstr;
+}
+
 setpriority(0,0,10);
 
 my($svc_acct);
@@ -226,6 +246,21 @@ foreach $svc_acct (@svc_acct) {
       print USERS qq(\n\n);
     }
 
+    ###
+    # ICRADIUS export
+    if ( $icradiusmachines ) {
+      my $sth = $icradius_dbh->prepare(
+        "INSERT INTO radcheck ( id, UserName, Attribute, Value ) VALUES ( ".
+        join(", ", map { $icradius_dbh->quote( $_ ) } qw (
+          $svc_acct->svcnum
+          $svc_acct->username
+          "Password"
+          $svc_acct->_password
+        ) ). " )"
+      );
+      $sth->execute or die "Can't insert into radcheck table: ". $sth->errstr;
+   }
+
   }
 
 }
@@ -318,6 +353,19 @@ foreach $radiusmachine (@radiusmachines) {
     == 0 or die "ssh error: $!";
 }
 
+foreach my $icradiusmachine ( @icradiusmachines ) {
+  my( $machine, $db, $user, $pass ) = split(/\s+/, $icradiusmachine);
+  chdir $icradius_mysqlsource or die "Can't cd $icradius_mysqlsource: $!";
+  my($reader,$writer)=(new IO::Handle, new IO::Handle);
+  sshopen2("root\@$machine", $reader, $writer, "mysql --user=$user -p $db");
+  print $writer "$pass\nLOCK TABLES radcheck WRITE;\n";
+  foreach my $file ( glob("radcheck.*") ) {
+    scp($file,"root\@$machine:$icradius_mysqldest/$db/$file");
+  }
+  close $writer;
+  close $reader;
+}
+
 unlink $spoollock;
 flock(EXPORT,LOCK_UN);
 close EXPORT;