Browse code

freshclam/manager.c: handle empty cdiffs more gently

Tomasz Kojm authored on 2010/02/17 00:27:53
Showing 2 changed files
... ...
@@ -1,3 +1,7 @@
1
+Tue Feb 16 16:27:13 CET 2010 (tk)
2
+---------------------------------
3
+ * freshclam/manager.c: handle empty cdiffs more gently
4
+
1 5
 Sun Feb 14 12:28:52 CET 2010 (acab)
2 6
 -----------------------------------
3 7
  * libclamav: refactor checkfp logic
... ...
@@ -1144,12 +1144,15 @@ static int getfile(const char *srcfile, const char *destfile, const char *hostna
1144 1144
     closesocket(sd);
1145 1145
     close(fd);
1146 1146
 
1147
-    if(bread == -1 || !totaldownloaded) {
1147
+    if(bread == -1) {
1148 1148
 	logg("%cgetfile: Download interrupted: %s (IP: %s)\n", logerr ? '!' : '^', strerror(errno), ipaddr);
1149 1149
 	mirman_update(mdat->currip, mdat->af, mdat, 2);
1150 1150
 	return 52;
1151 1151
     }
1152 1152
 
1153
+    if(!totaldownloaded)
1154
+	return 53;
1155
+
1153 1156
     if(totalsize > 0)
1154 1157
         logg("Downloading %s [%i%%]\n", srcfile, percentage);
1155 1158
     else
... ...
@@ -1250,7 +1253,10 @@ static int getpatch(const char *dbname, const char *tmpdir, int version, const c
1250 1250
 
1251 1251
     logg("*Retrieving http://%s/%s\n", hostname, patch);
1252 1252
     if((ret = getfile(patch, tempname, hostname, ip, localip, proxy, port, user, pass, uas, ctimeout, rtimeout, mdat, logerr, can_whitelist))) {
1253
-        logg("%cgetpatch: Can't download %s from %s\n", logerr ? '!' : '^', patch, hostname);
1253
+	if(ret == 53)
1254
+	    logg("Empty script %s, need to download entire database\n", patch);
1255
+	else
1256
+	    logg("%cgetpatch: Can't download %s from %s\n", logerr ? '!' : '^', patch, hostname);
1254 1257
         unlink(tempname);
1255 1258
         free(tempname);
1256 1259
 	CHDIR_ERR(olddir);
... ...
@@ -1643,7 +1649,8 @@ static int updatedb(const char *dbname, const char *hostname, char *ip, int *sig
1643 1643
 	if(ret) {
1644 1644
 	    cli_rmdirs(tmpdir);
1645 1645
 	    free(tmpdir);
1646
-	    logg("^Incremental update failed, trying to download %s\n", cvdfile);
1646
+	    if(ret != 53)
1647
+		logg("^Incremental update failed, trying to download %s\n", cvdfile);
1647 1648
 	    mirman_whitelist(mdat, 2);
1648 1649
 	    ret = getcvd(cvdfile, newfile, hostname, ip, localip, proxy, port, user, pass, uas, newver, ctimeout, rtimeout, mdat, logerr, can_whitelist);
1649 1650
 	    if(ret) {