/*
* Copyright (C), 2000-2007 by the monit project group.
* All Rights Reserved.
*
* 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 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY 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, see .
*/
#include
#ifdef HAVE_STDIO_H
#include
#endif
#ifdef HAVE_ERRNO_H
#include
#endif
#ifdef HAVE_SYS_TYPES_H
#include
#endif
#ifdef HAVE_SYS_SOCKET_H
#include
#endif
#ifdef HAVE_STRING_H
#include
#endif
#ifdef HAVE_NETINET_IN_H
#include
#endif
#ifdef HAVE_ARPA_INET_H
#include
#endif
#include "protocol.h"
/**
* A simple Postfix SMTP access policy delegation protocol test
*
* To not affect real traffic, we send the following request with
* fixed virtual triplet values to the server:
* request=smtpd_access_policy
* protocol_state=RCPT
* protocol_name=SMTP
* sender=monit@foo.tld
* recipient=monit@foo.tld
* client_address=1.2.3.4
* client_name=mx.foo.tld
* and check that the server replies with some action.
*
* @author Martin Pala,
*
* @version \$Id: postfix_policy.c,v 1.7 2007/10/11 19:57:17 martinp Exp $
*
* @file
*/
int check_postfix_policy(Socket_T s) {
char buf[STRLEN];
ASSERT(s);
if(socket_print(s,
"request=smtpd_access_policy\n"
"protocol_state=RCPT\n"
"protocol_name=SMTP\n"
"sender=monit@foo.tld\n"
"recipient=monit@foo.tld\n"
"client_address=1.2.3.4\n"
"client_name=mx.foo.tld\n"
"\n") < 0) {
LogError("POSTFIX-POLICY: error sending data -- %s\n", STRERROR);
return FALSE;
}
if(! socket_readln(s, buf, sizeof(buf))) {
LogError("POSTFIX-POLICY: error receiving data -- %s\n", STRERROR);
return FALSE;
}
Util_chomp(buf);
if( (strlen(buf) <= 7) || strncasecmp(buf, "action=", 7) ) {
LogError("POSTFIX-POLICY error: %s\n",
*buf?buf:"no action returned");
return FALSE;
}
return TRUE;
}