diff options
Diffstat (limited to 'src/kbs.c')
-rw-r--r-- | src/kbs.c | 128 |
1 files changed, 94 insertions, 34 deletions
@@ -35,32 +35,23 @@ static const char id[]="$Id$"; #include "config.h" #include "pop3.h" #include "dbase.h" +#include "dstring.h" #include "util.h" -/* ---------------------------------------- MACROS -*/ -#define LOG (logfp ? logfp:stderr) - - -/* ---------------------------------------- TYPES -*/ - - -/* ---------------------------------------- GLOBALS -*/ -static const char *name=NULL; -static FILE *logfp=NULL; - /* ---------------------------------------- PROTOS */ +static void Log(FILE *fp, const char *fmt, ...); /* ---------------------------------------- MAIN */ int main(int argc, char *argv[]) { + FILE *fp; + const char *name; POP3Message *msg; + int f; if (strchr(argv[0],'/')) name=strchr(argv[0],'/')+1; @@ -69,7 +60,7 @@ int main(int argc, char *argv[]) if (!ConfigLoad()) { - fprintf(stderr,"%s\n",ConfigError()); + fprintf(stderr,"%s: %s\n",name,ConfigError()); exit(EXIT_FAILURE); } @@ -83,22 +74,23 @@ int main(int argc, char *argv[]) break; case POP3_COMMERROR: - fprintf(LOG,"Comms error (errno = %d)\n",errno); + fprintf(stderr,"%s: Comms error (errno = %d)\n",name,errno); exit(EXIT_FAILURE); break; case POP3_NOCONNECT: - fprintf(LOG,"No connection to host (errno = %d)\n",errno); + fprintf(stderr,"%s: No connection " + "to host (errno = %d)\n",name,errno); exit(EXIT_FAILURE); break; case POP3_BADUSER: - fprintf(LOG,"Bad username\n"); + fprintf(stderr,"%s: Bad username\n",name); exit(EXIT_FAILURE); break; case POP3_BADPASSWD: - fprintf(LOG,"Bad password\n"); + fprintf(stderr,"%s: Bad password\n",name); exit(EXIT_FAILURE); break; @@ -106,42 +98,110 @@ int main(int argc, char *argv[]) break; } + + if (strcmp(ConfigString(CONFIG_LOG),"-")!=0) + { + if (!(fp=fopen(ConfigString(CONFIG_LOG),"a"))) + { + DString ds; + + ds=DSInit(); + + if (getenv("HOME")) + DSAddCP(ds,getenv("HOME")); + else + DSAddChar(ds,'.'); + + DSAddCP(ds,"/.kbs-deletelog"); + + if (!(fp=fopen(ds->text,"a"))) + fp=stderr; + } + } + else + { + fp=NULL; + } + if ((msg=POP3GetList())) { - int f; int tot=0; - int block=0; + int del=0; for(f=0;msg[f].to;f++) { tot++; - printf("Num %d\n",msg[f].id); - printf(" From : %s@%s\n",msg[f].from_uname,msg[f].from_domain); - printf(" Subject : %s\n",msg[f].subject); - + if (DBBlockMessage(msg+f)) { - printf(" BLOCKED : YES\n\n"); - block++; + del++; + + if (ConfigInt(CONFIG_VERBOSE)) + { + Log(fp,"-----\n"); + Log(fp,"From %s@%s\n",msg[f].from_uname, + msg[f].from_domain); + Log(fp,"Subject %.40s\n",msg[f].subject); + } + else + { + Log(fp,"%s@%s\n",msg[f].from_uname,msg[f].from_domain); + } + + if (!ConfigInt(CONFIG_TESTMODE)) + { + POP3Delete(msg[f].id); + } } - else - printf(" BLOCKED : NO\n\n"); } - printf("%d messages, %d blocked\n",tot,block); + if (ConfigInt(CONFIG_VERBOSE)) + { + Log(fp,"*****\n"); + Log(fp,"Processed %d messages, %sdeleted %d\n", + tot,ConfigInt(CONFIG_TESTMODE) ? "would have ":"",del); + } POP3FreeList(msg); } - else + + POP3Logoff(); + + if (fp && fp!=stderr) { - printf("No messages\n"); + fclose(fp); } return EXIT_SUCCESS; } -/* ---------------------------------------- UTIL -*/ +static void Log(FILE *fp, const char *fmt,...) +{ + char buff[128]; + time_t t; + struct tm *ts; + + if (!fp) + return; + + t=time(NULL); + ts=localtime(&t); + + strftime(buff,sizeof buff, + "%Y-%m-%d %H:%M:%S: ", + ts); + + + fprintf(fp,"%s",buff); + + va_list va; + va_start(va,fmt); + + vfprintf(fp,fmt,va); + + va_end(va); +} + /* END OF FILE */ |