Hi!

Sorry.

Emilio Lucena

--- spamdb.c.orig       Sat May 17 07:48:06 2008
+++ spamdb.c            Mon Jul 18 08:04:29 2011
@@ -39,10 +39,10 @@
 #define SPAMTRAP 2
 
 int    dblist(DB *);
-int    dbupdate(DB *, char *, int, int);
+int    dbupdate(DB *, char *, int, int, time_t);
 
 int
-dbupdate(DB *db, char *ip, int add, int type)
+dbupdate(DB *db, char *ip, int add, int type, time_t exp)
 {
        DBT             dbk, dbd;
        struct gdata    gd;
@@ -97,10 +97,10 @@
                        switch (type) {
                        case WHITE:
                                gd.pass = now;
-                               gd.expire = now + WHITEEXP;
+                               gd.expire = now + exp;
                                break;
                        case TRAPHIT:
-                               gd.expire = now + TRAPEXP;
+                               gd.expire = now + exp;
                                gd.pcount = -1;
                                break;
                        case SPAMTRAP:
@@ -139,10 +139,10 @@
                        switch (type) {
                        case WHITE:
                                gd.pass = now;
-                               gd.expire = now + WHITEEXP;
+                               gd.expire = now + exp;
                                break;
                        case TRAPHIT:
-                               gd.expire = now + TRAPEXP;
+                               gd.expire = now + exp;
                                gd.pcount = -1;
                                break;
                        case SPAMTRAP:
@@ -261,7 +261,7 @@
 static int
 usage(void)
 {
-       fprintf(stderr, "usage: %s [[-Tt] -a keys] [[-Tt] -d keys]\n", 
__progname);
+       fprintf(stderr, "usage: %s [[-Tt] -x hours -a keys] [[-Tt] -d keys]\n", 
__progname);
        exit(1);
        /* NOTREACHED */
 }
@@ -270,10 +270,12 @@
 main(int argc, char **argv)
 {
        int i, ch, action = 0, type = WHITE, r = 0, c = 0;
+       time_t exp = 0;
        HASHINFO        hashinfo;
        DB              *db;
+       const char *errstr;
 
-       while ((ch = getopt(argc, argv, "adtT")) != -1) {
+       while ((ch = getopt(argc, argv, "adtTx:")) != -1) {
                switch (ch) {
                case 'a':
                        action = 1;
@@ -287,6 +289,14 @@
                case 'T':
                        type = SPAMTRAP;
                        break;
+                case 'x':
+                       /* limit exp to 2160 hours (90 days) */
+                       exp = strtonum(optarg, 1, (24 * 90), &errstr);
+                       if (errstr)
+                               usage();
+                       /* convert to seconds from hours */
+                       exp *= (60 * 60);
+                       break;
                default:
                        usage();
                        break;
@@ -294,7 +304,7 @@
        }
        argc -= optind;
        argv += optind;
-       if (action == 0 && type != WHITE)
+       if ((action == 0 && type != WHITE) || (action != 1 && exp != 0))
                usage();
        
        memset(&hashinfo, 0, sizeof(hashinfo));
@@ -314,10 +324,12 @@
        case 0:
                return dblist(db);
        case 1:
+               if (exp == 0) 
+                       exp = type ? TRAPEXP : WHITEEXP;
                for (i=0; i<argc; i++)
                        if (argv[i][0] != '\0') {
                                c++;
-                               r += dbupdate(db, argv[i], 1, type);
+                               r += dbupdate(db, argv[i], 1, type, exp);
                        }
                if (c == 0)
                        errx(2, "no addresses specified");
@@ -326,7 +338,7 @@
                for (i=0; i<argc; i++)
                        if (argv[i][0] != '\0') {
                                c++;
-                               r += dbupdate(db, argv[i], 0, type);
+                               r += dbupdate(db, argv[i], 0, type, exp);
                        }
                if (c == 0)
                        errx(2, "no addresses specified");

Reply via email to