summaryrefslogtreecommitdiffstats
path: root/contrib/sendmail/src/milter.c
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/sendmail/src/milter.c')
-rw-r--r--contrib/sendmail/src/milter.c57
1 files changed, 17 insertions, 40 deletions
diff --git a/contrib/sendmail/src/milter.c b/contrib/sendmail/src/milter.c
index 67d5eae..816c7bf 100644
--- a/contrib/sendmail/src/milter.c
+++ b/contrib/sendmail/src/milter.c
@@ -10,7 +10,7 @@
#include <sendmail.h>
-SM_RCSID("@(#)$Id: milter.c,v 8.267 2007/02/27 22:21:12 ca Exp $")
+SM_RCSID("@(#)$Id: milter.c,v 8.269 2007/06/06 17:26:12 ca Exp $")
#if MILTER
# include <sm/sendmail.h>
@@ -51,7 +51,8 @@ static void milter_quit_filter __P((struct milter *, ENVELOPE *));
static void milter_abort_filter __P((struct milter *, ENVELOPE *));
static void milter_send_macros __P((struct milter *, char **, int,
ENVELOPE *));
-static int milter_negotiate __P((struct milter *, ENVELOPE *));
+static int milter_negotiate __P((struct milter *, ENVELOPE *,
+ milters_T *));
static void milter_per_connection_check __P((ENVELOPE *));
static char *milter_headers __P((struct milter *, ENVELOPE *, char *));
static void milter_addheader __P((struct milter *, char *, ssize_t,
@@ -1791,41 +1792,6 @@ milter_reset_df(e)
}
/*
-** MILTER_CAN_DELRCPTS -- can any milter filters delete recipients?
-**
-** Parameters:
-** none
-**
-** Returns:
-** true if any filter deletes recipients, false otherwise
-*/
-
-bool
-milter_can_delrcpts()
-{
- bool can = false;
- int i;
-
- if (tTd(64, 10))
- sm_dprintf("milter_can_delrcpts:");
-
- for (i = 0; InputFilters[i] != NULL; i++)
- {
- struct milter *m = InputFilters[i];
-
- if (bitset(SMFIF_DELRCPT, m->mf_fflags))
- {
- can = true;
- break;
- }
- }
- if (tTd(64, 10))
- sm_dprintf("%s\n", can ? "true" : "false");
-
- return can;
-}
-
-/*
** MILTER_QUIT_FILTER -- close down a single filter
**
** Parameters:
@@ -2406,15 +2372,17 @@ milter_getsymlist(m, buf, rlen, offset)
** Parameters:
** m -- milter filter structure.
** e -- current envelope.
+** milters -- milters structure.
**
** Returns:
** 0 on success, -1 otherwise
*/
static int
-milter_negotiate(m, e)
+milter_negotiate(m, e, milters)
struct milter *m;
ENVELOPE *e;
+ milters_T *milters;
{
char rcmd;
mi_int32 fvers, fflags, pflags;
@@ -2583,6 +2551,12 @@ milter_negotiate(m, e)
milter_getsymlist(m, response, rlen, MILTER_OPTLEN);
}
+ if (bitset(SMFIF_DELRCPT, m->mf_fflags))
+ milters->mis_flags |= MIS_FL_DEL_RCPT;
+ if (!bitset(SMFIP_NORCPT, m->mf_pflags) &&
+ !bitset(SMFIP_NR_RCPT, m->mf_pflags))
+ milters->mis_flags |= MIS_FL_REJ_RCPT;
+
if (tTd(64, 5))
sm_dprintf("milter_negotiate(%s): received: version %u, fflags 0x%x, pflags 0x%x\n",
m->mf_name, m->mf_fvers, m->mf_fflags, m->mf_pflags);
@@ -3784,6 +3758,7 @@ milter_replbody(response, rlen, newfilter, e)
** Parameters:
** e -- current envelope.
** state -- return state from response.
+** milters -- milters structure.
**
** Returns:
** true iff at least one filter is active
@@ -3791,15 +3766,17 @@ milter_replbody(response, rlen, newfilter, e)
/* ARGSUSED */
bool
-milter_init(e, state)
+milter_init(e, state, milters)
ENVELOPE *e;
char *state;
+ milters_T *milters;
{
int i;
if (tTd(64, 10))
sm_dprintf("milter_init\n");
+ memset(milters, '\0', sizeof(*milters));
*state = SMFIR_CONTINUE;
if (InputFilters[0] == NULL)
{
@@ -3821,7 +3798,7 @@ milter_init(e, state)
}
if (m->mf_sock < 0 ||
- milter_negotiate(m, e) < 0 ||
+ milter_negotiate(m, e, milters) < 0 ||
m->mf_state == SMFS_ERROR)
{
if (tTd(64, 5))
OpenPOWER on IntegriCloud