git-svn: trunk@1153
Nigel Horne authored on 2004/12/02 07:31:18... | ... |
@@ -1,3 +1,8 @@ |
1 |
+Wed Dec 1 22:29:33 GMT 2004 (njh) |
|
2 |
+---------------------------------- |
|
3 |
+ * clamav-milter: Added --internal flag (some functionality to do) |
|
4 |
+ SESSIONS: Don't hang when StreamMaxLength is hit |
|
5 |
+ |
|
1 | 6 |
Wed Dec 1 21:05:07 CET 2004 (tk) |
2 | 7 |
--------------------------------- |
3 | 8 |
* libclamav/scanners.c: improved recursion limits (thanks to Maxim Dounin) |
... | ... |
@@ -566,6 +566,11 @@ Changes |
566 | 566 |
Added validation for the reply from clamd |
567 | 567 |
Include the sendmail ID in the quarantine file name, for easier |
568 | 568 |
cross matching with the sendmail log file |
569 |
+0.80u 1/12/04 SESSION: Don't hang when streammaxlength is reached - reset the |
|
570 |
+ link |
|
571 |
+ Not all previous X-Virus-Status headers were removed |
|
572 |
+ Added the --internal flag |
|
573 |
+ TODO: freshclam notification and version headers |
|
569 | 574 |
|
570 | 575 |
INTERNATIONALISATION |
571 | 576 |
|
... | ... |
@@ -26,6 +26,9 @@ |
26 | 26 |
* |
27 | 27 |
* Change History: |
28 | 28 |
* $Log: clamav-milter.c,v $ |
29 |
+ * Revision 1.155 2004/12/01 22:27:38 nigelhorne |
|
30 |
+ * Added --internal |
|
31 |
+ * |
|
29 | 32 |
* Revision 1.154 2004/11/20 23:02:23 nigelhorne |
30 | 33 |
* Validate error message from clamd |
31 | 34 |
* |
... | ... |
@@ -473,9 +476,9 @@ |
473 | 473 |
* Revision 1.6 2003/09/28 16:37:23 nigelhorne |
474 | 474 |
* Added -f flag use MaxThreads if --max-children not set |
475 | 475 |
*/ |
476 |
-static char const rcsid[] = "$Id: clamav-milter.c,v 1.154 2004/11/20 23:02:23 nigelhorne Exp $"; |
|
476 |
+static char const rcsid[] = "$Id: clamav-milter.c,v 1.155 2004/12/01 22:27:38 nigelhorne Exp $"; |
|
477 | 477 |
|
478 |
-#define CM_VERSION "0.80t" |
|
478 |
+#define CM_VERSION "0.80u" |
|
479 | 479 |
|
480 | 480 |
/*#define CONFDIR "/usr/local/etc"*/ |
481 | 481 |
|
... | ... |
@@ -644,6 +647,7 @@ struct privdata { |
644 | 644 |
u_char *body; /* body of the message if Sflag is set */ |
645 | 645 |
size_t bodyLen; /* number of bytes in body */ |
646 | 646 |
header_list_t headers; /* Message headers */ |
647 |
+ int statusCount; /* number of X-Virus-Status headers */ |
|
647 | 648 |
long numBytes; /* Number of bytes sent so far */ |
648 | 649 |
char *received; /* keep track of received from */ |
649 | 650 |
const char *rejectCode; /* 550 or 554? */ |
... | ... |
@@ -703,6 +707,11 @@ static char clamav_version[VERSION_LENGTH + 1]; |
703 | 703 |
static int fflag = 0; /* force a scan, whatever */ |
704 | 704 |
static int oflag = 0; /* scan messages from our machine? */ |
705 | 705 |
static int lflag = 0; /* scan messages from our site? */ |
706 |
+static int internal = 0; /* scan messages ourself or use clamd? */ |
|
707 |
+static struct cl_node *root = NULL; |
|
708 |
+static struct cl_limits limits; |
|
709 |
+static struct cl_stat dbstat; |
|
710 |
+ |
|
706 | 711 |
static int bflag = 0; /* |
707 | 712 |
* send a failure (bounce) message to the |
708 | 713 |
* sender. This probably isn't a good idea |
... | ... |
@@ -864,6 +873,7 @@ help(void) |
864 | 864 |
puts(_("\t--force-scan\t\t-f\tForce scan all messages (overrides (-o and -l).")); |
865 | 865 |
puts(_("\t--help\t\t\t-h\tThis message.")); |
866 | 866 |
puts(_("\t--headers\t\t-H\tInclude original message headers in the report.")); |
867 |
+ puts(_("\t--internal\t\t-I\tUse the internal scanner.")); |
|
867 | 868 |
puts(_("\t--local\t\t\t-l\tScan messages sent from machines on our LAN.")); |
868 | 869 |
puts(_("\t--max-childen\t\t-m\tMaximum number of concurrent scans.")); |
869 | 870 |
puts(_("\t--outgoing\t\t-o\tScan outgoing messages from this machine.")); |
... | ... |
@@ -895,7 +905,6 @@ main(int argc, char **argv) |
895 | 895 |
int i, Bflag = 0; |
896 | 896 |
const char *cfgfile = CL_DEFAULT_CFG; |
897 | 897 |
struct cfgstruct *cpt; |
898 |
- struct passwd *user; |
|
899 | 898 |
const char *pidfile = NULL; |
900 | 899 |
char version[VERSION_LENGTH + 1]; |
901 | 900 |
#ifdef SESSION |
... | ... |
@@ -987,6 +996,9 @@ main(int argc, char **argv) |
987 | 987 |
"pidfile", 1, NULL, 'i' |
988 | 988 |
}, |
989 | 989 |
{ |
990 |
+ "internal-scanner", 0, NULL, 'I' |
|
991 |
+ }, |
|
992 |
+ { |
|
990 | 993 |
"local", 0, NULL, 'l' |
991 | 994 |
}, |
992 | 995 |
{ |
... | ... |
@@ -1095,6 +1107,11 @@ main(int argc, char **argv) |
1095 | 1095 |
case 'i': /* pidfile */ |
1096 | 1096 |
pidfile = optarg; |
1097 | 1097 |
break; |
1098 |
+ case 'I': /* use clamav-milter's internal scanner */ |
|
1099 |
+ /* FIXME: error if --servers is given */ |
|
1100 |
+ /* TODO: support freshclam's daemon notify */ |
|
1101 |
+ internal++; |
|
1102 |
+ break; |
|
1098 | 1103 |
case 'l': /* scan mail from the lan */ |
1099 | 1104 |
lflag++; |
1100 | 1105 |
break; |
... | ... |
@@ -1125,6 +1142,10 @@ main(int argc, char **argv) |
1125 | 1125 |
smfilter.xxfi_flags |= SMFIF_CHGHDRS|SMFIF_ADDRCPT|SMFIF_DELRCPT; |
1126 | 1126 |
break; |
1127 | 1127 |
case 's': /* server running clamd */ |
1128 |
+ if(internal) { |
|
1129 |
+ fputs("--internal is not compatible with --server\n", stderr); |
|
1130 |
+ return EX_USAGE; |
|
1131 |
+ } |
|
1128 | 1132 |
serverHostNames = optarg; |
1129 | 1133 |
break; |
1130 | 1134 |
case 'F': /* signature file */ |
... | ... |
@@ -1157,9 +1178,9 @@ main(int argc, char **argv) |
1157 | 1157 |
#endif |
1158 | 1158 |
default: |
1159 | 1159 |
#ifdef CL_DEBUG |
1160 |
- fprintf(stderr, "Usage: %s [-b] [-c FILE] [-F FILE] [--max-children=num] [-l] [-o] [-p address] [-P] [-q] [-Q USER] [-s SERVER] [-S] [-x#] [-U PATH] socket-addr\n", argv[0]); |
|
1160 |
+ fprintf(stderr, "Usage: %s [-b] [-c FILE] [-F FILE] [--max-children=num] [-l] [-I] [-o] [-p address] [-P] [-q] [-Q USER] [-s SERVER] [-S] [-x#] [-U PATH] socket-addr\n", argv[0]); |
|
1161 | 1161 |
#else |
1162 |
- fprintf(stderr, "Usage: %s [-b] [-c FILE] [-F FILE] [--max-children=num] [-l] [-o] [-p address] [-P] [-q] [-Q USER] [-s SERVER] [-S] [-U PATH] socket-addr\n", argv[0]); |
|
1162 |
+ fprintf(stderr, "Usage: %s [-b] [-c FILE] [-F FILE] [--max-children=num] [-l] [-I] [-o] [-p address] [-P] [-q] [-Q USER] [-s SERVER] [-S] [-U PATH] socket-addr\n", argv[0]); |
|
1163 | 1163 |
#endif |
1164 | 1164 |
return EX_USAGE; |
1165 | 1165 |
} |
... | ... |
@@ -1218,7 +1239,10 @@ main(int argc, char **argv) |
1218 | 1218 |
return EX_CONFIG; |
1219 | 1219 |
#endif |
1220 | 1220 |
} |
1221 |
+ |
|
1221 | 1222 |
if((cpt = cfgopt(copt, "User")) != NULL) { |
1223 |
+ const struct passwd *user; |
|
1224 |
+ |
|
1222 | 1225 |
if((user = getpwnam(cpt->strarg)) == NULL) { |
1223 | 1226 |
fprintf(stderr, _("%s: Can't get information about user %s\n"), argv[0], cpt->strarg); |
1224 | 1227 |
return EX_CONFIG; |
... | ... |
@@ -1312,6 +1336,7 @@ main(int argc, char **argv) |
1312 | 1312 |
return EX_CONFIG; |
1313 | 1313 |
} |
1314 | 1314 |
} |
1315 |
+ |
|
1315 | 1316 |
if((cpt = cfgopt(copt, "StreamMaxLength")) != NULL) { |
1316 | 1317 |
if(cpt->numarg < 0) { |
1317 | 1318 |
fprintf(stderr, _("%s: StreamMaxLength must not be negative in %s\n"), |
... | ... |
@@ -1320,10 +1345,99 @@ main(int argc, char **argv) |
1320 | 1320 |
} |
1321 | 1321 |
streamMaxLength = (long)cpt->numarg; |
1322 | 1322 |
} |
1323 |
+ |
|
1324 |
+ if(cfgopt(copt, "LogSyslog")) { |
|
1325 |
+ int fac = LOG_LOCAL6; |
|
1326 |
+ |
|
1327 |
+ if(cfgopt(copt, "LogVerbose")) |
|
1328 |
+ logVerbose = 1; |
|
1329 |
+ use_syslog = 1; |
|
1330 |
+ |
|
1331 |
+ if((cpt = cfgopt(copt, "LogFacility")) != NULL) |
|
1332 |
+ if((fac = logg_facility(cpt->strarg)) == -1) { |
|
1333 |
+ fprintf(stderr, "%s: LogFacility: %s: No such facility\n", |
|
1334 |
+ argv[0], cpt->strarg); |
|
1335 |
+ return EX_CONFIG; |
|
1336 |
+ } |
|
1337 |
+ openlog("clamav-milter", LOG_CONS|LOG_PID, fac); |
|
1338 |
+ } else { |
|
1339 |
+ if(qflag) |
|
1340 |
+ fprintf(stderr, _("%s: (-q && !LogSyslog): warning - all interception message methods are off\n"), |
|
1341 |
+ argv[0]); |
|
1342 |
+ use_syslog = 0; |
|
1343 |
+ } |
|
1323 | 1344 |
/* |
1324 |
- * Get the outgoing socket details - the way to talk to clamd |
|
1345 |
+ * Get the outgoing socket details - the way to talk to clamd, unless |
|
1346 |
+ * we're doing the scanning internally |
|
1325 | 1347 |
*/ |
1326 |
- if((cpt = cfgopt(copt, "LocalSocket")) != NULL) { |
|
1348 |
+ if(internal) { |
|
1349 |
+ int signatures = 0; |
|
1350 |
+ int ret; |
|
1351 |
+ extern const char *cl_retdbdir(void); /* FIXME */ |
|
1352 |
+ const char *dbdir = cl_retdbdir(); |
|
1353 |
+ |
|
1354 |
+ /* |
|
1355 |
+ * TODO: Set a better version string if DataDirectory hasn't |
|
1356 |
+ * been set |
|
1357 |
+ * TODO: Set limits |
|
1358 |
+ */ |
|
1359 |
+ if((cpt = cfgopt(copt, "DatabaseDirectory")) || (cpt = cfgopt(copt, "DataDirectory"))) |
|
1360 |
+ if(strcmp(dbdir, cpt->strarg) != 0) { |
|
1361 |
+ char *daily = cli_malloc(strlen(cpt->strarg) + strlen(dbdir) + 15); |
|
1362 |
+ struct cl_cvd *d1; |
|
1363 |
+ time_t t = (time_t)0; |
|
1364 |
+ int v = 0; |
|
1365 |
+ |
|
1366 |
+ sprintf(daily, "%s/daily.cvd", cpt->strarg); |
|
1367 |
+ if((d1 = cl_cvdhead(daily))) { |
|
1368 |
+ struct cl_cvd *d2; |
|
1369 |
+ |
|
1370 |
+ t = d1->stime; |
|
1371 |
+ v = d1->version; |
|
1372 |
+ |
|
1373 |
+ sprintf(daily, "%s/daily.cvd", dbdir); |
|
1374 |
+ if((d2 = cl_cvdhead(daily))) { |
|
1375 |
+ if(d1->version > d2->version) |
|
1376 |
+ dbdir = cpt->strarg; |
|
1377 |
+ else |
|
1378 |
+ dbdir = dbdir; |
|
1379 |
+ t = d2->stime; |
|
1380 |
+ v = d2->version; |
|
1381 |
+ cl_cvdfree(d2); |
|
1382 |
+ } else |
|
1383 |
+ dbdir = cpt->strarg; |
|
1384 |
+ cl_cvdfree(d1); |
|
1385 |
+ } |
|
1386 |
+ free(daily); |
|
1387 |
+ |
|
1388 |
+ if(t) |
|
1389 |
+ snprintf(version, sizeof(version) - 1, |
|
1390 |
+ "ClamAV %s/%d/%s", VERSION, v, |
|
1391 |
+ ctime(&t)); |
|
1392 |
+ |
|
1393 |
+ } |
|
1394 |
+ |
|
1395 |
+ ret = cl_loaddbdir(dbdir, &root, &signatures); |
|
1396 |
+ if(ret != 0) { |
|
1397 |
+ fprintf(stderr, "%s\n", cl_strerror(ret)); |
|
1398 |
+ return EX_CONFIG; |
|
1399 |
+ } |
|
1400 |
+ if(!root) { |
|
1401 |
+ fputs("Can't initialize the virus database.\n", stderr); |
|
1402 |
+ return EX_CONFIG; |
|
1403 |
+ } |
|
1404 |
+ |
|
1405 |
+ ret = cl_build(root); |
|
1406 |
+ if(ret != 0) { |
|
1407 |
+ fprintf(stderr, "Database initialization error: %s\n", cl_strerror(ret)); |
|
1408 |
+ return EX_CONFIG; |
|
1409 |
+ } |
|
1410 |
+ if(use_syslog) |
|
1411 |
+ syslog(LOG_INFO, _("ClamAV: Protecting against %d viruses"), signatures); |
|
1412 |
+ |
|
1413 |
+ cl_statinidir(dbdir, &dbstat); |
|
1414 |
+ |
|
1415 |
+ } else if((cpt = cfgopt(copt, "LocalSocket")) != NULL) { |
|
1327 | 1416 |
#ifdef SESSION |
1328 | 1417 |
struct sockaddr_un server; |
1329 | 1418 |
#endif |
... | ... |
@@ -1509,19 +1623,26 @@ main(int argc, char **argv) |
1509 | 1509 |
return EX_CONFIG; |
1510 | 1510 |
} |
1511 | 1511 |
|
1512 |
+ if(internal) { |
|
1513 |
+ clamav_versions = (char **)cli_malloc(sizeof(char *)); |
|
1514 |
+ if(clamav_versions == NULL) |
|
1515 |
+ return EX_TEMPFAIL; |
|
1516 |
+ clamav_version = strdup(version); |
|
1512 | 1517 |
#ifdef SESSION |
1513 |
- clamav_versions = (char **)cli_malloc(numServers * sizeof(char *)); |
|
1514 |
- if(clamav_versions == NULL) |
|
1515 |
- return EX_TEMPFAIL; |
|
1516 |
- |
|
1517 |
- for(i = 0; i < numServers; i++) { |
|
1518 |
- clamav_versions[i] = strdup(version); |
|
1519 |
- if(clamav_versions[i] == NULL) |
|
1518 |
+ } else { |
|
1519 |
+ clamav_versions = (char **)cli_malloc(numServers * sizeof(char *)); |
|
1520 |
+ if(clamav_versions == NULL) |
|
1520 | 1521 |
return EX_TEMPFAIL; |
1521 |
- } |
|
1522 |
+ |
|
1523 |
+ for(i = 0; i < numServers; i++) { |
|
1524 |
+ clamav_versions[i] = strdup(version); |
|
1525 |
+ if(clamav_versions[i] == NULL) |
|
1526 |
+ return EX_TEMPFAIL; |
|
1527 |
+ } |
|
1522 | 1528 |
#endif |
1529 |
+ } |
|
1523 | 1530 |
|
1524 |
- if((quarantine_dir == NULL) && localSocket) { |
|
1531 |
+ if(((quarantine_dir == NULL) && localSocket) || internal) { |
|
1525 | 1532 |
/* set the temporary dir */ |
1526 | 1533 |
if((cpt = cfgopt(copt, "TemporaryDirectory"))) { |
1527 | 1534 |
tmpdir = cpt->strarg; |
... | ... |
@@ -1547,7 +1668,7 @@ main(int argc, char **argv) |
1547 | 1547 |
if(!cfgopt(copt, "Foreground")) { |
1548 | 1548 |
#ifdef CL_DEBUG |
1549 | 1549 |
printf(_("When debugging it is recommended that you use Foreground mode in %s\n"), cfgfile); |
1550 |
- puts(_("So that you can see all of the messages")); |
|
1550 |
+ puts(_("\tso that you can see all of the messages")); |
|
1551 | 1551 |
#endif |
1552 | 1552 |
|
1553 | 1553 |
switch(fork()) { |
... | ... |
@@ -1594,35 +1715,6 @@ main(int argc, char **argv) |
1594 | 1594 |
if((cpt = cfgopt(copt, "PidFile")) != NULL) |
1595 | 1595 |
pidFile = cpt->strarg; |
1596 | 1596 |
|
1597 |
- if(cfgopt(copt, "LogSyslog")) { |
|
1598 |
- int fac = LOG_LOCAL6; |
|
1599 |
- |
|
1600 |
- if(cfgopt(copt, "LogVerbose")) |
|
1601 |
- logVerbose = 1; |
|
1602 |
- use_syslog = 1; |
|
1603 |
- |
|
1604 |
- if((cpt = cfgopt(copt, "LogFacility")) != NULL) |
|
1605 |
- if((fac = logg_facility(cpt->strarg)) == -1) { |
|
1606 |
- fprintf(stderr, "%s: LogFacility: %s: No such facility\n", |
|
1607 |
- argv[0], cpt->strarg); |
|
1608 |
- return EX_CONFIG; |
|
1609 |
- } |
|
1610 |
- |
|
1611 |
- openlog("clamav-milter", LOG_CONS|LOG_PID, fac); |
|
1612 |
- if(logVerbose) |
|
1613 |
- syslog(LOG_INFO, _("Starting: %s"), clamav_version); |
|
1614 |
- else |
|
1615 |
- syslog(LOG_INFO, "%s", clamav_version); |
|
1616 |
-#ifdef CL_DEBUG |
|
1617 |
- if(debug_level > 0) |
|
1618 |
- syslog(LOG_DEBUG, _("Debugging is on")); |
|
1619 |
-#endif |
|
1620 |
- } else { |
|
1621 |
- if(qflag) |
|
1622 |
- fprintf(stderr, _("%s: (-q && !LogSyslog): warning - all interception message methods are off\n"), |
|
1623 |
- argv[0]); |
|
1624 |
- use_syslog = 0; |
|
1625 |
- } |
|
1626 | 1597 |
broadcast(_("Starting clamav-milter")); |
1627 | 1598 |
|
1628 | 1599 |
if(pidfile) { |
... | ... |
@@ -1674,8 +1766,18 @@ main(int argc, char **argv) |
1674 | 1674 |
|
1675 | 1675 |
signal(SIGPIPE, SIG_IGN); |
1676 | 1676 |
|
1677 |
- if(logVerbose) |
|
1678 |
- syslog(LOG_INFO, _("Started: %s"), clamav_version); |
|
1677 |
+ if(use_syslog) { |
|
1678 |
+ if(logVerbose) |
|
1679 |
+ syslog(LOG_INFO, _("Starting: %s"), clamav_version); |
|
1680 |
+ else |
|
1681 |
+ syslog(LOG_INFO, "%s", clamav_version); |
|
1682 |
+#ifdef CL_DEBUG |
|
1683 |
+ if(debug_level > 0) |
|
1684 |
+ syslog(LOG_DEBUG, _("Debugging is on")); |
|
1685 |
+#endif |
|
1686 |
+ } |
|
1687 |
+ |
|
1688 |
+ cli_dbgmsg("Started: %s\n", clamav_version); |
|
1679 | 1689 |
|
1680 | 1690 |
return smfi_main(); |
1681 | 1691 |
} |
... | ... |
@@ -2354,7 +2456,13 @@ clamfi_header(SMFICTX *ctx, char *headerf, char *headerv) |
2354 | 2354 |
|
2355 | 2355 |
if(strcasecmp(headerf, "X-Virus-Status") == 0) |
2356 | 2356 |
if(!nflag) { /* remove any existing claims */ |
2357 |
- smfi_chgheader(ctx, "X-Virus-Status", 1, NULL); |
|
2357 |
+ if(smfi_chgheader(ctx, "X-Virus-Status", ++privdata->statusCount, NULL) == MI_FAILURE) |
|
2358 |
+ /* |
|
2359 |
+ * FIXME: It would be useful to know *why* it |
|
2360 |
+ * had failed to be deleted |
|
2361 |
+ */ |
|
2362 |
+ if(use_syslog) |
|
2363 |
+ syslog(LOG_ERR, _("Failed to delete X-Virus-Status header %d"), privdata->statusCount); |
|
2358 | 2364 |
return SMFIS_CONTINUE; |
2359 | 2365 |
} |
2360 | 2366 |
|
... | ... |
@@ -2525,15 +2633,39 @@ clamfi_eom(SMFICTX *ctx) |
2525 | 2525 |
assert(privdata->dataSocket >= 0); |
2526 | 2526 |
#endif |
2527 | 2527 |
|
2528 |
- close(privdata->dataSocket); |
|
2529 |
- privdata->dataSocket = -1; |
|
2528 |
+ if(!internal) { |
|
2529 |
+ close(privdata->dataSocket); |
|
2530 |
+ privdata->dataSocket = -1; |
|
2531 |
+ } |
|
2532 |
+ |
|
2533 |
+ if(internal) { |
|
2534 |
+ const char *virname; |
|
2535 |
+ unsigned long int scanned = 0L; |
|
2536 |
+ |
|
2537 |
+ /* |
|
2538 |
+ * TODO: read the options from clamd.conf |
|
2539 |
+ * TODO: consider using cl_scandesc and not using a temporary |
|
2540 |
+ * file from the mail being read in |
|
2541 |
+ */ |
|
2542 |
+ rc = cl_scanfile(privdata->filename, &virname, &scanned, root, |
|
2543 |
+ &limits, CL_SCAN_STDOPT); |
|
2544 |
+ |
|
2545 |
+ if(rc == CL_CLEAN) |
|
2546 |
+ strcpy(mess, "OK"); |
|
2547 |
+ else if(rc == CL_VIRUS) |
|
2548 |
+ sprintf(mess, "%s: %s FOUND", privdata->filename, virname); |
|
2549 |
+ else |
|
2550 |
+ sprintf(mess, "%s: %s ERROR", privdata->filename, cl_strerror(rc)); |
|
2530 | 2551 |
|
2531 |
- if(privdata->filename) { |
|
2552 |
+#ifdef SESSION |
|
2553 |
+ session = NULL; |
|
2554 |
+#endif |
|
2555 |
+ } else if(privdata->filename) { |
|
2532 | 2556 |
char cmdbuf[1024]; |
2533 | 2557 |
/* |
2534 | 2558 |
* Create socket to talk to clamd. |
2535 | 2559 |
*/ |
2536 |
-#ifdef SESSION |
|
2560 |
+#ifndef SESSION |
|
2537 | 2561 |
struct sockaddr_un server; |
2538 | 2562 |
#endif |
2539 | 2563 |
int nbytes; |
... | ... |
@@ -2583,45 +2715,52 @@ clamfi_eom(SMFICTX *ctx) |
2583 | 2583 |
session = &sessions[privdata->serverNumber]; |
2584 | 2584 |
#endif |
2585 | 2585 |
|
2586 |
+ if(!internal) { |
|
2586 | 2587 |
#ifdef SESSION |
2587 |
- if(clamd_recv(session->sock, mess, sizeof(mess)) > 0) { |
|
2588 |
+#ifdef CL_DEBUG |
|
2589 |
+ if(debug_level >= 4) |
|
2590 |
+ cli_dbgmsg(_("Wating to read status from fd %d\n"), |
|
2591 |
+ session->sock); |
|
2592 |
+#endif |
|
2593 |
+ if(clamd_recv(session->sock, mess, sizeof(mess)) > 0) { |
|
2588 | 2594 |
#else |
2589 |
- if(clamd_recv(privdata->cmdSocket, mess, sizeof(mess)) > 0) { |
|
2595 |
+ if(clamd_recv(privdata->cmdSocket, mess, sizeof(mess)) > 0) { |
|
2590 | 2596 |
#endif |
2591 |
- if((ptr = strchr(mess, '\n')) != NULL) |
|
2592 |
- *ptr = '\0'; |
|
2597 |
+ if((ptr = strchr(mess, '\n')) != NULL) |
|
2598 |
+ *ptr = '\0'; |
|
2593 | 2599 |
|
2594 |
- if(logVerbose) |
|
2595 |
- syslog(LOG_DEBUG, _("clamfi_eom: read %s"), mess); |
|
2596 |
- cli_dbgmsg(_("clamfi_eom: read %s\n"), mess); |
|
2597 |
- } else { |
|
2598 |
- /* |
|
2599 |
- * TODO: if more than one host has been specified, try |
|
2600 |
- * another one - setting cl_error to SMFIS_TEMPFAIL helps |
|
2601 |
- * by forcing a retry |
|
2602 |
- */ |
|
2603 |
- clamfi_cleanup(ctx); |
|
2604 |
- syslog(LOG_NOTICE, _("clamfi_eom: read nothing from clamd")); |
|
2600 |
+ if(logVerbose) |
|
2601 |
+ syslog(LOG_DEBUG, _("clamfi_eom: read %s"), mess); |
|
2602 |
+ cli_dbgmsg(_("clamfi_eom: read %s\n"), mess); |
|
2603 |
+ } else { |
|
2604 |
+ /* |
|
2605 |
+ * TODO: if more than one host has been specified, try |
|
2606 |
+ * another one - setting cl_error to SMFIS_TEMPFAIL helps |
|
2607 |
+ * by forcing a retry |
|
2608 |
+ */ |
|
2609 |
+ clamfi_cleanup(ctx); |
|
2610 |
+ syslog(LOG_NOTICE, _("clamfi_eom: read nothing from clamd")); |
|
2605 | 2611 |
#ifdef CL_DEBUG |
2606 |
- cli_dbgmsg(_("clamfi_eom: read nothing from clamd\n")); |
|
2612 |
+ cli_dbgmsg(_("clamfi_eom: read nothing from clamd\n")); |
|
2607 | 2613 |
#endif |
2608 | 2614 |
#ifdef SESSION |
2609 |
- pthread_mutex_lock(&sstatus_mutex); |
|
2610 |
- session->status = CMDSOCKET_DOWN; |
|
2611 |
- pthread_mutex_unlock(&sstatus_mutex); |
|
2615 |
+ pthread_mutex_lock(&sstatus_mutex); |
|
2616 |
+ session->status = CMDSOCKET_DOWN; |
|
2617 |
+ pthread_mutex_unlock(&sstatus_mutex); |
|
2612 | 2618 |
#endif |
2613 |
- return cl_error; |
|
2614 |
- } |
|
2619 |
+ return cl_error; |
|
2620 |
+ } |
|
2615 | 2621 |
|
2616 | 2622 |
#ifdef SESSION |
2617 |
- pthread_mutex_lock(&sstatus_mutex); |
|
2618 |
- if(session->status == CMDSOCKET_INUSE) |
|
2619 |
- session->status = CMDSOCKET_FREE; |
|
2620 |
- pthread_mutex_unlock(&sstatus_mutex); |
|
2623 |
+ pthread_mutex_lock(&sstatus_mutex); |
|
2624 |
+ if(session->status == CMDSOCKET_INUSE) |
|
2625 |
+ session->status = CMDSOCKET_FREE; |
|
2626 |
+ pthread_mutex_unlock(&sstatus_mutex); |
|
2621 | 2627 |
#else |
2622 |
- close(privdata->cmdSocket); |
|
2623 |
- privdata->cmdSocket = -1; |
|
2628 |
+ close(privdata->cmdSocket); |
|
2629 |
+ privdata->cmdSocket = -1; |
|
2624 | 2630 |
#endif |
2631 |
+ } |
|
2625 | 2632 |
|
2626 | 2633 |
sendmailId = smfi_getsymval(ctx, "i"); |
2627 | 2634 |
if(sendmailId == NULL) |
... | ... |
@@ -2633,7 +2772,7 @@ clamfi_eom(SMFICTX *ctx) |
2633 | 2633 |
/* |
2634 | 2634 |
* Include the hostname where the scan took place |
2635 | 2635 |
*/ |
2636 |
- if(localSocket) { |
|
2636 |
+ if(localSocket || internal) { |
|
2637 | 2637 |
#ifdef MAXHOSTNAMELEN |
2638 | 2638 |
char hostname[MAXHOSTNAMELEN + 1]; |
2639 | 2639 |
#else |
... | ... |
@@ -2997,7 +3136,7 @@ static sfsistat |
2997 | 2997 |
clamfi_abort(SMFICTX *ctx) |
2998 | 2998 |
{ |
2999 | 2999 |
#ifdef CL_DEBUG |
3000 |
- if(use_syslog) |
|
3000 |
+ if(logVerbose) |
|
3001 | 3001 |
syslog(LOG_DEBUG, "clamfi_abort"); |
3002 | 3002 |
#endif |
3003 | 3003 |
|
... | ... |
@@ -3108,45 +3247,53 @@ clamfi_free(struct privdata *privdata) |
3108 | 3108 |
} |
3109 | 3109 |
|
3110 | 3110 |
#ifdef SESSION |
3111 |
- session = &sessions[privdata->serverNumber]; |
|
3112 |
- pthread_mutex_lock(&sstatus_mutex); |
|
3113 |
- if(session->status == CMDSOCKET_INUSE) { |
|
3111 |
+ if(!internal) { |
|
3112 |
+ session = &sessions[privdata->serverNumber]; |
|
3113 |
+ pthread_mutex_lock(&sstatus_mutex); |
|
3114 |
+ if(session->status == CMDSOCKET_INUSE) { |
|
3115 |
+ /* |
|
3116 |
+ * Probably we've got here because |
|
3117 |
+ * MaxStreamLength has been reached |
|
3118 |
+ */ |
|
3114 | 3119 |
#if 0 |
3120 |
+ pthread_mutex_unlock(&sstatus_mutex); |
|
3121 |
+ if(readTimeout) { |
|
3122 |
+ char buf[64]; |
|
3123 |
+ const int fd = session->sock; |
|
3124 |
+ |
|
3125 |
+ cli_dbgmsg("clamfi_free: flush server %d fd %d\n", |
|
3126 |
+ privdata->serverNumber, fd); |
|
3127 |
+ |
|
3128 |
+ /* |
|
3129 |
+ * FIXME: whenever this code gets |
|
3130 |
+ * executed, all of the PINGs fail |
|
3131 |
+ * in the next watchdog cycle |
|
3132 |
+ */ |
|
3133 |
+ while(clamd_recv(fd, buf, sizeof(buf)) > 0) |
|
3134 |
+ ; |
|
3135 |
+ } |
|
3136 |
+ pthread_mutex_lock(&sstatus_mutex); |
|
3137 |
+#endif |
|
3138 |
+ /* Force a reset */ |
|
3139 |
+ session->status = CMDSOCKET_DOWN; |
|
3140 |
+ } |
|
3115 | 3141 |
pthread_mutex_unlock(&sstatus_mutex); |
3116 |
- if(readTimeout) { |
|
3142 |
+#else |
|
3143 |
+ if(privdata->cmdSocket >= 0) { |
|
3117 | 3144 |
char buf[64]; |
3118 |
- const int fd = session->status; |
|
3119 |
- |
|
3120 |
- cli_dbgmsg("clamfi_free: flush server %d fd %d\n", |
|
3121 |
- privdata->serverNumber, fd); |
|
3122 | 3145 |
|
3123 | 3146 |
/* |
3124 |
- * FIXME: whenever this code gets executed, |
|
3125 |
- * all of the PINGs fail in the next |
|
3126 |
- * watchdog cycle |
|
3147 |
+ * Flush the remote end so that clamd doesn't |
|
3148 |
+ * get a SIGPIPE |
|
3127 | 3149 |
*/ |
3128 |
- while(clamd_recv(fd, buf, sizeof(buf)) > 0) |
|
3129 |
- ; |
|
3150 |
+ if(readTimeout) |
|
3151 |
+ while(clamd_recv(privdata->cmdSocket, buf, sizeof(buf)) > 0) |
|
3152 |
+ ; |
|
3153 |
+ close(privdata->cmdSocket); |
|
3154 |
+ privdata->cmdSocket = -1; |
|
3130 | 3155 |
} |
3131 |
- pthread_mutex_lock(&sstatus_mutex); |
|
3132 | 3156 |
#endif |
3133 |
- session->status = CMDSOCKET_FREE; |
|
3134 | 3157 |
} |
3135 |
- pthread_mutex_unlock(&sstatus_mutex); |
|
3136 |
-#else |
|
3137 |
- if(privdata->cmdSocket >= 0) { |
|
3138 |
- char buf[64]; |
|
3139 |
- |
|
3140 |
- /* |
|
3141 |
- * Flush the remote end so that clamd doesn't get a SIGPIPE |
|
3142 |
- */ |
|
3143 |
- if(readTimeout) |
|
3144 |
- while(clamd_recv(privdata->cmdSocket, buf, sizeof(buf)) > 0) |
|
3145 |
- ; |
|
3146 |
- close(privdata->cmdSocket); |
|
3147 |
- privdata->cmdSocket = -1; |
|
3148 |
- } |
|
3149 |
-#endif |
|
3150 | 3158 |
if(privdata->headers) |
3151 | 3159 |
header_list_free(privdata->headers); |
3152 | 3160 |
|
... | ... |
@@ -3422,7 +3569,7 @@ header_list_add(header_list_t list, const char *headerf, const char *headerv) |
3422 | 3422 |
} |
3423 | 3423 |
new_node->header = header; |
3424 | 3424 |
new_node->next = NULL; |
3425 |
- if(!list->first) |
|
3425 |
+ if(list->first == NULL) |
|
3426 | 3426 |
list->first = new_node; |
3427 | 3427 |
if(list->last) |
3428 | 3428 |
list->last->next = new_node; |
... | ... |
@@ -3693,7 +3840,13 @@ connect2clamd(struct privdata *privdata) |
3693 | 3693 |
|
3694 | 3694 |
#ifdef CL_DEBUG |
3695 | 3695 |
if(debug_level >= 4) |
3696 |
- cli_dbgmsg(_("Connecting to local port %d\n"), p); |
|
3696 |
+#ifdef SESSION |
|
3697 |
+ cli_dbgmsg(_("Connecting to local port %d - data %d cmd %d\n"), |
|
3698 |
+ p, privdata->dataSocket, session->sock); |
|
3699 |
+#else |
|
3700 |
+ cli_dbgmsg(_("Connecting to local port %d - data %d cmd %d\n"), |
|
3701 |
+ p, privdata->dataSocket, privdata->cmdSocket); |
|
3702 |
+#endif |
|
3697 | 3703 |
#endif |
3698 | 3704 |
|
3699 | 3705 |
if(connect(privdata->dataSocket, (struct sockaddr *)&reply, sizeof(struct sockaddr_in)) < 0) { |
... | ... |
@@ -4126,7 +4279,7 @@ watchdog(void *a) |
4126 | 4126 |
{ |
4127 | 4127 |
static pthread_mutex_t watchdog_mutex = PTHREAD_MUTEX_INITIALIZER; |
4128 | 4128 |
|
4129 |
- assert(sessions != NULL); |
|
4129 |
+ assert(internal || (sessions != NULL)); |
|
4130 | 4130 |
|
4131 | 4131 |
while(!quitting) { |
4132 | 4132 |
int i; |
... | ... |
@@ -4155,6 +4308,15 @@ watchdog(void *a) |
4155 | 4155 |
cli_dbgmsg("watchdog wakes\n"); |
4156 | 4156 |
pthread_mutex_unlock(&watchdog_mutex); |
4157 | 4157 |
|
4158 |
+ if(internal) { |
|
4159 |
+ /* |
|
4160 |
+ * TODO: reload automatically |
|
4161 |
+ */ |
|
4162 |
+ if((n_children == 0) && (cl_statchkdir(&dbstat) == 1)) |
|
4163 |
+ if(use_syslog) |
|
4164 |
+ syslog(LOG_WARNING, _("Freshclam has been run - please restart clamav-milter\n")); |
|
4165 |
+ continue; |
|
4166 |
+ } |
|
4158 | 4167 |
i = 0; |
4159 | 4168 |
session = sessions; |
4160 | 4169 |
pthread_mutex_lock(&sstatus_mutex); |
... | ... |
@@ -4326,46 +4488,46 @@ quit(void) |
4326 | 4326 |
{ |
4327 | 4327 |
extern short cli_leavetemps_flag; |
4328 | 4328 |
|
4329 |
-#ifdef SESSION |
|
4330 |
- int i; |
|
4331 |
- struct session *session; |
|
4332 |
- |
|
4333 | 4329 |
quitting++; |
4334 | 4330 |
|
4335 | 4331 |
if(use_syslog) |
4336 | 4332 |
syslog(LOG_INFO, _("Stopping %s"), clamav_version); |
4337 | 4333 |
|
4338 |
- i = 0; |
|
4339 |
- session = sessions; |
|
4340 |
- pthread_mutex_lock(&sstatus_mutex); |
|
4341 |
- for(; i < ((localSocket != NULL) ? 1 : max_children); i++) { |
|
4342 |
- /* |
|
4343 |
- * Check all free sessions are still usable |
|
4344 |
- * This could take some time with many free |
|
4345 |
- * sessions to slow remote servers, so only do this |
|
4346 |
- * when the system is quiet (not 100% accurate when |
|
4347 |
- * determining this since n_children isn't locked but |
|
4348 |
- * that doesn't really matter) |
|
4349 |
- */ |
|
4350 |
- cli_dbgmsg("quit: close server %d\n", i); |
|
4351 |
- if(session->status == CMDSOCKET_FREE) { |
|
4352 |
- const int sock = session->sock; |
|
4353 |
- |
|
4354 |
- send(sock, "END\n", 4, 0); |
|
4355 |
- shutdown(sock, SHUT_WR); |
|
4356 |
- session->status = CMDSOCKET_DOWN; |
|
4357 |
- pthread_mutex_unlock(&sstatus_mutex); |
|
4358 |
- close(sock); |
|
4359 |
- pthread_mutex_lock(&sstatus_mutex); |
|
4334 |
+ if(internal) { |
|
4335 |
+ if(root) { |
|
4336 |
+ cl_free(root); |
|
4337 |
+ root = NULL; |
|
4360 | 4338 |
} |
4361 |
- } |
|
4362 |
- pthread_mutex_unlock(&sstatus_mutex); |
|
4363 |
-#else |
|
4364 |
- quitting++; |
|
4339 |
+ } else { |
|
4340 |
+#ifdef SESSION |
|
4341 |
+ int i = 0; |
|
4342 |
+ struct session *session = sessions; |
|
4365 | 4343 |
|
4366 |
- if(use_syslog) |
|
4367 |
- syslog(LOG_INFO, _("Stopping %s"), clamav_version); |
|
4344 |
+ pthread_mutex_lock(&sstatus_mutex); |
|
4345 |
+ for(; i < ((localSocket != NULL) ? 1 : max_children); i++) { |
|
4346 |
+ /* |
|
4347 |
+ * Check all free sessions are still usable |
|
4348 |
+ * This could take some time with many free |
|
4349 |
+ * sessions to slow remote servers, so only do this |
|
4350 |
+ * when the system is quiet (not 100% accurate when |
|
4351 |
+ * determining this since n_children isn't locked but |
|
4352 |
+ * that doesn't really matter) |
|
4353 |
+ */ |
|
4354 |
+ cli_dbgmsg("quit: close server %d\n", i); |
|
4355 |
+ if(session->status == CMDSOCKET_FREE) { |
|
4356 |
+ const int sock = session->sock; |
|
4357 |
+ |
|
4358 |
+ send(sock, "END\n", 4, 0); |
|
4359 |
+ shutdown(sock, SHUT_WR); |
|
4360 |
+ session->status = CMDSOCKET_DOWN; |
|
4361 |
+ pthread_mutex_unlock(&sstatus_mutex); |
|
4362 |
+ close(sock); |
|
4363 |
+ pthread_mutex_lock(&sstatus_mutex); |
|
4364 |
+ } |
|
4365 |
+ } |
|
4366 |
+ pthread_mutex_unlock(&sstatus_mutex); |
|
4368 | 4367 |
#endif |
4368 |
+ } |
|
4369 | 4369 |
|
4370 | 4370 |
if(tmpdir && !cli_leavetemps_flag) |
4371 | 4371 |
rmdir(tmpdir); |
... | ... |
@@ -8,7 +8,7 @@ msgid "" |
8 | 8 |
msgstr "" |
9 | 9 |
"Project-Id-Version: PACKAGE VERSION\n" |
10 | 10 |
"Report-Msgid-Bugs-To: bugs@clamav.net\n" |
11 |
-"POT-Creation-Date: 2004-11-14 15:18+0000\n" |
|
11 |
+"POT-Creation-Date: 2004-12-01 22:27+0000\n" |
|
12 | 12 |
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" |
13 | 13 |
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" |
14 | 14 |
"Language-Team: LANGUAGE <LL@li.org>\n" |
... | ... |
@@ -16,581 +16,582 @@ msgstr "" |
16 | 16 |
"Content-Type: text/plain; charset=CHARSET\n" |
17 | 17 |
"Content-Transfer-Encoding: 8bit\n" |
18 | 18 |
|
19 |
-#: clamav-milter.c:847 |
|
19 |
+#: clamav-milter.c:861 |
|
20 | 20 |
msgid "\t--advisory\t\t-A\tFlag viruses rather than deleting them." |
21 | 21 |
msgstr "" |
22 | 22 |
|
23 |
-#: clamav-milter.c:848 |
|
23 |
+#: clamav-milter.c:862 |
|
24 | 24 |
msgid "\t--bounce\t\t-b\tSend a failure message to the sender." |
25 | 25 |
msgstr "" |
26 | 26 |
|
27 |
-#: clamav-milter.c:849 |
|
27 |
+#: clamav-milter.c:863 |
|
28 | 28 |
msgid "" |
29 | 29 |
"\t--broadcast\t\t-B [IFACE]\tBroadcast to a network manager when a virus is " |
30 | 30 |
"found." |
31 | 31 |
msgstr "" |
32 | 32 |
|
33 |
-#: clamav-milter.c:850 |
|
33 |
+#: clamav-milter.c:864 |
|
34 | 34 |
msgid "\t--config-file=FILE\t-c FILE\tRead configuration from FILE." |
35 | 35 |
msgstr "" |
36 | 36 |
|
37 |
-#: clamav-milter.c:851 |
|
37 |
+#: clamav-milter.c:865 |
|
38 | 38 |
msgid "\t--debug\t\t\t-D\tPrint debug messages." |
39 | 39 |
msgstr "" |
40 | 40 |
|
41 |
-#: clamav-milter.c:852 |
|
41 |
+#: clamav-milter.c:866 |
|
42 | 42 |
msgid "" |
43 | 43 |
"\t--dont-log-clean\t-C\tDon't add an entry to syslog that a mail is clean." |
44 | 44 |
msgstr "" |
45 | 45 |
|
46 |
-#: clamav-milter.c:853 |
|
46 |
+#: clamav-milter.c:867 |
|
47 | 47 |
msgid "" |
48 | 48 |
"\t--dont-scan-on-error\t-d\tPass e-mails through unscanned if a system error " |
49 | 49 |
"occurs." |
50 | 50 |
msgstr "" |
51 | 51 |
|
52 |
-#: clamav-milter.c:854 |
|
52 |
+#: clamav-milter.c:868 |
|
53 | 53 |
msgid "\t--dont-wait\t\t\tAsk remote end to resend if max-children exceeded." |
54 | 54 |
msgstr "" |
55 | 55 |
|
56 |
-#: clamav-milter.c:855 |
|
56 |
+#: clamav-milter.c:869 |
|
57 | 57 |
msgid "\t--from=EMAIL\t\t-a EMAIL\tError messages come from here." |
58 | 58 |
msgstr "" |
59 | 59 |
|
60 |
-#: clamav-milter.c:856 |
|
60 |
+#: clamav-milter.c:870 |
|
61 | 61 |
msgid "\t--force-scan\t\t-f\tForce scan all messages (overrides (-o and -l)." |
62 | 62 |
msgstr "" |
63 | 63 |
|
64 |
-#: clamav-milter.c:857 |
|
64 |
+#: clamav-milter.c:871 |
|
65 | 65 |
msgid "\t--help\t\t\t-h\tThis message." |
66 | 66 |
msgstr "" |
67 | 67 |
|
68 |
-#: clamav-milter.c:858 |
|
68 |
+#: clamav-milter.c:872 |
|
69 | 69 |
msgid "\t--headers\t\t-H\tInclude original message headers in the report." |
70 | 70 |
msgstr "" |
71 | 71 |
|
72 |
-#: clamav-milter.c:859 |
|
72 |
+#: clamav-milter.c:873 |
|
73 |
+msgid "\t--internal\t\t-I\tUse the internal scanner." |
|
74 |
+msgstr "" |
|
75 |
+ |
|
76 |
+#: clamav-milter.c:874 |
|
73 | 77 |
msgid "\t--local\t\t\t-l\tScan messages sent from machines on our LAN." |
74 | 78 |
msgstr "" |
75 | 79 |
|
76 |
-#: clamav-milter.c:860 |
|
80 |
+#: clamav-milter.c:875 |
|
77 | 81 |
msgid "\t--max-childen\t\t-m\tMaximum number of concurrent scans." |
78 | 82 |
msgstr "" |
79 | 83 |
|
80 |
-#: clamav-milter.c:861 |
|
84 |
+#: clamav-milter.c:876 |
|
81 | 85 |
msgid "\t--outgoing\t\t-o\tScan outgoing messages from this machine." |
82 | 86 |
msgstr "" |
83 | 87 |
|
84 |
-#: clamav-milter.c:862 |
|
88 |
+#: clamav-milter.c:877 |
|
85 | 89 |
msgid "\t--noreject\t\t-N\tDon't reject viruses, silently throw them away." |
86 | 90 |
msgstr "" |
87 | 91 |
|
88 |
-#: clamav-milter.c:863 |
|
92 |
+#: clamav-milter.c:878 |
|
89 | 93 |
msgid "\t--noxheader\t\t-n\tSuppress X-Virus-Scanned/X-Virus-Status headers." |
90 | 94 |
msgstr "" |
91 | 95 |
|
92 |
-#: clamav-milter.c:864 |
|
96 |
+#: clamav-milter.c:879 |
|
93 | 97 |
msgid "\t--pidfile=FILE\t\t-i FILE\tLocation of pidfile." |
94 | 98 |
msgstr "" |
95 | 99 |
|
96 |
-#: clamav-milter.c:865 |
|
100 |
+#: clamav-milter.c:880 |
|
97 | 101 |
msgid "\t--postmaster\t\t-p EMAIL\tPostmaster address [default=postmaster]." |
98 | 102 |
msgstr "" |
99 | 103 |
|
100 |
-#: clamav-milter.c:866 |
|
104 |
+#: clamav-milter.c:881 |
|
101 | 105 |
msgid "\t--postmaster-only\t-P\tSend warnings only to the postmaster." |
102 | 106 |
msgstr "" |
103 | 107 |
|
104 |
-#: clamav-milter.c:867 |
|
108 |
+#: clamav-milter.c:882 |
|
105 | 109 |
msgid "\t--quiet\t\t\t-q\tDon't send e-mail notifications of interceptions." |
106 | 110 |
msgstr "" |
107 | 111 |
|
108 |
-#: clamav-milter.c:868 |
|
112 |
+#: clamav-milter.c:883 |
|
109 | 113 |
msgid "\t--quarantine=USER\t-Q EMAIL\tQuanrantine e-mail account." |
110 | 114 |
msgstr "" |
111 | 115 |
|
112 |
-#: clamav-milter.c:869 |
|
116 |
+#: clamav-milter.c:884 |
|
113 | 117 |
msgid "\t--quarantine-dir=DIR\t-U DIR\tDirectory to store infected emails." |
114 | 118 |
msgstr "" |
115 | 119 |
|
116 |
-#: clamav-milter.c:870 |
|
120 |
+#: clamav-milter.c:885 |
|
117 | 121 |
msgid "" |
118 | 122 |
"\t--server=SERVER\t\t-s SERVER\tHostname/IP address of server(s) running " |
119 | 123 |
"clamd (when using TCPsocket)." |
120 | 124 |
msgstr "" |
121 | 125 |
|
122 |
-#: clamav-milter.c:871 |
|
126 |
+#: clamav-milter.c:886 |
|
123 | 127 |
msgid "\t--sign\t\t\t-S\tAdd a hard-coded signature to each scanned message." |
124 | 128 |
msgstr "" |
125 | 129 |
|
126 |
-#: clamav-milter.c:872 |
|
130 |
+#: clamav-milter.c:887 |
|
127 | 131 |
msgid "\t--signature-file=FILE\t-F FILE\tLocation of signature file." |
128 | 132 |
msgstr "" |
129 | 133 |
|
130 |
-#: clamav-milter.c:873 |
|
134 |
+#: clamav-milter.c:888 |
|
131 | 135 |
msgid "\t--template-file=FILE\t-t FILE\tLocation of e-mail template file." |
132 | 136 |
msgstr "" |
133 | 137 |
|
134 |
-#: clamav-milter.c:874 |
|
138 |
+#: clamav-milter.c:889 |
|
135 | 139 |
msgid "\t--timeout=SECS\t\t-T SECS\tTimeout waiting to childen to die." |
136 | 140 |
msgstr "" |
137 | 141 |
|
138 |
-#: clamav-milter.c:875 |
|
142 |
+#: clamav-milter.c:890 |
|
139 | 143 |
msgid "\t--version\t\t-V\tPrint the version number of this software." |
140 | 144 |
msgstr "" |
141 | 145 |
|
142 |
-#: clamav-milter.c:877 |
|
146 |
+#: clamav-milter.c:892 |
|
143 | 147 |
msgid "\t--debug-level=n\t\t-x n\tSets the debug level to 'n'." |
144 | 148 |
msgstr "" |
145 | 149 |
|
146 |
-#: clamav-milter.c:879 |
|
150 |
+#: clamav-milter.c:894 |
|
147 | 151 |
msgid "" |
148 | 152 |
"\n" |
149 | 153 |
"For more information type \"man clamav-milter\"." |
150 | 154 |
msgstr "" |
151 | 155 |
|
152 |
-#: clamav-milter.c:880 |
|
156 |
+#: clamav-milter.c:895 |
|
153 | 157 |
msgid "Report bugs to bugs@clamav.net." |
154 | 158 |
msgstr "" |
155 | 159 |
|
156 |
-#: clamav-milter.c:1161 |
|
160 |
+#: clamav-milter.c:1187 |
|
157 | 161 |
#, c-format |
158 | 162 |
msgid "%s: No socket-addr given\n" |
159 | 163 |
msgstr "" |
160 | 164 |
|
161 |
-#: clamav-milter.c:1170 |
|
165 |
+#: clamav-milter.c:1196 |
|
162 | 166 |
#, c-format |
163 | 167 |
msgid "%s: Can't parse the config file %s\n" |
164 | 168 |
msgstr "" |
165 | 169 |
|
166 |
-#: clamav-milter.c:1209 |
|
170 |
+#: clamav-milter.c:1235 |
|
167 | 171 |
#, c-format |
168 | 172 |
msgid "" |
169 | 173 |
"%s: The iface option to --broadcast is not supported on your operating " |
170 | 174 |
"system\n" |
171 | 175 |
msgstr "" |
172 | 176 |
|
173 |
-#: clamav-milter.c:1215 |
|
177 |
+#: clamav-milter.c:1244 |
|
174 | 178 |
#, c-format |
175 | 179 |
msgid "%s: Can't get information about user %s\n" |
176 | 180 |
msgstr "" |
177 | 181 |
|
178 |
-#: clamav-milter.c:1226 |
|
182 |
+#: clamav-milter.c:1255 |
|
179 | 183 |
#, c-format |
180 | 184 |
msgid "%s: AllowSupplementaryGroups: initgroups not supported.\n" |
181 | 185 |
msgstr "" |
182 | 186 |
|
183 |
-#: clamav-milter.c:1243 |
|
187 |
+#: clamav-milter.c:1272 |
|
184 | 188 |
#, c-format |
185 | 189 |
msgid "Running as user %s (UID %d, GID %d)\n" |
186 | 190 |
msgstr "" |
187 | 191 |
|
188 |
-#: clamav-milter.c:1246 |
|
192 |
+#: clamav-milter.c:1275 |
|
189 | 193 |
#, c-format |
190 | 194 |
msgid "%s: running as root is not recommended (check \"User\" in clamd.conf)\n" |
191 | 195 |
msgstr "" |
192 | 196 |
|
193 |
-#: clamav-milter.c:1248 |
|
197 |
+#: clamav-milter.c:1277 |
|
194 | 198 |
#, c-format |
195 | 199 |
msgid "%s: Only root can set an interface for --broadcast\n" |
196 | 200 |
msgstr "" |
197 | 201 |
|
198 |
-#: clamav-milter.c:1253 |
|
202 |
+#: clamav-milter.c:1282 |
|
199 | 203 |
#, c-format |
200 | 204 |
msgid "%s: Advisory mode doesn't work with quarantine mode\n" |
201 | 205 |
msgstr "" |
202 | 206 |
|
203 |
-#: clamav-milter.c:1260 |
|
207 |
+#: clamav-milter.c:1289 |
|
204 | 208 |
#, c-format |
205 | 209 |
msgid "%s: Advisory mode doesn't work with quarantine directories\n" |
206 | 210 |
msgstr "" |
207 | 211 |
|
208 |
-#: clamav-milter.c:1276 |
|
212 |
+#: clamav-milter.c:1305 |
|
209 | 213 |
#, c-format |
210 | 214 |
msgid "%s: insecure quarantine directory %s (mode 0%o)\n" |
211 | 215 |
msgstr "" |
212 | 216 |
|
213 |
-#: clamav-milter.c:1302 |
|
217 |
+#: clamav-milter.c:1331 |
|
214 | 218 |
#, c-format |
215 | 219 |
msgid "%s: ReadTimeout must not be negative in %s\n" |
216 | 220 |
msgstr "" |
217 | 221 |
|
218 |
-#: clamav-milter.c:1309 |
|
222 |
+#: clamav-milter.c:1339 |
|
219 | 223 |
#, c-format |
220 | 224 |
msgid "%s: StreamMaxLength must not be negative in %s\n" |
221 | 225 |
msgstr "" |
222 | 226 |
|
223 |
-#: clamav-milter.c:1325 |
|
227 |
+#: clamav-milter.c:1362 |
|
228 |
+#, c-format |
|
229 |
+msgid "" |
|
230 |
+"%s: (-q && !LogSyslog): warning - all interception message methods are off\n" |
|
231 |
+msgstr "" |
|
232 |
+ |
|
233 |
+#: clamav-milter.c:1433 |
|
234 |
+#, c-format |
|
235 |
+msgid "ClamAV: Protecting against %d viruses" |
|
236 |
+msgstr "" |
|
237 |
+ |
|
238 |
+#: clamav-milter.c:1444 |
|
224 | 239 |
#, c-format |
225 | 240 |
msgid "%s: You can select one server type only (local/TCP) in %s\n" |
226 | 241 |
msgstr "" |
227 | 242 |
|
228 |
-#: clamav-milter.c:1335 |
|
243 |
+#: clamav-milter.c:1454 |
|
229 | 244 |
#, c-format |
230 | 245 |
msgid "The connection from sendmail to %s (%s) must not\n" |
231 | 246 |
msgstr "" |
232 | 247 |
|
233 |
-#: clamav-milter.c:1337 |
|
248 |
+#: clamav-milter.c:1456 |
|
234 | 249 |
#, c-format |
235 | 250 |
msgid "be the same as the connection to clamd (%s) in %s\n" |
236 | 251 |
msgstr "" |
237 | 252 |
|
238 |
-#: clamav-milter.c:1347 clamav-milter.c:1370 |
|
253 |
+#: clamav-milter.c:1466 clamav-milter.c:1489 |
|
239 | 254 |
#, c-format |
240 | 255 |
msgid "Can't talk to clamd server via %s\n" |
241 | 256 |
msgstr "" |
242 | 257 |
|
243 |
-#: clamav-milter.c:1349 clamav-milter.c:1372 |
|
258 |
+#: clamav-milter.c:1468 clamav-milter.c:1491 |
|
244 | 259 |
#, c-format |
245 | 260 |
msgid "Check your entry for LocalSocket in %s\n" |
246 | 261 |
msgstr "" |
247 | 262 |
|
248 |
-#: clamav-milter.c:1383 |
|
263 |
+#: clamav-milter.c:1502 |
|
249 | 264 |
msgid "Can't create a clamd session" |
250 | 265 |
msgstr "" |
251 | 266 |
|
252 |
-#: clamav-milter.c:1400 |
|
267 |
+#: clamav-milter.c:1519 |
|
253 | 268 |
#, c-format |
254 | 269 |
msgid "" |
255 | 270 |
"%s: --quarantine-dir not supported for remote scanning - use --quarantine\n" |
256 | 271 |
msgstr "" |
257 | 272 |
|
258 |
-#: clamav-milter.c:1415 |
|
273 |
+#: clamav-milter.c:1534 |
|
259 | 274 |
#, c-format |
260 | 275 |
msgid "%s: hostname %s is longer than %d characters\n" |
261 | 276 |
msgstr "" |
262 | 277 |
|
263 |
-#: clamav-milter.c:1434 |
|
278 |
+#: clamav-milter.c:1553 |
|
264 | 279 |
#, c-format |
265 | 280 |
msgid "%s: --max-children must be given in sessions mode\n" |
266 | 281 |
msgstr "" |
267 | 282 |
|
268 |
-#: clamav-milter.c:1457 |
|
283 |
+#: clamav-milter.c:1576 |
|
269 | 284 |
#, c-format |
270 | 285 |
msgid "%s: Unknown host %s\n" |
271 | 286 |
msgstr "" |
272 | 287 |
|
273 |
-#: clamav-milter.c:1469 |
|
288 |
+#: clamav-milter.c:1588 |
|
274 | 289 |
#, c-format |
275 | 290 |
msgid "Can't talk to clamd server %s on port %d\n" |
276 | 291 |
msgstr "" |
277 | 292 |
|
278 |
-#: clamav-milter.c:1486 |
|
293 |
+#: clamav-milter.c:1605 |
|
279 | 294 |
msgid "Can't find any active clamd servers\n" |
280 | 295 |
msgstr "" |
281 | 296 |
|
282 |
-#: clamav-milter.c:1487 clamav-milter.c:1493 |
|
297 |
+#: clamav-milter.c:1606 clamav-milter.c:1612 |
|
283 | 298 |
#, c-format |
284 | 299 |
msgid "Check your entry for TCPSocket in %s\n" |
285 | 300 |
msgstr "" |
286 | 301 |
|
287 |
-#: clamav-milter.c:1492 |
|
302 |
+#: clamav-milter.c:1611 |
|
288 | 303 |
msgid "Can't find any clamd servers\n" |
289 | 304 |
msgstr "" |
290 | 305 |
|
291 |
-#: clamav-milter.c:1499 |
|
306 |
+#: clamav-milter.c:1618 |
|
292 | 307 |
#, c-format |
293 | 308 |
msgid "%s: You must select server type (local/TCP) in %s\n" |
294 | 309 |
msgstr "" |
295 | 310 |
|
296 |
-#: clamav-milter.c:1541 |
|
311 |
+#: clamav-milter.c:1667 |
|
297 | 312 |
#, c-format |
298 | 313 |
msgid "When debugging it is recommended that you use Foreground mode in %s\n" |
299 | 314 |
msgstr "" |
300 | 315 |
|
301 |
-#: clamav-milter.c:1542 |
|
302 |
-msgid "So that you can see all of the messages" |
|
303 |
-msgstr "" |
|
304 |
- |
|
305 |
-#: clamav-milter.c:1605 |
|
306 |
-#, c-format |
|
307 |
-msgid "Starting: %s" |
|
316 |
+#: clamav-milter.c:1668 |
|
317 |
+msgid "\tso that you can see all of the messages" |
|
308 | 318 |
msgstr "" |
309 | 319 |
|
310 |
-#: clamav-milter.c:1610 |
|
311 |
-msgid "Debugging is on" |
|
312 |
-msgstr "" |
|
313 |
- |
|
314 |
-#: clamav-milter.c:1614 |
|
315 |
-#, c-format |
|
316 |
-msgid "" |
|
317 |
-"%s: (-q && !LogSyslog): warning - all interception message methods are off\n" |
|
318 |
-msgstr "" |
|
319 |
- |
|
320 |
-#: clamav-milter.c:1618 |
|
320 |
+#: clamav-milter.c:1715 |
|
321 | 321 |
msgid "Starting clamav-milter" |
322 | 322 |
msgstr "" |
323 | 323 |
|
324 |
-#: clamav-milter.c:1627 |
|
324 |
+#: clamav-milter.c:1724 |
|
325 | 325 |
#, c-format |
326 | 326 |
msgid "Can't save PID in file %s" |
327 | 327 |
msgstr "" |
328 | 328 |
|
329 |
-#: clamav-milter.c:1629 |
|
329 |
+#: clamav-milter.c:1726 |
|
330 | 330 |
#, c-format |
331 | 331 |
msgid "Can't save PID in file %s\n" |
332 | 332 |
msgstr "" |
333 | 333 |
|
334 |
-#: clamav-milter.c:1657 |
|
334 |
+#: clamav-milter.c:1754 |
|
335 | 335 |
#, c-format |
336 | 336 |
msgid "%s: smfi_setconn failed\n" |
337 | 337 |
msgstr "" |
338 | 338 |
|
339 |
-#: clamav-milter.c:1670 |
|
339 |
+#: clamav-milter.c:1768 |
|
340 | 340 |
#, c-format |
341 |
-msgid "Started: %s" |
|
341 |
+msgid "Starting: %s" |
|
342 |
+msgstr "" |
|
343 |
+ |
|
344 |
+#: clamav-milter.c:1773 |
|
345 |
+msgid "Debugging is on" |
|
342 | 346 |
msgstr "" |
343 | 347 |
|
344 |
-#: clamav-milter.c:1720 clamav-milter.c:1964 |
|
348 |
+#: clamav-milter.c:1827 clamav-milter.c:2071 |
|
345 | 349 |
#, c-format |
346 | 350 |
msgid "Check clamd server %s - it may be down\n" |
347 | 351 |
msgstr "" |
348 | 352 |
|
349 |
-#: clamav-milter.c:1725 clamav-milter.c:1973 |
|
353 |
+#: clamav-milter.c:1832 clamav-milter.c:2080 |
|
350 | 354 |
msgid "Check clamd server - it may be down\n" |
351 | 355 |
msgstr "" |
352 | 356 |
|
353 |
-#: clamav-milter.c:1890 |
|
357 |
+#: clamav-milter.c:1997 |
|
354 | 358 |
msgid "No free clamd sessions\n" |
355 | 359 |
msgstr "" |
356 | 360 |
|
357 |
-#: clamav-milter.c:1967 |
|
361 |
+#: clamav-milter.c:2074 |
|
358 | 362 |
#, c-format |
359 | 363 |
msgid "Check clamd server %s - it may be down" |
360 | 364 |
msgstr "" |
361 | 365 |
|
362 |
-#: clamav-milter.c:2009 |
|
366 |
+#: clamav-milter.c:2116 |
|
363 | 367 |
msgid "findServer: select failed" |
364 | 368 |
msgstr "" |
365 | 369 |
|
366 |
-#: clamav-milter.c:2018 |
|
370 |
+#: clamav-milter.c:2125 |
|
367 | 371 |
#, c-format |
368 | 372 |
msgid "findServer: using server %d\n" |
369 | 373 |
msgstr "" |
370 | 374 |
|
371 |
-#: clamav-milter.c:2023 |
|
375 |
+#: clamav-milter.c:2130 |
|
372 | 376 |
msgid "findServer: No response from any server\n" |
373 | 377 |
msgstr "" |
374 | 378 |
|
375 |
-#: clamav-milter.c:2025 |
|
379 |
+#: clamav-milter.c:2132 |
|
376 | 380 |
msgid "findServer: No response from any server" |
377 | 381 |
msgstr "" |
378 | 382 |
|
379 |
-#: clamav-milter.c:2046 |
|
383 |
+#: clamav-milter.c:2153 |
|
380 | 384 |
msgid "clamfi_connect: ctx is null" |
381 | 385 |
msgstr "" |
382 | 386 |
|
383 |
-#: clamav-milter.c:2051 |
|
387 |
+#: clamav-milter.c:2158 |
|
384 | 388 |
msgid "clamfi_connect: hostname is null" |
385 | 389 |
msgstr "" |
386 | 390 |
|
387 |
-#: clamav-milter.c:2072 |
|
391 |
+#: clamav-milter.c:2179 |
|
388 | 392 |
msgid "clamfi_connect: remoteIP is null" |
389 | 393 |
msgstr "" |
390 | 394 |
|
391 |
-#: clamav-milter.c:2080 |
|
395 |
+#: clamav-milter.c:2187 |
|
392 | 396 |
#, c-format |
393 | 397 |
msgid "clamfi_connect: connection from %s [%s]" |
394 | 398 |
msgstr "" |
395 | 399 |
|
396 |
-#: clamav-milter.c:2081 |
|
400 |
+#: clamav-milter.c:2188 |
|
397 | 401 |
#, c-format |
398 | 402 |
msgid "clamfi_connect: connection from %s [%s]\n" |
399 | 403 |
msgstr "" |
400 | 404 |
|
401 |
-#: clamav-milter.c:2100 |
|
405 |
+#: clamav-milter.c:2207 |
|
402 | 406 |
msgid "Can't get sendmail hostname" |
403 | 407 |
msgstr "" |
404 | 408 |
|
405 |
-#: clamav-milter.c:2105 |
|
409 |
+#: clamav-milter.c:2212 |
|
406 | 410 |
#, c-format |
407 | 411 |
msgid "Access Denied: Host Unknown (%s)" |
408 | 412 |
msgstr "" |
409 | 413 |
|
410 |
-#: clamav-milter.c:2115 |
|
414 |
+#: clamav-milter.c:2222 |
|
411 | 415 |
#, c-format |
412 | 416 |
msgid "Access Denied: Can't get IP address for (%s)" |
413 | 417 |
msgstr "" |
414 | 418 |
|
415 |
-#: clamav-milter.c:2132 |
|
419 |
+#: clamav-milter.c:2239 |
|
416 | 420 |
#, c-format |
417 | 421 |
msgid "Access Denied for %s[%s]" |
418 | 422 |
msgstr "" |
419 | 423 |
|
420 |
-#: clamav-milter.c:2150 |
|
424 |
+#: clamav-milter.c:2257 |
|
421 | 425 |
msgid "clamfi_connect: not scanning outgoing messages" |
422 | 426 |
msgstr "" |
423 | 427 |
|
424 |
-#: clamav-milter.c:2151 |
|
428 |
+#: clamav-milter.c:2258 |
|
425 | 429 |
msgid "clamfi_connect: not scanning outgoing messages\n" |
426 | 430 |
msgstr "" |
427 | 431 |
|
428 |
-#: clamav-milter.c:2159 |
|
432 |
+#: clamav-milter.c:2266 |
|
429 | 433 |
msgid "clamfi_connect: not scanning local messages" |
430 | 434 |
msgstr "" |
431 | 435 |
|
432 |
-#: clamav-milter.c:2160 |
|
436 |
+#: clamav-milter.c:2267 |
|
433 | 437 |
msgid "clamfi_connect: not scanning local messages\n" |
434 | 438 |
msgstr "" |
435 | 439 |
|
436 |
-#: clamav-milter.c:2194 |
|
440 |
+#: clamav-milter.c:2301 |
|
437 | 441 |
#, c-format |
438 | 442 |
msgid "hit max-children limit (%u >= %u)\n" |
439 | 443 |
msgstr "" |
440 | 444 |
|
441 |
-#: clamav-milter.c:2195 |
|
445 |
+#: clamav-milter.c:2302 |
|
442 | 446 |
#, c-format |
443 | 447 |
msgid "hit max-children limit (%u >= %u): waiting for some to exit\n" |
444 | 448 |
msgstr "" |
445 | 449 |
|
446 |
-#: clamav-milter.c:2201 |
|
450 |
+#: clamav-milter.c:2308 |
|
447 | 451 |
#, c-format |
448 | 452 |
msgid "hit max-children limit (%u >= %u)" |
449 | 453 |
msgstr "" |
450 | 454 |
|
451 |
-#: clamav-milter.c:2202 |
|
455 |
+#: clamav-milter.c:2309 |
|
452 | 456 |
#, c-format |
453 | 457 |
msgid "hit max-children limit (%u >= %u): waiting for some to exit" |
454 | 458 |
msgstr "" |
455 | 459 |
|
456 |
-#: clamav-milter.c:2207 |
|
460 |
+#: clamav-milter.c:2314 |
|
457 | 461 |
msgid "AV system temporarily overloaded - please try later" |
458 | 462 |
msgstr "" |
459 | 463 |
|
460 |
-#: clamav-milter.c:2237 |
|
464 |
+#: clamav-milter.c:2344 |
|
461 | 465 |
#, c-format |
462 | 466 |
msgid ">n_children = %d\n" |
463 | 467 |
msgstr "" |
464 | 468 |
|
465 |
-#: clamav-milter.c:2243 |
|
469 |
+#: clamav-milter.c:2350 |
|
466 | 470 |
msgid "Timeout waiting for a child to die" |
467 | 471 |
msgstr "" |
468 | 472 |
|
469 |
-#: clamav-milter.c:2245 |
|
473 |
+#: clamav-milter.c:2352 |
|
470 | 474 |
msgid "Timeout waiting for a child to die\n" |
471 | 475 |
msgstr "" |
472 | 476 |
|
473 |
-#: clamav-milter.c:2377 |
|
477 |
+#: clamav-milter.c:2462 |
|
478 |
+#, c-format |
|
479 |
+msgid "Failed to delete X-Virus-Status header %d" |
|
480 |
+msgstr "" |
|
481 |
+ |
|
482 |
+#: clamav-milter.c:2490 |
|
474 | 483 |
msgid "clamfi_eoh" |
475 | 484 |
msgstr "" |
476 | 485 |
|
477 |
-#: clamav-milter.c:2380 |
|
486 |
+#: clamav-milter.c:2493 |
|
478 | 487 |
msgid "clamfi_eoh\n" |
479 | 488 |
msgstr "" |
480 | 489 |
|
481 |
-#: clamav-milter.c:2437 |
|
490 |
+#: clamav-milter.c:2550 |
|
482 | 491 |
msgid "clamfi_eoh: ignoring whitelisted message" |
483 | 492 |
msgstr "" |
484 | 493 |
|
485 |
-#: clamav-milter.c:2439 |
|
486 |
-msgid "clamfi_eoh: not scanning outgoing messages\n" |
|
494 |
+#: clamav-milter.c:2552 |
|
495 |
+msgid "clamfi_eoh: ignoring whitelisted message\n" |
|
487 | 496 |
msgstr "" |
488 | 497 |
|
489 |
-#: clamav-milter.c:2453 |
|
498 |
+#: clamav-milter.c:2566 |
|
490 | 499 |
#, c-format |
491 | 500 |
msgid "clamfi_envbody: %u bytes" |
492 | 501 |
msgstr "" |
493 | 502 |
|
494 |
-#: clamav-milter.c:2455 |
|
503 |
+#: clamav-milter.c:2568 |
|
495 | 504 |
#, c-format |
496 | 505 |
msgid "clamfi_envbody: %u bytes\n" |
497 | 506 |
msgstr "" |
498 | 507 |
|
499 |
-#: clamav-milter.c:2465 clamav-milter.c:2693 |
|
508 |
+#: clamav-milter.c:2578 clamav-milter.c:2837 |
|
500 | 509 |
#, c-format |
501 | 510 |
msgid "%s: Message more than StreamMaxLength (%ld) bytes - not scanned" |
502 | 511 |
msgstr "" |
503 | 512 |
|
504 |
-#: clamav-milter.c:2469 clamav-milter.c:2696 |
|
513 |
+#: clamav-milter.c:2582 clamav-milter.c:2840 |
|
505 | 514 |
msgid "Not Scanned - StreamMaxLength exceeded" |
506 | 515 |
msgstr "" |
507 | 516 |
|
508 |
-#: clamav-milter.c:2544 clamav-milter.c:2566 clamav-milter.c:3619 |
|
509 |
-#: clamav-milter.c:3626 |
|
517 |
+#: clamav-milter.c:2681 clamav-milter.c:2703 clamav-milter.c:3765 |
|
518 |
+#: clamav-milter.c:3772 |
|
510 | 519 |
msgid "send failed to clamd" |
511 | 520 |
msgstr "" |
512 | 521 |
|
513 |
-#: clamav-milter.c:2587 |
|
522 |
+#: clamav-milter.c:2719 |
|
523 |
+#, c-format |
|
524 |
+msgid "Wating to read status from fd %d\n" |
|
525 |
+msgstr "" |
|
526 |
+ |
|
527 |
+#: clamav-milter.c:2730 |
|
514 | 528 |
#, c-format |
515 | 529 |
msgid "clamfi_eom: read %s" |
516 | 530 |
msgstr "" |
517 | 531 |
|
518 |
-#: clamav-milter.c:2588 |
|
532 |
+#: clamav-milter.c:2731 |
|
519 | 533 |
#, c-format |
520 | 534 |
msgid "clamfi_eom: read %s\n" |
521 | 535 |
msgstr "" |
522 | 536 |
|
523 |
-#: clamav-milter.c:2596 |
|
537 |
+#: clamav-milter.c:2739 |
|
524 | 538 |
msgid "clamfi_eom: read nothing from clamd" |
525 | 539 |
msgstr "" |
526 | 540 |
|
527 |
-#: clamav-milter.c:2598 |
|
541 |
+#: clamav-milter.c:2741 |
|
528 | 542 |
msgid "clamfi_eom: read nothing from clamd\n" |
529 | 543 |
msgstr "" |
530 | 544 |
|
531 |
-#: clamav-milter.c:2642 clamav-milter.c:2682 |
|
545 |
+#: clamav-milter.c:2786 clamav-milter.c:2826 |
|
532 | 546 |
msgid "Error determining host" |
533 | 547 |
msgstr "" |
534 | 548 |
|
535 |
-#: clamav-milter.c:2701 |
|
549 |
+#: clamav-milter.c:2845 |
|
536 | 550 |
msgid "Not Scanned" |
537 | 551 |
msgstr "" |
538 | 552 |
|
539 |
-#: clamav-milter.c:2709 |
|
540 |
-msgid "Clean" |
|
541 |
-msgstr "" |
|
542 |
- |
|
543 |
-#: clamav-milter.c:2713 |
|
544 |
-#, c-format |
|
545 |
-msgid "%s: clean message from %s" |
|
546 |
-msgstr "" |
|
547 |
- |
|
548 |
-#: clamav-milter.c:2715 |
|
549 |
-msgid "an unknown sender" |
|
550 |
-msgstr "" |
|
551 |
- |
|
552 |
-#: clamav-milter.c:2749 |
|
553 |
+#: clamav-milter.c:2867 |
|
553 | 554 |
msgid "Infected" |
554 | 555 |
msgstr "" |
555 | 556 |
|
556 |
-#: clamav-milter.c:2767 |
|
557 |
+#: clamav-milter.c:2885 |
|
557 | 558 |
#, c-format |
558 | 559 |
msgid "Intercepted virus from %s to" |
559 | 560 |
msgstr "" |
560 | 561 |
|
561 |
-#: clamav-milter.c:2861 |
|
562 |
+#: clamav-milter.c:2979 |
|
562 | 563 |
msgid "" |
563 | 564 |
"Subject: Virus intercepted\n" |
564 | 565 |
"\n" |
565 | 566 |
msgstr "" |
566 | 567 |
|
567 |
-#: clamav-milter.c:2883 |
|
568 |
+#: clamav-milter.c:3001 |
|
568 | 569 |
msgid "A message you sent to\n" |
569 | 570 |
msgstr "" |
570 | 571 |
|
571 |
-#: clamav-milter.c:2890 |
|
572 |
+#: clamav-milter.c:3008 |
|
572 | 573 |
#, c-format |
573 | 574 |
msgid "The message %1$s sent from %2$s to\n" |
574 | 575 |
msgstr "" |
575 | 576 |
|
576 |
-#: clamav-milter.c:2893 |
|
577 |
+#: clamav-milter.c:3011 |
|
577 | 578 |
#, c-format |
578 | 579 |
msgid "A message sent from %s to\n" |
579 | 580 |
msgstr "" |
580 | 581 |
|
581 |
-#: clamav-milter.c:2898 |
|
582 |
+#: clamav-milter.c:3016 |
|
582 | 583 |
#, c-format |
583 | 584 |
msgid "contained %s and has not been delivered.\n" |
584 | 585 |
msgstr "" |
585 | 586 |
|
586 |
-#: clamav-milter.c:2902 |
|
587 |
+#: clamav-milter.c:3020 |
|
587 | 588 |
#, c-format |
588 | 589 |
msgid "" |
589 | 590 |
"\n" |
590 | 591 |
"The message in question has been quarantined as %s\n" |
591 | 592 |
msgstr "" |
592 | 593 |
|
593 |
-#: clamav-milter.c:2905 |
|
594 |
+#: clamav-milter.c:3023 |
|
594 | 595 |
#, c-format |
595 | 596 |
msgid "" |
596 | 597 |
"\n" |
... | ... |
@@ -598,13 +599,13 @@ msgid "" |
598 | 598 |
"\n" |
599 | 599 |
msgstr "" |
600 | 600 |
|
601 |
-#: clamav-milter.c:2908 |
|
601 |
+#: clamav-milter.c:3026 |
|
602 | 602 |
msgid "" |
603 | 603 |
"For your information, the original message headers were:\n" |
604 | 604 |
"\n" |
605 | 605 |
msgstr "" |
606 | 606 |
|
607 |
-#: clamav-milter.c:2921 |
|
607 |
+#: clamav-milter.c:3039 |
|
608 | 608 |
#, c-format |
609 | 609 |
msgid "" |
610 | 610 |
"\n" |
... | ... |
@@ -612,180 +613,206 @@ msgid "" |
612 | 612 |
"%s\t\n" |
613 | 613 |
msgstr "" |
614 | 614 |
|
615 |
-#: clamav-milter.c:2932 |
|
615 |
+#: clamav-milter.c:3050 |
|
616 | 616 |
#, c-format |
617 | 617 |
msgid "Quarantined infected mail as %s" |
618 | 618 |
msgstr "" |
619 | 619 |
|
620 |
-#: clamav-milter.c:2956 |
|
620 |
+#: clamav-milter.c:3074 |
|
621 | 621 |
#, c-format |
622 | 622 |
msgid "Can't set quarantine user %s" |
623 | 623 |
msgstr "" |
624 | 624 |
|
625 |
-#: clamav-milter.c:2958 |
|
625 |
+#: clamav-milter.c:3076 |
|
626 | 626 |
#, c-format |
627 | 627 |
msgid "Can't set quarantine user %s\n" |
628 | 628 |
msgstr "" |
629 | 629 |
|
630 |
-#: clamav-milter.c:2971 |
|
630 |
+#: clamav-milter.c:3089 |
|
631 | 631 |
#, c-format |
632 | 632 |
msgid "virus %s detected by ClamAV - http://www.clamav.net" |
633 | 633 |
msgstr "" |
634 | 634 |
|
635 |
-#: clamav-milter.c:3055 |
|
635 |
+#: clamav-milter.c:3094 |
|
636 |
+msgid "Unknown" |
|
637 |
+msgstr "" |
|
638 |
+ |
|
639 |
+#: clamav-milter.c:3096 |
|
640 |
+#, c-format |
|
641 |
+msgid "%s: incorrect message \"%s\" from clamd" |
|
642 |
+msgstr "" |
|
643 |
+ |
|
644 |
+#: clamav-milter.c:3102 |
|
645 |
+msgid "Clean" |
|
646 |
+msgstr "" |
|
647 |
+ |
|
648 |
+#: clamav-milter.c:3106 |
|
649 |
+#, c-format |
|
650 |
+msgid "%s: clean message from %s" |
|
651 |
+msgstr "" |
|
652 |
+ |
|
653 |
+#: clamav-milter.c:3108 |
|
654 |
+msgid "an unknown sender" |
|
655 |
+msgstr "" |
|
656 |
+ |
|
657 |
+#: clamav-milter.c:3207 |
|
636 | 658 |
#, c-format |
637 | 659 |
msgid "Can't remove clean file %s" |
638 | 660 |
msgstr "" |
639 | 661 |
|
640 |
-#: clamav-milter.c:3227 clamav-milter.c:3230 |
|
662 |
+#: clamav-milter.c:3387 clamav-milter.c:3390 |
|
641 | 663 |
#, c-format |
642 | 664 |
msgid "write failure (%u bytes) to %s: %s" |
643 | 665 |
msgstr "" |
644 | 666 |
|
645 |
-#: clamav-milter.c:3244 clamav-milter.c:3247 |
|
667 |
+#: clamav-milter.c:3404 clamav-milter.c:3407 |
|
646 | 668 |
#, c-format |
647 | 669 |
msgid "write failure (%u bytes) to clamd: %s" |
648 | 670 |
msgstr "" |
649 | 671 |
|
650 |
-#: clamav-milter.c:3313 |
|
672 |
+#: clamav-milter.c:3473 |
|
651 | 673 |
#, c-format |
652 | 674 |
msgid "No data received from clamd in %d seconds\n" |
653 | 675 |
msgstr "" |
654 | 676 |
|
655 |
-#: clamav-milter.c:3335 |
|
677 |
+#: clamav-milter.c:3495 |
|
656 | 678 |
#, c-format |
657 | 679 |
msgid "Can't stat %s" |
658 | 680 |
msgstr "" |
659 | 681 |
|
660 |
-#: clamav-milter.c:3346 clamav-milter.c:3782 |
|
682 |
+#: clamav-milter.c:3506 clamav-milter.c:3933 |
|
661 | 683 |
#, c-format |
662 | 684 |
msgid "Can't open %s" |
663 | 685 |
msgstr "" |
664 | 686 |
|
665 |
-#: clamav-milter.c:3485 |
|
687 |
+#: clamav-milter.c:3641 |
|
666 | 688 |
#, c-format |
667 | 689 |
msgid "mkdir %s failed" |
668 | 690 |
msgstr "" |
669 | 691 |
|
670 |
-#: clamav-milter.c:3498 |
|
692 |
+#: clamav-milter.c:3654 |
|
671 | 693 |
#, c-format |
672 | 694 |
msgid "mktemp %s failed" |
673 | 695 |
msgstr "" |
674 | 696 |
|
675 |
-#: clamav-milter.c:3508 |
|
697 |
+#: clamav-milter.c:3664 |
|
676 | 698 |
#, c-format |
677 | 699 |
msgid "Temporary quarantine file %s creation failed" |
678 | 700 |
msgstr "" |
679 | 701 |
|
680 |
-#: clamav-milter.c:3638 |
|
702 |
+#: clamav-milter.c:3784 |
|
681 | 703 |
msgid "failed to create TCPSocket to talk to clamd" |
682 | 704 |
msgstr "" |
683 | 705 |
|
684 |
-#: clamav-milter.c:3649 clamav-milter.c:3660 |
|
706 |
+#: clamav-milter.c:3795 clamav-milter.c:3806 |
|
685 | 707 |
msgid "recv failed from clamd getting PORT" |
686 | 708 |
msgstr "" |
687 | 709 |
|
688 |
-#: clamav-milter.c:3671 |
|
710 |
+#: clamav-milter.c:3817 |
|
689 | 711 |
#, c-format |
690 | 712 |
msgid "Expected port information from clamd, got '%s'" |
691 | 713 |
msgstr "" |
692 | 714 |
|
693 |
-#: clamav-milter.c:3674 |
|
715 |
+#: clamav-milter.c:3820 |
|
694 | 716 |
#, c-format |
695 | 717 |
msgid "Expected port information from clamd, got '%s'\n" |
696 | 718 |
msgstr "" |
697 | 719 |
|
698 |
-#: clamav-milter.c:3694 |
|
720 |
+#: clamav-milter.c:3841 clamav-milter.c:3844 |
|
699 | 721 |
#, c-format |
700 |
-msgid "Connecting to local port %d\n" |
|
722 |
+msgid "Connecting to local port %d - data %d cmd %d\n" |
|
701 | 723 |
msgstr "" |
702 | 724 |
|
703 |
-#: clamav-milter.c:3705 clamav-milter.c:3708 |
|
725 |
+#: clamav-milter.c:3857 clamav-milter.c:3860 |
|
704 | 726 |
#, c-format |
705 | 727 |
msgid "Failed to connect to port %d given by clamd: %s" |
706 | 728 |
msgstr "" |
707 | 729 |
|
708 |
-#: clamav-milter.c:3794 |
|
730 |
+#: clamav-milter.c:3945 |
|
709 | 731 |
#, c-format |
710 | 732 |
msgid "Clamd (pid %d) seems to have died" |
711 | 733 |
msgstr "" |
712 | 734 |
|
713 |
-#: clamav-milter.c:3820 |
|
735 |
+#: clamav-milter.c:3971 |
|
714 | 736 |
#, c-format |
715 | 737 |
msgid "Can't open e-mail template file %s" |
716 | 738 |
msgstr "" |
717 | 739 |
|
718 |
-#: clamav-milter.c:3829 |
|
740 |
+#: clamav-milter.c:3980 |
|
719 | 741 |
#, c-format |
720 | 742 |
msgid "Can't stat e-mail template file %s" |
721 | 743 |
msgstr "" |
722 | 744 |
|
723 |
-#: clamav-milter.c:3838 |
|
745 |
+#: clamav-milter.c:3989 |
|
724 | 746 |
msgid "Out of memory" |
725 | 747 |
msgstr "" |
726 | 748 |
|
727 |
-#: clamav-milter.c:3865 |
|
749 |
+#: clamav-milter.c:4016 |
|
728 | 750 |
#, c-format |
729 | 751 |
msgid "%s: Unknown clamAV variable \"%c\"\n" |
730 | 752 |
msgstr "" |
731 | 753 |
|
732 |
-#: clamav-milter.c:3876 |
|
754 |
+#: clamav-milter.c:4027 |
|
733 | 755 |
#, c-format |
734 | 756 |
msgid "%s: Unterminated sendmail variable \"%s\"\n" |
735 | 757 |
msgstr "" |
736 | 758 |
|
737 |
-#: clamav-milter.c:3887 |
|
759 |
+#: clamav-milter.c:4038 |
|
738 | 760 |
#, c-format |
739 | 761 |
msgid "%s: Unknown sendmail variable \"%s\"\n" |
740 | 762 |
msgstr "" |
741 | 763 |
|
742 |
-#: clamav-milter.c:3953 |
|
764 |
+#: clamav-milter.c:4104 |
|
743 | 765 |
#, c-format |
744 | 766 |
msgid "Can't rename %1$s to %2$s" |
745 | 767 |
msgstr "" |
746 | 768 |
|
747 |
-#: clamav-milter.c:3977 |
|
769 |
+#: clamav-milter.c:4128 |
|
748 | 770 |
#, c-format |
749 | 771 |
msgid "[Virus] %s" |
750 | 772 |
msgstr "" |
751 | 773 |
|
752 |
-#: clamav-milter.c:4070 |
|
774 |
+#: clamav-milter.c:4221 |
|
753 | 775 |
msgid "" |
754 | 776 |
"No response from any clamd server - your AV system is not scanning emails\n" |
755 | 777 |
msgstr "" |
756 | 778 |
|
757 |
-#: clamav-milter.c:4073 |
|
779 |
+#: clamav-milter.c:4224 |
|
758 | 780 |
msgid "" |
759 | 781 |
"No response from any clamd server - your AV system is not scanning emails" |
760 | 782 |
msgstr "" |
761 | 783 |
|
762 |
-#: clamav-milter.c:4091 |
|
784 |
+#: clamav-milter.c:4242 |
|
763 | 785 |
msgid "Subject: ClamAV Down\n" |
764 | 786 |
msgstr "" |
765 | 787 |
|
766 |
-#: clamav-milter.c:4094 |
|
788 |
+#: clamav-milter.c:4245 |
|
767 | 789 |
msgid "" |
768 | 790 |
"This is an automatic message\n" |
769 | 791 |
"\n" |
770 | 792 |
msgstr "" |
771 | 793 |
|
772 |
-#: clamav-milter.c:4097 |
|
794 |
+#: clamav-milter.c:4248 |
|
773 | 795 |
msgid "The clamd program cannot be contacted.\n" |
774 | 796 |
msgstr "" |
775 | 797 |
|
776 |
-#: clamav-milter.c:4099 |
|
798 |
+#: clamav-milter.c:4250 |
|
777 | 799 |
msgid "No clamd server can be contacted.\n" |
778 | 800 |
msgstr "" |
779 | 801 |
|
780 |
-#: clamav-milter.c:4101 |
|
802 |
+#: clamav-milter.c:4252 |
|
781 | 803 |
msgid "Emails may not be being scanned, please check your servers.\n" |
782 | 804 |
msgstr "" |
783 | 805 |
|
784 |
-#: clamav-milter.c:4332 clamav-milter.c:4363 |
|
806 |
+#: clamav-milter.c:4314 |
|
807 |
+msgid "Freshclam has been run - please restart clamav-milter\n" |
|
808 |
+msgstr "" |
|
809 |
+ |
|
810 |
+#: clamav-milter.c:4491 |
|
785 | 811 |
#, c-format |
786 | 812 |
msgid "Stopping %s" |
787 | 813 |
msgstr "" |
788 | 814 |
|
789 |
-#: clamav-milter.c:4369 |
|
815 |
+#: clamav-milter.c:4532 |
|
790 | 816 |
msgid "Stopping clamav-milter" |
791 | 817 |
msgstr "" |
... | ... |
@@ -89,6 +89,13 @@ generally causes the message to remain in the queue. |
89 | 89 |
Always scan, whereever the message came from (see also --local and --outgoing). |
90 | 90 |
You probably don't want this. |
91 | 91 |
.TP |
92 |
+\fB-I, \-\-internal\fR |
|
93 |
+Usually clamav\-milter uses an external program such as clamd(8) running |
|
94 |
+either on the local server or other server(s) to perform |
|
95 |
+the scanning. |
|
96 |
+The \-\-internal flag tells clamav\-milter to scan the emails itself without |
|
97 |
+the use of an external program. |
|
98 |
+.TP |
|
92 | 99 |
\fB-l, \-\-local\fR |
93 | 100 |
Also scan messages sent from LAN. You probably want this especially if |
94 | 101 |
your LAN is populated by machines running Windows or DOS. |