X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fsvc_domain.pm;h=b06d030137dd93a7bee1cd3fc299dd2e20746d35;hb=0da4c69a66e13410b0eff18966e13170d1306f22;hp=d0f0e11a80f872cf328d03e9ea2ef86f9f4617bf;hpb=4609bb519b7fdf0eace6523fee49752cdb82a1ef;p=freeside.git diff --git a/FS/FS/svc_domain.pm b/FS/FS/svc_domain.pm index d0f0e11a8..b06d03013 100644 --- a/FS/FS/svc_domain.pm +++ b/FS/FS/svc_domain.pm @@ -2,11 +2,11 @@ package FS::svc_domain; use strict; use vars qw( @ISA $whois_hack $conf $smtpmachine - @mxmachines @nsmachines $soadefaultttl $soaemail $soaexpire $soamachine - $soarefresh $soaretry $qshellmachine $nossh_hack + @defaultrecords $soadefaultttl $soaemail $soaexpire $soamachine + $soarefresh $soaretry $qshellmachine $nossh_hack ); use Carp; -use Mail::Internet; +use Mail::Internet 1.44; use Mail::Header; use Date::Format; use Net::Whois 1.0; @@ -29,8 +29,7 @@ $FS::UID::callback{'FS::domain'} = sub { $smtpmachine = $conf->config('smtpmachine'); - @mxmachines = $conf->config('mxmachines'); - @nsmachines = $conf->config('nsmachines'); + @defaultrecords = $conf->config('defaultrecords'); $soadefaultttl = $conf->config('soadefaultttl'); $soaemail = $conf->config('soaemail'); $soaexpire = $conf->config('soaexpire'); @@ -117,11 +116,9 @@ in the same package, it is automatically used. Otherwise an error is returned. If any I configuration file exists, an SOA record is added to the domain_record table (see ). -If any machines are defined in the I configuration file, NS -records are added to the domain_record table (see L). - -If any machines are defined in the I configuration file, MX -records are added to the domain_record table (see L). +If any records are defined in the I configuration file, +appropriate records are added to the domain_record table (see +L). If a machine is defined in the I configuration value, the I configuration file exists, and the I field points @@ -194,33 +191,19 @@ sub insert { return "couldn't insert SOA record for new domain: $error"; } - foreach my $nsmachine ( @nsmachines ) { - my $ns = new FS::domain_record { - 'svcnum' => $self->svcnum, - 'reczone' => '@', - 'recaf' => 'IN', - 'rectype' => 'NS', - 'recdata' => $nsmachine, - }; - my $error = $ns->insert; - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return "couldn't insert NS record for new domain: $error"; - } - } - - foreach my $mxmachine ( @mxmachines ) { - my $mx = new FS::domain_record { + foreach my $record ( @defaultrecords ) { + my($zone,$af,$type,$data) = split(/\s+/,$record,4); + my $domain_record = new FS::domain_record { 'svcnum' => $self->svcnum, - 'reczone' => '@', - 'recaf' => 'IN', - 'rectype' => 'MX', - 'recdata' => $mxmachine, + 'reczone' => $zone, + 'recaf' => $af, + 'rectype' => $type, + 'recdata' => $data, }; - my $error = $mx->insert; + my $error = $domain_record->insert; if ( $error ) { $dbh->rollback if $oldAutoCommit; - return "couldn't insert MX record for new domain: $error"; + return "couldn't insert record for new domain: $error"; } } @@ -241,7 +224,10 @@ sub insert { $svc_acct->dir, ); - my $queue = new FS::queue { 'job' => 'FS::svc_domain::ssh' }; + my $queue = new FS::queue { + 'svcnum' => $self->svcnum, + 'job' => 'Net::SSH::ssh_cmd', + }; $error = $queue->insert("root\@$qshellmachine", "[ -e $dir/.qmail-$qdomain-default ] || { touch $dir/.qmail-$qdomain-default; chown $uid:$gid $dir/.qmail-$qdomain-default; }" ); } @@ -250,36 +236,6 @@ sub insert { ''; #no error } -=item ssh - -=cut - -#false laziness with FS::svc_acct::ssh -sub ssh { - my ( $host, @cmd_and_args ) = @_; - - use IO::File; - my $reader = IO::File->new(); - my $writer = IO::File->new(); - my $error = IO::File->new(); - - &Net::SSH::sshopen3( $host, $reader, $writer, $error, @cmd_and_args) or die $!; - - local $/ = undef; - my $output_stream = <$writer>; - my $error_stream = <$error>; - if ( length $error_stream ) { - #warn "[FS::svc_acct::ssh] STDERR $error_stream"; - die "[FS::svc_domain::ssh] STDERR $error_stream"; - } - if ( length $output_stream ) { - warn "[FS::svc_domain::ssh] STDOUT $output_stream"; - } - -# &Net::SSH::ssh(@args,">>/usr/local/etc/freeside/sshoutput 2>&1"); -} - - =item delete Deletes this domain from the database. If there is an error, returns the @@ -299,10 +255,34 @@ sub delete { if defined( $FS::Record::dbdef->table('svc_acct_sm') ) && qsearch('svc_acct_sm', { 'domsvc' => $self->svcnum } ); - return "Can't delete a domain with (domain_record) zone entries!" - if qsearch('domain_record', { 'svcnum' => $self->svcnum } ); + #return "Can't delete a domain with (domain_record) zone entries!" + # if qsearch('domain_record', { 'svcnum' => $self->svcnum } ); + + local $SIG{HUP} = 'IGNORE'; + local $SIG{INT} = 'IGNORE'; + local $SIG{QUIT} = 'IGNORE'; + local $SIG{TERM} = 'IGNORE'; + local $SIG{TSTP} = 'IGNORE'; + local $SIG{PIPE} = 'IGNORE'; + + my $oldAutoCommit = $FS::UID::AutoCommit; + local $FS::UID::AutoCommit = 0; + my $dbh = dbh; + + my $error = $self->SUPER::delete; + if ( $error ) { + $dbh->rollback if $oldAutoCommit; + return $error; + } - $self->SUPER::delete; + foreach my $domain_record ( reverse $self->domain_record ) { + my $error = $domain_record->delete; + if ( $error ) { + $dbh->rollback if $oldAutoCommit; + return $error; + } + } + $dbh->commit or die $dbh->errstr if $oldAutoCommit; } =item replace OLD_RECORD @@ -314,13 +294,12 @@ returns the error, otherwise returns false. sub replace { my ( $new, $old ) = ( shift, shift ); - my $error; return "Can't change domain - reorder." if $old->getfield('domain') ne $new->getfield('domain'); - $new->SUPER::replace($old); - + my $error = $new->SUPER::replace($old); + return $error if $error; } =item suspend @@ -413,6 +392,26 @@ sub check { } +=item domain_record + +=cut + +sub domain_record { + my $self = shift; + + my %order = ( + SOA => 1, + NS => 2, + MX => 3, + CNAME => 4, + A => 5, + ); + + sort { $order{$a->rectype} <=> $order{$b->rectype} } + qsearch('domain_record', { svcnum => $self->svcnum } ); + +} + =item whois Returns the Net::Whois::Domain object (see L) for this domain, or @@ -451,7 +450,7 @@ sub submit_internic { =head1 VERSION -$Id: svc_domain.pm,v 1.23 2002-02-09 18:09:30 ivan Exp $ +$Id: svc_domain.pm,v 1.31 2002-06-10 02:52:48 ivan Exp $ =head1 BUGS