From 0a15826f1acf5a8258ac183518d55ca6e961b162 Mon Sep 17 00:00:00 2001 From: ivan Date: Fri, 13 Feb 2004 08:02:53 +0000 Subject: [PATCH] initial import --- bin/sendmail.import | 161 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 161 insertions(+) create mode 100644 bin/sendmail.import diff --git a/bin/sendmail.import b/bin/sendmail.import new file mode 100644 index 000000000..03b54e6f9 --- /dev/null +++ b/bin/sendmail.import @@ -0,0 +1,161 @@ +#!/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 $domain_svcpart); +$svcpart = 2; +$domain_svcpart = 1; + +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 + + #!! handle catchalls!!! + + unless ( /^([\w\@\.]+):\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 or create svc_acct record + + my @svc_acct = grep { $_->cust_svc->svcpart == $svcpart } + qsearch('svc_acct', { + 'username' => $username, + 'domain' => $domain, + }); + + if ( scalar(@svc_acct) > 1 ) { + die "multiple sources found for $username\@$domain !\n"; + } + + my $svc_acct; + if ( @svc_acct ) { + $svc_acct = $svc_acct[0]; + } else { + + my $svc_domain = qsearchs('svc_domain', { 'domain' => $domain } ); + $svc_domain ||= new FS::svc_domain ({ + 'svcpart' => $domain_svcpart, + 'domain' => $domain, + }); + unless ( $svc_domain->svcnum ) { + my $error = $svc_domain->insert; + if ( $error ) { + die "can't insert domain: $domain\n"; + } + } + + $svc_acct = new FS::svc_acct ({ + svcpart => $svcpart, + username => $username, + domsvc => $svc_domain->svcnum, + }); + my $error = $svc_acct->insert; + if ( $error ) { + die "can't insert account: $username\@$domain\n"; + } + + } + + #!!handle multiple destinations! + + my $svc_forward = new FS::svc_forward ({ + srcsvc => $svc_acct->srcsvc, + dstsvc => + dst => + }); + my $error = $svc_forward->insert; + if ( $error ) { + die "$rawusername: $rawdest: $error\n"; + } + +} + +## + +sub usage { + die "Usage:\n\n sendmail.import user\n"; +} + + + + + -- 2.11.0