git-svn-id: file:///var/lib/svn/clamav-devel/trunk/clamav-devel@927 77e5149b-7576-45b1-b177-96237e5ba77b
| ... | ... |
@@ -1,3 +1,10 @@ |
| 1 |
+Sat Sep 25 16:48:18 BST 2004 (njh) |
|
| 2 |
+---------------------------------- |
|
| 3 |
+ * clamav-milter: Didn't compile with some older Linuxes |
|
| 4 |
+ Honour LogFacility |
|
| 5 |
+ When sanitising the quarantine's filename, don't |
|
| 6 |
+ sanitise the directory name as well |
|
| 7 |
+ |
|
| 1 | 8 |
Fri Sep 24 09:14:44 BST 2004 (trog) |
| 2 | 9 |
----------------------------------- |
| 3 | 10 |
* libclamav/filetypes.c: Add more HTML markers |
| ... | ... |
@@ -117,9 +117,9 @@ I suggest putting SpamAssassin first since you're more likely to get spam |
| 117 | 117 |
than a virus/worm sent to you. |
| 118 | 118 |
|
| 119 | 119 |
Add to /etc/sysconfig/clamav-milter |
| 120 |
- CLAMAV_FLAGS="--max-children=2 local:/var/run/clamav/clmilter.sock" |
|
| 120 |
+ CLAMAV_FLAGS="local:/var/run/clamav/clmilter.sock" |
|
| 121 | 121 |
or if clamd is on a different machine |
| 122 |
- CLAMAV_FLAGS="--max-children=2 --server=192.168.1.9 local:/var/run/clamav/clmilter.sock" |
|
| 122 |
+ CLAMAV_FLAGS="--server=192.168.1.9 local:/var/run/clamav/clmilter.sock" |
|
| 123 | 123 |
|
| 124 | 124 |
If you want clamav-milter to listen on TCP for communication with sendmail, |
| 125 | 125 |
for example if they are on different machines use inet:<port>. |
| ... | ... |
@@ -497,6 +497,10 @@ Changes |
| 497 | 497 |
0.75s 20/9/04 StreamSaveToDisk is longer used |
| 498 | 498 |
Update references to clamav.conf, should now be clamd.conf |
| 499 | 499 |
0.80 20/9/04 Up-issued |
| 500 |
+0.80a 25/9/04 Some Linux's need locale.h as well as libintl.h |
|
| 501 |
+ Honour LogFacility |
|
| 502 |
+ When sanitising the quarantine's filename, don't sanitise |
|
| 503 |
+ the directory name as well |
|
| 500 | 504 |
|
| 501 | 505 |
INTERNATIONALISATION |
| 502 | 506 |
|
| ... | ... |
@@ -26,6 +26,9 @@ |
| 26 | 26 |
* |
| 27 | 27 |
* Change History: |
| 28 | 28 |
* $Log: clamav-milter.c,v $ |
| 29 |
+ * Revision 1.132 2004/09/25 15:47:19 nigelhorne |
|
| 30 |
+ * Honour LogFacility |
|
| 31 |
+ * |
|
| 29 | 32 |
* Revision 1.131 2004/09/20 12:46:05 nigelhorne |
| 30 | 33 |
* Up issued |
| 31 | 34 |
* |
| ... | ... |
@@ -404,9 +407,9 @@ |
| 404 | 404 |
* Revision 1.6 2003/09/28 16:37:23 nigelhorne |
| 405 | 405 |
* Added -f flag use MaxThreads if --max-children not set |
| 406 | 406 |
*/ |
| 407 |
-static char const rcsid[] = "$Id: clamav-milter.c,v 1.131 2004/09/20 12:46:05 nigelhorne Exp $"; |
|
| 407 |
+static char const rcsid[] = "$Id: clamav-milter.c,v 1.132 2004/09/25 15:47:19 nigelhorne Exp $"; |
|
| 408 | 408 |
|
| 409 |
-#define CM_VERSION "0.80" |
|
| 409 |
+#define CM_VERSION "0.80a" |
|
| 410 | 410 |
|
| 411 | 411 |
/*#define CONFDIR "/usr/local/etc"*/ |
| 412 | 412 |
|
| ... | ... |
@@ -436,9 +439,9 @@ static char const rcsid[] = "$Id: clamav-milter.c,v 1.131 2004/09/20 12:46:05 ni |
| 436 | 436 |
#include <string.h> |
| 437 | 437 |
#include <sys/wait.h> |
| 438 | 438 |
#include <assert.h> |
| 439 |
+#include <sys/socket.h> |
|
| 439 | 440 |
#include <netinet/in.h> |
| 440 | 441 |
#include <arpa/inet.h> |
| 441 |
-#include <sys/socket.h> |
|
| 442 | 442 |
#include <sys/un.h> |
| 443 | 443 |
#include <stdarg.h> |
| 444 | 444 |
#include <errno.h> |
| ... | ... |
@@ -454,6 +457,7 @@ static char const rcsid[] = "$Id: clamav-milter.c,v 1.131 2004/09/20 12:46:05 ni |
| 454 | 454 |
|
| 455 | 455 |
#ifdef C_LINUX |
| 456 | 456 |
#include <libintl.h> |
| 457 |
+#include <locale.h> |
|
| 457 | 458 |
|
| 458 | 459 |
#define gettext_noop(s) s |
| 459 | 460 |
#define _(s) gettext(s) |
| ... | ... |
@@ -491,7 +495,8 @@ typedef unsigned short in_port_t; |
| 491 | 491 |
|
| 492 | 492 |
/* |
| 493 | 493 |
* Do not define SESSION in a production environment - it has been known to put |
| 494 |
- * clamd/ into a loop and sending STREAM often returns EPIPE |
|
| 494 |
+ * clamd into a loop when clamav-milter is restarted and sending STREAM often |
|
| 495 |
+ * returns EPIPE |
|
| 495 | 496 |
* |
| 496 | 497 |
* It is however OK for testing: code is now in place to reopen as session |
| 497 | 498 |
* that has gone bad, and it would be useful to find out the set of |
| ... | ... |
@@ -616,6 +621,7 @@ static void clamdIsDown(void); |
| 616 | 616 |
#ifdef SESSION |
| 617 | 617 |
static void *watchdog(void *a); |
| 618 | 618 |
#endif |
| 619 |
+static int logg_facility(const char *name); |
|
| 619 | 620 |
|
| 620 | 621 |
static char clamav_version[128]; |
| 621 | 622 |
static int fflag = 0; /* force a scan, whatever */ |
| ... | ... |
@@ -1374,11 +1380,20 @@ main(int argc, char **argv) |
| 1374 | 1374 |
pidFile = cpt->strarg; |
| 1375 | 1375 |
|
| 1376 | 1376 |
if(cfgopt(copt, "LogSyslog")) {
|
| 1377 |
+ int fac = LOG_LOCAL6; |
|
| 1378 |
+ |
|
| 1377 | 1379 |
if(cfgopt(copt, "LogVerbose")) |
| 1378 | 1380 |
logVerbose = 1; |
| 1379 | 1381 |
use_syslog = 1; |
| 1380 | 1382 |
|
| 1381 |
- openlog("clamav-milter", LOG_CONS|LOG_PID, LOG_MAIL);
|
|
| 1383 |
+ if((cpt = cfgopt(copt, "LogFacility")) != NULL) |
|
| 1384 |
+ if((fac = logg_facility(cpt->strarg)) == -1) {
|
|
| 1385 |
+ fprintf(stderr, "%s: LogFacility: %s: No such facility\n", |
|
| 1386 |
+ argv[0], cpt->strarg); |
|
| 1387 |
+ return EX_CONFIG; |
|
| 1388 |
+ } |
|
| 1389 |
+ |
|
| 1390 |
+ openlog("clamav-milter", LOG_CONS|LOG_PID, fac);
|
|
| 1382 | 1391 |
if(logVerbose) |
| 1383 | 1392 |
syslog(LOG_INFO, _("Starting: %s"), clamav_version);
|
| 1384 | 1393 |
else |
| ... | ... |
@@ -2780,6 +2795,7 @@ clamfi_free(struct privdata *privdata) |
| 2780 | 2780 |
#ifdef SESSION |
| 2781 | 2781 |
pthread_mutex_lock(&sstatus_mutex); |
| 2782 | 2782 |
if(cmdSocketsStatus[privdata->serverNumber] == CMDSOCKET_INUSE) {
|
| 2783 |
+#if 0 |
|
| 2783 | 2784 |
pthread_mutex_unlock(&sstatus_mutex); |
| 2784 | 2785 |
if(readTimeout) {
|
| 2785 | 2786 |
char buf[64]; |
| ... | ... |
@@ -2797,6 +2813,7 @@ clamfi_free(struct privdata *privdata) |
| 2797 | 2797 |
; |
| 2798 | 2798 |
} |
| 2799 | 2799 |
pthread_mutex_lock(&sstatus_mutex); |
| 2800 |
+#endif |
|
| 2800 | 2801 |
cmdSocketsStatus[privdata->serverNumber] = CMDSOCKET_FREE; |
| 2801 | 2802 |
} |
| 2802 | 2803 |
pthread_mutex_unlock(&sstatus_mutex); |
| ... | ... |
@@ -3540,13 +3557,16 @@ static int |
| 3540 | 3540 |
qfile(struct privdata *privdata, const char *virusname) |
| 3541 | 3541 |
{
|
| 3542 | 3542 |
char *newname, *ptr; |
| 3543 |
+ size_t len; |
|
| 3543 | 3544 |
|
| 3544 | 3545 |
assert(privdata != NULL); |
| 3545 | 3546 |
|
| 3546 | 3547 |
if((privdata->filename == NULL) || (virusname == NULL)) |
| 3547 | 3548 |
return -1; |
| 3548 | 3549 |
|
| 3549 |
- newname = cli_malloc(strlen(privdata->filename) + strlen(virusname) + 2); |
|
| 3550 |
+ len = strlen(privdata->filename); |
|
| 3551 |
+ |
|
| 3552 |
+ newname = cli_malloc(len + strlen(virusname) + 2); |
|
| 3550 | 3553 |
|
| 3551 | 3554 |
if(newname == NULL) |
| 3552 | 3555 |
return -1; |
| ... | ... |
@@ -3558,7 +3578,7 @@ qfile(struct privdata *privdata, const char *virusname) |
| 3558 | 3558 |
* that would cause the quarantine to fail to save since the name |
| 3559 | 3559 |
* of the virus is included in the filename |
| 3560 | 3560 |
*/ |
| 3561 |
- for(ptr = newname; *ptr; ptr++) {
|
|
| 3561 |
+ for(ptr = &newname[len]; *ptr; ptr++) {
|
|
| 3562 | 3562 |
#ifdef C_DARWIN |
| 3563 | 3563 |
*ptr &= '\177'; |
| 3564 | 3564 |
#endif |
| ... | ... |
@@ -3656,8 +3676,8 @@ clamfi_gethostbyname(const char *hostname, struct hostent *hp, char *buf, size_t |
| 3656 | 3656 |
* Check whether addr is on network by applying netmasks. |
| 3657 | 3657 |
* addr must be a 32-bit integer-packed IPv4 address in network order. |
| 3658 | 3658 |
* For example: |
| 3659 |
- * struct in_addr IPAddress; |
|
| 3660 |
- * isLocal = isLocalAddr(IPAddress.s_addr); |
|
| 3659 |
+ * struct in_addr IPAddress; |
|
| 3660 |
+ * isLocal = isLocalAddr(IPAddress.s_addr); |
|
| 3661 | 3661 |
*/ |
| 3662 | 3662 |
static int |
| 3663 | 3663 |
isLocalAddr(in_addr_t addr) |
| ... | ... |
@@ -3834,3 +3854,85 @@ watchdog(void *a) |
| 3834 | 3834 |
return NULL; |
| 3835 | 3835 |
} |
| 3836 | 3836 |
#endif |
| 3837 |
+ |
|
| 3838 |
+static const struct {
|
|
| 3839 |
+ const char *name; |
|
| 3840 |
+ int code; |
|
| 3841 |
+} facilitymap[] = {
|
|
| 3842 |
+#ifdef LOG_AUTH |
|
| 3843 |
+ { "LOG_AUTH", LOG_AUTH },
|
|
| 3844 |
+#endif |
|
| 3845 |
+#ifdef LOG_AUTHPRIV |
|
| 3846 |
+ { "LOG_AUTHPRIV", LOG_AUTHPRIV },
|
|
| 3847 |
+#endif |
|
| 3848 |
+#ifdef LOG_CRON |
|
| 3849 |
+ { "LOG_CRON", LOG_CRON },
|
|
| 3850 |
+#endif |
|
| 3851 |
+#ifdef LOG_DAEMON |
|
| 3852 |
+ { "LOG_DAEMON", LOG_DAEMON },
|
|
| 3853 |
+#endif |
|
| 3854 |
+#ifdef LOG_FTP |
|
| 3855 |
+ { "LOG_FTP", LOG_FTP },
|
|
| 3856 |
+#endif |
|
| 3857 |
+#ifdef LOG_KERN |
|
| 3858 |
+ { "LOG_KERN", LOG_KERN },
|
|
| 3859 |
+#endif |
|
| 3860 |
+#ifdef LOG_LPR |
|
| 3861 |
+ { "LOG_LPR", LOG_LPR },
|
|
| 3862 |
+#endif |
|
| 3863 |
+#ifdef LOG_MAIL |
|
| 3864 |
+ { "LOG_MAIL", LOG_MAIL },
|
|
| 3865 |
+#endif |
|
| 3866 |
+#ifdef LOG_NEWS |
|
| 3867 |
+ { "LOG_NEWS", LOG_NEWS },
|
|
| 3868 |
+#endif |
|
| 3869 |
+#ifdef LOG_AUTH |
|
| 3870 |
+ { "LOG_AUTH", LOG_AUTH },
|
|
| 3871 |
+#endif |
|
| 3872 |
+#ifdef LOG_SYSLOG |
|
| 3873 |
+ { "LOG_SYSLOG", LOG_SYSLOG },
|
|
| 3874 |
+#endif |
|
| 3875 |
+#ifdef LOG_USER |
|
| 3876 |
+ { "LOG_USER", LOG_USER },
|
|
| 3877 |
+#endif |
|
| 3878 |
+#ifdef LOG_UUCP |
|
| 3879 |
+ { "LOG_UUCP", LOG_UUCP },
|
|
| 3880 |
+#endif |
|
| 3881 |
+#ifdef LOG_LOCAL0 |
|
| 3882 |
+ { "LOG_LOCAL0", LOG_LOCAL0 },
|
|
| 3883 |
+#endif |
|
| 3884 |
+#ifdef LOG_LOCAL1 |
|
| 3885 |
+ { "LOG_LOCAL1", LOG_LOCAL1 },
|
|
| 3886 |
+#endif |
|
| 3887 |
+#ifdef LOG_LOCAL2 |
|
| 3888 |
+ { "LOG_LOCAL2", LOG_LOCAL2 },
|
|
| 3889 |
+#endif |
|
| 3890 |
+#ifdef LOG_LOCAL3 |
|
| 3891 |
+ { "LOG_LOCAL3", LOG_LOCAL3 },
|
|
| 3892 |
+#endif |
|
| 3893 |
+#ifdef LOG_LOCAL4 |
|
| 3894 |
+ { "LOG_LOCAL4", LOG_LOCAL4 },
|
|
| 3895 |
+#endif |
|
| 3896 |
+#ifdef LOG_LOCAL5 |
|
| 3897 |
+ { "LOG_LOCAL5", LOG_LOCAL5 },
|
|
| 3898 |
+#endif |
|
| 3899 |
+#ifdef LOG_LOCAL6 |
|
| 3900 |
+ { "LOG_LOCAL6", LOG_LOCAL6 },
|
|
| 3901 |
+#endif |
|
| 3902 |
+#ifdef LOG_LOCAL7 |
|
| 3903 |
+ { "LOG_LOCAL7", LOG_LOCAL7 },
|
|
| 3904 |
+#endif |
|
| 3905 |
+ { NULL, -1 }
|
|
| 3906 |
+}; |
|
| 3907 |
+ |
|
| 3908 |
+static int |
|
| 3909 |
+logg_facility(const char *name) |
|
| 3910 |
+{
|
|
| 3911 |
+ int i; |
|
| 3912 |
+ |
|
| 3913 |
+ for(i = 0; facilitymap[i].name; i++) |
|
| 3914 |
+ if(strcasecmp(facilitymap[i].name, name) == 0) |
|
| 3915 |
+ return facilitymap[i].code; |
|
| 3916 |
+ |
|
| 3917 |
+ return -1; |
|
| 3918 |
+} |