Репозиторий Sisyphus
Последнее обновление: 1 октября 2023 | Пакетов: 18631 | Посещений: 37424209
en ru br
Репозитории ALT
S:0.103.8-alt1
5.1: 0.98.1-alt0.M51.1
4.1: 0.97.8-alt0.M41.1
+updates:0.94.1-alt0.M41.1
4.0: 0.97.8-alt0.M40.1
+updates:0.91.2-alt1
3.0: 0.86.2-alt1
+updates:0.91.1-alt0.M30.1
+backports:0.93.3-alt0.M30.1
www.altlinux.org/Changes

Другие репозитории
Upstream:0.93rc1

Группа :: Работа с файлами
Пакет: clamav

 Главная   Изменения   Спек   Патчи   Sources   Загрузить   Gear   Bugs and FR  Repocop 

Патч: clamav-milter-0.87.3-2-log.patch
Скачать


--- clamav-milter/clamav-milter.c.orig	2006-07-08 13:27:45 +0500
+++ clamav-milter/clamav-milter.c	2006-07-08 13:34:37 +0500
@@ -197,11 +197,18 @@
 /*
  * Each libmilter thread has one of these
  */
+char    *NoQueueID = "00000000000000";
 struct	privdata {
+        /* Connection oriented data */
+        char    *helo;          /* Sender's helo */
+        char    *ConnectQueueID;  /* sendmail's message id then connection initialized */
+        int     MsgCount;       /* Message counter */
+
+        /* Message oriented data */
+	char    *QueueID;	/* sendmail's message (queue) id */
 	char	*from;	/* Who sent the message */
 	char	*subject;	/* Original subject */
 	char	*sender;	/* Secretary - often used in mailing lists */
-	char	*helo;		/* The HELO string */
 	char	**to;	/* Who is the message going to */
 	int	numTo;	/* Number of people the message is going to */
 #ifndef	SESSION
@@ -234,10 +241,11 @@
 static	int		pingServer(int serverNumber);
 #endif
 static	int		findServer(void);
+
+void signal_handler( int s);
+
 static	sfsistat	clamfi_connect(SMFICTX *ctx, char *hostname, _SOCK_ADDR *hostaddr);
-#ifdef	CL_DEBUG
 static	sfsistat	clamfi_helo(SMFICTX *ctx, char *helostring);
-#endif
 static	sfsistat	clamfi_envfrom(SMFICTX *ctx, char **argv);
 static	sfsistat	clamfi_envrcpt(SMFICTX *ctx, char **argv);
 static	sfsistat	clamfi_header(SMFICTX *ctx, char *headerf, char *headerv);
@@ -247,7 +255,7 @@
 static	sfsistat	clamfi_abort(SMFICTX *ctx);
 static	sfsistat	clamfi_close(SMFICTX *ctx);
 static	void		clamfi_cleanup(SMFICTX *ctx);
-static	void		clamfi_free(struct privdata *privdata);
+static	void		clamfi_free_msgdata(struct privdata *privdata);
 static	int		clamfi_send(struct privdata *privdata, size_t len, const char *format, ...);
 static	int		clamd_recv(int sock, char *buf, size_t len);
 static	off_t		updateSigFile(void);
@@ -394,6 +402,7 @@
 static	short	use_syslog = 0;
 static	const	char	*pidFile;
 static	int	logVerbose = 0;
+static	int	syslogVerbose = 0;
 static	struct	cfgstruct	*copt;
 static	const	char	*localSocket;	/* milter->clamd comms */
 static	in_port_t	tcpSocket;	/* milter->clamd comms */
@@ -522,11 +531,7 @@
 		SMFI_VERSION,	/* version code -- leave untouched */
 		SMFIF_ADDHDRS|SMFIF_CHGHDRS,	/* flags - we add and deleted headers */
 		clamfi_connect, /* connection callback */
-#ifdef	CL_DEBUG
 		clamfi_helo,	/* HELO filter callback */
-#else
-		NULL,
-#endif
 		clamfi_envfrom, /* envelope sender filter callback */
 		clamfi_envrcpt, /* envelope recipient filter callback */
 		clamfi_header, /* header filter callback */
@@ -1049,14 +1054,18 @@
 		streamMaxLength = (long)cpt->numarg;
 	}
 
