fix download problems with some proxy servers

git-svn: trunk@976
remotes/push_mirror/metadata
Tomasz Kojm 21 years ago
parent 50ecf68322
commit f9da20cc4f
  1. 1
      clamav-devel/AUTHORS
  2. 5
      clamav-devel/ChangeLog
  3. 37
      clamav-devel/freshclam/manager.c

@ -112,6 +112,7 @@ David S. Madole <david*madole.net>
Joe Maimon <jmaimon*ttec.com>
Andrey V. Malyshev <amal*krasn.ru>
Everton da Silva Marques <everton*lab.ipaccess.diveo.net.br>
Alexander Marx <mad-ml*madness.at>
Andrey J. Melnikoff <temnota*kmv.ru>
Damian Menscher <menscher*uiuc.edu>
Denis De Messemacker <ddm*clamav.net>

@ -1,3 +1,8 @@
Wed Oct 6 20:48:17 CEST 2004 (tk)
----------------------------------
* freshclam/manager.c: fix download problems with some proxy servers
(patch by Alexander Marx <mad-ml*madness.at>)
Wed Oct 6 18:25:46 CEST 2004 (tk)
----------------------------------
* libclamav/pe.c: do not report I/O error for small files with empty

@ -599,24 +599,21 @@ int get_database(const char *dbfile, int socketfd, const char *file, const char
free(remotename);
free(authorization);
if ((bread = recv(socketfd, buffer, FILEBUFF, 0)) == -1) {
mprintf("@Error while reading database from %s\n", hostname);
close(fd);
unlink(file);
return 52;
}
if ((strstr(buffer, "HTTP/1.1 404")) != NULL) {
mprintf("@%s not found on remote server\n", dbfile);
close(fd);
unlink(file);
return 58;
}
/* read all the http headers */
ch = buffer;
i = 0;
while (1) {
if (*ch == '\n' && *(ch - 1) == '\r' && *(ch - 2) == '\n' && *(ch - 3) == '\r') {
/* recv one byte at a time, until we reach \r\n\r\n */
if(recv(socketfd, buffer + i, 1, 0) == -1) {
mprintf("@Error while reading database from %s\n", hostname);
close(fd);
unlink(file);
return 52;
}
if (i>2 && *ch == '\n' && *(ch - 1) == '\r' && *(ch - 2) == '\n' && *(ch - 3) == '\r') {
ch++;
i++;
break;
@ -625,7 +622,17 @@ int get_database(const char *dbfile, int socketfd, const char *file, const char
i++;
}
write(fd, ch, bread - i);
/* check whether the resource actually existed or not */
if ((strstr(buffer, "HTTP/1.1 404")) != NULL) {
mprintf("@%s not found on remote server\n", dbfile);
close(fd);
unlink(file);
return 58;
}
/* receive body and write it to disk */
while((bread = read(socketfd, buffer, FILEBUFF))) {
write(fd, buffer, bread);
mprintf("Downloading %s [%c]\r", dbfile, rotation[rot]);

Loading…
Cancel
Save