#include #include #undef DEBUG // avoiding warnings: exim defines it too #include #include "../command-gpl/kaverrors.h" #include "misc.h" int kav(uschar **yield, int argc, uschar *argv[]) { char mbox_path[PATH_MAX]; int mbox; int ret, retCode; char *rejectMsg = 0; if (argc != 2) { log_write(0, LOG_MAIN | LOG_PANIC, "Expected 2 parameter, received %d", argc); return (FAIL); } debug_printf("libkavexim.so::kav() called with params: (%s, %s)", argv[0], argv[1]); // check access to temporary directory if (checkDirAccess((char *) argv[1]) == -1) return (FAIL); debug_printf("Sender: %s", expand_string(US"${sender_address}")); debug_printf("Recipients: %s", expand_string(US"${recipients}")); debug_printf("Message ID: %s", expand_string(US"${message_exim_id}")); debug_printf("Client address: %s", expand_string(US"${sender_host_address}")); debug_printf("Server address: %s", expand_string(US"${received_ip_address}")); // open the mbox if (split_spool_directory == 0) snprintf(mbox_path, sizeof(mbox_path), "%s/input/%s-D", spool_directory, message_id); else snprintf(mbox_path, sizeof(mbox_path), "%s/input/%s/%s-D", spool_directory, message_subdir, message_id); debug_printf(0, LOG_MAIN, "kav4lms: Mbox is \"%s\"", mbox_path); // open and lock mbox if ((mbox = mboxOpen(mbox_path)) == -1) { *yield = string_copy((uschar *) kavGetError()); return (FAIL); } // process the mbox ret = mboxProcess(mbox, (char *) argv[0], &rejectMsg, (char *) argv[1]); // interpret result retCode = processResult(ret, yield, rejectMsg); log_write(0, LOG_MAIN, "*yield = %s", *yield); // close mbox if (mboxClose(mbox) == -1) { *yield = string_copy((uschar *) kavGetError()); return (FAIL); } return (retCode); }