-	if(cfgopt(copt, "LogSyslog")) {
-		int fac = LOG_LOCAL6;
-
-		if(cfgopt(copt, "LogVerbose")) {
-			logVerbose = 1;
+	if(cfgopt(copt, "LogVerbose")) {
+		logVerbose = 1;
 #if	((SENDMAIL_VERSION_A > 8) || ((SENDMAIL_VERSION_A == 8) && (SENDMAIL_VERSION_B >= 13)))
 			smfi_setdbg(6);
 #endif
+	}
+
+	if(cfgopt(copt, "LogSyslog")) {
+		int fac = LOG_LOCAL6;
+
+		if(cfgopt(copt, "SysLogVerbose")) {
+			syslogVerbose = 1;
 		}
 		use_syslog = 1;
 
@@ -1991,18 +2000,30 @@
 	char ip[INET_ADDRSTRLEN];	/* IPv4 only */
 #endif
 	const char *remoteIP;
+	struct privdata *privdata;
+	char *QueueID = smfi_getsymval(ctx, "i");
 
 	if(quitting)
 		return cl_error;
 
+	if (!QueueID) {
+	    QueueID = NoQueueID;
+	    if(use_syslog)
+		syslog(LOG_WARNING,
+			_("%s: clamfi_connect: Message ID is NULL. Check for 'i' macros in Milter.macros.connect in sendmail.cf."),
+			QueueID);
+	}
+
+	cli_dbgmsg(_("[%d] %s: clamfi_connect: starting...\n"), getpid(), QueueID);
+
 	if(ctx == NULL) {
 		if(use_syslog)
-			syslog(LOG_ERR, _("clamfi_connect: ctx is null"));
+			syslog(LOG_ERR, _("%s: clamfi_connect: ctx is null"), QueueID);
 		return cl_error;
 	}
 	if(hostname == NULL) {
 		if(use_syslog)
-			syslog(LOG_ERR, _("clamfi_connect: hostname is null"));
+			syslog(LOG_ERR, _("%s: clamfi_connect: hostname is null"), QueueID);
 		return cl_error;
 	}
 	if((hostaddr == NULL) || (&(((struct sockaddr_in *)(hostaddr))->sin_addr) == NULL))
@@ -2023,7 +2044,7 @@
 
 		if(remoteIP == NULL) {
 			if(use_syslog)
-				syslog(LOG_ERR, _("clamfi_connect: remoteIP is null"));
+				syslog(LOG_ERR, _("%s: clamfi_connect: remoteIP is null"), QueueID);
 			return cl_error;
 		}
 	}
@@ -2032,12 +2053,12 @@
 	if(debug_level >= 4) {
 		if(hostname[0] == '[') {
 			if(use_syslog)
-				syslog(LOG_NOTICE, _("clamfi_connect: connection from %s"), remoteIP);
-			cli_dbgmsg(_("clamfi_connect: connection from %s\n"), remoteIP);
+				syslog(LOG_NOTICE, _("%s: clamfi_connect: connection from %s"), QueueID, remoteIP);
+			cli_dbgmsg(_("%s: clamfi_connect: connection from %s\n"), QueueID, remoteIP);
 		} else {
 			if(use_syslog)
-				syslog(LOG_NOTICE, _("clamfi_connect: connection from %s [%s]"), hostname, remoteIP);
-			cli_dbgmsg(_("clamfi_connect: connection from %s [%s]\n"), hostname, remoteIP);
+				syslog(LOG_NOTICE, _("%s: clamfi_connect: connection from %s [%s]"), QueueID, hostname, remoteIP);
+			cli_dbgmsg(_("%s: clamfi_connect: connection from %s [%s]\n"), QueueID, hostname, remoteIP);
 		}
 	}
 #endif
@@ -2057,7 +2078,7 @@
 		 */
 		if((hostmail = smfi_getsymval(ctx, "{if_name}")) == NULL) {
 			if(use_syslog)
-				syslog(LOG_ERR, _("Can't get sendmail hostname"));
+				syslog(LOG_ERR, _("%s: clamfi_connect: Can't get sendmail hostname"), QueueID);
 			return cl_error;
 		}
 		/*
@@ -2066,7 +2087,7 @@
 		 */
 		if(clamfi_gethostbyname(hostmail, &hostent, buf, sizeof(buf)) != 0) {
 			if(use_syslog)
-				syslog(LOG_WARNING, _("Access Denied: Host Unknown (%s)"), hostmail);
+				syslog(LOG_WARNING, _("%s: clamfi_connect: Access Denied: Host Unknown (%s)"), QueueID, hostmail);
 			if(hostmail[0] == '[')
 				/*
 				 * A case could be made that it's not clamAV's
@@ -2075,8 +2096,8 @@
 				 * just too worried about any knock on effects
 				 * to do that...
 				 */
-				cli_warnmsg(_("Can't find entry for IP address %s in DNS - check your DNS setting\n"),
-					hostmail);
+				cli_warnmsg(_("%s: clamfi_connect: Can't find entry for IP address %s in DNS - check your DNS setting\n"),
+					QueueID, hostname);
 			return cl_error;
 		}
 
@@ -2086,7 +2107,7 @@
 			perror(hostent.h_name);
 			/*strcpy(ip, (char *)inet_ntoa(*(struct in_addr *)hostent.h_addr));*/
 			if(use_syslog)
-				syslog(LOG_WARNING, _("Access Denied: Can't get IP address for (%s)"), hostent.h_name);
+				syslog(LOG_WARNING, _("%s: clamfi_connect: Access Denied: Can't get IP address for (%s)"), QueueID, hostent.h_name);
 			return cl_error;
 		}
 #else
@@ -2103,7 +2124,7 @@
 		if(!hosts_ctl(progname, hostent.h_name, ip, STRING_UNKNOWN)) {
 			pthread_mutex_unlock(&wrap_mutex);
 			if(use_syslog)
-				syslog(LOG_WARNING, _("Access Denied for %s[%s]"), hostent.h_name, ip);
+				syslog(LOG_WARNING, _("%s: clamfi_connect: Access Denied for %s[%s]"), QueueID, hostent.h_name, ip);
 			return SMFIS_TEMPFAIL;
 		}
 		pthread_mutex_unlock(&wrap_mutex);
@@ -2115,14 +2136,15 @@
 		 * Patch from "Richard G. Roberto" <rgr@dedlegend.com>
 		 * Always scan whereever the message is from
 		 */
-		return SMFIS_CONTINUE;
+		/* return SMFIS_CONTINUE; */ /* Replaced to goto by ASY */
+		goto EXIT;
 
 	if(!oflag)
 		if(strcmp(remoteIP, "127.0.0.1") == 0) {
 #ifdef	CL_DEBUG
 			if(use_syslog)
-				syslog(LOG_DEBUG, _("clamfi_connect: not scanning outgoing messages"));
-			cli_dbgmsg(_("clamfi_connect: not scanning outgoing messages\n"));
+				syslog(LOG_DEBUG, _("%s: clamfi_connect: not scanning outgoing messages"), QueueID);
+			cli_dbgmsg(_("%s: clamfi_connect: not scanning outgoing messages\n"), QueueID);
 #endif
 			return SMFIS_ACCEPT;
 		}
@@ -2130,8 +2152,8 @@
 	if((!lflag) && isLocalAddr(inet_addr(remoteIP))) {
 #ifdef	CL_DEBUG
 		if(use_syslog)
-			syslog(LOG_DEBUG, _("clamfi_connect: not scanning local messages"));
-		cli_dbgmsg(_("clamfi_connect: not scanning local messages\n"));
+			syslog(LOG_DEBUG, _("%s: clamfi_connect: not scanning local messages"), QueueID);
+		cli_dbgmsg(_("%s: clamfi_connect: not scanning local messages\n"), QueueID);
 #endif
 		return SMFIS_ACCEPT;
 	}
@@ -2145,30 +2167,135 @@
 
 		if(gethostname(me, sizeof(me) - 1) < 0) {
 			if(use_syslog)
-				syslog(LOG_WARNING, _("clamfi_connect: gethostname failed"));
+				syslog(LOG_WARNING, _("%s: clamfi_connect: gethostname failed"), QueueID);
 			return SMFIS_CONTINUE;
 		}
 		if(strcasecmp(hostname, me) == 0) {
 			if(use_syslog)
-				syslog(LOG_NOTICE, _("Rejected email falsely claiming to be from here"));
+				syslog(LOG_NOTICE, _("%s: clamfi_connect: Rejected email falsely claiming to be from here"), QueueID);
 			smfi_setreply(ctx, "550", "5.7.1", _("You have claimed to be me, but you are not"));
 			broadcast(_("Forged local address detected"));
 			return SMFIS_REJECT;
 		}
 	}
+
+EXIT:
+	privdata = (struct privdata *) cli_calloc(1, sizeof(struct privdata));
+
+	if (smfi_setpriv(ctx, privdata) == MI_SUCCESS) {
+	    if (syslogVerbose && use_syslog)
+		syslog(LOG_DEBUG,
+			_("%s: clamfi_connect: smfi_setpriv ok, privdata=%p, remoteIP=%s"),
+			QueueID, privdata, remoteIP);
+	} else {
+	    if (use_syslog) syslog(LOG_ERR, _("%s: clamfi_connect: smfi_setpriv error"), QueueID);
+	    return cl_error;
+	}
+
+	memset(privdata, '\0', sizeof *privdata);
+
+	if ((privdata->ConnectQueueID = strdup(QueueID)) == NULL) {
+	    if(use_syslog)
+		syslog(LOG_ERR,
+			_("%s: clamfi_connect: Error allocation memory for privdata->QueueID"),
+			QueueID);
+	    return cl_error;
+	}
+
+	cli_dbgmsg(_("[%d] %s: clamfi_connect: ...connected\n"), getpid(), QueueID);
+
 	return SMFIS_CONTINUE;
