Ok, I've put together my findings on porting SpamAssassin to Win32. I plan to post this as a HOWTO on an HTML web page at some point if it passes muster with you guys.
A few notes: - I'm not a perl expert - heck I barely know perl. So be gentle in your comments, please! - The sections which may be of most interest are the sections of problems with Win32/SpamAssassin: chiefly, the auto-whitelist feature doesn't work (long discussion below), and the razor-lookup always timesout. So I'm opening the floor. Here's the document as is: USING SPAMASSASSIN WITH WIN32 Draft 1, [EMAIL PROTECTED] LIMITATIONS - autowhitelist doesn't function (SEE AUTOWHITELIST DOESNT WORK) - Most people don't have visual c++ so they can't compile SPAMC, so spamassassin must be run in "serial mode". - razor is unreliable. - a few installation quirks These will all be discussed in more detail later First of all, use WinNT/2K/XP only. It IS possible to get it running on Win9x, but Perl acts unreliably on such platforms. PART I: Installing Perl 1. This is very easy. Go to http://www.activestate.com, and select the ActivePerl download. Choose the MSI installer version. 2. Double click the MSI file and run it. All of the default options are fine. Don't worry if the Perl installer seems to take a really long time. Wait at least 10 minutes before worrying. 3. Open a DOS box and type PERL -V to verify all is well. 4. In subsequent sections, it will be assumed that Perl was installed in C:\perl. Make appropriate changes if necessary. PART II: Installing NMAKE 1. We need NMAKE to build Perl modules 2. Obtain from ftp://ftp.microsoft.com/Softlib/MSLFILES/nmake15.exe 3. Extract the files, and place them in C:\perl\bin PART III: Installing the needed Modules, part I. We do this using the Perl Package Manager, rather than CPAN when possible, as it downloads the best versions for Win32. Basic method of operation: 1. open dos box. 2. Type PPM 3. At the PPM> prompt, type install <modulename> For SpamAssassin itself, we need only one module, Net::DNS, so we'd type install Net::DNS If Razor functionality is needed, also install these modules: Net::Ping [See notes on this in RAZOR section] Time::HiRes Digest::SHA1 We will also need to install Mail::Internet. Unfortunately this is not available via the PPM repository currently. See RAZOR section below for more. Part IV: Obtaining Spam Assassin Go to http://www.spamassassin.org, choose download, and get the ZIP file distribution. Use WinZIP or other ZIP extractor, and extract the ZipFile off the root. For SpamAssassin 2.11, for example, this will create Mail-SpamAssassin-2.11 off C:\ We'll refer to this directory as the SPAMSOURCE directory below. PART V: Pre-install Open a DOS box, go to the SPAMSOURCE directory and type PERL windows_install.pl PERL makefile.pl PART VI: Getting the NMAKE to work, Part I Here's where we start to see quirks, most of them easy to fix. We will go through each error message one by one until the NMAKE compiles. (The main reason to do this is to achieve better understanding what works and what doesn't, so if a new branch of SpamAssassin changes things...) 1. Open a dos box and go to the SPAMSOURCE directory. 2. Type NMAKE 3. It will fail, complaining that TOUCH cannot be found. It may also complain about spamd/spamc. REASON: TOUCH isn't a Windows command. Also genning the HTML docs from the POD file confuses the Windows command interpreter WORKAROUND THIS: Open MAKEFILE (SPAMSOURCE directory) in NotePad, and find pm_to_blib: spamassassin doc/.made Change it to pm_to_blib: spamassassin doc/.made which will skip this section. (See CLEANING UP THE QUIRKS). Save the file. 4. Try NMAKE again! 5. It will (most likely) fail again, complaining that CL is not recognized. REASON: One component of Spamassassin is spamc, the client piece of a neato way to really speed up SpamAssassin. But most of us don't own Visual C++, and so we don't have a C compiler handy. Unix people have life easy :) WORKAROUND: Well, if you really need spamc, you gotta get a C compiler. Otherwise, open MAKEFILE in Notepad again, and find $(CFCC) $(CFCCFLAGS) $(CFOPTIMIZE) spamd/spamc.c \ -o $@ $(CFLDFLAGS) $(CFLIBS) Comment these lines out by placing a # character at the BEGINNING of each line. Please re-read the last sentence - if # isn't the very first character the line will NOT be commented out properly. 6. Run NMAKE again. It should complete (the error about blib\script\spamc is fine, and occurs because we never compiled spamc) PART VII: Getting NMAKE to work, Part II Here we get NMAKE INSTALL to work properly. NMAKE TEST will never work, as there are too many whacked modules at this point. Oh well. 1. Open a DOS box and go to SPAMSOURCE directory. 2. Type NMAKE INSTALL 3. You will see a failure right after the mkdir -P command REASON: 3 issues come up now. The first is that mkdir -P has no analogue. We'll use MKDIR instead. Second some of the paths for the rule directories won't work as is. Finally, some of the installation routines will not work to copy configuration files, so we need to work around that too! WORKAROUND 1: Open MAKEFILE, and change all mkdir -P command to simply mkdir (eg mkdir -p $(DEF_RULES_DIR) to mkdir $(DEF_RULES_DIR) WORKAROUND 2: Also, find DEF_RULES_DIR = $(PREFIX)/share/spamassassin LOCAL_RULES_DIR = /etc/mail/spamassassin and change them to DEF_RULES_DIR = $(PREFIX)\share\spamassassin LOCAL_RULES_DIR = \etc\mail\spamassassin WORKAROUND 3: Finally, change these lines inst_cfs: $(LOCAL_RULES_DIR) $(DEF_RULES_DIR) $(DEF_RULES_DIR)/user_prefs.template $(LOCAL_RULES_DIR)/local.cf migrate_cfs for file in $(RULES) ; do \ $(CP) rules/$$file $(DEF_RULES_DIR)/$$file; \ done $(DEF_RULES_DIR)/user_prefs.template: rules/user_prefs.template $(CP) rules/user_prefs.template $(DEF_RULES_DIR)/user_prefs.template $(LOCAL_RULES_DIR)/local.cf: rules/local.cf [ -f $(LOCAL_RULES_DIR)/local.cf ] || $(CP) rules/local.cf $(LOCAL_RULES_DIR)/local.cf migrate_cfs: [ ! -f /etc/spamassassin.cf ] || $(MV) /etc/spamassassin.cf /etc/mail/spamassassin/migrated.cf [ ! -f /etc/mail/spamassassin.cf ] || $(MV) /etc/mail/spamassassin.cf /etc/mail/spamassassin/migrated.cf to inst_cfs: $(LOCAL_RULES_DIR) $(DEF_RULES_DIR) $(DEF_RULES_DIR)/user_prefs.template #$(LOCAL_RULES_DIR)/local.cf migrate_cfs # for file in $(RULES) ; do \ # $(CP) rules/$$file $(DEF_RULES_DIR)/$$file; \ # done $(DEF_RULES_DIR)/user_prefs.template: rules/user_prefs.template $(CP) rules/user_prefs.template $(DEF_RULES_DIR)/user_prefs.template $(LOCAL_RULES_DIR)/local.cf: rules/local.cf [ -f $(LOCAL_RULES_DIR)/local.cf ] || $(CP) rules/local.cf $(LOCAL_RULES_DIR)/local.cf migrate_cfs: # [ ! -f /etc/spamassassin.cf ] || $(MV) /etc/spamassassin.cf /etc/mail/spamassassin/migrated.cf # [ ! -f /etc/mail/spamassassin.cf ] || $(MV) /etc/mail/spamassassin.cf /etc/mail/spamassassin/migrated.cf (We are basically commenting out sections that would fail to copy files correctly. Don't worry - it's groovy) 4. Run NMAKE INSTALL - all should be well now. PART VIII: CLEANING UP THE QUIRKS 1. First, manually copy the files in rules directory to \etc\mail\spamassassin, which should now exist. This copies the default rules nicely. This is NEEDED for SpamAssassin to work. 2. Next, find \perl\bin\spamasasssin.bat, and add at the beginning SET RES_NAMESERVERS=ipaddress , where ipaddress is the ipaddress of your DNS server. If you have more than one, add additional ones, separating with a space character. This is needed for all RBL lookups - the Net::DNS module is not currently capable of checking the Windows registry, so we have to "help it" 3a. Open up NotePad, and type this in: REM Run from the top of the Spam Assassin install directory mkdir \spamdocs call pod2html spamassassin. --outfile \spamdocs\spamassassin.html call pod2html spamd\spamc.pod --outfile \spamdocs\spamc.html call pod2html spamd\spamd. --outfile \spamdocs\spamd.html call pod2html spamproxy\spamproxyd. --outfile \spamdocs\spamproxyd.html call pod2html lib\mail\spamassassin\conf.pm --outfile \spamdocs\conf.html call pod2html lib\mail\spamassassin\permsgstatus.pm --outfile \spamdocs\permsgstatus.html call pod2html lib\mail\spamassassin\persistentaddrlist.pm --outfile \spamdocs\persistentaddrlist.html call pod2html lib\mail\spamassassin\smtp\smarthost.pm --outfile \spamdocs\smarthost.html call pod2html lib\mail\spamassassin.pm --outfile \spamdocs\spamassassinclass.html 3b. Save this file as POD.BAT in the SPAMSOURCE directory. 3c. Open a DOS box, go to SPAMSOURCE and type POD. This will generate the HTML docs for SpamAssassin, and place them in \spamdocs. This works around the faulty TOUCH/POD2HTML script issues we originally disabled. 4a. Ok, we will try a test. It will fail, proving life is weird <g>. >From the SPAMSOURCE directory, type PERL -S "spamassassin" -P < sample-spam.txt I'll bet you you will get a "getpwuid is unimplemented" error. 4b. Fixing this isn't too bad. Go to \perl\site\lib\mail. You'll find spamassassin.pm. It will be read-only (change this). Open it in Notepad and find return (getpwuid($>))[7]; change this to # return (getpwuid($>))[7]; PART IX: TESTING Create a temporary directory called TEST off the root. Copy the sample-spam.txt and sample-nonspam.txt files from the SPAMSOURCE directory. Open a DOS box. 1. Type spamassassin -P -D -t < sample-nonspam.txt > nospam.txt This should run fine, and when you look at nospam.txt the report should be hunky dory. 2. Type spamassassin -P -D -t < sample-spam.txt > spam.txt This should run fine and the report should label this as spam. Note the RBL check should register as spam as well. Notes for usage: - You can process any MIME message by typing spamassassin -P < inputfile > outputfile - Adding a -e switch will set the ERRORLEVEL to non-zero for spam! - only free RBL lists are on by default. See the SPAMSOURCE README for more details on this. PART X: AUTOWHITELIST DOESN'T WORK The Auto-WhiteList is a neat optional piece of SpamAssassin. With the feature enabled, people who send non-spam are added to the "whitelist" - meaning they become increasingly less likely to have their mail falsely flagged as spam. Unfortunately, it doesn't work on Win32. The STATS/LINK/UNLINK functions of the NFS-Safe Locking in DBAddrList.PM go down in flames on Win32 (always tries 30 times to get the lock, finds it stale and then fails). While one could simply disable it, it would of course only be reliable if only one instance of SpamAssassin were accessing the database at one time. An unsafe assumption! Anyway, this is probably best addressed in the main code branch. Some possibilties: - if Win32, use the classic flock routines, which do work - Try the LockFile::Simple library, which may work. This might be worth doing anyway to the maintainers; it's a more modular elegant version of what they use anyway. Otherwise you'll have to manually add whitelisted addresses to the configuration files. RAZOR Well, this is a bit of a pain, and I doubt it will work reliably. Fortunately it is optional Here are the considerations 1. To install, begin by installing all of SpamAssassin and all of the optional modules listed in Part III. 2. You will also need to install Mail::Internet. Open a DOS box, type perl -MCPAN -e shell You will be asked some fairly frightening and confusing questions. Ignore them, and mindlessly hit RETURN, until you are asked for some URLS to download stuff from. Choose some random sites. Eventually you'll be at the CPAN> prompt again, from which you type install Mail::Internet, and all is hopefully well. 3. Download the RAZOR package from razor.sourceforge.net, and ungzip and untar it (WinZip works well for this). Place the main package off the root. 4. Build it. Go to the Razor-subdirectory and type these commands in order: perl makefile.pl nmake nmake test nmake install It should all go pretty well. 5. Type razor-check at the DOS prompt. If you are unlucky like me, you'll get an "alarm function unimplemented in ping.pm". This isn't such a big deal - we installed a working Net::Ping library back in Part III (it's installed at \perl\site\net\ping.pm). But the ActivePerl distribution comes with the BAD version of PING as the default. Let's fix that. Go to \perl\lib\Net and rename ping.pm to badping.pm and all should be well (hopefully this working ping will be integrated into the core shortly). 6. Now we come to a bigger problem. The ALARM function is also used in SpamAssassin's razor lookup function. While we can disable it (and will), this might be a bad idea, as it could lead to "odd" timeouts and hangs if the razor server isn't up. So do at your own risk! The problem ALARM functions are located in \perl\site\lib\mail\spamassassin\dns.pm . There are two of them and they need to be commented out with a # at the beginning of the line. If they are not, SpamAssassin will run fine, but ALWAYS time-out on the RAZOR check.USING SPAMASSASSIN WITH WIN32 Draft 1, [EMAIL PROTECTED] LIMITATIONS - autowhitelist doesn't function (SEE AUTOWHITELIST DOESNT WORK) - Most people don't have visual c++ so they can't compile SPAMC, so spamassassin must be run in "serial mode". - razor is unreliable. - a few installation quirks These will all be discussed in more detail later First of all, use WinNT/2K/XP only. It IS possible to get it running on Win9x, but Perl acts unreliably on such platforms. PART I: Installing Perl 1. This is very easy. Go to http://www.activestate.com, and select the ActivePerl download. Choose the MSI installer version. 2. Double click the MSI file and run it. All of the default options are fine. Don't worry if the Perl installer seems to take a really long time. Wait at least 10 minutes before worrying. 3. Open a DOS box and type PERL -V to verify all is well. 4. In subsequent sections, it will be assumed that Perl was installed in C:\perl. Make appropriate changes if necessary. PART II: Installing NMAKE 1. We need NMAKE to build Perl modules 2. Obtain from ftp://ftp.microsoft.com/Softlib/MSLFILES/nmake15.exe 3. Extract the files, and place them in C:\perl\bin PART III: Installing the needed Modules, part I. We do this using the Perl Package Manager, rather than CPAN when possible, as it downloads the best versions for Win32. Basic method of operation: 1. open dos box. 2. Type PPM 3. At the PPM> prompt, type install <modulename> For SpamAssassin itself, we need only one module, Net::DNS, so we'd type install Net::DNS If Razor functionality is needed, also install these modules: Net::Ping [See notes on this in RAZOR section] Time::HiRes Digest::SHA1 We will also need to install Mail::Internet. Unfortunately this is not available via the PPM repository currently. See RAZOR section below for more. Part IV: Obtaining Spam Assassin Go to http://www.spamassassin.org, choose download, and get the ZIP file distribution. Use WinZIP or other ZIP extractor, and extract the ZipFile off the root. For SpamAssassin 2.11, for example, this will create Mail-SpamAssassin-2.11 off C:\ We'll refer to this directory as the SPAMSOURCE directory below. PART V: Pre-install Open a DOS box, go to the SPAMSOURCE directory and type PERL windows_install.pl PERL makefile.pl PART VI: Getting the NMAKE to work, Part I Here's where we start to see quirks, most of them easy to fix. We will go through each error message one by one until the NMAKE compiles. (The main reason to do this is to achieve better understanding what works and what doesn't, so if a new branch of SpamAssassin changes things...) 1. Open a dos box and go to the SPAMSOURCE directory. 2. Type NMAKE 3. It will fail, complaining that TOUCH cannot be found. It may also complain about spamd/spamc. REASON: TOUCH isn't a Windows command. Also genning the HTML docs from the POD file confuses the Windows command interpreter WORKAROUND THIS: Open MAKEFILE (SPAMSOURCE directory) in NotePad, and find pm_to_blib: spamassassin doc/.made Change it to pm_to_blib: spamassassin doc/.made which will skip this section. (See CLEANING UP THE QUIRKS). Save the file. 4. Try NMAKE again! 5. It will (most likely) fail again, complaining that CL is not recognized. REASON: One component of Spamassassin is spamc, the client piece of a neato way to really speed up SpamAssassin. But most of us don't own Visual C++, and so we don't have a C compiler handy. Unix people have life easy :) WORKAROUND: Well, if you really need spamc, you gotta get a C compiler. Otherwise, open MAKEFILE in Notepad again, and find $(CFCC) $(CFCCFLAGS) $(CFOPTIMIZE) spamd/spamc.c \ -o $@ $(CFLDFLAGS) $(CFLIBS) Comment these lines out by placing a # character at the BEGINNING of each line. Please re-read the last sentence - if # isn't the very first character the line will NOT be commented out properly. 6. Run NMAKE again. It should complete (the error about blib\script\spamc is fine, and occurs because we never compiled spamc) PART VII: Getting NMAKE to work, Part II Here we get NMAKE INSTALL to work properly. NMAKE TEST will never work, as there are too many whacked modules at this point. Oh well. 1. Open a DOS box and go to SPAMSOURCE directory. 2. Type NMAKE INSTALL 3. You will see a failure right after the mkdir -P command REASON: 3 issues come up now. The first is that mkdir -P has no analogue. We'll use MKDIR instead. Second some of the paths for the rule directories won't work as is. Finally, some of the installation routines will not work to copy configuration files, so we need to work around that too! WORKAROUND 1: Open MAKEFILE, and change all mkdir -P command to simply mkdir (eg mkdir -p $(DEF_RULES_DIR) to mkdir $(DEF_RULES_DIR) WORKAROUND 2: Also, find DEF_RULES_DIR = $(PREFIX)/share/spamassassin LOCAL_RULES_DIR = /etc/mail/spamassassin and change them to DEF_RULES_DIR = $(PREFIX)\share\spamassassin LOCAL_RULES_DIR = \etc\mail\spamassassin WORKAROUND 3: Finally, change these lines inst_cfs: $(LOCAL_RULES_DIR) $(DEF_RULES_DIR) $(DEF_RULES_DIR)/user_prefs.template $(LOCAL_RULES_DIR)/local.cf migrate_cfs for file in $(RULES) ; do \ $(CP) rules/$$file $(DEF_RULES_DIR)/$$file; \ done $(DEF_RULES_DIR)/user_prefs.template: rules/user_prefs.template $(CP) rules/user_prefs.template $(DEF_RULES_DIR)/user_prefs.template $(LOCAL_RULES_DIR)/local.cf: rules/local.cf [ -f $(LOCAL_RULES_DIR)/local.cf ] || $(CP) rules/local.cf $(LOCAL_RULES_DIR)/local.cf migrate_cfs: [ ! -f /etc/spamassassin.cf ] || $(MV) /etc/spamassassin.cf /etc/mail/spamassassin/migrated.cf [ ! -f /etc/mail/spamassassin.cf ] || $(MV) /etc/mail/spamassassin.cf /etc/mail/spamassassin/migrated.cf to inst_cfs: $(LOCAL_RULES_DIR) $(DEF_RULES_DIR) $(DEF_RULES_DIR)/user_prefs.template #$(LOCAL_RULES_DIR)/local.cf migrate_cfs # for file in $(RULES) ; do \ # $(CP) rules/$$file $(DEF_RULES_DIR)/$$file; \ # done $(DEF_RULES_DIR)/user_prefs.template: rules/user_prefs.template $(CP) rules/user_prefs.template $(DEF_RULES_DIR)/user_prefs.template $(LOCAL_RULES_DIR)/local.cf: rules/local.cf [ -f $(LOCAL_RULES_DIR)/local.cf ] || $(CP) rules/local.cf $(LOCAL_RULES_DIR)/local.cf migrate_cfs: # [ ! -f /etc/spamassassin.cf ] || $(MV) /etc/spamassassin.cf /etc/mail/spamassassin/migrated.cf # [ ! -f /etc/mail/spamassassin.cf ] || $(MV) /etc/mail/spamassassin.cf /etc/mail/spamassassin/migrated.cf (We are basically commenting out sections that would fail to copy files correctly. Don't worry - it's groovy) 4. Run NMAKE INSTALL - all should be well now. PART VIII: CLEANING UP THE QUIRKS 1. First, manually copy the files in rules directory to \etc\mail\spamassassin, which should now exist. This copies the default rules nicely. This is NEEDED for SpamAssassin to work. 2. Next, find \perl\bin\spamasasssin.bat, and add at the beginning SET RES_NAMESERVERS=ipaddress , where ipaddress is the ipaddress of your DNS server. If you have more than one, add additional ones, separating with a space character. This is needed for all RBL lookups - the Net::DNS module is not currently capable of checking the Windows registry, so we have to "help it" 3a. Open up NotePad, and type this in: REM Run from the top of the Spam Assassin install directory mkdir \spamdocs call pod2html spamassassin. --outfile \spamdocs\spamassassin.html call pod2html spamd\spamc.pod --outfile \spamdocs\spamc.html call pod2html spamd\spamd. --outfile \spamdocs\spamd.html call pod2html spamproxy\spamproxyd. --outfile \spamdocs\spamproxyd.html call pod2html lib\mail\spamassassin\conf.pm --outfile \spamdocs\conf.html call pod2html lib\mail\spamassassin\permsgstatus.pm --outfile \spamdocs\permsgstatus.html call pod2html lib\mail\spamassassin\persistentaddrlist.pm --outfile \spamdocs\persistentaddrlist.html call pod2html lib\mail\spamassassin\smtp\smarthost.pm --outfile \spamdocs\smarthost.html call pod2html lib\mail\spamassassin.pm --outfile \spamdocs\spamassassinclass.html 3b. Save this file as POD.BAT in the SPAMSOURCE directory. 3c. Open a DOS box, go to SPAMSOURCE and type POD. This will generate the HTML docs for SpamAssassin, and place them in \spamdocs. This works around the faulty TOUCH/POD2HTML script issues we originally disabled. 4a. Ok, we will try a test. It will fail, proving life is weird <g>. >From the SPAMSOURCE directory, type PERL -S "spamassassin" -P < sample-spam.txt I'll bet you you will get a "getpwuid is unimplemented" error. 4b. Fixing this isn't too bad. Go to \perl\site\lib\mail. You'll find spamassassin.pm. It will be read-only (change this). Open it in Notepad and find return (getpwuid($>))[7]; change this to # return (getpwuid($>))[7]; PART IX: TESTING Create a temporary directory called TEST off the root. Copy the sample-spam.txt and sample-nonspam.txt files from the SPAMSOURCE directory. Open a DOS box. 1. Type spamassassin -P -D -t < sample-nonspam.txt > nospam.txt This should run fine, and when you look at nospam.txt the report should be hunky dory. 2. Type spamassassin -P -D -t < sample-spam.txt > spam.txt This should run fine and the report should label this as spam. Note the RBL check should register as spam as well. Notes for usage: - You can process any MIME message by typing spamassassin -P < inputfile > outputfile - Adding a -e switch will set the ERRORLEVEL to non-zero for spam! - only free RBL lists are on by default. See the SPAMSOURCE README for more details on this. PART X: AUTOWHITELIST DOESN'T WORK The Auto-WhiteList is a neat optional piece of SpamAssassin. With the feature enabled, people who send non-spam are added to the "whitelist" - meaning they become increasingly less likely to have their mail falsely flagged as spam. Unfortunately, it doesn't work on Win32. The STATS/LINK/UNLINK functions of the NFS-Safe Locking in DBAddrList.PM go down in flames on Win32 (always tries 30 times to get the lock, finds it stale and then fails). While one could simply disable it, it would of course only be reliable if only one instance of SpamAssassin were accessing the database at one time. An unsafe assumption! Anyway, this is probably best addressed in the main code branch. Some possibilties: - if Win32, use the classic flock routines, which do work - Try the LockFile::Simple library, which may work. This might be worth doing anyway to the maintainers; it's a more modular elegant version of what they use anyway. Otherwise you'll have to manually add whitelisted addresses to the configuration files. RAZOR Well, this is a bit of a pain, and I doubt it will work reliably. Fortunately it is optional Here are the considerations 1. To install, begin by installing all of SpamAssassin and all of the optional modules listed in Part III. 2. You will also need to install Mail::Internet. Open a DOS box, type perl -MCPAN -e shell You will be asked some fairly frightening and confusing questions. Ignore them, and mindlessly hit RETURN, until you are asked for some URLS to download stuff from. Choose some random sites. Eventually you'll be at the CPAN> prompt again, from which you type install Mail::Internet, and all is hopefully well. 3. Download the RAZOR package from razor.sourceforge.net, and ungzip and untar it (WinZip works well for this). Place the main package off the root. 4. Build it. Go to the Razor-subdirectory and type these commands in order: perl makefile.pl nmake nmake test nmake install It should all go pretty well. 5. Type razor-check at the DOS prompt. If you are unlucky like me, you'll get an "alarm function unimplemented in ping.pm". This isn't such a big deal - we installed a working Net::Ping library back in Part III (it's installed at \perl\site\net\ping.pm). But the ActivePerl distribution comes with the BAD version of PING as the default. Let's fix that. Go to \perl\lib\Net and rename ping.pm to badping.pm and all should be well (hopefully this working ping will be integrated into the core shortly). 6. Now we come to a bigger problem. The ALARM function is also used in SpamAssassin's razor lookup function. While we can disable it (and will), this might be a bad idea, as it could lead to "odd" timeouts and hangs if the razor server isn't up. So do at your own risk! The problem ALARM functions are located in \perl\site\lib\mail\spamassassin\dns.pm . There are two of them and they need to be commented out with a # at the beginning of the line. If they are not, SpamAssassin will run fine, but ALWAYS time-out on the RAZOR check. So I'm dubious about the safety of using this, but hey, it's up to you. The maintainers could put more of a classic check the time and see if 10 seconds has elapsed. Assumedly the ALARM is much more preemptive and reliable on non-Win32 however. __________________________________________________ Do You Yahoo!? Yahoo! Tax Center - online filing with TurboTax http://taxes.yahoo.com/ _______________________________________________ Spamassassin-talk mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/spamassassin-talk