#include #include /* for exit(), atoi() */ #include "libltgrey.h" #include "utils.h" #include "qq_exit_codes.h" using namespace std; pid_t mypid; string progname; #define exeunt exit int main(int _argc, char** _argv){ mypid = getpid(); int argc(_argc); char** argv(_argv); const string parent_dir("/var/qmail/ltgrey"); whatsit foo(argv[0], parent_dir); argc--; argv++; if (foo.setup()) return ex_syserr; int rslt; rslt = foo.maybe_mkdir(".", "parent dir"); if (rslt) return rslt; rslt = foo.maybe_mkdir(box_40.dir, "quarantine dir"); if (rslt) return rslt; rslt = foo.maybe_mkdir(box_rep.dir, "reputation dir"); if (rslt) return rslt; int scan40mode(0); int scanrepmode(0); int copies(1); int shift(0); int stain(0); int dns_mode(0); string get_40_mid; string set_40_mid; string get_rep_mid; string set_rep_mid; while (argc > 0) { string arg = argv[0]; argc--; argv++; if (0){ } else if (prefix(arg, "-scan40")) { scan40mode++; } else if (prefix(arg, "-scanrep")) { scanrepmode++; } else if (prefix(arg, "-copy")) { copies++; } else if (prefix(arg, "-verbose")) { foo.verbosity++; } else if (prefix(arg, "-dns_mode")) { dns_mode++; } else if (prefix(arg, "-get40")) { if (!argc){ cerr << "Option '" << arg << "' requires an argument" << endl; exeunt(ex_syserr); } get_40_mid = *argv++; argc--; } else if (prefix(arg, "-set40")) { if (!argc){ cerr << "Option '" << arg << "' requires an argument" << endl; exeunt(ex_syserr); } set_40_mid = *argv++; argc--; } else if (prefix(arg, "-setrep")) { if (!argc){ cerr << "Option '" << arg << "' requires an argument" << endl; exeunt(ex_syserr); } set_rep_mid = *argv++; argc--; } else if (prefix(arg, "-getrep")) { if (!argc){ cerr << "Option '" << arg << "' requires an argument" << endl; exeunt(ex_syserr); } get_rep_mid = *argv++; argc--; } else if (prefix(arg, "-shift") || prefix(arg, "-shift")) { if (!argc){ cerr << "Option '" << arg << "' requires an argument" << endl; exeunt(ex_syserr); } shift = atoi(*argv++); argc--; } else if (prefix(arg, "-stain")) { if (!argc){ cerr << "Option '" << arg << "' requires an argument" << endl; exeunt(ex_syserr); } stain = atoi(*argv++); argc--; } else if (prefix(arg, "-suffix")) { if (!argc){ cerr << "Option '" << arg << "' requires an argument" << endl; exeunt(ex_syserr); } foo.suffix += *argv++; argc--; } else { cerr << "Unrecognized arg: " << arg << endl; exeunt(ex_syserr); } } // dns_mode mode ... // Probably it would be better to make more thorough DNS checks. // if (dns_mode) { char* ipvar = getenv("TCPREMOTEIP"); char* namevar = getenv("TCPREMOTEHOST"); exeunt(foo.check_dns(ipvar, namevar)); } if (get_40_mid.length()){ box_state rslt = foo.get_40(get_40_mid); cerr << foo.decode_40[rslt] << endl; return 0; } if (set_40_mid.length()){ return foo.set_40(set_40_mid, shift); } if (get_rep_mid.length()){ box_state rslt = foo.get_rep(get_rep_mid); cerr << foo.decode_40[rslt] << endl; return 0; } if (set_rep_mid.length()){ return foo.set_rep(set_rep_mid, shift); } if (scan40mode) { foo.scan_box(box_40, copies); return 0; } if (scanrepmode) { foo.scan_box(box_rep, copies); return 0; } int sts = foo.doit(shift, stain); return sts; }