-}
+
+} /* clamfi_connect */
+
+static sfsistat 
+clamfi_helo(SMFICTX *ctx, char *helostring)
+{
+    struct privdata *privdata = (struct privdata *) smfi_getpriv(ctx);
+    char        *QueueID;
+
+    if (!privdata) {
+	if(use_syslog) syslog(LOG_ERR, _("%s: clamfi_helo: privdata is NULL, breake"),
+				smfi_getsymval(ctx, "i")); /* if NULL, (null) printed */
+	return cl_error;
+    }
+
+    if (privdata->ConnectQueueID) QueueID = privdata->ConnectQueueID;
+    else QueueID = NoQueueID;
+
+    if (syslogVerbose && use_syslog)
+	syslog(LOG_DEBUG, _("%s: clamfi_helo: helo/ehlo: %s"), QueueID, helostring);
+
+    cli_dbgmsg(_("[%d] %s: clamfi_helo: helo/ehlo: %s\n"), getpid(), QueueID, helostring);
+
+    if (!privdata->helo) {
+	if ((privdata->helo = strdup(helostring)) == NULL) {
+	    if(use_syslog)
+		    syslog(LOG_ERR,
+			    _("%s: clamfi_helo: Error allocation memory for privdata->helo"),
+			    QueueID);
+	    clamfi_cleanup(ctx);
+	    return cl_error;
+	}
+    } else {
+	if(use_syslog)
+	    syslog(LOG_WARNING, _("%s: clamfi_helo: privdata->helo not null "), QueueID);
+    }
+
+    return SMFIS_CONTINUE;
+
+} /* clamfi_helo */
 
 static sfsistat
 clamfi_envfrom(SMFICTX *ctx, char **argv)
 {
-	struct privdata *privdata;
 	const char *mailaddr = argv[0];
 
-	if(logVerbose)
-		syslog(LOG_DEBUG, "clamfi_envfrom: %s", argv[0]);
+	struct privdata *privdata = (struct privdata *) smfi_getpriv(ctx);
+	char *QueueID = smfi_getsymval(ctx, "i");
 
-	cli_dbgmsg("clamfi_envfrom: %s\n", argv[0]);
+	if (!privdata) {
+	    if (use_syslog) syslog(LOG_ERR, "%s: clamfi_envfrom: privdata is NULL, breake", QueueID);
+	    return cl_error;
+	}
+
+	/* Per message message id */
+	if (QueueID) {
+	    if ((strlen(QueueID) != 14) && use_syslog)
+		syslog(LOG_WARNING,
+			_("%s: clamfi_envfrom: Message ID length %d. It's not default for sendmail 8.11 and more"),
+			QueueID, strlen(QueueID));
+
+		if ((strcmp(QueueID,privdata->ConnectQueueID) != 0) && syslogVerbose && use_syslog) {
+		    syslog(LOG_DEBUG,
+			    _("%s: clamfi_envfrom: non first message in smtp connection (%s first)"),
+			    QueueID, privdata->ConnectQueueID);
+		}
+
+	    if ((privdata->QueueID = strdup(QueueID)) == NULL) {
+		if (use_syslog)
+		    syslog(LOG_ERR,
+			    _("%s: clamfi_envfrom: Error allocation memory for privdata->QueueID"), QueueID);
+		clamfi_cleanup(ctx);
+		return cl_error;
+	    }
+	} else {
+	    if ((privdata->QueueID = strdup(NoQueueID)) == NULL) {
+		if (use_syslog)
+		    syslog(LOG_ERR,
+			    _("%s: clamfi_envfrom: Error allocation memory for privdata->QueueID"), QueueID);
+		clamfi_cleanup(ctx);
+		return cl_error;
+	    }
+	    if (syslogVerbose && use_syslog)
+		    syslog(LOG_WARNING,
+			    _("%s: clamfi_envfrom: Message ID is NULL. Check for 'i' macros in Milter.macros.envfrom in sendmail.cf."),
+			    NoQueueID);
+	}
+
+	if (syslogVerbose && use_syslog) syslog(LOG_DEBUG, _("%s: clamfi_envfrom: %s"), QueueID, argv[0]);
+
+	cli_dbgmsg(_("[%d] %s: clamfi_envfrom: %s\n"), getpid(), QueueID, argv[0]);
 
 	if(strcmp(argv[0], "<>") == 0) {
 		mailaddr = smfi_getsymval(ctx, "{mail_addr}");
@@ -2176,11 +2303,11 @@
 			mailaddr = smfi_getsymval(ctx, "_");
 
 		if(mailaddr && *mailaddr)
-			cli_dbgmsg("Message from \"%s\" has no from field\n", mailaddr);
+			cli_dbgmsg(_("[%d] %s: Message from \"%s\" has no from field\n"), getpid(), QueueID, mailaddr);
 		else {
 #if	0
 			if(use_syslog)
-				syslog(LOG_NOTICE, _("Rejected email with empty from field"));
+				syslog(LOG_NOTICE, _("%s: Rejected email with empty from field"), QueueID);
 			smfi_setreply(ctx, "554", "5.7.1", _("You have not said who the email is from"));
 			broadcast(_("Reject email with empty from field"));
 			clamfi_cleanup(ctx);
@@ -2204,16 +2331,16 @@
 			struct timespec timeout;
 
 			cli_dbgmsg((dont_wait) ?
-					_("hit max-children limit (%u >= %u)\n") :
-					_("hit max-children limit (%u >= %u): waiting for some to exit\n"),
-				n_children, max_children);
+					_("%s: clamfi_envfrom: hit max-children limit (%u >= %u)\n") :
+					_("%s: clamfi_envfrom: hit max-children limit (%u >= %u): waiting for some to exit\n"),
+				QueueID, n_children, max_children);
 
 			if(use_syslog)
 				syslog(LOG_NOTICE,
 					(dont_wait) ?
-						_("hit max-children limit (%u >= %u)") :
-						_("hit max-children limit (%u >= %u): waiting for some to exit"),
-					n_children, max_children);
+						_("%s: clamfi_envfrom: hit max-children limit (%u >= %u)") :
+						_("%s: clamfi_envfrom: hit max-children limit (%u >= %u): waiting for some to exit"),
+					QueueID, n_children, max_children);
 
 			if(dont_wait) {
 				pthread_mutex_unlock(&n_children_mutex);
@@ -2249,22 +2376,18 @@
 		}
 		n_children++;
 
-		cli_dbgmsg(_(">n_children = %d\n"), n_children);
+		cli_dbgmsg(_("[%d] %s: clamfi_envfrom: >n_children = %d\n"), getpid(), QueueID, n_children);
 		pthread_mutex_unlock(&n_children_mutex);
 
 		if(child_timeout && (rc == ETIMEDOUT)) {
 #ifdef	CL_DEBUG
 			if(use_syslog)
-				syslog(LOG_NOTICE, _("Timeout waiting for a child to die"));
+				syslog(LOG_NOTICE, _("%s: clamfi_envfrom: Timeout waiting for a child to die"), QueueID);
 #endif
-			cli_dbgmsg(_("Timeout waiting for a child to die\n"));
+			cli_dbgmsg(_("[%d] %s: clamfi_envfrom: Timeout waiting for a child to die\n"), getpid(), QueueID);
 		}
 	}
 
-	privdata = (struct privdata *)cli_calloc(1, sizeof(struct privdata));
-	if(privdata == NULL)
-		return cl_error;
-
 	privdata->dataSocket = -1;	/* 0.4 */
 #ifndef	SESSION
 	privdata->cmdSocket = -1;	/* 0.4 */
@@ -2282,33 +2405,25 @@
 	if(hflag)
 		privdata->headers = header_list_new();
 
