* Exim - an Internet mail transport agent *
*************************************************/
-/* Copyright (c) Tom Kistner <tom@duncanthrax.net> 2003-2014 */
+/* Copyright (c) Tom Kistner <tom@duncanthrax.net> 2003 - 2015 */
/* License: GPL */
/* Code for calling virus (malware) scanners. Called from acl.c. */
cd->retry = 0;
while ((s = string_nextinlist(&optstr, subsep, NULL, 0)))
- {
if (Ustrncmp(s, "retry=", 6) == 0)
{
int sec = readconf_readtime((s += 6), '\0', FALSE);
}
else
return FAIL;
- }
+return OK;
}
/*************************************************
for (;;)
{
- errno = ETIME;
+ errno = ETIMEDOUT;
i = av_buffer+sizeof(av_buffer)-p;
if ((bread= ip_recv(sock, p, i-1, tmo-time(NULL))) < 0)
return m_errlog_defer_3(scanent,
string_sprintf("unable to read result (%s)", strerror(errno)),
sock);
- for (p[bread] = '\0'; q = strchr(p, '\n'); p = q+1)
+ for (p[bread] = '\0'; q = Ustrchr(p, '\n'); p = q+1)
{
*q = '\0';
sizeof(linebuffer), tmo)))
{
if (rcnt < 0)
+ {
+ int err = errno;
if (rcnt == -1)
break;
- else
- {
- int err = errno;
- (void) pclose(scanner_out);
- signal(SIGCHLD,eximsigchld); signal(SIGPIPE,eximsigpipe);
- return m_errlog_defer(scanent, string_sprintf(
- "unable to read from scanner (%s): %s",
- commandline, strerror(err)));
- }
+ (void) pclose(scanner_out);
+ signal(SIGCHLD,eximsigchld); signal(SIGPIPE,eximsigpipe);
+ return m_errlog_defer(scanent, string_sprintf(
+ "unable to read from scanner (%s): %s",
+ commandline, strerror(err)));
+ }
if (Ustrlen(linebuffer) > fwrite(linebuffer, 1, Ustrlen(linebuffer), scanner_record))
{
* WITH_OLD_CLAMAV_STREAM is defined.
* See Exim bug 926 for details. */
- uschar *p, *vname, *result_tag, *response_end;
+ uschar *p, *vname, *result_tag;
int bread=0;
uschar * file_name;
uschar av_buffer[1024];
string_sprintf("missing port: '%s'", scanner_options));
continue;
}
- cd->tcp_port = atoi(s);
+ cd->tcp_port = atoi(CS s);
/* parse options */
/*XXX should these options be common over scanner types? */
while (isspace(*--p) && (p > av_buffer))
*p = '\0';
if (*p) ++p;
- response_end = p;
/* colon in returned output? */
- if((p = Ustrchr(av_buffer,':')) == NULL)
+ if(!(p = Ustrchr(av_buffer,':')))
return m_errlog_defer(scanent, string_sprintf(
"ClamAV returned malformed result (missing colon): %s",
av_buffer));