#!/usr/bin/perl -w use strict; 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::domain_record; use FS::svc_acct; ##use FS::part_svc; use FS::svc_forward; use FS::svc_domain; my $user = shift or die &usage; adminsuidsetup $user; #$FS::svc_Common::noexport_hack = 1; #$FS::domain_record::noserial_hack = 1; use vars qw($defaultdomain); $defaultdomain = 'surferz.net'; use vars qw($svcpart $forward_svcpart); $svcpart = 2; $forward_svcpart = 4; use vars qw($spooldir); $spooldir = "/usr/local/etc/freeside/export.". datasrc. "/sendmail"; mkdir $spooldir unless -d $spooldir; print "\n\n", <) { next if /^\s*#/ || /^\s*$/; #skip comments & blank lines unless ( /^([\w\@\.\-]+)[:\s]\s*(.*\S)\s*$/ ) { warn "Unparsable line: $_"; next; } my($rawusername, $rawdest) = ($1, $2); my($username, $domain); if ( $rawusername =~ /^([\w\-\.\&]*)\@([\w\.\-]+)$/ ) { $username = $1; $domain = $2; } elsif ( $rawusername =~ /\@/ ) { die "Unparsable username: $rawusername\n"; } else { $username = $rawusername; $domain = $defaultdomain; } #find svc_acct record or set $src my($srcsvc, $src) = &svcnum_or_literal($username, $domain); foreach my $dest ( split(/,/, $rawdest) ) { my($dusername, $ddomain); if ( $dest =~ /^([\w\-\.\&]+)\@([\w\.\-]+)$/ ) { $dusername = $1; $ddomain = $2; } elsif ( $dest =~ /\@/ ) { die "Unparsable username: $dest\n"; } else { $dusername = $dest; $ddomain = $defaultdomain; } my($dstsvc, $dst) = &svcnum_or_literal($dusername, $ddomain); my $svc_forward = new FS::svc_forward ({ svcpart => $forward_svcpart, srcsvc => $srcsvc, src => $src, dstsvc => $dstsvc, dst => $dst, }); my $error = $svc_forward->insert; #my $error = $svc_forward->check; if ( $error ) { die "$rawusername: $rawdest: $error\n"; } } } #next entry } #next file ## sub svcnum_or_literal { my($username, $domain) = @_; my $svc_domain = qsearchs('svc_domain', { 'domain' => $domain } ); my $domsvc = $svc_domain ? $svc_domain->svcnum : ''; my @svc_acct = grep { $_->cust_svc->svcpart == $svcpart } qsearch('svc_acct', { 'username' => $username, 'domsvc' => $domsvc, }); if ( scalar(@svc_acct) > 1 ) { die "multiple sources found for $username\@$domain !\n"; } my( $svcnum, $literal ) = ('', ''); if ( @svc_acct ) { my $svc_acct = $svc_acct[0]; $svcnum = $svc_acct->svcnum; } else { $literal = "$username\@$domain"; } return( $svcnum, $literal ); } sub usage { die "Usage:\n\n sendmail.import user\n"; }