4 use Term::Query qw(query);
6 use FS::UID qw(adminsuidsetup datasrc);
7 use FS::Record qw(qsearch); #qsearchs);
10 #use FS::domain_record;
16 my $user = shift or die &usage;
19 #$FS::svc_Common::noexport_hack = 1;
20 #$FS::domain_record::noserial_hack = 1;
22 use vars qw($defaultdomain);
23 $defaultdomain = 'surferz.net';
25 use vars qw($svcpart $domain_svcpart);
29 use vars qw($spooldir);
30 $spooldir = "/usr/local/etc/freeside/export.". datasrc. "/sendmail";
31 mkdir $spooldir unless -d $spooldir;
34 Enter the location and name of your Sendmail aliases file, for example
35 "mail.isp.com:/etc/mail/aliases"
37 my($aliases)=&getvalue(":");
39 use vars qw($aliases_machine $aliases_prefix);
40 $alises_machine = (split(/:/, $aliases))[0];
41 $aliases_prefix = "$spooldir/$aliases_machine";
42 mkdir $aliases_prefix unless -d $aliases_prefix;
44 iscp("root\@$aliases","$aliases_prefix/aliases.import");
47 Enter the location and name of your Sendmail virtusertable directory, for example
48 "mail.isp.com:/etc/mail/virtusertable"
50 my($virtusertable)=&getvalue(":");
52 use vars qw($virtusertable_machine $virtusertable_prefix);
53 $virtusertable_machine = (split(/:/, $virtusertable))[0];
54 $prefix = "$spooldir/$aliases_machine";
55 mkdir $prefix unless -d $prefix;
56 mkdir "$prefix/virtusertable.import" unless -d "$prefix/virtusertable.import";
58 iscp("root\@$virtusertable/*","$aliases_prefix/virtusertable.import/");
62 $^W=0; # Term::Query isn't -w-safe
63 my $return = query $prompt, '';
74 open(ALIASES,"<$aliases_prefix/aliases.import") or die $!;
76 next if /^\s*#/ || /^\s*$/; #skip comments & blank lines
78 #!! handle catchalls!!!
80 unless ( /^([\w\@\.]+):\s*()\s*$/ ) {
81 warn "Unparsable line: $_";
84 my($rawusername, $rawdest) = ($1, $2)
86 my($username, $domain);
87 if ( $rawusername =~ /^(\w+)\@([\w\.]+)$/ ) {
90 } elsif ( $rawusername =~ /\@/ ) {
91 die "Unparsable username: $rawusername\n";
93 $username = $rawusername;
94 $domain = $defaultdomain;
97 #find or create svc_acct record
99 my @svc_acct = grep { $_->cust_svc->svcpart == $svcpart }
100 qsearch('svc_acct', {
101 'username' => $username,
105 if ( scalar(@svc_acct) > 1 ) {
106 die "multiple sources found for $username\@$domain !\n";
111 $svc_acct = $svc_acct[0];
114 my $svc_domain = qsearchs('svc_domain', { 'domain' => $domain } );
115 $svc_domain ||= new FS::svc_domain ({
116 'svcpart' => $domain_svcpart,
119 unless ( $svc_domain->svcnum ) {
120 my $error = $svc_domain->insert;
122 die "can't insert domain: $domain\n";
126 $svc_acct = new FS::svc_acct ({
128 username => $username,
129 domsvc => $svc_domain->svcnum,
131 my $error = $svc_acct->insert;
133 die "can't insert account: $username\@$domain\n";
138 #!!handle multiple destinations!
140 my $svc_forward = new FS::svc_forward ({
141 srcsvc => $svc_acct->srcsvc,
145 my $error = $svc_forward->insert;
147 die "$rawusername: $rawdest: $error\n";
155 die "Usage:\n\n sendmail.import user\n";