static int moderator_filter_message (mu_sieve_machine_t mach, mu_list_t tags, mu_message_t msg, int *pdiscard) { int rc; mu_sieve_machine_t newmach; mu_attribute_t attr; mu_sieve_value_t *arg; if (mu_sieve_tag_lookup (tags, "source", &arg)) { rc = mu_sieve_machine_inherit (mach, &newmach); if (rc) { mu_sieve_error (mach, _("cannot initialize sieve machine: %s"), mu_strerror (rc)); return 1; } /* FIXME: This should be configurable: moderator :inherit moderator :debug 2 ... */ rc = mu_sieve_compile (newmach, arg->v.string); if (rc) mu_sieve_error (mach, _("cannot compile source `%s'"), arg->v.string); } else rc = mu_sieve_machine_dup (mach, &newmach); if (rc) return rc; mu_message_get_attribute (msg, &attr); mu_attribute_unset_deleted (attr); rc = mu_sieve_message (newmach, msg); if (rc) mu_sieve_error (newmach, _("failed to run inferior sieve machine")); else *pdiscard = mu_attribute_is_deleted (attr); mu_sieve_machine_destroy (&newmach); return rc; }
static PyObject * api_sieve_message (PyObject *self, PyObject *args) { int status; PySieveMachine *py_mach; PyMessage *py_msg; if (!PyArg_ParseTuple (args, "O!O", &PySieveMachineType, &py_mach, &py_msg)) return NULL; if (!PyMessage_Check ((PyObject *)py_msg)) { PyErr_SetString (PyExc_TypeError, ""); return NULL; } status = mu_sieve_message (py_mach->mach, py_msg->msg); return _ro (PyInt_FromLong (status)); }