spfd, możliwość określenia ip na którym ma słuchać oraz detach

romke romke at estrefa.pl
Thu Jun 9 15:08:48 CEST 2005


Witam, właśnie siadłem do spf i od razu w spfd zabrakło mi funkcjonalności.

1. Mail-SPF-Query-spfd-host.patch
dodaje opcję -host=ip powodującą, iż spfd będzie słuchał
na podanym IP zamiast 127.0.0.1

2. Mail-SPF-Query-spfd-detach.patch
spfd powinien wykonać detach od konsoli, bez tego wywołanie init.d/spfd
  daemon spfd ...
powoduje pozostawienie "initlog" i 2 "sh spfd start" czekających na
zakończenie procesu spfd.
Dodatkowa opcja -nodetach nie odłącza konsoli.

Do 2 powyższych diff do speca przesyłam.

3. spfd.init.patch to propozycja:
Dotychczasowe spfd.init nie pozwala zmienić metody z path na port
za pomocą /etc/sysconfig/spfd. Trzeba zmieniać /etc/init.d/spfd
(co jak wiadomo jest niepożądane).
Nowe spfd.init domyślnie używa tych samych opcji, w sysconfig/spfd
można dodać dodatkowe opcje przez OPTIONS="$OPTIONS cośtam" a równie
łatwo można to zastąpić OPTIONS="-port=1111"

pozdrawiam
-- 
romke Roman Barczyński  ~~~~  tel. +48 12 632 7365  ~~~~  www.romke.info
____________________________________________ JID/email: romke at estrefa.pl
-------------- next part --------------
diff -ruN Mail-SPF-Query-1.997/spfd Mail-SPF-Query-1.997.detach/spfd
--- Mail-SPF-Query-1.997/spfd	2005-06-09 14:38:37.000000000 +0200
+++ Mail-SPF-Query-1.997.detach/spfd	2005-06-09 14:33:57.000000000 +0200
@@ -44,6 +44,9 @@
 #    -setgroup=(gid|groupname)
 #        Drop privileges to gid or groupname after opening the socket
 #
+#    -nodetach
+#        Do not detach from calling console 
+#
 
 # example usage
 #    
@@ -68,7 +71,7 @@
 use POSIX qw(setsid);
 
 use strict;
