#! /usr/local/bin/perl # test sample Perl interface to the DCC interface daemon # Copyright (c) 2006 by Rhyolite Software, LLC # # This agreement is not applicable to any entity which sells anti-spam # solutions to others or provides an anti-spam solution as part of a # security solution sold to other entities, or to a private network # which employs the DCC or uses data provided by operation of the DCC # but does not provide corresponding data to other users. # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # Parties not eligible to receive a license under this agreement can # obtain a commercial license to use DCC and permission to use # U.S. Patent 6,330,590 by contacting Commtouch at http://www.commtouch.com/ # or by email to nospam@commtouch.com. # # A commercial license would be for Distributed Checksum and Reputation # Clearinghouse software. That software includes additional features. This # free license for Distributed ChecksumClearinghouse Software does not in any # way grant permision to use Distributed Checksum and Reputation Clearinghouse # software # # THE SOFTWARE IS PROVIDED "AS IS" AND RHYOLITE SOFTWARE, LLC DISCLAIMS ALL # WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES # OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL RHYOLITE SOFTWARE, LLC # BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES # OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, # WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, # ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS # SOFTWARE. # Rhyolite Software DCC 1.3.50-1.6 $Revision$ use strict 'subs', 'vars'; use Getopt::Std; my($usage); my(%opts, $clnt_addr, $clnt_name, $rcpt, @rcpts, $body, @result); do('../dccif.pl') || die("could not get sample interface ../dccif.pl: $!\n"); $usage=("usage: [-h homedir] [-o opts] [-c clnt-name] [-l heLo] [-f env_from]\n" . " [-I infile] [-O outfile]" . " [-r rcpt1[:user1][,rcpt2[:user2],...]]\n"); $opts{I} = "-"; $opts{O} = "-"; if (!getopts('h:o:c:l:f:I:O:t:r:', \%opts) || @ARGV) { print STDERR $usage; exit 1; } if (! $opts{c}) { $clnt_addr = ""; $clnt_name = ""; } else { $clnt_name = $opts{c}; $clnt_addr = gethostbyname($clnt_name); if (!$clnt_addr) { $clnt_addr = ""; } else { $clnt_addr = inet_ntoa($clnt_addr); $clnt_name = "" if ($clnt_addr eq $clnt_name); } } # make array of env_To recipients # With no recipients, dccifd will understand a target count of 0. The # result is like `dccifd -Q`. @rcpts = (); if ($opts{r}) { my(@raw_rcpts, @raw_rcpt); @raw_rcpts = split(/,/, $opts{r}); while (@raw_rcpts) { $rcpt = shift(@raw_rcpts); $rcpt =~ s/;/\r/; push @rcpts, $rcpt; } } @result = dccif($opts{O}, $opts{o} ? $opts{o} : "", $clnt_addr, $clnt_name, $opts{l} ? $opts{l} : "", $opts{f} ? $opts{f} : "", \@rcpts, $opts{I}, $opts{h} ? $opts{h} : ""); print STDERR "result=@result\n";