summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Denker <jsd@av8n.com>2012-11-22 23:34:11 (GMT)
committerJohn Denker <jsd@av8n.com>2012-11-22 23:34:11 (GMT)
commit174d2e3ae49ed3776449d3dade24cebee304bfb5 (patch)
tree3102d8246737df2e3cd36e423b4ee424fe419a36
parente1d2c30b9d7c08b658464e3db4bf48d5fe52cf5e (diff)
move argParser to utils.h
-rw-r--r--tools/libltgrey.c7
-rw-r--r--tools/ltgrey.c84
-rw-r--r--tools/utils.h44
3 files changed, 80 insertions, 55 deletions
diff --git a/tools/libltgrey.c b/tools/libltgrey.c
index 8ae374c..827dcee 100644
--- a/tools/libltgrey.c
+++ b/tools/libltgrey.c
@@ -368,9 +368,9 @@ int whatsit::set_rep(const string mid, const int shift){
return set_box(box_rep, mid, shift);
}
-int whatsit::set_box(const boxer box, const string mid, const int shift){
+int whatsit::set_box(const boxer box, const string ID, const int shift){
string fname = parent_dir + "/" + box.dir
- + "/mid_" + purify(mid);
+ + "/" + box.prefix + purify(ID);
//xxx cerr << ".... " << fname << endl;
int fd = creat(fname.c_str(), 0644);
if (fd < 0){
@@ -413,6 +413,9 @@ void whatsit::scan_box(const boxer mybox, const int copies){
using namespace boost::filesystem;
string mydir = parent_dir + "/" + mybox.dir;
+ cerr << "scan_box: scanning " << mydir
+ << " prefix: " << mybox.prefix
+ << endl;
if (is_directory(mydir)) {
for (directory_iterator itr(mydir); itr!=directory_iterator(); ++itr) {
diff --git a/tools/ltgrey.c b/tools/ltgrey.c
index 577cbe9..85604e5 100644
--- a/tools/ltgrey.c
+++ b/tools/ltgrey.c
@@ -2,8 +2,8 @@
#include <stdlib.h> /* for exit(), atoi() */
#include "libltgrey.h"
-#include "utils.h"
#include "qq_exit_codes.h"
+#include "utils.h"
#include <list>
using namespace std;
@@ -12,45 +12,6 @@ string progname;
#define exeunt exit
-typedef const char cc;
-typedef cc* str;
-
-class argParser{
-public:
- list<str> argv;
- string current_arg;
-
- argParser(const int _argc, const str _argv[])
- {
- for (int ii=0; ii < _argc; ii++) {
- argv.push_back(_argv[ii]);
- }
- }
- string shift() {
- string rslt = argv.front();
- argv.pop_front();
- return rslt;
- }
- void next(){
- current_arg = shift();
- }
- size_t size() const {
- return argv.size();
- }
- int prefix(const string longer, const size_t required = 0){
- if (argv.size() < required) {
- if (required==1)
- cerr << "Option '" << current_arg
- << "' requires an argument." << endl;
- else
- cerr << "Option '" << current_arg
- << "' requires " << required << " arguments." << endl;
- exeunt(ex_syserr);
- }
- return current_arg == longer.substr(0, current_arg.length());
- }
-};
-
void usage(const string parent_dir){
cout <<
"Usage: ltgrey [options]\n"
@@ -58,10 +19,10 @@ void usage(const string parent_dir){
"Options include\n"
" -scan40 # scan the quarantine directory\n"
" -scanrep # scan the reputation directory\n"
-" -copy # no idea\n"
+" -copy # increment the 'copies' variable\n"
" -verbose # increase the verbosity\n"
-" -setrep mid # set the reputation for the given message-id\n"
-" -getrep mid # look up the reputation\n"
+" -setrep dom # set the reputation for the given domain\n"
+" -getrep dom # look up the reputation for the given domain\n"
" -shift ??? # no idea\n"
" -stain ??? # not implemented\n"
" -suffix ??? # no idea\n"
@@ -72,6 +33,20 @@ void usage(const string parent_dir){
cout << "parent dir is " << parent_dir << endl;
cout << "box_40.dir is " << box_40.dir << endl;
cout << "box_rep.dir is " << box_rep.dir << endl;
+
+ cout <<
+"\n"
+"Principles of operation:\n"
+"\n"
+"1) Quarantine applies to a particular message. Messages\n"
+" are identified by their MID i.e. message-ID.\n"
+"\n"
+"2a) Ideally, reputation applies to a sending-domain.\n"
+"\n"
+"2b) If we can't identify a domain that will take responsibility\n"
+" for sending the message, then reputation applies to the host.\n"
+;
+ return;
}
int main(int _argc, char** _argv){
@@ -100,11 +75,11 @@ int main(int _argc, char** _argv){
int dns_mode(0);
string get_40_mid;
string set_40_mid;
- string get_rep_mid;
- string set_rep_mid;
+ string get_rep_domain;
+ string set_rep_domain;
argParser ARGS(argc, argv);
- while (ARGS.size()) {
+ try {while (ARGS.size()) {
ARGS.next();
if (0){
} else if (ARGS.prefix("-help")) {
@@ -125,9 +100,9 @@ int main(int _argc, char** _argv){
} else if (ARGS.prefix("-set40", 1)) {
set_40_mid = ARGS.shift();
} else if (ARGS.prefix("-setrep", 1)) {
- set_rep_mid = ARGS.shift();
+ set_rep_domain = ARGS.shift();
} else if (ARGS.prefix("-getrep", 1)) {
- get_rep_mid = ARGS.shift();
+ get_rep_domain = ARGS.shift();
} else if (ARGS.prefix("-shift"), 1) {
shift = atoi(*argv++); argc--;
} else if (ARGS.prefix("-stain", 1)) {
@@ -137,8 +112,11 @@ int main(int _argc, char** _argv){
foo.suffix += ARGS.shift();
} else {
cerr << "Unrecognized arg: " << ARGS.current_arg << endl;
- exeunt(ex_syserr);
+ throw int(1);
}
+ }}
+ catch (int){
+ exeunt(ex_syserr);
}
// dns_mode mode ...
@@ -160,14 +138,14 @@ int main(int _argc, char** _argv){
return foo.set_40(set_40_mid, shift);
}
- if (get_rep_mid.length()){
- box_state rslt = foo.get_rep(get_rep_mid);
+ if (get_rep_domain.length()){
+ box_state rslt = foo.get_rep(get_rep_domain);
cerr << foo.decode_40[rslt] << endl;
return 0;
}
- if (set_rep_mid.length()){
- return foo.set_rep(set_rep_mid, shift);
+ if (set_rep_domain.length()){
+ return foo.set_rep(set_rep_domain, shift);
}
if (scan40mode) {
diff --git a/tools/utils.h b/tools/utils.h
index 2c531b8..4f5418f 100644
--- a/tools/utils.h
+++ b/tools/utils.h
@@ -1,3 +1,6 @@
+#include <string>
+#include <list>
+
std::string basename(const std::string path);
int prefix(const std::string shorter, const std::string longer);
std::string time_out(const int _ttt);
@@ -12,3 +15,44 @@ std::string rtrim(const std::string foo,
std::string trim(const std::string foo,
const std::string strip = " \t\r\n");
+
+typedef const char cc;
+typedef cc* str;
+
+class argParser{
+public:
+ std::list<str> argv;
+ std::string current_arg;
+
+ argParser(const int _argc, const str _argv[])
+ {
+ for (int ii=0; ii < _argc; ii++) {
+ argv.push_back(_argv[ii]);
+ }
+ }
+ std::string shift() {
+ using namespace std;
+ string rslt = argv.front();
+ argv.pop_front();
+ return rslt;
+ }
+ void next(){
+ current_arg = shift();
+ }
+ size_t size() const {
+ return argv.size();
+ }
+ int prefix(const std::string longer, const size_t required = 0){
+ using namespace std;
+ if (argv.size() < required) {
+ if (required==1)
+ cerr << "Option '" << current_arg
+ << "' requires an argument." << endl;
+ else
+ cerr << "Option '" << current_arg
+ << "' requires " << required << " arguments." << endl;
+ throw int(1);
+ }
+ return current_arg == longer.substr(0, current_arg.length());
+ }
+};