Make Bogofilter register incoming emails; comment out redundant section

master
Thor 3 years ago
parent 481da73b16
commit 025898f437
  1. 9
      include/popen2.hpp
  2. 25
      src/bogofilter-smtpd.cpp
  3. 43
      src/popen2.cpp

@ -0,0 +1,9 @@
#ifndef _POPEN2
#define _POPEN2
#include <cstdio>
// Like popen(), but returns two FILE*: child's stdin and stdout, respectively.
std::pair<FILE *, FILE *> popen2(const char *command);
#endif

@ -64,7 +64,7 @@ void on_data_line(protocol::protocol_t& protocol, protocol::message_t message) {
}
if(data_line == ".") {
FILE* f = popen("bogofilter -v 1>&2", "w");
FILE* f = popen("bogofilter -vu 1>&2", "w");
for(string& line : session.message.header) {
fprintf(f, "%s\n", line.c_str());
}
@ -102,27 +102,6 @@ void on_commit(protocol::protocol_t& protocol, protocol::message_t message) {
auto session_token = protocol::session_token_from(message);
try {
auto& session = sessions.at(session_key);
/*
switch(session.status) {
case mail::status::SPAM:
debug && cerr << "Classified as spam" << endl;
protocol.junk(session_key, session_token);
break;
case mail::status::HAM:
case mail::status::UNSURE:
debug && cerr << "Classified as ham or unsure" << endl;
protocol.proceed(session_key, session_token);
break;
case mail::status::ERROR:
debug && cerr << "Bogofilter error" << endl;
protocol.fail(session_key, session_token);
break;
}
*/
protocol.proceed(session_key, session_token);
} catch(out_of_range& e) {
cerr << "Unknown session key from SMTPD" << endl;
@ -154,4 +133,4 @@ int main(int argc, char** argv) {
protocol.run();
return 0;
}
}

@ -0,0 +1,43 @@
#ifndef _POPEN2
#define _POPEN2
#include <popen2.hpp>
#include <unistd.h>
#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <utility>
// Like popen(), but returns two FILE*: child's stdin and stdout, respectively.
std::pair<FILE *, FILE *> popen2(const char *command) {
// pipes[0]: parent writes, child reads (child's stdin)
// pipes[1]: child writes, parent reads (child's stdout)
int pipes[2][2];
pipe(pipes[0]);
pipe(pipes[1]);
if (fork() > 0) {
// parent
close(pipes[0][0]);
close(pipes[1][1]);
return {fdopen(pipes[0][1], "w"), fdopen(pipes[1][0], "r")};
} else {
// child
close(pipes[0][1]);
close(pipes[1][0]);
dup2(pipes[0][0], STDIN_FILENO);
dup2(pipes[1][1], STDOUT_FILENO);
execl("/bin/sh", "/bin/sh", "-c", command, NULL);
exit(1);
}
}
#endif
Loading…
Cancel
Save