summaryrefslogtreecommitdiff
path: root/src/kbs.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/kbs.c')
-rw-r--r--src/kbs.c128
1 files changed, 94 insertions, 34 deletions
diff --git a/src/kbs.c b/src/kbs.c
index 25afe5f..f5f3aab 100644
--- a/src/kbs.c
+++ b/src/kbs.c
@@ -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 */