#include "policyd.h"
/*
*
*
* Policy Daemon
*
* policy daemon is used in conjuction with postfix to combat spam.
*
* Copyright (C) 2004 Cami Sardinha (cami@mweb.co.za)
*
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation; either version 2 of the License, or (at your
* option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation Inc.,
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*
*
*/
/*
* function: blacklist_check
* purpose: module to check if connecting host/network is blacklisted.
* return: 1=yes, 0=no
*/
int
blacklist_check(unsigned int fd)
{
/* reset mysql_optarray[fd][0] before getting new value */
mysql_optarray[fd][0]=0;
if(DEBUG > 0)
logmessage("DEBUG: fd: %d checking blacklist\n", fd);
/* build up query & execute */
snprintf(mysqlquery_array[fd], 512,
"SELECT COUNT(*) FROM blacklist WHERE _blacklist='%s' OR _blacklist='%s' OR _blacklist='%s' OR _blacklist='%s'",
host_array[fd][2], host_array[fd][3], host_array[fd][4], host_array[fd][5]);
if(db_optquery(fd) == -1) return(db_failure(fd, "blacklist"));
/* blacklisted */
if(mysql_optarray[fd][0] >= 1)
{
if(DEBUG > 0)
{
logmessage("DEBUG: fd: %d blacklist found: %s\n", fd, host_array[fd][2]);
logmessage("DEBUG: fd: %d bypassing other modules\n", fd);
}
logmessage("rcpt=%lu, blacklist=block, host=%s (%s), from=%s, to=%s, size=%s\n",
rcpt_count, /* recipient count */
host_array[fd][2], /* host address */
host_array[fd][0], /* hostname */
triplet_array[fd][1], /* sender */
triplet_array[fd][2], /* recipient */
triplet_array[fd][3]); /* size */
return (1); /* found */
}
if(DEBUG > 0)
logmessage("DEBUG: fd: %d blacklist not found: %s\n", fd, host_array[fd][2]);
return (0); /* not found */
}
/*
* function: blacklist_sender_check
* purpose: check if the sender address/domain host is blacklisted
* return: 1=yes, 0=no
*/
int
blacklist_sender_check (unsigned int fd)
{
/* reset mysql_optarray[fd][0] before getting new value */
mysql_optarray[fd][0]=0;
if(DEBUG > 0)
logmessage("DEBUG: fd: %d checking blacklist sender/domain\n", fd);
/* build up & execute query */
snprintf(mysqlquery_array[fd], 512,
"SELECT COUNT(*) FROM blacklist_sender WHERE _blacklist='@%s' OR _blacklist='%s'",
host_array[fd][7], triplet_array[fd][1]);
if(db_optquery(fd) == -1) return(db_failure(fd, "blacklist_sender"));
/* blacklisted */
if(mysql_optarray[fd][0] >= 1)
{
if(DEBUG > 0)
{
logmessage("DEBUG: fd: %d blacklist sender found: %s/%s\n", fd,
host_array[fd][7], triplet_array[fd][1]);
logmessage("DEBUG: fd: %d bypassing other modules\n", fd);
}
logmessage("rcpt=%lu, blacklist_sender=block, host=%s (%s), from=%s, to=%s, size=%s\n",
rcpt_count, /* recipient count */
host_array[fd][2], /* ip address */
host_array[fd][0], /* hostname */
triplet_array[fd][1], /* from address */
triplet_array[fd][2], /* recipient address */
triplet_array[fd][3]); /* mail size */
return (1); /* found */
}
if(DEBUG > 0)
logmessage("DEBUG: fd: %d blacklist_sender not found: %s %s\n",
fd, host_array[fd][7], triplet_array[fd][1]);
return (0); /* not found */
}
/*
* function: blacklist_dnsname_check
* purpose: check if the dns sender address/domain host is blacklisted
* return: 1=yes, 0=no
*/
int
blacklist_dnsname_check (unsigned int fd)
{
/* reset mysql_optarray[fd][0] before getting new value */
mysql_optarray[fd][0]=0;
if(DEBUG > 0)
logmessage("DEBUG: fd: %d checking blacklist dnsname\n", fd);
/* save sql lookup if there is no hostname information */
if(strcmp(host_array[fd][0], "unknown") == 0)
goto end;
/* build up & execute query */
snprintf(mysqlquery_array[fd], 512,
"SELECT COUNT(*) FROM blacklist_dnsname WHERE '%s' LIKE _blacklist",
host_array[fd][0]);
if(db_optquery(fd) == -1) return(db_failure(fd, "blacklist_dnsname"));
/* blacklisted */
if(mysql_optarray[fd][0] >= 1)
{
if(DEBUG > 0)
{
logmessage("DEBUG: fd: %d blacklist dnsname found: %s/%s\n", fd,
host_array[fd][7], triplet_array[fd][1]);
logmessage("DEBUG: fd: %d bypassing other modules\n", fd);
}
logmessage("rcpt=%lu, blacklist_dnsname=block, host=%s (%s), from=%s, to=%s, size=%s\n",
rcpt_count, /* recipient count */
host_array[fd][2], /* ip address */
host_array[fd][0], /* hostname */
triplet_array[fd][1], /* from address */
triplet_array[fd][2], /* recipient address */
triplet_array[fd][3]); /* mail size */
return (1); /* found */
}
end:
if(DEBUG > 0)
logmessage("DEBUG: fd: %d blacklist_sender not found: %s\n", fd, host_array[fd][2]);
return (0); /* not found */
}
/* EOF */
syntax highlighted by Code2HTML, v. 0.9.1