3 # $Id: svc_domain.import,v 1.4 2002-04-20 11:57:35 ivan Exp $
6 use vars qw( %d_part_svc );
7 use Term::Query qw(query);
8 #use BIND::Conf_Parser;
11 #use Net::SCP qw(iscp);
13 use FS::UID qw(adminsuidsetup datasrc);
14 use FS::Record qw(qsearch); #qsearchs);
17 use FS::domain_record;
21 my $user = shift or die &usage;
24 use vars qw($spooldir);
25 $spooldir = "/usr/local/etc/freeside/export.". datasrc;
28 map { $_->svcpart, $_ } qsearch('part_svc',{'svcdb'=>'svc_domain'});
31 ( join "\n", map "$_: ".$d_part_svc{$_}->svc, sort keys %d_part_svc ),
33 use vars qw($domain_svcpart);
34 $^W=0; #Term::Query isn't -w-safe
36 query "Enter part number for domains: ", 'irk', [ keys %d_part_svc ];
40 Enter the location and name of your primary named.conf file, for example
41 "ns.isp.com:/var/named/named.conf"
43 my($named_conf)=&getvalue(":");
44 #iscp("root\@$named_conf","$spooldir/named.conf.import");
45 scp("root\@$named_conf","$spooldir/named.conf.import");
47 use vars qw($named_machine);
48 $named_machine = (split(/:/, $named_conf))[0];
52 $^W=0; # Term::Query isn't -w-safe
53 my $return = query $prompt, '';
62 $FS::svc_domain::whois_hack=1;
65 $p->parse_file("$spooldir/named.conf.import");
67 print "\nBIND import completed.\n";
72 die "Usage:\n\n svc_domain.import user\n";
79 use BIND::Conf_Parser;
80 use vars qw(@ISA $named_dir);
81 @ISA = qw(BIND::Conf_Parser);
84 my($self, $option, $argument) = @_;
85 return unless $option eq "directory";
86 $named_dir = $argument;
90 my($self, $name, $class, $type, $options) = @_;
91 return unless $class eq 'in';
93 my $domain = new FS::svc_domain( {
94 svcpart => $main::domain_svcpart,
98 my $error = $domain->insert;
101 if ( $type eq 'slave' ) {
104 #print Dumper($options);
107 foreach my $master ( @{ $options->{masters} } ) {
108 my $domain_record = new FS::domain_record( {
109 'svcnum' => $domain->svcnum,
112 'rectype' => '_mstr',
113 'recdata' => $master,
115 my $error = $domain_record->insert;
116 die $error if $error;
119 } elsif ( $type eq 'master' ) {
121 my $file = $options->{file};
124 my $basefile = basename($file);
125 my $sourcefile = $file;
126 $sourcefile = "$named_dir/$sourcefile" unless $file =~ /^\//;
127 use Net::SCP qw(iscp scp);
128 scp("root\@$main::named_machine:$sourcefile",
129 "$main::spooldir/$basefile.import");
132 my $zone = DNS::ZoneParse->new("$main::spooldir/$basefile.import");
134 my $dump = $zone->Dump;
137 #print "$name: ". Dumper($dump);
140 foreach my $rectype ( keys %$dump ) {
141 if ( $rectype =~ /^SOA$/i ) {
142 my $rec = $dump->{$rectype};
143 my $domain_record = new FS::domain_record( {
144 'svcnum' => $domain->svcnum,
145 'reczone' => $rec->{origin},
147 'rectype' => $rectype,
149 $rec->{primary}. ' '. $rec->{email}. ' ( '.
150 join(' ', map $rec->{$_},
151 qw( serial refresh retry expire minimumTTL ) ).
154 my $error = $domain_record->insert;
155 die $error if $error;
157 #die $dump->{$rectype};
158 foreach my $rec ( @{ $dump->{$rectype} } ) {
159 my $domain_record = new FS::domain_record( {
160 'svcnum' => $domain->svcnum,
161 'reczone' => $rec->{name},
162 'recaf' => $rec->{class},
163 'rectype' => $rectype,
164 'recdata' => ( $rectype =~ /^MX$/i
165 ? $rec->{priority}. ' '. $rec->{host}
168 my $error = $domain_record->insert;
169 die $error if $error;