#!/usr/bin/perl -w
#
-# $Id: svc_acct.export,v 1.29 2002-02-12 02:11:07 ivan Exp $
+# $Id: svc_acct.export,v 1.36 2002-05-16 14:28:35 ivan Exp $
#
# Create and export password, radius and vpopmail password files:
# passwd, passwd.adjunct, shadow, acp_passwd, acp_userinfo, acp_dialup
use strict;
use vars qw($conf);
-use Archive::Tar;
use Fcntl qw(:flock);
use File::Path;
use IO::Handle;
use FS::svc_domain;
use FS::svc_forward;
+my $ssh='ssh';
+my $rsync='rsync';
+
my $user = shift or die &usage;
adminsuidsetup $user;
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"
- if $icradiusmachines;
-my $icradius_mysqlsource =
- $conf->config('icradius_mysqlsource') || "/usr/local/var/freeside"
- if $icradiusmachines;
-my $icradius_dbh;
-if ( $icradiusmachines && $conf->exists('icradius_secrets') ) {
- $icradius_dbh = DBI->connect($conf->config('icradius_secrets'))
- or die $DBI::errstr;
-} else {
- $icradius_dbh = dbh;
-}
-
my $textradiusprepend =
$conf->exists('textradiusprepend')
? $conf->config('textradiusprepend')
my $radiusprepend =
$conf->exists('radiusprepend')
- ? $conf->config('radiusprepend')
+ ? join("\n", $conf->config('radiusprepend'))
: '';
my @vpopmailmachines = $conf->config('vpopmailmachines')
rmtree"$spooldir/domains", 0, 1;
mkdir "$spooldir/domains", 0700;
-if ( $icradiusmachines ) {
- my $sth = $icradius_dbh->prepare("DELETE FROM radcheck");
- $sth->execute or die "Can't reset radcheck table: ". $sth->errstr;
- my $sth2 = $icradius_dbh->prepare("DELETE FROM radreply");
- $sth2->execute or die "Can't reset radreply table: ". $sth2->errstr;
-}
-
setpriority(0,0,10);
print USERS "$radiusprepend\n";
$username=$svc_acct->username . $svc_domain->domain;
} elsif ($userpolicy =~ /^append domain$/) {
$username=$svc_acct->username . $svc_domain->domain;
- } elsif ($userpolicy =~ /^append @domain$/) {
+ } elsif ($userpolicy =~ /^append \@domain$/) {
$username=$svc_acct->username . '@'. $svc_domain->domain;
} else {
die "Unknown policy in username_policy\n";
'',
), "\n";
}
+ }
- ###
- # FORMAT OF THE VPASSWD FILE HERE
- print VPASSWD join(":",
- $svc_acct->username,
- $cpassword,
- '1',
- '0',
- $svc_acct->username,
- "$vpopdir/domains/" . $svc_domain->domain ."/" . $svc_acct->username,
- 'NOQUOTA',
- ), "\n";
+ ###
+ # FORMAT OF THE VPASSWD FILE HERE
+ print VPASSWD join(":",
+ $svc_acct->username,
+ $cpassword,
+ '1',
+ '0',
+ $svc_acct->username,
+ "$vpopdir/domains/" . $svc_domain->domain ."/" . $svc_acct->username,
+ 'NOQUOTA',
+ ), "\n";
- }
if ( $svc_acct->slipip ne '' ) {
$username,
qq(\t${textradiusprepend}),
$radcheck,
- qq(Password = "$rpassword"\n\t),
+# qq(Password = "$rpassword"\n\t),
join ",\n\t", map { qq($_ = "$radreply{$_}") } keys %radreply;
- if ( $ip && $ip ne '0e0' ) {
- #print USERS qq(,\n\tFramed-Address = "$ip"\n\n);
- print USERS qq(,\n\tFramed-IP-Address = "$ip"\n\n);
- } else {
+ #if ( $ip && $ip ne '0e0' ) {
+ # #print USERS qq(,\n\tFramed-Address = "$ip"\n\n);
+ # print USERS qq(,\n\tFramed-IP-Address = "$ip"\n\n);
+ #} else {
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( $_ ) } (
- '',
- $username,
- "Password",
- $svc_acct->_password,
- ) ). " )"
- );
- $sth->execute or die "Can't insert into radcheck table: ". $sth->errstr;
-
- foreach my $attribute ( keys %radcheck ) {
- my $sth = $icradius_dbh->prepare(
- "INSERT INTO radcheck ( id, UserName, Attribute, Value ) VALUES ( ".
- join(", ", map { $icradius_dbh->quote( $_ ) } (
- '',
- $username,
- $attribute,
- $radcheck{$attribute},
- ) ). " )"
- );
- $sth->execute or die "Can't insert into radcheck table: ". $sth->errstr; }
-
- foreach my $attribute ( keys %radreply ) {
- my $sth = $icradius_dbh->prepare(
- "INSERT INTO radreply (id, UserName, Attribute, Value) VALUES ( ".
- join(", ", map { $icradius_dbh->quote( $_ ) } (
- '',
- $username,
- $attribute,
- $radreply{$attribute},
- ) ). " )"
- );
- $sth->execute or die "Can't insert into radreply table: ". $sth->errstr; }
-
- if ( $ip && $ip ne '0e0' ) {
- my $sth = $icradius_dbh->prepare(
- "INSERT INTO radreply (id, UserName, Attribute, Value) VALUES ( ".
- join(", ", map { $icradius_dbh->quote( $_ ) } (
- '',
- $username,
- 'Framed-IP-Address',
- $ip,
- ) ). " )"
- );
- $sth->execute or die "Can't insert into radreply table: ". $sth->errstr; }
- }
}
###
== 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: $!";
- open(WRITER,"|ssh root\@$machine mysql -v --user=$user -p $db");
- my $oldfh = select WRITER; $|=1; select $oldfh;
- print WRITER "$pass\n";
- sleep 2;
- print WRITER "LOCK TABLES radcheck WRITE, radreply WRITE;\n";
- foreach my $file ( glob("radcheck.*") ) {
- my $scp = new Net::SCP;
- $scp->scp($file,"root\@$machine:$icradius_mysqldest/$db/$file")
- or die "scp error: ". $scp->{errstr};
- }
- foreach my $file ( glob("radreply.*") ) {
- my $scp = new Net::SCP;
- $scp->scp($file,"root\@$machine:$icradius_mysqldest/$db/$file")
- or die "scp error: ". $scp->{errstr};
- }
- close WRITER;
-}
-
-my @args = ("/bin/tar", "c", "--force-local", "-C", "$spooldir", "-f", "$spooldir/vpoptarball", "domains");
+#my @args = ("/bin/tar", "c", "--force-local", "-C", "$spooldir", "-f", "$spooldir/vpoptarball", "domains");
-system {$args[0]} @args;
+#system {$args[0]} @args;
my($vpopmailmachine);
foreach $vpopmailmachine (@vpopmailmachines) {
my ($machine, $vpopdir, $vpopuid, $vpopgid) = split (/\s+/, $vpopmailmachine);
my $scp = new Net::SCP;
- $scp->scp("$spooldir/vpoptarball","root\@$machine:vpoptarball")
- or die "scp error: ". $scp->{errstr};
- ssh("root\@$machine",
- "( ".
- "tar xf vpoptarball; ".
- "chown -R $vpopuid:$vpopgid domains; ".
- "tar cf vpoptarball domains; ".
- "cd $vpopdir; ".
- "tar xf ~/vpoptarball; ".
- " )"
- )
- == 0 or die "ssh error: $!";
+# $scp->scp("$spooldir/vpoptarball","root\@$machine:vpoptarball")
+# or die "scp error: ". $scp->{errstr};
+# ssh("root\@$machine",
+# "( ".
+# "rm -rf domains; ".
+# "tar xf vpoptarball; ".
+# "chown -R $vpopuid:$vpopgid domains; ".
+# "tar cf vpoptarball domains; ".
+# "cd $vpopdir; ".
+# "tar xf ~/vpoptarball; ".
+# " )"
+# )
+# == 0 or die "ssh error: $!";
+
+ chdir $spooldir;
+ my @args = ("$rsync", "-rlpt", "-e", "$ssh", "domains/", "vpopmail\@$machine:$vpopdir/domains/");
+
+ system {$args[0]} @args;
$scp->scp("$spooldir/assign","root\@$machine:/var/qmail/users/assign")
or die "scp error: ". $scp->{errstr};