summarylogtreecommitdiffstats
path: root/smtpprox-tmpname-and-xforward.patch
diff options
context:
space:
mode:
Diffstat (limited to 'smtpprox-tmpname-and-xforward.patch')
-rw-r--r--smtpprox-tmpname-and-xforward.patch44
1 files changed, 44 insertions, 0 deletions
diff --git a/smtpprox-tmpname-and-xforward.patch b/smtpprox-tmpname-and-xforward.patch
new file mode 100644
index 000000000000..5d8451cd1b77
--- /dev/null
+++ b/smtpprox-tmpname-and-xforward.patch
@@ -0,0 +1,44 @@
+diff -urN smtpprox-1.2/MSDW/SMTP/Server.pm smtpprox-1.2-fixed/MSDW/SMTP/Server.pm
+--- smtpprox-1.2/MSDW/SMTP/Server.pm 2003-03-09 13:52:24.000000000 -0500
++++ smtpprox-1.2-fixed/MSDW/SMTP/Server.pm 2007-01-18 13:27:44.000000000 -0500
+@@ -13,6 +13,7 @@
+ package MSDW::SMTP::Server;
+ use IO::Socket;
+ use IO::File;
++use File::Temp qw(mkstemp);
+
+ =head1 NAME
+
+@@ -183,13 +184,21 @@
+ return 0 unless defined($_ = $self->getline);
+ s/[\r\n]*$//;
+ $self->{state} = $_;
+- if (s/^helo\s+//i) {
++ if (s/^(helo|ehlo)\s+//i) {
+ s/\s*$//;s/\s+/ /g;
+ $self->{helo} = $_;
++ } elsif (s/^xforward\s*//i) {
++ my (@attr) = split(/\s+/, $_);
++ my ($attr);
++ foreach $attr (@attr) {
++ my ($name, $value) = ($attr =~ /^(.*?)=(.*)$/);
++ $self->{xforward}->{lc($name)} = $value;
++ }
+ } elsif (s/^rset\s*//i) {
+ delete $self->{to};
+ delete $self->{data};
+ delete $self->{recipients};
++ delete $self->{xforward};
+ } elsif (s/^mail\s+from:\s*//i) {
+ delete $self->{to};
+ delete $self->{data};
+@@ -208,7 +217,8 @@
+ $self->{data}->seek(0, 0);
+ $self->{data}->truncate(0);
+ } else {
+- $self->{data} = IO::File->new_tmpfile;
++ (undef, $self->{datafilename}) = mkstemp("/tmp/smtpproxXXXXXX");
++ $self->{data} = new IO::File $self->{datafilename}, "r+";
+ }
+ while (defined($_ = $self->getline)) {
+ if ($_ eq ".\r\n") {