[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