-	if(smfi_setpriv(ctx, privdata) == MI_SUCCESS)
-		return SMFIS_CONTINUE;
-
-	clamfi_free(privdata);
-
-	return cl_error;
-}
-
-#ifdef	CL_DEBUG
-static sfsistat
-clamfi_helo(SMFICTX *ctx, char *helostring)
-{
-	cli_dbgmsg("HELO '%s'\n", helostring);
-
 	return SMFIS_CONTINUE;
-}
-#endif
+
+} /* clamfi_envfrom */
 
 static sfsistat
 clamfi_envrcpt(SMFICTX *ctx, char **argv)
 {
 	struct privdata *privdata = (struct privdata *)smfi_getpriv(ctx);
 
-	if(logVerbose)
-		syslog(LOG_DEBUG, "clamfi_envrcpt: %s", argv[0]);
+	if (!privdata) {
+	    if (use_syslog) syslog(LOG_ERR, _("%s: clamfi_envrcpt: privdata is NULL, breake"),
+		smfi_getsymval(ctx, "i"));
+	    return cl_error;
+	}
+
+	if(syslogVerbose && use_syslog)
+	    syslog(LOG_DEBUG, _("%s: clamfi_envrcpt: %s, numTo: %d"), privdata->QueueID, argv[0], privdata->numTo);
 
-	cli_dbgmsg("clamfi_envrcpt: %s\n", argv[0]);
+	cli_dbgmsg(_("[%d] %s: clamfi_envrcpt: %s\n"), getpid(), privdata->QueueID, argv[0]);
 
 	if(privdata->to == NULL) {
 		privdata->to = cli_malloc(sizeof(char *) * 2);
@@ -2317,27 +2432,35 @@
 	} else
 		privdata->to = cli_realloc(privdata->to, sizeof(char *) * (privdata->numTo + 2));
 
-	if(privdata->to == NULL)
-		return cl_error;
+	if(privdata->to == NULL) {
+	    clamfi_cleanup(ctx);
+	    return cl_error;
+	}
 
 	privdata->to[privdata->numTo] = strdup(argv[0]);
 	privdata->to[++privdata->numTo] = NULL;
 
 	return SMFIS_CONTINUE;
-}
+} /* clamfi_envrcpt */
 
 static sfsistat
 clamfi_header(SMFICTX *ctx, char *headerf, char *headerv)
 {
 	struct privdata *privdata = (struct privdata *)smfi_getpriv(ctx);
 
-	if(logVerbose)
-		syslog(LOG_DEBUG, "clamfi_header: %s: %s", headerf, headerv);
+        if (!privdata) {
+            if (use_syslog) syslog(LOG_ERR, _("%s: clamfi_header: privdata is NULL, breake"),
+                   smfi_getsymval(ctx, "i"));
+            return cl_error;
+        }
+
+	if(syslogVerbose && use_syslog)
+		syslog(LOG_DEBUG, _("%s: clamfi_header: %s: %s"), privdata->QueueID, headerf, headerv);
 #ifdef	CL_DEBUG
 	if(debug_level >= 9)
-		cli_dbgmsg("clamfi_header: %s: %s\n", headerf, headerv);
+		cli_dbgmsg(_("[%d] %s: clamfi_header: %s: %s\n"), getpid(), privdata->QueueID, headerf, headerv);
 	else
-		cli_dbgmsg("clamfi_header\n");
+		cli_dbgmsg(_("[%d] %s: clamfi_header\n"), getpid(), privdata->QueueID);
 #endif
 
 	/*
@@ -2399,11 +2522,18 @@
 	struct privdata *privdata = (struct privdata *)smfi_getpriv(ctx);
 	char **to;
 
-	if(logVerbose)
-		syslog(LOG_DEBUG, _("clamfi_eoh"));
+	if (!privdata) {
+	    if (use_syslog) syslog(LOG_ERR, _("%s: clamfi_eoh: privdata is NULL, breake"),
+				smfi_getsymval(ctx, "i"));
+	    return cl_error;
+	}
+
+	if(syslogVerbose && use_syslog)
+	    syslog(LOG_DEBUG, _("%s: clamfi_eoh"), privdata->QueueID);
+
 #ifdef	CL_DEBUG
 	if(debug_level >= 4)
-		cli_dbgmsg(_("clamfi_eoh\n"));
+		cli_dbgmsg(_("[%d] %s: clamfi_eoh\n"), getpid(), privdata->QueueID);
 #endif
 
 	/*
@@ -2427,13 +2557,13 @@
 
 		if(gethostname(me, sizeof(me) - 1) < 0) {
 			if(use_syslog)
-				syslog(LOG_WARNING, _("clamfi_eoh: gethostname failed"));
+				syslog(LOG_WARNING, _("%s: clamfi_eoh: gethostname failed"), privdata->QueueID);
 			return SMFIS_CONTINUE;
 		}
 		ptr = strstr(privdata->from, me);
 		if(ptr && (ptr != privdata->from) && (*--ptr == '@')) {
 			if(use_syslog)
-				syslog(LOG_NOTICE, _("Rejected email falsely claiming to be from %s"), privdata->from);
+				syslog(LOG_NOTICE, _("%s: clamfi_eoh: Rejected email falsely claiming to be from %s"), privdata->QueueID, privdata->from);
 			smfi_setreply(ctx, "554", "5.7.1", _("You have claimed to be from me, but you are not"));
 			broadcast(_("Forged local address detected"));
 			clamfi_cleanup(ctx);
@@ -2471,14 +2601,14 @@
 	 * must be on the white list, so just accept the e-mail
 	 */
 	if(use_syslog)
-		syslog(LOG_NOTICE, _("clamfi_eoh: ignoring whitelisted message"));
+		syslog(LOG_NOTICE, _("%s: clamfi_eoh: ignoring whitelisted message"), privdata->QueueID);
 #ifdef	CL_DEBUG
-	cli_dbgmsg(_("clamfi_eoh: ignoring whitelisted message\n"));
+	cli_dbgmsg(_("[%d] %s: clamfi_eoh: ignoring whitelisted message\n"), getpid(), privdata->QueueID);
 #endif
 	clamfi_cleanup(ctx);
 
 	return SMFIS_ACCEPT;
-}
+} /* clamfi_eoh */
 
 static sfsistat
 clamfi_body(SMFICTX *ctx, u_char *bodyp, size_t len)
@@ -2486,10 +2616,17 @@
 	struct privdata *privdata = (struct privdata *)smfi_getpriv(ctx);
 	int nbytes;
 
-	if(logVerbose)
-		syslog(LOG_DEBUG, _("clamfi_envbody: %u bytes"), len);
+	if (!privdata) {
+	    if (use_syslog) syslog(LOG_ERR, _("%s: clamfi_body: privdata is NULL, breake"),
+		smfi_getsymval(ctx, "i"));
+	    return cl_error;
+	}
+
+	if(syslogVerbose && use_syslog)
+	    syslog(LOG_DEBUG, _("%s: clamfi_envbody: %u bytes"), privdata->QueueID, len);
+
 #ifdef	CL_DEBUG
-	cli_dbgmsg(_("clamfi_envbody: %u bytes\n"), len);
+	cli_dbgmsg(_("[%d] %s: clamfi_envbody: %u bytes\n"), getpid(), privdata->QueueID, len);
 #endif
 
 	if(len == 0)	/* unlikely */
@@ -2499,11 +2636,8 @@
 	if(streamMaxLength > 0L) {
 		if(privdata->numBytes > streamMaxLength) {
 			if(use_syslog) {
-				const char *sendmailId = smfi_getsymval(ctx, "i");
-				if(sendmailId == NULL)
-					sendmailId = "Unknown";
 				syslog(LOG_NOTICE, _("%s: Message more than StreamMaxLength (%ld) bytes - not scanned"),
-					sendmailId, streamMaxLength);
+					privdata->QueueID, streamMaxLength);
 			}
 			if(!nflag)
 				smfi_addheader(ctx, "X-Virus-Status", _("Not Scanned - StreamMaxLength exceeded"));
@@ -2529,24 +2663,28 @@
 		}
 	}
 	return SMFIS_CONTINUE;
