diff options
Diffstat (limited to 'bin')
-rwxr-xr-x | bin/apache.export | 2 | ||||
-rwxr-xr-x | bin/create-history-tables | 3 | ||||
-rwxr-xr-x | bin/fix-sequences | 69 | ||||
-rwxr-xr-x | bin/passwd.import | 12 | ||||
-rwxr-xr-x | bin/svc_acct_sm.import | 262 |
5 files changed, 81 insertions, 267 deletions
diff --git a/bin/apache.export b/bin/apache.export index 908313606..f0a6beefc 100755 --- a/bin/apache.export +++ b/bin/apache.export @@ -39,7 +39,7 @@ foreach my $export ( @exports ) { use vars qw($zone $username); $zone = $svc_www->domain_record->zone; $username = $svc_www->svc_acct->username; - print HTTPD_CONF eval(qq("$template")); + print HTTPD_CONF eval(qq("$template")). "\n\n"; } my $user = $export->option('user'); diff --git a/bin/create-history-tables b/bin/create-history-tables index 33eb0e5a3..39248bf3f 100755 --- a/bin/create-history-tables +++ b/bin/create-history-tables @@ -18,8 +18,9 @@ my $schema = dbdef(); #false laziness w/fs-setup my @tables = scalar(@ARGV) ? @ARGV - : grep { ! /^h_/ } $schema->tables; + : grep { ! /^(h|pg)_/ } $schema->tables; foreach my $table ( @tables ) { + next if grep { /^h_$table/ } $schema->tables; warn "creating history table for $table\n"; my $tableobj = $schema->table($table) or die "unknown table $table (did you run dbdef-create?)\n"; diff --git a/bin/fix-sequences b/bin/fix-sequences new file mode 100755 index 000000000..2ff89d3e5 --- /dev/null +++ b/bin/fix-sequences @@ -0,0 +1,69 @@ +#!/usr/bin/perl -Tw + +# run dbdef-create first! + +use strict; +use DBI; +use DBIx::DBSchema 0.21; +use DBIx::DBSchema::Table; +use DBIx::DBSchema::Column; +use DBIx::DBSchema::ColGroup::Unique; +use DBIx::DBSchema::ColGroup::Index; +use FS::UID qw(adminsuidsetup driver_name); +use FS::Record qw(dbdef); + +my $user = shift or die &usage; +my $dbh = adminsuidsetup $user; + +my $schema = dbdef(); + +#false laziness w/fs-setup +my @tables = scalar(@ARGV) + ? @ARGV + : grep { ! /^h_/ } $schema->tables; +foreach my $table ( @tables ) { + my $tableobj = $schema->table($table) + or die "unknown table $table (did you run dbdef-create?)\n"; + + my $primary_key = $tableobj->primary_key; + next unless $primary_key; + + my $col = $tableobj->column($primary_key); + + + next unless uc($col->type) eq 'SERIAL' + || ( driver_name eq 'Pg' + && defined($col->default) + && $col->default =~ /^nextval\(/i + ) + || ( driver_name eq 'mysql' + && defined($col->local) + && $col->local =~ /AUTO_INCREMENT/i + ); + + my $seq = "${table}_${primary_key}_seq"; + if ( driver_name eq 'Pg' + && defined($col->default) + && $col->default =~ /^nextval\('"(public\.)?(\w+_seq)"'::text\)$/ + ) { + $seq = $2; + } + + warn "fixing sequence for $table\n"; + + + my $sql = "SELECT setval( '$seq', + ( SELECT max($primary_key) FROM $table ) );"; + + #warn $col->default. " $seq\n$sql\n"; + $dbh->do( $sql ) or die $dbh->errstr; + +} + +$dbh->commit or die $dbh->errstr; +$dbh->disconnect or die $dbh->errstr; + +sub usage { + die "Usage:\n fix-sequences user [ table table ... ] \n"; +} + diff --git a/bin/passwd.import b/bin/passwd.import index fbf27370f..093f8bafd 100755 --- a/bin/passwd.import +++ b/bin/passwd.import @@ -1,5 +1,5 @@ #!/usr/bin/perl -Tw -# $Id: passwd.import,v 1.5 2002-06-21 09:57:05 ivan Exp $ +# $Id: passwd.import,v 1.8 2003-06-12 14:08:00 ivan Exp $ use strict; use vars qw(%part_svc); @@ -14,7 +14,7 @@ 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? +push @FS::svc_acct::shells, qw(/bin/sync /sbin/shutdown /bin/halt /sbin/halt); #others? my($spooldir)="/usr/local/etc/freeside/export.". datasrc; @@ -104,7 +104,13 @@ while (<PASSWD>) { }); my($error); $error=$svc_acct->insert; - die $error if $error; + if ( $error ) { + if ( $error =~ /duplicate/i ) { + warn "$username: $error"; + } else { + die "$username: $error"; + } + } } diff --git a/bin/svc_acct_sm.import b/bin/svc_acct_sm.import deleted file mode 100755 index b668405f5..000000000 --- a/bin/svc_acct_sm.import +++ /dev/null @@ -1,262 +0,0 @@ -#!/usr/bin/perl -Tw -# -# $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 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; -use FS::svc_domain; -use FS::svc_acct; -use FS::part_svc; - -my $user = shift or die &usage; -adminsuidsetup $user; - -my($spooldir)="/usr/local/etc/freeside/export.". datasrc; - -my(%mta) = ( - 1 => "qmail", - 2 => "sendmail", -); - -### - -%d_part_svc = - map { $_->svcpart, $_ } qsearch('part_svc',{'svcdb'=>'svc_domain'}); -%m_part_svc = - map { $_->svcpart, $_ } qsearch('part_svc',{'svcdb'=>'svc_acct_sm'}); - -die "No services with svcdb svc_domain!\n" unless %d_part_svc; -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\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\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"; -$^W=0; #Term::Query isn't -w-safe -my $mta = query ":", 'irk', [ keys %mta ]; -$^W=1; - -if ( $mta{$mta} eq "qmail" ) { - - print "\n\n", <<END; -Enter the location and name of your qmail control directory, for example -"mail.isp.com:/var/qmail/control" -END - my($control)=&getvalue(":"); - iscp("root\@$control/rcpthosts","$spooldir/rcpthosts.import"); -# iscp("root\@$control/recipientmap","$spooldir/recipientmap.import"); - iscp("root\@$control/virtualdomains","$spooldir/virtualdomains.import"); - -# print "\n\n", <<END; -#Enter the name of the machine with your user .qmail files, for example -#"mail.isp.com" -#END -# print ":"; -# my($shellmachine)=&getvalue; - -} elsif ( $mta{$mta} eq "sendmail" ) { - - print "\n\n", <<END; -Enter the location and name of your sendmail virtual user table, for example -"mail.isp.com:/etc/virtusertable" -END - 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 - my($sendmail_cw)=&getvalue(":"); - iscp("root\@$sendmail_cw","$spooldir/sendmail.cw.import"); - -} else { - die "Unknown MTA!\n"; -} - -sub getvalue { - my $prompt = shift; - $^W=0; #Term::Query isn't -w-safe - my $data = query $prompt, ''; - $^W=1; - $data; -} - -print "\n\n"; - -### - -$FS::svc_domain::whois_hack=1; -$FS::svc_acct_sm::nossh_hack=1; - -if ( $mta{$mta} eq "qmail" ) { - open(RCPTHOSTS,"<$spooldir/rcpthosts.import") - or die "Can't open $spooldir/rcpthosts.import: $!"; -} elsif ( $mta{$mta} eq "sendmail" ) { - open(RCPTHOSTS,"<$spooldir/sendmail.cw.import") - or die "Can't open $spooldir/sendmail.cw.import: $!"; -} else { - die "Unknown MTA!\n"; -} - -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 = new FS::svc_domain ({ - 'domain' => $domain, - 'svcpart' => $domain_svcpart, - 'action' => 'N', - }); - my $error = $svc_domain->insert; - #warn $error if $error; - die $error if $error; - } - $svcnum{$domain}=$svc_domain->svcnum; -} -close RCPTHOSTS; - -#these two loops have enough similar parts they should probably be merged -if ( $mta{$mta} eq "qmail" ) { - - open(VD_FIX,">$spooldir/virtualdomains.FIX"); - print VD_FIX "#!/usr/bin/perl\n"; - - open(VIRTUALDOMAINS,"<$spooldir/virtualdomains.import") - or die "Can't open $spooldir/virtualdomains.import: $!"; - while (<VIRTUALDOMAINS>) { - next if /^#/; - /^\.?([\w\-\.]+):(\w+)(\-([\w\-\.]+))?$/ - #or do { warn "Strange virtualdomains line: $_"; next; }; - or die "Strange virtualdomains line: $_"; - my($domain,$username,$dash_ext,$extension)=($1,$2,$3,$4); - $dash_ext ||= ''; - $extension ||= ''; - my($svc_acct)=qsearchs('svc_acct',{'username'=>$username}); - unless ( $svc_acct ) { - #warn "Unknown user $username in virtualdomains; skipping\n"; - #die "Unknown user $username in virtualdomains; skipping\n"; - next; - } - if ( $domain ne $extension ) { - #warn "virtualdomains line $domain:$username$dash_ext changed to $domain:$username-$domain\n"; - my($dir)=$svc_acct->dir; - my($qdomain)=$domain; - $qdomain =~ s/\./:/g; #see manpage for 'dot-qmail': EXTENSION ADDRESSES - #example to move .qmail files for virtual domains to their new location - #dry run - #issh("root\@$shellmachine",'perl -e \'foreach $a (<'. $dir. '/.qmail'. $dash_ext. '-*>) { $old=$a; $a =~ s/\\.qmail'. $dash_ext. '\\-/\\.qmail\\-'. $qdomain. '\\-/; print " $old -> $a\n"; }\''); - #the real thing - #issh("root\@$shellmachine",'perl -e \'foreach $a (<'. $dir. '/.qmail'. $dash_ext. '-*>) { $old=$a; $a =~ s/\\.qmail'. $dash_ext. '\\-/\\.qmail\\-'. $qdomain. '\\-/; rename $old, $a; }\''); - print VD_FIX <<END; -foreach \$file (<$dir/.qmail$dash_ext-*>) { - \$old = \$file; - \$file =~ s/\.qmail$dash_ext\-/\.qmail\-$qdomain\-/; - rename \$old, \$file; -} -END - } - - unless ( exists $svcnum{$domain} ) { - my($svc_domain) = new FS::svc_domain ({ - 'domain' => $domain, - 'svcpart' => $domain_svcpart, - 'action' => 'N', - }); - my $error = $svc_domain->insert; - #warn $error if $error; - die $error if $error; - $svcnum{$domain}=$svc_domain->svcnum; - } - - my($svc_acct_sm)=new FS::svc_acct_sm ({ - 'domsvc' => $svcnum{$domain}, - 'domuid' => $svc_acct->uid, - 'domuser' => '*', - 'svcpart' => $mailalias_svcpart, - }); - my($error)=''; - $error=$svc_acct_sm->insert; - #warn $error if $error; - die $error, ", domain $domain" if $error; - } - close VIRTUALDOMAINS; - close VD_FIX; - -} elsif ( $mta{$mta} eq "sendmail" ) { - - open(VIRTUSERTABLE,"<$spooldir/virtusertable.import") - or die "Can't open $spooldir/virtusertable.import: $!"; - while (<VIRTUSERTABLE>) { - next if /^#/; #comments? - 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); - my($svc_acct)=qsearchs('svc_acct',{'username'=>$username}); - unless ( $svc_acct ) { - #warn "Unknown user $username in virtusertable"; - die "Unknown user $username in virtusertable"; - next; - } - my($svc_acct_sm)=new FS::svc_acct_sm ({ - 'domsvc' => $svcnum{$domain}, - 'domuid' => $svc_acct->uid, - 'domuser' => $domuser || '*', - 'svcpart' => $mailalias_svcpart, - }); - my($error)=''; - $error=$svc_acct_sm->insert; - #warn $error if $error; - die $error if $error; - } - close VIRTUSERTABLE; - -} else { - die "Unknown MTA!\n"; -} - -#open(RECIPIENTMAP,"<$spooldir/recipientmap.import"); -#close RECIPIENTMAP; - -print "\n\n", <<END if $mta{$mta} eq "qmail"; -Don\'t forget to run $spooldir/virtualdomains.FIX before using -$spooldir/virtualdomains ! -END - -# - -sub usage { - die "Usage:\n\n svc_acct_sm.import user\n"; -} - |