-use vars qw($port $host $path $pathuser $pathgroup $pathmode $setuser $setgroup);
+use vars qw($port $host $path $pathuser $pathgroup $pathmode $setuser $setgroup $nodetach);
 
 # FIXME
 sub usage () {
@@ -144,6 +147,15 @@
 
 DEBUG and print "$$: server is $server\n";
 
+unless($nodetach) {
+  print "Detaching...\n";
+  fork() and exit();
+  setsid();
+  close(STDIN);
+  close(STDOUT);
+  close(STDERR);
+}
+
 if ($setgroup) {
   if ($setgroup =~ /\D/) {
     $setgroup = getgrnam($setgroup) || die "Group: $setgroup not found\n";
-------------- next part --------------
diff -ruN Mail-SPF-Query-1.997.orig/spfd Mail-SPF-Query-1.997/spfd
--- Mail-SPF-Query-1.997.orig/spfd	2004-01-14 04:40:26.000000000 +0100
+++ Mail-SPF-Query-1.997/spfd	2005-06-09 14:38:37.000000000 +0200
@@ -17,12 +17,15 @@
 #    spfd [OPTION]...
 #
 # DEFAULT
-#    spfd -port=5970
+#    spfd -port=5970 -host 127.0.0.1
 #
 # OPTIONS
 #    -port=PORTNUM
 #        Listen with a tcp socket on port PORTNUM (mutually exlusive with -path)
 #
+#    -host=LOCALADDR
+#        Listen on LOCALADDR IP (mutually exlusive with -path)
+#
 #    -path=FILESPEC
 #        Listen with a unix socket at FILESPEC (mutually exlusive with -port)
 #
@@ -62,19 +65,25 @@
 
 use Mail::SPF::Query;
 use Socket;
+use POSIX qw(setsid);
 
 use strict;
-use vars qw($port $path $pathuser $pathgroup $pathmode $setuser $setgroup);
+use vars qw($port $host $path $pathuser $pathgroup $pathmode $setuser $setgroup);
 
 # FIXME
 sub usage () {
-  print "usage: spfd ( -port=5970 | -path=/var/spfd ) [-setuser=(uid|username)] [-setgroup=(gid|groupname)]\n";
+  print "usage: spfd ( -port=5970 [-host=ip] | -path=/var/spfd ) [-setuser=(uid|username)] [-setgroup=(gid|groupname)]\n";
   print "usage:      [ -pathuser=(uid|username)] [ -pathgroup=(gid|groupname)] [-pathmode=mode]\n";
-  print "usage: spfd assuming -port=5970\n";
+  print "usage: spfd assuming -port=5970 -host 127.0.0.1\n";
 }
 
 sub DEBUG () { $ENV{DEBUG} }
 
+if (not $host and not $path) {
+  usage;
+  $host='127.0.0.1';
+}
+
 if (not $port and not $path) {
   usage;
   $port=5970;
@@ -93,12 +102,12 @@
 if ($port) {
   $sock_type = "inet";
   @args = (Listen    => 1,
-	   LocalAddr => "127.0.0.1",
+	   LocalAddr => $host,
 	   LocalPort => $port,
 	   ReuseAddr => 1
 	   );
-  print "$$ will listen on $port\n";
-  $0 = "spfd listening on $port";
+  print "$$ will listen on $host:$port\n";
+  $0 = "spfd listening on $host:$port";
 } elsif ($path) {
   $sock_type = "unix";
   unlink $path if -S $path;
-------------- next part --------------
--- perl-Mail-SPF-Query.spec~	2004-11-30 23:00:05.000000000 +0100
+++ perl-Mail-SPF-Query.spec	2005-06-09 14:43:54.000000000 +0200
@@ -17,6 +17,8 @@
 Source0:	http://spf.pobox.com/%{pdir}-%{pnam}-%{version}.tar.gz
 # Source0-md5:	9e110d00520e0fe174c25c0734a8baf6
 Source1:	spfd.init
+Patch0:		Mail-SPF-Query-spfd-host.patch
+Patch1:		Mail-SPF-Query-spfd-detach.patch
 URL:		http://spf.pobox.com/
 %if %{with tests}
 BuildRequires:	perl-Net-CIDR-Lite >= 0.15
@@ -59,6 +61,8 @@
 
 %prep
 %setup -q -n %{pdir}-%{pnam}-%{version}
+%patch0 -p1
+%patch1 -p1
 
 %build
 %{__perl} Makefile.PL \
-------------- next part --------------
--- spfd.init	2005-06-09 14:49:25.000000000 +0200
+++ /etc/init.d/spfd	2005-06-09 13:14:24.176726888 +0200
@@ -17,7 +17,7 @@
 SPFD_USER="nobody"
 SPFD_GROUP="nobody"
 SPFD_SOCKET="/var/run/spfd.socket"
-OPTIONS=''
+OPTIONS="-pathuser=\"$SPFD_USER\" -pathgroup=\"$SPFD_GROUP\" -path=\"$SPFD_SOCKET\" -pathmode=666"
 
 # Get service config
 [ -f /etc/sysconfig/spfd ] && . /etc/sysconfig/spfd
@@ -40,7 +40,7 @@
 	# Check if the service is already running?
 	if [ ! -f /var/lock/subsys/spfd ]; then
 		msg_starting spf
-		daemon spfd $OPTIONS -pathuser="$SPFD_USER" -pathgroup="$SPFD_GROUP" -path="$SPFD_SOCKET" -pathmode=666 &
+		daemon spfd $OPTIONS &
 		RETVAL=$?
 		[ $RETVAL -eq 0 ] && touch /var/lock/subsys/spfd
 	else


More information about the pld-devel-pl mailing list