-}
+} /* clamfi_body */
 
 static sfsistat
 clamfi_eom(SMFICTX *ctx)
 {
 	int rc = SMFIS_CONTINUE;
 	char *ptr;
-	const char *sendmailId;
 	struct privdata *privdata = (struct privdata *)smfi_getpriv(ctx);
 	char mess[128];
 #ifdef	SESSION
 	struct session *session;
 #endif
 
-	if(logVerbose)
-		syslog(LOG_DEBUG, "clamfi_eom");
+	if (!privdata) {
+	    if (use_syslog) syslog(LOG_ERR, _("%s: clamfi_eom: privdata is NULL, breake"),
+					    smfi_getsymval(ctx, "i"));
+	    return cl_error;
+	}
+
+	if(syslogVerbose && use_syslog) syslog(LOG_DEBUG, _("%s: clamfi_eom..."), privdata->QueueID);
 
-	cli_dbgmsg("clamfi_eom\n");
+	cli_dbgmsg(_("[%d] %s: clamfi_eom\n"), getpid(), privdata->QueueID);
 
 	if(!nflag) {
 		/*
@@ -2626,7 +2764,7 @@
 		int nbytes;
 
 		snprintf(cmdbuf, sizeof(cmdbuf) - 1, "SCAN %s", privdata->filename);
-		cli_dbgmsg("clamfi_eom: SCAN %s\n", privdata->filename);
+		cli_dbgmsg("[%d] %s: clamfi_eom: SCAN %s\n", getpid(), privdata->QueueID, privdata->filename);
 
 		nbytes = (int)strlen(cmdbuf);
 
@@ -2636,7 +2774,7 @@
 			perror("send");
 			clamfi_cleanup(ctx);
 			if(use_syslog)
-				syslog(LOG_ERR, _("failed to send SCAN %s command to clamd"), privdata->filename);
+				syslog(LOG_ERR, _("%s: clamfi_eom: failed to send SCAN %s command to clamd"), privdata->QueueID, privdata->filename);
 			return cl_error;
 		}
 #else
@@ -2658,7 +2796,7 @@
 			perror("send");
 			clamfi_cleanup(ctx);
 			if(use_syslog)
-				syslog(LOG_ERR, _("failed to send SCAN command to clamd"));
+				syslog(LOG_ERR, _("%s: clamfi_eom: failed to send SCAN command to clamd"), privdata->QueueID);
 			return cl_error;
 		}
 
@@ -2675,8 +2813,8 @@
 #ifdef	SESSION
 #ifdef	CL_DEBUG
 		if(debug_level >= 4)
-			cli_dbgmsg(_("Waiting to read status from fd %d\n"),
-				session->sock);
+			cli_dbgmsg(_("[%d] %s: clamfi_eom: Wating to read status from fd %d\n"),
+				    getpid(), privdata->QueueID, session->sock);
 #endif
 		nbytes = clamd_recv(session->sock, mess, sizeof(mess) - 1);
 #else
@@ -2687,9 +2825,9 @@
 			if((ptr = strchr(mess, '\n')) != NULL)
 				*ptr = '\0';
 
-			if(logVerbose)
-				syslog(LOG_DEBUG, _("clamfi_eom: read %s"), mess);
-			cli_dbgmsg(_("clamfi_eom: read %s\n"), mess);
+			if(syslogVerbose)
+				syslog(LOG_DEBUG, _("%s: clamfi_eom: read %s"), privdata->QueueID, mess);
+			cli_dbgmsg(_("[%d] %s: clamfi_eom: read %s\n"), getpid(), privdata->QueueID, mess);
 		} else {
 #ifdef	MAXHOSTNAMELEN
 			char hostname[MAXHOSTNAMELEN + 1];
@@ -2706,9 +2844,9 @@
 			 * helps by forcing a retry
 			 */
 			clamfi_cleanup(ctx);
-			syslog(LOG_NOTICE, _("clamfi_eom: read nothing from clamd on %s"), hostname);
+			syslog(LOG_NOTICE, _("%s: clamfi_eom: read nothing from clamd"), privdata->QueueID);
 #ifdef	CL_DEBUG
-			cli_dbgmsg(_("clamfi_eom: read nothing from clamd on %s\n"), hostname);
+			cli_dbgmsg(_("[%d] %s: clamfi_eom: read nothing from clamd\n"), getpid(), privdata->QueueID);
 #endif
 #ifdef	SESSION
 			pthread_mutex_lock(&sstatus_mutex);
@@ -2729,10 +2867,6 @@
 #endif
 	}
 
-	sendmailId = smfi_getsymval(ctx, "i");
-	if(sendmailId == NULL)
-		sendmailId = "Unknown";
-
 	if(!nflag) {
 		char buf[1024];
 
@@ -2810,8 +2944,8 @@
 			 * Clamd has stopped on StreamMaxLength before us
 			 */
 			if(use_syslog)
-				syslog(LOG_NOTICE, _("%s: Message more than StreamMaxLength (%ld) bytes - not scanned"),
-					sendmailId, streamMaxLength);
+				syslog(LOG_NOTICE, _("%s: clamfi_eom: Message more than StreamMaxLength (%ld) bytes - not scanned"),
+					privdata->QueueID, streamMaxLength);
 			if(!nflag)
 				smfi_addheader(ctx, "X-Virus-Status", _("Not Scanned - StreamMaxLength exceeded"));
 			clamfi_cleanup(ctx);	/* not needed, but just to be safe */
@@ -2820,9 +2954,9 @@
 		if(!nflag)
 			smfi_addheader(ctx, "X-Virus-Status", _("Not Scanned"));
 
-		cli_warnmsg("%s: %s\n", sendmailId, mess);
+		cli_warnmsg(_("[%d] %s: clamfi_eom: %s\n"), getpid(), privdata->QueueID, mess);
 		if(use_syslog)
-			syslog(LOG_ERR, "%s: %s\n", sendmailId, mess);
+			syslog(LOG_ERR, _("%s: clamfi_eom: %s\n"), privdata->QueueID, mess);
 		rc = cl_error;
 	} else if((ptr = strstr(mess, "FOUND")) != NULL) {
 		/*
@@ -2852,7 +2986,7 @@
 		}
 
 		if(quarantine_dir)
-			qfile(privdata, sendmailId, virusname);
+			qfile(privdata, privdata->QueueID, virusname);
 
 		if(use_syslog) {
 			/*
@@ -2898,11 +3032,11 @@
 
 			/* Include the sendmail queue ID in the log */
 			if((ptr = smfi_getsymval(ctx, "{_}")) != NULL)
-				syslog(LOG_NOTICE, "%s: clamfi_eom: %s %s %s", sendmailId, mess, ptr, err);
+				syslog(LOG_NOTICE, "%s: clamfi_eom: %s %s %s", privdata->QueueID, mess, ptr, err);
 			else
-				syslog(LOG_NOTICE, "%s: clamfi_eom: %s %s", sendmailId, mess, err);
+				syslog(LOG_NOTICE, "%s: clamfi_eom: %s %s", privdata->QueueID, mess, err);
 #ifdef	CL_DEBUG
-			cli_dbgmsg("%s", err);
+			cli_dbgmsg("[%d] %s: clamfi_eom: %s %s\n", getpid(), privdata->QueueID, mess, err);
 #endif
 			free(err);
 		}
@@ -2910,6 +3044,7 @@
 		if(!qflag) {
 			char cmd[128];
 			FILE *sendmail;
+			int ret;
 
 			/*
 			 * If the oflag is given this sendmail command
@@ -2980,7 +3115,7 @@
 						 * some useful information
 						 */
 						fprintf(sendmail, _("The message %1$s sent from %2$s to\n"),
-							sendmailId, privdata->from);
+							privdata->QueueID, privdata->from);
 					else
 						fprintf(sendmail, _("A message sent from %s to\n"),
 							privdata->from);
@@ -3014,12 +3149,16 @@
 
 				}
 
-				cli_dbgmsg("Waiting for %s to finish\n", cmd);
-				if(pclose(sendmail) != 0)
+                		cli_dbgmsg("[%d] %s: clamfi_eom: Waiting for %s to finish\n",
+					    getpid(), privdata->QueueID, cmd);
+				ret=pclose(sendmail);
+				if(ret)
 					if(use_syslog)
