> Attached is a diff against the 0.3x branch.
Oops; attached this time
--- qpsmtpd-0.3x/qpsmtpd-forkserver 2006-12-28 20:04:36.000000000 -0500
+++ qpsmtpd-forkserver 2006-12-28 21:24:58.000000000 -0500
@@ -12,7 +12,7 @@
use IO::Socket;
use IO::Select;
use Socket;
-use Getopt::Long;
+use Getopt::Long qw(:config no_ignore_case);
use POSIX qw(:sys_wait_h :errno_h :signal_h);
use Net::DNS::Header;
use strict;
@@ -28,10 +28,13 @@
my $MAXCONN = 15; # max simultaneous connections
my @PORT; # port number(s)
my @LOCALADDR; # ip address(es) to bind to
-my $USER = 'smtpd'; # user to suid to
my $MAXCONNIP = 5; # max simultaneous connections from one IP
my $PID_FILE = '';
my $DETACH; # daemonize on startup
+my $NORDNS;
+
+my $USER = (getpwuid $>)[0]; # user to suid to
+$USER = "smtpd" if $USER eq "root";
sub usage {
print <<"EOT";
@@ -46,6 +49,7 @@
-m, --max-from-ip M : limit connections from a single IP; default 5
--pid-file P : print main servers PID to file P
-d, --detach : detach from controlling terminal (daemonize)
+ -H, --no-rdns : don't perform reverse DNS lookups
EOT
exit 0;
}
@@ -58,6 +62,7 @@
'u|user=s' => \$USER,
'pid-file=s' => \$PID_FILE,
'd|detach' => \$DETACH,
+ 'H|no-rdns' => \$NORDNS,
) || &usage;
# detaint the commandline
@@ -175,6 +180,7 @@
$groups .= " $gid";
}
}
+endgrent;
$) = $groups;
POSIX::setgid($qgid) or
die "unable to change gid: $!\n";
@@ -279,7 +285,7 @@
Net::DNS::Header::nextid();
}
- close($server);
+ close $_ for $select->handles;
$SIG{$_} = 'DEFAULT' for keys %SIG;
$SIG{ALRM} = sub {
@@ -291,6 +297,13 @@
# my ($port, $iaddr) = sockaddr_in($hisaddr);
$ENV{TCPREMOTEIP} = $nto_iaddr;
+ if ($NORDNS) {
+ $ENV{TCPREMOTEHOST} = $ENV{TCPREMOTEIP} ? "[$ENV{TCPREMOTEIP}]" :
"[noip!]";
+ }
+ else {
+ my $zero = $0;
+ $0 = "$zero (gethostbyname $ENV{TCPREMOTEIP})";
+
if ($server->sockdomain == AF_INET) {
$ENV{TCPREMOTEHOST} = gethostbyaddr($iaddr, AF_INET) || "Unknown";
}
@@ -299,6 +312,9 @@
$ENV{TCPREMOTEHOST} = $canonname || "Unknown";
}
+ $0 = $zero;
+ }
+
# don't do this!
#$0 = "qpsmtpd-forkserver: $ENV{TCPREMOTEIP} / $ENV{TCPREMOTEHOST}";
@@ -307,6 +323,7 @@
# dup to STDIN/STDOUT
POSIX::dup2(fileno($client), 0);
POSIX::dup2(fileno($client), 1);
+ close $client;
$qpsmtpd->start_connection
(