solomon (06/04/82)
I just discovered that "expire" hasn't been removing old news items on our machine since I installed version 2.6 news (about April 26). On investigating more fully, I found what appears to be a glaring bug in expire. If the article itself has no explicit expiration date, expire treats it as if its expiration date was expincr (default: 14 days) from NOW. Thus, of course, it never thinks the article is ready to expire. This bug is so obvious and sure to fail that I feel like I must be overlooking something obvious. Otherwise lots of other people would have been complaining by now. (Specifying -i or -I doesn't help). Anyhow, a simple fix made my expire work, and I just cleaned up over 2800 articles! I have ended this note with the fix. It is, however, just a kludge. (Note, for example, that the variable "newtime" is now unused.) Somebody who understands this software better should do it right. *** orig/expire.c Fri Jun 4 07:53:20 1982 --- expire.c Fri Jun 4 09:15:06 1982 *************** *** 1,3 /* * expire - expire daemon runs around and nails all articles that * have expired. --- 1,4 ----- + #define UWVAX 1 /* * expire - expire daemon runs around and nails all articles that * have expired. *************** *** 4,9 */ static char *SccsId = "@(#) expire.c 2.8 4/20/82"; #include "params.h" --- 5,18 ----- */ static char *SccsId = "@(#) expire.c 2.8 4/20/82"; + #ifdef UWVAX + /* WARNING: local mods have been added, so line numbers may not + * match the standard distributed version + * + * Fixed by solomon, 6/4/82, to deal correctly with articles missing an + * "Expires:" field. + */ + #endif #include "params.h" *************** *** 133,138 continue; } h.exptime = cgtdate(h.expdate); if (!h.expdate[0] || ignorexp==2 || (ignorexp==1 && newtime < h.exptime)) h.exptime = newtime; --- 142,155 ----- continue; } h.exptime = cgtdate(h.expdate); + #ifdef UWVAX + if (!h.recdate[0]) { + if (verbose) + printf("No expiration or reception date on %s.\n", + filename); + fclose(fp); + continue; + } if (!h.expdate[0] || ignorexp==2 || (ignorexp==1 && newtime < h.exptime)) { h.rectime = cgtdate(h.recdate); *************** *** 134,139 } h.exptime = cgtdate(h.expdate); if (!h.expdate[0] || ignorexp==2 || (ignorexp==1 && newtime < h.exptime)) h.exptime = newtime; if (now >= h.exptime) { --- 151,162 ----- continue; } if (!h.expdate[0] || ignorexp==2 || + (ignorexp==1 && newtime < h.exptime)) { + h.rectime = cgtdate(h.recdate); + h.exptime = h.rectime+expincr; + } + #else UWVAX + if (!h.expdate[0] || ignorexp==2 || (ignorexp==1 && newtime < h.exptime)) h.exptime = newtime; #endif UWVAX *************** *** 136,141 if (!h.expdate[0] || ignorexp==2 || (ignorexp==1 && newtime < h.exptime)) h.exptime = newtime; if (now >= h.exptime) { #ifdef DEBUG printf("cancel %s\n", filename); --- 159,165 ----- if (!h.expdate[0] || ignorexp==2 || (ignorexp==1 && newtime < h.exptime)) h.exptime = newtime; + #endif UWVAX if (now >= h.exptime) { #ifdef DEBUG printf("cancel %s\n", filename); Marvin Solomon (...!harpo!uwvax!solomon or solomon@uwisc)
mark (06/06/82)
Marvin Solomon's bug fix is correct and indeed there are two serious bugs in the 2.6 expire. They are fixed in 2.7, which will be out shortly. In the meantime, if you do install his fix, be sure you keep the old one around so you can update to 2.7 easily. Mark