-						syslog(LOG_ERR, "%s: Failed to notify clamAV interception - see dead.letter", sendmailId);
+                            		    syslog(LOG_ERR, "%s: clamfi_eom: Failed to notify clamAV interception - see dead.letter (pclose error: %s)",
+                                        	    privdata->QueueID, strerror(ret));
 			} else if(use_syslog)
-				syslog(LOG_WARNING, _("Can't execute '%s' to send virus notice"), cmd);
+                		    syslog(LOG_WARNING, _("%s: clamfi_eom: Can't execute '%s' to send virus notice"),
+                    			    privdata->QueueID, cmd);
 		}
 
 		if(quarantine_dir) {
@@ -3046,14 +3185,18 @@
 			 */
 			if(smfi_addrcpt(ctx, quarantine) == MI_FAILURE) {
 				if(use_syslog)
-					syslog(LOG_ERR, _("Can't set quarantine user %s"), quarantine);
+					syslog(LOG_DEBUG, _("%s: clamfi_eom: Can't set quarantine user %s"),
+					    privdata->QueueID, quarantine);
 				else
-					cli_warnmsg(_("Can't set quarantine user %s\n"), quarantine);
+					cli_warnmsg(_("[%d] %s: clamfi_eom: Can't set quarantine user %s\n"),
+					    getpid(), privdata->QueueID, quarantine);
 				rc = (privdata->discard) ? SMFIS_DISCARD : SMFIS_REJECT;
 			} else {
 				if(use_syslog)
-					syslog(LOG_DEBUG, "Redirected virus to %s", quarantine);
-				cli_dbgmsg("Redirected virus to %s\n", quarantine);
+					syslog(LOG_DEBUG, _("%s: clamfi_eom: Redirected virus to %s"),
+						privdata->QueueID, quarantine);
+				cli_dbgmsg(_("[%d] %s: clamfi_eom: Redirected virus to %s\n"),
+				    getpid(), privdata->QueueID, quarantine);
 				setsubject(ctx, virusname);
 			}
 		} else if(advisory)
@@ -3077,8 +3220,8 @@
 		if(!nflag)
 			smfi_addheader(ctx, "X-Virus-Status", _("Unknown"));
 		if(use_syslog)
-			syslog(LOG_ERR, _("%s: incorrect message \"%s\" from clamd"),
-				sendmailId,
+			syslog(LOG_ERR, _("%s: clamfi_eom: incorrect message \"%s\" from clamd"),
+				privdata->QueueID,
 				mess);
 		rc = cl_error;
 	} else {
@@ -3087,8 +3230,8 @@
 
 		if(use_syslog && logClean)
 			/* Include the sendmail queue ID in the log */
-			syslog(LOG_NOTICE, _("%s: clean message from %s"),
-				sendmailId,
+			syslog(LOG_NOTICE, _("%s: clamfi_eom: clean message from %s"),
+				privdata->QueueID,
 				(privdata->from) ? privdata->from : _("an unknown sender"));
 
 		if(privdata->body) {
@@ -3111,57 +3254,116 @@
 	clamfi_cleanup(ctx);
 
 	return rc;
-}
+} /* clamfi_eom */
 
 static sfsistat
 clamfi_abort(SMFICTX *ctx)
 {
+    char *QueueID;
+
+	if (ctx) QueueID = smfi_getsymval(ctx, "i");
+	else QueueID = NoQueueID;
+
 #ifdef	CL_DEBUG
-	if(logVerbose)
-		syslog(LOG_DEBUG, "clamfi_abort");
+	cli_dbgmsg(_("[%d] %s: clamfi_abort\n"), getpid(), QueueID);
 #endif
 
-	cli_dbgmsg("clamfi_abort\n");
+
+	if (syslogVerbose && use_syslog)
+	    syslog(LOG_DEBUG, _("%s: clamfi_abort: processig of message termitated"), QueueID);
+
 
 	clamfi_cleanup(ctx);
 
-	cli_dbgmsg("clamfi_abort returns\n");
+	cli_dbgmsg(_("[%d] %s: clamfi_abort returns\n"), getpid(), QueueID);
 
 	return cl_error;
-}
+} /* clamfi_abort */
 
 static sfsistat
 clamfi_close(SMFICTX *ctx)
 {
-	struct privdata *privdata = (struct privdata *)smfi_getpriv(ctx);
+    struct privdata *privdata = (struct privdata *)smfi_getpriv(ctx);
+    /* static declaration QueueID for disuse memory allocation functions on exit */
+    char QueueID[40] = "00000000000000";
+
+    cli_dbgmsg(_("[%d] %s: clamfi_close: started, privdata = %p\n"), getpid(), smfi_getsymval(ctx, "i"), privdata);
+
+    if (!privdata) {
+	if(!oflag) {
+	    if (syslogVerbose && use_syslog)
+		syslog(LOG_DEBUG, _("%s: clamfi_close: privdata is NULL, not scanning outgoing messages"),
+		    smfi_getsymval(ctx, "i"));
+	} else {
+	    if (use_syslog) syslog(LOG_ERR, _("%s: clamfi_close: privdata is NULL"),
+		smfi_getsymval(ctx, "i"));
+	}
+    } else {
 
-	cli_dbgmsg("clamfi_close\n");
-	if(privdata != NULL)
-		clamfi_cleanup(ctx);
+	if(privdata->ConnectQueueID) {
+	    strncpy(QueueID, privdata->ConnectQueueID, 38);
+	    QueueID[39] = 0;
+	}
 
-	if(logVerbose)
-		syslog(LOG_DEBUG, "clamfi_close");
+	/* Cleanup  connection data */
+	if (privdata->helo) {
+	    if(syslogVerbose && use_syslog) syslog(LOG_DEBUG, _("%s: clamfi_close: clear helo data (helo: %s)"),
+							    QueueID, privdata->helo);
+	    free(privdata->helo);
+	    privdata->helo = NULL;
+	}
 
-	return SMFIS_CONTINUE;
-}
+	if (privdata->ConnectQueueID) {
+	    if(syslogVerbose && use_syslog) syslog(LOG_DEBUG, _("%s: clamfi_close: clear ConnectMesgID data"),
+							    QueueID);
+	    free(privdata->ConnectQueueID);
+	    privdata->ConnectQueueID = NULL;
+	}
+	/* Cleanup  connection data end */
+#ifdef	CL_DEBUG
+	if(debug_level >= 9)
+	    cli_dbgmsg(_("[%d] %s: clamfi_close: Free privdata\n"), getpid(), QueueID);
+#endif
+	free(privdata);
+	privdata = NULL;
+	smfi_setpriv(ctx, NULL);
+    }
+
+    if(syslogVerbose && use_syslog) {
+	if(!oflag) syslog(LOG_DEBUG, _("%s: clamfi_close."), smfi_getsymval(ctx, "i"));
+	else syslog(LOG_DEBUG, _("%s: clamfi_close."), QueueID);
+    }
+
+    cli_dbgmsg(_("[%d] %s: clamfi_close: ...end\n"), getpid(), QueueID);
+
+    return SMFIS_CONTINUE;
+
+} /* clamfi_close */
 
 static void
 clamfi_cleanup(SMFICTX *ctx)
 {
 	struct privdata *privdata = (struct privdata *)smfi_getpriv(ctx);
 
-	cli_dbgmsg("clamfi_cleanup\n");
+	cli_dbgmsg(_("[%d] clamfi_cleanup\n"), getpid());
 
 	if(privdata) {
-		clamfi_free(privdata);
-		smfi_setpriv(ctx, NULL);
+		clamfi_free_msgdata(privdata);
 	}
-}
+} /* clamfi_cleanup */
 
 static void
