There are a couple of issues with the current cssclean. The temp css file is forced to /tmp and then a rename is used. This fails when the css storage is on a separate filesystem from /tmp. Also, cssclean re-initializes the header counters thus causing dspam to return to training mode even though there is a good history remaining. The following changes are proposed to cssclean: 1. Save the temp css file in the same directory as the real css file. The temp file has the name PID.css so it will not conflict with any other file name. 2. Copy the css header from the old file to the new file. I am attaching a patch file with those changes. It is based on 3.6.4 as thats what I have currently running, but I don't see any indications of updates to cssclean in the later releases so I believe its valid. There is a presumption that bcopy is properly handled in the configuration setup. --- cssclean.c.orig Thu Jul 6 15:41:41 2006 +++ cssclean.c Thu Jul 6 16:03:53 2006 @@ -124,7 +124,7 @@ if (READ_ATTRIB("HashMaxSeek")) max_seek = strtol(READ_ATTRIB("HashMaxSeek"), NULL, 0); - snprintf(newfile, sizeof(newfile), "/tmp/%u.css", (unsigned int) getpid()); + snprintf(newfile, sizeof(newfile), "%s/%u.css", dirname(filename), (unsigned int) getpid()); if (_hash_drv_open(filename, &old, 0, max_seek, max_extents, extent_size, flags)) @@ -160,6 +160,7 @@ filepos += sizeof(struct _hash_drv_header); } + bcopy (old.header, new.header, sizeof(struct _hash_drv_header)); _hash_drv_close(&new); _hash_drv_close(&old); rename(newfile, filename);