summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Denker <jsd@av8n.com>2012-07-20 17:02:38 -0700
committerJohn Denker <jsd@av8n.com>2012-07-20 17:02:38 -0700
commite6056a8ac7a8e843549e163a29d5545f6c97b8f7 (patch)
tree2e26153cb5670993224836367c46fe7dd3f3ee57
parentc4741c59ea5c65dde44a3ec7ac5464709fe42cae (diff)
more regularization of reporting
-rw-r--r--tools/filters.conf2
-rw-r--r--tools/greylist.c41
-rw-r--r--tools/hi-q.c41
-rw-r--r--tools/hi-test2.conf2
4 files changed, 58 insertions, 28 deletions
diff --git a/tools/filters.conf b/tools/filters.conf
index 3ef7524..9342441 100644
--- a/tools/filters.conf
+++ b/tools/filters.conf
@@ -4,4 +4,4 @@ stub /var/qmail/bin/greylist
sa /usr/local/bin/spamc -Y 0 -s 1000000
qq /var/qmail/bin/qmail-queue
-postspam /var/qmail/bin/greylist -penalize 86400
+postspam /var/qmail/bin/greylist -suffix (post) -penalize 86400
diff --git a/tools/greylist.c b/tools/greylist.c
index d1ff1a4..465a78e 100644
--- a/tools/greylist.c
+++ b/tools/greylist.c
@@ -88,6 +88,8 @@ public:
string hostname;
int mod_age;
int ac_age;
+ string suffix;
+ string progid;
whatsit(const string name, const string _dirname)
: dirname(_dirname), progname(name), mypid(getpid()), mod_age(0), ac_age(0)
@@ -98,8 +100,16 @@ public:
// access comes after modification:
void update(const string msg, const timeval new_mod,
const timeval new_ac, const int penalty=0);
+ void bind();
};
+void whatsit::bind(){
+ stringstream foo;
+ foo << progname << suffix
+ << "[" << mypid << "]";
+ progid = foo.str();
+}
+
string time_out(const int _ttt){
int ttt(abs(_ttt));
int sec(ttt % 60);
@@ -120,7 +130,7 @@ string time_out(const int _ttt){
return foo.str();
}
-void scan(const string p, const int copies=1){
+void scan(const string progid, const string p, const int copies=1){
timeval now;
gettimeofday(&now, NULL);
using namespace boost::filesystem;
@@ -136,7 +146,7 @@ void scan(const string p, const int copies=1){
string fn = p + "/" + basename;
int rslt = stat(fn.c_str(), &mystat);
if (rslt != 0){
- cerr << progname << ": stat failed for '"
+ cerr << progid << ": stat failed for '"
<< fn << "' : ";
perror(0);
}
@@ -175,7 +185,7 @@ void scan(const string p, const int copies=1){
void whatsit::update(const string msg, const timeval new_mod,
const timeval new_ac, const int penalty){
- cerr << progname << ": "
+ cerr << progid << ": "
<< msg << ": " << ipbase;
if (hostname.length()) cerr << " " << hostname;
cerr << " mod_age: " << time_out(mod_age)
@@ -195,7 +205,6 @@ void whatsit::update(const string msg, const timeval new_mod,
}
int main(int _argc, char** _argv){
- progname = *_argv;
mypid = getpid();
int argc(_argc);
char** argv(_argv);
@@ -217,13 +226,21 @@ int main(int _argc, char** _argv){
exeunt(ex_syserr);
}
penalty = 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);
}
}
+ foo.bind();
+
if (scanmode) {
- scan(dirname, copies);
+ scan(foo.progid, dirname, copies);
return 0;
}
@@ -233,8 +250,7 @@ int main(int _argc, char** _argv){
int whatsit::doit(const int penalty){
char* ipvar = getenv("TCPREMOTEIP");
if (!ipvar) {
- cerr << progname
- << "[" << mypid << "] "
+ cerr << progid
<< " TCPREMOTEIP not set???" << endl;
// should never happen
// although you can make it happen using a weird test-harness
@@ -243,8 +259,7 @@ int whatsit::doit(const int penalty){
ipbase = ipvar;
char* hostvar = getenv("TCPREMOTEHOST");
if (!hostvar) {
- cerr << progname
- << "[" << mypid << "] "
+ cerr << progid
<< " from " << ipbase
<< " ... TCPREMOTEHOST not set???" << endl;
exeunt(ex_spam);
@@ -257,13 +272,13 @@ int whatsit::doit(const int penalty){
int rslt = stat(dirname.c_str(), &dirstat);
if (rslt != 0){
if (errno != ENOENT) {
- cerr << progname << ": stat failed for '"
+ cerr << progid << ": stat failed for '"
<< dirname << "' : ";
perror(0);
}
rslt = mkdir(dirname.c_str(), 0755);
if (rslt != 0) {
- cerr << progname
+ cerr << progid
<< "uid " << getuid()
<< ": mkdir failed for '"
<< dirname << "' : ";
@@ -277,14 +292,14 @@ int whatsit::doit(const int penalty){
rslt = stat(ipname.c_str(), &ipstat);
if (rslt != 0){
if (errno != ENOENT) {
- cerr << progname << ": stat failed for '"
+ cerr << progid << ": stat failed for '"
<< ipname << "' : ";
perror(0);
}
ofstream foo;
int fd = creat(ipname.c_str(), 0644);
if (fd < 0){
- cerr << progname << ": create failed for '"
+ cerr << progid << ": create failed for '"
<< ipname << "' : ";
perror(0);
}
diff --git a/tools/hi-q.c b/tools/hi-q.c
index f6b57e1..26e67a7 100644
--- a/tools/hi-q.c
+++ b/tools/hi-q.c
@@ -258,12 +258,11 @@ void usage() {
string progname;
pid_t mypid;
+string progid;
void dump(const string var){
char* str = getenv(var.c_str());
- cerr << progname
- << "[" << mypid << "] "
- << var;
+ cerr << progid << var;
if (str) cerr << " is set to '" << str << "'" << endl;
else cerr << " is not set." << endl;
}
@@ -276,8 +275,16 @@ int xclose(int arg){
extern char** environ;
int main(int argc, char** argv) {
- progname = *argv;
- mypid = getpid();
+ {
+ progname = *argv;
+ mypid = getpid();
+ string shortname = progname;
+ size_t where = shortname.rfind("/");
+ if (where != string::npos) shortname = shortname.substr(1+where);
+ stringstream binder;
+ binder << shortname << "[" << mypid << "]";
+ progid = binder.str();
+ }
#define foo(name, num) codemap[num] = #name ;
bar
@@ -649,14 +656,18 @@ bar
exword = foo.str();
}
}
- cerr << "hi-q concludes: kid[" << kidno << "]"
- << " pid " << argbest_blame
- << " i.e. '" << filter[kidno].cmd[0] << "'"
+ cerr << progid
+ << " concludes: kid[" << kidno << "]"
+ << " i.e. " << filter[kidno].cmd[0]
+ << "[" << argbest_blame << "]"
<< " reports " << exword << endl;
exeunt(excode);
} else if (WIFSIGNALED(best_blame)) {
int sig = WTERMSIG(best_blame);
- cerr << "hi-q says: kid " << argbest_blame
+ cerr << progid
+ << " concludes: kid[" << kidno << "]"
+ << " i.e. " << filter[kidno].cmd[0]
+ << "[" << argbest_blame << "]"
<< " was killed by signal " << sig
<< endl;
// if the *best* blame is a kill, that's not normal
@@ -677,14 +688,18 @@ bar
waitpid(special_pid, &kidstatus, WUNTRACED);
if (WIFEXITED(kidstatus)) {
int sts = WEXITSTATUS(kidstatus);
- cerr << "hi-q says: qq program " << kidpid[nkids-1]
- << " i.e. '" << filter[nkids-1].cmd[0] << "'"
+ cerr << progid
+ << " says: qq program"
+ << " i.e. " << filter[nkids-1].cmd[0]
+ << "[" << kidpid[nkids-1] << "]"
<< " returned status " << sts
<< endl;
return sts;
} else if (WIFSIGNALED(kidstatus)) {
- cerr << "hi-q says: qq program " << kidpid[nkids-1]
- << " i.e. '" << filter[nkids-1].cmd[0] << "'"
+ cerr << progid
+ << " says: qq program"
+ << " i.e. " << filter[nkids-1].cmd[0]
+ << "[" << kidpid[nkids-1] << "]"
<< " was killed by signal " << WTERMSIG(kidstatus)
<< endl;
return ex_syserr;
diff --git a/tools/hi-test2.conf b/tools/hi-test2.conf
index 51d0361..90997b4 100644
--- a/tools/hi-test2.conf
+++ b/tools/hi-test2.conf
@@ -1,6 +1,6 @@
stub hi-test x0 -snooze 2
stub hi-test x0 -snooze 1 -exit 0
-stub greylist
+stub greylist -suffix (sfx)
qq hi-test x1 -snooze 3 -exit 3
postspam /bin/echo post spam !