summarylogtreecommitdiffstats
path: root/smtpprox-tmpname-and-xforward.patch
blob: 5d8451cd1b77aaf24f8040621f0536bd8c39902e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
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") {