#!/usr/local/bin/perl # # Sendmail "program" map script to revert SRS0 or SRS1 address # back to regular recipient. Called from macro ParseLocal. # # Code by Mark Kramer # # Version 0.30 # # Last revision: March 24, 2004 # # Licensed under GPL # # For detailed installation notes, read: # # http://asarian-host.net/srs/sendmailsrs.htm # # See also: http://www.anarres.org/projects/srs/ # http://spf.pobox.com/ # # This version requires at least Sendmail 8.12.10 + Mail::SRS 0.30 use Mail::SRS; use strict; # No funny business in our output, please close (STDERR); my $old_address = $ARGV[0]; my $secret = 'whateverfloatsyourboat'; my $use_address; my $srs = new Mail::SRS (Secret => $secret, HashLength => 8, AlwaysRewrite => 1); # Munge ParseLocal recipient in the same manner as required # in EnvFromSMTP. ($use_address = $old_address) =~ s/[<>]//g; $use_address =~ s/\.$//g; # Just try and reverse the address. If we succeed, return this # new address; else, return the old address (quoted if it was # a piped alias). # # We do an exhaustive while loop, so that SRS1 address may # become SRS0, which, in turn, may become reverted to # a local recipient. # # Mail:SRS, as of 0.30, is now case-insensitive. Added the # /i switch to accomodate for the change. if ($use_address =~ /^SRS[01][-+=]/i) { $use_address = $_ while (eval {$_ = $srs -> reverse ($use_address)}); $use_address .= '.>'; $use_address =~ s/\@/<@/; print "$use_address\n"; } elsif ($use_address =~ /^\|/) { print "\"$old_address\"\n"; } else { print "$old_address\n"; } exit 0;