-clamfi_free(struct privdata *privdata)
+clamfi_free_msgdata(struct privdata *privdata)
 {
-	cli_dbgmsg("clamfi_free\n");
+    /* static declaration QueueID for disuse memory allocation functions on exit */
+    char QueueID[40] = "00000000000000";
+
+	if(privdata->QueueID) {
+	    strncpy(QueueID, privdata->QueueID, 38);
+	    QueueID[39] = 0;
+	}
+
+	cli_dbgmsg(_("[%d] %s: clamfi_free\n"), getpid(), QueueID);
 
 	if(privdata) {
 #ifdef	SESSION
@@ -3184,8 +3386,8 @@
 				perror(privdata->filename);
 				if(use_syslog)
 					syslog(LOG_ERR,
-						_("Can't remove clean file %s"),
-						privdata->filename);
+						_("%s: clamfi_free_msgdata: Can't remove clean file %s"),
+						QueueID, privdata->filename);
 			}
 			free(privdata->filename);
 			privdata->filename = NULL;
@@ -3194,7 +3396,7 @@
 		if(privdata->from) {
 #ifdef	CL_DEBUG
 			if(debug_level >= 9)
-				cli_dbgmsg("Free privdata->from\n");
+				cli_dbgmsg(_("[%d] %s: clamfi_free_msgdata: Free privdata->from\n"), getpid(), QueueID);
 #endif
 			free(privdata->from);
 			privdata->from = NULL;
@@ -3215,17 +3417,19 @@
 			for(to = privdata->to; *to; to++) {
 #ifdef	CL_DEBUG
 				if(debug_level >= 9)
-					cli_dbgmsg("Free *privdata->to\n");
+					li_dbgmsg(_("[%d] %s: clamfi_free_msgdata: Free *privdata->to\n"), getpid(), QueueID);
 #endif
 				free(*to);
 			}
 #ifdef	CL_DEBUG
 			if(debug_level >= 9)
-				cli_dbgmsg("Free privdata->to\n");
+				cli_dbgmsg(_("[%d] %s: clamfi_free_msgdata: Free privdata->to\n"), getpid(), QueueID);
 #endif
 			free(privdata->to);
 			privdata->to = NULL;
 		}
+		
+		privdata->numTo = 0;
 
 		if(external) {
 #ifdef	SESSION
@@ -3242,8 +3446,8 @@
 					char buf[64];
 					const int fd = session->sock;
 
-					cli_dbgmsg("clamfi_free: flush server %d fd %d\n",
-						privdata->serverNumber, fd);
+					cli_dbgmsg(_("[%d] %s: clamfi_free_msgdata: flush server %d fd %d\n"),
+						getpid(), QueueID, privdata->serverNumber, fd);
 
 					/*
 					 * FIXME: whenever this code gets
@@ -3283,21 +3487,25 @@
 			 */
 			cl_free(privdata->root);
 
-		if(privdata->headers)
+		if(privdata->headers) {
 			header_list_free(privdata->headers);
+			privdata->headers = NULL;
+		}
 
-#ifdef	CL_DEBUG
-		if(debug_level >= 9)
-			cli_dbgmsg("Free privdata\n");
-#endif
-		if(privdata->received)
+		if (privdata->QueueID) {
+			free(privdata->QueueID);
+			privdata->QueueID = NULL;
+		}
+
+		if(privdata->received) {
 			free(privdata->received);
-		free(privdata);
+			privdata->received = NULL;
+		}
 	}
 
 	if(max_children > 0) {
 		pthread_mutex_lock(&n_children_mutex);
-		cli_dbgmsg("clamfi_free: n_children = %d\n", n_children);
+		cli_dbgmsg(_("[%d] %s: clamfi_free_msgdata: n_children = %d\n"), getpid(), QueueID, n_children);
 		/*
 		 * Deliberately errs on the side of broadcasting too many times
 		 */
@@ -3308,15 +3516,15 @@
 					perror("pthread_cond_broadcast");
 			}
 #ifdef	CL_DEBUG
-		cli_dbgmsg("pthread_cond_broadcast\n");
+		cli_dbgmsg(_("[%d] %s: clamfi_free_msgdata: pthread_cond_broadcast\n"), getpid(), QueueID);
 #endif
 		if(pthread_cond_broadcast(&n_children_cond) < 0)
 			perror("pthread_cond_broadcast");
-		cli_dbgmsg("<n_children = %d\n", n_children);
+		cli_dbgmsg(_("[%d] %s: clamfi_free_msgdata: <n_children = %d\n"), getpid(), QueueID, n_children);
 		pthread_mutex_unlock(&n_children_mutex);
 	}
-	cli_dbgmsg("clamfi_free returns\n");
-}
+	cli_dbgmsg(_("[%d] %s: clamfi_free returns\n"), getpid(), QueueID);
+} /* clamfi_free_msgdata */
 
 /*
  * Returns < 0 for failure, otherwise the number of bytes sent
@@ -3354,8 +3562,8 @@
 		time(&t);
 		tm = localtime(&t);
 
-		cli_dbgmsg("%d:%d:%d clamfi_send: len=%u bufsiz=%u, fd=%d\n",
-			tm->tm_hour, tm->tm_min, tm->tm_sec, len,
+		cli_dbgmsg(_("[%d] %d:%d:%d clamfi_send: len=%u bufsiz=%u, fd=%d\n"),
+			getpid(), tm->tm_hour, tm->tm_min, tm->tm_sec, len,
 			sizeof(output), privdata->dataSocket);
 	}
 #endif
@@ -3611,9 +3819,9 @@
 
 #ifdef	CL_DEBUG
 	if((debug_level > 0) && use_syslog)
-		syslog(LOG_DEBUG, "connect2clamd");
+		syslog(LOG_DEBUG, "%s: connect2clamd ...", privdata->QueueID);
 	if(debug_level >= 4)
-		cli_dbgmsg("connect2clamd\n");
+		cli_dbgmsg("[%d] %s: connect2clamd ...\n", getpid(), privdata->QueueID);
 #endif
 
 	if(quarantine_dir || tmpdir) {	/* store message in a temporary file */
@@ -3636,7 +3844,8 @@
 #endif
 			perror(dir);
 			if(use_syslog)
-				syslog(LOG_ERR, _("mkdir %s failed"), dir);
+				syslog(LOG_ERR, _("%s: connect2clamd: mkdir %s failed"), privdata->QueueID, dir);
+				
 			return 0;
 		}
 		privdata->filename = (char *)cli_malloc(strlen(dir) + 12);
@@ -3648,7 +3857,7 @@
 #else
 			if(mktemp(privdata->filename) == NULL) {
 				if(use_syslog)
-					syslog(LOG_ERR, _("mktemp %s failed"), privdata->filename);
+					syslog(LOG_ERR, _("%s: connect2clamd: mktemp %s failed"), privdata->QueueID, privdata->filename);
 				return 0;
 			}
 			privdata->dataSocket = open(privdata->filename, O_CREAT|O_EXCL|O_WRONLY|O_TRUNC, 0600);
@@ -3658,11 +3867,11 @@
 		if(privdata->dataSocket < 0) {
 			perror(privdata->filename);
 			if(use_syslog)
-				syslog(LOG_ERR, _("Temporary quarantine file %s creation failed"), privdata->filename);
+				syslog(LOG_ERR, _("%s: connect2clamd: Temporary quarantine file %s creation failed"), privdata->QueueID, privdata->filename);
 			return 0;
 		}
 		privdata->serverNumber = 0;
