int main(int argc, char **argv) { int ch, d = 0, l = 1, v = 0; log_init(1); while ((ch = getopt(argc, argv, "dlv")) != -1) { switch (ch) { case 'd': d = 1; break; case 'l': l = 0; break; case 'v': v |= TRACE_DEBUG; break; default: log_warnx("warn: bad option"); return (1); /* NOTREACHED */ } } argc -= optind; argv += optind; log_init(d); log_verbose(v); log_debug("debug: starting..."); filter_api_on_connect(on_connect); filter_api_on_helo(on_helo); filter_api_on_mail(on_mail); filter_api_on_rcpt(on_rcpt); filter_api_on_data(on_data); if (l) filter_api_on_dataline(on_dataline); filter_api_on_eom(on_eom); filter_api_on_reset(on_reset); filter_api_on_disconnect(on_disconnect); filter_api_on_commit(on_commit); filter_api_on_rollback(on_rollback); filter_api_loop(); log_debug("debug: exiting"); return (1); }
int main(int argc, char **argv) { int ch; const char *scriptpath = "/tmp/test.py"; PyObject *name; PyObject *self; PyObject *module; log_init(-1); while ((ch = getopt(argc, argv, "")) != -1) { switch (ch) { default: log_warnx("warn: filter-python: bad option"); return (1); /* NOTREACHED */ } } argc -= optind; argv += optind; setenv("PYTHONPATH", "/tmp", 1); Py_Initialize(); self = Py_InitModule("smtpd", py_methods); PyModule_AddIntConstant(self, "FILTER_OK", FILTER_OK); PyModule_AddIntConstant(self, "FILTER_FAIL", FILTER_FAIL); PyModule_AddIntConstant(self, "FILTER_CLOSE", FILTER_CLOSE); name = PyString_FromString("test"); module = PyImport_Import(name); Py_DECREF(name); if (module == NULL) { PyErr_Print(); log_warnx("warn: filter-python: failed to load %s", scriptpath); return 1; } log_debug("debug: filter-python: starting..."); filter_api_on_connect(on_connect); py_on_connect = PyObject_GetAttrString(module, "on_connect"); if (py_on_connect && PyCallable_Check(py_on_connect)) filter_api_on_connect(on_connect); py_on_helo = PyObject_GetAttrString(module, "on_helo"); if (py_on_helo && PyCallable_Check(py_on_helo)) filter_api_on_helo(on_helo); py_on_mail = PyObject_GetAttrString(module, "on_mail"); if (py_on_mail && PyCallable_Check(py_on_mail)) filter_api_on_mail(on_mail); py_on_rcpt = PyObject_GetAttrString(module, "on_rcpt"); if (py_on_rcpt && PyCallable_Check(py_on_rcpt)) filter_api_on_rcpt(on_rcpt); py_on_data = PyObject_GetAttrString(module, "on_data"); if (py_on_data && PyCallable_Check(py_on_data)) filter_api_on_data(on_data); py_on_eom = PyObject_GetAttrString(module, "on_eom"); if (py_on_eom && PyCallable_Check(py_on_eom)) filter_api_on_eom(on_eom); py_on_commit = PyObject_GetAttrString(module, "on_commit"); if (py_on_commit && PyCallable_Check(py_on_commit)) filter_api_on_commit(on_commit); py_on_rollback = PyObject_GetAttrString(module, "on_rollback"); if (py_on_rollback && PyCallable_Check(py_on_rollback)) filter_api_on_rollback(on_rollback); py_on_dataline = PyObject_GetAttrString(module, "on_dataline"); if (py_on_dataline && PyCallable_Check(py_on_dataline)) filter_api_on_dataline(on_dataline); py_on_disconnect = PyObject_GetAttrString(module, "on_disconnect"); if (py_on_disconnect && PyCallable_Check(py_on_disconnect)) filter_api_on_disconnect(on_disconnect); filter_api_loop(); log_debug("debug: filter-python: exiting"); Py_Finalize(); return (1); }
int main(int argc, char **argv) { int ch; char *path; char *buf; PyObject *self, *code, *module; log_init(-1); while ((ch = getopt(argc, argv, "")) != -1) { switch (ch) { default: log_warnx("warn: filter-python: bad option"); return (1); /* NOTREACHED */ } } argc -= optind; argv += optind; if (argc == 0) errx(1, "missing path"); path = argv[0]; Py_Initialize(); self = Py_InitModule("filter", py_methods); PyModule_AddIntConstant(self, "FILTER_OK", FILTER_OK); PyModule_AddIntConstant(self, "FILTER_FAIL", FILTER_FAIL); PyModule_AddIntConstant(self, "FILTER_CLOSE", FILTER_CLOSE); buf = loadfile(path); code = Py_CompileString(buf, path, Py_file_input); free(buf); if (code == NULL) { PyErr_Print(); log_warnx("warn: filter-python: failed to compile %s", path); return (1); } module = PyImport_ExecCodeModuleEx("myfilter", code, path); if (module == NULL) { PyErr_Print(); log_warnx("warn: filter-python: failed to install module %s", path); return (1); } log_debug("debug: filter-python: starting..."); filter_api_on_connect(on_connect); py_on_connect = PyObject_GetAttrString(module, "on_connect"); if (py_on_connect && PyCallable_Check(py_on_connect)) filter_api_on_connect(on_connect); py_on_helo = PyObject_GetAttrString(module, "on_helo"); if (py_on_helo && PyCallable_Check(py_on_helo)) filter_api_on_helo(on_helo); py_on_mail = PyObject_GetAttrString(module, "on_mail"); if (py_on_mail && PyCallable_Check(py_on_mail)) filter_api_on_mail(on_mail); py_on_rcpt = PyObject_GetAttrString(module, "on_rcpt"); if (py_on_rcpt && PyCallable_Check(py_on_rcpt)) filter_api_on_rcpt(on_rcpt); py_on_data = PyObject_GetAttrString(module, "on_data"); if (py_on_data && PyCallable_Check(py_on_data)) filter_api_on_data(on_data); py_on_eom = PyObject_GetAttrString(module, "on_eom"); if (py_on_eom && PyCallable_Check(py_on_eom)) filter_api_on_eom(on_eom); py_on_commit = PyObject_GetAttrString(module, "on_commit"); if (py_on_commit && PyCallable_Check(py_on_commit)) filter_api_on_commit(on_commit); py_on_rollback = PyObject_GetAttrString(module, "on_rollback"); if (py_on_rollback && PyCallable_Check(py_on_rollback)) filter_api_on_rollback(on_rollback); py_on_dataline = PyObject_GetAttrString(module, "on_dataline"); if (py_on_dataline && PyCallable_Check(py_on_dataline)) filter_api_on_dataline(on_dataline); py_on_disconnect = PyObject_GetAttrString(module, "on_disconnect"); if (py_on_disconnect && PyCallable_Check(py_on_disconnect)) filter_api_on_disconnect(on_disconnect); filter_api_loop(); log_debug("debug: filter-python: exiting"); Py_Finalize(); return (1); }