=item srcsvc - svcnum of the source of the forward (see L<FS::svc_acct>)
+=item src - literal source (username or full email address)
+
=item dstsvc - svcnum of the destination of the forward (see L<FS::svc_acct>)
-=item dst - foreign destination (email address) - forward not local to freeside
+=item dst - literal destination (username or full email address)
=back
#my $part_svc = $x;
my $error = $self->ut_numbern('svcnum')
- || $self->ut_number('srcsvc')
+ || $self->ut_numbern('srcsvc')
|| $self->ut_numbern('dstsvc')
;
return $error if $error;
- return "Unknown srcsvc" unless $self->srcsvc_acct;
+ return "Both srcsvc and src were defined; only one can be specified"
+ if $self->srcsvc && $self->src;
+
+ return "one of srcsvc or src is required"
+ unless $self->srcsvc || $self->src;
+
+ return "Unknown srcsvc: ". $self->srcsvc
+ unless ! $self->srcsvc || $self->srcsvc_acct;
return "Both dstsvc and dst were defined; only one can be specified"
if $self->dstsvc && $self->dst;
return "one of dstsvc or dst is required"
unless $self->dstsvc || $self->dst;
- #return "Unknown dstsvc: $dstsvc" unless $self->dstsvc_acct || ! $self->dstsvc;
- return "Unknown dstsvc"
- unless qsearchs('svc_acct', { 'svcnum' => $self->dstsvc } )
- || ! $self->dstsvc;
+ return "Unknown dstsvc: ". $self->dstsvc
+ unless ! $self->dstsvc || $self->dstsvc_acct;
+ #return "Unknown dstsvc"
+ # unless qsearchs('svc_acct', { 'svcnum' => $self->dstsvc } )
+ # || ! $self->dstsvc;
+ if ( $self->src ) {
+ $self->src =~ /^([\w\.\-\&]*)(\@([\w\-]+\.)+\w+)?$/
+ or return "Illegal src: ". $self->dst;
+ $self->src("$1$2");
+ } else {
+ $self->src('');
+ }
if ( $self->dst ) {
- $self->dst =~ /^([\w\.\-]+)\@(([\w\-]+\.)+\w+)$/
+ $self->dst =~ /^([\w\.\-\&]*)(\@([\w\-]+\.)+\w+)?$/
or return "Illegal dst: ". $self->dst;
- $self->dst("$1\@$2");
+ $self->dst("$1$2");
} else {
$self->dst('');
}
=item srcsvc_acct
-Returns the FS::svc_acct object referenced by the srcsvc column.
+Returns the FS::svc_acct object referenced by the srcsvc column, or false for
+literally specified forwards.
=cut
=item dstsvc_acct
Returns the FS::svc_acct object referenced by the srcsvc column, or false for
-forwards not local to freeside.
+literally specified forwards.
=cut
'columns' => [
'svcnum', 'int', '', '',
'srcsvc', 'int', '', '',
+ 'src', 'varchar', 'NULL', 255,
'dstsvc', 'int', '', '',
- 'dst', 'varchar', 'NULL', $char_d,
+ 'dst', 'varchar', 'NULL', 255,
],
'primary_key' => 'svcnum',
'unique' => [],
<ul>
<li>svcnum - <a href="#cust_svc">primary key</a>
<li>srcsvc - <a href="#svc_acct">svcnum of the source of this forward</a>
+ <li>src - literal source (username or full email address)
<li>dstsvc - <a href="#svc_acct">svcnum of the destination of this forward</a>
- <li>dst - foreign destination (email address) - forward not local to freeside
+ <li>dst - literal destination (username or full email address)
</ul>
<li><a name="domain_record" href="man/FS/domain_record.html">domain_record</a> - Domain zone detail
<ul>