summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorivan <ivan>2004-02-13 11:47:29 +0000
committerivan <ivan>2004-02-13 11:47:29 +0000
commitda5339ccbdc3a42e536124524ce6c484c320ffc9 (patch)
treecdccdb523252493214261bfc51f7e11a3869ac4d
parentf6dc0290b99dd949c42e2a92c2cc01353731db04 (diff)
it lives!
-rw-r--r--bin/sendmail.import155
1 files changed, 85 insertions, 70 deletions
diff --git a/bin/sendmail.import b/bin/sendmail.import
index 03b54e6..8a9de9f 100644
--- a/bin/sendmail.import
+++ b/bin/sendmail.import
@@ -4,7 +4,7 @@ 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::Record qw(qsearch qsearchs);
##use FS::svc_acct_sm;
#use FS::svc_domain;
#use FS::domain_record;
@@ -22,9 +22,9 @@ adminsuidsetup $user;
use vars qw($defaultdomain);
$defaultdomain = 'surferz.net';
-use vars qw($svcpart $domain_svcpart);
+use vars qw($svcpart $forward_svcpart);
$svcpart = 2;
-$domain_svcpart = 1;
+$forward_svcpart = 4;
use vars qw($spooldir);
$spooldir = "/usr/local/etc/freeside/export.". datasrc. "/sendmail";
@@ -37,11 +37,12 @@ END
my($aliases)=&getvalue(":");
use vars qw($aliases_machine $aliases_prefix);
-$alises_machine = (split(/:/, $aliases))[0];
+$aliases_machine = (split(/:/, $aliases))[0];
$aliases_prefix = "$spooldir/$aliases_machine";
mkdir $aliases_prefix unless -d $aliases_prefix;
-iscp("root\@$aliases","$aliases_prefix/aliases.import");
+#iscp("root\@$aliases","$aliases_prefix/aliases.import");
+iscp("ivan\@$aliases","$aliases_prefix/aliases.import");
print "\n\n", <<END;
Enter the location and name of your Sendmail virtusertable directory, for example
@@ -51,11 +52,13 @@ my($virtusertable)=&getvalue(":");
use vars qw($virtusertable_machine $virtusertable_prefix);
$virtusertable_machine = (split(/:/, $virtusertable))[0];
-$prefix = "$spooldir/$aliases_machine";
-mkdir $prefix unless -d $prefix;
-mkdir "$prefix/virtusertable.import" unless -d "$prefix/virtusertable.import";
+$virtusertable_prefix = "$spooldir/$virtusertable_machine";
+mkdir $virtusertable_prefix unless -d $virtusertable_prefix;
+mkdir "$virtusertable_prefix/virtusertable.import"
+ unless -d "$virtusertable_prefix/virtusertable.import";
-iscp("root\@$virtusertable/*","$aliases_prefix/virtusertable.import/");
+#iscp("root\@$virtusertable/*","$aliases_prefix/virtusertable.import/");
+iscp("ivan\@$virtusertable/*","$aliases_prefix/virtusertable.import/");
sub getvalue {
my $prompt = shift;
@@ -69,88 +72,100 @@ print "\n\n";
##
-#!! handle all files
+foreach my $file (
+ "$aliases_prefix/aliases.import",
+ glob("$aliases_prefix/virtusertable.import/*"),
+) {
+
+ warn "importing $file\n";
+
+ open(FILE,"<$file") or die $!;
+ while (<FILE>) {
+ 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";
+ }
+ }
-open(ALIASES,"<$aliases_prefix/aliases.import") or die $!;
-while (<ALIASES>) {
- next if /^\s*#/ || /^\s*$/; #skip comments & blank lines
- #!! handle catchalls!!!
+ } #next entry
- 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;
- }
+} #next file
+
+##
+
+sub svcnum_or_literal {
+ my($username, $domain) = @_;
- #find or create svc_acct record
+ 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,
- 'domain' => $domain,
+ 'domsvc' => $domsvc,
});
if ( scalar(@svc_acct) > 1 ) {
die "multiple sources found for $username\@$domain !\n";
}
- my $svc_acct;
+ my( $svcnum, $literal ) = ('', '');
if ( @svc_acct ) {
- $svc_acct = $svc_acct[0];
+ my $svc_acct = $svc_acct[0];
+ $svcnum = $svc_acct->svcnum;
} 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";
- }
-
+ $literal = "$username\@$domain";
}
- #!!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";
- }
+ return( $svcnum, $literal );
}
-##
-
sub usage {
die "Usage:\n\n sendmail.import user\n";
}