-		cli_dbgmsg("Saving message to %s to scan later\n", privdata->filename);
+		cli_dbgmsg("[%d] %s: connect2clamd: Saving message to %s to scan later\n", getpid(), privdata->QueueID, privdata->filename);
 	} else {	/* communicate to clamd */
 		int freeServer, nbytes;
 		struct sockaddr_in reply;
@@ -3736,7 +3945,7 @@
 		if(serverIPs[freeServer] == (int)inet_addr("127.0.0.1")) {
 			privdata->filename = cli_gentemp(NULL);
 			if(privdata->filename) {
-				cli_dbgmsg("connect2clamd(%d): creating %s\n", freeServer, privdata->filename);
+				cli_dbgmsg("[%d] %s: connect2clamd(%d): creating %s\n", getpid(), privdata->QueueID, freeServer, privdata->filename);
 #ifdef	O_TEXT
 				privdata->dataSocket = open(privdata->filename, O_WRONLY|O_CREAT|O_EXCL|O_TRUNC|O_TEXT, 0600);
 #else
@@ -3750,7 +3959,7 @@
 					return sendToFrom(privdata);
 			}
 		}
-		cli_dbgmsg("connect2clamd(%d): STREAM\n", freeServer);
+		cli_dbgmsg("[%d] %s: connect2clamd(%d): STREAM\n", getpid(), privdata->QueueID, freeServer);
 
 		session = &sessions[freeServer];
 		if((session->sock < 0) || (send(session->sock, "STREAM\n", 7, 0) < 7)) {
@@ -3758,11 +3967,11 @@
 			pthread_mutex_lock(&sstatus_mutex);
 			session->status = CMDSOCKET_DOWN;
 			pthread_mutex_unlock(&sstatus_mutex);
-			cli_warnmsg("Failed sending stream to server %d (fd %d) errno %d\n",
-				freeServer, session->sock, errno);
+			cli_warnmsg("[%d] %s: connect2clamd: Failed sending stream to server %d (fd %d) errno %d\n",
+				getpid(), privdata->QueueID, freeServer, session->sock, errno);
 			if(use_syslog)
-				syslog(LOG_ERR, _("failed to send STREAM command clamd server %d"),
-					freeServer);
+				syslog(LOG_ERR, _("[%d] %s: connect2clamd: failed to send STREAM command clamd server %d"),
+					getpid(), privdata->QueueID, freeServer);
 
 			return 0;
 		}
@@ -3770,7 +3979,7 @@
 		if(send(privdata->cmdSocket, "STREAM\n", 7, 0) < 7) {
 			perror("send");
 			if(use_syslog)
-				syslog(LOG_ERR, _("failed to send STREAM command clamd"));
+				syslog(LOG_ERR, _("%s: connect2clamd: failed to send STREAM command clamd"), privdata->QueueID);
 			return 0;
 		}
 		shutdown(privdata->cmdSocket, SHUT_WR);
@@ -3782,7 +3991,7 @@
 		if((privdata->dataSocket = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
 			perror("socket");
 			if(use_syslog)
-				syslog(LOG_ERR, _("failed to create TCPSocket to talk to clamd"));
+				syslog(LOG_ERR, _("%s: connect2clamd: failed to create TCPSocket to talk to clamd"), privdata->QueueID);
 			return 0;
 		}
 
@@ -3794,11 +4003,11 @@
 			if(nbytes < 0) {
 				perror("recv");
 				if(use_syslog)
-					syslog(LOG_ERR, _("recv failed from clamd getting PORT"));
+					syslog(LOG_ERR, _("%s: connect2clamd: recv failed from clamd getting PORT"), privdata->QueueID);
 				cli_warnmsg("Failed get PORT from server %d (fd %d) errno %d\n",
 					freeServer, session->sock, errno);
 			} else if(use_syslog)
-				syslog(LOG_ERR, _("EOF from clamd getting PORT"));
+				syslog(LOG_ERR, _("%s: connect2clamd: EOF from clamd getting PORT"), privdata->QueueID);
 			pthread_mutex_lock(&sstatus_mutex);
 			session->status = CMDSOCKET_DOWN;
 			pthread_mutex_unlock(&sstatus_mutex);
@@ -3810,9 +4019,9 @@
 			if(nbytes < 0) {
 				perror("recv");
 				if(use_syslog)
-					syslog(LOG_ERR, _("recv failed from clamd getting PORT"));
+					syslog(LOG_ERR, _("%s: connect2clamd: recv failed from clamd getting PORT"), privdata->QueueID);
 			} else if(use_syslog)
-				syslog(LOG_ERR, _("EOF from clamd getting PORT"));
+				syslog(LOG_ERR, _("%s: connect2clamd: EOF from clamd getting PORT"), privdata->QueueID);
 			return 0;
 		}
 #endif
@@ -3823,11 +4032,11 @@
 #endif
 		if(sscanf(buf, "PORT %hu\n", &p) != 1) {
 			if(use_syslog)
-				syslog(LOG_ERR, _("Expected port information from clamd, got '%s'"),
-					buf);
+				syslog(LOG_ERR, _("%s: connect2clamd: Expected port information from clamd, got '%s'"),
+					privdata->QueueID, buf);
 			else
-				cli_warnmsg(_("Expected port information from clamd, got '%s'\n"),
-					buf);
+				cli_warnmsg(_("[%d] %s: connect2clamd: Expected port information from clamd, got '%s'\n"),
+					getpid(), privdata->QueueID, buf);
 #ifdef	SESSION
 			session->status = CMDSOCKET_DOWN;
 			pthread_mutex_unlock(&sstatus_mutex);
@@ -3846,11 +4055,11 @@
 #ifdef	CL_DEBUG
 		if(debug_level >= 4)
 #ifdef	SESSION
-			cli_dbgmsg(_("Connecting to local port %d - data %d cmd %d\n"),
-				p, privdata->dataSocket, session->sock);
+			cli_dbgmsg(_("[%d] %s: connect2clamd: Connecting to local port %d - data %d cmd %d\n"),
+				getpid(), privdata->QueueID, p, privdata->dataSocket, session->sock);
 #else
-			cli_dbgmsg(_("Connecting to local port %d - data %d cmd %d\n"),
-				p, privdata->dataSocket, privdata->cmdSocket);
+			cli_dbgmsg(_("[%d] %s: connect2clamd: Connecting to local port %d - data %d cmd %d\n"),
+				getpid(), privdata->QueueID, p, privdata->dataSocket, privdata->cmdSocket);
 #endif
 #endif
 
@@ -3864,10 +4073,12 @@
 #ifdef HAVE_STRERROR_R
 				strerror_r(errno, buf, sizeof(buf));
 				syslog(LOG_ERR,
-					_("Failed to connect to port %d given by clamd: %s"),
-					p, buf);
+					_("%s: connect2clamd: Failed to connect to port %d given by clamd: %s"),
+					privdata->QueueID, p, buf);
 #else
-				syslog(LOG_ERR, _("Failed to connect to port %d given by clamd: %s"), p, strerror(errno));
+				syslog(LOG_ERR,
+					_("%s: connect2clamd: Failed to connect to port %d given by clamd: %s"),
+					privdata->QueueID, p, strerror(errno));
 #endif
 			}
 #ifdef	SESSION
@@ -3882,10 +4093,10 @@
 	if(!sendToFrom(privdata))
 		return 0;
 
-	cli_dbgmsg("connect2clamd: serverNumber = %d\n", privdata->serverNumber);
+	cli_dbgmsg("[%d] %s: connect2clamd: serverNumber = %d\n", getpid(), privdata->QueueID, privdata->serverNumber);
 
 	return 1;
-}
+} /* connect2clamd */
 
 /*
  * Combine the To and From into one clamfi_send to save bandwidth
 
дизайн и разработка: Vladimir Lettiev aka crux © 2004-2005, Andrew Avramenko aka liks © 2007-2008
текущий майнтейнер: Michael Shigorin