--- clamav-milter/clamav-milter.c.orig 2007-03-02 03:27:19 +0400 +++ clamav-milter/clamav-milter.c 2007-03-13 20:16:12 +0400 @@ -4528,6 +4528,60 @@ ptr = end; break; } + case '&': /* clamav-milter variables */ { + char *end = strchr(++ptr, '&'); + + if(end == NULL) { + logg(_("%s: Unterminated clamav-milter variable \"%s\"\n"), + filename, ptr); + continue; + } + *end = '\0'; + + /* begin variables definitions */ + // Virus name, replacement for %v, may be not need + if ( strcmp(ptr, "v") == 0 ) { + fputs(virusname, sendmail); + } // end of v + // Header, , replacement for %h, may be not need + else if ( strcmp(ptr, "header") == 0) { + struct privdata *privdata = (struct privdata *)smfi_getpriv(ctx); + header_list_print(privdata->headers, sendmail); + } // end of header + // ClamAV/clamav-milter version + else if ( strcmp(ptr, "full_version") == 0) { + fputs(clamav_version, sendmail); + } // end of clamav_version + // Local Received aadons for header + else if ( strcmp(ptr, "localreceived") == 0) { + char *s_relay, *helo; + char timestring[128]; + time_t systime; + + s_relay = smfi_getsymval(ctx, "{_}"); + if (!s_relay) s_relay = ""; + helo = smfi_getsymval(ctx, "s"); + if (!helo) { + helo = "NOHELO"; + logg(_("Variable \"s\" isn't defined in Milter.macros.eom\n")); + } + + systime = time(NULL); + strftime(timestring, sizeof(timestring) -1, "%a, %d %b %Y %T %z (%Z)", + localtime(&systime)); + + fprintf(sendmail, "Received: from %s (%s)", helo, s_relay); + fprintf(sendmail, "\n\tby %s (clamav-milter %s) with id %s;", + smfi_getsymval(ctx, "j"), CM_VERSION, smfi_getsymval(ctx, "i")); + fprintf(sendmail, "\n\t%s", timestring); + + } // localreceived + else { + fprintf(sendmail, "[unknown clamav-milter's variable: %s]", ptr); + logg(_("%s: Unknown clamav-milter's variable \"%s\"\n"), filename, ptr); + } // end variables definitions + ptr = end; + } break; case '\\': if(*++ptr == '\0') { --ptr;