Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
Net::Server::Mail::ESMUserXContributed PeNet::Server::Mail::ESMTP::XFORWARD(3)

NAME
       Net::Server::Mail::ESMTP::XFORWARD - A module to	add support to the
       XFORWARD	command	in Net::Server::Mail::ESMTP

SYNOPSIS
	   use Net::Server::Mail::ESMTP;

	   my @local_domains = qw(example.com example.org);
	   my $server =	IO::Socket::INET->new( Listen => 1, LocalPort => 25 );

	   my $conn;
	   while($conn = $server->accept)
	   {
	       my $esmtp = Net::Server::Mail::ESMTP->new( socket => $conn );

	       # activate XFORWARD extension if	remote client is localhost
	       $esmtp->register('Net::Server::Mail::ESMTP::XFORWARD')
		  if($server->get_property('peeraddr') =~ /^127/);
	       # adding	some handlers
	       $esmtp->set_callback(RCPT => \&validate_recipient);
	       # adding	XFORWARD handler
	       $esmtp->set_callback(XFORWARD =>	\&xforward);
	       $esmtp->process();
	       $conn->close();
	   }

	   sub xforward	{
	       my $self	= shift;
	       # Reject	non IPV4 addresses
	       return 0	unless(	$self->get_forwarded_address =~	/^\d+\.\d+\.\d+\.\d+$/ );
	       1;
	   }

	   sub validate_recipient
	   {
	       my($session, $recipient)	= @_;
	       my $domain;
	       if($recipient =~	/\@(.*)>\s*$/)
	       {
		   $domain = $1;
	       }

	       if(not defined $domain)
	       {
		   return(0, 513, 'Syntax error.');
	       }
	       elsif(not(grep $domain eq $_, @local_domains) &&	$session->get_forwarded_addr !=	"10.1.1.1")
	       {
		   return(0, 554, "$recipient: Recipient address rejected: Relay access	denied");
	       }

	       return(1);
	   }

DESCRIPTION
       When using a Net::Server::Mail::ESMTP script inside a MTA and not in
       front of	Internet, values like client IP	address	are not	accessible to
       the script and when the script returns mail to another instance of
       smtpd daemon, it	logs "localhost" as incoming address. To solve this
       problem,	some administrators use	the XFORWARD command. This module
       gives the ability to read and store XFORWARD information.

   METHODS
       These methods return the	values set by the upstream MTA without
       modifying them so they can be set to undef or "[UNVAILABLE]". See
       Postfix documentation for more.

       o   get_forwarded_values	: returns a hash reference containing all
	   values forwarded (keys in lower case).

       o   get_forwarded_name :	returns	the up-stream hostname.	The hostname
	   may be a non-DNS hostname.

       o   get_forwarded_address : returns the up-stream network address.
	   Address information is not enclosed with [].	The address may	be a
	   non-IP address.

       o   get_forwarded_source	: returns LOCAL	or REMOTE.

       o   get_forwarded_helo :	returns	the hostname that the up-stream	host
	   announced itself. It	may be a non-DNS hostname.

       o   get_forwarded_proto : returns the mail protocol for receiving mail
	   from	the up-stream host. This may be	an SMTP	or non-SMTP protocol
	   name	of up to 64 characters.

SEE ALSO
       Net::Server::Mail::ESMTP, <http://www.postfix.org/XFORWARD_README.html>

AUTHOR
       Xavier Guimard, <x.guimard@free.fr>

COPYRIGHT AND LICENSE
       Copyright (C) 2006 by Xavier Guimard

       This library is free software; you can redistribute it and/or modify it
       under the same terms as Perl itself, either Perl	version	5.6.4 or, at
       your option, any	later version of Perl 5	you may	have available.

perl v5.32.0			  2018-09Net::Server::Mail::ESMTP::XFORWARD(3)

NAME | SYNOPSIS | DESCRIPTION | SEE ALSO | AUTHOR | COPYRIGHT AND LICENSE

Want to link to this manual page? Use this URL:
<https://www.freebsd.org/cgi/man.cgi?query=Net::Server::Mail::ESMTP::XFORWARD&sektion=3&manpath=FreeBSD+12.2-RELEASE+and+Ports>

home | help