git-svn-id: file:///var/lib/svn/clamav-devel/trunk/clamav-devel@1096 77e5149b-7576-45b1-b177-96237e5ba77b
Nigel Horne authored on 2004/11/15 00:23:47... | ... |
@@ -1,3 +1,7 @@ |
1 |
+Sun Nov 14 15:23:02 GMT 2004 (njh) |
|
2 |
+---------------------------------- |
|
3 |
+ * clamav-milter: Use SCAN in more places in preference to STREAM |
|
4 |
+ |
|
1 | 5 |
Sat Nov 13 17:14:17 CET 2004 (tk) |
2 | 6 |
--------------------------------- |
3 | 7 |
* freshclam: better handling of connection errors (thanks to Simon Munton |
... | ... |
@@ -558,6 +558,8 @@ Changes |
558 | 558 |
0.80r 10/11/04 Define SHUT_* and INET_ADDRSTRLEN if not already defined |
559 | 559 |
SCAN in situ rather than passing the file through a socket if |
560 | 560 |
localSocket and not quarantine_dir |
561 |
+0.80s 13/11/04 Use SCAN when UNIX socket (localSocket) is used or when the |
|
562 |
+ load balancing algorithm favours localhost |
|
561 | 563 |
|
562 | 564 |
INTERNATIONALISATION |
563 | 565 |
|
... | ... |
@@ -26,6 +26,9 @@ |
26 | 26 |
* |
27 | 27 |
* Change History: |
28 | 28 |
* $Log: clamav-milter.c,v $ |
29 |
+ * Revision 1.153 2004/11/14 15:18:49 nigelhorne |
|
30 |
+ * Use SCAN in more places rather than STREAM |
|
31 |
+ * |
|
29 | 32 |
* Revision 1.152 2004/11/12 16:48:57 nigelhorne |
30 | 33 |
* Use SCAN when in localSocket mode |
31 | 34 |
* |
... | ... |
@@ -467,9 +470,9 @@ |
467 | 467 |
* Revision 1.6 2003/09/28 16:37:23 nigelhorne |
468 | 468 |
* Added -f flag use MaxThreads if --max-children not set |
469 | 469 |
*/ |
470 |
-static char const rcsid[] = "$Id: clamav-milter.c,v 1.152 2004/11/12 16:48:57 nigelhorne Exp $"; |
|
470 |
+static char const rcsid[] = "$Id: clamav-milter.c,v 1.153 2004/11/14 15:18:49 nigelhorne Exp $"; |
|
471 | 471 |
|
472 |
-#define CM_VERSION "0.80r" |
|
472 |
+#define CM_VERSION "0.80s" |
|
473 | 473 |
|
474 | 474 |
/*#define CONFDIR "/usr/local/etc"*/ |
475 | 475 |
|
... | ... |
@@ -580,7 +583,7 @@ typedef unsigned int in_addr_t; |
580 | 580 |
* TODO: Encrypt mails sent to clamd to stop sniffers |
581 | 581 |
* TODO: Test with IPv6 |
582 | 582 |
* TODO: Files can be scanned with "SCAN" not "STREAM" if clamd is on the same |
583 |
- * machine when talking via INEt domain socket. |
|
583 |
+ * machine when talking via INET domain socket. |
|
584 | 584 |
* TODO: Load balancing, allow local machine to talk via UNIX domain socket. |
585 | 585 |
*/ |
586 | 586 |
|
... | ... |
@@ -650,7 +653,7 @@ struct privdata { |
650 | 650 |
}; |
651 | 651 |
|
652 | 652 |
#ifdef SESSION |
653 |
-static int createSession(int session); |
|
653 |
+static int createSession(int s); |
|
654 | 654 |
#else |
655 | 655 |
static int pingServer(int serverNumber); |
656 | 656 |
#endif |
... | ... |
@@ -799,15 +802,14 @@ static char *port = NULL; /* sendmail->milter comms */ |
799 | 799 |
|
800 | 800 |
static const char *serverHostNames = "127.0.0.1"; |
801 | 801 |
static long *serverIPs; /* IPv4 only */ |
802 |
-static int numServers; /* number of elements in serverIPs/cmdSockets */ |
|
802 |
+static int numServers; /* number of elements in sessions array */ |
|
803 | 803 |
|
804 | 804 |
#ifdef SESSION |
805 |
-static int *cmdSockets; |
|
806 |
-static int *cmdSocketsStatus; |
|
805 |
+static struct session { |
|
806 |
+ int sock; /* fd */ |
|
807 |
+ enum { CMDSOCKET_FREE, CMDSOCKET_INUSE, CMDSOCKET_DOWN } status; |
|
808 |
+} *sessions; |
|
807 | 809 |
static pthread_mutex_t sstatus_mutex = PTHREAD_MUTEX_INITIALIZER; |
808 |
-#define CMDSOCKET_FREE 0 |
|
809 |
-#define CMDSOCKET_INUSE 1 |
|
810 |
-#define CMDSOCKET_DOWN 2 |
|
811 | 810 |
|
812 | 811 |
static pthread_cond_t watchdog_cond = PTHREAD_COND_INITIALIZER; |
813 | 812 |
|
... | ... |
@@ -1365,8 +1367,8 @@ main(int argc, char **argv) |
1365 | 1365 |
server.sun_family = AF_UNIX; |
1366 | 1366 |
strncpy(server.sun_path, localSocket, sizeof(server.sun_path)); |
1367 | 1367 |
|
1368 |
- cmdSockets = (int *)cli_malloc(sizeof(int)); |
|
1369 |
- if((cmdSockets[0] = socket(AF_UNIX, SOCK_STREAM, 0)) < 0) { |
|
1368 |
+ sessions = (struct session *)cli_malloc(sizeof(struct session)); |
|
1369 |
+ if((sessions[0].sock = socket(AF_UNIX, SOCK_STREAM, 0)) < 0) { |
|
1370 | 1370 |
perror(localSocket); |
1371 | 1371 |
fprintf(stderr, _("Can't talk to clamd server via %s\n"), |
1372 | 1372 |
localSocket); |
... | ... |
@@ -1374,18 +1376,17 @@ main(int argc, char **argv) |
1374 | 1374 |
cfgfile); |
1375 | 1375 |
return EX_CONFIG; |
1376 | 1376 |
} |
1377 |
- if(connect(cmdSockets[0], (struct sockaddr *)&server, sizeof(struct sockaddr_un)) < 0) { |
|
1377 |
+ if(connect(sessions[0].sock, (struct sockaddr *)&server, sizeof(struct sockaddr_un)) < 0) { |
|
1378 | 1378 |
perror(localSocket); |
1379 | 1379 |
return EX_UNAVAILABLE; |
1380 | 1380 |
} |
1381 |
- if(send(cmdSockets[0], "SESSION\n", 7, 0) < 7) { |
|
1381 |
+ if(send(sessions[0].sock, "SESSION\n", 7, 0) < 7) { |
|
1382 | 1382 |
perror("send"); |
1383 | 1383 |
if(use_syslog) |
1384 | 1384 |
syslog(LOG_ERR, _("Can't create a clamd session")); |
1385 | 1385 |
return EX_UNAVAILABLE; |
1386 | 1386 |
} |
1387 |
- cmdSocketsStatus = (int *)cli_malloc(sizeof(int)); |
|
1388 |
- cmdSocketsStatus[0] = CMDSOCKET_FREE; |
|
1387 |
+ sessions[0].status = CMDSOCKET_FREE; |
|
1389 | 1388 |
#endif |
1390 | 1389 |
/* |
1391 | 1390 |
* FIXME: Allow connection to remote servers by TCP/IP whilst |
... | ... |
@@ -1480,8 +1481,7 @@ main(int argc, char **argv) |
1480 | 1480 |
#ifdef SESSION |
1481 | 1481 |
activeServers = numServers; |
1482 | 1482 |
|
1483 |
- cmdSockets = (int *)cli_malloc(max_children * sizeof(int)); |
|
1484 |
- cmdSocketsStatus = (int *)cli_calloc(max_children, sizeof(int)); |
|
1483 |
+ sessions = (struct session *)cli_calloc(max_children, sizeof(struct session)); |
|
1485 | 1484 |
for(i = 0; i < max_children; i++) |
1486 | 1485 |
if(createSession(i) < 0) |
1487 | 1486 |
return EX_UNAVAILABLE; |
... | ... |
@@ -1679,14 +1679,15 @@ main(int argc, char **argv) |
1679 | 1679 |
/* |
1680 | 1680 |
* Use the SESSION command of clamd. |
1681 | 1681 |
* Returns -1 for terminal failure, 0 for OK, 1 for nonterminal failure |
1682 |
- * The caller must take care of locking the cmdSocketsStatus array |
|
1682 |
+ * The caller must take care of locking the sessions array |
|
1683 | 1683 |
*/ |
1684 | 1684 |
static int |
1685 |
-createSession(int session) |
|
1685 |
+createSession(int s) |
|
1686 | 1686 |
{ |
1687 | 1687 |
int ret = 0; |
1688 | 1688 |
struct sockaddr_in server; |
1689 |
- const int serverNumber = session % numServers; |
|
1689 |
+ const int serverNumber = s % numServers; |
|
1690 |
+ struct session *session = &sessions[s]; |
|
1690 | 1691 |
|
1691 | 1692 |
memset((char *)&server, 0, sizeof(struct sockaddr_in)); |
1692 | 1693 |
server.sin_family = AF_INET; |
... | ... |
@@ -1694,13 +1695,13 @@ createSession(int session) |
1694 | 1694 |
|
1695 | 1695 |
server.sin_addr.s_addr = serverIPs[serverNumber]; |
1696 | 1696 |
|
1697 |
- if((cmdSockets[session] = socket(AF_INET, SOCK_STREAM, 0)) < 0) { |
|
1697 |
+ if((session->sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) { |
|
1698 | 1698 |
perror("socket"); |
1699 | 1699 |
ret = -1; |
1700 |
- } else if(connect(cmdSockets[session], (struct sockaddr *)&server, sizeof(struct sockaddr_in)) < 0) { |
|
1700 |
+ } else if(connect(session->sock, (struct sockaddr *)&server, sizeof(struct sockaddr_in)) < 0) { |
|
1701 | 1701 |
perror("connect"); |
1702 | 1702 |
ret = 1; |
1703 |
- } else if(send(cmdSockets[session], "SESSION\n", 7, 0) < 7) { |
|
1703 |
+ } else if(send(session->sock, "SESSION\n", 7, 0) < 7) { |
|
1704 | 1704 |
perror("send"); |
1705 | 1705 |
ret = 1; |
1706 | 1706 |
} |
... | ... |
@@ -1714,9 +1715,9 @@ createSession(int session) |
1714 | 1714 |
char *hostname = cli_strtok(serverHostNames, serverNumber, ":"); |
1715 | 1715 |
#endif |
1716 | 1716 |
|
1717 |
- if(cmdSockets[session] >= 0) { |
|
1718 |
- close(cmdSockets[session]); |
|
1719 |
- cmdSockets[session] = -1; |
|
1717 |
+ if(session->sock >= 0) { |
|
1718 |
+ close(session->sock); |
|
1719 |
+ session->sock = -1; |
|
1720 | 1720 |
} |
1721 | 1721 |
|
1722 | 1722 |
cli_warnmsg(_("Check clamd server %s - it may be down\n"), hostname); |
... | ... |
@@ -1726,7 +1727,7 @@ createSession(int session) |
1726 | 1726 |
|
1727 | 1727 |
broadcast(_("Check clamd server - it may be down\n")); |
1728 | 1728 |
|
1729 |
- cmdSocketsStatus[session] = CMDSOCKET_DOWN; |
|
1729 |
+ session->status = CMDSOCKET_DOWN; |
|
1730 | 1730 |
} |
1731 | 1731 |
|
1732 | 1732 |
return ret; |
... | ... |
@@ -1853,10 +1854,11 @@ static int |
1853 | 1853 |
findServer(void) |
1854 | 1854 |
{ |
1855 | 1855 |
int i; |
1856 |
+ struct session *session; |
|
1856 | 1857 |
|
1857 | 1858 |
/* |
1858 | 1859 |
* FIXME: Sessions code isn't flexible at handling servers |
1859 |
- * appearing and disappearing, e.g. cmdSockets[n_children] == -1 |
|
1860 |
+ * appearing and disappearing, e.g. sessions[n_children].sock == -1 |
|
1860 | 1861 |
*/ |
1861 | 1862 |
pthread_mutex_lock(&n_children_mutex); |
1862 | 1863 |
assert(n_children > 0); |
... | ... |
@@ -1864,10 +1866,11 @@ findServer(void) |
1864 | 1864 |
i = n_children - 1; |
1865 | 1865 |
pthread_mutex_unlock(&n_children_mutex); |
1866 | 1866 |
|
1867 |
+ session = sessions; |
|
1867 | 1868 |
pthread_mutex_lock(&sstatus_mutex); |
1868 |
- for(; i < max_children; i++) |
|
1869 |
- if(cmdSocketsStatus[i] == CMDSOCKET_FREE) { |
|
1870 |
- cmdSocketsStatus[i] = CMDSOCKET_INUSE; |
|
1869 |
+ for(; i < max_children; i++, session++) |
|
1870 |
+ if(session->status == CMDSOCKET_FREE) { |
|
1871 |
+ session->status = CMDSOCKET_INUSE; |
|
1871 | 1872 |
pthread_mutex_unlock(&sstatus_mutex); |
1872 | 1873 |
return i; |
1873 | 1874 |
} |
... | ... |
@@ -1877,10 +1880,11 @@ findServer(void) |
1877 | 1877 |
perror("pthread_cond_broadcast"); |
1878 | 1878 |
|
1879 | 1879 |
i = 0; |
1880 |
+ session = sessions; |
|
1880 | 1881 |
pthread_mutex_lock(&sstatus_mutex); |
1881 |
- for(; i < max_children; i++) |
|
1882 |
- if(cmdSocketsStatus[i] == CMDSOCKET_FREE) { |
|
1883 |
- cmdSocketsStatus[i] = CMDSOCKET_INUSE; |
|
1882 |
+ for(; i < max_children; i++, session++) |
|
1883 |
+ if(session->status == CMDSOCKET_FREE) { |
|
1884 |
+ session->status = CMDSOCKET_INUSE; |
|
1884 | 1885 |
pthread_mutex_unlock(&sstatus_mutex); |
1885 | 1886 |
return i; |
1886 | 1887 |
} |
... | ... |
@@ -2498,11 +2502,16 @@ clamfi_eom(SMFICTX *ctx) |
2498 | 2498 |
const char *sendmailId; |
2499 | 2499 |
struct privdata *privdata = (struct privdata *)smfi_getpriv(ctx); |
2500 | 2500 |
char mess[128]; |
2501 |
+#ifdef SESSION |
|
2502 |
+ struct session *session; |
|
2503 |
+#endif |
|
2501 | 2504 |
|
2502 | 2505 |
if(logVerbose) |
2503 | 2506 |
syslog(LOG_DEBUG, "clamfi_eom"); |
2504 |
-#ifdef CL_DEBUG |
|
2507 |
+ |
|
2505 | 2508 |
cli_dbgmsg("clamfi_eom\n"); |
2509 |
+ |
|
2510 |
+#ifdef CL_DEBUG |
|
2506 | 2511 |
assert(privdata != NULL); |
2507 | 2512 |
#ifndef SESSION |
2508 | 2513 |
assert((privdata->cmdSocket >= 0) || (privdata->filename != NULL)); |
... | ... |
@@ -2514,27 +2523,24 @@ clamfi_eom(SMFICTX *ctx) |
2514 | 2514 |
close(privdata->dataSocket); |
2515 | 2515 |
privdata->dataSocket = -1; |
2516 | 2516 |
|
2517 |
- if(quarantine_dir || tmpdir) { |
|
2517 |
+ if(privdata->filename) { |
|
2518 | 2518 |
char cmdbuf[1024]; |
2519 | 2519 |
/* |
2520 | 2520 |
* Create socket to talk to clamd. |
2521 | 2521 |
*/ |
2522 |
+#ifdef SESSION |
|
2522 | 2523 |
struct sockaddr_un server; |
2524 |
+#endif |
|
2523 | 2525 |
int nbytes; |
2524 | 2526 |
|
2525 |
- assert(localSocket != NULL); |
|
2526 |
- |
|
2527 |
- memset((char *)&server, 0, sizeof(struct sockaddr_un)); |
|
2528 |
- server.sun_family = AF_UNIX; |
|
2529 |
- strncpy(server.sun_path, localSocket, sizeof(server.sun_path)); |
|
2530 |
- |
|
2531 | 2527 |
snprintf(cmdbuf, sizeof(cmdbuf) - 1, "SCAN %s", privdata->filename); |
2532 | 2528 |
cli_dbgmsg("clamfi_eom: SCAN %s\n", privdata->filename); |
2533 | 2529 |
|
2534 | 2530 |
nbytes = (int)strlen(cmdbuf); |
2535 | 2531 |
|
2536 | 2532 |
#ifdef SESSION |
2537 |
- if(send(cmdSockets[0], cmdbuf, nbytes, 0) < nbytes) { |
|
2533 |
+ session = sessions; |
|
2534 |
+ if(send(session->sock, cmdbuf, nbytes, 0) < nbytes) { |
|
2538 | 2535 |
perror("send"); |
2539 | 2536 |
clamfi_cleanup(ctx); |
2540 | 2537 |
if(use_syslog) |
... | ... |
@@ -2547,6 +2553,10 @@ clamfi_eom(SMFICTX *ctx) |
2547 | 2547 |
clamfi_cleanup(ctx); |
2548 | 2548 |
return cl_error; |
2549 | 2549 |
} |
2550 |
+ memset((char *)&server, 0, sizeof(struct sockaddr_un)); |
|
2551 |
+ server.sun_family = AF_UNIX; |
|
2552 |
+ strncpy(server.sun_path, localSocket, sizeof(server.sun_path)); |
|
2553 |
+ |
|
2550 | 2554 |
if(connect(privdata->cmdSocket, (struct sockaddr *)&server, sizeof(struct sockaddr_un)) < 0) { |
2551 | 2555 |
perror(localSocket); |
2552 | 2556 |
clamfi_cleanup(ctx); |
... | ... |
@@ -2563,9 +2573,13 @@ clamfi_eom(SMFICTX *ctx) |
2563 | 2563 |
shutdown(privdata->cmdSocket, SHUT_WR); |
2564 | 2564 |
#endif |
2565 | 2565 |
} |
2566 |
+#ifdef SESSION |
|
2567 |
+ else |
|
2568 |
+ session = &sessions[privdata->serverNumber]; |
|
2569 |
+#endif |
|
2566 | 2570 |
|
2567 | 2571 |
#ifdef SESSION |
2568 |
- if(clamd_recv(cmdSockets[privdata->serverNumber], mess, sizeof(mess)) > 0) { |
|
2572 |
+ if(clamd_recv(session->sock, mess, sizeof(mess)) > 0) { |
|
2569 | 2573 |
#else |
2570 | 2574 |
if(clamd_recv(privdata->cmdSocket, mess, sizeof(mess)) > 0) { |
2571 | 2575 |
#endif |
... | ... |
@@ -2588,7 +2602,7 @@ clamfi_eom(SMFICTX *ctx) |
2588 | 2588 |
#endif |
2589 | 2589 |
#ifdef SESSION |
2590 | 2590 |
pthread_mutex_lock(&sstatus_mutex); |
2591 |
- cmdSocketsStatus[privdata->serverNumber] = CMDSOCKET_DOWN; |
|
2591 |
+ session->status = CMDSOCKET_DOWN; |
|
2592 | 2592 |
pthread_mutex_unlock(&sstatus_mutex); |
2593 | 2593 |
#endif |
2594 | 2594 |
return cl_error; |
... | ... |
@@ -2596,8 +2610,8 @@ clamfi_eom(SMFICTX *ctx) |
2596 | 2596 |
|
2597 | 2597 |
#ifdef SESSION |
2598 | 2598 |
pthread_mutex_lock(&sstatus_mutex); |
2599 |
- if(cmdSocketsStatus[privdata->serverNumber] == CMDSOCKET_INUSE) |
|
2600 |
- cmdSocketsStatus[privdata->serverNumber] = CMDSOCKET_FREE; |
|
2599 |
+ if(session->status == CMDSOCKET_INUSE) |
|
2600 |
+ session->status = CMDSOCKET_FREE; |
|
2601 | 2601 |
pthread_mutex_unlock(&sstatus_mutex); |
2602 | 2602 |
#else |
2603 | 2603 |
close(privdata->cmdSocket); |
... | ... |
@@ -2692,11 +2706,8 @@ clamfi_eom(SMFICTX *ctx) |
2692 | 2692 |
cli_warnmsg("%s: %s\n", sendmailId, mess); |
2693 | 2693 |
if(use_syslog) |
2694 | 2694 |
syslog(LOG_ERR, "%s: %s\n", sendmailId, mess); |
2695 |
- clamfi_cleanup(ctx); |
|
2696 |
- return cl_error; |
|
2697 |
- } |
|
2698 |
- |
|
2699 |
- if((ptr = strstr(mess, "FOUND")) == NULL) { |
|
2695 |
+ rc = cl_error; |
|
2696 |
+ } else if((ptr = strstr(mess, "FOUND")) == NULL) { |
|
2700 | 2697 |
if(!nflag) |
2701 | 2698 |
smfi_addheader(ctx, "X-Virus-Status", _("Clean")); |
2702 | 2699 |
|
... | ... |
@@ -2919,9 +2930,7 @@ clamfi_eom(SMFICTX *ctx) |
2919 | 2919 |
} |
2920 | 2920 |
} |
2921 | 2921 |
|
2922 |
- if(privdata->filename) { |
|
2923 |
- assert(quarantine_dir || tmpdir); |
|
2924 |
- |
|
2922 |
+ if(quarantine_dir) { |
|
2925 | 2923 |
if(use_syslog) |
2926 | 2924 |
syslog(LOG_NOTICE, _("Quarantined infected mail as %s"), privdata->filename); |
2927 | 2925 |
/* |
... | ... |
@@ -3026,6 +3035,9 @@ clamfi_free(struct privdata *privdata) |
3026 | 3026 |
{ |
3027 | 3027 |
cli_dbgmsg("clamfi_free\n"); |
3028 | 3028 |
if(privdata) { |
3029 |
+#ifdef SESSION |
|
3030 |
+ struct session *session; |
|
3031 |
+#endif |
|
3029 | 3032 |
if(privdata->body) |
3030 | 3033 |
free(privdata->body); |
3031 | 3034 |
|
... | ... |
@@ -3083,13 +3095,14 @@ clamfi_free(struct privdata *privdata) |
3083 | 3083 |
} |
3084 | 3084 |
|
3085 | 3085 |
#ifdef SESSION |
3086 |
+ session = &sessions[privdata->serverNumber]; |
|
3086 | 3087 |
pthread_mutex_lock(&sstatus_mutex); |
3087 |
- if(cmdSocketsStatus[privdata->serverNumber] == CMDSOCKET_INUSE) { |
|
3088 |
+ if(session->status == CMDSOCKET_INUSE) { |
|
3088 | 3089 |
#if 0 |
3089 | 3090 |
pthread_mutex_unlock(&sstatus_mutex); |
3090 | 3091 |
if(readTimeout) { |
3091 | 3092 |
char buf[64]; |
3092 |
- const int fd = cmdSockets[privdata->serverNumber]; |
|
3093 |
+ const int fd = session->status; |
|
3093 | 3094 |
|
3094 | 3095 |
cli_dbgmsg("clamfi_free: flush server %d fd %d\n", |
3095 | 3096 |
privdata->serverNumber, fd); |
... | ... |
@@ -3104,7 +3117,7 @@ clamfi_free(struct privdata *privdata) |
3104 | 3104 |
} |
3105 | 3105 |
pthread_mutex_lock(&sstatus_mutex); |
3106 | 3106 |
#endif |
3107 |
- cmdSocketsStatus[privdata->serverNumber] = CMDSOCKET_FREE; |
|
3107 |
+ session->status = CMDSOCKET_FREE; |
|
3108 | 3108 |
} |
3109 | 3109 |
pthread_mutex_unlock(&sstatus_mutex); |
3110 | 3110 |
#else |
... | ... |
@@ -3200,14 +3213,14 @@ clamfi_send(struct privdata *privdata, size_t len, const char *format, ...) |
3200 | 3200 |
#endif |
3201 | 3201 |
|
3202 | 3202 |
while(len > 0) { |
3203 |
- const int nbytes = (quarantine_dir || tmpdir) ? |
|
3203 |
+ const int nbytes = (privdata->filename) ? |
|
3204 | 3204 |
write(privdata->dataSocket, ptr, len) : |
3205 | 3205 |
send(privdata->dataSocket, ptr, len, 0); |
3206 | 3206 |
|
3207 | 3207 |
assert(privdata->dataSocket >= 0); |
3208 | 3208 |
|
3209 | 3209 |
if(nbytes == -1) { |
3210 |
- if(quarantine_dir || tmpdir) { |
|
3210 |
+ if(privdata->filename) { |
|
3211 | 3211 |
perror(privdata->filename); |
3212 | 3212 |
if(use_syslog) { |
3213 | 3213 |
#ifdef HAVE_STRERROR_R |
... | ... |
@@ -3504,6 +3517,7 @@ connect2clamd(struct privdata *privdata) |
3504 | 3504 |
struct sockaddr_in reply; |
3505 | 3505 |
unsigned short p; |
3506 | 3506 |
char buf[64]; |
3507 |
+ struct session *session; |
|
3507 | 3508 |
|
3508 | 3509 |
#ifndef SESSION |
3509 | 3510 |
assert(privdata->cmdSocket == -1); |
... | ... |
@@ -3565,15 +3579,45 @@ connect2clamd(struct privdata *privdata) |
3565 | 3565 |
} |
3566 | 3566 |
|
3567 | 3567 |
#ifdef SESSION |
3568 |
+ if(serverIPs[freeServer] == inet_addr("127.0.0.1")) { |
|
3569 |
+ const char *dir; |
|
3570 |
+ |
|
3571 |
+ if((dir = getenv("TMPDIR")) == (char *)NULL) |
|
3572 |
+ if((dir = getenv("TMP")) == (char *)NULL) |
|
3573 |
+ if((dir = getenv("TEMP")) == (char *)NULL) |
|
3574 |
+#ifdef P_tmpdir |
|
3575 |
+ dir = P_tmpdir; |
|
3576 |
+#else |
|
3577 |
+ dir = "/tmp"; |
|
3578 |
+#endif |
|
3579 |
+ |
|
3580 |
+ privdata->filename = cli_gentemp(dir); |
|
3581 |
+ if(privdata->filename) { |
|
3582 |
+ cli_dbgmsg("connect2clamd(%d): creating %s\n", freeServer, privdata->filename); |
|
3583 |
+#ifdef O_TEXT |
|
3584 |
+ privdata->dataSocket = open(privdata->filename, O_WRONLY|O_CREAT|O_EXCL|O_TRUNC|O_TEXT, 0600); |
|
3585 |
+#else |
|
3586 |
+ privdata->dataSocket = open(privdata->filename, O_WRONLY|O_CREAT|O_EXCL|O_TRUNC, 0600); |
|
3587 |
+#endif |
|
3588 |
+ if(privdata->dataSocket < 0) { |
|
3589 |
+ perror(privdata->filename); |
|
3590 |
+ free(privdata->filename); |
|
3591 |
+ privdata->filename = NULL; |
|
3592 |
+ } else |
|
3593 |
+ /* FIXME:!!!!!!!!!!!!!!!!!*/ |
|
3594 |
+ goto end; |
|
3595 |
+ } |
|
3596 |
+ } |
|
3568 | 3597 |
cli_dbgmsg("connect2clamd(%d): STREAM\n", freeServer); |
3569 | 3598 |
|
3570 |
- if(send(cmdSockets[freeServer], "STREAM\n", 7, 0) < 7) { |
|
3599 |
+ session = &sessions[freeServer]; |
|
3600 |
+ if(send(session->sock, "STREAM\n", 7, 0) < 7) { |
|
3571 | 3601 |
perror("send"); |
3572 | 3602 |
pthread_mutex_lock(&sstatus_mutex); |
3573 |
- cmdSocketsStatus[privdata->serverNumber] = CMDSOCKET_DOWN; |
|
3603 |
+ session->status = CMDSOCKET_DOWN; |
|
3574 | 3604 |
pthread_mutex_unlock(&sstatus_mutex); |
3575 | 3605 |
cli_warnmsg("Failed sending stream to server %d (fd %d) errno %d\n", |
3576 |
- freeServer, cmdSockets[freeServer], errno); |
|
3606 |
+ freeServer, session->sock, errno); |
|
3577 | 3607 |
if(use_syslog) |
3578 | 3608 |
syslog(LOG_ERR, _("send failed to clamd")); |
3579 | 3609 |
return 0; |
... | ... |
@@ -3601,13 +3645,13 @@ connect2clamd(struct privdata *privdata) |
3601 | 3601 |
shutdown(privdata->dataSocket, SHUT_RD); |
3602 | 3602 |
|
3603 | 3603 |
#ifdef SESSION |
3604 |
- nbytes = clamd_recv(cmdSockets[privdata->serverNumber], buf, sizeof(buf)); |
|
3604 |
+ nbytes = clamd_recv(session->sock, buf, sizeof(buf)); |
|
3605 | 3605 |
if(nbytes < 0) { |
3606 | 3606 |
perror("recv"); |
3607 | 3607 |
if(use_syslog) |
3608 | 3608 |
syslog(LOG_ERR, _("recv failed from clamd getting PORT")); |
3609 | 3609 |
pthread_mutex_lock(&sstatus_mutex); |
3610 |
- cmdSocketsStatus[privdata->serverNumber] = CMDSOCKET_DOWN; |
|
3610 |
+ session->status = CMDSOCKET_DOWN; |
|
3611 | 3611 |
pthread_mutex_unlock(&sstatus_mutex); |
3612 | 3612 |
return 0; |
3613 | 3613 |
} |
... | ... |
@@ -3634,7 +3678,7 @@ connect2clamd(struct privdata *privdata) |
3634 | 3634 |
buf); |
3635 | 3635 |
#ifdef SESSION |
3636 | 3636 |
pthread_mutex_lock(&sstatus_mutex); |
3637 |
- cmdSocketsStatus[privdata->serverNumber] = CMDSOCKET_DOWN; |
|
3637 |
+ session->status = CMDSOCKET_DOWN; |
|
3638 | 3638 |
pthread_mutex_unlock(&sstatus_mutex); |
3639 | 3639 |
#endif |
3640 | 3640 |
return 0; |
... | ... |
@@ -3669,13 +3713,15 @@ connect2clamd(struct privdata *privdata) |
3669 | 3669 |
} |
3670 | 3670 |
#ifdef SESSION |
3671 | 3671 |
pthread_mutex_lock(&sstatus_mutex); |
3672 |
- cmdSocketsStatus[privdata->serverNumber] = CMDSOCKET_DOWN; |
|
3672 |
+ session->status = CMDSOCKET_DOWN; |
|
3673 | 3673 |
pthread_mutex_unlock(&sstatus_mutex); |
3674 | 3674 |
#endif |
3675 | 3675 |
return 0; |
3676 | 3676 |
} |
3677 | 3677 |
} |
3678 | 3678 |
|
3679 |
+end: |
|
3680 |
+ |
|
3679 | 3681 |
/* |
3680 | 3682 |
* Combine the To and From into one clamfi_send to save bandwidth |
3681 | 3683 |
* when sending using TCP/IP to connect to a remote clamd, by band |
... | ... |
@@ -4082,12 +4128,13 @@ watchdog(void *a) |
4082 | 4082 |
{ |
4083 | 4083 |
static pthread_mutex_t watchdog_mutex = PTHREAD_MUTEX_INITIALIZER; |
4084 | 4084 |
|
4085 |
- assert(cmdSockets != NULL); |
|
4085 |
+ assert(sessions != NULL); |
|
4086 | 4086 |
|
4087 | 4087 |
while(!quitting) { |
4088 | 4088 |
int i; |
4089 | 4089 |
struct timespec ts; |
4090 | 4090 |
struct timeval tp; |
4091 |
+ struct session *session; |
|
4091 | 4092 |
|
4092 | 4093 |
gettimeofday(&tp, NULL); |
4093 | 4094 |
|
... | ... |
@@ -4110,9 +4157,11 @@ watchdog(void *a) |
4110 | 4110 |
cli_dbgmsg("watchdog wakes\n"); |
4111 | 4111 |
pthread_mutex_unlock(&watchdog_mutex); |
4112 | 4112 |
|
4113 |
+ i = 0; |
|
4114 |
+ session = sessions; |
|
4113 | 4115 |
pthread_mutex_lock(&sstatus_mutex); |
4114 |
- for(i = 0; i < max_children; i++) { |
|
4115 |
- const int sock = cmdSockets[i]; |
|
4116 |
+ for(; i < max_children; i++, session++) { |
|
4117 |
+ const int sock = session->sock; |
|
4116 | 4118 |
|
4117 | 4119 |
/* |
4118 | 4120 |
* Check all free sessions are still usable |
... | ... |
@@ -4123,13 +4172,13 @@ watchdog(void *a) |
4123 | 4123 |
* that doesn't really matter) |
4124 | 4124 |
*/ |
4125 | 4125 |
cli_dbgmsg("watchdog: check server %d\n", i); |
4126 |
- if((n_children == 0) && (cmdSocketsStatus[i] == CMDSOCKET_FREE)) { |
|
4126 |
+ if((n_children == 0) && (session->status == CMDSOCKET_FREE)) { |
|
4127 | 4127 |
if(send(sock, "VERSION\n", 8, 0) == 8) { |
4128 | 4128 |
char buf[81]; |
4129 | 4129 |
const int nbytes = clamd_recv(sock, buf, sizeof(buf) - 1); |
4130 | 4130 |
|
4131 | 4131 |
if(nbytes <= 0) |
4132 |
- cmdSocketsStatus[i] = CMDSOCKET_DOWN; |
|
4132 |
+ session->status = CMDSOCKET_DOWN; |
|
4133 | 4133 |
else { |
4134 | 4134 |
buf[nbytes] = '\0'; |
4135 | 4135 |
if(strncmp(buf, "ClamAV ", 7) == 0) { |
... | ... |
@@ -4145,21 +4194,21 @@ watchdog(void *a) |
4145 | 4145 |
} |
4146 | 4146 |
} else { |
4147 | 4147 |
cli_warnmsg("watchdog: expected \"ClamAV\", got \"%s\"\n", buf); |
4148 |
- cmdSocketsStatus[i] = CMDSOCKET_DOWN; |
|
4148 |
+ session->status = CMDSOCKET_DOWN; |
|
4149 | 4149 |
} |
4150 | 4150 |
} |
4151 | 4151 |
} else { |
4152 | 4152 |
perror("send"); |
4153 |
- cmdSocketsStatus[i] = CMDSOCKET_DOWN; |
|
4153 |
+ session->status = CMDSOCKET_DOWN; |
|
4154 | 4154 |
} |
4155 | 4155 |
|
4156 |
- if(cmdSocketsStatus[i] == CMDSOCKET_DOWN) |
|
4156 |
+ if(session->status == CMDSOCKET_DOWN) |
|
4157 | 4157 |
cli_warnmsg("Session %d has gone down\n", i); |
4158 | 4158 |
} |
4159 | 4159 |
/* |
4160 | 4160 |
* Reset all all dead sessions |
4161 | 4161 |
*/ |
4162 |
- if(cmdSocketsStatus[i] == CMDSOCKET_DOWN) { |
|
4162 |
+ if(session->status == CMDSOCKET_DOWN) { |
|
4163 | 4163 |
/* |
4164 | 4164 |
* The END command probably won't get through, |
4165 | 4165 |
* but let's give it a go anyway |
... | ... |
@@ -4171,13 +4220,13 @@ watchdog(void *a) |
4171 | 4171 |
|
4172 | 4172 |
cli_dbgmsg("Trying to restart session %d\n", i); |
4173 | 4173 |
if(createSession(i) == 0) { |
4174 |
- cmdSocketsStatus[i] = CMDSOCKET_FREE; |
|
4174 |
+ session->status = CMDSOCKET_FREE; |
|
4175 | 4175 |
cli_warnmsg("Session %d restarted OK\n", i); |
4176 | 4176 |
} |
4177 | 4177 |
} |
4178 | 4178 |
} |
4179 | 4179 |
for(i = 0; i < max_children; i++) |
4180 |
- if(cmdSocketsStatus[i] != CMDSOCKET_DOWN) |
|
4180 |
+ if(sessions[i].status != CMDSOCKET_DOWN) |
|
4181 | 4181 |
break; |
4182 | 4182 |
|
4183 | 4183 |
if(i == max_children) |
... | ... |
@@ -4278,16 +4327,17 @@ quit(void) |
4278 | 4278 |
|
4279 | 4279 |
#ifdef SESSION |
4280 | 4280 |
int i; |
4281 |
+ struct session *session; |
|
4281 | 4282 |
|
4282 | 4283 |
quitting++; |
4283 | 4284 |
|
4284 | 4285 |
if(use_syslog) |
4285 | 4286 |
syslog(LOG_INFO, _("Stopping %s"), clamav_version); |
4286 | 4287 |
|
4288 |
+ i = 0; |
|
4289 |
+ session = sessions; |
|
4287 | 4290 |
pthread_mutex_lock(&sstatus_mutex); |
4288 |
- for(i = 0; i < ((localSocket != NULL) ? 1 : max_children); i++) { |
|
4289 |
- const int sock = cmdSockets[i]; |
|
4290 |
- |
|
4291 |
+ for(; i < ((localSocket != NULL) ? 1 : max_children); i++) { |
|
4291 | 4292 |
/* |
4292 | 4293 |
* Check all free sessions are still usable |
4293 | 4294 |
* This could take some time with many free |
... | ... |
@@ -4297,10 +4347,12 @@ quit(void) |
4297 | 4297 |
* that doesn't really matter) |
4298 | 4298 |
*/ |
4299 | 4299 |
cli_dbgmsg("quit: close server %d\n", i); |
4300 |
- if(cmdSocketsStatus[i] == CMDSOCKET_FREE) { |
|
4300 |
+ if(session->status == CMDSOCKET_FREE) { |
|
4301 |
+ const int sock = session->sock; |
|
4302 |
+ |
|
4301 | 4303 |
send(sock, "END\n", 4, 0); |
4302 | 4304 |
shutdown(sock, SHUT_WR); |
4303 |
- cmdSocketsStatus[i] = CMDSOCKET_DOWN; |
|
4305 |
+ session->status = CMDSOCKET_DOWN; |
|
4304 | 4306 |
pthread_mutex_unlock(&sstatus_mutex); |
4305 | 4307 |
close(sock); |
4306 | 4308 |
pthread_mutex_lock(&sstatus_mutex); |
... | ... |
@@ -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-04 08:15+0000\n" |
|
11 |
+"POT-Creation-Date: 2004-11-14 15:18+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,581 @@ msgstr "" |
16 | 16 |
"Content-Type: text/plain; charset=CHARSET\n" |
17 | 17 |
"Content-Transfer-Encoding: 8bit\n" |
18 | 18 |
|
19 |
-#: clamav-milter.c:819 |
|
19 |
+#: clamav-milter.c:847 |
|
20 | 20 |
msgid "\t--advisory\t\t-A\tFlag viruses rather than deleting them." |
21 | 21 |
msgstr "" |
22 | 22 |
|
23 |
-#: clamav-milter.c:820 |
|
23 |
+#: clamav-milter.c:848 |
|
24 | 24 |
msgid "\t--bounce\t\t-b\tSend a failure message to the sender." |
25 | 25 |
msgstr "" |
26 | 26 |
|
27 |
-#: clamav-milter.c:821 |
|
27 |
+#: clamav-milter.c:849 |
|
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:822 |
|
33 |
+#: clamav-milter.c:850 |
|
34 | 34 |
msgid "\t--config-file=FILE\t-c FILE\tRead configuration from FILE." |
35 | 35 |
msgstr "" |
36 | 36 |
|
37 |
-#: clamav-milter.c:823 |
|
37 |
+#: clamav-milter.c:851 |
|
38 | 38 |
msgid "\t--debug\t\t\t-D\tPrint debug messages." |
39 | 39 |
msgstr "" |
40 | 40 |
|
41 |
-#: clamav-milter.c:824 |
|
41 |
+#: clamav-milter.c:852 |
|
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:825 |
|
46 |
+#: clamav-milter.c:853 |
|
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:826 |
|
52 |
+#: clamav-milter.c:854 |
|
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:827 |
|
56 |
+#: clamav-milter.c:855 |
|
57 | 57 |
msgid "\t--from=EMAIL\t\t-a EMAIL\tError messages come from here." |
58 | 58 |
msgstr "" |
59 | 59 |
|
60 |
-#: clamav-milter.c:828 |
|
60 |
+#: clamav-milter.c:856 |
|
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:829 |
|
64 |
+#: clamav-milter.c:857 |
|
65 | 65 |
msgid "\t--help\t\t\t-h\tThis message." |
66 | 66 |
msgstr "" |
67 | 67 |
|
68 |
-#: clamav-milter.c:830 |
|
68 |
+#: clamav-milter.c:858 |
|
69 | 69 |
msgid "\t--headers\t\t-H\tInclude original message headers in the report." |
70 | 70 |
msgstr "" |
71 | 71 |
|
72 |
-#: clamav-milter.c:831 |
|
72 |
+#: clamav-milter.c:859 |
|
73 | 73 |
msgid "\t--local\t\t\t-l\tScan messages sent from machines on our LAN." |
74 | 74 |
msgstr "" |
75 | 75 |
|
76 |
-#: clamav-milter.c:832 |
|
76 |
+#: clamav-milter.c:860 |
|
77 | 77 |
msgid "\t--max-childen\t\t-m\tMaximum number of concurrent scans." |
78 | 78 |
msgstr "" |
79 | 79 |
|
80 |
-#: clamav-milter.c:833 |
|
80 |
+#: clamav-milter.c:861 |
|
81 | 81 |
msgid "\t--outgoing\t\t-o\tScan outgoing messages from this machine." |
82 | 82 |
msgstr "" |
83 | 83 |
|
84 |
-#: clamav-milter.c:834 |
|
84 |
+#: clamav-milter.c:862 |
|
85 | 85 |
msgid "\t--noreject\t\t-N\tDon't reject viruses, silently throw them away." |
86 | 86 |
msgstr "" |
87 | 87 |
|
88 |
-#: clamav-milter.c:835 |
|
88 |
+#: clamav-milter.c:863 |
|
89 | 89 |
msgid "\t--noxheader\t\t-n\tSuppress X-Virus-Scanned/X-Virus-Status headers." |
90 | 90 |
msgstr "" |
91 | 91 |
|
92 |
-#: clamav-milter.c:836 |
|
92 |
+#: clamav-milter.c:864 |
|
93 | 93 |
msgid "\t--pidfile=FILE\t\t-i FILE\tLocation of pidfile." |
94 | 94 |
msgstr "" |
95 | 95 |
|
96 |
-#: clamav-milter.c:837 |
|
96 |
+#: clamav-milter.c:865 |
|
97 | 97 |
msgid "\t--postmaster\t\t-p EMAIL\tPostmaster address [default=postmaster]." |
98 | 98 |
msgstr "" |
99 | 99 |
|
100 |
-#: clamav-milter.c:838 |
|
100 |
+#: clamav-milter.c:866 |
|
101 | 101 |
msgid "\t--postmaster-only\t-P\tSend warnings only to the postmaster." |
102 | 102 |
msgstr "" |
103 | 103 |
|
104 |
-#: clamav-milter.c:839 |
|
104 |
+#: clamav-milter.c:867 |
|
105 | 105 |
msgid "\t--quiet\t\t\t-q\tDon't send e-mail notifications of interceptions." |
106 | 106 |
msgstr "" |
107 | 107 |
|
108 |
-#: clamav-milter.c:840 |
|
108 |
+#: clamav-milter.c:868 |
|
109 | 109 |
msgid "\t--quarantine=USER\t-Q EMAIL\tQuanrantine e-mail account." |
110 | 110 |
msgstr "" |
111 | 111 |
|
112 |
-#: clamav-milter.c:841 |
|
112 |
+#: clamav-milter.c:869 |
|
113 | 113 |
msgid "\t--quarantine-dir=DIR\t-U DIR\tDirectory to store infected emails." |
114 | 114 |
msgstr "" |
115 | 115 |
|
116 |
-#: clamav-milter.c:842 |
|
116 |
+#: clamav-milter.c:870 |
|
117 | 117 |
msgid "" |
118 | 118 |
"\t--server=SERVER\t\t-s SERVER\tHostname/IP address of server(s) running " |
119 | 119 |
"clamd (when using TCPsocket)." |
120 | 120 |
msgstr "" |
121 | 121 |
|
122 |
-#: clamav-milter.c:843 |
|
122 |
+#: clamav-milter.c:871 |
|
123 | 123 |
msgid "\t--sign\t\t\t-S\tAdd a hard-coded signature to each scanned message." |
124 | 124 |
msgstr "" |
125 | 125 |
|
126 |
-#: clamav-milter.c:844 |
|
126 |
+#: clamav-milter.c:872 |
|
127 | 127 |
msgid "\t--signature-file=FILE\t-F FILE\tLocation of signature file." |
128 | 128 |
msgstr "" |
129 | 129 |
|
130 |
-#: clamav-milter.c:845 |
|
130 |
+#: clamav-milter.c:873 |
|
131 | 131 |
msgid "\t--template-file=FILE\t-t FILE\tLocation of e-mail template file." |
132 | 132 |
msgstr "" |
133 | 133 |
|
134 |
-#: clamav-milter.c:846 |
|
134 |
+#: clamav-milter.c:874 |
|
135 | 135 |
msgid "\t--timeout=SECS\t\t-T SECS\tTimeout waiting to childen to die." |
136 | 136 |
msgstr "" |
137 | 137 |
|
138 |
-#: clamav-milter.c:847 |
|
138 |
+#: clamav-milter.c:875 |
|
139 | 139 |
msgid "\t--version\t\t-V\tPrint the version number of this software." |
140 | 140 |
msgstr "" |
141 | 141 |
|
142 |
-#: clamav-milter.c:849 |
|
142 |
+#: clamav-milter.c:877 |
|
143 | 143 |
msgid "\t--debug-level=n\t\t-x n\tSets the debug level to 'n'." |
144 | 144 |
msgstr "" |
145 | 145 |
|
146 |
-#: clamav-milter.c:851 |
|
146 |
+#: clamav-milter.c:879 |
|
147 | 147 |
msgid "" |
148 | 148 |
"\n" |
149 | 149 |
"For more information type \"man clamav-milter\"." |
150 | 150 |
msgstr "" |
151 | 151 |
|
152 |
-#: clamav-milter.c:852 |
|
152 |
+#: clamav-milter.c:880 |
|
153 | 153 |
msgid "Report bugs to bugs@clamav.net." |
154 | 154 |
msgstr "" |
155 | 155 |
|
156 |
-#: clamav-milter.c:1133 |
|
156 |
+#: clamav-milter.c:1161 |
|
157 | 157 |
#, c-format |
158 | 158 |
msgid "%s: No socket-addr given\n" |
159 | 159 |
msgstr "" |
160 | 160 |
|
161 |
-#: clamav-milter.c:1142 |
|
161 |
+#: clamav-milter.c:1170 |
|
162 | 162 |
#, c-format |
163 | 163 |
msgid "%s: Can't parse the config file %s\n" |
164 | 164 |
msgstr "" |
165 | 165 |
|
166 |
-#: clamav-milter.c:1181 |
|
166 |
+#: clamav-milter.c:1209 |
|
167 | 167 |
#, c-format |
168 | 168 |
msgid "" |
169 | 169 |
"%s: The iface option to --broadcast is not supported on your operating " |
170 | 170 |
"system\n" |
171 | 171 |
msgstr "" |
172 | 172 |
|
173 |
-#: clamav-milter.c:1187 |
|
173 |
+#: clamav-milter.c:1215 |
|
174 | 174 |
#, c-format |
175 | 175 |
msgid "%s: Can't get information about user %s\n" |
176 | 176 |
msgstr "" |
177 | 177 |
|
178 |
-#: clamav-milter.c:1198 |
|
178 |
+#: clamav-milter.c:1226 |
|
179 | 179 |
#, c-format |
180 | 180 |
msgid "%s: AllowSupplementaryGroups: initgroups not supported.\n" |
181 | 181 |
msgstr "" |
182 | 182 |
|
183 |
-#: clamav-milter.c:1215 |
|
183 |
+#: clamav-milter.c:1243 |
|
184 | 184 |
#, c-format |
185 | 185 |
msgid "Running as user %s (UID %d, GID %d)\n" |
186 | 186 |
msgstr "" |
187 | 187 |
|
188 |
-#: clamav-milter.c:1218 |
|
188 |
+#: clamav-milter.c:1246 |
|
189 | 189 |
#, c-format |
190 | 190 |
msgid "%s: running as root is not recommended (check \"User\" in clamd.conf)\n" |
191 | 191 |
msgstr "" |
192 | 192 |
|
193 |
-#: clamav-milter.c:1220 |
|
193 |
+#: clamav-milter.c:1248 |
|
194 | 194 |
#, c-format |
195 | 195 |
msgid "%s: Only root can set an interface for --broadcast\n" |
196 | 196 |
msgstr "" |
197 | 197 |
|
198 |
-#: clamav-milter.c:1225 |
|
198 |
+#: clamav-milter.c:1253 |
|
199 | 199 |
#, c-format |
200 | 200 |
msgid "%s: Advisory mode doesn't work with quarantine mode\n" |
201 | 201 |
msgstr "" |
202 | 202 |
|
203 |
-#: clamav-milter.c:1232 |
|
203 |
+#: clamav-milter.c:1260 |
|
204 | 204 |
#, c-format |
205 | 205 |
msgid "%s: Advisory mode doesn't work with quarantine directories\n" |
206 | 206 |
msgstr "" |
207 | 207 |
|
208 |
-#: clamav-milter.c:1248 |
|
208 |
+#: clamav-milter.c:1276 |
|
209 | 209 |
#, c-format |
210 | 210 |
msgid "%s: insecure quarantine directory %s (mode 0%o)\n" |
211 | 211 |
msgstr "" |
212 | 212 |
|
213 |
-#: clamav-milter.c:1274 |
|
213 |
+#: clamav-milter.c:1302 |
|
214 | 214 |
#, c-format |
215 | 215 |
msgid "%s: ReadTimeout must not be negative in %s\n" |
216 | 216 |
msgstr "" |
217 | 217 |
|
218 |
-#: clamav-milter.c:1281 |
|
218 |
+#: clamav-milter.c:1309 |
|
219 | 219 |
#, c-format |
220 | 220 |
msgid "%s: StreamMaxLength must not be negative in %s\n" |
221 | 221 |
msgstr "" |
222 | 222 |
|
223 |
-#: clamav-milter.c:1297 |
|
223 |
+#: clamav-milter.c:1325 |
|
224 | 224 |
#, c-format |
225 | 225 |
msgid "%s: You can select one server type only (local/TCP) in %s\n" |
226 | 226 |
msgstr "" |
227 | 227 |
|
228 |
-#: clamav-milter.c:1307 |
|
228 |
+#: clamav-milter.c:1335 |
|
229 | 229 |
#, c-format |
230 | 230 |
msgid "The connection from sendmail to %s (%s) must not\n" |
231 | 231 |
msgstr "" |
232 | 232 |
|
233 |
-#: clamav-milter.c:1309 |
|
233 |
+#: clamav-milter.c:1337 |
|
234 | 234 |
#, c-format |
235 | 235 |
msgid "be the same as the connection to clamd (%s) in %s\n" |
236 | 236 |
msgstr "" |
237 | 237 |
|
238 |
-#: clamav-milter.c:1319 clamav-milter.c:1342 |
|
238 |
+#: clamav-milter.c:1347 clamav-milter.c:1370 |
|
239 | 239 |
#, c-format |
240 | 240 |
msgid "Can't talk to clamd server via %s\n" |
241 | 241 |
msgstr "" |
242 | 242 |
|
243 |
-#: clamav-milter.c:1321 clamav-milter.c:1344 |
|
243 |
+#: clamav-milter.c:1349 clamav-milter.c:1372 |
|
244 | 244 |
#, c-format |
245 | 245 |
msgid "Check your entry for LocalSocket in %s\n" |
246 | 246 |
msgstr "" |
247 | 247 |
|
248 |
-#: clamav-milter.c:1355 |
|
248 |
+#: clamav-milter.c:1383 |
|
249 | 249 |
msgid "Can't create a clamd session" |
250 | 250 |
msgstr "" |
251 | 251 |
|
252 |
-#: clamav-milter.c:1371 |
|
252 |
+#: clamav-milter.c:1400 |
|
253 | 253 |
#, c-format |
254 | 254 |
msgid "" |
255 | 255 |
"%s: --quarantine-dir not supported for remote scanning - use --quarantine\n" |
256 | 256 |
msgstr "" |
257 | 257 |
|
258 |
-#: clamav-milter.c:1386 |
|
258 |
+#: clamav-milter.c:1415 |
|
259 | 259 |
#, c-format |
260 | 260 |
msgid "%s: hostname %s is longer than %d characters\n" |
261 | 261 |
msgstr "" |
262 | 262 |
|
263 |
-#: clamav-milter.c:1405 |
|
263 |
+#: clamav-milter.c:1434 |
|
264 | 264 |
#, c-format |
265 |
-msgid "%s: --max_children must be given in sessions mode\n" |
|
265 |
+msgid "%s: --max-children must be given in sessions mode\n" |
|
266 | 266 |
msgstr "" |
267 | 267 |
|
268 |
-#: clamav-milter.c:1428 |
|
268 |
+#: clamav-milter.c:1457 |
|
269 | 269 |
#, c-format |
270 | 270 |
msgid "%s: Unknown host %s\n" |
271 | 271 |
msgstr "" |
272 | 272 |
|
273 |
-#: clamav-milter.c:1440 |
|
273 |
+#: clamav-milter.c:1469 |
|
274 | 274 |
#, c-format |
275 | 275 |
msgid "Can't talk to clamd server %s on port %d\n" |
276 | 276 |
msgstr "" |
277 | 277 |
|
278 |
-#: clamav-milter.c:1458 |
|
278 |
+#: clamav-milter.c:1486 |
|
279 | 279 |
msgid "Can't find any active clamd servers\n" |
280 | 280 |
msgstr "" |
281 | 281 |
|
282 |
-#: clamav-milter.c:1459 clamav-milter.c:1465 |
|
282 |
+#: clamav-milter.c:1487 clamav-milter.c:1493 |
|
283 | 283 |
#, c-format |
284 | 284 |
msgid "Check your entry for TCPSocket in %s\n" |
285 | 285 |
msgstr "" |
286 | 286 |
|
287 |
-#: clamav-milter.c:1464 |
|
287 |
+#: clamav-milter.c:1492 |
|
288 | 288 |
msgid "Can't find any clamd servers\n" |
289 | 289 |
msgstr "" |
290 | 290 |
|
291 |
-#: clamav-milter.c:1471 |
|
291 |
+#: clamav-milter.c:1499 |
|
292 | 292 |
#, c-format |
293 | 293 |
msgid "%s: You must select server type (local/TCP) in %s\n" |
294 | 294 |
msgstr "" |
295 | 295 |
|
296 |
-#: clamav-milter.c:1490 |
|
296 |
+#: clamav-milter.c:1541 |
|
297 | 297 |
#, c-format |
298 | 298 |
msgid "When debugging it is recommended that you use Foreground mode in %s\n" |
299 | 299 |
msgstr "" |
300 | 300 |
|
301 |
-#: clamav-milter.c:1491 |
|
301 |
+#: clamav-milter.c:1542 |
|
302 | 302 |
msgid "So that you can see all of the messages" |
303 | 303 |
msgstr "" |
304 | 304 |
|
305 |
-#: clamav-milter.c:1552 |
|
305 |
+#: clamav-milter.c:1605 |
|
306 | 306 |
#, c-format |
307 | 307 |
msgid "Starting: %s" |
308 | 308 |
msgstr "" |
309 | 309 |
|
310 |
-#: clamav-milter.c:1557 |
|
310 |
+#: clamav-milter.c:1610 |
|
311 | 311 |
msgid "Debugging is on" |
312 | 312 |
msgstr "" |
313 | 313 |
|
314 |
-#: clamav-milter.c:1561 |
|
314 |
+#: clamav-milter.c:1614 |
|
315 | 315 |
#, c-format |
316 | 316 |
msgid "" |
317 | 317 |
"%s: (-q && !LogSyslog): warning - all interception message methods are off\n" |
318 | 318 |
msgstr "" |
319 | 319 |
|
320 |
-#: clamav-milter.c:1565 |
|
320 |
+#: clamav-milter.c:1618 |
|
321 | 321 |
msgid "Starting clamav-milter" |
322 | 322 |
msgstr "" |
323 | 323 |
|
324 |
-#: clamav-milter.c:1574 |
|
324 |
+#: clamav-milter.c:1627 |
|
325 | 325 |
#, c-format |
326 | 326 |
msgid "Can't save PID in file %s" |
327 | 327 |
msgstr "" |
328 | 328 |
|
329 |
-#: clamav-milter.c:1576 |
|
329 |
+#: clamav-milter.c:1629 |
|
330 | 330 |
#, c-format |
331 | 331 |
msgid "Can't save PID in file %s\n" |
332 | 332 |
msgstr "" |
333 | 333 |
|
334 |
-#: clamav-milter.c:1604 |
|
334 |
+#: clamav-milter.c:1657 |
|
335 | 335 |
#, c-format |
336 | 336 |
msgid "%s: smfi_setconn failed\n" |
337 | 337 |
msgstr "" |
338 | 338 |
|
339 |
-#: clamav-milter.c:1617 |
|
339 |
+#: clamav-milter.c:1670 |
|
340 | 340 |
#, c-format |
341 | 341 |
msgid "Started: %s" |
342 | 342 |
msgstr "" |
343 | 343 |
|
344 |
-#: clamav-milter.c:1666 clamav-milter.c:1907 |
|
344 |
+#: clamav-milter.c:1720 clamav-milter.c:1964 |
|
345 | 345 |
#, c-format |
346 | 346 |
msgid "Check clamd server %s - it may be down\n" |
347 | 347 |
msgstr "" |
348 | 348 |
|
349 |
-#: clamav-milter.c:1671 clamav-milter.c:1916 |
|
349 |
+#: clamav-milter.c:1725 clamav-milter.c:1973 |
|
350 | 350 |
msgid "Check clamd server - it may be down\n" |
351 | 351 |
msgstr "" |
352 | 352 |
|
353 |
-#: clamav-milter.c:1833 |
|
353 |
+#: clamav-milter.c:1890 |
|
354 | 354 |
msgid "No free clamd sessions\n" |
355 | 355 |
msgstr "" |
356 | 356 |
|
357 |
-#: clamav-milter.c:1910 |
|
357 |
+#: clamav-milter.c:1967 |
|
358 | 358 |
#, c-format |
359 | 359 |
msgid "Check clamd server %s - it may be down" |
360 | 360 |
msgstr "" |
361 | 361 |
|
362 |
-#: clamav-milter.c:1952 |
|
362 |
+#: clamav-milter.c:2009 |
|
363 | 363 |
msgid "findServer: select failed" |
364 | 364 |
msgstr "" |
365 | 365 |
|
366 |
-#: clamav-milter.c:1961 |
|
366 |
+#: clamav-milter.c:2018 |
|
367 | 367 |
#, c-format |
368 | 368 |
msgid "findServer: using server %d\n" |
369 | 369 |
msgstr "" |
370 | 370 |
|
371 |
-#: clamav-milter.c:1966 |
|
371 |
+#: clamav-milter.c:2023 |
|
372 | 372 |
msgid "findServer: No response from any server\n" |
373 | 373 |
msgstr "" |
374 | 374 |
|
375 |
-#: clamav-milter.c:1968 |
|
375 |
+#: clamav-milter.c:2025 |
|
376 | 376 |
msgid "findServer: No response from any server" |
377 | 377 |
msgstr "" |
378 | 378 |
|
379 |
-#: clamav-milter.c:1989 |
|
379 |
+#: clamav-milter.c:2046 |
|
380 | 380 |
msgid "clamfi_connect: ctx is null" |
381 | 381 |
msgstr "" |
382 | 382 |
|
383 |
-#: clamav-milter.c:1994 |
|
383 |
+#: clamav-milter.c:2051 |
|
384 | 384 |
msgid "clamfi_connect: hostname is null" |
385 | 385 |
msgstr "" |
386 | 386 |
|
387 |
-#: clamav-milter.c:2015 |
|
387 |
+#: clamav-milter.c:2072 |
|
388 | 388 |
msgid "clamfi_connect: remoteIP is null" |
389 | 389 |
msgstr "" |
390 | 390 |
|
391 |
-#: clamav-milter.c:2023 |
|
391 |
+#: clamav-milter.c:2080 |
|
392 | 392 |
#, c-format |
393 | 393 |
msgid "clamfi_connect: connection from %s [%s]" |
394 | 394 |
msgstr "" |
395 | 395 |
|
396 |
-#: clamav-milter.c:2024 |
|
396 |
+#: clamav-milter.c:2081 |
|
397 | 397 |
#, c-format |
398 | 398 |
msgid "clamfi_connect: connection from %s [%s]\n" |
399 | 399 |
msgstr "" |
400 | 400 |
|
401 |
-#: clamav-milter.c:2043 |
|
401 |
+#: clamav-milter.c:2100 |
|
402 | 402 |
msgid "Can't get sendmail hostname" |
403 | 403 |
msgstr "" |
404 | 404 |
|
405 |
-#: clamav-milter.c:2048 |
|
405 |
+#: clamav-milter.c:2105 |
|
406 | 406 |
#, c-format |
407 | 407 |
msgid "Access Denied: Host Unknown (%s)" |
408 | 408 |
msgstr "" |
409 | 409 |
|
410 |
-#: clamav-milter.c:2058 |
|
410 |
+#: clamav-milter.c:2115 |
|
411 | 411 |
#, c-format |
412 | 412 |
msgid "Access Denied: Can't get IP address for (%s)" |
413 | 413 |
msgstr "" |
414 | 414 |
|
415 |
-#: clamav-milter.c:2075 |
|
415 |
+#: clamav-milter.c:2132 |
|
416 | 416 |
#, c-format |
417 | 417 |
msgid "Access Denied for %s[%s]" |
418 | 418 |
msgstr "" |
419 | 419 |
|
420 |
-#: clamav-milter.c:2093 |
|
420 |
+#: clamav-milter.c:2150 |
|
421 | 421 |
msgid "clamfi_connect: not scanning outgoing messages" |
422 | 422 |
msgstr "" |
423 | 423 |
|
424 |
-#: clamav-milter.c:2094 |
|
424 |
+#: clamav-milter.c:2151 |
|
425 | 425 |
msgid "clamfi_connect: not scanning outgoing messages\n" |
426 | 426 |
msgstr "" |
427 | 427 |
|
428 |
-#: clamav-milter.c:2102 |
|
428 |
+#: clamav-milter.c:2159 |
|
429 | 429 |
msgid "clamfi_connect: not scanning local messages" |
430 | 430 |
msgstr "" |
431 | 431 |
|
432 |
-#: clamav-milter.c:2103 |
|
432 |
+#: clamav-milter.c:2160 |
|
433 | 433 |
msgid "clamfi_connect: not scanning local messages\n" |
434 | 434 |
msgstr "" |
435 | 435 |
|
436 |
-#: clamav-milter.c:2137 |
|
436 |
+#: clamav-milter.c:2194 |
|
437 | 437 |
#, c-format |
438 | 438 |
msgid "hit max-children limit (%u >= %u)\n" |
439 | 439 |
msgstr "" |
440 | 440 |
|
441 |
-#: clamav-milter.c:2138 |
|
441 |
+#: clamav-milter.c:2195 |
|
442 | 442 |
#, c-format |
443 | 443 |
msgid "hit max-children limit (%u >= %u): waiting for some to exit\n" |
444 | 444 |
msgstr "" |
445 | 445 |
|
446 |
-#: clamav-milter.c:2144 |
|
446 |
+#: clamav-milter.c:2201 |
|
447 | 447 |
#, c-format |
448 | 448 |
msgid "hit max-children limit (%u >= %u)" |
449 | 449 |
msgstr "" |
450 | 450 |
|
451 |
-#: clamav-milter.c:2145 |
|
451 |
+#: clamav-milter.c:2202 |
|
452 | 452 |
#, c-format |
453 | 453 |
msgid "hit max-children limit (%u >= %u): waiting for some to exit" |
454 | 454 |
msgstr "" |
455 | 455 |
|
456 |
-#: clamav-milter.c:2150 |
|
456 |
+#: clamav-milter.c:2207 |
|
457 | 457 |
msgid "AV system temporarily overloaded - please try later" |
458 | 458 |
msgstr "" |
459 | 459 |
|
460 |
-#: clamav-milter.c:2180 |
|
460 |
+#: clamav-milter.c:2237 |
|
461 | 461 |
#, c-format |
462 | 462 |
msgid ">n_children = %d\n" |
463 | 463 |
msgstr "" |
464 | 464 |
|
465 |
-#: clamav-milter.c:2186 |
|
465 |
+#: clamav-milter.c:2243 |
|
466 | 466 |
msgid "Timeout waiting for a child to die" |
467 | 467 |
msgstr "" |
468 | 468 |
|
469 |
-#: clamav-milter.c:2188 |
|
469 |
+#: clamav-milter.c:2245 |
|
470 | 470 |
msgid "Timeout waiting for a child to die\n" |
471 | 471 |
msgstr "" |
472 | 472 |
|
473 |
-#: clamav-milter.c:2320 |
|
473 |
+#: clamav-milter.c:2377 |
|
474 | 474 |
msgid "clamfi_eoh" |
475 | 475 |
msgstr "" |
476 | 476 |
|
477 |
-#: clamav-milter.c:2323 |
|
477 |
+#: clamav-milter.c:2380 |
|
478 | 478 |
msgid "clamfi_eoh\n" |
479 | 479 |
msgstr "" |
480 | 480 |
|
481 |
-#: clamav-milter.c:2380 |
|
481 |
+#: clamav-milter.c:2437 |
|
482 | 482 |
msgid "clamfi_eoh: ignoring whitelisted message" |
483 | 483 |
msgstr "" |
484 | 484 |
|
485 |
-#: clamav-milter.c:2382 |
|
485 |
+#: clamav-milter.c:2439 |
|
486 | 486 |
msgid "clamfi_eoh: not scanning outgoing messages\n" |
487 | 487 |
msgstr "" |
488 | 488 |
|
489 |
-#: clamav-milter.c:2396 |
|
489 |
+#: clamav-milter.c:2453 |
|
490 | 490 |
#, c-format |
491 | 491 |
msgid "clamfi_envbody: %u bytes" |
492 | 492 |
msgstr "" |
493 | 493 |
|
494 |
-#: clamav-milter.c:2398 |
|
494 |
+#: clamav-milter.c:2455 |
|
495 | 495 |
#, c-format |
496 | 496 |
msgid "clamfi_envbody: %u bytes\n" |
497 | 497 |
msgstr "" |
498 | 498 |
|
499 |
-#: clamav-milter.c:2408 clamav-milter.c:2625 |
|
499 |
+#: clamav-milter.c:2465 clamav-milter.c:2693 |
|
500 | 500 |
#, c-format |
501 | 501 |
msgid "%s: Message more than StreamMaxLength (%ld) bytes - not scanned" |
502 | 502 |
msgstr "" |
503 | 503 |
|
504 |
-#: clamav-milter.c:2412 clamav-milter.c:2628 |
|
504 |
+#: clamav-milter.c:2469 clamav-milter.c:2696 |
|
505 | 505 |
msgid "Not Scanned - StreamMaxLength exceeded" |
506 | 506 |
msgstr "" |
507 | 507 |
|
508 |
-#: clamav-milter.c:2484 clamav-milter.c:2502 clamav-milter.c:3518 |
|
509 |
-#: clamav-milter.c:3525 |
|
508 |
+#: clamav-milter.c:2544 clamav-milter.c:2566 clamav-milter.c:3619 |
|
509 |
+#: clamav-milter.c:3626 |
|
510 | 510 |
msgid "send failed to clamd" |
511 | 511 |
msgstr "" |
512 | 512 |
|
513 |
-#: clamav-milter.c:2519 |
|
513 |
+#: clamav-milter.c:2587 |
|
514 | 514 |
#, c-format |
515 | 515 |
msgid "clamfi_eom: read %s" |
516 | 516 |
msgstr "" |
517 | 517 |
|
518 |
-#: clamav-milter.c:2520 |
|
518 |
+#: clamav-milter.c:2588 |
|
519 | 519 |
#, c-format |
520 | 520 |
msgid "clamfi_eom: read %s\n" |
521 | 521 |
msgstr "" |
522 | 522 |
|
523 |
-#: clamav-milter.c:2528 |
|
523 |
+#: clamav-milter.c:2596 |
|
524 | 524 |
msgid "clamfi_eom: read nothing from clamd" |
525 | 525 |
msgstr "" |
526 | 526 |
|
527 |
-#: clamav-milter.c:2530 |
|
527 |
+#: clamav-milter.c:2598 |
|
528 | 528 |
msgid "clamfi_eom: read nothing from clamd\n" |
529 | 529 |
msgstr "" |
530 | 530 |
|
531 |
-#: clamav-milter.c:2574 clamav-milter.c:2614 |
|
531 |
+#: clamav-milter.c:2642 clamav-milter.c:2682 |
|
532 | 532 |
msgid "Error determining host" |
533 | 533 |
msgstr "" |
534 | 534 |
|
535 |
-#: clamav-milter.c:2633 |
|
535 |
+#: clamav-milter.c:2701 |
|
536 | 536 |
msgid "Not Scanned" |
537 | 537 |
msgstr "" |
538 | 538 |
|
539 |
-#: clamav-milter.c:2644 |
|
539 |
+#: clamav-milter.c:2709 |
|
540 | 540 |
msgid "Clean" |
541 | 541 |
msgstr "" |
542 | 542 |
|
543 |
-#: clamav-milter.c:2648 |
|
543 |
+#: clamav-milter.c:2713 |
|
544 | 544 |
#, c-format |
545 | 545 |
msgid "%s: clean message from %s" |
546 | 546 |
msgstr "" |
547 | 547 |
|
548 |
-#: clamav-milter.c:2650 |
|
548 |
+#: clamav-milter.c:2715 |
|
549 | 549 |
msgid "an unknown sender" |
550 | 550 |
msgstr "" |
551 | 551 |
|
552 |
-#: clamav-milter.c:2684 |
|
552 |
+#: clamav-milter.c:2749 |
|
553 | 553 |
msgid "Infected" |
554 | 554 |
msgstr "" |
555 | 555 |
|
556 |
-#: clamav-milter.c:2702 |
|
556 |
+#: clamav-milter.c:2767 |
|
557 | 557 |
#, c-format |
558 | 558 |
msgid "Intercepted virus from %s to" |
559 | 559 |
msgstr "" |
560 | 560 |
|
561 |
-#: clamav-milter.c:2796 |
|
561 |
+#: clamav-milter.c:2861 |
|
562 | 562 |
msgid "" |
563 | 563 |
"Subject: Virus intercepted\n" |
564 | 564 |
"\n" |
565 | 565 |
msgstr "" |
566 | 566 |
|
567 |
-#: clamav-milter.c:2818 |
|
567 |
+#: clamav-milter.c:2883 |
|
568 | 568 |
msgid "A message you sent to\n" |
569 | 569 |
msgstr "" |
570 | 570 |
|
571 |
-#: clamav-milter.c:2825 |
|
571 |
+#: clamav-milter.c:2890 |
|
572 | 572 |
#, c-format |
573 | 573 |
msgid "The message %1$s sent from %2$s to\n" |
574 | 574 |
msgstr "" |
575 | 575 |
|
576 |
-#: clamav-milter.c:2828 |
|
576 |
+#: clamav-milter.c:2893 |
|
577 | 577 |
#, c-format |
578 | 578 |
msgid "A message sent from %s to\n" |
579 | 579 |
msgstr "" |
580 | 580 |
|
581 |
-#: clamav-milter.c:2833 |
|
581 |
+#: clamav-milter.c:2898 |
|
582 | 582 |
#, c-format |
583 | 583 |
msgid "contained %s and has not been delivered.\n" |
584 | 584 |
msgstr "" |
585 | 585 |
|
586 |
-#: clamav-milter.c:2837 |
|
586 |
+#: clamav-milter.c:2902 |
|
587 | 587 |
#, c-format |
588 | 588 |
msgid "" |
589 | 589 |
"\n" |
590 | 590 |
"The message in question has been quarantined as %s\n" |
591 | 591 |
msgstr "" |
592 | 592 |
|
593 |
-#: clamav-milter.c:2840 |
|
593 |
+#: clamav-milter.c:2905 |
|
594 | 594 |
#, c-format |
595 | 595 |
msgid "" |
596 | 596 |
"\n" |
... | ... |
@@ -598,13 +598,13 @@ msgid "" |
598 | 598 |
"\n" |
599 | 599 |
msgstr "" |
600 | 600 |
|
601 |
-#: clamav-milter.c:2843 |
|
601 |
+#: clamav-milter.c:2908 |
|
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:2856 |
|
607 |
+#: clamav-milter.c:2921 |
|
608 | 608 |
#, c-format |
609 | 609 |
msgid "" |
610 | 610 |
"\n" |
... | ... |
@@ -612,180 +612,180 @@ msgid "" |
612 | 612 |
"%s\t\n" |
613 | 613 |
msgstr "" |
614 | 614 |
|
615 |
-#: clamav-milter.c:2869 |
|
615 |
+#: clamav-milter.c:2932 |
|
616 | 616 |
#, c-format |
617 | 617 |
msgid "Quarantined infected mail as %s" |
618 | 618 |
msgstr "" |
619 | 619 |
|
620 |
-#: clamav-milter.c:2893 |
|
620 |
+#: clamav-milter.c:2956 |
|
621 | 621 |
#, c-format |
622 | 622 |
msgid "Can't set quarantine user %s" |
623 | 623 |
msgstr "" |
624 | 624 |
|
625 |
-#: clamav-milter.c:2895 |
|
625 |
+#: clamav-milter.c:2958 |
|
626 | 626 |
#, c-format |
627 | 627 |
msgid "Can't set quarantine user %s\n" |
628 | 628 |
msgstr "" |
629 | 629 |
|
630 |
-#: clamav-milter.c:2908 |
|
630 |
+#: clamav-milter.c:2971 |
|
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:2989 |
|
635 |
+#: clamav-milter.c:3055 |
|
636 | 636 |
#, c-format |
637 | 637 |
msgid "Can't remove clean file %s" |
638 | 638 |
msgstr "" |
639 | 639 |
|
640 |
-#: clamav-milter.c:3160 clamav-milter.c:3163 |
|
640 |
+#: clamav-milter.c:3227 clamav-milter.c:3230 |
|
641 | 641 |
#, c-format |
642 | 642 |
msgid "write failure (%u bytes) to %s: %s" |
643 | 643 |
msgstr "" |
644 | 644 |
|
645 |
-#: clamav-milter.c:3177 clamav-milter.c:3180 |
|
645 |
+#: clamav-milter.c:3244 clamav-milter.c:3247 |
|
646 | 646 |
#, c-format |
647 | 647 |
msgid "write failure (%u bytes) to clamd: %s" |
648 | 648 |
msgstr "" |
649 | 649 |
|
650 |
-#: clamav-milter.c:3246 |
|
650 |
+#: clamav-milter.c:3313 |
|
651 | 651 |
#, c-format |
652 | 652 |
msgid "No data received from clamd in %d seconds\n" |
653 | 653 |
msgstr "" |
654 | 654 |
|
655 |
-#: clamav-milter.c:3268 |
|
655 |
+#: clamav-milter.c:3335 |
|
656 | 656 |
#, c-format |
657 | 657 |
msgid "Can't stat %s" |
658 | 658 |
msgstr "" |
659 | 659 |
|
660 |
-#: clamav-milter.c:3279 clamav-milter.c:3679 |
|
660 |
+#: clamav-milter.c:3346 clamav-milter.c:3782 |
|
661 | 661 |
#, c-format |
662 | 662 |
msgid "Can't open %s" |
663 | 663 |
msgstr "" |
664 | 664 |
|
665 |
-#: clamav-milter.c:3417 |
|
665 |
+#: clamav-milter.c:3485 |
|
666 | 666 |
#, c-format |
667 | 667 |
msgid "mkdir %s failed" |
668 | 668 |
msgstr "" |
669 | 669 |
|
670 |
-#: clamav-milter.c:3430 |
|
670 |
+#: clamav-milter.c:3498 |
|
671 | 671 |
#, c-format |
672 | 672 |
msgid "mktemp %s failed" |
673 | 673 |
msgstr "" |
674 | 674 |
|
675 |
-#: clamav-milter.c:3440 |
|
675 |
+#: clamav-milter.c:3508 |
|
676 | 676 |
#, c-format |
677 | 677 |
msgid "Temporary quarantine file %s creation failed" |
678 | 678 |
msgstr "" |
679 | 679 |
|
680 |
-#: clamav-milter.c:3537 |
|
680 |
+#: clamav-milter.c:3638 |
|
681 | 681 |
msgid "failed to create TCPSocket to talk to clamd" |
682 | 682 |
msgstr "" |
683 | 683 |
|
684 |
-#: clamav-milter.c:3548 clamav-milter.c:3559 |
|
684 |
+#: clamav-milter.c:3649 clamav-milter.c:3660 |
|
685 | 685 |
msgid "recv failed from clamd getting PORT" |
686 | 686 |
msgstr "" |
687 | 687 |
|
688 |
-#: clamav-milter.c:3570 |
|
688 |
+#: clamav-milter.c:3671 |
|
689 | 689 |
#, c-format |
690 | 690 |
msgid "Expected port information from clamd, got '%s'" |
691 | 691 |
msgstr "" |
692 | 692 |
|
693 |
-#: clamav-milter.c:3573 |
|
693 |
+#: clamav-milter.c:3674 |
|
694 | 694 |
#, c-format |
695 | 695 |
msgid "Expected port information from clamd, got '%s'\n" |
696 | 696 |
msgstr "" |
697 | 697 |
|
698 |
-#: clamav-milter.c:3593 |
|
698 |
+#: clamav-milter.c:3694 |
|
699 | 699 |
#, c-format |
700 | 700 |
msgid "Connecting to local port %d\n" |
701 | 701 |
msgstr "" |
702 | 702 |
|
703 |
-#: clamav-milter.c:3604 clamav-milter.c:3607 |
|
703 |
+#: clamav-milter.c:3705 clamav-milter.c:3708 |
|
704 | 704 |
#, c-format |
705 | 705 |
msgid "Failed to connect to port %d given by clamd: %s" |
706 | 706 |
msgstr "" |
707 | 707 |
|
708 |
-#: clamav-milter.c:3691 |
|
708 |
+#: clamav-milter.c:3794 |
|
709 | 709 |
#, c-format |
710 | 710 |
msgid "Clamd (pid %d) seems to have died" |
711 | 711 |
msgstr "" |
712 | 712 |
|
713 |
-#: clamav-milter.c:3717 |
|
713 |
+#: clamav-milter.c:3820 |
|
714 | 714 |
#, c-format |
715 | 715 |
msgid "Can't open e-mail template file %s" |
716 | 716 |
msgstr "" |
717 | 717 |
|
718 |
-#: clamav-milter.c:3726 |
|
718 |
+#: clamav-milter.c:3829 |
|
719 | 719 |
#, c-format |
720 | 720 |
msgid "Can't stat e-mail template file %s" |
721 | 721 |
msgstr "" |
722 | 722 |
|
723 |
-#: clamav-milter.c:3735 |
|
723 |
+#: clamav-milter.c:3838 |
|
724 | 724 |
msgid "Out of memory" |
725 | 725 |
msgstr "" |
726 | 726 |
|
727 |
-#: clamav-milter.c:3762 |
|
727 |
+#: clamav-milter.c:3865 |
|
728 | 728 |
#, c-format |
729 | 729 |
msgid "%s: Unknown clamAV variable \"%c\"\n" |
730 | 730 |
msgstr "" |
731 | 731 |
|
732 |
-#: clamav-milter.c:3773 |
|
732 |
+#: clamav-milter.c:3876 |
|
733 | 733 |
#, c-format |
734 | 734 |
msgid "%s: Unterminated sendmail variable \"%s\"\n" |
735 | 735 |
msgstr "" |
736 | 736 |
|
737 |
-#: clamav-milter.c:3784 |
|
737 |
+#: clamav-milter.c:3887 |
|
738 | 738 |
#, c-format |
739 | 739 |
msgid "%s: Unknown sendmail variable \"%s\"\n" |
740 | 740 |
msgstr "" |
741 | 741 |
|
742 |
-#: clamav-milter.c:3850 |
|
742 |
+#: clamav-milter.c:3953 |
|
743 | 743 |
#, c-format |
744 | 744 |
msgid "Can't rename %1$s to %2$s" |
745 | 745 |
msgstr "" |
746 | 746 |
|
747 |
-#: clamav-milter.c:3874 |
|
747 |
+#: clamav-milter.c:3977 |
|
748 | 748 |
#, c-format |
749 | 749 |
msgid "[Virus] %s" |
750 | 750 |
msgstr "" |
751 | 751 |
|
752 |
-#: clamav-milter.c:3967 |
|
752 |
+#: clamav-milter.c:4070 |
|
753 | 753 |
msgid "" |
754 | 754 |
"No response from any clamd server - your AV system is not scanning emails\n" |
755 | 755 |
msgstr "" |
756 | 756 |
|
757 |
-#: clamav-milter.c:3970 |
|
757 |
+#: clamav-milter.c:4073 |
|
758 | 758 |
msgid "" |
759 | 759 |
"No response from any clamd server - your AV system is not scanning emails" |
760 | 760 |
msgstr "" |
761 | 761 |
|
762 |
-#: clamav-milter.c:3988 |
|
762 |
+#: clamav-milter.c:4091 |
|
763 | 763 |
msgid "Subject: ClamAV Down\n" |
764 | 764 |
msgstr "" |
765 | 765 |
|
766 |
-#: clamav-milter.c:3991 |
|
766 |
+#: clamav-milter.c:4094 |
|
767 | 767 |
msgid "" |
768 | 768 |
"This is an automatic message\n" |
769 | 769 |
"\n" |
770 | 770 |
msgstr "" |
771 | 771 |
|
772 |
-#: clamav-milter.c:3994 |
|
772 |
+#: clamav-milter.c:4097 |
|
773 | 773 |
msgid "The clamd program cannot be contacted.\n" |
774 | 774 |
msgstr "" |
775 | 775 |
|
776 |
-#: clamav-milter.c:3996 |
|
776 |
+#: clamav-milter.c:4099 |
|
777 | 777 |
msgid "No clamd server can be contacted.\n" |
778 | 778 |
msgstr "" |
779 | 779 |
|
780 |
-#: clamav-milter.c:3998 |
|
780 |
+#: clamav-milter.c:4101 |
|
781 | 781 |
msgid "Emails may not be being scanned, please check your servers.\n" |
782 | 782 |
msgstr "" |
783 | 783 |
|
784 |
-#: clamav-milter.c:4221 clamav-milter.c:4250 |
|
784 |
+#: clamav-milter.c:4332 clamav-milter.c:4363 |
|
785 | 785 |
#, c-format |
786 | 786 |
msgid "Stopping %s" |
787 | 787 |
msgstr "" |
788 | 788 |
|
789 |
-#: clamav-milter.c:4252 |
|
789 |
+#: clamav-milter.c:4369 |
|
790 | 790 |
msgid "Stopping clamav-milter" |
791 | 791 |
msgstr "" |