[Mimedefang] delay on relay problems
Dale Moore
Dale.Moore at cs.cmu.edu
Sun Sep 21 11:12:42 EDT 2014
Short Version:
Mimedefang 2.75 doesn't implement delay on filter_relay routine.
I think that is a bug. Where do I submit patches?
Long Version:
I'm trying to run a small experiment to delay on relay connect
Under special circumstances, and I'm having some problems.
It appears that the perl filter_relay routine
Returns an 5 element list
( code, message, code, dsn, delay)
Of course many of these can be undef.
In examining the source code, and milter specifications,
A few things captivate me.
The first thing is that we cant call smfi_setreply
from connect callback. Ok. That is a limit, but
the delay is not implemented in the smfi callbacks,
it is instead implemented by the mimedefang process.
The mimedefang sources carefully pass the list
( message, code, dsn, delay)
Back through
- from the mimedefang-filter
- through the intermediary multiplexor and its communication buffers
- and into mfconnect routine mimedefang.c
In the mfconnect routine the code reads
if (doRelayCheck) {
char buf2[SMALLBUF];
int n = MXRelayOK(MultiplexorSocketName, buf2, data->hostip,
data->hostname, data->hostport, data->myip, data->daemon_port);
if (n == MD_REJECT) {
/* Can't call smfi_setreply from connect callback */
/* set_dsn(ctx, buf2, 5); */
cleanup(ctx);
DEBUG_EXIT("mfconnect", "SMFIS_REJECT");
return SMFIS_REJECT;
}
if (n <= MD_TEMPFAIL) { ... }
if (n == MD_ACCEPT_AND_NO_MORE_FILTERING) {
/* Can't call smfi_setreply from connect callback */
/* set_dsn(ctx, buf2, 2); */
cleanup(ctx);
DEBUG_EXIT("mfconnect", "SMFIS_ACCEPT");
return SMFIS_ACCEPT;
}
if (n == MD_DISCARD) { ... }
}
DEBUG_EXIT("mfconnect", "SMFIS_CONTINUE");
return SMFIS_CONTINUE;
}
The set_dsn routine is responsible for
- decoding the arguments from the multiplexor
- implementing the delay
- calling smfi_set_reply but only when the third parameter is 4 or 5.
If you'll examine the code above you'll see
- that we don't explicty check for MD_CONTINUE
- that filter routine always avoids calling set_dsn, even when num param is not 4 or 5
I believe that it is a bug that the 2.75 version of mimedefang
does not implement the delay on filter_relay , especially on 'CONTINUE'.
I sincerely hope that you agree.
I will have some patches I would like to submit.
Where should I submit them?
Dale Moore
More information about the MIMEDefang
mailing list